← All projects

Marmotype

In development

A Rust terminal trainer for difficult letter fragments, keyboard movements and Vim edits scored by keystroke count.

RustRatatuiTUIPythonCLI

At a glance

  • Outcome: Provides local fragment typing, movement guidance and keystroke-scored Vim practice without a browser or account.
  • Status: Merged vim-gym’s three Rust ports into Marmotype in July 2026. Remains in development and daily author use without packaging or publication.
  • Role: Solo.
  • Stack & libraries: Uses Rust, Ratatui, Crossterm and JSON keyboard profiles in one binary. Verifies only Linux releases; macOS and Windows remain planned without repository CI or packaging. Keeps the dependency-free Python 3.11+ vim-gym as a reference and mirrors its contract tests in Rust.
  • What I got out of it: Modeled keyboards as data. Learned Ratatui layout and resizing, Crossterm raw input and Python stdlib TUI development.
  • Source: Private.
  • Limitations: Serves one user through 21 hand-authored fragments and a fixed schedule. Reports the weakest finger, row and movement after a session without adapting later drills; shows Vim Gym results once without saving History. Imports Vial only for Corne-shaped boards and supports neither QMK nor VIA.

Fragment drills

Targets fragments such as nly, umpt, ptio, tion and ough, which receive about two seconds per paragraph in whole-word trainers. Inserts one fragment every fifth word-drill token and every seventh sprint token. Uses only fragments in Fragment mode and does not weight the fixed list by user errors.

Finger guidance

Resolves each character to finger ownership, home position and travel direction. Displays hints such as left middle, D to E, move up instead of press E, with tolerance for same-row movement.

Separates key geometry, layer bindings, finger ownership and home positions instead of using one QWERTY lookup. Sends one resolved UI hint, allowing new split or remapped profiles without UI changes. Draws coordinates on wide terminals and a compact movement line on narrow terminals.

Ships ten Settings profiles: QWERTY row-stagger and Corne 3x6+3, each with Colemak, Colemak-DH, Dvorak and Workman remaps. Loads JSON profiles from layouts/. Builds Corne profiles from Vial saves and geometry exports through marmotype import.

Vim drills

Scores deleting a word with xxxxxxx instead of dw as eleven versus three keystrokes. Provides three drills: command quizzes, edit-cost speedruns and VimGolf-style shortest-path puzzles. Ports all three dependency-free Python engines to pure Rust inside the Marmotype binary and carries over their contract tests.

Combines vim-gym motion practice with word and fragment drills. Plans shared History, QMK and VIA importers, and live firmware reads matching the connected board.