LYNXgram Key Layout
LYNXgram is the default key layout for lynx-v4, optimized for German language typing on a split ergonomic keyboard.
Layout
Main Layer
╭─────────────────────────────────╮ ╭───────────────────────────────────╮
│ LEFT FINGER │ │ RIGHT FINGER │
│ │ │ │
│ ┌───┬───┬───┐ │ │ ┌───┬───┬───┐ │
│ │ y │ o │ u │ │ │ │ l │ d │ w │ │
│ ┌───┼───┼───┼───┼───┐ │ │ ┌───┼───┼───┼───┼───┐ │
│ │ b │ i │ e │ a │ . │ │ │ │ │ h │ t │ s │ v │ │
│ ┌───┼───┼───┼───┼───┼───┤ │ │ ├───┼───┼───┼───┼───┼───┐ │
│ │ z │ c │ j │ x │ k │ , │ │ │ │ │ r │ m │ f │ n │ q │ │
│ ├───┼───┼───┼───┼───┼───┤ │ │ ├───┼───┼───┼───┼───┼───┤ │
│ │ ß │ g │ 0 │ 0 │ - │ ' │ │ │ │ │ # │ @ │ & │ p │ % │ │
│ └───┴───┴───┴───┴───┴───┘ │ │ └───┴───┴───┴───┴───┴───┘ │
╰─────────────────────────────────╯ ╰───────────────────────────────────╯
╭───────────────────────────────────╮ ╭───────────────────────────────────╮
│ LEFT THUMB │ │ RIGHT THUMB │
│ │ │ │
│ ┌─────┬─────┐ │ │ ┌─────┬─────┐ │
│ │ ESC │ DEL │ │ │ │ ↑ │ → │ │
│ ┌─────┬─────┐ │ │ ┌─────┬─────┐ │
│ │ END │HOME │ │ │ │ ← │ ↓ │ │
│ ┌─────┬─────┬─────┐ │ │ ┌─────┬─────┬─────┐ │
│ │BACK │SPACE│CAPS │ │ │ │ M1 │ M2 │ M3 │ │
│ ┌─────┬─────┐ │ │ ┌─────┬─────┐ │
│ │CTRL │SHIFT│ │ │ │ENTER│ TAB │ │
│ ┌─────┬─────┐ │ │ ┌─────┬─────┐ │
│ │ GUI │ ALT │ │ │ │ mo1 │ mo2 │ │
│ └─────┴─────┘ │ │ └─────┴─────┘ │
╰───────────────────────────────────╯ ╰───────────────────────────────────╯
Legend: M1/M2/M3 = Mouse buttons (Left/Right/Middle)
FN = Layer key (momentary)
BACK = Backspace
Secondary Layer (Layer 1)
Activated by holding mo1 or mo2 on the right thumb cluster.
╭─────────────────────────────────╮ ╭───────────────────────────────────╮
│ LEFT FINGER │ │ RIGHT FINGER │
│ (Numbers + Operators) │ │ (Brackets + Umlauts) │
│ │ │ │
│ ┌───┬───┬───┐ │ │ ┌───┬───┬───┐ │
│ │ 3 │ 2 │ 1 │ │ │ │ ( │ [ │ { │ │
│ ┌───┼───┼───┼───┼───┐ │ │ ┌───┼───┼───┼───┼───┐ │
│ │ = │ 6 │ 5 │ 4 │ . │ │ │ │🎡 │ ) │ ] │ } │ ä │ │
│ ┌───┼───┼───┼───┼───┼───┤ │ │ ├───┼───┼───┼───┼───┼───┐ │
│ │ | │ 0 │ 9 │ 8 │ 7 │ , │ │ │ │🎡 │F2 │ │ │ ö │ < │ │
│ ├───┼───┼───┼───┼───┼───┤ │ │ ├───┼───┼───┼───┼───┼───┤ │
│ │ │ / │ * │ - │ + │ " │ │ │ │🎡 │ │ │ │ ü │ > │ │
│ └───┴───┴───┴───┴───┴───┘ │ │ └───┴───┴───┴───┴───┴───┘ │
╰─────────────────────────────────╯ ╰───────────────────────────────────╯
╭───────────────────────────────────╮ ╭───────────────────────────────────╮
│ LEFT THUMB │ │ RIGHT THUMB │
│ (Modifiers preserved) │ │ (Navigation preserved) │
│ │ │ │
│ ┌─────┬─────┐ │ │ ┌─────┬─────┐ │
│ │ ESC │ DEL │ │ │ │ ↑ │ → │ │
│ ┌─────┬─────┐ │ │ ┌─────┬─────┐ │
│ │ END │HOME │ │ │ │ ← │ ↓ │ │
│ ┌─────┬─────┬─────┐ │ │ ┌─────┬─────┬─────┐ │
│ │BACK │SPACE│CAPS │ │ │ │ │ │ │ │
│ ┌─────┬─────┐ │ │ ┌─────┬─────┐ │
│ │CTRL │SHIFT│ │ │ │ENTER│ TAB │ │
│ ┌─────┬─────┐ │ │ ┌─────┬─────┐ │
│ │ GUI │ ALT │ │ │ │[mo1]│[mo2]│ │
│ └─────┴─────┘ │ │ └─────┴─────┘ │
╰───────────────────────────────────╯ ╰───────────────────────────────────╯
Legend: 🎡 = Scroll wheel (no key)
[mo1]/[mo2] = Layer keys (held to activate this layer)
Empty cells = Transparent (no action)
Origin
LYNXgram is based on Engram — a keyboard layout designed using modern computational analysis to minimize finger travel and optimize typing comfort.
Why Engram as a foundation:
- Optimized for English while remaining adaptable to other languages
- Designed with ergonomic finger placement in mind
- Considers real-world typing patterns and bigram frequencies
- Created specifically for alternative keyboard layouts (not QWERTY retrofitting)
LYNXgram Adaptations
LYNXgram modifies Engram for:
- German language — positioning umlauts (ä, ö, ü) and Eszett (ß) on accessible keys
- Split ergonomics — leveraging the modular thumb clusters for modifiers and navigation
- Wireless workflow — layer keys positioned for single-hand access when needed
Complete Key Mapping Table
Physical key name → virtual matrix position → layer assignments.
Naming convention: L/R = Left/Right, i/m/r/p = index/middle/ring/pinky, t = thumb, number = position.
Left Finger Module
| Key | Matrix | Layer 0 | Layer 1 |
|---|---|---|---|
| Li1 | [3][1] | u | 1 |
| Lm1 | [3][2] | o | 2 |
| Lr1 | [3][3] | y | 3 |
| Li2 | [2][1] | a | 4 |
| Lm2 | [2][2] | e | 5 |
| Lr2 | [2][3] | i | 6 |
| Lp1 | [2][4] | b | = |
| Li3 | [1][1] | k | 7 |
| Lm3 | [1][2] | x | 8 |
| Lr3 | [1][3] | j | 9 |
| Lp2 | [1][4] | c | 0 |
| Lp4 | [1][5] | z | | |
| Li4 | [0][1] | - | + |
| Lm4 | [0][2] | 0 | - |
| Lr4 | [0][3] | 0 | * |
| Lp3 | [0][4] | g | / |
| Lp5 | [0][5] | ß | ∅ |
| Li5 | [2][0] | . | . |
| Li6 | [1][0] | , | , |
| Li7 | [0][0] | ∅ | " |
Left Thumb Module
| Key | Matrix | Layer 0 | Layer 1 |
|---|---|---|---|
| Lt11 | [5][0] | Delete | Delete |
| Lt21 | [4][0] | Escape | Escape |
| Lt12 | [5][3] | Home | Home |
| Lt22 | [4][3] | End | End |
| Lt13 | [5][4] | CapsLock | CapsLock |
| Lt23 | [5][1] | Space | Space |
| Lt33 | [4][1] | Backspace | Backspace |
| Lt14 | [5][5] | Shift | Shift |
| Lt24 | [4][5] | Ctrl | Ctrl |
| Lt15 | [5][2] | Alt | Alt |
| Lt25 | [4][2] | GUI | GUI |
Right Finger Module
| Key | Matrix | Layer 0 | Layer 1 |
|---|---|---|---|
| Ri1 | [9][1] | l | ( |
| Rm1 | [9][2] | d | [ |
| Rr1 | [9][3] | w | { |
| Ri2 | [8][1] | h | ) |
| Rm2 | [8][2] | t | ] |
| Rr2 | [8][3] | s | } |
| Rp1 | [8][4] | v | ä |
| Ri3 | [7][1] | r | F2 |
| Rm3 | [7][2] | m | ∅ |
| Rr3 | [7][3] | f | ∅ |
| Rp2 | [7][4] | n | ö |
| Rp4 | [7][5] | q | < |
| Ri4 | [6][1] | # | ∅ |
| Rm4 | [6][2] | @ | ∅ |
| Rr4 | [6][3] | & | ∅ |
| Rp3 | [6][4] | p | ü |
| Rp5 | [6][5] | % | > |
| Ri5 | [8][0] | 🎡 | 🎡 |
| Ri6 | [7][0] | 🎡 | 🎡 |
| Ri7 | [6][0] | 🎡 | 🎡 |
Right Thumb Module
| Key | Matrix | Layer 0 | Layer 1 |
|---|---|---|---|
| Rt11 | [11][0] | ↑ | ↑ |
| Rt21 | [10][0] | → | → |
| Rt12 | [11][3] | ← | ← |
| Rt22 | [10][3] | ↓ | ↓ |
| Rt13 | [11][4] | M1 | ∅ |
| Rt23 | [11][1] | M2 | ∅ |
| Rt33 | [10][1] | M3 | ∅ |
| Rt14 | [11][5] | Enter | Enter |
| Rt24 | [10][5] | Tab | Tab |
| Rt15 | [11][2] | mo(1) | [held] |
| Rt25 | [10][2] | mo(1) | [held] |
Legend:
∅= No action (k!(No))🎡= Scroll wheel (no physical key)mo(1)= Momentary layer 1 switch[held]= This key is being held to activate Layer 1M1/M2/M3= Mouse buttons (Left/Right/Middle)
Layout Reference
See key-mapping.md for the complete physical-to-virtual matrix transformation.
The default keymap is defined in firmware/tower/src/config.rs:get_default_keymap().