Totem keyboard

· keyboards · geekery ·
TOTEM split keyboard with white keys and black case on a grey felt desk mat with an Apple keyboard between the halves

TOTEM keyboard

Remember when I was tweaking the layout of my Nine keyboard? Well, the keyboard rabbit hole called to me again, and — long story short — I built and am using a new keyboard: the TOTEM by GEIGEIGEIST. Oops.

So — long story at its natural length — what happened?

I had been using the Nine for about six months, full time, and I loved it — still do. However, there is a trade-off involved. The Nine is still the most comfortable keyboard I have ever used. It fit my hands perfectly, and there is no stretching or straining for any key. Everything was exactly at hand. However, the trade-off for this level of ergonomic comfort on only 18 keys is cognitive strain. Since there are lots of layers involved, even for alphas, your brain has to do quite a bit of work to figure out what combination of things to press for the next character. This is obviously the case for any keyboard (even a standard one, to get symbols), but the problem increases the fewer keys you have. Long after I didn’t have to think consciously about where things were, I was still feeling that strain.

I started using my Ferris Sweep again, just to see how it felt, and that balance between ergonomics and cognitive work felt immediately better. I decided that I would ideally like another thumb key on each side, and perhaps have the furthest thumb key spaced a bit further away, but about 34-36 keys seemed like the sweet spot.

For a few weeks, I started to design a number of ‘Sweep-like but slightly different’ boards, until I realised that I was pointlessly reinventing the wheel. GEIGEIGEIST’s TOTEM keyboard was just what I was looking for. I had seen it around the time I designed my own keyboard, and I loved the dramatic look and all the obvious care that he had put into designing the PCB, the case, and the wonderful build guide. Suddenly it seemed it bit silly to be designing from scratch when there was already something available. I already had a pair of Seeed XIAO BLE controllers, and most of the other components needed, so all I had to do was get the PCBs and case printed.

A couple of weeks ago, I had a very happy and peaceful day soldering and assembling the board, listening to all of Chopin’s Nocturnes, which for some reason has become my soldering music of choice. It came together very easily, in no small part due to the care with which the board has been designed, and the detailed build guide. My only concern in advance was soldering on the tiny Seeed XIAO controllers, as I had not soldered a controller on using castellated pads before, and the pads to solder on the back looked intimidating. However, it turned out to be relatively straightforward with a bit of care, particularly after I switched to a slightly thicker tip for my soldering iron, so that I could transfer more heat to the pads. It is certainly worth the trouble to use these controllers in a keyboard design, as they fit more easily into the overall footprint, and soldering directly to the PCB reduces the height profile substantially. The keyboard can be set up as a wireless board (with a power switch and battery), or wired with the halves connected by a TRRS cable. I went with wireless, but also soldered the TRRS socket in case I change my mind at some point. Do note if you do the same that you should never connect via TRRS when the batteries are installed. I am confident that I won’t try to do that absent-mindedly, but it would perhaps be a good idea to leave the socket out if you think you might make that mistake.

Back of case with cutouts for keyswitch sockets

Back of case

I also got a case 3D printed in resin at JLCPCB with the PCBs, and it is a lovely sculptural thing. I really admire the way that GEIGEIGEIST integrated the squares and curves of the keyblock into the unusual outline of the case. It makes me think of Art Deco for some reason. Even better, he created a base for the case which has cut out shapes for the hotswap sockets (usually the tallest component under the board), so the overall height of the case is only about 13 mm, and the caps peek just above the solid block of case that surrounds them. It looks so professional and feels protected and solid.

The two things that I was not sure that I needed or would get on with are the extra pinky keys (so the board is 38 keys in total), or the splay of the outside three columns. The stagger is very similar to that of the Ferris Sweep, but given that I was comfortable with that, I wasn’t sure that the splay would work for me. In the end, once I got used to key placement over a couple of days, it is a non-issue, and feels just as comfortable as the Sweep. The extra keys have also come in useful, as I am using the outer-most thumbs as forward/back buttons (used in the conventional way in a browser and to navigate through my Kitty windows within a terminal tab), and the extra pinky keys are for next/previous tab. I use these functions a lot when editing in Neovim and browsing, and it is great to have symmetrical and dedicated spatially-appropriate keys for them.

That brings me on to the layout. Just before building the keyboard, I came across Theo Lemay’s Anachron layout. This combines a small number of layers (four main layers, with function keys on a fifth) with some cleverness with timing to avoid the problem of activating layers accidentally during fast typing. I liked the look of it, so forked it to add the necessary config for the TOTEM and to change the base layout to ColemakDHm, among other small tweaks. I haven’t got around to changing the original layout image in my branch yet, so ignore the image there. My layout is (at the moment!) the one below. In Theo’s original, he provided code to implement urob’s Timeless home row mods, but commented out in favour of one-shot mods. I have used both, but am drawn more towards home row mods, so uncommented this code.

Keymap diagram showing assignment of keys to different layers

My version of the Anachron keymap. Red keys are held on that layer, blue legends show combos.

Overall, I am loving this layout. I wasn’t sure about having the layer switch for the navigation/symbol layer on the same hand that you use for the arrows etc., but having used it for a couple of weeks, I love it. Similarly, it felt a bit odd having a few symbols on the number layer and the rest on the nav/symbols layer, but it makes a lot of sense to have the kinds of symbols you often combine with numbers on the same layer. Everything feels very intuitive, and it has taken me a surprisingly short amount to time to get used to where everything is, which is encouraging.

Apart from the huge number of combos which are defined as part of the timeless layers, I have only defined a few to give me alternative ways to trigger tab, escape, backspace and delete from any layer without having to switch layers, and to give me parens and enter on the number layer. I had trouble with combos involving the bottom row until it dawned on me that the numbering for the keys in keypos_38keys.h was incorrect because of the extra pinky keys and was throwing things out. It was my first time using the zmk-nodefree-config, and it took a bit of experimentation to figure out how to get it to work for me. I like it now though, and may move over all my ZMK layouts to have them in one repo with a common base.

A few other touches I love are the mod-morphs, where the shifted version of a key is changed to make more sense. So now , shifted is ;, . becomes : and ? becomes !. It makes so much more sense syntactically than the standard keyboard layout. I also have both caps word (on double tap of the shift key) and num word set up. I can’t do without the former now and have used it for a while, but I had not previously used num word much. urob set his up so that a single tap of the number layer key does num word by default (you can hold the key to switch to the layer for as long as you hold it too). This is really transformational: num word disengages automatically when you tap a non-number character (this is configurable), so whether you only want to type a single number or an expression like 20+22=42 it works completely transparently and effortlessly. This is an enormous help when coding particularly.

I would be extremely surprised if this is the last TOTEM I make, or even the last keyboard, but it does feel as if I am gradually settling on the balance of ergonomics and cognitive load that works best for me. I still love my Nine, and plan to simplify the layout to use specifically as a mobile keyboard with my phone and iPad. I am going to try a base layer that is more similar to ColemakDHm to avoid confusion, and try using combos for some things to reduce the number of layers a bit.