Abstract
Recently I have been seeing videos on small ortholinear keyboards, and have been considering getting one. The big thing that most keyboards are lacking for me though is some sort of a pointing device. My preference is a Trackpoint, however, a trackball or touchpad would work as well, just as long as I can keep my hands as close to the home row as possible. I did come across a website that does sell both kits and complete keyboards with pointing devices as an optional add-on. That’s great because I am not going to put in the effort to build my own.
The issue with going with one of those smaller keyboards is the lack of keys though; before purchasing one, I wanted to see how difficult and/or painful it would be to use less keys on my keyboard. This brought me to home row mods, and this post is mostly denoting my experience with them. Things like what does and does not work for me, problems I have run into, and things I would still like to improve.
What are home row mods
Home row mods refers to adding the functions of the modifier keys to the home row. This reduces the need to stretch the fingers in awkward ways as well as moving the commonly used keys away from the weaker fingers (such as the pinky) and adding the functionality to stronger fingers like the index. It also has the added side benefit of being able to get more functionality out of fewer keys, which is helpful for small keyboards with less than 50 keys. Unfortunately, not all keyboards have the capability of doing this out of the box, which is the situation I was in. So I had to implement a software solution, and the software I chose for this was kmonad since I already know how to use it. I am not going to explain how to use the software to actually implement this, rather I am going to be talking about my experience with actually using home row mods. For the “how-to” guide on using kmonad, read my previous post on the topic, or look at the tutorial layout for the project.
Setup
The keyboards that I am wanting to get are have QMK firware, but I do not have any keyboards that are QMK enabled. So, I will have to emulate much of the functionality with other software. It is also available on Windows and Linux which makes it easy enough to implement on enough devices to really live with for a few weeks and find out how well or poorly I can handle the lack of keys I am thinking I want to buy into.
I am not going to go into the setting up of kmonad itself, for that read my previous post on the topic. This time I am going to go over the home row mods that I am using, what I like and dislike about them. Then finally, things that I would like to improve to reduce finger movement and generally use less keys.
For the purposes of this blog post, let’s assume the following keyboard layout:
esc 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ] \
caps a s d f g h j k l ; ' ret
lsft z x c v b n m , . / rsft
lctl lmet lalt spc ralt func menu rctl
This is a quite rough re-creation of the Razer Hunstman Mini layout. Now let’s start by creating a base layer for the keyboard use:
;; Layer 1
grav 1 2 3 4 5 6 7 8 9 0 - = bspc
tab TH-q w e r t y u i o p [ ] TH-bspc
TH-1 TH-a TH-s TH-d TH-f g h TH-j TH-k TH-l TH-; ' ret
lsft z x c v b n m , . / L2
lctl lmet lalt spc L1 rmet cmp rctl
The keyboard layout above is fairly normal; however, the home row keys, as well as some other keys, have additional functionality described below.
- L1: Layer 1
- L2: Layer 2
- TH-1: Tap - Escape, hold - caps lock
- TH-a: Tap - a, hold left shift
- TH-s: Tap - s, hold left control
- TH-d: Tap - d, hold left meta (windows key)
- TH-f: Tap - f, hold left alt
- TH-j: Tap - j, hold right alt
- TH-k: Tap - k, hold right meta
- TH-l: Tap - l, hold right control
- TH-; Tap - semi colon, hold right shift
- TH-bspc: Tap - Backspace, hold
- TH-q: Tap - q, hold tab
This is the default layer I have been using; I expected the layout to be quite difficult to get used to and highly annoying. Getting used to it has been surprisingly easy though; the biggest problem I have had is getting used to using my right hand for using shift. It is much easier with the better position of the key, but is still not quite second nature yet. Past that, it is more minor issues such as getting used to the timing of holding the keys down, or technical issues with various bits of software.
Now that I’ve gone over the main layer, let’s take a look at the other two layers that I am using
;; Layer 2
grav 1 2 3 4 5 6 7 8 9 0 - = bspc
tab TH-q w e r t y 4 5 6 * [ ] \
TH-1 TH-a TH-s TH-d TH-f g h 1 2 3 - ' ret
lsft z x c v b n 0 , . / L2
lctl lmet lalt spc default func menu rctl
This layer’s big feature is swapping the keys on the right side of the keyboard for a number pad; the layout for the number pad is based around the layout that old ThinkPads had. It’s quite convenient and easy enough to learn to use.
The last layer is for using keys that I need far less, such as the arrow keys or other navigational keys.
;; Layer 3
esc 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t home pgdn pgup end p [ ] \
caps a s d f g left down up right ; ' ret
lsft z x c v b n m , . / default
lctl lmet lalt spc L1 func menu rctl
I also use it for when I am playing games as some games do not do well with remapped keys or the tap-hold scheme.
Gripes
Changing to using a keyboard this way has been quite nice, and for the most part the gripes I have are problems more with the implementation rather than actually problems with the setup. For example, on my Windows computer, kmonad often runs into problems where it thinks the CTRL key is being held down after signing in. For the most part, actually using home row mods has been fairly pleasant and I am quickly getting used to it. So much so, that I am already having a difficult time switching back to the standard layout on the keyboard. I do want to find a more elegant way to deal with numbers that do not necessarily require a number row though, as the keyboard that I am wanting to get does not have a row for numbers. I could use the number layer for that, but I feel like it will be extremely difficult to learn where the symbols (things like $ and #) are on the keyboard that way. Reading on some forums, it seems like it is less of a problem if you use a layer to bind the top row of the keyboard for a number row, but then that means switching layers for numbers and that would really suck for changing workspaces on DWM.
Closing Notes
Overall, the idea of home row mods is one that I really like as it requires moving my hands around the keyboard significantly less, however, I could also see it not being for everyone. It does take some getting used to, and the initial switch requires a bit of thought when you are wanting to actually use the keys because you aren’t used to it yet. For those wanting to try it, I would recommend trying it on a more normal keyboard with something like kmonad and slowly get used to it with that rather than just jumping into something like a tiny ortholinear keyboard. This will help you determine if this is a setup that could work for you rather than spending hundreds of dollars on a keyboard that you end up hating.