Quickcast
A radial menu terminal UI for executing shell scripts ("spells") configured via TOML dotfile. Inspired by Baldur's Gate's quick spell menu.
Features
- Button-Based Radial Menu: Interactive spell buttons arranged in a grid with proper Textual styling
- Mouse & Keyboard Navigation: Click buttons or use arrow keys/WASD to navigate
- Real-time Output: View command execution output in real-time
- TOML Configuration: Define spells in
~/.quickcastrcor~/.config/quickcast/spells.toml - Async Execution: Non-blocking command execution using asyncio
- Theme Support: Respects Textual themes with hover and focus effects
Installation
pip install quickcast
Or install from source:
git clone https://github.com/zorexsalvo/quickcast-tui
cd quickcast-tui
pip install -e .
Quick Start
Create a configuration file at ~/.quickcastrc:
[spell.ls]
name = "List Files"
command = "ls -la"
description = "List files in current directory"
[spell.whoami]
name = "Who Am I"
command = "whoami"
description = "Show current user"
Then run:
python3 -m quickcast.app
Navigate the menu with your mouse or arrow keys, click/press Enter to execute a spell.
User Interface
The menu uses interactive Textual button widgets arranged in a 5×5 grid:
┌────────────────────────────┐
│ 👤 📁 🕐 📋 💾 │
│ 🌐 ⚙️ ⚡ 🔥 │
│ 📊 [CENTER] 🎯 💻│
│ 🔧 📝 🚀 🛠️ 🔄 │
│ 💾 🎵 📞 ⌨️ 🖱️ │
├────────────────────────────┤
│ 🎯 Who Am I — Show user │
└────────────────────────────┘
Features:
- Spell buttons with emoji icons and names
- Click any button to select and execute
- Hover effects for visual feedback
- Selected button shows with primary styling
- Information panel shows current selection
- Keyboard navigation with arrow keys/WASD
- Theme support with responsive colors
For more details, see RADIAL_MENU_DEMO.txt.
Configuration
File Locations
The application looks for configuration in this order:
~/.quickcastrc~/.config/quickcast/spells.toml
Spell Definition
Each spell is defined as a TOML section:
[spell.unique_id]
name = "Display Name"
command = "shell command to execute"
description = "Optional description"
icon = "🎯" # Optional emoji icon
Example Configuration
[spell.git_status]
name = "Git Status"
command = "git status"
description = "Check git repository status"
icon = "📊"
[spell.disk_usage]
name = "Disk Usage"
command = "df -h"
description = "Show disk usage"
icon = "💾"
[spell.cpu_load]
name = "CPU Load"
command = "top -l 1 | head -n 4"
description = "Show CPU load"
icon = "⚙️"
Controls
- Mouse: Click on a spell to execute
- Arrow Keys / WASD: Navigate the menu
- Enter / Space: Execute selected spell
- Q / ESC: Quit application
Development
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Format code
black src/
# Lint
ruff check src/
Architecture
config.py- Configuration loading and parsingspell.py- Spell data modelexecutor.py- Command execution with subprocesswidgets/radial_menu.py- Radial menu widget with buttonswidgets/output.py- Output display widgetapp.py- Main application
License
MIT License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quickcast-0.1.0.tar.gz.
File metadata
- Download URL: quickcast-0.1.0.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6cc80212aebefa4c51084bbb53347fe1dd60af2d3784e4c7ce4d29128319eca8
|
|
| MD5 |
18cce10bd382cdd28846c737a24aad73
|
|
| BLAKE2b-256 |
e197313e37ab734dc78220d75d9c70932d1f636682ad6190aa16e38f203968fa
|
File details
Details for the file quickcast-0.1.0-py3-none-any.whl.
File metadata
- Download URL: quickcast-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18baee99d4eda9ad788a439e34b82eaff26ac6109904d2c8153f9a79254bb74f
|
|
| MD5 |
1ad70e3864bd700af9b02d1c368f04b5
|
|
| BLAKE2b-256 |
f3ab461d65bbdfa4aa744c02128c8647038b34fe97af90174c657283f829c00d
|