Compass — Audio App, Desktop Keybinds & the Duplication Trap¶
Date: 2026-07-06 Session: audio-desktop-keybinds Status: ✅ TESTED (audio + binds) · 🔴 PLANNED (duplication cleanup)
0. TL;DR — the meta-lesson¶
Most of this session's confusion had one root cause: duplicated files across locations, where edits land in a copy nothing loads. Before editing ANY config/script on this box, confirm which copy is authoritative (which one the running process actually reads). See §5 — this is the part that kept making work get "done over again."
1. Audio — the Gaming Headset¶
Hardware/stack (verified):
- USB "Gaming Headset" = ALSA card 2, ID 0c76:1652 JMTek, LLC.
- Stack: PipeWire + pipewire-pulse + wireplumber (control via pactl/wpctl).
- Sinks: onboard alsa_output.pci-0000_00_1b.0.analog-stereo, headset
alsa_output.usb-0c76_Gaming_Headset-00.analog-stereo.
- Mic (default source): alsa_input.usb-0c76_Gaming_Headset-00.mono-fallback.
Original "not working" cause: headset was fine; audio was just routed to the onboard speakers. Fix = set headset as default sink + move streams + unmute.
Persistent one-liner (menu or CLI): pactl set-default-sink alsa_output.usb-0c76_Gaming_Headset-00.analog-stereo
⚠️ Use
127.0.0.1notlocalhostfor proxy tests etc.; unrelated but same "looks dead" trap.
2. ~/scripts/nexus-audio.sh — the combined audio app (NEW, TESTED)¶
One script = the whole audio front door. Plain CLI + a TUI (single-keypress ANSI, not
ncurses). Bare nexus-audio.sh launches the TUI.
Commands: status · fix (revive stack + auto-pick best sink USB>BT>analog) · list ·
out [pick|next|<name|idx>] · in [pick|next|…] · vol <up|down|N> · mute ·
rec [-m mix|tracks] [-f opus|mp3|flac|wav] [-g gain] [-t secs] [-o file].
rec records system audio (default sink .monitor) + mic together — mixed (ffmpeg
amix) or two-track .mkv. Recordings → ~/recordings/.
Folded in (originals KEPT in place, per no-delete): nexus-audio-fix.sh → fix;
volume_control.sh → vol/mute; new mic+system recording → rec.
Also created ~/scripts/nexus-rec.sh (standalone recorder, superseded by nexus-audio.sh rec).
NOTE
nexus-recorder.shis a terminal/asciinema recorder, NOT audio — misleading name.
3. Desktop keybindings (added this session)¶
Added to all four compositor configs (backed up first, *.bak-<ts>):
| Combo | Action | Command |
|---|---|---|
| Ctrl+Alt+S | NeXuS Audio app | foot --app-id=nexus-audio ~/scripts/nexus-audio.sh |
| Super+/ | Desktop keys cheatsheet | foot --app-id=nexus-cheatsheet ~/scripts/nexus-cheatsheet.sh |
- Ctrl+Alt+S chosen because Super+S was taken (sway=stacking, hypr=nibrasshell) and Super+A taken (sway=focus-parent). Ctrl+Alt+S was free on all four.
- Super+/ was already the cheatsheet key on hypr (nibrasshell); added to wayfire/sway/labwc.
Config files & syntax (all four differ):
- ~/.config/wayfire.ini — [command] binding_X = <ctrl> <alt> KEY_S + command_X = …
- ~/.config/sway/config — bindsym Ctrl+Alt+s exec … (⚠️ pre-existing broken line 24: wallpaper
points at a directory, so sway --validate FAILS — unrelated to our edits)
- ~/.config/labwc/rc.xml — <keybind key="C-A-s"><action name="Execute"><command>…
- ~/.config/hypr/binding.conf — bindd = CTRL ALT, S, …, exec, … (mods space-separated)
Daily driver = Wayfire (per user profile). But 4 compositors configured → a binding tested in the wrong one looks "missing."
4. The keybinding map (as-built, live)¶
Wayfire (Super = ⊞): Super+Return foot · Super+D wofi · Ctrl+Alt+S audio · Super+/
cheatsheet · Super+Shift+L lock · Super+Q/Alt+F4 close · Super+H/J/K/L focus ·
Super+arrows grid · Super+T tiling · Super+Tab switcher · Super+E expo · Ctrl+Super+F
fullscreen · PrintScr/Super+PrintScr screenshot.
tmux — prefix Ctrl+Z (or F12):
- Direct: Ctrl+Space popup · Ctrl+=/-/0 popup size · Ctrl+T term · Ctrl+A launcher ·
Alt+U/D/M volume · Alt+H/L window · Alt+J/K pane.
- Prefix+: \ tmux-menus · Space popup · d dashboard · s settings(=wallpaper) ·
n notes · Tab fzf · '/" snippets.
Two different "keys lists" (don't conflate):
- Missing Keys (prefix+\ → M) — tmux-menus built-in, tmux keys only.
- nexus-cheatsheet.sh (Super+/) — desktop/compositor keys. Content is STALE (says
"fuzzel" but Wayfire uses wofi; missing the new binds).
5. ⚠️ THE DUPLICATION TRAP (root cause of all the confusion)¶
tmux-menus exists in THREE diverged copies:
| Path | Live? |
|---|---|
| ~/.config/tmux/plugins/tmux-menus | ✅ LIVE (TMUX_PLUGIN_MANAGER_PATH=~/.config/tmux/plugins/) |
| ~/.tmux/plugins/tmux-menus | ❌ dead copy (I mistakenly edited this first; reverted) |
| ~/01/.tmux/plugins/tmux-menus | ❌ dead copy |
The dead and live copies have different menu structures (different keys, different NeXuS wiring). Editing a dead copy = changes never appear → "do it again."
Nested script dirs: ~/scripts/ and ~/scripts/scripts/ both contain copies of the same
tools (tmux-popup-launcher.sh, volume_control.sh, nexus-play.sh, …). Menus/binds may point at
either; editing the wrong one does nothing.
How Notes/keys are actually wired in the LIVE copy:
- prefix+\ → Extras (E) → NeXuS Notes (n) via scripts/nexus_notes_popup.sh
(tmux display-popup -E -h 85% -w 75% "bash ~/scripts/scripts/nexus-notes.sh").
- Live main menu uses the Custom items mechanism (items/main.sh line ~19) + standard items
(Panes/Windows/Sessions/Buffers/Advanced/Extras/Missing Keys).
- No desktop-keys popup was ever wired into the live menu — the script existed, that's all.
- @menus_trigger_prefix = '\' → menu opens on prefix+\. DO NOT TOUCH prefix+\ — user's
special menu. To add items: mirror nexus_notes_popup.sh + add an 0.0 E <k> "label" <script>
line to items/extras.sh (live copy), OR use custom_items/.
- tmux-menus caches rendered menus in cache/; it auto-invalidates by mtime (dialog_handling.sh
~line 578: regenerates when the item script is newer than its cache). No manual clear needed.
6. Pending / next actions (NOT yet done — user paused)¶
- Reconcile the duplication (HIGH): non-destructive audit first — map all dup copies (tmux-menus
×3,
~/scriptsvs~/scripts/scripts), pick live as canonical, archive (never delete) the dead ones, collapse nested script dir. This stops the "done over again" loop. - Wire desktop-keys popup into the live tmux menu (optional): add "NeXuS Keys" to live
items/extras.sh→ newscripts/nexus_keys_popup.sh→ popsnexus-cheatsheet.sh. User leaning toward a grouped "NeXuS" submenu (Keys + Audio). - Refresh
nexus-cheatsheet.pycontent — it's stale (fuzzel/wrong keys, missing Ctrl+Alt+S, Super+/). Option: auto-generate from live configs so it never goes stale. - Fix
prefix+Space→ 127 —tmux-resizable-popup.shcalls deletedwtf-interactive-launcher.sh; repoint to existing~/scripts/tmux-popup-launcher.sh. - Fix sway wallpaper (line 24) — points at a directory; sway won't load until it's a file.
- Fix stale
tmux-cheatsheet.sh— claims prefix is Ctrl+Space; it's actually Ctrl+Z/F12.
7. Golden rule reinforced¶
Before editing a config or script, find the copy the running process actually loads. Check
TMUX_PLUGIN_MANAGER_PATH, the compositor actually running, and whether ascripts/scriptsnested twin exists. Back up first (*.bak-<ts>), archive—never delete.