Optimization for the fingers

As a programmer I spend a lot of time typing. But not only do I spend a lot of time typing I do it frequently using keys that most users rarely if ever type. All manner of brackets, and slashes, the whole row of characters above the numbers across the top of the keyboard, colons and semi-colons, etc. Basically I’m all over the place on the keyboard. To make matters worse I have really bad form with typing. My style uses my whole left hand and my thumb, pointer finger and occasionally pinky on my right hand. I needed to make a change.

I started out trying to teach myself to touch type properly(I touch type but my hands float over the keyboard instead of staying on the home row). But quickly found that 2 decades of bad habits make change very difficult and though I did start to get the hang of it but the pain in my wrist grew worse. It was time for a bigger change.

I read all I could on keyboards and after a fair few months of looking around settled on an ergodox. This great post is what really sold it for me. There didn’t look to be any new releases on massdrop coming up so I ended out forking out a bunch to buy one off someone on reddit.

Now that I had the keyboard it was time to really get to work. Even now 10 months later as I write this I am still thinking of new tweaks to make to my layouts but this is a basic walk through of the various changes made and why.

Step 1. Ditching Qwerty

The first change I made is replacing qwerty with colemak using the layout developed by Jason Trill which can be found at the above link. This would be the base where I would grow from so many thanks to Jason for both his article and his layout file! I did this not for efficiency but just because there was no way I was learning proper touch typing on qwerty. Many thanks to http://thetypingcat.com/ for sorting me out on that front.

Step 2. Making vim work again

I use vim for most of my work and the switch to colemak screwed up the directional keys on the right hand side. I didn’t want to remap HJKL in vim since the colemak plans for that require remapping a bunch of other stuff so instead I changed layer 1 instead to have those four keys(now HNEI) map to HJKL. So now when I want to move around in vim I just have to remember to press my thumb on the L1 key first and muscle memory takes over.

Step 3. Changing the rest of L1

As a primarily Ruby developer the layout of L1 never quite felt right so pretty quickly I had almost completely rewritten it to the following layout.

Left Hand Right Hand _blank_ F1 F2 { } F5 F11 F12 F6 F7 f8 F9 F10 [power] _blank_ \ / [ ] / _blank_ _blank_ ` = + – _ _blank_ _blank_ & % ( ) $ _blank_ _blank_ h j k l | ~ _blank_ ! @ < > # _blank_ _blank_ ^ & */td> ( _ _blank_

Step 4: Let there be sound!

The thumb clusters of the keyboard have largely been ignored up to now with me sticking with the original layout of Space/Enter on the left and Delete/Backspace on the right and I just put random keys in the other points since they are not really comfortable to touch regularly. I listen to music when working though and I found myself regularly reaching up to my laptop keyboard to adjust the sound/change songs so that was my next project. The only problem was that the driver I had didn’t have support for Apple media keys. Luckily I found the codes in the TMK driver and moved them across. Now my thumb clusters look like this.

Left Hand Right Hand Tab Media Rewind/Back Volume Up Ctrl Space Enter Media Play/Pause Volumn Down Backspace Shift Media Forward/Next Mute

Step 5. It’s the small things that count

By now I’ve largely got a keyboard where my fingers barely move when typing but there is one key I type a LOT being a vim user. That key of course is the colon. So I ended up replacing the bottom left key in the main cluster on the right side with a dedicated colon which sits under my thumb in its resting position.

Step 6. I’m a proud flip flopper

When developing websites I often have a browser window open in one screen and my code in the other. When I want to do something on the browser I click on it, do whatever then click back on my code and get to work. This leaves me reaching for my mouse a lot of pressing CMD+Tab. I do this enough that I decided to save a keystroke. Enter cmdprre &kbfun_command_press_release which triggers cmd + whatever. So I turned it on for that Tab in my left thumb console and now with but a small movement I can swap between my two most recently used applications.

Step 7. And sometimes bigger things

My most recent change involves numbers. I had a project that involved typing a lot of numbers. My layout already comes with a numpad layer but I never got use to it(though maybe I should spend some time focusing on it!). Anyhow my last change was changing the forth key on the bottom row of the left hand to switch to a layer which just has the number keys across the home row. This means with a slight move of my thumb all numbers are home row accessible. No more stretching fingers for them!

That’s about it for now. If you want to find my version of the firmware you can find it at https://github.com/shawnonthenet/ergodox-firmware. I’ll try to be more active in posting any future changes there and here too. A year is a long time to wait.