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
- Radial Menu: Interactive spell slots arranged in a ring around a central hub
- 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
Spells are drawn as a radial ring around a central hub, inspired by Baldur's Gate's quick spell menu. Each slot shows the spell's emoji icon and name; the hub shows the currently selected spell with a cast hint. An output overlay floats over the ring when a spell runs.
╔════════════╗
║ List Files ║
║ ║
╭────────────╮ ╚════════════╝ ╭────────────╮
│ Memory │·················│ Who Am I │
│ │· · │ │
╰────────────╯ · ╰────────────╯
·· ··· · ··· ··
·· ╔══════════════════╗ ··
· ║ List Files ║ ·
· ║ ───────── ║ ·
╭────────────╮ ║ List files ║ ╭────────────╮
│ Network │···║ ║··│ Disk Usage │
│ │ ║─ Enter to cast ──║ │ │
╰────────────╯ ╚══════════════════╝ ╰────────────╯
·· ·· · ··
··· · · ···
╭────────────╮···╭────────────╮
│ Git Status │ ·│ CPU Load │
│ │ │ │
╰────────────╯ ╰────────────╯
↑↓ navigate Enter cast
Features:
- Spell slots arranged in a ring around a central hub
- Each slot shows an emoji icon and its word-wrapped name
- A dotted ring and spokes connect the ring to the hub
- The active slot is highlighted with a gold double-line border
- The hub shows the selected spell's icon, name, description, and cast hint
- Up to 8 spells per page — browse pages with
[/] - Output overlay appears over the ring while a spell runs
- Click a slot or navigate with arrow keys/WASD to select
- Theme colors adapt to the terminal
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 ring menu widgetwidgets/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.1.tar.gz.
File metadata
- Download URL: quickcast-0.1.1.tar.gz
- Upload date:
- Size: 15.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
969561dc3a3e36aa8dad3fd390d17eb131ab0e5400c245facada85a84dd27877
|
|
| MD5 |
f717087bc5e832c88b573295d4eb9c60
|
|
| BLAKE2b-256 |
1260373a974b8a114b5dbdf7fe370817254a2bef329d632ae7e644e62c366921
|
File details
Details for the file quickcast-0.1.1-py3-none-any.whl.
File metadata
- Download URL: quickcast-0.1.1-py3-none-any.whl
- Upload date:
- Size: 13.5 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 |
d60ef09eb43f7a1544980388ce529c1b5b64b8552254674f77ac54a33eaeec53
|
|
| MD5 |
c0973b6ec8b8604a20693a9048c06ba1
|
|
| BLAKE2b-256 |
a9e79cbebf9719c8ff898dd4677c02f1a1fa9d2e42b1ede6b8f56ab05dd46d20
|