Keymap The configuration and usage of my ErgoDox keyboard

Here I document a home-grown keymap that I use daily for typing, “programming”, and, most importantly, gaming.

Layout

I 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. Q to H, 1 through 0, modifiers, and punctuation. Nevertheless, there are some surprises.

/* Colemak Mod-DH
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |    `   |   1  |   2  |   3  |   4  |   5  |   -  |           |   =  |   6  |   7  |   8  |   9  |   0  | Adjust |
 * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |   Tab  |   Q  |   W  |   F  |   P  |   B  |   {  |           |   }  |   J  |   L  |   U  |   Y  |   ;  |    \   |
 * |--------+------+------+------+------+------|   [  |           |   ]  |------+------+------+------+------+--------|
 * |   Esc  |   A  |   R  |   S  |   T  |   G  |------|           |------|   M  |   N  |   E  |   I  |   O  |    '   |
 * |--------+------+------+------+------+------| Symb |           | Symb |------+------+------+------+------+--------|
 * |  LS/(  |   Z  |   X  |   C  |   D  |   V  |      |           |      |   K  |   H  |   ,  |   .  |   /  |  RS/)  |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   | Ctrl | GUI  | Alt  |      |      |                                       |      |      | Alt  | GUI  | Ctrl |
 *   `----------------------------------'                                       `----------------------------------'
 *                                      ,-------------.           ,-------------.
 *                                      | Home | End  |           | Vol- | Vol+ |
 *                               ,------+------+------|           |------+------+------.
 *                               |      |      | PgUp |           | Meh-M|      |      |
 *                               |Extend| 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 Extend, a momentary layer-switch that brings up some keys that are very important to me: Dota keys.

Dota keys

This layer is designed to facilitate 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.

/* Extend
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |   \/   |  F1  |  F2  |  F3  |  F4  |   M  |   ;  |           |      |      | F13  | F14  | F15  | F16  | PScr   |
 * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |   \/   |  F5  |  F6  |  F7  |  F8  |   I  |   N  |           |      |      | F17  | F18  | F19  | F20  | SLck   |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |   \/   |   Z  |   X  |   C  |   E  |   J  |------|           |------| Left | Down |  Up  | Right|      | Paus   |
 * |--------+------+------+------+------+------|   L  |           |      |------+------+------+------+------+--------|
 * |   \/   |   D  |   V  |   K  |   ,  |   H  |      |           |      |      | LGui | LAlt | RAlt | RGui |   \/   |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |  \/  |  F9  |  F10 |  F11 |  F12 |                                       | F21  | F22  | F23  | F24  |  \/  |
 *   `----------------------------------'                                       `----------------------------------'
 *                                      ,-------------.           ,-------------.
 *                                      |      |      |           | Prev | Next |
 *                               ,------+------+------|           |------+------+------.
 *                               |      |      |      |           | Meh-D|      |      |
 *                               |  \/  |  \/  |------|           |------| Del  | Ins  |
 *                               |      |      |      |           | Play |      |      |
 *                               `--------------------'           `--------------------'
 */

Hotkeys page 1

Hotkeys page 2

I use a thumb key as a “modifier” (think of it like a shift key) that changes what keys are available under my left hand. This has many advantages: for example, 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.

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 Quick Buy queue, then Mod-Q purchases components as I get more gold. I can then press 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 an easier way to 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, ARSZXCD becomes ZXCDVK,, preserving the default item hotkeys while being much more comfortable and intuitive than a long run-on row of keys (K and , are not accessible on the left-hand side of an ErgoDox anyways).

This layer also gives me access to other useful things when I’m not gaming. I have the arrow keys located on QWERTY’s HJKL, making vi-like text editors much easier to use. Delete and additional media keys are also on the right thumb cluster.

FPS keys

The FPS layer is for games like Counter-Strike and Minecraft that require non-space-cadet Shift and left-hand accessible Space. It is toggled on and off using the Adjust layer.

/* FPS
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |   \/   |  \/  |  \/  |  \/  |  \/  |  \/  |  \/  |           |  \/  |  \/  |  \/  |  \/  |  \/  |  \/  |   \/   |
 * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |   \/   |  \/  |  \/  |  \/  |  \/  |  \/  |  \/  |           |  \/  |  \/  |  \/  |  \/  |  \/  |  \/  |   \/   |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |   \/   |  \/  |  \/  |  \/  |  \/  |  \/  |------|           |------|  \/  |  \/  |  \/  |  \/  |  \/  |   \/   |
 * |--------+------+------+------+------+------|  \/  |           |  \/  |------+------+------+------+------+--------|
 * | Shift  |  \/  |  \/  |  \/  |  \/  |  \/  |      |           |      |  \/  |  \/  |  \/  |  \/  |  \/  | Shift  |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |  \/  |  \/  |  \/  |  \/  |  \/  |                                       |  \/  |  \/  |  \/  |  \/  |  \/  |
 *   `----------------------------------'                                       `----------------------------------'
 *                                      ,-------------.           ,-------------.
 *                                      |  \/  |  \/  |           |  \/  |  \/  |
 *                               ,------+------+------|           |------+------+------.
 *                               |      |      |  \/  |           |  \/  |      |      |
 *                               | Space|  \/  |------|           |------|  \/  |  \/  |
 *                               |      |      |  \/  |           |  \/  |      |      |
 *                               `--------------------'           `--------------------'
 */

Adjust

This layer is toggled on momentarily with the Adjust 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: R resets the keyboard for flashing, D puts the keyboard in debug mode, and E resets the EEPROM. The 1, 2 and 3 keys switch on the Colemak, QWERTY, and FPS modes, respectively.

/* Adjust
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |        |MOD_DH|QWERTY| FPS  |      |      |      |           |      |      |      |      |      |      |   \/   |
 * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |      | Reset|      |      |      |------|           |------|      |      |EEClr |      |      |        |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |        |      |      |      | Debug|      |      |           |      |      |      |      |      |      |        |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |      |      |      |      |      |                                       |      |      |      |      |      |
 *   `----------------------------------'                                       `----------------------------------'
 *                                      ,-------------.           ,-------------.
 *                                      |      |      |           |      |      |
 *                               ,------+------+------|           |------+------+------.
 *                               |      |      |      |           |      |      |      |
 *                               |      |      |------|           |------|      |      |
 *                               |      |      |      |           |      |      |      |
 *                               `--------------------'           `--------------------'
 */

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.