Skip to main content

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 ~/.quickcastrc or ~/.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:

  1. ~/.quickcastrc
  2. ~/.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 parsing
  • spell.py - Spell data model
  • executor.py - Command execution with subprocess
  • widgets/radial_menu.py - Radial ring menu widget
  • widgets/output.py - Output display widget
  • app.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)

Source distribution for quickcast 0.1.1
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)

Table of built distributions (wheels) for quickcast 0.1.1
File Interpreter ABI Platform Actions
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.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page