> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jylhis.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Dictation

> Push-to-talk voice-to-text for the Wayland desktop

Marchyo can add push-to-talk voice dictation to the Hyprland desktop using
[voxtype](https://voxtype.io) with OpenAI Whisper. Press `Super+H` to start
recording, press it again to stop; 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

| Option                            | Type   | Default            | Description                                                                        |
| --------------------------------- | ------ | ------------------ | ---------------------------------------------------------------------------------- |
| `marchyo.dictation.enable`        | `bool` | `false`            | Enable voxtype dictation and the Hyprland `Super+H` toggle bind                    |
| `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                                   |

```nix theme={}
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
};
```

<Note>
  With `preloadModel = false` (the default) the \~1.5 GB Whisper model downloads on
  the first recording, so a `nixos-rebuild` never blocks on the network. Set
  `preloadModel = true` to fetch it at activation time via voxtype's model-loader
  service instead (that step needs network access when it runs).
</Note>

## How it works

Enabling the option wires the upstream Home Manager `services.voxtype` module:

* Writes `~/.config/voxtype/config.toml` and runs the `voxtype` user service.
  `wayland.display` is set so the daemon gets `WAYLAND_DISPLAY` plus
  `wtype`/`wl-clipboard` on its PATH for typing into Wayland windows.
* Binds `Super+H` under Hyprland to `voxtype record toggle`. The daemon's own
  evdev hotkey stays disabled — recording is driven from the compositor.
* 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+H` opens a floating
  terminal running `voxtype status --follow`.

Check the daemon with `systemctl --user status voxtype`.
