fzf-driven terminal app launcher with install management, sudo caching, alias, and keybind setup
Project description
termui
A fzf-driven launcher for your terminal (TUI) apps. Browse your tools, launch them, install what's missing, add your own, and trigger the whole thing with a hotkey.
The command you type/bind is termui; the installable package is called tuil (the name termui was already taken on PyPI).
Linux only. It relies on
sudo, Linux package managers (pacman/apt-get/dnf/zypper/apk),~/.bashrc/~/.config/fish/config.fishfor the alias, and Hyprland/Sway/i3/sxhkd/GNOME for the keybind. It won't run as-is on macOS or Windows.
Requirements
- Python 3.10+
fzfon yourPATHsudo(only touched if you install something through a system package manager)
Install
From a clone of this repo:
pipx install .
(or pip install --break-system-packages -e . for an editable dev install). Either way this gives you a real termui command on your PATH.
Once published, this will also work directly:
pipx install tuil
First run
The first time you run termui, a one-time wizard walks through:
- Package manager detection — detects
pacman,apt-get,dnf,zypper, orapk, and reports how many of the ~30 default tools are already installed. - Preload defaults? — yes seeds the list with common TUI tools, install commands auto-mapped to your detected package manager. No starts you with an empty, custom-only list.
- Alias setup — pick a command name (default
termui), added to~/.bashrcand~/.config/fish/config.fish, whichever exist. - Keybind setup — pick a modifier (
SUPER/CTRL/ALT/SHIFT) and a key. It detects your window manager / desktop and wires up the binding accordingly:Environment Where the bind goes Apply it with Hyprland ~/.config/hypr/hyprland.confhyprctl reloadSway ~/.config/sway/configswaymsg reloadi3 ~/.config/i3/configi3-msg reloadsxhkd (bspwm etc.) ~/.config/sxhkd/sxhkdrcpkill -USR1 sxhkdGNOME custom keybinding via gsettingsworks immediately If none of these are detected, it skips the hotkey and tells you to bind the alias manually in your desktop's shortcut settings. The bind opens whatever terminal it finds on your system ( kitty,alacritty,wezterm,foot,gnome-terminal,konsole, orxterm, in that order, or$TERMINALif set) runningtermui.
This all only runs once, tracked in ~/.config/tuilauncher/state.json. Delete that file to redo the wizard.
Every session
Each launch asks fresh whether to cache sudo for that session (credentials don't persist between runs):
- Yes — one password prompt, then a background keep-alive so installs don't ask again.
- No — installs run normally;
sudoprompts inline whenever a command needs it.
Using the menu
| Option | What it does |
|---|---|
| (any app name) | Launch it if installed, otherwise prompt you to install it |
[34] Install Package |
Pick one missing tool and install it |
[35] Install All |
Install every missing tool in the list |
[36] Add Custom Tool |
Add your own entry — name, run command, install command, category, description |
[00] Quit |
Exit |
Config file
Your app list lives at ~/.config/tuilauncher/apps.csv, pipe-delimited:
name|run_command|install_command|description|category
Edit it by hand if you'd rather skip the [36] Add Custom Tool menu.
Project layout
tuil/
├── pyproject.toml
├── README.md
├── .gitignore
└── src/
└── tuil/
├── __init__.py
└── cli.py
Screenshots

Project details
Release history Release notifications | RSS feed
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 tuil-0.1.0.tar.gz.
File metadata
- Download URL: tuil-0.1.0.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee972a516195bf106440a787faa138fe0f640a2f6618ccc669fb2b56f4aa5311
|
|
| MD5 |
82cd1b11c8100a15a144677d56ec3b3d
|
|
| BLAKE2b-256 |
6959bdb702be6205d4ee7451991fbb08f79719775dc9cfb869133bffaf5319c2
|
File details
Details for the file tuil-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tuil-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb3cbe755203e6e52b0b1a6092508ded631f52e3d1f9fa55a5743555d3ea7a9a
|
|
| MD5 |
57da6c318773e941c1b271f3f41b3d6f
|
|
| BLAKE2b-256 |
a326dd23dc80efdc87d74b4af541aaf41367cfc16ed5a4a4f31629b2a43e7866
|