tt typing practice
Typing-practice corpora and launcher for tt. Stow-linked from this repo to
~/.config/tt/practice/and~/.local/bin/tt-practice.
Launch
- Interactive menu (category → corpus → mode):
tt-practice
Menu flow:
- Category —
Code,Literary,Scramble, orRandom Mix - Corpus (skipped for Random Mix, which picks one JSON at random)
- Mode —
30s,60s,120s, or-oneshot(quote-based)
Override the source dir: PRACTICE_DIR=... tt-practice
Corpora (~/.config/tt/practice/)
Code (symbol-heavy)
python.json— comprehensions, decorators, f-strings, type hints, asyncio, dataclassescsharp.json— LINQ, async/await, generics, records, pattern matchingterminal.json— find/grep/rg/sed/awk/xargs, git, ssh, systemd, curl
Literary (prose rhythm)
petit-prince-fr.json,petit-prince-en.json— original paraphrases of Le Petit Prince by chapter (not the copyrighted text — see licensing below)
Scramble (Monkeytype-style, 30–50 random words/entry)
scramble-fr-1k.json,scramble-en-1k.json— top 1000 words (muscle memory)scramble-fr-full.json,scramble-en-full.json— full ~50k frequency list (vocabulary breadth)
Regenerate scrambles
All files:
python3 ~/.config/tt/practice/generators/generate_scrambles.pySingle file:
python3 ~/.config/tt/practice/generators/generate_scrambles.py --only en-full
Sources tried in order: FrequencyWords (network) → dwyl/english-words (en-full only) → /usr/share/dict/. Deterministic for a fixed --seed.
Adding a new corpus
- Drop a flat-array JSON into
.config/tt/practice/ - Add it to
.local/bin/tt-practice(declare -Amap + matching*_ORDERarray) - Re-run
stow -v .only if you added a new directory
Format gotcha
tt -quotes <file> wants a flat JSON array, not an object:
[ {"text": "...", "attribution": "..."} ]
Wrapping in {"language": ..., "quotes": [...]} errors with
cannot unmarshal object into Go value of type []main.segment.
Petit Prince licensing
French original is in copyright in FR until 2032 (standard term + war
extensions + mort pour la France). Translations have their own clocks.
The shipped files are original paraphrases to stay clearly safe — see
generators/README.md for jurisdiction-by-jurisdiction reasoning.