Typist
Typist types the current clipboard content once, with character-specific timing for plain text, newlines, and punctuation.
Install
Typist types through ydotool, which is not part of a stock Omarchy install
and needs its daemon running:
omarchy pkg add ydotool
systemctl --user enable --now ydotool.service
Then add the plugin:
omarchy plugin add https://github.com/sanjuanjor/typist.git --enable
Without ydotoold running, ydotool cannot inject keys and nothing is typed;
Typist reports this rather than failing quietly.
Remove
Stop it first if it is mid-run, then remove the plugin:
omarchy plugin remove io.github.sanjuanjor.typist
That deletes the plugin and its settings, which live on its shell.json entry.
Two things it cannot remove, because they are not part of the plugin:
-
Any Typist keybindings you added to
~/.config/hypr/bindings.lua. -
ydotool, if you installed it for this. Drop it only if nothing else uses it, since other tools share it:systemctl --user disable --now ydotool.service omarchy pkg drop ydotool
Removing the plugin folder mid-run does not stop a run already in flight. If typing is stuck and the bar button is gone, stop the unit directly:
systemctl --user stop io.github.sanjuanjor.typist.service
Use
- Left click the bar button to type the clipboard once, or to stop a run in progress. The button highlights while typing.
- Right click the bar button to pick a setting to change.
- Use the hotkeys below if you want a keyboard shortcut.
Dependencies
python3jqwl-paste(fromwl-clipboard)ydotool, withydotool.serviceenabled (for keyboard injection in Wayland)libxkbcommon(to read the keyboard layout; already required by Hyprland)systemd(the worker runs as a transient user unit)
Hotkeys
The bar button is enough on its own. For keyboard shortcuts, add these to
~/.config/hypr/bindings.lua (Hyprland reloads on save):
o.bind("SUPER + ALT + V", "Typist start", "$HOME/.config/omarchy/plugins/io.github.sanjuanjor.typist/typist start")
o.bind("SUPER + ALT + SHIFT + V", "Typist stop", "$HOME/.config/omarchy/plugins/io.github.sanjuanjor.typist/typist stop")
o.bind("SUPER + ALT + CTRL + V", "Typist config", "$HOME/.config/omarchy/plugins/io.github.sanjuanjor.typist/typist config")
typist toggle starts or stops in one binding, if you prefer a single key.
Configuration
Settings live on this widget's entry in ~/.config/omarchy/shell.json, the
same place the Omarchy settings panel writes to. Changes take effect on the
next run; no restart is needed.
| Key | Default | Meaning |
|---|---|---|
delayMs |
35 |
Pause between ordinary keystrokes |
newlineDelayMs |
90 |
Extra pause after a line break |
punctuationDelayMs |
60 |
Extra pause after punctuation |
startupDelayMs |
250 |
Wait before typing starts, so a held hotkey can be released |
maxClipboardBytes |
65536 |
Clipboard contents larger than this are refused |
Right click the bar button (or press the config hotkey) to get a menu listing just these settings with their current values; pick one to change it. The menu is built from the manifest schema, so it always matches what the plugin actually reads.
You can also set them from the command line:
omarchy bar set io.github.sanjuanjor.typist delayMs 50 --json
How it works
The clipboard is piped into the worker on stdin, so its contents never appear
in /proc/<pid>/cmdline. Key codes come from a table built once from the
keyboard layout alone, so no clipboard character is ever passed to another
program as an argument either. The worker runs as a transient systemd user
unit (io.github.sanjuanjor.typist.service), so stopping it never involves
reading a process id from disk.
License
This project is licensed under the MIT License. See LICENSE for details.