Skip to content

one7two99/sonata

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sonata — 28-Key Keyboard Layout

Sonata (n.): a complete musical form in three or four movements — the synthesis of theme, development, and resolution.

Sonata is the third layout in a family with Cadenza (36-key) and Coda (22-key). It carries the structural strengths of both — full HRM bilateral, complete alphabet on base, dedicated Backspace, zero lateral stretch — onto 28 keys, while closing the SFB gap to Miryoku that v1.1 still had.

Version: v2.0 (April 2026) · C1-balance redesign


Layout

 Left                        Right
 ┌───┬───┬───┬───┐          ┌───┬───┬───┬───┐
 │ Z │ W │ G │ M │          │ L │ Y │ P │ J │   ← top row
 ├───┼───┼───┼───┤          ├───┼───┼───┼───┤
 │ A │ R │ S │ T │          │ N │ E │ I │ O │   ← home row · HRM
 ├───┼───┼───┼───┤          ├───┼───┼───┼───┤
 │ V │ C │ U │ D │          │ H │ F │ B │ K │   ← bottom row
 └───┴───┴───┴───┘          └───┴───┴───┴───┘
             ┌───┬───┐  ┌───┬───┐
             │Tab│Spc│  │Bsp│Ent│   ← thumbs
             └───┴───┘  └───┴───┘

HRM (home row): A·R·S·T = Meta · Alt · Ctrl · Shift (left) · N·E·I·O = Shift · Ctrl · AltGr · Meta (right) WM access: G-hold or Y-hold (bilateral mid-top) Layer thumbs: Tab → Nav · Space → Sym · Bsp → Num · Ent → CLI Overflow letters: X, Q (and ä, ö, ü, ß, €) on Tab+Bsp combo layer


Headline metrics

