ErgoDox Configuration

I love my keyboard! It’s the perfect tool: practical, comfortable, and customizable. And, although there have been iterations on the ErgoDox layout that some may argue fix flaws with the original, I try (and sometimes fail) to find a compelling use for every key. Here I document my personal, built-from-the-ground-up keymap that I use daily for typing, “programming”, and, most importantly, gaming.

Ergonomics

First, a word on comfort. You may be inclined to think, at first glance, that the main ergonomic benefit to the ErgoDox is its split layout. While the ability to spread the keyboard out more is beneficial to your shoulders, the most important innovation, in my opinion, is its columnar layout. This means all keys are positioned directly above and below home row. Instead of reaching side-to-side to reach keys not on the home row, for most keys, I simply extend or retract the joint. Once you adjust to typing this way, it feels amazing. Once an amateur eight-finger typist, I now use all ten fingers for letters, numbers, and puctuation, with very little side-to-side movement (you are unfortunately required to move your pointers inwards for keys like T and N that are not directly above or below home row).

Base layer

The base layer is pretty straightforward: it contains just about every key you’d expect. A to Z, 0 through 9, modifiers, and punctuation. Nevertheless, there are some surprises.

/* Keymap 0: Basic layer
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |    `   |   1  |   2  |   3  |   4  |   5  |   -  |           |   =  |   6  |   7  |   8  |   9  |   0  |MO(CONF)|
 * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |   Tab  |   Q  |   W  |   E  |   R  |   T  |   {  |           |   }  |   Y  |   U  |   I  |   O  |   P  |    \   |
 * |--------+------+------+------+------+------|   [  |           |   ]  |------+------+------+------+------+--------|
 * |   Esc  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |    '   |
 * |--------+------+------+------+------+------| MO(2)|           | MO(2)|------+------+------+------+------+--------|
 * |  LS/(  |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  |  RS/)  |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   | LCtl | LGui | LAlt |      |      |                                       |      |      | RAlt | RGui | RCtl |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        | Home | End  |       | Vol- | Vol+ |
 *                                 ,------+------+------|       |------+------+------.
 *                                 |      |      | PgUp |       | H(M) |      |      |
 *                                 | MO(3)| Enter|------|       |------| BkSp | Space|
 *                                 |      |      | PgDn |       | Mute |      |      |
 *                                 `--------------------'       `--------------------'
 */

Off the bat, right and left Shift have an additional function: when tapped instead of held, they print ( and ), respectively. This is nicknamed space cadet Shift and is simply more comfortable than Shift-{9,0}. I snuck in a few media keys on the right-hand thumb cluster, though I will admit I rarely use my thumb for these keys (it’s really more of a pointer-finger cluster in that way). The conventional location for the Backspace key is now a modifier key for configuration-related hotkeys (for things like switching to my FPS layer and putting the keyboard in flashing mode), with the actual Backspace being moved to the left of the Space key, on the right thumb cluster. Kind of makes sense, doesn’t it? The Enter key has been edged out of the right-hand side by the ever-important ', now living on the left thumb cluster. Next to Enter lives the mysterious MO(3), a momentary layer-switch that brings up some very important keys: Dota keys.

Dota keys

My main innovation here is the extensive use of layers for Dota 2, a competitive online game. It has allowed me to achieve 100% hotkey coverage on one hand for just about every action you can perform ingame, from purchasing items in the Quick Buy section and calling the courier to spamming chat wheels and taunts. I have seen very few, and I mean very few, players that have a similar efficiency in this way. Even most professional players I have watched sometimes click UI elements with their mouse (although very quickly), wasting precious milliseconds.

/* Keymap 3: Dota/misc layer
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |   \/   |  F1  |  F2  |  F3  |  F4  |   H  |   P  |           |      |      | F13  | F14  | F15  | F16  | PScr   |
 * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |   \/   |  F5  |  F6  |  F7  |  F8  |   L  |   J  |           |      |      | F17  | F18  | F19  | F20  | SLck   |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |   \/   |   Z  |   X  |   C  |   K  |   Y  |------|           |------| Left | Down |  Up  | Right|      | Paus   |
 * |--------+------+------+------+------+------|   U  |           |      |------+------+------+------+------+--------|
 * |   \/   |   V  |   B  |   N  |   ,  |   M  |      |           |      |      | LGui | LAlt | RAlt | RGui |   \/   |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |  \/  |  F9  |  F10 |  F11 |  F12 |                                       | F21  | F22  | F23  | F24  |  \/  |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        |      |      |       | Prev | Next |
 *                                 ,------+------+------|       |------+------+------.
 *                                 |      |      |      |       | H(D) |      |      |
 *                                 |  \/  |  \/  |------|       |------| Del  | Ins  |
 *                                 |      |      |      |       | Play |      |      |
 *                                 `--------------------'       `--------------------'
 */

