aboutsummaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org57
1 files changed, 55 insertions, 2 deletions
diff --git a/todo.org b/todo.org
index 6e6047d..e40a0d0 100644
--- a/todo.org
+++ b/todo.org
@@ -32,11 +32,14 @@ Start the network panel a bit wider — keep the right edge fixed (it's right-an
** TODO [#B] Net panel doctor results can't display :bug:waybar:network:
The doctor diagnostic output is unreadable — the results well is too constrained to show the multi-line result. It should open a results box tall enough for several lines with a copy-results button; closing it via an X in the box's upper-right collapses the space back to what it occupied before. Raised from roam capture 2026-07-03.
-** TODO [#B] Audio panel spec :feature:waybar:audio:solo:
+** DONE [#B] Audio panel spec :feature:waybar:audio:solo:
+CLOSED: [2026-07-03 Fri]
:PROPERTIES:
:LAST_REVIEWED: 2026-07-02
:END:
-Work Craig's ask (roam inbox, 2026-07-02) into a spec, net/bt-panel kin: an audio panel replacing the pypr audio scratchpad (Super+A) with the same functionality — change the default/active output (speaker) and input (mic), volume control for both. The one new capability: a push-to-talk mic mode for meetings — mic stays muted except while the space bar is held, releasing re-mutes. (Hold-to-talk under Wayland needs a global key grab — likely a hyprland bind pair on press/release or an evdev listener; feasibility research belongs in the spec.) Related current bindings: Super+M audio-cycle ring, Super+Shift+A mic-toggle.
+Went past the spec to a full build in a no-approvals speedrun. Spec is now IMPLEMENTED ([[file:docs/design/2026-07-03-audio-panel-spec.org]], all 5 Decisions resolved). The panel shipped in the dotfiles repo (branch panel-bugfixing, commits 65e5bb0..9601420): pactl engine, GTK-free presenter, GTK instrument-console panel (OUTPUTS/INPUTS device rows with faders + per-device mute, LIVE/MUTED/PUSH·TALK mic keys, twin VU gauges, master quick-mute), Hyprland-bind push-to-talk, bar indicator, and the bar/keybind wiring (Super+A → panel, XF86AudioMute → master quick-mute). 102 unit tests + a passing AT-SPI smoke on velox. Live-eyeball validation filed under Manual testing and validation. Apply steps + follow-ups handed to the dotfiles project inbox.
+
+Original ask (roam inbox, 2026-07-02): net/bt-panel kin — change default output/input, volume for both, push-to-talk mic mode for meetings, master quick-mute, bar sound-glyph state. Related bindings: Super+M audio-cycle ring, Super+Shift+A mic-toggle. Prototype: =working/sound-panel/sound-panel-prototype.html=.
** TODO [#B] Scrolling/Carousel layout: frame fit + wrap-around :hyprland:
:PROPERTIES:
@@ -253,6 +256,11 @@ Boot the configured endpoint and send a short prompt; surface success/failure +
Acceptance: fresh VM install of the ratio profile reaches an endpoint on =:8081= that answers a smoke prompt; velox profile gets Q4_K_M + 8B and answers a prompt within reasonable laptop latency; network-down install completes successfully with the pending-models warning surfaced.
+** TODO [#C] Voice dictation / speech-to-text input :feature:tooling:
+Push-to-talk dictation that types transcribed speech into the focused Wayland window — usable at any text field, including the Claude Code terminal prompt and Emacs buffers. Claude Code has no built-in voice input; dictation has to happen at the OS level and inject text. Raised 2026-07-03.
+
+Tool choice is the open decision (needs Craig): =nerd-dictation= (Vosk, lighter, lower accuracy) vs a =whisper.cpp=-based daemon (heavier, higher accuracy, optional GPU). Wayland typing backend is =wtype= or =ydotool=. Scope once chosen: install + model download, a push-to-talk keybind (Hyprland), and an autostart entry; fold into archsetup so it lands on both daily drivers. Consider an Emacs-native path (=whisper.el=) as a complement for in-buffer dictation.
+
** TODO [#B] Review post-archsetup laptop setup steps (velox 2026-04-10)
:PROPERTIES:
:LAST_REVIEWED: 2026-06-09
@@ -595,6 +603,51 @@ Parse yay errors and provide specific, actionable fixes instead of generic error
Enhance existing indicators to show what's happening in real-time
** TODO Manual testing and validation
+*** Audio panel: apply the new shims + configs (precondition for the tests below)
+What we're verifying: the new =audio=/=audio-panel=/=waybar-audio= bin shims and the hyprland.conf + waybar config edits are live. New files need a restow (a plain =git pull= doesn't symlink them). Quit Hyprland or run from a TTY — restowing live Hyprland writes a stub hyprland.conf.
+#+begin_src sh :results output
+cd ~/.dotfiles && git pull
+cd ~/.dotfiles && make restow hyprland
+#+end_src
+- Reload waybar: mod+B (or =killall -SIGUSR2 waybar=).
+- Reload the Hyprland config: mod+Shift+R (or =hyprctl reload=).
+Expected: =which audio audio-panel waybar-audio= resolves all three to ~/.local/bin symlinks; no stow conflicts reported.
+
+*** Audio panel: opens and reads the live graph
+What we're verifying: Super+A opens the instrument-console panel (not the old pulsemixer scratchpad) and it shows the real devices.
+- Press Super+A.
+Expected: the audio panel opens top-right. OUTPUTS lists every sink, INPUTS every mic (no .monitor entries), the default device in each is emphasized (cream name, gold glyph), each row shows its volume percent, and the twin OUT·PLAY / IN·MIC needles deflect. Esc closes it.
+
+*** Audio panel: set default, volume fader, per-device mute
+What we're verifying: the three row interactions drive the real graph and the panel re-reads to confirm.
+- With two or more outputs present, click a non-default output row's body.
+Expected: that device becomes default (gold DEF emphasis moves to it) and playback follows.
+- Drag a device's fader.
+Expected: the volume percent tracks the fader and the actual device volume changes (no lag, no jump to the border).
+- Click a device's trailing mute glyph.
+Expected: that one device mutes/unmutes; the glyph and caption reflect it; other devices unaffected.
+
+*** Audio panel: master quick-mute (faceplate switch + mute key)
+What we're verifying: the master switch and the XF86AudioMute key both mute every output at once (not just the default sink).
+- Flip the faceplate master switch.
+Expected: every output mutes, the state word reads MUTED, the badge shows, the faceplate glyph goes to the slashed speaker. Flip back to restore.
+- With two outputs audible, press the hardware mute key (XF86AudioMute).
+Expected: both outputs mute (master), not just the default. Press again to unmute all.
+
+*** Audio panel: mic modes + push-to-talk (the meeting case)
+What we're verifying: LIVE/MUTED work, and PUSH·TALK holds the mic muted except while the talk key is held — the one genuinely new capability, and the one only a live test can confirm.
+- Click LIVE, then MUTED, watching the default mic row.
+Expected: LIVE unmutes the mic (needle lifts), MUTED mutes it (needle red); the active mode key shows a gold lamp.
+- Click PUSH·TALK. In a call app (or =audio status= in a loop), watch the mic while you hold Space, speak, then release.
+Expected: mic is muted at rest, un-mutes for exactly as long as Space is held, re-mutes on release. Switching back to LIVE or MUTED disarms the hold (Space types normally again).
+
+*** Audio panel: visual polish eyeball + bar entry point
+What we're verifying: the panel looks right in the dupre instrument-console language, and the bar opens it.
+- Look over the whole panel: faceplate spacing, engraved section labels, fader styling, VU needle centering, the muted-vs-audible glyph/color states.
+Expected: it reads as a sibling of the net and bt panels; nothing overflows the gold border; the faders and gauges look machined, not stock GTK.
+- Right-click the waybar sound module.
+Expected: the panel opens (left-click still mutes, scroll still changes volume).
+
*** Timer dialog: Escape cancels at every step
What we're verifying: Escape in the real fuzzel dialogs aborts the whole flow (the fix rides fuzzel's abort exit code; the unit tests fake it, this is the live confirmation).
- Left-click the timer module on the bar, pick "timer", then hit Escape at the Duration prompt.