Keyboard for Rustaceans - Firmware

With a fully assembled keyboard, it's time to tinker with the firmware.

A Reasonable 34 Key Layout

I needed to downsize my 42 (6x3) key Corne layout to 34 (5x3) keys for this keyboard.

Given I split my time across a few different form factors - Macbook, Lily58, Corne - my keymaps prioritize consistency across layouts over optimizing typing speed.

This means keys are placed in the same region across layouts, and pressed by the same fingers. Only exceptions are frequently pressed keys where ergonomic shortcuts make a big difference - e.g. Esc to JK.

After a few iterations, I found the following setup comfortable enough for daily use:

  • Space keys act as layer keys on hold, to accommodate one less thumb cluster key
  • The missing 6th column keys are mapped to chording fourth and fifth columns
  • Shift is long hold on Z or /
  • Ctrl is long hold on A
  • ESC is JK
  • Tab is FD
  • Del is Raise + ;
  • Enter is Raise + /
  • Enabling retro tapping for typing fast with modifiers on alphabet keys.

Here's my ZMK Configuration on Github.

Diagram for Keymap

Diagram generated by ZMK Viewer and massaged in Figma.

First experience with ZMK Firmware

For this build, I used ZMK Firmware for the first time. Its confirmed wireless and hardware support for Ferris Sweep made it an easy choice.

Compared to my go-to, QMK Firmware, ZMK felt quite different:

  1. The "standard" firmware iteration involves pushing to Github, then downloading GH Action artifacts.
  2. Customization occurs through devicetree source instead of plain C.

I'd probably setup the ZMK toolchain locally if I have to tinker with ZMK again for faster iteration time.

It took some adjustment working with DTS syntax instead of plain C - the abstraction didn't feel as intuitive to me. Nonetheless, after a hour or two digging around docs, I was able to replicate my fine-tuned QMK config to ZMK. Note quite 1-1, but good enough.

Finished Ferris Keyboard

That's a wrap - my tiny, Ferris-themed, bluetooth keyboard is done!

The assembled keyboard