I used to use software to map keys. I religiously want to get rid of caps lock and use it as escape... but I also want control near by.
But let me tell you something; if you are a power user, then relying on software to map keys kind of sucks. I couldn't dual boot windows and linux without everything getting screwed up. I also can't easily switch from mac to linux when I get off work. So I decided to start buying fully programmable keyboards and doing all of it at the firmware. I use QMK (https://github.com/qmk/qmk_firmware) and do very similar things to op. For instance, where my caps lock is, I have set to tap for escape, hold for function layer and where tab is, I have tap for tab and hold for control. There's a ton of other bindings I have, but these are the heavy hitters that have made me very happy.
I killed Karabiner Elements. I removed my software bindings in Widnows and deleted my Xmodmap file in Linux because I can finally just plug a keyboard into a computer and have it behave the same everywhere.
The only drawback is laptop keyboards. I really wish those were programmable (if anyone knows of a way, I would love to hear about it ;)). I have to start Karabiner once in a while when I don't have one of my keyboards handy, or if I'm floating around coffeeshops.
I used to map capslock to control in software (I find control much more useful than escape because it has much wider use and for vim I can use ^[ anyway), but I've since switched to using a Kinesis Advantage2 and no longer need to.
For one, the Advantage2 has the modifier keys in super easy and convenient thumb clusters so moving them to capslock wouldn't actually make it any easier.
You can also remap the keys in the firmware itself, so the OS just sees a standard qwerty keyboard but you send it different keys (I use colemak, but again, its mapped on the keyboard level: the OS thinks I use US english qwerty). So I actually did remap my capslock, but I mapped it to tab because I find it slightly easier to press than the real tab. I also moved the keys in the thumb clusters a little bit to make control and command easier.
I now no longer need to change anything in software and everything works (my tweaks + my keyboard layout) by simply plugging the keyboard into a US english qwerty machine. I use the keyboard both on my home machine and my laptop, although on laptop only when I'm at home. When I'm not home, I have to rely on the usual software mods (I use OSX's settings to remap caps lock to control then)
I literally just went through this tonight with a fresh Arch/KDE install. 45 minutes with various permutations of custom Linux console keymaps, X11 keyboard options (specifically ctrl:nocaps), and KDE's own settings before finally landing on a solution for getting caps remapped to ctrl on my workstation.
I started with the GH60, then handwired a broken ducky shine 3 with a teensy 2. I now use a jd40 and I'm waiting for a planck.
I didn't come up with it out of the blue... I think I was asking some IRC friends about dip switches and if there were any keyboards that supported a switch for disabling or remapping caps lock. Someone showed me the mechanical keyboards subreddit and that lead to a massive rabbit hole.
For anyone interested, handwiring an older mechanical keyboard is like the super budget way of getting a programmable keyboard since you don't have to buy switches, PCBs, keycaps, or plates. There's plenty of information online and the leopold and ducky cases are big enough to house everything once you desolder the PCB. Teensy 2 is like $17.
One very important remap: right meta (CMD/Windows) to backspace! Having such an easily reachable backspace makes a tremendous difference in day-to-day use :)
But let me tell you something; if you are a power user, then relying on software to map keys kind of sucks. I couldn't dual boot windows and linux without everything getting screwed up. I also can't easily switch from mac to linux when I get off work. So I decided to start buying fully programmable keyboards and doing all of it at the firmware. I use QMK (https://github.com/qmk/qmk_firmware) and do very similar things to op. For instance, where my caps lock is, I have set to tap for escape, hold for function layer and where tab is, I have tap for tab and hold for control. There's a ton of other bindings I have, but these are the heavy hitters that have made me very happy.
I killed Karabiner Elements. I removed my software bindings in Widnows and deleted my Xmodmap file in Linux because I can finally just plug a keyboard into a computer and have it behave the same everywhere.
The only drawback is laptop keyboards. I really wish those were programmable (if anyone knows of a way, I would love to hear about it ;)). I have to start Karabiner once in a while when I don't have one of my keyboards handy, or if I'm floating around coffeeshops.