- Chord Mode - Type 220+ common words with just two letters! See the complete documentation for details.
- Design Philosophy - Learn about the hardware, ergonomics, and design principles behind this layout
- Home Row Mods - Modifiers on home row for ergonomic access
- Window/Tab Switching - Fast application and tab switching
- X-Case - Multiple case conversion modes (camelCase, snake_case, etc.)
- The keyboard layout is generated using generateKeyboard from this file. => link to Generator
- The generated keyboard can be found in the qmk directory.
- tested with Ferris Sweep keyboard
On all other layers, the modifiers are as shown in the table below.
| Home Row Modifiers | Finger |
|---|---|
| Alt | Ring |
| Ctrl | Middle |
| Shift | Index |
- win โก๏ธ and tab โก๏ธ are used to Short windows and tabs.
- Once you press any of those keys, you're in switcher mode, where all other keys are replaced by shift-tab.
- Switcher mode is exited when you go back to the base layer.
How to read this layout:
- ๐ = combo key (e.g. middle and index finger in top row pressed together produce "b")
- ๐ = key can't be used because the layer was activated with that key or because it's reserved for a modifier
- empty = use key from base layer
- FnSym = capitalized words are layer names - if they are a key, the layer is activated as toggled or one shot layer (if the "OneShot" flag is set in the layer flags)
- *Mouse = layer is active while key is held
- C-w = Ctrl-w (same for Alt and Shift)
- f12+Num = tab-mod - f12 on tap and Num on hold
- "that" = combo that produces "that"
- [ { = { is the shifted key of [, so it's used when Shift is held (only for information)
- The symbol table at the bottom shows the meaning of the symbols used in the layout.
Currently unused features:
- /+Ctrl = tab-mod - / on tab and CTRL on hold
- $Mouse = layer is active while key is held (double tap to lock layer)
- #Mouse = toggle layer
- @Num = layer is active for the next keypress
- Sym/Nav = layer is active for the next keypress: If the activation key is still down when the next key is pressed, the Nav layer is used, otherwise the Sym layer is used
Note: The layout is generated from this file directly.
| Magic | Magic A | Magic B | Magic C |
|---|---|---|---|
| b | d | "ecause" | |
| g | d | k | f |
| k | x | "now" | h |
| l | c | r | h |
| m | l | "ent" | h |
| s | d | "ion" | r |
| w | x | s | |
| d | f | "oesn't" | h |
| f | "or" | f | |
| h | y | "ey" | |
| i | ' | "'ve" | |
| n | x | r | h |
| p | d | n | m |
| v | "er" | "en" | |
| x | d | r | w |
| t | x | "ion" | |
| c | d | p | |
| j | "ust" | ||
| r | k | ||
| spc | "the " | dotSpc | |
| tab | "the " | "and " | |
| โฉ๏ธ๏ธ | "the " | "and " | |
| ~ | / | ||
| , | " but " | " and " | |
| . | / | "./" | |
| - | > | ||
| = | > | ||
| ! | = |
| Adaptives | Key | Output |
|---|---|---|
| a | e | u |
| a | qu | e |
| b | d | s |
| c | d | k |
| d | f | v |
| d | h | g |
| e | h | o |
| e | qu | h |
| g | d | n |
| g | f | l |
| k | h | n |
| l | c | m |
| l | h | v |
| l | r | p |
| m | h | b |
| n | h | g |
| n | r | k |
| n | x | l |
| o | h | e |
| o | qu | h |
| p | d | l |
| p | n | s |
| s | d | p |
| s | r | k |
| t | x | m |
| u | h | a |
| u | qu | h |
| w | x | n |
| x | d | c |
| x | w | p |
| y | qu | x |
| y | x | i |
๐ Complete Chord Mode Documentation
Learn how to use chords to type 220+ common words with just two letters!
Includes usage guide, capitalization, customization, and more.
- Used = has been incorporated into daily routine (plan means those are next to learn)
| Chord | output | Used |
|---|---|---|
| b | "about" | |
| b, | "observability" | |
| b. | "boolean" | |
| be | "before" | |
| bh | "behind" | |
| bi | "being" | |
| bj | "between" | |
| bo | "become" | |
| br | "break" | |
| bu | "business" | |
| by | "body" | |
| c | "could" | |
| c, | "couldn't" | |
| c. | "const" | |
| ca | "actually" | |
| ce | "service" | |
| ch | "research" | |
| ci | "click" | |
| cj | "project" | |
| cn | "been" | |
| co | "continue" | |
| cr | "across" | |
| cu | "current" | |
| cy | "policy" | |
| d | "didn't" | plan |
| d, | "hadn't" | |
| da | "describe" | |
| dd | "zeitlinger@gmail.com" | |
| di | "does" | plan |
| dj | "build" | |
| do | "don't" | plan |
| dr | "their" | |
| du | "products" | |
| dy | "already" | plan |
| f, | "fails" | |
| f. | "false" | |
| fa | "after" | |
| ff | "gregor.zeitlinger@grafana.com" | |
| fi | "first" | |
| fj | "finger" | |
| fl | "have" | |
| fo | "information" | |
| fr | "software" | |
| fu | "found" | |
| fy | "forty" | |
| g | "again" | |
| g. | "Grafana" | |
| ga | "glance" | |
| gg | "Gregor" | |
| gi | "giving" | |
| gj | "general" | |
| go | "global" | plan |
| gy | "every" | |
| k | "question" | |
| k, | "config" | |
| kh | "check" | |
| ku | "caller" | |
| ky | "quickly" | |
| l, | "level" | |
| l. | "class" | |
| la | "language" | plan |
| le | "leave" | |
| lh | "health" | |
| li | "light" | |
| lj | "large" | |
| ll | "gregor@zeitlinger.de" | |
| lo | "along" | |
| lr | "later" | |
| lu | "almost" | |
| ly | "only" | |
| m, | "lgtm" | |
| m. | "method" | |
| me | "message" | |
| mh | "might" | |
| mi | "minute" | |
| mj | "major" | |
| mo | "feature" | |
| my | "myself" | |
| n | "understand" | |
| n, | "single" | |
| na | "anyway" | |
| nd | "instead" | |
| ne | "number" | |
| nh | "anything" | plan |
| nj | "issues" | |
| no | "another" | |
| nu | "enough" | |
| ny | "company" | |
| p | "people" | plan |
| p, | "please" | |
| p. | "promise" | |
| pa | "update" | plan |
| pe | "place" | |
| pi | "point" | |
| pj | "problem" | |
| po | "product" | |
| pp | "Prometheus" | |
| pr | "parent" | |
| pu | "public" | |
| py | "probably" | |
| r | "really" | |
| r, | "route" | |
| ra | "program" | |
| rg | "rights" | |
| rh | "review" | |
| rj | "return" | |
| rl | "query" | |
| ro | "around" | |
| rs | "request" | |
| ry | "everything" | |
| rz | "realize" | |
| s | "wasn't" | |
| s, | "should" | |
| s. | "string" | |
| se | "search" | |
| sh | "share" | |
| si | "someone" | |
| sj | "subject" | |
| so | "slowly" | |
| sr | "surprise" | |
| su | "support" | |
| st | "something" | plan |
| sy | "system" | |
| t | "think" | |
| t, | "tenant" | |
| ta | "today" | |
| te | "these" | |
| th | "other" | |
| ti | "time" | |
| tj | "through" | |
| to | "thought" | done |
| tr | "there" | |
| tt | "OpenTelemetry" | |
| tu | "though" | done |
| ty | "thank you" | plan |
| v, | "contrib" | |
| va | "available" | |
| vh | "version" | |
| vi | "services" | |
| vj | "notice" | |
| vo | "over" | |
| vr | "never" | |
| vu | "value" | |
| w, | "internal" | |
| w. | "await" | |
| we | "when" | |
| wh | "which" | |
| wi | "will" | |
| wj | "wrong" | |
| wo | "without" | |
| wr | "where" | |
| wu | "wouldn't" | |
| wy | "worry" | |
| x | "exit" | plan |
| x. | "export" | |
| xa | "example" | |
| xe | "execute" | |
| xh | "https" | |
| xi | "existing" | |
| xj | "exception" | |
| xr | "resource" | |
| xu | "actual" | |
| xy | "telemetry" | |
| z, | "smile" | |
| z. | "async" | |
| za | "organize" | |
| ze | "GitHub" | |
| zh | "Spring starter" | |
| zi | "spring" | |
| zj | "javaagent" | |
| zo | "Grafana Labs" | |
| zu | "Spring Boot" | |
| zy | "declarative config" | yes |
| zz | "Zeitlinger" |
| Layer | L. Pin. | L. Ring | L. Mid. | L. Ind. | R. Ind. | R. Mid. | R. Ring | R. Pin. |
|---|---|---|---|---|---|---|---|---|
| Base | esc | x | w | dead3 | dead2 | ' | magicC | dead1 |
| Base | s | c | n | t | a | e | i | h |
| Base | *Right | f | l | d | u | o | y | *Left |
| Base | *Nav | r | spc | *FnSym | ||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Base | v | ing | ||||||
| Base | ๐ | ๐ | ||||||
| Base | k | chord | ||||||
| Base | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Base | m | magicB | ||||||
| Base | ๐ | ๐ | ||||||
| Base | g | , | ||||||
| Base | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Base | p | magicA | ||||||
| Base | ๐ | ๐ | ||||||
| Base | b | . | ||||||
| Base | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Base | qu | q | ||||||
| Base | ๐ | ๐ | ||||||
| Base | z | j | ||||||
| Base | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Right | dead3 | " | A-โก๏ธ | |||||
| Right | C-f | C-r | ||||||
| Right | ๐ | ๐ | ๐ | ๐ | _ | |||
| Right | A-f7 | C-n | [ | ] | ||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Right | ` | |||||||
| Right | ๐ | ๐ | ||||||
| Right | CS-r | @ | ||||||
| Right | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Right | n't | |||||||
| Right | ๐ | ๐ | ||||||
| Right | CS-f | ! | ||||||
| Right | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Right | \ | |||||||
| Right | ๐ | |||||||
| Right | ? | |||||||
| Right | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| RMods | ||||||||
| RMods | ||||||||
| RMods | ๐ | ๐ | ๐ | ๐ | = | |||
| RMods | [ | ] | ||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Left | dead1 | |||||||
| Left | *CNum | *Case | *Mm | |||||
| Left | : | ๐ | ๐ | ๐ | ๐ | |||
| Left | ; | *ANum | *Num | |||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Left | "Qu" | |||||||
| Left | ๐ | |||||||
| Left | ||||||||
| Left | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| LMods | ||||||||
| LMods | ||||||||
| LMods | - | ๐ | ๐ | ๐ | ๐ | |||
| LMods | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| FnSym | dead2 | f10 | f9 | dead2 | dead3 | ( | ) | dead1 |
| FnSym | f4 | f3 | f2 | f1 | ๐ | ๐ | ๐ | =+Num2 |
| FnSym | f8 | f7 | f6 | f5 | - | { | } | *Num |
| FnSym | f12 | ๐ | ๐ | |||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| FnSym | โ | win | ||||||
| FnSym | ๐ | ๐ | ||||||
| FnSym | โ | ~ | ||||||
| FnSym | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| FnSym | * | < | ||||||
| FnSym | ๐ | ๐ | ||||||
| FnSym | f11 | / | ||||||
| FnSym | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| FnSym | pipe | > | ||||||
| FnSym | ๐ | ๐ | ||||||
| FnSym | & | # | ||||||
| FnSym | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| FnSym | ๐ | ^ | ||||||
| FnSym | ๐ | ๐ | ||||||
| FnSym | $ | % | ||||||
| FnSym | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Nav | dead3 | C-x | C-v | CS-z | dead1 | esc | ins | dead2 |
| Nav | copy | ๐ | ๐ | ๐ | โฌ ๏ธ | โฌ๏ธ | โฌ๏ธ | โก๏ธ |
| Nav | C-z | C-w | tab โก๏ธ | win โก๏ธ | โฉ๏ธ๏ธ | bspc | del | tab |
| Nav | ๐ | ๐ | spc | |||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Nav | CS-v | รผ | ||||||
| Nav | ๐ | ๐ | ||||||
| Nav | C-y | โฌ ๏ธโฌ ๏ธ | ||||||
| Nav | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Nav | C-a | รถ | ||||||
| Nav | ๐ | ๐ | ||||||
| Nav | C-d | โฌ๏ธโฌ๏ธ | ||||||
| Nav | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Nav | CS-n | รค | ||||||
| Nav | ๐ | ๐ | ||||||
| Nav | C-k | โฌ๏ธโฌ๏ธ | ||||||
| Nav | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Nav | C-e | ร | ||||||
| Nav | ๐ | ๐ | ||||||
| Nav | CS-c | โก๏ธโก๏ธ | ||||||
| Nav | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Nav | ||||||||
| Nav | CA-b | ๐ | A-f12 | |||||
| Nav | ||||||||
| Nav | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Nav | ||||||||
| Nav | C-b | ๐ | ||||||
| Nav | ||||||||
| Nav | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Nav | ||||||||
| Nav | ||||||||
| Nav | C-f12 | ๐ | C-/ | |||||
| Nav | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Nav | ||||||||
| Nav | ||||||||
| Nav | C-p | ๐ | ||||||
| Nav | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Num | dead1 | , | 9 | dead2 | ||||
| Num | 4 | 3 | 2 | 1 | ||||
| Num | 8 | 7 | 6 | 5 | ||||
| Num | . | 0 | ๐ | ๐ | ||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Num | CS-v | |||||||
| Num | ๐ | |||||||
| Num | C-g | |||||||
| Num | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Num | A-f1 | |||||||
| Num | ๐ | |||||||
| Num | CA-l | |||||||
| Num | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Num | AS-x | |||||||
| Num | ๐ | |||||||
| Num | AS-b | |||||||
| Num | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Num | ||||||||
| Num | ๐ | |||||||
| Num | AS-s | |||||||
| Num | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| ANum | ||||||||
| ANum | A-4 | A-3 | A-2 | A-1 | ||||
| ANum | A-8 | A-7 | A-6 | A-5 | ||||
| ANum | A-9 | A-0 | ๐ | ๐ | ||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| CNum | ||||||||
| CNum | C-4 | C-3 | C-2 | C-1 | ||||
| CNum | C-8 | C-7 | C-6 | C-5 | ||||
| CNum | C-9 | C-0 | ๐ | ๐ | ||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Mm | ๐ | ๐ | ||||||
| Mm | prt | ๐ | ๐ | ๐ | ๐ | |||
| Mm | ver | โฎ๏ธ | โญ๏ธ | โฏ๏ธ | ||||
| Mm | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Case | ||||||||
| Case | sl/case | PasCase | CapW | SN_CASE | ||||
| Case | do.case | camCase | kb-case | sn_case | ||||
| Case | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
The order of the options is also the order of the layers in the layer stack.
| LayerOptions | Modifiers Left | Modifiers Right | Fallback Left | Fallback Right | Flags | Combo Timeout |
|---|---|---|---|---|---|---|
| Base | 200 | |||||
| Left | BottomRow+LMods | Base | Shifted | 200 | ||
| Right | BottomRow+RMods | Base | Shifted | 200 | ||
| LMods | BottomRow+LMods | Base | ||||
| RMods | BottomRow+RMods | Base | ||||
| Nav | HomeRow | DirectComboLeft | 200 | |||
| FnSym | HomeRow | DirectComboRight | 200 | |||
| Num | TriLayer | 200 | ||||
| Num2 | HomeRow | Num | ||||
| ANum | ||||||
| CNum | 200 | |||||
| Mm | ||||||
| Case |
| Symbol | Command |
|---|---|
| โฌ ๏ธ | KC_LEFT |
| โฌ ๏ธโฌ ๏ธ | KC_HOME |
| โฌ๏ธ | KC_DOWN |
| โฌ๏ธโฌ๏ธ | KC_PGDN |
| โฌ๏ธ | KC_UP |
| โฌ๏ธโฌ๏ธ | KC_PGUP |
| โก๏ธ | KC_RIGHT |
| โก๏ธโก๏ธ | KC_END |
| โ | KC_KP_MINUS |
| โ | KC_KP_PLUS |
| ins | KC_INS |
| del | KC_DEL |
| spc | KC_SPC |
| esc | KC_ESC |
| โฉ๏ธ๏ธ | KC_ENT |
| bspc | KC_BSPC |
| win | KC_LGUI |
| tab | KC_TAB |
| prt | KC_PSCR |
| pipe | KC_PIPE |
| ๐ | KC_MUTE |
| โฏ๏ธ | KC_MPLY |
| โฎ๏ธ | KC_MPRV |
| โญ๏ธ | KC_MNXT |
| ๐ | KC_VOLU |
| ๐ | KC_VOLD |
| ๐ | KC_BRIU |
| ๐ | KC_BRID |
| copy | C(KC_C) |
| รค | UP(UMLAUT_a, UMLAUT_A) |
| รถ | UP(UMLAUT_o, UMLAUT_O) |
| รผ | UP(UMLAUT_u, UMLAUT_U) |
| ร | UM(UMLAUT_s) |
| ๐ | UM(SMILEY) |
| magicA | custom:MAGIC_A |
| magicB | custom:MAGIC_B |
| magicC | custom:MAGIC_C |
| chord | custom:CHORD_KEY NoHold |
| tab โก๏ธ | custom:NEXT_TAB NoHold |
| win โก๏ธ | custom:NEXT_WINDOW NoHold |
| n't | custom:N_T |
| qu | custom:ADPT_QU |
| ing | custom:ING |
| ver | custom:PRINT_VERSION |
| CapW | custom:CAPS_WORDS |
| sn_case | custom:SNAKE_CASE |
| SN_CASE | custom:SCREAMING_SNAKE_CASE |
| camCase | custom:CAMEL_CASE |
| PasCase | custom:PASCAL_CASE |
| sl/case | custom:SLASH_CASE |
| do.case | custom:DOT_CASE |
| kb-case | custom:KEBAP_CASE |
| dead1 | custom:DEAD1 |
| dead2 | custom:DEAD2 |
| dead3 | custom:DEAD3 |
- should be usable with any keyboard layout
QMK: https://github.com/zeitlinger/qmk_firmware/tree/ferris
- run
mise run installto install the dependencies in QMK directory - run
mise run flashto flash the keyboard in this directory