(Mostly) default ingame settings:

Hotkeys page 1

Hotkeys page 2

I utilize a single thumb key which acts as a “modifier” (a sort of shift-layer) that changes what keys are available under my left hand. This has many advantages: unlike many players, I have quick access to every single F-key, 1-12. By default, many actions in Dota use these keys, but I’m sure few Dota players are taking their hand off of “Dota home row” to reach for the actually quite useful F-keys.

For example, normally the Q key is my primary ability. However, when the modifier key is held down, it becomes F5, the default hotkey for purchasing the Quick Buy item. I use this hotkey dozens of times ingame: first Shift-clicking on an item in the shop adds it to the corner of my screen, then Mod-Q purchases components as I get more gold. Finally, I can Mod-3 (F3) to order the courier to bring me my new item, and Mod-W (F6, my courier boost hotkey) will put a rush on it.

I also have quick, intuitive access to all of my item hotkeys. When polling my friends, I noticed that many of them use three or four of the item slots, with the rest being reserved for items with no active ability. With my Dota layer, ASDZXCV becomes ZXCVBN,, preserving the default item hotkeys while being much more comfortable and intuitive than a long run-on row of keys (N and , are not accessible on the left-hand side of an ErgoDox anyways).

This layer also gives me quick access to other useful things when I’m not gaming, earning the modifier key a spot on the base layer. I have quick access to the arrow keys (on HJKL, of course), Delete, and several media keys on the right hand.

Configuration keys

This layer is toggled on momentarily with the MO(CONF) key that lives on the base layer. It is pretty sparse, containing keys that configure the keyboard itself. One interesting thing I did here was use alphabetical mnemonics for each of the keys: E resets the EEPROM, R resets the keyboard for flashing, D puts the keyboard in debug mode, and V prints out a version string. The 1 and 2 keys switch between typing and FPS mode.

/* Keymap 4: Config layer
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |        | TO(0)| TO(1)|      |      |      |      |           |      |      |      |      |      |      |   \/   |
 * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |        |      |      | EEPR | RESET|      |      |           |      |      |      |      |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |      |      | DEBUG|      |      |------|           |------|      |      |      |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |      |      |      | VRSN |      |      |           |      |      |      |      |      |      |        |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |      |      |      |      |      |                                       |      |      |      |      |      |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        |      |      |       |      |      |
 *                                 ,------+------+------|       |------+------+------.
 *                                 |      |      |      |       |      |      |      |
 *                                 |      |      |------|       |------|      |      |
 *                                 |      |      |      |       |      |      |      |
 *                                 `--------------------'       `--------------------'
 */

FPS keys

Finally, there is an FPS layer for games like Counter-Strike that require non-space-cadet Shift and left-hand accessible Space. It is toggled on and off using the Configuration layer. Not really much else to say about that.

/* Keymap 1: FPS layer
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |   \/   |  \/  |  \/  |  \/  |  \/  |  \/  |  \/  |           |  \/  |  \/  |  \/  |  \/  |  \/  |  \/  |   \/   |
 * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |   \/   |  \/  |  \/  |  \/  |  \/  |  \/  |  \/  |           |  \/  |  \/  |  \/  |  \/  |  \/  |  \/  |   \/   |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |   \/   |  \/  |  \/  |  \/  |  \/  |  \/  |------|           |------|  \/  |  \/  |  \/  |  \/  |  \/  |   \/   |
 * |--------+------+------+------+------+------|  \/  |           |  \/  |------+------+------+------+------+--------|
 * | Shift  |  \/  |  \/  |  \/  |  \/  |  \/  |      |           |      |  \/  |  \/  |  \/  |  \/  |  \/  | Shift  |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |  \/  |  \/  |  \/  |  \/  |  \/  |                                       |  \/  |  \/  |  \/  |  \/  |  \/  |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        |  \/  |  \/  |       |  \/  |  \/  |
 *                                 ,------+------+------|       |------+------+------.
 *                                 |      |      |  \/  |       |  \/  |      |      |
 *                                 | Space|  \/  |------|       |------|  \/  |  \/  |
 *                                 |      |      |  \/  |       |  \/  |      |      |
 *                                 `--------------------'       `--------------------'
 */

Download

You can download my keymap here! Depending on the model of ErgoDox you have, modifications may need to be made. I personally have the Alpaca Keyboards Hot Dox, but the physical layout is identical to the other “standard” ErgoDoxes on the market, such as the ErgoDox EZ.