Karabiner is an absolutely amazing app that lets you remap keys at a very low level on macOS.
I have completely remapped my keyboard with it and every key on my keyboard is a custom modifier key that I can program to do what I want.
For example you can make caps lock into an escape key when pressed once but if you hold it, it becomes a hyper key. Hyper key means that a key now serves two purposes, once when pressed alone and once when held down. So for example for remapping caps lock, we can remap it to act as escape when pressed alone once but if we hold down on it it becomes ⌘ + ⌃ modifier key. So
caps lock + F becomes ⌘ + ⌃ + F. And so on.
I take this idea further and define these kind of hyper keys but for every single key on my keyboard. I like to call them sticky keys.
This snippet makes
p key into a modifier key. This only works for old Karabiner on El Captain. I am still not certain how it will look like in Sierra.
You can probably use this to achieve this behaviour on Sierra but I have not tested it.
My personal Karabiner setup
I share my Karabiner private.xml here. It is approximately 14,000 lines long so might take a bit of time to load. However I edit it in vim and vim handles this big file very easily. I comment out the necessary sections and jump to them with searches like
km def for defining KM actions to map,
alfred def for mapping alfred triggers to run and
sticky .. to jump between sticky key definitions.
- I can embed simultaneous key mappings inside sticky key definitions.
- KE complex modifications - Has website too.
- My detailed post on Alfred forum mentioning how I use Karabiner
- Interesting setup
- Karabiner Elements documentation (in Japanese)
- Tekezo's launcher mode
- Karabiner.json reference manual
- Karabiner JSON spec
- Write Karabiner config in YAML and then convert to JSON
- shell command JSON
- Karaconv - Converter from Karabiner to Karabiner-Elements text configuration format.
- Cursor keys belong at the center of your keyboard