← More about keyboards

Thinking of buying a custom keyboard? Or got one and looking to leverage its features? Here’s a tour.

My daily driver: Dactyl Ergodox

Ergonomic hardware

For typing comfort, I highly recommend a keyboard that is split, columnar, and with QMK or other programmable firmware. An example is the ZSA Moonlander keyboard:

ZSA Moonlander

Some other popular options are the Lily58, Sofle, and Corne split keyboards. There’s an extensive catalog of split keyboards at Awesome Split Keyboards.

What makes these keyboards so good

A split keyboard has separate modules for each hand connected by a flexible cable. This enables you to type with your hands comfortably at shoulder width apart and with wrists straight to avoid ulnar deviation.

A columnar keyboard has aligned columns of keys. This is in contrast to the row-staggered keys of conventional keyboards, a vestige of mechanical typewriters to make space for levers that connect each key to the type hammers that strike the paper. Columnar arrangement follows the natural direction of the fingers and helps reduce ulnar deviation in the left wrist.

A programmable keyboard is one where the function of each key may be reassigned, perform macros, and so on to adapt to your workflow. More on this in a moment.

Tips to get a good keyboard

Ergonomic keyboards differ in placement of the thumb buttons as well as in the stagger and splay or the columns. You can use Splitkbcompare to make 1:1 prints for many popular keyboards to test how they fit your hands.

Keyboards often use cheap AVR microcontrollers, like the Pro Micro and Elite-C boards with the ATmega32U4 microcontroller. While they are enough to get running, AVR microcontrollers have a stingy amount of flash space, and you’ll need to be sparing in which firmware features to enable in order to fit in that space (see Squeezing the most out of AVR). If you have an option to use a better microcontroller, I’d recommend it.

Where to buy split keyboards

The r/ErgoMechKeyboards wiki has a list of vendors that sell split and ergonomic keyboards, organized by region. You can also try r/mechmarket.

A few notes to give fair warning…

Firmware features

Here are some highlight features of what a keyboard with QMK firmware can do, potentially boosting your comfort and productivity.

QMK is not strictly necessary. Other programmable keyboards have their own firmware features, and at least basic functionality is comparable. Or even with a regular keyboard, you can get some of these features in software with KMonad.

(Ergodox EZ and Moonlander users) If you use Oryx, then underneath it is QMK firmware, and most of these features are available in Oryx.

Multiple layers

Generalizing how e.g. holding Shift changes the number row to type symbols, you can define multiple layers and use “layer switch keys” to access them. For instance, a symbol layer is useful for programming. Never run out of keys.

My base layer (Dvorak layout).
My symbol layer.

Home row mods

The idea of home row mods is to put the modifier keys—Ctrl, Shift, Alt, Gui (Win key)—directly on the home row as mod-tap keys. This has the ergonomic advantage of reducing finger travel and awkward hand positions. In my keymap, I additionally put layer-tap keys on the home row to access the symbol layer.

Home row mods in my keymap.

The E key for example types “e” when tapped and behaves as Shift when held.

I was skeptical at first, but home row mods feel great now that I got used to them. As you might expect, there is a learning curve. See A guide to home row mods for a detailed explanation and Home row mods are hard to use for further tips.

Do more with each key

There are several additional QMK features to get more out of each key:

There are many options to facilitate your workflow!

Macro buttons

It’s possible to define a macro button that types multiple characters when pressed. My favorite is a key that types ../, useful in the shell for up directory. See Macro buttons for a collection of QMK macros and QMK triggers for further tricks.

QMK allows the user to write arbitrary C code to handle events. This is great flexibility. I’ve been having fun with this to write my own features as userspace libraries:

Closing thoughts

Have questions or curious to see more?—come to r/ErgoMechKeyboards.

For keymap ideas, check out KeymapDB, a curated collection of keymaps for programmable keyboards. You might also find something interesting in my links about keyboards and related topics.

← More about keyboards