menus
The interactive menu is a persistent TUI shell (internal/tui/app): a stack
of screens with a breadcrumb header, contextual footer, and a command palette.
This page maps the current flows and how they are tested.
Navigation modelβ
| Key | Action |
|---|---|
ββ / j k | move cursor |
enter / β / l | select / drill in |
esc / β / backspace / h | back (quits at root) |
/ | fuzzy-filter the current menu |
ctrl+p | command palette (fuzzy search over every action) |
? | help overlay |
g / G | first / last item |
q / ctrl+c | quit |
Menu treeβ
All flows render natively inside the shell. (Historical note: items once the shell resumes) β they are candidates for native-screen migration.
graph TD
Home[Home] --> Status["π Status (native scrollable view)"]
Home --> Doctor["π©Ί Doctor (native diagnostics, --fix/--bench via CLI)"]
Home --> Terminal["π» Terminal Setup (Ghostty/WezTerm: install, Dock pin, themed config)"]
Home --> Shell[π Bluefin Shell]
Home --> Install[π¦ Install Apps]
Home --> Wallpapers["πΌ Wallpapers (install collections + set wallpaper on macOS/GNOME/Windows)"]
Home --> Fonts["π€ Fonts (native multiselect)"]
Home --> Starship["π Starship Theme (native select)"]
Home --> Sunset["π Sunset Switching (plus build, WSL/Windows only)"]
Home --> Exit[π Exit]
Shell --> Toggle["π Toggle current shell (auto-detected)"]
Shell --> Components["π§ Configure Components (native multiselect)"]
Shell --> MOTD["π° MOTD Settings (native menu)"]
Shell --> Shells["π Other Shells (native multiselect)"]
Shell --> Advanced["π¨ Advanced (native: dark mode, flavor)"]
Install --> AI["π€ AI Tools"]
Install --> CLI["π» CLI Essentials"]
Install --> CNCF["π CNCF Tools"]
Install --> XIDE["π§ͺ Experimental IDE"]
Install --> IDE["π IDE Tools"]
Install --> K8s["π‘ Kubernetes Tools"]
Install --> Gnome["π§ Full GNOME Desktop (Linux+GNOME only)"]
AI --> Pkg["Per-category package multiselect (native):\ninstalled pre-checked, diff β confirm β runner"]
Install --> MyBrew["π My Brewfile: install all, manage, add via\ncross-manager search, remove, dump"]
The ctrl+p palette lists every leaf destination above (Status, each install
category, Wallpapers, Fonts, Starship, Sunset) β one fuzzy search reaches
anything in the tree.
How this is testedβ
Three layers, run by CI and just recipes:
- Model tests (
internal/tui/app/app_test.go): synchronous, deterministic tests of navigation state β push/pop, cursor movement, filtering, palette, help overlay β plus a direct render assertion on the composed frame. - Menu wiring tests (
cmd/menu_test.go): every menu item and bundle category must resolve to an action, so a menu entry can never silently lead nowhere. - End-to-end smoke (
scripts/tui-smoke.sh,just tui-smoke): drives the real binary in a tmux pane β sends actual keystrokes, captures the screen, and asserts rendering, drill-down, filter, palette, help, and quit.
Native screens & extrasβ
- Every flow renders natively inside the shell: selection UIs are
app.FormScreen, read-only views areapp.TextScreen, and printing tasks (brew installs, MOTD, doctor) run inapp.RunnerScreen, which captures their stdout into a scrolling log with a spinner and elapsed time. The only terminal handover left is the WSLβWindows sunset delegation (app.RunExternal), which launches another interactive program. bluefin-cli doctorβ environment diagnostics with fix hints.bluefin-cli theme <flavor>β pin a Catppuccin flavor (latte, frappe, macchiato, mocha) orautoto follow the terminal background.bluefin-cli updateβ self-update for script installs, now verified against the release'schecksums.txt; the menu also checks for updates in the background and shows a toast.- π¦ Dino Run β hidden runner mini-game on the half-block pixel canvas:
ctrl+pβ "Dino Run", or the hiddenbluefin-cli dinocommand. Space jumps kelp, stay down under fish; high score persists. - π» Terminal Setup β install the platform's best terminal (Ghostty on macOS/Linux via brew, WezTerm on Windows via winget), pin to the macOS Dock, and write a Catppuccin auto light/dark config with your Nerd Font.
- π My Brewfile β one package file for every OS (brew/cask +
winget/scoop/choco): dump from installed, search-to-add across managers,
remove entries, install everything. Also
bluefin-cli brewfile. - π¦ Profiles β
profile export/import/diff/push/pullreplay a whole setup (shells, tools, flavor) across machines, synced via a private gist.