Voxtype
The Voxtype extension adds Voxtype, AI voice dictation for Wayland, to a Frostyard desktop image. It also ships the tools that type the text for you: wtype, ydotool, and wl-clipboard. Every image carries the extension’s definition, switched off. The extension itself is not in the image: Updex turns it on and downloads it.
Before you start
Section titled “Before you start”You need:
- A Frostyard desktop bootc image: Snow, Snowfield, or Sundog, not Floe.
- Root access to enable, update, and remove the extension.
- Network access to
https://repository.frostyard.org/ext/voxtype/. - Free space in
/varfor the download and the installed image.
The Voxtype extension has no published test results on Frostyard images yet. Try it on a machine you can spare first.
Enable Voxtype
Section titled “Enable Voxtype”See what Updex found, then enable the feature and download it now:
updex features list --component=voxtypesudo updex features enable voxtype --nowvoxtype appears as a component, with its feature disabled. The enable command downloads the image, checks its checksum and signature, links it, and refreshes the merge.
Check the merge and the files that the extension adds:
systemd-sysext statuscommand -v voxtype wtype ydotool ydotoold wl-copy wl-pastesystemd-sysext status lists voxtype. Each name prints a path.
If enable --now exits with a refresh error (refresh_error in JSON), the download worked, but the activation did not. If the output says activation did not finish, the extension is merged, but users and groups can be missing: reboot. Otherwise the merge state is unknown: reboot. A sudo systemd-sysext refresh by hand does not create users and groups. Then run the checks above again.
Reboot after enable --now. snosi-sysext-udev-reload.service runs at boot, and no test shows that it runs on a live merge. The uinput module and the udev rule apply after the reboot.
Add your user to the input group, because the udev rule gives that group access to /dev/uinput and no user is in it by default:
sudo usermod -aG input "$USER"Then sign out and sign in again.
Use Voxtype
Section titled “Use Voxtype”Run voxtype to dictate. Voxtype types the text with wtype on compositors that support it, or with ydotool on GNOME. When typing fails, it falls back to the clipboard through wl-copy and wl-paste.
ydotool types through /dev/uinput. The extension makes that work in three ways:
- It loads the
uinputkernel module at boot. - It ships a udev rule that gives the
inputgroup access to/dev/uinput. A service,snosi-sysext-udev-reload.service, makes udev read that rule after the merge, beforemulti-user.target. - It sets
RestartSec=5son theydotool.serviceuser unit, so a slow boot does not use up its start attempts.
The ydotool.service user unit does not start by itself. You, or your compositor keybinding, start it. Check its state:
systemctl --user status ydotool.serviceWhen the udev rule applies, /dev/uinput is owned by root:input with mode 0660.
Update, roll back, and remove
Section titled “Update, roll back, and remove”See whether a newer image exists, then update:
updex features check --component=voxtypesudo updex features update --component=voxtypeThe update downloads the newest image and links it. A refresh replaces /usr under a running app, and a running app can fail. Close Voxtype before you run updex features update, or update with --no-refresh and reboot. See Manage system extensions for the check output and the update timer.
Roll back with sudo updex features rollback voxtype. It takes effect at the next boot. See Roll back.
Remove Voxtype now:
sudo updex features disable voxtype --now --forceUpdex unmerges all extensions on the host, deletes the Voxtype image, and merges the rest again. Your Voxtype settings stay in your home directory. Reboot when the command finishes. Without --force, Updex refuses while the image is merged.
What ships
Section titled “What ships”| Item | What you get |
|---|---|
| Package requests | voxtype from the Frostyard APT repository, plus wtype, ydotool, and wl-clipboard |
| Version | The image file name carries the voxtype version, plus a +rN snosi revision when one is set |
| Commands | /usr/bin/voxtype, /usr/bin/wtype, /usr/bin/ydotool, /usr/bin/ydotoold, /usr/bin/wl-copy, and /usr/bin/wl-paste |
| Kernel module | uinput, loaded at boot by /usr/lib/modules-load.d/60-voxtype.conf |
| udev | /usr/lib/udev/rules.d/80-uinput.rules, and snosi-sysext-udev-reload.service, which multi-user.target upholds |
| User service | ydotool.service, with a drop-in that sets RestartSec=5s. It does not start by itself |
| Image file | voxtype_<version>_<os>_<arch>.raw.zst; .raw.xz, .raw.gz, and .raw also work |
| Download | From https://repository.frostyard.org/ext/voxtype/, signature required (Verify=true), into /var/lib/extensions.d/ |
Each build checks that these paths are present: every command above, the ydotool user unit and its drop-in, the udev rule, the reload service and its script, the uinput module file, and the multi-user.target drop-in. A build that is missing one fails.
See also
Section titled “See also”Sources
Section titled “Sources”Reviewed 2026-10-27; Updex facts reviewed 2026-10-30. snosi commit
b2858ca0222814c395cf8248db98f3e096d57dc9;
Updex v2.1.3 commit
2661e987faac986f2594d1d9bbbadf1bf3053f5b.
mkosi.images/voxtype/mkosi.confmkosi.images/voxtype/required-paths.txtmkosi.images/voxtype/mkosi.extra/usr/lib/modules-load.d/60-voxtype.confmkosi.images/voxtype/mkosi.extra/usr/lib/systemd/system/multi-user.target.d/10-voxtype.confmkosi.images/voxtype/mkosi.extra/usr/lib/systemd/user/ydotool.service.d/10-voxtype.confmkosi.images/base/mkosi.extra/usr/lib/sysupdate.voxtype.d/voxtype.featuremkosi.images/base/mkosi.extra/usr/lib/sysupdate.voxtype.d/voxtype.transferdocs/design/sysexts.md- Updex v2.1.3
README.md - Updex v2.1.3 release
- Updex
docs/adr/0019-apply-merged-sysusers-and-tmpfiles-on-a-live-refresh.md(a live refresh runssystemd-sysusersandsystemd-tmpfiles --create; when the last refresh fails, the merge state is unknown; a refresh by hand does not runsystemd-sysusers) - Murbella’s review (frostyard-org#28)