Because I dislike having to move my fingers far from the homerow, I created
a custom keyboard layout.
My goal was not to achieve a faster typing speed, but reducing the distance my
fingers had to move from the homerow. Everything should be at the homerow ±1.
Keep in mind, that the alphabetic characters and even numbers stay right where
they are on the standard US layout. Nothing is changed there, making the switch
This also means, that it doesn't interfere with any alternative keyboard
layouts like Dvorak, Colemak or Workman, much. It should be easy to adapt it to
Sanitising the physical keyboard layout
I like the wide shift key of the US layout. But the US International and German
layouts (as well as others) introduce another key right right of the left shift
key. Hitting the left shift key is therefore not just moving the pinky down, but also
moving it to the left. Not comfortable at all. Making this key my actual shift
key is #1 on my list.
Likewise the return key on the German layout may be taller, but is still
farther away from the homerow than on the US or US International layout. So on
German keyboards I immediately map the #
key to return.
Remapping special keys
Because I'm an avid Vim user and the escape key is on another planet entirely,
I map it to the capslock key. Members of the Church of Emacs might prefer to
map control there.
Return & Backspace
As you will see later, I don't need the left and right bracket keys anymore,
so I decided to map the return key (as it is such an important key and still
2 keys away!) to, what used to be, the left bracket key.
Lastly I map backspace to the right bracket key. For me that's close enough
that I can reach it without having to move my hand.
While it is still further away than my target of homerow ±1, it's a key
tahtitsn' nedeed ina prefect wrld anhywa.
I considered mapping the right shift key to the former return key, as it is the
last key that is awkwardly to hit. Moving the poor pinky not only down or to the
right, but diagonally. This feels very uncomfortable to me.
A major downside of this is, that as soon as this becomes muscle memory, I'll
hit enter all the time on regular keyboard layouts.
And this can be really dangerous on the command line, or, basically everywhere.
Moving to a new layer
Now that everything is at the homerow ±1 except for the digits and
all the symbols, it's time to take care of those keys.
Since I grew up with the German keyboard layout I was always used to the idea
of using AltGr (the right Alt key) in combination with some other key for some
symbols. So why not introduce a new layer to the US layout with all the symbols
a programmer could ever need?
Note: On a Mac's keyboard the right Cmd and Alt key are swapped, so those
two keys need to be remapped to make the right alt key easier to hit.
There are 3*10 keys at the homerow, up and down. Enough space to map
all the symbols right there. This means: not having to stretch my
fingers as far as the row of digits and in addition to that, not having to
use my weakest finger, the pinky, to press shift, but use the strongest one,
the thumb, to press AltGr. In addition to the symbols, the most used
digits (at least in my code) are also included.
I tried to arrange them logically instead of based on some metric like same-finger or
Opening and closing braces are right next to each other and under the strongest
directly on the homerow, while the considerably less
is off the homerow, etc.
is to the left, as it marks the beginning of a line in a regular
expression, while $
is to the right, because it marks the end of a line.
because it's used to access members in
C++ like .
just for pointers. It's also the same finger as *
which is used to dereference pointers. Those things made it easy for me to learn
and remember this layout.
Having _ off the homerow was okay when I created the layout, but since
then I've moved from CamelCase to using _ in variable names, so I'm not
really happy with where it is now. I consider swapping it with *.
But that's why the layout is called 2013.02. I don't rule out making minor
changes over time.
With the symbols taken care of, it was time to find new keys for the digits.
Since the AltGr layer was already full, I moved them to Shift+AltGr.
The arrangement might look odd, but its actually based on the numbers (not
just digits) found in my code and the 3rd party libs I use.
The most frequent single-digit numbers (0, 1, 2, 8) are already covered on the
first layer, so I tried to make the multi-digit numbers as easy to type
Not surprisingly those numbers were 32, 255, 64 and 16.
All those combinations are easy to type by simply rolling your hand
from left to right, with the most common combinations on the homerow and
the other two on the row above.
0 is used on its own most of the time and already covered on the first layer.
7, for some reason, is barely used at all so I moved it to the least desirable
location. 9 is also barely used. And 8, well, I had to stuff it somewhere.
I also added a decimal separator to conveniently type decimal numbers.
Yes, this arrangement takes some time getting used to when typing regular
numbers. But typing those aforementioned most used combinations slips into
muscle memory rather quickly.
The AltGr+Shift layer with its numbers is a rather new addition and for typing
regular numbers I still fall back to the row with the digits quite often.
I guess I would have to remove the original digits to force me getting used to
their new placement. But I won't do that, because a lot of applications use
combinations of modifier keys with a digit as hotkey and without the original
digit-keys those hotkeys would be unavailable.
I've been using this layout (and its previous iterations) for the last 6 years
and it's only when I'm forcefully put in front of regular layouts,
strapped down while screaming and shouting, that I realize how much more
comfortable this setup is.
Keyboard layout: mld1302.zip
following settings to remap the special keys:
Save the keyboard layout mld201302.keylayout
to ~/Library/Keyboard Layouts
And use this configuration (private.xml
) for KeyRemap4MacBook
Enable: Wide Left Shift
, Left Bracket as Return
and Right Bracket as Backspace
Add this to your ~/.XCompose
<U30000> : "->"
If this file doesn't exist yet, add
at its beginning.
Save this layout file to
your X11 keyboard layout directory and activate it with
setxkbmap -layout mld -variant 105