Metric Value
Keys 28 (4 cols × 3 rows × 2 + 2 thumbs × 2)
SFB rate ~1.27% (estimated; range 1.15–1.40%)
Home row % 63.5%
Hand balance L/R 47.6 / 52.4
Lateral stretch 0% (no inner column)
Pinky load — raw 14.6%
Pinky load — weighted¹ 16.1% (v2.0 ↓ from v1.1's 18.7%)
Overflow letters X · Q (combo Tab+Bsp)
Layers 10
Tap Dances 34
Macros 16

¹ Position weights: top × 2.0, home × 1.0, bot × 1.2 — pinky-top is harder than pinky-bot.

Honest caveat on SFB: the ~1.27% number is an informed estimate from per-column bigram analysis, not a corpus-verified measurement. Range with my uncertainty: 1.15–1.40%. A real bigram-frequency pass against mixed German + English + code is the next validation step. The previously-published "0.20% SFB" claim from v1.0 was wrong and has been corrected.


v2.0 Changelog — full alpha redesign

v2.0 keeps the Colemak-DH home row (A R S T / N E I O) but reshuffles all 16 off-home letters. Goal: close the SFB gap to Miryoku without giving up Sonata's structural wins (zero lateral stretch, German EU advantage, cross-hand Meta+Alt, dedicated Backspace).

Position v1.1 v2.0 Why
L_pinky_bot G V G's frequency (2.5%) wasted on a pinky-bot; V (0.9%) is cheaper there
L_ring_top W W unchanged
L_ring_bot M C C off L_mid (was 0.30% SC SFB); RC ~0.15% is the cheapest C-anywhere
L_mid_top F G F leaves; G fits with rare S-bigrams
L_mid_bot C U U on L_mid: SU/US is the dominant new column SFB (~0.30%) but cheapest U-on-left
L_idx_top B M M is rare with T (no SFB); B leaves the left-index column
L_idx_bot D D unchanged
R_idx_top L L unchanged
R_mid_top Y Y unchanged
R_mid_bot K F F pairs with E cheaper than K does; K moves to R_pinky_bot
R_ring_top V P P with I-home is essentially zero SFB
R_ring_bot U B B with I-home is essentially zero SFB; U leaves the I-column entirely
R_pinky_top J J unchanged
R_pinky_bot P K K is rare with O-home
Effect Before (v1.1) After (v2.0) Δ
SFB rate 1.79% ~1.27% −0.52 pp
L_mid column SFB (was the worst SC trap) 0.35% 0.35% (now SU/US, similar magnitude) 0
R_ring column SFB (was the V·I·U disaster) 0.45% ~0.05% −0.40 pp
L_idx column SFB 0.22% 0.08% −0.14 pp
R_pinky column SFB 0.20% 0.05% −0.15 pp
Weighted pinky load 18.7% 16.1% −2.6 pp
Hand balance 47.3 / 51.2 47.6 / 52.4 similar
German SCH bigram column SFB fixed (S and C now different fingers) structural ✓

Other v2.0 changes:

  • WM trigger letter: G-hold + Y-hold (was F+Y in v1.1; F left mid-top)
  • L_OVERFLOW ü position: moved to L_mid_bot (follows U from R_ring_bot)
  • L_CLI macros M12–M16: bound by physical position; alpha letter labels under those positions changed but the macro mapping is unchanged
  • 0.20% SFB myth retired: documentation now reflects honest column-by-column estimates with explicit uncertainty bounds

Honest verdict — Sonata v2.0 vs Miryoku

v1.0 oversold Sonata as "superior to every layout listed." v1.1 corrected this to "sibling, not successor" (Sonata at 1.79% SFB vs Miryoku at 1.28%). v2.0 closes most of that SFB gap.

Sonata v2.0 wins on:

  • Lateral index stretch — zero vs Miryoku's low (>0). Structural win from no inner column.
  • German EU bigram — cross-hand vs Miryoku's same-finger. Real difference for German content.
  • Meta+Alt — cross-hand vs Miryoku's HRM same-hand conflict. Cleaner WM keybindings.
  • German SCH — cross-finger (no SFB) in v2.0 vs Miryoku's same-finger SCH on Colemak-DH-36.
  • Marginal: SFB rate (~1.27% vs 1.28%) — essentially tied within estimation noise; both pending corpus verification.

Miryoku wins on:

  • Weighted pinky load (~14.1% vs 16.1%) — ~2 pp lower, the most significant remaining ergonomic delta.
  • Home row % (68% vs 63.5%) — structural cost of 8 fewer keys.
  • Hardware availability — Sweep / Corne off-the-shelf vs Sonata's custom 28-key PCB.
  • Documentation maturity & community track record — Miryoku has years of validation; Sonata is a personal project.

Verdict: Sonata v2.0 is a credible sibling on the same Pareto frontier. It no longer trails on SFB. The remaining gaps (pinky, home-row) are intrinsic to the 28-key constraint and would require either more keys (defeating the point) or accepting a different style of trade (e.g., putting U on the pinky — explored as the C1-bestV variant and held in reserve as a possible v2.1).


Comparison summary

Metric QWERTY/Z Colemak-DH Miryoku Cadenza Coda Sonata v2.0
Keys 104+ 104+ 36 36 22 28
SFB rate 6.31% 1.28% 1.28% ~1.20% ~0.90% ~1.27%
Home row 34% 68% 68% 68% 64% 63.5%
Pinky raw ~14% ~6% ~13.4% ~5% 0% 14.6%
Pinky weighted ~17.5% ~7.7% ~14.1% ~6.5% 0% 16.1%
Lateral stretch Very high Low Low Low Zero Zero
Inner column Yes Yes Yes (5-col) Yes No No
Backspace Yes Yes Yes (thumb) Yes (thumb) No (combo) Yes (thumb)
German EU Same-row roll Same-finger ✗ Same-finger ✗ Same-finger ✗ Different col ✓ Different col ✓
German SCH n/a Column SFB Column SFB Column SFB OK Cross-finger ✓
Meta + Alt Both held LH Mod keys HRM (LH conflict) Cross-hand ✓ Both LH ring ✗ Cross-hand ✓
Layers 1–2 1–2 6 13 9 10

Family progression

Cadenza (36)  →  Sonata (28)  →  Coda (22)
The virtuoso     The complete     The distilled
   solo            movement        conclusion

Roadmap

  • v1.0 — Initial complete design (✓ April 2026)
  • v1.1 — Pinky swap + weighted analysis + honest verdict + Miryoku fix (✓ April 2026)
  • v2.0 — Full alpha redesign (C1-balance): Colemak-DH home preserved, all 16 off-home letters reshuffled, SFB closes from 1.79% to ~1.27%, weighted pinky drops from 18.7% to 16.1% (✓ this release)
  • v2.x — Corpus verification of SFB estimates · QMK firmware on custom 28-key PCB · daily-use validation · evaluation of whether C1-bestV (U on pinky for ~0.97% SFB at the cost of higher pinky load) is worth migrating to

License & credits

MIT License · 2026 · one7two99 Based on Colemak-DH by stevep99 (home row preserved; column-mates redesigned in v2.0).

Family: Cadenza (36) · Sonata (28) · Coda (22)

About

28-key custom split keyboard layout. Colemak-DH home row, zero lateral stretch (no inner column), full bilateral HRM with cross-hand Meta+Alt, dedicated Backspace, 10-layer system. Tuned for mixed English + German + shell/code typing.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

 
 
 

Contributors