feat: add hold-to-talk listener and restore Handy-managed preferences

This commit is contained in:
kiri committed 2026-09-09 20:44:59 +02:00
1 parent 0992f3b863
commit e61f230978
7 files changed
+135 -47

No files matched your search

+16 -12
View File
@@ -119,15 +119,17 @@ reports are not a fresh comparison with this baseline.
## Open choices and next discussion
Dictation: plain local transcription is selected; rambling cleanup is deferred.
Handy preferences are Nix-owned in `modules/capabilities/handy.nix`: Nemotron
Streaming 3.5, automatic language detection, default microphone, Live overlay at
the bottom, Ctrl+Shift+V paste through wtype, preserved clipboard, manual submission
and no cloud processing. Other preferences use pinned app defaults. A user service
copies the baseline into Handy's writable store on each start, allowing migrations
while resetting GUI edits. Models/recordings stay outside Nix; the selected model
is already downloaded on Zenith. Other hosts still need model provisioning.
Super+Shift+D toggles; Super+Ctrl+D cancels. Super+D push-to-talk awaits the user's
decision about a keyboard listener: Niri 26.04 has no key-release bindings.
Handy preferences are application-owned again: the Nix settings generator and
startup reset are removed. The existing settings file is left untouched.
Nix installs Handy/wtype and runs Handy as a graphical-session user service.
Super+D launches a short-lived Python/evdev listener: hold to record, release D
or Super to finish. Both keys must be on the same keyboard. Niri owns the shortcut
and disables repeat; no persistent keyboard logger or exclusive input grab runs.
A udev uaccess rule grants the active local user access to keyboard event devices.
Super+Shift+D toggles; Super+Ctrl+D cancels. Both stop any active hold listener
before issuing their Handy command, preventing a later release from restarting
recording. Begin push-to-talk from idle: Handy exposes toggles, not idempotent
start/stop commands. Niri 26.04 itself has no key-release bindings.
Noctalia suppresses microphone activity popups/indicators; camera and screen-sharing
indications remain. Automatic paste and live capture need interactive checks.
@@ -139,9 +141,11 @@ and Vulkan batch mode (156 ms inference, 420 ms load). This checks model inferen
not live capture/stop/cancel. No new audio was recorded. Switching to CPU is not a
confirmed fix. After activation, retry live recording and stopping, and inspect
the service logs if it hangs.
Verification: formatting, flake evaluation, both workstation builds and whitespace
checks passed. Handy loaded the generated settings in an isolated data directory
without settings parse errors. System activation remains user-owned and pending.
Synthetic listener checks cover release during startup, repeat, modifier-first
release, device disconnect and cancellation, without live input/audio access.
System activation and an interactive hold/release trial remain user-owned.
Formatting, flake evaluation, both workstation builds, synthetic listener checks
and whitespace checking passed. No live input listener or microphone was started.
The focus is the broader environment, not further API/database polish. Candidate
areas remain places/ownership, navigation/interaction, human/agent collaboration,