With multi-profile keyboard mapping, I even have a gaming profile so I don't have to remap keys in the game(s).
Do the same with mice. Cross OS, my mouse can lower, raise, and mute the volume. Great in games too with improving the would audio to either listen for those to sneak up on or quickly lowering the extreme loud noise.
Only grip is that laptop keyboards need to move to the same custom firmware / configuration mapping like external for better cross OS support / user experience.
- turning my CapsLock into escape. As a vim user I use it all the time
- when CapsLock is held it turns into a hyper key. Hyper+e to switch to Emacs window, hyper+b to browser and so on
- creating application independent maps that work on Linux and MacOS: ctrl+w is always "kill last word", super+w to kill a tab or a window
- invoking hammerspoon commands on MacOS that tile windows, bring up window switcher, etc.
I tried some tiling WMs on MacOS(Amethyst?), but they never truly felt like tiling WMs on Linux. I could never reliably switch focus where I wanted it to go. This is not to disparage those projects; my config works well enough and I may not had given them a proper chance.
My tiling is manual and closer to Windows snap feature mixed with Power Toys zones.
It's not as good as a dedicated tiling wm on Linux - but it's less terrible than MacOs' mouse/touchpad chauvinism.
[1]: https://github.com/kbd/setup/blob/main/HOME/.hammerspoon/ini...
If you want to type french with a standard US keyboard for instance, it will require at least some small layering. Typing a CJK language will require some more tweaks, in particular the dual action on keys saves a lot. If you intend to type both accented and CJK with let's say the UK international layout, you'll need every help you can get.
When using vim more heavily, having an escape key remap as the control key's single action is also a huge QOL.
Once you're in it, it opens the door for a lot of small improvements.
I like to use a US Intl keyboard layout for programming but as I am German I need äöüß a lot - so I've used a custom keymap for caps-aous for years (and a couple other things). Yes, you can get most OSes to somehow do this, but just doing it at firmware level would fix SO MANY PROBLEMS.
i also have home, end, backspace, delete, pgup, pgdn, all close enough to the homerow on that layer as well so i dont have to reach out to the corners of the keyboard
then finally on the edsf keys i have it send whether the vscode shortcuts are to move the line up or down or indent/unindent.
most of the rest of the things i have remapped are just single key things that can be done in most other remappers, sending esc when the alt key is tapped, capslock to ctrl etc
- keydown space
- keydown a
- keyup a
- keyup space
I normally get the output <space><a>, interpreted in order of keydown, but kanata outputs in order of keyup, so I get <a><space>.i dont know if this would make a difference but i have "process-unmapped-keys yes" in my defcfg section
My work laptop from Dell has an idiotic "copilot" key which sends something like ctrl+shift+f23 - three separate key presses on the scancode level.
I use dkey to map this otherwise useless crap chord to Ctrl.