Tmux: popups and tools
This setup includes a few tmux-native popups and helpers to keep your workflow inside tmux.
Command paletteโ
- Binding:
prefixthenr - Purpose: unified fuzzy launcher that surfaces all custom tooling from a single keystroke โ the "Cmd+K" for your terminal.
Sources indexed (in display order, with recency boost):
~/bin/,*commands โ every executable,*script; descriptions are extracted from# Description:header comments when present.- Tmux prefix keybindings โ parsed from
tmux list-keys -T prefix(and thek18swap table) with human-readable labels. - Git aliases โ global
git configaliases shown asgit <alias>. - Drop-in extras โ any
.tsvfiles in~/.config/tmux/palette.d/are appended verbatim (three tab-separated columns: display, key, exec).
Recency tracking:
- Each executed entry is timestamped in
~/.cache/tmux/palette_history.tsv. - On next open, recently used entries float to the top.
Execution model:
,*commands and git aliases: sent to the active pane viatmux send-keys โฆ Enterso the command runs in your shell with full environment context.- Tmux bindings: re-invoked via
tmux send-keys C-Space <key>so the binding fires exactly as if you pressed it.
Options (tmux set -g):
| Option | Default |
|---|---|
@command_palette_popup_height | 60 |
@command_palette_popup_width | 70 |
Extensibility:
- Drop a
.tsvfile into~/.config/tmux/palette.d/with three tab-separated columns per line:<display>\t<unique-key>\t<exec-command>. Entries appear automatically on next palette open.
Popup spawn temporarily overrides default-shell to /bin/sh via command_palette/popup.sh to avoid heavy-shell initialization overhead (~1s with fish).
GitHub picker popupโ
- Binding:
prefixthenG - Switch to session picker:
alt-g
A standalone fzf-based PR/issue picker. It reads PR and issue sections from its own YAML config (~/.config/tmux/scripts/pickers/github/gh-picker.yml) and displays them in fzf with rich preview, worktree markers, and review status badges. gh-dash is not a dependency.
Implementation notes:
- Single
fzfpopup (no nested tmux server). Popup opens at 95%ร95%. - Items are fetched by
gh_items.sh/lib/gh_items_main.py, which parses the gh-picker config file and runs GitHub Search API queries. alt-gcloses the popup and reopens the session picker at its configured dimensions (and vice versa). The close-and-reopen loop lives in the outer wrapper scripts (popup.sh/gh_popup.sh).- Popup spawn temporarily overrides
default-shellto/bin/shto avoid heavy-shell initialization overhead (~1s with fish).
For full keybindings and details, see Tmux GitHub picker.
Repo bootstrap popup (owner/repo -> ,gh-tfork)โ
- Binding:
prefixthenB - Prompts for a GitHub repo spec like
owner/repo, then runs,gh-tfork. ,gh-tforkclones under~/code.- Popup spawn temporarily overrides
default-shellto/bin/shto avoid heavy-shell initialization overhead (~1s with fish).
Lowfi (music in tmux)โ
This setup includes an integration that runs lowfi inside a dedicated tmux session.
- Command:
home/exact_bin/executable_,tmux-lowfi(installs as,tmux-lowfi) - Global keys (no tmux prefix):
F10play/pause,F11skip,F12next tracklist
Tracklist data is pulled via externals into:
~/Library/Application Support/lowfi
See home/.chezmoiexternal.toml.
Verification and troubleshootingโ
tmux -V
tmux list-sessions
command -v ,w
command -v ,tmux-run-all
command -v ,tmux-lowfi
command -v gh
command -v fzf
If tmux config changes are not reflected:
tmux source-file ~/.config/tmux/tmux.conf