TOTEM keyboard number two or three

· keyboards · geekery ·
Wired version of TOTEM split keyboard with black case, sitting on grey felt desk mat with Apple Trackpad between the two halves.

Wired TOTEM keyboard

My TOTEM keyboards seem to be multiplying! My first was a wireless version that I’m using to type this. Then I made (or tried to make) another wireless version, with a white resin case. While soldering the pads on the back for the battery connection went fine on the first version, I just could not get it connected properly with the second. That put me in a bit of a fix, because I couldn’t switch to using QMK firmware (which works with wired split keyboards connected by TRRS cables) because QMK doesn’t yet support the XIAO BLE controller that I had used. I also could not use it with ZMK, because while the XIAO BLE is supported, connecting the two halves with TRRS cables is not.

I ended up trying KMK firmware, which is a CircuitPython-based setup. It’s pretty cool, because you can mount the keyboard as a drive, copy some Python scripts to it, et voilà!, you have a working keyboard with the keymap you’ve designed. While I liked it a lot, I found setting up home row modifiers a bit tricky, so it wasn’t quite the same as the mapping I achieved with ZMK. I still had three sets of PCBs left (five is the minimum order), so I decided to buy a couple of XIAO RP2040 controllers (which are supported by QMK), recover other components from the botched board and try again. While I was at it, I tried getting a case printed in black MJF nylon. I really like the black resin, but I wasn’t keen on the white resin. It is a slightly unpleasant (to my eyes) yellowish-white, and the texture isn’t as smooth as the black version. I hadn’t got anything printed in MJF before, so I was taking a risk, but it turned out well, and fitted perfectly. The nylon is less dense than resin, so the keyboard sounds slightly different, but it feels very sturdy and rigid, and I like the slightly grainy texture.

This time I used some flux in a syringe to help with soldering the back pads and the castellated pins of the controller, and that made the whole thing go more smoothly. In any case, the wired version needs only the reset and ground pads to be connected on the back, and there is another ground pin anyway if you mess that up, so the stakes are a bit lower. The pads on the back are the only thing I dislike about these controllers, as otherwise they are great: they’re relatively cheap (especially the RP2040), they work well, and they are tiny, so ideal for small spilt keyboards. I’m pleased how the wired one worked out. At the moment, I’m using the wired one at work, and the wireless one at home (where fewer wires means less opportunity for my cat Bianca to get tangled up or pull out a cable somewhere).

Now that I had both keyboards working on ZMK and QMK firmware, I decided to do a bit of layout tweaking and implement the same features in both so that the boards matched as closely as possible. You can see my latest layout below, and find it in ZMK and QMK.

Miryoku inspired keymap for TOTEM keyboard, showing all six layers
Keyboard layout for all layers and combos

I have a mashed together a number of great ideas stolen from various other people’s layouts, and implemented on top of the ZMK and QMK firmware that GEIST provides in the TOTEM repo. The first is ’timeless’ home row modifier’s from urob’s ZMK layout. This cleverly avoids almost all the downsides of using homerow mods by resolving taps and holds intelligently depending on whether you are holding a key on one side and tapping a key on the other side. For me, this avoids pretty much any accidental triggering of modifiers while rolling over the keys on one side of the keyboard, while feeling snappier overall. The equivalent for QMK is Suraj’s bilateral combinations, that effectively work in a similar way. I also use urob’s key overrides which turns shift+, into semi-colon, ctrl+shift+, into <, and the same combinations of modifiers convert dot into colon and >. In addition, question mark shifted becomes exclamation mark. I don’t know why normal layouts don’t organise things in this way, as it makes logical sense to me.

When I first saw urob’s combos for symbols (instead of a symbol layer), I thought I wouldn’t like them and stuck with a dedicated symbol layer. This time around however, I decided to give them a whirl and found that I loved them. Again, the placement of them makes them easy to remember, and being able to enter symbols easily without triggering a layer is great. I love having all the bracket types easily accessible too. I added all the mathematical operators and round brackets to the spare keys on the number layer, so now I have a fully featured numpad for calculation on my left hand.

There are a few more minor tweaks I might make, like adding a dedicated escape key to my nav layer (in addition to the combo version), but overall, it feels great and very usable. I’m gradually getting faster too, now that there are no timing issues with home row mods to worry about.