LEARN KEYSTROKE
How to use Keystroke.
Every feature, one page.
Each section is one feature: a screenshot, how it works, and one thing to try. Read it once from the top, or jump to what you need. Inside Keystroke, Settings → Learn Keystroke opens this page.
Start here
One key. Everything.
Super + Space opens the palette in place of the Omarchy menu. Type, and the results are ranked: computed answers first, then matches, then the assistants. ↵ runs the highlighted row, Esc closes. The empty root lists what is inside: applications, the Omarchy menu, clipboard history, calculator, converter, dictation, files, extensions, timers, hotkeys and settings.
Try it Press Super + Space, type chr, press ↵. Chromium opens.
Hands stay on the keyboard.
| ↑ ↓ or Ctrl+P / N | move |
| PgUp PgDn | jump six rows |
| ↵ or → | run, or open a submenu |
| Ctrl+↵ | the alternate action: paste, open a terminal here, turn off |
| Ctrl+1…8 | run the first to eighth row; holding Ctrl shows the numbers |
| Tab | type a command's prefix, or move to its next argument |
| ← / ⌫ on an empty field | back one level |
| Ctrl+U | clear the field |
| Del on an app | offer to uninstall it |
| Ctrl+, · Ctrl+K | Settings · the selected provider's settings |
| Esc | close |
Try it Hold Ctrl: every icon becomes a number. Press 3 while holding it.
Launch applications
Every installed application is a row: by name, by abbreviation, by what its description says. What you launch often rises to the top (frecency, with a two-week half-life), and choosing a result for a query teaches the palette to lift that result the next time you type or say the same thing. Nothing about that is stored as text: only hashed ids in ~/.local/state/keystroke/usage.json.
Try it Type obs and press ↵. Next time, o may be enough. Del on an app offers to uninstall it.
The Omarchy menu, complete
Everything the stock menu offers is here, in the same tree: Setup, Style, Install, Update, System and the rest. → opens a submenu, ← goes back, and inside a submenu the search covers everything below it. Every omarchy menu route keeps working: omarchy menu toggle system opens System, omarchy menu summon reminder-set runs it, and the selection and input pickers Omarchy scripts use are answered by the palette too. Shutdown, reboot, logout, removals and config resets ask first; turn that off in Settings → Omarchy.
Try it Type syslock and press ↵: that is System → Lock. Type sysshut instead and a question appears; Esc says no.
Type through submenus
From the root, letters may skip whole words of a breadcrumb: prefp, keysepro and setaiprv all land on Keystroke Settings → AI & Web Search → Preferred assistant, prefcla on its Claude choice, sysshut on System → Shutdown. Words can come in any order (ai prov), and descriptions match by word. The same applies to every settings screen, choice and Omarchy submenu.
Try it Type prefcla and press ↵. Claude is now your preferred assistant. prefcha switches it back.
Shortcuts you have not learned yet.
Every Omarchy keybinding is a row, named by what it does, with the keys next to it. flcrn finds Full screen with Super + F; super f finds the same bind by its keys; screenshot finds the one that runs the capture script. ↵ runs the bind exactly as pressing it would, and the keys shown are the suggestion for next time. Binds Omarchy cannot run from a menu (Lua closures such as Close window) are shown greyed so the keys can still be learned. The Hotkeys screen lists all of them in the Super + K order; at most ten mix into the root.
Try it Type flcrn, press ↵. The window goes full screen. Next time, press Super + F.
Answers as you type
Calculate
Arithmetic, percentages and functions, computed as you type, with the result as the first row and in the preview. 128 * 1.24, 15% of 80, sqrt(144) + 2^10. Spoken arithmetic works too: "27 plus 90" becomes 27 + 90.
Try it Type sqrt(144) + 15% of 80. ↵ copies 24.
Convert units and temperatures
Length, mass, volume, speed, data, temperature: 2m in feet, 72 F to C, 5 miles in kilometers, 3 kg in lb. Leave out the target and the answer comes in the everyday counterpart: 35 lb in kilograms, 180 cm in inches, 100 F in Celsius. Metres, millilitres, kelvin, time and data still need a target, so a bare 10m stays free for Timer. The answer is the first row; ↵ copies it.
Try it Type 72 F to C.
Convert time zones
A time and a place, converted to your local time with daylight saving taken into account: 10 am in London, 10am pt, now in tokyo, 3pm est. The preview spells out both ends.
Try it Type now in tokyo.
Convert colors, or pick one from the screen
Paste a hex color and get the other forms: #ff6644 (or ff6644, or #f64) shows HEX, RGB and HSL with a swatch. Pick a Color samples any pixel on the screen through hyprpicker and copies it in your preferred format (Settings → Colors).
Try it Type #ff6644, move to hsl, press ↵.
Type any emoji
: followed by a name or a feeling: :rocket, :smile, :party. Only emoji answer a : query, so nothing else gets in the list. ↵ copies the character.
Try it Type :rocket and press ↵. Paste it anywhere.
Find things
Search the clipboard history
Omarchy's own clipboard history, searchable, with the full text or the image in the preview. ↵ copies an entry back, Ctrl+↵ pastes it into the window you came from; Settings → Clipboard History → Paste on selection swaps the two. History stays out of the global search: open Clipboard History first, then type.
Try it Type clip, press ↵, then type a word you copied earlier today.
Find files and folders
Files and folders under your home join the results from two characters on, found with fd, and abbreviations work: dwnlds finds Downloads. ~ searches only files: ~dcmnts rpt is every report under Documents. ↵ opens the file with its default app; Ctrl+↵ opens a terminal in its folder. Hidden entries are optional and gitignore rules are respected. Settings → Files chooses whether files mix into the main palette fuzzily, literally, or only with ~.
Try it Type ~dcmnts rpt. Press Ctrl+↵ to land in that folder in a terminal.
Match by meaning
A small embedding model, running locally on the CPU, supplements exact and fuzzy search with action descriptions: it keeps launch, install and remove distinct, forgives typos, and offers Chromium for "launch Chrome" when Chrome is absent. Settings → Matching chooses Off, Only voice or Voice and text (the default), and the model, Small (2M) or Large (8M). The first query downloads the model once (8 MB, pinned digest); after that everything is offline, and the runtime unloads after two idle minutes. Ordinary search never waits for it.
Try it Type launch chrome on a machine without Chrome. Chromium is offered.
Speak and ask
Your voice. Same superpowers.
Two ways in, both while the palette is open. Tap the hotkey again: the second tap of Super + Space starts listening, a third stops. Hold it: keep the chord down, speak, release. The waveform sits to the right; the transcript fills the field and a fresh ↵ runs the selection. A leading "open" or "launch" and trailing punctuation are dropped, so "Launch Chrome." searches Chrome. Dictation comes from voxtype, Omarchy's own daemon (Install → AI → Dictation); Keystroke uses it as installed and never edits its config. Settings → Voice writes the hold-to-talk binds into your Hyprland bindings after asking.
Try it With the palette open, tap Super + Space again and say "open the display settings". Press ↵.
Dictate to the clipboard
A prose-only recording: speak, read the transcript, then ↵ copies it and closes, Ctrl+↵ pastes it into the window you came from. After any typed or spoken query, Copy to Clipboard under Continue with does the same with the original text. bin/keystroke dictate opens this screen and starts recording, for a bind of your own.
Try it Type dict, press ↵, tap the hotkey, speak a sentence, then Ctrl+↵.
Send a query to an assistant
Whatever you typed or said, Continue with offers it to Codex, Claude, ChatGPT, Cursor (when installed) and Google, with the prompt already in the target's composer: the Claude, Codex or Cursor desktop app, the browser (claude.ai, chatgpt.com), or a terminal running the CLI. Nothing goes through the clipboard. Settings → AI & Web Search picks the preferred assistant, the destination, and whether the browser sends immediately.
Try it Type a question, press ↓ to Ask Claude, press ↵.
Ask Codex inside the palette
Select Ask Codex here, or type ? before a question, and the answer streams inside the palette. ↵ sends a follow-up, Shift+↵ adds a line, your voice hotkey fills the composer, Stop interrupts, Ctrl+↵ continues in the Codex app or CLI. Codex → Recent questions resumes a conversation. It uses your own codex login (a stable Codex CLI, 0.153.2 or newer) and one local app-server that shuts down after ten idle minutes. Settings → Codex picks the model, Fast or Standard, the destination and a working folder.
Try it Type ? how do I find the biggest folders here and press ↵.
Make it yours
One config file, every setting searchable
Everything lives in ~/.config/omarchy/keystroke.json, hand-editable and hot-reloaded. The screens are generated from each provider's settings, so every screen, setting and choice is one row you can reach from the root by typing through its breadcrumb. Ctrl+, opens Settings; Ctrl+K opens the settings of whatever is selected. Each provider can be turned off. Learn Keystroke opens this page.
Try it Type dens comf and press ↵: the palette switches to the comfortable density at once.
Density, accent and animations
Colors, fonts, radius and spacing come from the active Omarchy theme and follow it when it changes. On top of that: density (compact or comfortable), accent (theme, ember, violet or mint), result previews on or off, animations (off, snappy or fluid) and the window transition (instant, fade or slide up).
Try it Type anim fluid, press ↵, then move through a submenu.
The bar button
Keystroke ships the menu button as a bar widget: it takes the stock button's place, or goes first on the left when installed from a checkout (omarchy bar move evindor.keystroke left --index 0 puts it there otherwise). Extensions can put a small item right after it: the Timer's countdown lives there until the sound plays, and pressing it opens the Timers screen. Removing the button from the bar also disables the menu; keep the plugin under plugins[] in shell.json if you want the palette without the button.
Try it Start a timer, then look left in the bar.
Commands and extensions
Typed commands and their arguments
Some things are quicker to type than to pick: timer, tr, :, ~, /. The moment a prefix is recognised, the line under the field names the action and the argument you are on (Set a timer · duration: 10m, 1h30m, 0:45…), and the arguments still to type appear after the caret as <duration> [name], vanishing as you fill them. Tab moves to the next argument. Every prefix can be renamed in the provider's settings (tm instead of timer), and a typed command is exclusive: only its owner answers.
Try it Type timer and stop. Read the line. Then finish it: 10m tea, ↵.
Every command, listed
/ lists every command the enabled providers declare, with its usage line and what the arguments mean; /tr filters the list, and ↵ types the prefix for you. Do not remember a prefix? Type the name: transl suggests Translate, and Tab types tr . The same row sits at the bottom of the empty root as What can I type?
Try it Type /. Then type transl and press Tab.
Extensions are off until you turn them on
Extensions ship inside Keystroke, one folder each, and reach everyone through a reviewed pull request. Installing or updating Keystroke never runs their code: an extension that is off is not even compiled. Type ext and open Extensions: the list shows each one with its version and state, ↵ opens its page, Ctrl+↵ turns one off. Turning one on asks first: it was checked and reviewed before it shipped, it runs in your shell with your permissions, read its code if you want to. One that fails to load says Needs attention with the reason. A folder in ~/.local/share/keystroke/extensions is picked up too, for one you are writing.
Try it Type ext, press ↵, open Translate, press ↵ on Enabled, confirm. The status line tells you what to type next.
An extension's page: usage and examples
Each extension's page starts with its usage line and every argument explained, then examples: ↵ on timer 10m tea types it at the root, ready to run. Below sit the Prefix (rename it here), the Enabled switch, Settings, Run setup when an extension needs a one-off step (it runs in a visible terminal, never in the background) and Open source, the extension's folder on GitHub.
Try it Open Extensions → Timer, move to timer 1h30m bread, press ↵, then ↵ again.
Countdown timers
timer 10m tea, timer 1h30m bread, timer 90 (minutes), timer tea (the default length). ↵ starts it and closes the palette; the countdown sits in the bar next to the menu button, Timers at the root lists what is running (↵ cancels one after asking), and when it ends a sound plays (chime by default; drop, alarm, a file of your own, or off) and a notification arrives. Timers keep running after the palette closes because the extension's service outlives the window. Timer is also the reference extension: small enough to read in one sitting.
Try it Type timer 25m focus and press ↵.
Translate text
Google Translate without an account: tr bonjour detects the language and translates into your first target; tr fr good morning picks a target by code or name; bonjour to english needs no prefix at all. The translation is the first row (↵ copies, Ctrl+↵ pastes into the app you came from), the reverse translation sits under it as a check, and every other target you configured follows. Open in the editor shows all of them for longer text, with dictation. When text is selected as the palette opens, Translate the selection is offered at the root. Targets, source language, default action and a proxy are in Settings → Translate; the target picker on the Translate screen lists every language.
Try it Type tr bonjour. Then how are you in spanish.
Write an extension
An extension is a folder with an extension.json (name, version, the commands it answers to) and a Service.qml exposing a provider with query(ctx). It can declare patterns for the shapes of text it answers, carry its own icon, show a view of its own over the palette, keep state that outlives the window and put an item in the bar. Copy extensions/timer, follow the step-by-step guide, drop the folder into ~/.local/share/keystroke/extensions to use it at once, and open a pull request to ship it to everyone. The contract is docs/providers.md.
Try it cp -r extensions/timer ~/.local/share/keystroke/extensions/mine, rename it in extension.json, open the palette: it is listed, off, ready to turn on.
Every screenshot is the real Keystroke interface rendered with sample data; the Applications list, the Codex conversation and the voice recording are staged states. Appearance follows your active Omarchy theme.
