He kept tinkering with his keyboard. What happened next will surprise you…

What does it say when 50% of your blog posts are about keyboard layouts? Either that you are obsessed, or that you blog too little. Or as in my case, both.

I’ve been a keyboard tinkering addict for 18 months. (It’s a thing – check the end of this post). I’ve spent weeks thinking about it. Not a working day goes by when I don’t stop mid finger yoga and wonder if there’s a better way of doing this. My neural pathways have spent so much energy re-routing that I lost weight because of it. (OK, that’s a lie). I’ve woken up from sleep at 2 AM with a new layout idea and couldn’t go back to sleep until I tried it out. (This isn’t a lie)

But something happened on 10 March 2017 that made me stop. It wasn’t a conscious effort. It wasn’t extraneous factors. It wasn’t me not using a keyboard. Like the fag end of the process of getting over someone after breaking up, I realized several weeks later that I simply hadn’t thought about it in a long time. I had to go and check when my program was last modified to get the date I stopped.

Like a smoking addict trying to quit, I had told myself several times that I would stop tinkering from the next day, but didn’t. I marked the folder that contained my scripts as read-only, but my addiction was too strong. I’d just end up changing the folder back a day later.

So, what happened on 10 March 2017?

I designed a keyboard layout that didn’t need any more tinkering. If you think the last few paragraphs were a way to get you to read about my latest layout, then I am afraid I am guilty of that. If that (and the click-baity title) annoys you, then I am glad this discourse is happening through a screen and not over a beer – I doubt I’d enjoy the smell of it in my hair, the existence of a beer shampoo notwithstanding.

If it doesn’t annoy you, read on…

I strongly recommend anyone who spends significant time in front of a desktop (I guess that would be everyone who is still reading, and most that didn’t make it here) to use this. The first five people who use this for an hour a day for over a week and don’t find it useful get a beer from me. I’d love to hear feedback. More beer will follow..

I find myself coding faster, reaching for the mouse less and thinking while I navigating a document. After decades of typing, I have even started using more punctuation. When that happens, you know something fundamental has changed!

The picture at the end of the post summarizes everything. I’ll send you the code used for this modification if you are interested in giving this a whirl. These modifications were done on a Logitech k810 keyboard.

Principles (similar to my previous post):

  1. Minimize use of pinkies. They are the weakest fingers, but are very commonly used for enter, shift and control
  2. Commonly used keys should be easily accessible. We move our hands quite a bit every time we reach for the cursor keys, delete and backspace keys, and the document navigation keys.

The changes

  1. Enter key: very commonly used, but only accessible by the stretch of a pinky. I map the ; key to the Enter key.
  2. Cursor layer: use the left alt key to activate a layer on the alphabet keys on the keyboard. This layer does what is described below and makes it dead easy to use cursor keys and their combos with modifiers. The left alt key is also what most windows users are very habituated to using because of the Alt-Tab combo that most people use. This works as a hold modifier (Shift style) as opposed to a toggle modifier (Caps Lock style)
    1. changes the right side of the keyboard to cursor keys, document navigation keys, backspace, delete, esc, app and Tab keys. Full details are in the picture.
    2. changes the left home row to the modifier keys – Win, Ctrl, Shift and Alt
  3. Number keys as common modifier keys: The Ctrl key is one of the most difficult to reach keys on a windows keyboard, in spite of being very commonly used. The Shift key also needs pinkies. The number keys 2,3,9,0 are the easy to hit, even though they are used rarely. I use them for ctrl and shift keys on the left (2,3) and right (9,0). Since the left alt key has been used for the cursor layer, 4 is used as the left alt key. The 6 key is used to toggle the Cursor layer
  4. Number Layer: most people who type lots of numbers in for a living use the numpad available on most full sized keyboards. So, a numpad layer is created around the right home row to mimic the numpad on full size keyboards. In this layout, this layer becomes a necessity since the number keys are used as modifier keys. 1 key (held down) is used to activate the number layer.
  5. Special Character Layer: coders use a lot of special characters, often in combinations and I found it especially inefficient to hunt and peck as I started coding. There is also a heavy use of pinkies, either to hold down shift or the get to the special character cluster on the right side of the keyboard between the enter and backspace keys. Instead, I use the numbers 5 and 8 to activate a special character layer on the alphabet keys. Easy to reach alphabet keys can have the most commonly used special characters.
  6. Document navigation cluster: Full size keyboards have a document navigation cluster that is indispensable to many users. Since the [ ] \ ‘ are available easier through the special character layer, they can be co-opted for the document navigation cluster. I also map the rarely used print-screen key to Esc and F12 to Tab to be able to fully navigate a document using only the right hand.
  7. Misc changes: these are changes that aren’t essential to the core features of my layout, but are collateral benefits.
    1. Caps Lock: this key is very easy to access but needs the pinky. Since people rarely use caps lock, and I have used the left alt key to as a Cursor modifier, I use this as a left alt key instead.
    2. Left Shift: this key is also easy to access but needs the pinky. Since the 1 key (that is used to activate the number layer) is quite hard to reach (and needs the pinky anyway) I use the left shift key to activate the number layer.
    3. Shift+Tab: is commonly used to have the opposite effect of the tab key. Since the use of layers frees up so many keys, a single key on the cursor layer can be mapped to produce this combination.
    4. Cursor Layer options: When the cursor layer is activated, the left side of the keyboard is relatively free. So far only 4 keys have been used for the modifiers ( a – win, s – ctrl, d – shift, f – alt ). The other alphabet keys can me mapped to commonly used but hard to reach keys. I map e -> tab, and w ->  Shift+Tab, so I can alt tab using the left hand alone. I also map q -> esc so that I don’t need to stretch while reaching for Esc with my left hand. Several keys are still left unmapped on the left side and can be used for further customization.
    5. Custom Layer: the 7 key is used to create a whole other custom layer exposing another 27 functions through the alphabet keys. I use it for emoticons, but most of the keys in this layer are still unused.
