Dictation
Marchyo can add push-to-talk voice dictation to the Hyprland desktop using
voxtype with OpenAI Whisper. Hold F9 to dictate
(push-to-talk), or press Super+Ctrl+X to toggle recording on and off; the
transcribed text is typed at the cursor (with a clipboard fallback).
It is off by default — it needs a microphone and downloads a Whisper model.
When enabled, the full desktop UI comes with it: a Waybar recording indicator,
desktop notifications, start/stop sound cues, and a Super+Shift+H floating
status window. Each surface is on by default and individually opt-out.
Options
Section titled “Options”| Option | Type | Default | Description |
|---|---|---|---|
marchyo.dictation.enable |
bool |
false |
Enable voxtype dictation (hold F9 push-to-talk + a Super+Ctrl+X toggle bind) |
marchyo.dictation.pushToTalk.enable |
bool |
true |
Daemon evdev hold hotkey; adds dictation users to the input group |
marchyo.dictation.pushToTalk.key |
str |
"F9" |
evdev key held to record (e.g. "SCROLLLOCK", "PAUSE", "F13") |
marchyo.dictation.pushToTalk.mode |
str |
"push_to_talk" |
"push_to_talk" (hold) or "toggle" (press to start/stop) |
marchyo.dictation.toggleKey |
str |
"SUPER CTRL, X" |
Hyprland bind for voxtype record toggle; null to unbind |
marchyo.dictation.gpu |
bool |
true |
Use the Vulkan GPU build (voxtype-vulkan); false for the CPU-only build |
marchyo.dictation.model |
str |
"large-v3-turbo" |
Whisper model voxtype loads |
marchyo.dictation.language |
str |
"auto" |
Spoken language ("auto" detects per utterance; pin with an ISO code like "en") |
marchyo.dictation.preloadModel |
bool |
false |
Pre-download the model at activation instead of on first recording |
marchyo.dictation.indicator |
bool |
true |
Show a recording-state segment on Waybar (driven by voxtype status --follow) |
marchyo.dictation.notify |
bool |
true |
Desktop notifications on record start/stop and transcription |
marchyo.dictation.audioFeedback |
bool |
true |
Start/stop sound cues |
marchyo.dictation.statusWindow |
bool |
true |
Bind Super+Shift+H to a floating status window |
marchyo.dictation = { enable = true; # model = "large-v3-turbo"; # multilingual + fast (default) # language = "auto"; # detect per utterance # preloadModel = true; # fetch the model at activation time # indicator = false; # drop the Waybar segment # notify = false; # silence desktop notifications # audioFeedback = false; # silence start/stop cues # statusWindow = false; # drop the Super+Shift+H window};How it works
Section titled “How it works”Enabling the option wires the upstream Home Manager services.voxtype module:
- Writes
~/.config/voxtype/config.tomland runs thevoxtypeuser service.wayland.displayis set so the daemon getsWAYLAND_DISPLAYpluswtype/wl-clipboardon its PATH for typing into Wayland windows. - Recording is driven two ways: the daemon’s evdev push-to-talk hotkey (hold
F9by default) and a Hyprland bind (marchyo.dictation.toggleKey, defaultSuper+Ctrl+X) that runsvoxtype record toggle. The evdev hotkey needs/dev/inputaccess, so dictation users are added to theinputgroup whilepushToTalk.enableis set (a real privilege — set itfalseto rely only on the compositor toggle). - Output mode is
type(types at the cursor) with clipboard fallback. - The Waybar indicator streams
voxtype status --follow(JSON) and recolors by state; notifications and sound cues use voxtype’s built-in[output.notification]/[audio.feedback];Super+Shift+Hopens a floating terminal runningvoxtype status --follow.
Check the daemon with systemctl --user status voxtype.