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
Metadata
Release files for quickcast 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| quickcast-0.1.1.tar.gz | 15.4 kB | Without provenance | Details for quickcast-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| quickcast-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for quickcast-0.1.1-py3-none-any.whl |
Total release size: 28.9 kB
Release files / quickcast-0.1.1.tar.gz
| Download URL | quickcast-0.1.1.tar.gz |
|---|---|
| Size | 15.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
969561dc3a3e36aa8dad3fd390d17eb131ab0e5400c245facada85a84dd27877
|
|
BLAKE2b-256 checksum How to use checksums |
1260373a974b8a114b5dbdf7fe370817254a2bef329d632ae7e644e62c366921
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.2
|
Release files / quickcast-0.1.1-py3-none-any.whl
| Download URL | quickcast-0.1.1-py3-none-any.whl |
|---|---|
| Size | 13.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d60ef09eb43f7a1544980388ce529c1b5b64b8552254674f77ac54a33eaeec53
|
|
BLAKE2b-256 checksum How to use checksums |
a9e79cbebf9719c8ff898dd4677c02f1a1fa9d2e42b1ede6b8f56ab05dd46d20
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.2
|
Security for quickcast 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.