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 a home-grown keymap that I use daily for typing, “programming”, and, most importantly, gaming.

Ergonomics

First, let’s talk comfort. One might think 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 feature, 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 press keys not on the home row, for most keys, you simply extend or retract the joint. Once you adjust to typing this way, it feels amazing. It requires much less side-to-side movement, although you are unfortunately required to move your pointers inwards for keys like QWERTY’s T and N that are not directly above or below the home row.

Layout

I currently use the Colemak-DH keyboard layout. For me, the primary reason for using an alternative layout is comfort. I’ve always found QWERTY to be somewhat uncomfortable, with many common keys requiring large movements. Colemak is designed to alleviate this issue by putting the most common keys on the home row. The DH variant in particular is designed to prioritize keys which are in the same column as the pointer fingers, rather than those which require lateral movement.

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  |   F  |   P  |   B  |   {  |           |   }  |   J  |   L  |   U  |   Y  |   ;  |    \   |
 * |--------+------+------+------+------+------|   [  |           |   ]  |------+------+------+------+------+--------|
 * |   Esc  |   A  |   R  |   S  |   T  |   G  |------|           |------|   M  |   N  |   E  |   I  |   O  |    '   |
 * |--------+------+------+------+------+------| MO(2)|           | MO(2)|------+------+------+------+------+--------|
 * |  LS/(  |   Z  |   X  |   C  |   D  |   V  |      |           |      |   K  |   H  |   ,  |   .  |   /  |  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 to me 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 layers 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. The Enter key has been edged out of the right-hand side by ', which now lives on the left thumb cluster. Next to Enter lives the mysteriously named MO(3), a momentary layer-switch that brings up some keys that are very important to me: Dota keys.

Dota keys

This layer is designed to faciliatate the extensive use of hotkeys in, Dota 2, a competitive online game. It allows for 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. Even most professional players I have watched sometimes click UI elements with their mouse, 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” (think of it like a shift key) that changes what keys are available under my left hand. This has many advantages: unlike many players, I have quick access to every 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. I have quick access to the arrow keys (on HJKL), Delete, and additional 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 fun thing I did here was use alphabetical mnemonics for each of the keys: E resets the EEPROM, R resets the keyboard for flashing, and D puts the keyboard in debug mode. The 1, 2 and 3 keys switch on the Colemak, QWERTY, and FPS modes, respectively.

/* Keymap 4: Config layer
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |        |ColeDH|QWERTY|T(FPS)|      |      |      |           |      |      |      |      |      |      |   \/   |
 * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |      | RESET|      |      |      |------|           |------|      |      |EEPRST|      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |      |      |      | DEBUG|      |      |           |      |      |      |      |      |      |        |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |      |      |      |      |      |                                       |      |      |      |      |      |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        |      |      |       |      |      |
 *                                 ,------+------+------|       |------+------+------.
 *                                 |      |      |      |       |      |      |      |
 *                                 |      |      |------|       |------|      |      |
 *                                 |      |      |      |       |      |      |      |
 *                                 `--------------------'       `--------------------'
 */

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.

/* 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.