Some Ultimate Hacking Keyboard configuration tips
This post will only be of interest to those using the Ultimate Hacking Keyboard (UHK), specifically with the lefthand key cluster module. I recently added some customizations I thought might be worth mentioning to those who happen to have this setup. For those who don’t, maybe read on and be tempted by the possibilities…
The latest version of the Agent software for the UHK allows the definition of up to four additional Function layers, or sets of keys that are mapped when a modifier is held down. You’re probably used to the Mod layer, which is how you turn I/J/K/L into arrow keys, etc. when you hold the Mod key, and the Fn layer, which turns 1 into F1 when you hold the Fn key. By clicking the down arrow on the layer bar, you can now check boxes next to Fn2-Fn5 layers to enable them. Then you can assign keys to trigger them, which is where the key cluster module comes in.
The key cluster module provides 3 extra keys to the right of your B key and Space key (by default it’s the Mod key, but I swap my Mod and Space keys). I initially assigned these to ⌘R on the top (⌘B when Mod is held, creating Run and Build buttons in Xcode and other IDEs, and a Refresh button in most other apps), and Enter and Backspace on the bottom two keys (Numpad Return and Forward Delete when Mod or Fn is held). But then I realized they could further function as triggers for other layers.
You can assign a secondary function to any key, which is an action that’s performed when it’s held while another key is pressed. For example, I change the default Mouse key into Caps Lock (which becomes my Hyper key along with Karabiner Elements), and use the secondary function on the Tab key so that when it’s held in combination with other keys, it triggers the Mouse layer.
The bottom left key of the module is a very natural reach for the left thumb, and was the first layer I created. I added a Fn2 layer, and then assigned the secondary function of that key to trigger the Fn2 layer when held. Now I can map anything on the right side, and on the left side I can map anything easily reached by my remaining fingers when my left thumb is holding the module key down.
I assigned A-G (home row) keys to F20-F24, which I then use with BetterTouchTool to trigger actions. I also assigned the block of keys from Y-O down to N-. on the right side to produce characters I commonly use in coding, such as curly/square/angle brackets. It took a while to get used to using those instead of reaching for the actual keys, but it does speed things up with a little practice.
Then I added a Fn3 layer, and made it so that when the right bottom button of the module was held, the other two buttons turn into PgUp and PgDown, and B and Space turn into Home and End. This is essentially the same as holding down my (repositioned) right Mod key and using the arrow cluster on my right hand, but gives me easy one-handed left-handed scrolling while my right hand is on the trackpad. I haven’t added anything else to that layer yet.
The top key on the module triggers the Fn4 layer, which simply turns the bottom two keys into ⌘[ and ⌘] for forward back navigation.
I’ll expand the Fn3/4 keymaps as I find needs for them, but one step at a time. I’ve made the mistake of programming complex layers (and entire other keymaps) and then having to make extensive cheat sheets to remember where everything is until I develop muscle memory for them.
Bonus tip: The Fn layer by default only affects the number keys, so there’s a whole lot of room for mapping other functions to letter keys. I turn a block of keys on the right to be media controls:
I hope that provides some interesting ideas for your own customizations. If you’re interested in this kind of thing but haven’t looked into the UHK, I highly recommend checking it out. Splurge on the wrist wrests and the key module!