It has been a very long journey with input methods for me, but I pretty much settled on the ErgoDox as my daily driver.
At least when I’m at my perfect desk. But between commuting and traveling and late night hacking on the couch, I can be bound to a borrowed keyboard or the laptop keyboard. And that’s usually when my tendinitis flares up, since I use the GUI button heavily and can’t easily rebind it – but also never found a good placement for fn keys.
My ErgoDox layout (and wherever I can) has Caps Lock bound to Controls. The thumb cluster is what relaxes my hand the most, with GUI and Alt in close reach.

Ctrl as Caps
Every OS has it’s own solution, which makes it quite annoying at each setup, but I found some options to some degree.
macOS supports caps-to-ctrl as a regular system setting, which I really appreciate. (I also really like that most commands go through Command and Control supports Emacs keybindings globally, so C-a, C-f, etc. work even in the browser, but I digress.)
On Windows there is Ctrl2Cap that installs a system driver and is a lot more resilient than the PowerToys remapper (but obviously with a very limited purpose).
For Linux there are new solutions every 5 years. I mostly used Xmodmap flags like ctrl:nocaps and even some Wayland compositors supported the same flags. But obviously they don’t work in TTY and are again restricted to the preconfigured options.
The new Linux way
For a new configuration I did a couple years back, I found interception-tools to be very flexible, but also a bit cumbersome to configure. I don’t have that configuration with me today, so I can’t share more about it, except that it did what I needed it to and it was fast.
Today on the train ride I felt the GUI button hurting my hand again, so I looked for a quick remapping solution for Alt to GUI, which at least spreads the work to the other hand. At the same time I stumbled over the idea of Home Row Modifiers and clearly I’m in trouble now :)
In short, it solves the problem of the lack of modifier keys within healthy reach, but overloading the use of letter keys. Pressing and letting go of a letter still activates the letter, but holding it in combination with other keys would turn it into a modifier like Control, Alt, GUI, etc. I will never catch up to the depth of the above link, so I’ll skip the fuss and share the layout I have been exploring today.
I have to say, that I tried something similar before with a QMK firmware on a
Planck, but I’m a heavy user of vim and it’s leader key as well as other
“gimmicks” like :map fd <Esc>
and so remapping a
to a modifier always
created issues. It also seems like I’m a sloppy typer, as I would trigger these
mappings inadvertently.
But with the idea of Home row
mod-combos
this issue seems to be much less prevalent. At least with some caveats. I can’t
combo j+k
or h+l
since they are arrow keys in vim that can be pressed in
fairly quick succession.
My current configuration is thus
[main]
# experiment with a fake `fn` key
tab = overload(arrows, tab)
rightalt = rightmeta
capslock = overload(control, esc)
a+s = layer(alt)
a+d = layer(meta)
j+l = layer(meta)
[arrows]
h = left
k = up
j = down
l = right
I am still okay with Shift and Ctrl (at the Caps Lock position), so it’s not quite as extreme as suggested. But I learned with the Ergodox that I can let my hand guide the configuration. What I did with the Ergodox is that I set up a random default configuration, but instead of trying to learn it, I let my hand make mistakes and then remapped the keys accordingly. That is also the reason why Enter is next to Fn1. It just works(tm).
I’m also playing with somewhat of a Fn layer with Tab, at least starting with hjkl for arrows, but I might extend it. It’s probably not the end of the configuration sharpening, but I think it’s a solid start before I start looking for 40% keyboards again.