The bar glyph
normal — speaker + arcs
muted — speaker ✕
ptt armed
Idiom map (same as net / bt)
- Faceplate switch = master quick-mute — the net wifi / bt power switch, here muting all output. Flip: state → MUTED, lamp red, bar glyph → speaker-✕.
- Rows are devices — every sink + source. Click the row body to set default (gold DEF moves); the fader sets that device's volume; the trailing glyph mutes just it.
- Per-row signal meter — the 4 bars at the left of each row read that device's live level. A sink can carry a stream without being default, so the one playing lights up — demo: the music is on WH-1000XM4 while Speakers is still default. Click WH-1000XM4 to move to it.
- Two meter rows — row 1 = the volume you set (OUT + IN needles); row 2 = the stereo VU (L/R) of the selected output's live signal, red when muted.
- Mic = two console keys — one toggles LIVE↔MUTED (the label flips to show the state), the other is PUSH·TALK: the mic sits muted and un-mutes only while Space is held.
- Verify-everything — every action re-reads pactl/wpctl state after firing, like net/bt.
Push-to-talk — the one hard part
Hold-to-talk needs a global key grab under Wayland. Two routes to spec: (a) a Hyprland
bind pair — bindp Space press → unmute, release → re-mute, armed only while PTT
mode is active (so it doesn't steal Space everywhere); or (b) an evdev/libinput
listener reading the key directly. (a) is lighter; (b) survives focus changes but needs
input-group permissions. Feasibility research is phase 1 of the spec.