Keyboard layer model (2026-07-30, settled 2026-07-31)
Josh’s selections on the text-entry candidates add a QWERTY layer to the deck. That did not fit the layout ADR-0031 §3.1 and ADR-0044 describe, so the layer model was re-opened. The decision is in §0; the rest records why, and what was rejected.
0. The decision (Josh, 2026-07-31)
Section titled “0. The decision (Josh, 2026-07-31)”Josh’s rules:
- QWERTY is an alternate layer. Never the base, never the default, never the printed primary. The Lisp keycaps stay on the front of the board.
- The Ferris Sweep shape does not change.
- QWERTY stays real QWERTY. No letter moves out of its position.
- T9 survives. The digits stay on the base.
- Three layers, printed on custom keycaps: base large and centred, layer 2 in one top corner, layer 3 in the other.
- Keep it simple. This is a gaming device, and the layers need not be full.
What the T-34 layout settles
Section titled “What the T-34 layout settles”The T-34 is
the same 34-key Ferris. Its structural lesson: a real QWERTY consumes all 30 main keys, so
every layer key and modifier has to live on the four thumbs. Nothing on the letter layer
can be anything but a letter, so nothing displaces one. That is what keeps z at home.
The consequence is good news: the base layer needs no rearrangement, and no verb has to be dropped. The left half already holds 13 verbs in 15 slots and the right half already holds the digits and the five punctuation primaries. Everything Josh listed is already there.
Dropping verbs is also expensive, which the base fitting removes the need for. Each of the
droppable candidates is referenced across the module specs: INFO and QUOTE in 20 each,
APPLY in 18, LINK in 16, NIL in 14, ATOM in 13.
The three layers
Section titled “The three layers”| Layer | Reached by | Left half | Right half |
|---|---|---|---|
| 1 · BASE | default | the 13 verbs, unchanged | digits 1-9, / ; - . ,, ENT |
| 2 · NAV + SYMBOLS | hold the left outer thumb | navigation: ESC TAB, arrows, HOME END PGUP PGDN DEL, and abc | the ADR-0044 §2 symbol manifest, unchanged |
| 3 · QWERTY | press abc on layer 2 | qwert asdfg zxcvb | yuiop hjkl; nm,./ |
Thumbs: base keeps EVAL · LAYER · 0 · TERM exactly as committed, with LT1 renamed from
SHIFT (it never shifted) to LAYER. Inside layer 3 the same four thumbs become
SHIFT · NUM · SPACE · abc, where SHIFT is tapped once and the next letter is a capital, NUM
is held for a number row across both halves, and abc leaves.
Cost: zero new keys, zero base changes, both blank keys still free.
Measured in the workbench simulator: kx-04.hab is 14 presses, a capital is 2, leaving is 1.
Faults found by typing on it
Section titled “Faults found by typing on it”Both were found by typing rather than by reading, and both are fixed in the layout above:
- Zero was unreachable inside the letters. The base keeps
0on the right inner thumb, and that thumb is SPACE while letters are live. Layer 3 now carries its own number row across both halves rather than borrowing the base map. - The
abckey collided withz. Putting the letter-layer toggle on a main key means that key cannot also be a letter.abcis therefore live on layer 2 only; leaving is a thumb. Every activation is scoped to the layers it appears on.
What this still costs
Section titled “What this still costs”A toggled layer is a state the hands cannot feel: press CAR with letters on and the deck types
f. Row 0 has to carry the indicator, which makes it a ui/ kit requirement.
1. The selections
Section titled “1. The selections”| Verdict | Candidates |
|---|---|
| Picked | QMK-ALPHA (a QWERTY layer, firmware), MT-COMMIT (multi-tap without a timeout, runtime), PALETTE-1ST (narrow), PICK-GRID, PREFIX-ESC, HIST-1ST (modifier), HYBRID |
| Rejected | MT-DWELL, MT-STRICT, PICK-2KEY, QMK-CHORD, TRACK-WHEEL |
| Unmarked | T9-WORD, T9-KEC |
The shape is a HYBRID composition: a QWERTY layer for free typing, MT-COMMIT as the
runtime spelling path that needs no firmware, PALETTE-1ST for the narrowing surfaces,
PICK-GRID as the escape hatch for a glyph no layer carries, and PREFIX-ESC and HIST-1ST
as modifiers.
Both rejected multi-tap variants carried a clock or ceremony that MT-COMMIT does without,
and both rejected pickers and the chord model carried a learning cost with no offsetting
speed. The through-line in every rejection is that the deck refuses to pay in timing or in
memorised gestures.
The two predictive models are unmarked. A ranked dictionary earns its keep when a letter is
expensive; once a letter is one press, T9 over a word list mostly competes with typing. The
one part that survives on its own merit is the reflective half of T9-KEC: ranking the
symbols actually bound is completion, and PALETTE-1ST already carries completion.
2. The defect the QWERTY commitment exposes
Section titled “2. The defect the QWERTY commitment exposes”The committed layout has no case modifier. LT1 is named LSHIFT and is bound
MO(L1) (ADR-0031 §3.1 per-key table, LT1 row), which is a momentary layer switch. The
per-key table’s own Notes column says so: “Momentary SHIFT layer activation.”
ADR-0031 §“LSHIFT-as-thumb” closes the shift gesture question by making it a thumb hold, and
what that hold selects is the L1 punctuation layer. Nothing anywhere in L0, L1, or L2 produces
an uppercase letter.
The gap was invisible until now because no committed layer carried letters. Case in literal
entry came from the multi-tap machine instead: / toggles case in :nemacs-literal and
:prompt-text scope (ADR-0022 §7, carried into ADR-0031 §3.3), handled by nokia.c’s
NokiaCaseMode in the runtime rather than by the keyboard. A QWERTY layer moves letters into
firmware and leaves that mechanism behind, so the deck acquires letters and loses their case
in the same move.
Two further consequences of the same commitment:
- No activation is free for an alpha layer. ADR-0044 §1 binds L0, L1 (hold LT1), and L2 (the LSHIFT+TERM tri-layer). A fourth layer needs a fourth activation.
- Punctuation has to be reachable from inside the letters. The ADR-0044 §2 SHIFT manifest
puts the KEC punctuation on the right half of the digit base. Typing Lisp on an alpha
layer needs
(and)without leaving the letters, and the committed manifest cannot supply them there.
3. The free budget
Section titled “3. The free budget”More room exists than the layer count suggests.
| Resource | State |
|---|---|
| L20, L21 (left pinky and ring, bottom row) | KC_NO, reserved v2 spares (ADR-0031 §3.1). The only unbound positions on the board. |
| LT0 hold (EVAL) | unused |
RT0 hold (0) | unused |
| RT1 hold (TERM) | partly spent: participates in the L2 tri-layer, and ADR-0016 §9 gives TERM a long-press context binding |
| LT1 hold | spent on MO(L1) |
| The four thumb taps | locked. ADR-0032 §4 forbids reassigning any of them to a mouse click; ADR-0044 §3 generalises that to no thumb tap being sacrificed. |
The lock is on taps, so a thumb hold is available currency and a v2 spare is scarce currency. A candidate that spends a hold costs less than one that spends a spare.
4. The four candidate stacks (all rejected; kept as the record of why)
Section titled “4. The four candidate stacks (all rejected; kept as the record of why)”Staged in the workbench with a layer simulator over the real 34-key positions: each stack is typeable, layer keys hold and latch, and the buffer shows what a press produces. Press counts below come from that simulator as measurements.
| Stack | Where letters live | New keys | Layers | Spares left | Hello |
|---|---|---|---|---|---|
ST-GUEST | a latched guest layer over today’s base | 2 | 5 | 0 | 7 |
ST-INVERT | the base itself; the deck block becomes a layer | 0 | 3 | 2 | 6 |
ST-TWOBASE | a co-equal second base, toggled, Row 0 shows the mode | 1 | 6 | 1 | 7 |
ST-HOLD | a momentary layer held on a thumb | 1 | 4 | 1 | 8 |
ST-INVERT measured cheapest, and Josh rejected it along with ST-TWOBASE on rule 1: the
Lisp keycaps stay on the front of the board, so a stack that makes letters the base or a
co-equal base is out regardless of press counts. ST-GUEST and ST-HOLD were superseded by
the §0 layout, which does the same job for one key instead of two and puts Shift on a thumb
instead of a corner.
5. How Shift gets provided
Section titled “5. How Shift gets provided”Orthogonal to the stack, and staged separately so it can be judged on its own.
| Mechanism | Cost | Objection |
|---|---|---|
| Dedicated Shift on a v2 spare | one spare | the weakest position on the board, held while the other hand types |
| One-shot (sticky) | one spare or one hold | a state that persists between two keypresses; needs an on-glass tell |
| Home-row mods | nothing | reintroduces tap-hold timing, in firmware, where ctest cannot reach it |
| LT1 becomes a real Shift where letters are live | nothing | one key with two meanings, decided by the live layer |
The home-row option is the standard answer on a 34-key board and the one that fits this deck worst: the timing term is the same dependency the dwell model was rejected for, relocated somewhere harder to test. The last option is free and retires a misnomer, and it reads cleanly only where letters are the base.
6. Still open
Section titled “6. Still open”- The Row 0 indicator. A toggled layer needs an on-glass tell, and that is a
ui/kit component rather than a keymap change. - What
MT-COMMITis for once the letter layer ships. It keeps working, because it runs in the runtime and needs no firmware, so it is the path that exists before the keymap retarget lands. Whether it stays afterwards is a later call. - The two unmarked predictive candidates,
T9-WORDandT9-KEC. - The QMK keymap retarget, still pre-ADR-0031 (the 31-key matrix, one
_BASElayer). It is the dependency for shipping any of this to hardware.