Qst, pronounced "quest", is a TUI Linux application launcher built with Rust + Ratatui.
- Fast
.desktopapp scanning and fuzzy search. - Usage/favorites-based ordering.
- Launch arguments support.
- File explorer mode enabled by default.
- Keyboard-first navigation and customization.
- Extensible plugin system with script-based plugins.
qst is the host runtime. Plugins are script-based and live in ~/.config/qst/scripts/. Plugins can define custom triggers, query handling, and output formatting via a simple line-oriented protocol.
Note: qst bundles a helper script, loader.sh, and will install it into ~/.config/qst/scripts/ on first run so users can browse and install community plugins without manually copying files.
Scripts can be executable files (any language) or extension-based scripts run through supported interpreters (.sh, .bash, .zsh, .fish, .py, .pl, .rb, .js, .lua).
The plugin ecosystem is cataloged in awesome-qst:
Install via Nix (recommended):
nix profile install "github:GitanElyon/qst"Or via the AUR (Arch Linux):
yay -S qstOr via Cargo:
cargo install --locked qstOr build from source:
git clone https://github.com/GitanElyon/qst.git
cd qst
cargo install --locked --path .Either run qst from the terminal:
qstYou can also use launch-time flags:
qst --config <path> # points Qst to a new different config file
qst --prefill <string> # seeds the initial search text
qst --shy # opens launcher with text hidden untill query is entered
qst --no-fuzzy # disables fuzzy finding
qst --clear-history # clears Qst's launch history
qst --clear-favorites # clears favorite list
qst --program <program> # launches the first result of the query
qst --script <script> # opens the script on startup
qst --list-programs # lists available programs
qst --list-scripts # lets available scripts
qst --debug-overlay # start with the debug overlay visible
qst --log-level debug # set log level: debug, info, warn, error (default: info)Or bind to a global hotkey (e.g. Super+Space) using your desktop environment's keyboard settings.
Example for hyperland users to mimic rofi:
bind = $mod, space, exec, [float; size 350 400] $terminal -e qst
Up/Down: move selectionLeft/Right: move cursor in inputTab: autocomplete pathEnter: launch/open selected itemEsc: quitAlt+f: toggle favoriteCtrl+d: toggle debug overlay
qst writes logs to ~/.local/state/qst/qst.log with the following format:
[2024-06-15 10:30:45.123] [INFO] [src/app.rs:127] Loaded 17 scripts
| Level | Purpose |
|---|---|
DEBUG |
All actions, user movement, key events, renders |
INFO |
Script loads, program launches, config loaded |
WARN |
Minor errors (parsing issues, script timeouts) |
ERROR |
Fatal errors (script won't load, app crashes) |
Default level is INFO. Configure via --log-level <level> flag or log_level in config.toml ([general] section).
Each qst session starts fresh. The previous session's log is moved to ~/.local/state/qst/sessions/<timestamp>.log automatically.
Press Ctrl+d (or your configured debug_key) to toggle a diagnostic bar at the top of the TUI:
FPS: 60 | Frame: 16.5ms | Entries: 42 | Events: 1234
Shows real-time FPS, frame render time, current entry count, and total key events this session.
The keybinding can be customized in ~/.config/qst/config.toml:
[general]
debug_key = "ctrl+d"Start with the overlay enabled via --debug-overlay.
~/.config/qst/config.toml~/.config/qst/alias.toml(optional script and app aliases)
See DOCS.md for full configuration details.