a drawn signature made of animated wiggling letters that say Harley Denham

Input Devices

Overly-engineered hardware for controlling computers
A photo of da keyboard

I spend a lot of time in front of computers. After some years of back problems that started in my late teens, I've learned a few things: don't skimp on the chair, don't skimp on the desk and don't skimp on your input devices. Because you're gonna be using them a lot.

I like owning my devices and my hardware. I like making things. I've also always been a computer 'power user': Hammerspoon and Autohotkey, hundreds of little scripts, streamlined setups and dotfile repositories. Not to mention building my own software.

Custom input devices tickle all those interests, but unlike the nebulous depth of my computer, they're shiny and visible too.

I first decided I wanted one when I learned about QMK, the Quantum Mechanical Firmware: a custom microcontroller firmware just for keyboards. Program your keymap, flash your device and you can make any key on the board do anything you want — or more than one thing — without any dependencies on drivers and weird bloaty manufacturer software.

Layers, macros, repeating keys and modifiers. The promise of aesthetically-pleasing functionality. Custom designs and layouts and extra buttons, all of which can do anything you want them to do in as many configurations as you like.

So I made some!

%2

Wanderer

My most recent board, and my daily driver for two years now, is the Wanderer.

The physical layout is exactly the same as its predecessor, the Undertow. Not for lack of wanting a little change but because I just like it.

The Wanderer is also the first board of mine to use ZMK rather than QMK, a keyboard firmware based on the Zephyr RTOS.

ZMK wins some and loses some in terms of usage: it has more useful, interesting features: the Bluetooth support is excellent, which was the purpose of building this board, but it loses with sheer weight of its code and compilation times. 'Bloat' doesn't begin to describe the amount of crap it depends on.

When I built it, I had just acquired a new standing desk, which is bamboo-topped and has a corner. Wanting to do away with wires entirely — not just for the sake of standing, but to be able to move the keyboard around too — I would have to make it wireless.

The ZMK-supporting BT60 was perfect for this; it switches cleanly between my two main devices using simple keyboard shortcuts in the layout.

Visually, I wanted something a little lighter than the Undertow, which was a bit of a dark void. The bamboo case was a total impulse buy when looking for a new enclosure, because it matched the desk!

Components

  • BT60 Bluetooth PCB
  • Novelkeys Cream switches
  • Bamboo Case
  • Cherry stabilisers
  • (Another) custom brushed stainless steel plate
  • XDA Canvas Keycaps
%2

Undertow

The Undertow was my first custom keyboard. I actually had the keymap finished for over a year before all the parts finally arrived, because all of them were on eighteen month group buy lead times. The earlier days of this hobby were rough.

It's layout and design were the prototype for the Wanderer — everything to say about it has

Components

  • DZ60 PCB
  • Holy Panda switches
  • Datamancer 60% case in walnut
  • Cherry stabilisers
  • Custom brushed stainless steel plate
  • Matt3o's beautiful Susuwatari keycaps
  • JellyKey V1 Zen Pond spacebar
The wheel has 1024 points of precision on a smooth, weighted turn

ROTR

The ROTR is a custom macro pad by Polarity Works, whose key feature is a beautifully over-engineered magnetic knob with ridiculous precision.

I use it with the Wanderer's overkill keymap for editing and animation. It's set up for keyframe stepping in Resolve and Blender, as well as for "sliding" edits, which is grabbing a whole media item or a cut point and sliding it along the timeline. Basically it does all the important stuff that BlackMagic's 'Speed Editor' does, but it was half the price — despite being an expensive, small production run item — and looks way nicer.

Layouts and Keymaps

While the aesthetics of custom boards are fun, there's really no point in buying expensive boards if they're not going to be useful. Where most saw the chance to reduce the number of keys or change the ergonomics, I just wanted a custom controller for all my stuff.

a screenshot of a diagram representing all the keys and layers available on the board
You can see the raw keymap data here in case you're curious about implementation.

My favourite layer on here is the numpad, which is accessed by holding down the Tab key. When pressed, the Tab key is still the Tab key, but holding it will cause the right half of the board to turn into a numeric keypad. This lets me navigate in Blender efficiently without needing a full size keyboard or a separate numpad. I can also use the calculator efficiently because, of course, maths operators and bracket keys are available as well.

Software and Portability

I've built a number of layers into the board that are dedicated to software I use regularly. These shortcuts offer fast, usually first-order access to common functions in applications, which lets me work faster.

Where possible, the default shortcuts built into the application are used, allowing the board to be connected to any workstation running a stock installation of the same software and run seamlessly.

If I have my keyboard and a company or a client has the software, I can work just as fast on their devices as on my own. I don't have as bad of a time when I'm not on my dedicated machine.

This works about 98% of the time, which is to say only one or two changes to any program's stock shortcut bindings are usually necessary to work optimally. I've also learned later in life that simply learning the latest keymap of a software update is actually easier (frankly two days max) than it is trying to rebind everything the way it was (hours of labour putting everything back and dealing with collisions).

Sources

I maintain a wrapper repository for all my keyboards that lets me attach my keymaps without needing to maintain any forks of QMK/ZMK or have to rebase against them all the time.

After growing frustrated with QMK's shift to a similar and equally dysfunctional Python-based toolchain à la ZMK, I recently ported all of these boards to individual GitHub workflows for building. You have to wait a little longer for compilation, but the sheer joy of never having to install gigabytes of junk that needs constant rebasing again makes it all worthwhile.

All the keymaps for my boards are in here, along with other configuration files and build scripts.