The colours indicate the layers. Curs* stands for a toggle style cursor layer.

The learning curve is shallow. It took my just an evening to get used to this layout. I have arranged many keys to mimic existing patterns, albeit in a different part of the keyboard. Look at the cursor keys in the cursor layer for instance. I think I have improved on many existing keyboard patterns as well. I derive the greatest benefit from how easy it is to hit the enter, backspace and Esc keys

Ping me if you want the Autohotkey program that changes a regular keyboard to the one above. Ping me if you want me to tell you how to mentally adapt to the keyboard quickly.

Great, now 60% of my posts are about keyboards.

Appendix – keyboard tinkering addiction

When one’s keyboard tinkering predilection makes the jump to out and out addiction, that person is said to have crossed the K-T boundary. Google it – it’s what killed the dinosaurs.


  1. Hello, it’s me again. I thought you are gonna make your own mechanical keyboard.
    Have you tested an actual cherry MX switches? I mean… choosing random slim-profile membrane keyboard, is kind of wierd decision for a true keyboards enthusiast. No offence of course, you can do whatever you fill to.
    I’m also doing my own keyboard, the project going even slower than yours. But I’ve made a truly custom layout with many nonstandard keysizes, and now have to aquire keycaps somewhere. The road to the perfect keyboard is long and exhausting, but ‘shurtcuts’ that you did simply won’t cut it for me.


    • My problem is not with the tactile sensation on switches – it is more with the layout of the non-character keys that result in moving the hand position too many times. That is the problem I believe I have solved here. What kind of shortcuts do you reckon are difficult on the above layout?

      I did try out a tenkeyless mechanical keyboard for a few months. While the tactile feedback was good, my basic problems with difficult keyboard shortcuts didn’t disappear. What I am suggesting above is independent of the nature of the keys themselves, so you can try it out on a regular mechanical keyboard.

      I do want to make my own keyboard. But that is more to do with having non-staggered rows, and a smaller space bar that allows more keys to be accessible by the thumbs.


      • You didn’t get it, I didn’t mean shortcuts as in keyboard combination.
        I meant that I’m not willing to take ‘shortcuts’ along the road to my perfect keyboard.


      • Ah! I get it now. 🙂 Would you mind sharing your layout? I am especially interested in understanding why you would want to go for non standard size keys.
        I noticed that I was hitting all the large size keys on my keyboard in the same place every time. (The smudge marks on the keycaps are a giveaway). If I make my own custom keyboard, I would like to make every key on the keyboard have the same standard size.


    • I believe you were looking for an easy way to do Ctrl+Shift+Alt+T type combinations.

      That should be quite easy on the layout above. Use your right thumb to hold down right Alt, right ring finger goes on 0 (mapped to Ctrl) and right middle finger goes on 9 (mapped to Shift). All the fingers on your left hand are free to press the key on the left half of the keyboard. Note that none of the fingers on your right hand are moving too much from their natural position. Ctrl+Shift+Alt combos using alphabet keys on the right side are even easier. Hold down 2,3,4 (for ctrl,shift,alt) and press the relevant key with your right hand.

      I find such combos so easy now, what I use them at the operating system level to send app specific commands.


  2. Hello there.
    Just found your blog. I’am a backend developer. My pinkies started to hurt about a year ago.
    So I came up with some optimizations.

    There is my setup:

    1. Ctrl remapped on my right Alt, so I press it with my right thumb.
    2. All modifiers have “lock behavior” and reset on 2s timeout. Shift can be triggered with double press of other modifier.
    For example:
    tap Alt, tap Alt, tap F = Alt+Shift+F
    tap Ctrl, tap Ctrl, tap Alt, tap N = Ctrl+Alt+Shift+N

    3. I have OSD with active modifiers indication.

    4. I type uppercase and other “shiftable characters” with longpress.
    Some people do scripts, which check key’s “hold time” on keyup event.
    My script prints lowercase character immediately on keydown event and do “Backspace + uppercase version” on timer if this key is still pressed. I find this way is more responsive.

    5. Language layout switch mapped on Caps Lock

    6. I have “Command layer switch” on right Win key. My command layout have some similarities with yours. If you interested I can draw it.

    Liked by 1 person

    • Hi.

      Your modifications are interesting – especially the one where pressing a mod twice triggers the shift in addition to the current mod. I have read pressing the same key twice is one of the slowest 2 press action, but I guess convenience over-rides speed in this case.

      If you haven’t already seen it, you might find my article on my layers interesting: https://mull.in/2018/03/25/keyboard-improvement-3-layers/

      My use of layers has evolved a bit since then, but the basics are the same as described above.

      Personally I would not want to mess with holding a key for longer to send a different key press. I did try that in the beginning, but I found that it spoiled my rhythm. I would also find your [backspace+upper case] quite disorienting, but that’s just a personal preference I guess. On balance I think I would find sending a character on key up worse.

      I would definitely like to see your command layer


      • This is a picture of my “Command layer”:

        Some notes:
        * Deletion mode and record/play macro are not implemented
        * Space acts as modifier in command mode
        * Menu key – it’s a right click menu (Shift+F10)
        * // key – Ctrl+/ to coment line in code editor

        I’ve read your another article about layouts. I’m going to experiment with my num row too.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s