Jonathan Will

Projects and Research

View Full Portfolio

Keyboard Optimization

2024
My “Ferris Sweep” with 34 keys, including 4 thumb keys
Tenting at ~30° for wrist comfort

This article is a bit different from the others in the portfolio. It’s dedicated to my friends and colleagues who asked me about the strange-looking keyboard on my desk. Maybe I can pique your interest in exploring the world of ergonomic custom keyboards with me.


General Idea

Many people spend large parts of their waking hours with their hands on a keyboard, notably computer professionals like programmers. Because the traditional QWERTY keyboard was not designed with ergonomics or typing speed in mind, people began developing alternative designs.

Physical Layout

The first idea is to arrange the keys according to the fingers. Since the fingers move vertically, the keys on ergonomic keyboards are arranged in columns, with each column corresponding to one finger. Using fewer physical keys reduces the travel distance of each finger, with most fingers only ever touching three different keys (except the thumb and index finger, which touch two and six, respectively). This is achieved through layers. You are already familiar with layers since traditional keyboards have a Shift key that, when held down, changes the character displayed. Most notably, it provides the capital version of a letter, or a symbol instead of a number. The idea is to have additional layers that can be accessed by holding down one of the thumb keys. This way, numbers, navigation keys, and symbols don’t need their own dedicated physical key.

Another benefit to a physical layout matching the human hand is that hitting the wrong key is much less common. I never have to move my whole hand and the maximum distance my finger has to move is one key, mostly just straight up or straight down (with the exception of the index finger, which also goes sideways sometimes). In practice, this higher accuracy also translates to increased typing speed.

Logical Layout

The next design challenge is to create a good mapping between the inputs (e.g., letters and symbols) and the physical keys. This is freely configurable and I’ll show you what works for me as a someone who writes mostly code, English text, and German text.

The base layer (L0). Each color corresponds to one finger.

As with the traditional keyboard, the lowercase letters, comma, and period are the primary keys and make up the main layer, which is also called the base layer or L0. Since I write code in Python frequently, I also added the underscore as a regular key for quick access. Otherwise, the layout I’m using here is known as the “ISRT” layout and is one of hundreds of computer-optimized alternatives to QWERTY.
Ideally, the most frequently used letters are easily reachable. In English, E, T, A, O, I, N, S, and R are often considered the most common letters, and together, they make up about 60% of all letters in text. Since these letters correspond to the keys my fingers rest on, I don’t need to move away my fingers at all for many keystrokes. Conveniently, many other languages, such as German, share most of these eight most common letters.

Furthermore, letters that commonly occur in sequence (e.g., T and H) are placed so that they are not pressed by the same finger, improving speed and comfort.

Finally, holding down a key instead of tapping it can reveal different functionality. For example, holding down the W key does not type “w”; instead, it acts like holding down the Ctrl key. This way, the keys that need to be held down are much closer to where the fingers are, so there is less strain on the wrist and pinky finger than with traditional keyboards.

The navigation layer (L1) is accessed by holding down the first of the four thumb keys

The navigation layer is probably my second most used layer. It is accessed by holding down the leftmost thumb key. Besides numbers, it contains all the keys needed to navigate text. The more commonly used keys, such as Enter and Backspace, are located in the center, while the less commonly used keys, such as Print Screen, are located on the edges.

I can also move the cursor and do clicks through key presses, which works surprisingly well due to the cursor acceleration that reacts to how long I’m holding down the respective mouse movement key. A regular mouse still works better, of course, but it’s nice to have a backup.

The symbol layer (L2) is accessed by holding down the last of the four thumb keys

The symbol layer, adapted from Pascal Getreuer’s ideas, prioritizes common code patterns, such as +=, -=, !=, ${}, /*, */ ->, and =>, ensuring that they are not pressed with the same finger. It also places frequently used symbols, such as =, -, and (), in the center. In contrast, keys that are less conveniently reachable, such as those in the corners where you need to move your pinky or move your index finger diagonally, are assigned to more rare inputs, such as the symbols ^ and ~.

The Shift layer, accessed by holding down the third thumb key, is not shown here, but it unsurprisingly contains capitalized letters. An additional perk is that when I press Shift and period then the next letter pressed will be the “German version”, e.g., “ä” instead of “a” or “ß” instead of “s”. Pressing Shift and comma turns the next press into “Spanish mode”, with “á” instead of “a” and “ñ” instead of “n.” If you primarily type in languages other than English, you may want to use a more accessible combination, for example switching to your language-specific layer by holding down the thumb key that is currently Space when tapped or by replacing what are now the cursor movement keys with, e.g., ä, ö, ü, and ß.

I have an additional layer L3 containing the keys F1 through F12 and the volume control keys, but I rarely use them.

Closing Remarks

I hope you found this overview interesting. There is a lot more to talk about and I’m happy to do so in person.

FAQ

  • How was the transition from a traditional keyboard?
    I personally practiced the new layout for about two weeks for half an hour per day before switching completely. For practice, I used MonkeyType with custom word lists, starting with words that only contain the most common letters, then slowly expanding to more letters. After a week of switching I was typing fast enough to not feel like I’m being held back by the less familiar new layout anymore and after less than a year I was already considerably faster than I had been with my old keyboard.

  • What switches are you using?
    I have one keyboard with “Outemu Silent Lemon v3” and another one using “Gazzew Boba U4 silent”, both of which are tactile and both are silent switches, which makes them suitable for shared office environments. I like both, however, the latter need to be pressed harder, which is why my first thumb (which I hold down often) key uses a lighter linear switch.

  • How can I get an alternative keyboard layout to work with Vim and similar programs?
    basically you reassign H,J,K,L in normal mode to P,N,E,A. In Vim with e.g. “nnoremap p h”. There are some more caveats, but I’m happy to help. In other programs like LF or neomutt, you just assign those 8 letters to specific actions. The other letters that are not on the right home row, I mostly kept, i.e. u for undo in Vim. For the beginning, you can usually just use the arrow keys until you updated all you programs’ configs.

  • What about wireless keyboards?
    There are wireless versions of most such keyboard models, but they are slightly more complicated to set up and maintain, e.g., you have to recharge them regularly. I personally find wired keyboards more practical and I don’t mind the cable “clutter” on my desk, since I almost never look down while I’m on the computer.

  • Why does the traditional keyboard look the way it does?
    The short answer is: It is based on the type writer (which itself is based on the piano). Meanwhile, the typewriter had certain mechanical limitations. Finally, there is an impressive degree of societal inertia. The long answer has been thoroughly discussed in places like YouTube.

  • Where can I find more resources on the topic?
    There is a reddit community dedicated to this, eventhough a lot of the content is just people sharing pictures of their hardware. Also there are some youtubers known for making videos about the topic, e.g. Ben Vallack, who experimented with keyboards that have fewer than 20 physical keys. I recommend checking out the blogger Pascal Getreuer, who discusses some aspects of this topic in more depth.