After browsing too much r/MechanicalKeyboards I bought some more keyboards… 😀
One is a white TKL CODE with 65g Zealios switches
(which is essentially the same as my current WASDv2 except for the case color, switches and lighting), which I bought because I was interested in the Zealios switches, and this is one of the few pre-made keyboards that offer them.
The other was a birthday present to myself and is a Leopold FC660C (Topre) in Grey & Blue:The Leopold does not have a Mac specific mode (although you can use its DIP switches to swap the Windows and Alt key, but that doesn’t get you ⌘ to the right of the space bar).
Therefore I fiddled a bit with remapping some keys for these keyboards for macOS use. One option for the Leopold FC660C is Hasu’s Alt Controller which replaces the controller board itself with a fully programmable one. Another option is to use Karabiner to remap the keys at the software level, but I found the CPU usage of Karabiner’s karabiner_grabber
process a bit too high for what it should be doing. Since macOS 10.12 there’s another way to remap keys using hidutil
.
My configuration (for both keyboards) looks as follows (stored inside ~/bin/remap.sh
which is run on login, based on this script):
#!/usr/bin/env bash # https://developer.apple.com/library/content/technotes/tn2450/_index.html # https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-1035.41.2/IOHIDFamily/IOHIDUsageTables.h.auto.html # https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-1035.41.2/IOHIDFamily/AppleHIDUsageTables.h.auto.html FROM="\"HIDKeyboardModifierMappingSrc\"" TO="\"HIDKeyboardModifierMappingDst\"" ESCAPE="0x700000029" CAPS_LOCK="0x700000039" PRINT_SCREEN="0x700000046" SCROLL_LOCK="0x700000047" PAUSE="0x700000048" INSERT="0x700000049" F13="0x700000068" F14="0x700000069" F15="0x70000006A" LEFT_ALT="0x7000000E2" LEFT_GUI="0x7000000E3" RIGHT_CTRL="0x7000000E4" RIGHT_ALT="0x7000000E6" RIGHT_GUI="0x7000000E7" PC_MENU="0x700000065" MEDIA_PLAY="0xC000000B0" MEDIA_NEXT="0xC000000B5" MEDIA_PREV="0xC000000B6" MEDIA_EJECT="0xC000000B8" # WASDv2 / CODE in Mac mode hidutil property --matching '{"ProductID":0x269, "VendorID":0x4d9}' --set "{\"UserKeyMapping\":[ {$FROM: $CAPS_LOCK, $TO: $ESCAPE}, {$FROM: $INSERT, $TO: $MEDIA_PLAY}, {$FROM: $F13, $TO: $MEDIA_EJECT}, {$FROM: $F14, $TO: $MEDIA_PREV}, {$FROM: $F15, $TO: $MEDIA_NEXT}, ]}" # Leopold FC660C hidutil property --matching '{"ProductID":0x134, "VendorID":0x853}' --set "{\"UserKeyMapping\":[ {$FROM: $CAPS_LOCK, $TO: $ESCAPE}, {$FROM: $LEFT_GUI, $TO: $LEFT_ALT}, {$FROM: $LEFT_ALT, $TO: $LEFT_GUI}, {$FROM: $RIGHT_ALT, $TO: $RIGHT_GUI}, {$FROM: $RIGHT_CTRL, $TO: $RIGHT_ALT}, {$FROM: $PC_MENU, $TO: $RIGHT_CTRL}, {$FROM: $INSERT, $TO: $MEDIA_PLAY}, {$FROM: $PRINT_SCREEN, $TO: $MEDIA_EJECT}, {$FROM: $SCROLL_LOCK, $TO: $MEDIA_PREV}, {$FROM: $PAUSE, $TO: $MEDIA_NEXT}, ]}"
Mainly this maps the modifier keys to be more Mac-like, caps lock to escape (which means I can run the Leopold’s escape key permanently in ` / ~
mode (using Fn + Q), as well as some media keys. The links in the header-comment of the script contain lists of supported pages and usages; the page is the upper 32-bit word and the usage the lower 32-bit word.
If you want to run this on login, you can use launchd
by storing a plist in ~/Library/LaunchAgents/de.maven.remap_keys.plist
for example containing
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>de.maven.remap_keys</string> <key>ProgramArguments</key> <array><string>/Users/maven/bin/remap.sh</string></array> <key>RunAtLoad</key> <true/> </dict> </plist>
Happy hacking!