- 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 |
|---|---|---|---|
| a | u | u | |
| b | l | "ecause" | l |
| c | k | p | k |
| d | "oesn't" | "oes" | "on't" |
| e | o | o | |
| f | f | "or" | |
| g | n | k | l |
| h | y | "ey" | |
| i | ' | "'ve" | |
| j | "ust" | ||
| k | n | "now" | n |
| l | p | m | v |
| m | b | "ent" | b |
| n | g | k | "ly" |
| o | e | ||
| p | l | s | l |
| q | |||
| r | k | ||
| s | p | "ion" | p |
| t | "ion" | "ing" | "ion" |
| u | a | ||
| v | "er" | "en" | |
| w | n | s | |
| x | p | c | |
| y | |||
| z | "eitlinger" | ||
| spc | "the " | dotSpc | "the " |
| tab | "the " | "and " | |
| โฉ๏ธ๏ธ | "the " | "and " | |
| ~ | / | ||
| , | " but " | " and " | |
| . | / | "./" | |
| - | > | ||
| = | > | ||
| ! | = |
๐ 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.
| Chord | output |
|---|---|
| b | "about" |
| b, | "observability" |
| b. | "boolean" |
| be | "began" |
| 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" |
| d, | "hadn't" |
| d. | "data" |
| da | "describe" |
| dd | "zeitlinger@gmail.com" |
| de | "them" |
| dh | "than" |
| di | "during" |
| dj | "build" |
| do | "import" |
| dr | "their" |
| du | "products" |
| dy | "already" |
| f | "from" |
| f, | "fails" |
| f. | "false" |
| fa | "after" |
| fe | "feel" |
| ff | "gregor.zeitlinger@grafana.com" |
| fh | "then" |
| 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 | "group" |
| gr | "great" |
| gu | "guess" |
| gy | "every" |
| k | "question" |
| k, | "config" |
| k. | "key" |
| ka | "make" |
| ke | "keep" |
| kh | "check" |
| ki | "kind" |
| kj | "java" |
| ko | "know" |
| kr | "work" |
| ku | "caller" |
| ky | "quickly" |
| l | "like" |
| l, | "level" |
| l. | "class" |
| la | "also" |
| ld | "with" |
| le | "leave" |
| lh | "health" |
| li | "light" |
| lj | "large" |
| ll | "gregor@zeitlinger.de" |
| lo | "along" |
| lr | "later" |
| lu | "almost" |
| ly | "only" |
| m | "more" |
| m, | "lgtm" |
| m. | "method" |
| ma | "some" |
| me | "message" |
| mh | "might" |
| mi | "minute" |
| mj | "major" |
| mo | "feature" |
| mu | "music" |
| my | "myself" |
| n | "understand" |
| n, | "single" |
| na | "anyway" |
| nd | "instead" |
| ne | "number" |
| nh | "anything" |
| ni | "into" |
| nj | "issues" |
| no | "another" |
| nr | "near" |
| nt | "that" |
| nu | "enough" |
| ny | "company" |
| p | "people" |
| p, | "please" |
| p. | "promise" |
| pa | "privacy" |
| pe | "place" |
| ph | "http" |
| pi | "point" |
| pj | "problem" |
| po | "product" |
| pp | "Prometheus" |
| pr | "parent" |
| pu | "public" |
| py | "probably" |
| r | "really" |
| r, | "route" |
| r. | "error" |
| ra | "program" |
| re | "ready" |
| rg | "rights" |
| rh | "review" |
| ri | "right" |
| rj | "return" |
| rl | "query" |
| ro | "around" |
| rs | "request" |
| rt | "they" |
| ru | "true" |
| ry | "years" |
| rz | "realize" |
| s | "should" |
| s, | "wasn't" |
| s. | "string" |
| sa | "same" |
| sc | "this" |
| se | "search" |
| sh | "share" |
| si | "someone" |
| sj | "subject" |
| so | "slowly" |
| sr | "surprise" |
| su | "support" |
| sy | "system" |
| t | "think" |
| t, | "tenant" |
| t. | "type" |
| ta | "today" |
| te | "these" |
| th | "other" |
| ti | "time" |
| tj | "through" |
| to | "thought" |
| tr | "there" |
| tt | "OpenTelemetry" |
| tu | "though" |
| ty | "thank you" |
| v | "even" |
| v, | "contrib" |
| v. | "void" |
| va | "available" |
| ve | "very" |
| vh | "version" |
| vi | "services" |
| vj | "notice" |
| vo | "over" |
| vr | "never" |
| vu | "value" |
| vy | "everything" |
| w | "would" |
| w, | "wouldn't" |
| w. | "await" |
| wa | "walk" |
| we | "when" |
| wh | "which" |
| wi | "will" |
| wj | "wrong" |
| wo | "without" |
| wr | "where" |
| wu | "internal" |
| wy | "worry" |
| x | "context" |
| 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" |
| 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 | magicA | ||||||
| Base | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Base | m | magicB | ||||||
| Base | ๐ | ๐ | ||||||
| Base | g | , | ||||||
| Base | ||||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | |
| Base | p | chord | ||||||
| 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 | CS-e | ร | ||||||
| Nav | ๐ | ๐ | ||||||
| Nav | C-e | โก๏ธโก๏ธ | ||||||
| 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 |
| 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