/keyboard
Thirty-four keys.
Built for lists.
The same keys that run a mission also write the code behind it. A split board, two 17-key halves: 14 Lisp-primitive keys on the left, a T9-style digit pad on the right, and a trackpoint on each side. It’s a stock Ferris Sweep: hot-swap Kailh Choc v1 switches under MBK keycaps, two controllers over a TRRS bridge, running QMK.
34 keys · split · two 17-key halves
left · function block · 14 Lisp primitives
right · digits · T9 text · ENT
hover or focus a key
The Layout
Thirty-four keys, split across two hands. The left half carries the Lisp verbs (CAR, CDR, CONS, EVAL, QUOTE, FN and the rest): everything you need to compose, evaluate, and navigate. The right half is a digit 3×3 with Nokia-style letters (2=ABC … 9=WXYZ), punctuation, and ENT.
Each half has a trackpoint between the alpha keys, one per index finger, that the firmware merges into a single cursor. TERM lives on the right thumb and changes verb with the surface.
Inside the editor, the digit pad does multi-tap text. Outside it, the same keys are plain numeric input.
Function Keys
A function key sweep: each key pulses, and its verb appears in the action bar. The TERM key is context-sensitive: its verb depends on the surface that's currently active.
Multi-Tap Text
Inside the editor, the right-hand digit pad behaves like a phone keypad: rapid taps cycle through letters, a settle delay commits. Tap out a symbol like DEFUN across a few keys. Outside the editor, the same keys are the digits 3, 8, and 6.
Tap vs Hold
One key, two verbs. A tap on CIPHER opens the CIPHER tab. A hold past 500 ms enters seed-capture mode. The active surface sets what the long press means.
Firmware
A stock Ferris Sweep kit: two controllers, one per half, bridged over TRRS and running QMK. The master half presents a single USB HID interface to the Pi through the internal hub, folding in both trackpoints as one cursor and a held shift layer for the full KEC Lisp punctuation set. Standard layers, custom dispatch. The keyboard reports keystrokes; the runtime maps them to actions.
Follow the build
Field dispatches cover keyboard revisions, firmware behavior, and the LISP grammar as I build the physical deck.
> GET DISPATCHES_