Repository navigation
Typing Test
A Monkeytype-style typing test that runs entirely offline, inside the launcher: tap Super, type ^ (or the word typing, or wpm) and start typing. Time, words or zen modes, a live keyboard preview that points at the next key and can colour every key by the finger that should press it, Monkeytype sound packs, and a score history that keeps aggregate numbers only. Split and custom keyboards running Vial firmware are drawn from the keyboard's own layout.
-
Super, then
^— the test panel replaces the results. Or search typing. - Start typing the words. Ctrl + R restarts; Ctrl + 1 / 2 / 3 switches between time, words and zen.
- Ctrl + , opens the test's own settings page; Ctrl + H the score history; Ctrl + S the statistics.
- Prefer a full page? The same test is a Cheat Sheet tab too (Super + /), on by default under Settings → Cheat Sheet → Enable Typing test.
- Time — a countdown: 15, 30 (default), 60 or 120 s.
- Words — a fixed count: 10, 25, 50 (default) or 100, finishing on the last word without a trailing space (switchable).
- Zen — no timer and no quota. Free zen types whatever you like; guided zen (Ctrl + G) generates the same words the other modes use and keeps extending them, so speed and accuracy are still measured against real text, but nothing counts down and the test ends only when you end it (Shift + Enter). The clock is hidden while it runs. Zen results (free or guided) are shown and count toward the lifetime totals, but are not stored as scores.
Punctuation (Ctrl + P) and numbers (Ctrl + N) can be mixed in, and the language (Ctrl + L) comes from Monkeytype's word lists (english_1k by default).
Text size, how many lines stay on screen, the caret style (line, block, underline or off), smooth caret and line motion, highlighting only the current word, blind mode (mistakes hidden until the result), live speed and accuracy readouts, and whether Tab restarts outright or first points at the restart button (off by default, because Tab also walks the launcher's controls).
A keyboard is drawn under the text and can point at the next key. Layouts: qwerty, qwertz, azerty, dvorak, colemak — or vial, which reads the keyboard actually plugged in.
Finger guide (off by default) — Color keys by finger and guide the next keystroke: each key is tinted by the finger that should press it, and a hand legend lights the finger for the next character. Fingers are suggested by key position; Adjust fingers lets you reassign any key and Reset fingers goes back. Assignments are stored per board (Config.options.search.typingTest.keyboard.fingerAssignments), so a custom board keeps its own.
With the layout set to vial, scripts/typing/vial_keyboard.py reads the keyboard's physical layout and keymap over raw HID. Nothing is hardcoded per keyboard: the firmware carries its own KLE layout and keymap, so a split, staggered or rotated board draws itself correctly and its layers come back labelled (switchable under the preview). Only read commands are used, so it works while the keyboard is locked (Vial's lock only gates writes). If nothing is found, the preview says No Vial keyboard is readable. Plug it in, or pick another layout. — check the connection and the hidraw device permissions.
Key sounds and a separate mistake sound from the Monkeytype packs (catalogued in assets/typing/sounds-manifest.json), with a volume slider.
Keep results on this machine stores aggregate scores only — never the words or the keys — in ~/.local/state/quickshell/states.json, up to a configurable number of results (100 by default), with personal bests per exact setup and lifetime totals on the statistics page, and a button to clear everything.
| Keys | Action |
|---|---|
| Esc | Back, or leave the page |
| Ctrl + R | Restart |
| Tab, Enter | Point at restart, then press it (Tab alone restarts when enabled) |
| Shift + Enter | Finish zen, or start the next test |
| Ctrl + Backspace | Erase the current word |
| Ctrl + 1–3 | Time, words or zen |
| Ctrl + G | Free or guided zen |
| Ctrl + [ / ] | Previous or next length |
| Ctrl + P / N / L | Punctuation / numbers / next language |
| Ctrl + , | Settings |
| Ctrl + H / S | Score history / statistics |
-
Settings → Launcher → Search modules → Typing test enables the panel (
Config.options.search.modules.typingTest.enable); its prefix is under Search Prefixes (Config.options.search.prefix.typingTest,^by default). -
Settings → Cheat Sheet → Enable Typing test (
Config.options.cheatsheet.enableTypingTest) adds the full-size tab. - The test's own settings live inside it (Ctrl + ,) and persist under
Config.options.search.typingTest.
| Piece | Role |
|---|---|
modules/ii/overview/TypingTestPanel.qml + typing/
|
The panel: engine, word viewport, toolbar, results, history and statistics pages, settings page, keyboard preview, finger hands and palette |
modules/ii/cheatsheet/CheatsheetTypingTest.qml |
The Cheat Sheet tab |
services/TypingLanguages.qml, services/TypingSoundPacks.qml
|
Word lists and sound packs |
services/VialKeyboard.qml, scripts/typing/vial_keyboard.py
|
Reading a Vial board over raw HID |
scripts/typing/sync_monkeytype_languages.py, sync_monkeytype_sounds.py
|
Fetching the Monkeytype assets |