vim, git, aws and other three-letter words

Software Development Notes

Keyboard Layouts: Examples

Various examples of keyboard layouts.

Layouts   folded

Colemak-DH Seniply

image30.png
image7.png
image26.png
image4.png
Figure 1: Base
image34.png
Figure 2: Ext

Navigation and other non-printable functions are provided by the Extend layer, which is heavily based on DreymaR's original.

The Extend layer is selected via the left-most thumb key. This layer provides navigation, page up/down, home/end on the right-hand side. Backspace ⌫ is assigned to a comfortable spot on a strong index finger (Ext-H), with Delete ⌦ also well positioned on the home-row (Ext-O).

On the left-hand side are home-row modifiers for Alt, Super, Shift, Control and AltGr on A,R,S,T,G respectively. As with DreymaR's Extend, these modifiers can be held down and combined with other Extend functions such as arrows etc, to comfortably produce combinations like Ctrl ⌫, Alt ←. Importantly though, these home-row modifiers are also implemented as one-shot (sticky) keys, which makes it easy to do Control and Alt shortcuts without needing dedicated modifier keys. An additional non-sticky Super key is provided on Ext-D as some desktop environments require this key to be tapped on its own. Commonly used operations like Cut, Copy, Paste and Undo have dedicated shortcuts in this layer too.

Examples:

(i) Output Ctrl-A using Ext-t a

(ii) Output Ctrl-W using Ext-t w

(iii) Output Alt-Tab using Ext-a-,

image3.png
Figure 3: Functiun
image16.png
Figure 4: Sym
image2.png
Figure 5: Symbols2 Layer

Xah Gergo Layout

Atreus Keyboard

image14.png
image23.png
Figure 6: Fn
image11.png

Check out my new small keyboard and read all about my layers (details in comments) : MechanicalKeyboards

image33.png

QWERTY layer

Not much to see here, pretty essential default layer provides a standard QWERTY; layout, however if the 'z' or '/' key is held it acts as a shift, likewise the 'q' key acts like control when held; having these basic modifiers easily accessible is entirely essential. Backspace and space are available on the innermost thumb cluster keys on the left and right, respectively. The outermost thumb cluster keys give access to the hex and symbols layers (left and right, respectively), while the middle thumb cluster keys access the left and right modifier layers. The left and right thumb buttons become delete and enter whenever the modifiers layer is active. The QWERTY layer is indicated by a blue underglow.

Hex layer (lower)

The hex layer is accessed by the left thumb holding or double-tapping the "Lower" key. The hex layer glows pink.

A numpad layer is fairly common on the layouts I've seen and used, but I cannot recall seeing a hexpad layer anywhere. Since I actually do find myself typing hex fairly often it seemed reasonable to forgo a traditional numpad. Instead I used the fifteen keys on the right hand to provide the numbers 1-F with 0 on the thumbcluster. I type numbers in a variety of contexts and they each use distinct punctuation to separate the digits. For instance, typing a datetime requires up to 4 symbols (e.g. 2020-08-16T06:03:56.69420) while typing any maths requires having operators close at hand. To address this I used the left hand for a variety of symbols which find regular use alongside numbers. For convenience I provided delete, space, and enter as well. While on the hex layer pressing the "Raise" key will change layers to the function layer.

Symbols layer (raise)

Access the symbols layer by holding or double-tapping the "Raise" key. Symbols are active when the board glows cyan.

The symbols layer gives access to all the symbols, importantly I wanted to have underscore and all the brackets really prominently on the hand opposite the "Raise" key. Pressing the "Lower" key while on the symbol layer also makes the function layer active. This symmetric arrangement permits the function layer to be accessed by touching the raise and lower keys simultaneously.

modifiers layer (left and right)

Using a text editor essentially requires having ready access to all modifier keys in conjunction with any normal key, so a layer which features a modifier key covering any normal key presents a problem. My solution to this is to provide two separate modifier layers which each only consume one hand of the split layout, the other hand is completely transparent to allow access to whichever key from any of the QWERTY, hex, or symbols layer might be needed.

