My quarantine hobby is a deep dive into the rabbit hole of custom programmable mechanical keyboards.

Normal keyboards are static–they have some factory firmware that defines what each key does. Fully programmable keyboards let you flash custom firmware–typically QMK–which allows you to remap any key to any other key, along with cool features like:

  • Tap Dance - Tap once for 1, tap twice for F1.
  • Mod Top - A key sends Escape when tapped, but acts as Shift when held.
  • One Shot Keys - press Shift, and the next alphanumeric character you press will automatically be shifted.
  • Combos - also known as chording, hitting A and S registers as Escape instead.

Layers

By far the most powerful feature of QMK, layers let you create multiple different keymaps then switch back and forth on the fly. For example, a QWERTY and Dvorak layer to help you learn a new keyboard layout. Or you could create a secondary layer that puts the number line right on home row.

When I learned about layering, it seemed intriguing but I never found the motivation to buy a programmable keyboard then spend time learning and configuring it. This changed when I experienced the beginnings of RSI on some fingers after long days of coding.

I figured reducing finger travel and finger stretching (among other ergonomic keyboard improvements) could mitigate chronic pain a few years down the road, so the investment could be worth it.

Spoiler: I printed, soldered, and wired together a Dactyl Manuform 5x6.

Dactyl Manuform 5x6

Flashier keycaps on the way.

In addition to being fully programmable, the Dactyl makes a few more ergonomic innovations:

  • columnar-staggered key layout - keys aren’t weirdly diagonal. Each finger’s column of keys goes straight up and down.
  • ergonomic thumb cluster - our thumbs are incredibly strong and dexterous, they’re wasted sharing a single giant Space key.
  • curved keywell - our fingers naturally curve in an arc, so they more easily reach keys angled toward them in the same arc. This reduces finger travel distance to a surprising degree.
  • split layout - our hands didn’t evolve to scrunch so closely together, they can benefit from a neutral wrist at shoulder width distance apart.

I started with a conservative keymapping. It was enough cognitive overload to get used to the new keyboard and the swapping of a few critical keys like Return and Backspace. I didn’t need the extra trouble of additional layers. So I remapped the remaining symbols like [ and = to farther away extra spots the my base layer. Every key I needed was somewhere on the base layer.

Initial Keymap

Layer-less layout, made using the QMK Configurator

Typing on the curved, columnar-staggered, keyboard was quite nice, but I still felt uncomfortable fishing around for number and symbol keys. They were closer to home row compared to a regular keyboard, but they still required an unnatural stretch. So a week later, I mapped all the numbers and symbols to a new layer located on or near the home row.

Base Layer With Layer Switch

Base Layer: Notice the additional thumb buttons that switch to layer 2

Number Symbol Layer

Layer 2: Numbers directly on home row, symbols close above or below

It works as follows:

  • MO(2) means momentarily activate layer 2
  • It’s like a Shift key, except instead of shifting, you get the keys in layer 2.
  • Shift still works the same, so MO(2) and Shift give you alternate symbols like $, {, +, etc.
  • I mapped the additional symbols like ~, -, =, [, and ] above or below the home row where my strongest and most accurate fingers are.

This layer was game-changing. From the start, it felt so natural and intuitive despite my lack of muscle memory.

It’s so addicting to hit esoteric keys accurately without shifting my hand position at all. So much so, that I find myself a frequent visitor of typing.io, just basking in the glory of blazing through code typing challenges.

My typing speed with programming text was around 25 wpm with a normal keyboard. Certain keys around the fringes often required backspace corrections or sometimes even the dreaded downward peek. I’m now hitting 55 wpm pretty consistently across a variety of programming languages, and my muscle memory is continuing to build around the new layout. I predict within a few weeks my programming typing speed will converge towards my word typing speed (89 wpm).

89 WPM

I’ve been programming for much of the last decade–and typing/gaming for twice that, but my familiarity with numbers and symbols has not improved over the years. Maybe I’m not that great of a typist, but I believe even amazing typists can achieve a solid speed/accuracy improvement with a fully customizable keyboard.

If all this sounds exciting to you, then the easiest way to start would probably be a ready-made QMK-compatible ergodox. It’s not particularly cheap ($270 for the base model), but you get high-quality reliable components and this could be an investment for your finger health! Another plus–they maintain easy-to-use software allowing you to program your keyboard without any programming knowledge. A few of my coworkers love this thing, which started me on this journey.

Or if you’d rather spend(waste) a lot more time, check out what others are doing in /r/ErgoMechKeyboards and build one yourself.

Stay tuned for a more fully fleshed out build log of my Dactyl Manuform.

P.S. For the curious, my latest QMK keymap.