Omahub
← All plugins
T

AirType

by topmass

Push-to-talk dictation with zero idle cost: the ASR model fully unloads between uses (~0% CPU, ~26 MB RAM) and loads back in the background while you are already speaking. Transcription streams during the recording, so there is no length limit and the text is ready to paste the moment you stop. Theme-matched waveform overlay plus this bar indicator with click-to-toggle.

Security review

Potentially dangerous behavior detected · 7 findings

Deterministic scan — not a security guarantee

High
Risk level
High
Analyzed commit
fe4815a
Scanned
1 month ago
  • Registers scheduled or boot-time system tasks.

    systemctl enable failed")
  • Bundles a systemd unit file.

    [Unit]
  • Command runs with sudo, elevating the process beyond the plugin environment.

    sudo usermod -aG input $USER, then log out/in"))
  • Docs external_hosts README.md:95

    Downloads or connects to an external HTTP(S) host.

    git clone https://github.com/topmass/airtype-for-omarchy
  • Command runs with sudo, elevating the process beyond the plugin environment.

    sudo pacman -Rns voxtype-bin`. Omarchy's F9 binds and bar indicator disappear on their own once the voxtype binary is gone.
  • Docs sudo README.md:34

    Command runs with sudo, elevating the process beyond the plugin environment.

    sudo usermod -aG input $USER   # then log out and back in
  • Docs sudo README.md:33

    Command runs with sudo, elevating the process beyond the plugin environment.

    sudo pacman -S wl-clipboard wtype

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

Low
AI risk level
Low
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
fe4815a
Reviewed
1 month ago

The Omarchy plugin itself is a benign QML bar widget that subscribes to a local Unix socket and runs `airtype toggle` on click; the high deterministic findings come from the separately installed dictation service's user-level systemd unit and from sudo commands that appear only in documentation/doctor output, not from anything the plugin executes. The Python service is a legitimate local dictation tool: it reads evdev input and records the microphone only while the user triggers it, downloads models over HTTPS, and contains no obfuscation, credential theft, or destructive behavior.

  • The service installs and enables a user-level systemd unit (`~/.config/systemd/user/airtype.service`) via the explicit `airtype install` command; this is expected persistence for a background dictation service, not hidden behavior.
  • The evdev hotkey listener reads all keyboard events from `/dev/input` to detect global hotkeys; it does not log or transmit keystrokes, but users should be aware of the access this requires.
  • The service downloads ASR models (~110-600 MB) from GitHub/Hugging Face over HTTPS on demand; this is expected network activity and is user-triggered.
  • README and `airtype doctor` mention sudo commands (`pacman -S`, `usermod -aG input`) for system prerequisites, but these are user-executed setup steps, not run by the plugin or service.
How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/topmass/airtype-for-omarchy --enable
Productivity #bar #ai

AirType for Omarchy

Fast local push-to-talk speech-to-text for Omarchy, with a theme-matched recording waveform and an Omarchy bar widget. Built for Omarchy / Hyprland, usable on any Wayland or X11 desktop.

AirType waveform overlay and bar widget

Hold Super and double-tap Alt to start recording. Tap Alt once to stop. AirType transcribes locally, copies the text, and pastes it into the focused window. If the focused window is a terminal (foot, ghostty, alacritty, kitty, ...), it pastes with Ctrl+Shift+V; everywhere else it uses Ctrl+V.

While you talk, a small waveform pill floats above the bottom edge of the focused monitor, drawn in your active Omarchy theme's accent color. The bars follow your real microphone level and the pill fades out when you stop.

Why AirType

  • Zero idle cost. The service holds no model when you are not dictating: about 26 MB of RAM and ~0% CPU. The ASR model unloads after every transcription and the memory is returned to the OS.
  • No cold-start wait. The microphone opens the instant you hit the hotkey. The model loads in the background during the first seconds of your speech, while the audio is already being captured, so nothing is lost and nothing blocks.
  • Near-realtime transcription. While you talk, AirType transcribes pause-aware chunks in the background. When you stop, only the last few seconds remain to process, so the text pastes almost instantly - even on CPU-only laptops with no NVIDIA GPU.
  • No recording time limit. Dictate for 30 seconds or 30 minutes; paste latency stays the same because the work already happened while you spoke. There is no duration cap anywhere in the pipeline.
  • Fits Omarchy. Theme-matched waveform overlay, bar indicator, terminal-aware paste, systemd user service, gum settings menu.

Install the dictation service

Requires uv and Python 3.12+.

uv tool install git+https://github.com/topmass/airtype-for-omarchy
airtype setup      # downloads the model (~480 MB) on first run
airtype install    # installs + starts the systemd user service
airtype doctor     # verify everything is green

Requirements on Wayland: wl-clipboard, wtype, and your user in the input group (for global hotkeys via evdev):

sudo pacman -S wl-clipboard wtype
sudo usermod -aG input $USER   # then log out and back in

The waveform overlay uses the system GTK4 stack (gtk4-layer-shell, python-gobject, python-cairo), all stock on Omarchy. Without them the overlay quietly stays off and dictation is unaffected.

Install the bar widget (Omarchy plugin)

This repo is also an Omarchy shell plugin: a microphone indicator for the bar that shows live state (idle, recording, transcribing) and toggles recording on click.

omarchy plugin add https://github.com/topmass/airtype-for-omarchy.git
omarchy plugin enable topmass.airtype

The indicator sits dim while idle, pulses in your theme's active color while recording, and shows an hourglass while transcribing. If the AirType service is not running it shows a muted mic-off glyph. A widget setting (Show icon when idle) lets you hide it entirely except during dictation.

Usage

  • airtype - settings menu (gum-based): model swap/download/delete, paste mode, hotkey, terminal classes, sounds, waveform overlay
  • airtype toggle / airtype status - control the running service
  • airtype record - one-shot dictation in a terminal (Enter to stop)
  • airtype transcribe file.wav - transcribe an audio file
  • airtype models - list available models
  • airtype settings --json - scriptable settings
  • airtype doctor - health checks

Config lives at ~/.config/airtype/config.json and hot-reloads into the running service. overlay_enabled turns the waveform overlay on or off.

Uninstall

omarchy plugin remove topmass.airtype   # remove the bar widget
airtype uninstall                       # stop + remove the systemd service
uv tool uninstall airtype               # remove the CLI and venv
rm -rf ~/.config/airtype ~/.cache/airtype   # config and downloaded models

Models

All models run on CPU via sherpa-onnx int8 ONNX:

Key Model Notes
parakeet-unified-en-0.6b-int8 (default) NVIDIA Parakeet Unified EN 0.6B English, punctuation + capitalization
parakeet-tdt-0.6b-v3-int8 Parakeet TDT v3 25 European languages
parakeet-tdt-0.6b-v2-int8 Parakeet TDT v2 legacy, no punctuation
moonshine-base-en Moonshine Base EN 145 MB light tier for weak hardware

Models download on demand from the sherpa-onnx release page into ~/.cache/airtype/models/.

How the hotkey works

The service reads /dev/input key events directly (evdev), below the compositor, so hotkeys work in any app including fullscreen windows and nothing is grabbed - your keys still reach applications normally. The state machine ignores chords like Alt+Tab while recording, tolerates releasing Super slightly before the second Alt tap, and waits for your modifiers to be released before sending the paste keystroke.

How the waveform overlay works

The overlay is a GTK4 + gtk4-layer-shell window spawned per recording under the system python3 (it cannot live in the tool's venv). The recording pipeline streams microphone RMS levels to it over a pipe. Colors are read at spawn from ~/.local/state/omarchy/current/theme/colors.toml, so the overlay always matches the active theme with zero configuration. The pill is click-through and never takes keyboard focus. On non-Omarchy systems it falls back to neutral colors.

Development

git clone https://github.com/topmass/airtype-for-omarchy
cd airtype-for-omarchy
uv sync
uv run python -m unittest discover tests

The Python service lives in src/airtype/, the bar widget in shell/BarWidget.qml, and the plugin manifest at manifest.json. See project-specsheet.md for the architecture map and the rules that keep everything working.

License

MIT