The left modifier layer is accessed by holding the "Mod" under your left thumb and will be signified with a red glow under your left hand (and right with right).

The placement of the modifiers is mirror imaged on either side. Caps lock is accessible on both sides, which when active one LED on each side will glow white.

navigation layer

The navigation layer places arrow keys on the left side of the board. Find it by tapping both of the "Mod" keys, and recognize it by the three top LEDs of the right half glowing green.

function layer

The function layer provides access to the F-keys, print screen, num lock, and insert. It underglows white and can be accessed by hitting both the "Raise" and "Lower" keys.

The (infinite) quest for the perfect keyboard and layout

image39.png
Figure 7: base
image25.png
Figure 8: raise
image17.png
Figure 9: lower

The Planck - Key Theory

clipboard-20261108T211120.png
Figure 10: Base
clipboard-20261108T211153.png
Figure 11: Lower
clipboard-20261108T211205.png
Figure 12: Raise
clipboard-20261108T211254.png
Figure 13: Space FN

Customizing a Keyboard Layout

clipboard-20261108T211358.png
Figure 14: Plank Version
clipboard-20261108T211420.png
Figure 15: Kyria Version

Moonlander, Planck, and new layout that minimizes pinkies and stretching

from the Reddit comment

image51.png

I went a long way down those rabbit holes! I'd say definitely don't bother with 4grams. You can and probably would go mad. The only way I'm typing on an infinitely better layout now, is because:

  • I remembered that my peak Dvorak speed, after a few years of all-day/every-day use and frequent speed test practice, was only marginally better than qwerty; and typical use was slower. Which suggests to me at least, that the strength of brain wiring is more important to speed and accuracy, than any specific layout, even as grossly suboptimal as qwerty is. (And like most, I had developed organic, mostly subconscious workarounds for qwerty's worst flaws.)
  • There are SO many tradeoffs and compromises that have to be weighted and considered, it's literally not possible to accomplish all objectives. Optimize top 3grams? Sacrifice top 2grams. Optimize top 2grams? Sacrifice pinkie curling. It's endless (even with tools like this), and maddening. I eventually realized that, while I could still weight other concerns, I had to really focus on two main things: minimal pinkie use, and minimal index finger stretching. That greatly simplified things, and was the only thing that allowed me to make progress. Basically the only other priorities that had significant influence after that, was alternating fingers!
  • I gave all the major modern layouts really good runs. Colmak[/dh], Workman, Carpalx QGMLWY, and several ortholinear/thumb-cluster derivatives. I desperately wanted one - any one - to work. They all made too many tradeoffs. (And had too many "quality-of-life" issues such as dumb navigation or Fn-key layering.) For example, many layouts make the inexplicable choice to maintain ZXCV, and/or symbols locations. But that immediately and severely constrains your options! Such wholly unnecessary artificial hamstringing must be the first thing to go if you want to have any hope of optimizing much else.
  • Even the few layouts that avoid those mistakes, still seem to optimize for a five-finger home row, that involves too much pinkie, and index stretching. That's bad for me personally, and I'm now realizing possibly in general too.

My work has all been local, but I've recently begun open-sourcing it. More to come.

https://github.com/t00mietum/keyboard_

https://docs.google.com/spreadsheets/d/1i8QfbnC41kJ8Fhe2n4VAXiONWaPQjeGDeqqHqsaXD2Y/edit?usp=sharing

https://configure.ergodox-ez.com/moonlander/layouts/7Qqby/

https://configure.ergodox-ez.com/planck-ez/layouts/En5W5/

By another user:

Incase you're interested my 61 are:

  • 26 Letters
  • 10 numbers
  • 11 symbols: ,.;'`/[]-= (and their shifted options)
  • 4 modifiers: shift, ctl, alt, win
  • 3 whitespace: space, tab, enter
  • backspace and delete,
  • arrow keys
  • esc

I gave serious consideration to autoshift, but opted not to because:

  • I knew I'd be layering modifier keys on top of letters,
  • I reasoned that I'd be already struggling mightily with new (to me) ortho config, all modifier keys moved around; numbers, Fn, nav, and symbols moved, and a new alpha layout. (And I am struggling! But by now it's a sound layout. Just need muscle memory. I struggled through dvorak successfully, I'll get this too.) Adding autoshift to the mix might break my brain. Esp as I type painfully slow now, but eventually 80 to 100 wpm.

I've been thinking about OSM. I think it would work well for things like Fn layer, which as afaicr, are only ever single presses. But not, I think, for things like ctrl or shift, where you might (and I often do) hold it down while doing a number of things in succession, e.g. "advanced" text navigation, selection, etc. Similarly with Alt, for things like text multiselect, Linux window management, file manager navigation, etc.

I love the Microdox, thanks for that link! I might have to order one. Like yours, my layouts are specifically designed with that form factor in mind as a lowest common denominator. I ordered this months ago, but have given up on it shipping.

So, my layouts are fully functional if all the extra keys go away.

Alternative Numpad Layout

https://kbd.news/Numbers-in-Pnohty-1230.html

image9.png

The gist of the trick is that the frequency of numbers is different but sort of descending: 0123 are the most frequently used ones and 789 are much rarer.

So with numbers on a logical layer, instead of putting 456 on the home row (as it's done on the classic numpad) you can put 123 (Pnohty) or 0123 (my approach) in the best positions:

image1.png

http://www.keyboard-layout-editor.com/#/gists/9b6379d4940a356bf904ea5452bf3956

Layout with combos

Reddit comment

https://github.com/phaberest/qmk_firmware

image27.png
image29.png
image8.png
image6.png
  • Layer Overview*
    • Layer 0: QWERTY Base

      ┌─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┐
      │ GRV │  Q  │  W  │  E  │  R  │  T  │     │  Y  │  U  │  I  │  O  │  P  │BSPC │
      ├─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┤
      │ESC/6│  A  │  S  │  D  │  F  │  G  │     │  H  │  J  │  K  │  L  │ ; : │ ' " │
      ├─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┤
      │LSFT │  Z  │  X  │  C  │  V  │  B  │     │  N  │  M  │ , < │ . > │ / ? │RSFT │
      └─────┴─────┴─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┴─────┴─────┘
                        │LALT │TAB/2│SPC/3│     │ENT/⇧│LGUI │RCTL │
                        └─────┴─────┴─────┘     └─────┴─────┴─────┘
      
    • Layer 1: Colemak-DH Base

      ┌─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┐
      │ GRV │  Q  │  W  │  F  │  P  │  B  │     │  J  │  L  │  U  │  Y  │ ; : │BSPC │
      ├─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┤
      │ESC/6│  A  │  R  │  S  │  T  │  G  │     │  M  │  N  │  E  │  I  │  O  │ ' " │
      ├─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┤
      │LSFT │  Z  │  X  │  C  │  D  │  V  │     │  K  │  H  │ , < │ . > │ / ? │RSFT │
      └─────┴─────┴─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┴─────┴─────┘
                        │LALT │TAB/2│SPC/3│     │ENT/⇧│LGUI │RCTL │
                        └─────┴─────┴─────┘     └─────┴─────┴─────┘
      
    • Layer 2: Navigation/Media
      • Arrow keys, page navigation, word navigation
      • Media controls (play/pause, volume, brightness)
      • Copy/paste shortcuts
    • Layer 3: Numbers/Symbols
      • Number pad on right side
      • Symbol keys on left side
      • Mathematical operators
    • Layer 4: Function Keys (Bitwise Input)
      • Innovative bitwise input system
      • Left home row keys act as binary bits: A(1) + S(2) + D(4) + F(8) + G(16)
      • Examples: A+D = 1+4 = 5 = F5, S+F = 2+8 = 10 = F10
      • Access to all F1-F24 function keys
    • Layer 5: Gaming (Work in Progress)
      • Standard WASD layout
      • Optimized for gaming with direct access to common keys
      • Chat mode for quick typing during games
    • Layer 6: Mouse/Utilities
      • Mouse movement and scroll wheel
      • Mouse buttons
      • Keyboard reset and utilities
  • Combo System* The keyboard features comprehensive combos that adapt to your current layout (QWERTY/Colemak-DH). Each combo is mapped to equivalent key positions on both layouts, so you learn one set of finger movements that work regardless of your active layout:
    • Brackets & Parentheses

      Combo QWERTY Keys Colemak Keys Output
      () D+F S+T ( )
      [] E+R F+P [ ]
      {} C+V C+D { }
      <> W+E, I+O W+F, U+Y < >
    • Mathematical Operators

      Combo QWERTY Keys Colemak Keys Output
      Plus R+U P+L +
      Minus V+M D+H -
      Equal F+J T+N =
      Asterisk E+I F+U ​*
      Underscore R+T P+B _
    • Special Characters

      Combo QWERTY Keys Colemak Keys Output
      Tilde A+S A+R ~
      Grave S+D R+S `
      Exclamation Y+U J+L !
      At symbol H+J M+N @
      Hash F+G T+G ​#
      Dollar S+L R+I $
      Percent V+B D+V %
      Caret N+M K+H ^
      Ampersand D+K S+E &
    • Utility Combos

      Combo Keys Action
      Word Delete 4+5 Alt+Backspace
  • Special Features
    • Layout Switching
      • Toggle Layout: Access via Function layer to switch between QWERTY and Colemak-DH
      • Persistent Storage: Your layout preference is saved to EEPROM
      • Smart Combos: Combos automatically map to equivalent key positions on your active layout
    • Bitwise Function Keys The most unique feature - use binary combinations on the left home row:

      • A = 1, S = 2, D = 4, F = 8, G = 16
      • Hold combinations to generate F-keys: A+D = F5, S+F = F10, etc.
      • Access all F1-F24 keys with simple finger combinations

      Idea brutally copied from this excellent article - full credit to the original author!

    • Auto Mouse Layer
      • Automatically activates when trackpoint movement is detected
      • 1-second timeout returns to previous layer
      • Full mouse control with buttons and scroll wheel
    • Caps Lock Toggle
      • Press both shift keys simultaneously to toggle Caps Lock
      • Visual feedback on OLED display

ZSA configurator layouts   folded

  • Modifiers on the home row, symbols on the top row (instead of numbers): https://configure.zsa.io/ergodox-ez/layouts/W4aV3/latest/0
  • Default Ergodox Layout
    • ergodox_ez_keymap_highres_1c358ca7-d57e-4242-bdc5-4efc2e901f56.png?2712369424111058957
  • 34 key Ergodox EZ Configurator
    • similar to mine, with mods on the home row
  • Oryx: The ZSA Keyboard Configurator - Corne
  • Planck: workman dead (by Ben Vallack)
  • Ergodox EZ Configurator - Eio 2.0 (coding macros)
    • coding layer with things like "->" and "()->"
    • also there are macro recording keys on this layer in thumb cluster
  • Singularity - Ergodox EZ Configurator
    • heavy double-function keys
    • all modifiers (alt, ctrl, shift) are on the home row
      • dual ctrl/esc is where the caps lock is
      • A - shift, D - alt (and similarly on the right side)
      • "space cadet" - square brackets [ ] (instead of parenthesis) on shift keys
    • tmux layer with move (vim-like) keys, vertical and horizontal split and detach
      • Switch to layer: dual-function B key (memo: tmux'es Ctrl-B)
    • FKey pad - numpad-like F keys + extra F16 - F21 keys at the top
      • F is a toggle for this layer (easy to remember)
      • it is also easy to perform alt-FX combinations - alt is on D, so we hold D+F and press the right cluster key to get the F we need
  • Glowing Siegler Symmetric
    • mouse and mouse wheel buttons hjkl-style
  • miryoku - Ergodox EZ Configurator (moonlander)
    • Miryoku layout for Moonlander, Planck EZ, and Ergodox EZ : ErgoDoxEZ
      • settings for home mods in miryoku layout
  • (Halmak, Vim layer) Oryx: The ZSA Keyboard Configurator
    • Vim layer - Vim-like commands over regular keys
      • w = fwd word (Ctrl + ->)
      • b = back word (Ctrl + <-)
      • u = undo (Ctrl-Z)
      • 4 ($) = end line (End)
      • - layer - same as base, but with "-" in place of space - to type long-hyphen-separated-words
      • _ layer - same as base, but with "_" in place of space - to type long_underscore_sep_words
  • Ergodox EZ Configurator - Flying to the Moon (Florian Didron, Ergodox QMK Developer)
    • Minimalistic layout with AutoShift
    • AutoShift timeout = 110
    • Tapping term = 121
      • This sets the delay interval (in milliseconds) that the firmware uses to determine if a press is considered a tap or a hold. This is used for dual-action keys like Layer Tap (LT), and Mod Tap (MT). If the "hold time" to trigger the "hold" action feels too long, decrease this value. If it is too short for you (you trigger the hold action when you meant to tap), increase this value. This also determines the length of time for certain other features. For Instance, the TT and One Shot keys use this as the timeout for a "toggle", (aka, you have to hit the key within this window to be considered for the "tap toggle" functionality).
    • Retro tap = On
  • algernon/ergodox-layout: algernon's ErgoDox EZ layout
    • advanced layout, using tap dancing (for example, all brackets are on the same key, there is leader key with some mappings) and other features that are not available in configurator (and I am not at that point yet to switch to code)
    • there is also a steno layer to use with plover
    • Asylum: Diaries of a Madman
    • ErgoDox: Day 34 - Asylum
      • The Shift, Alt, and Control modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap.
  • Ergodox EZ Configurator (Mac, Vim, IDEA IDE)
    • Layer 0 - Vim Leader on the red button (macro = , ,)
    • Layer 0 - Copy and paste mac buttons on the inner side column, at the bottom
    • Layer 1 - brackets are symmetrical on the left and right hands; looks like this is a special layer for OSL 1 switch (there is also Layer 2 where there are more punctuation chars put similar to the default layout)
    • Layer 4 - Nav, enabled by left big red button - arrows, left ctrl, cmd on the left and pg up, home, pg down and shift tab and tab on the right
      • Having shift tab and tab near looks convenient
      • Separate layer for lights (I have it on the media layer)
    • Separate layer for IDE/vim
      • mostly macros and key combos
  • Ergodox EZ Configurator - BEAKL 15 (+query, + dvorak), pc and mac
    • osx vs pc - there is a separate osx layer with some overrides (like CMD instead of Ctrl) and most of keys transparent
    • separate layers for arrows and mouse
    • main layout - BEAKL with fallback layers - qwerty and dvorak
  • wide planck form (letters outside, mods inside)
  • ZSA Moonlander First Impressions - Christine Dodrill
    • Ergodox EZ Configurator
      • Four different layouts - colemak, qwerty, dvorak, steno
      • Layout for window manager (dwm)
      • symnum with symbols, numpad, F keys
  • Moonlander, Planck, and new layout that minimizes pinkies and stretching : ergodox
  • naps62/ergodox-layout: A heavily customized layout for my Ergodox EZ keyboard
    • very "classic" layout, close to the standard keyboard
    • brackets at the right bottom
    • coder layer with num pad (I tried similar setup, then moved the numpad to a separate layer to have arrows on the right side)
  • The Ergodox Layouts Repository - Massdrop
  • fixing the ergodox thumb section

Tags: kbd