Custom ZMK firmware configuration for the GEIGEIGEIST Totem split keyboard with Dual battery monitor and ZMK Studio support.
- Colemak-DH Matrix layout optimized for ortholinear keyboards
- Dual battery monitoring - Reports battery levels for both keyboard halves
- ZMK Studio unlock for live keymap editing (not in original Totem config)
- 5 layers optimized for Python and JavaScript development
- Homerow mods for comfortable modifier access
- Mouse support with scroll and movement controls
- Combos for quick access to ESC, dictation, and special characters
Main typing layer with homerow mods (GUI/Alt/Shift/Ctrl).
Optimized symbol layer for Python/JavaScript:
- Brackets
[]()on homerow for easy access - Numbers arranged as numpad on right side
- Frequently-used symbols (
_,@,#,",') in comfortable positions
Navigation and mouse control layer with arrow keys, page navigation, and mouse movements.
System controls including media keys, screen lock macros, and brightness/volume controls.
Function keys, Bluetooth device switching, and ZMK Studio unlock.
- Fork this repository
- Enable GitHub Actions in your fork
- Modify
config/totem.keymapas needed - Push changes to trigger automatic firmware build
- Download firmware from Actions artifacts
- Flash the halves — see Flashing & Re-pairing the Split Halves (order matters)
Important
Reset BOTH halves before flashing EITHER half. If you reset-and-flash one half at a time (reset left → flash left → reset right → flash right), the left half bonds to the right half's old identity and then can't re-bond once the right is reset. The halves then silently fail to connect, and only the left half types.
All .uf2 files must come from the same GitHub Actions run.
Do these in this exact order:
- Reset BOTH halves first — put each into bootloader (double-tap reset) and copy:
settings_reset-xiao_ble_nrf52840_zmk.uf2→ leftsettings_reset-xiao_ble_nrf52840_zmk.uf2→ right
- Then flash the keyboard firmware (matching halves):
totem_left-xiao_ble_nrf52840_zmk.uf2→ lefttotem_right-xiao_ble_nrf52840_zmk.uf2→ right
- Power both halves on at the same time so the left (central) discovers and bonds to the right (peripheral) cleanly.
If you only changed the keymap, skip the reset and just flash both halves with the new
totem_left / totem_right files.
Note
The left half is the central — it talks to the computer and types over USB/BLE. The right half is the peripheral — it relays its keys to the left over BLE and never types over its own USB connection. Test the right half by pressing its keys while the left half is connected to the computer.
- Keyboard: GEIGEIGEIST Totem (38-key split)
- Controller: Seeeduino XIAO BLE (nRF52840)
- Firmware: ZMK with Studio support
- Q + W: ESC
- N + M: Dictation (Alt+Space)
- U + Y: ñ character
- Mac Lock: Cmd+Ctrl+Q
- Win Lock: Win+L
Configured for split battery level reporting to support peripheral battery monitoring apps.
To change the Bluetooth device name:
-
Edit
config/totem.confand set:CONFIG_ZMK_KEYBOARD_NAME="Your Custom Name" -
Build the firmware (GitHub Actions will create 3 files including
settings_reset) -
Flash the firmware — reset both halves before flashing either (see Flashing & Re-pairing the Split Halves):
settings_reset-xiao_ble_nrf52840_zmk.uf2→ both halves firsttotem_left-xiao_ble_nrf52840_zmk.uf2→ left halftotem_right-xiao_ble_nrf52840_zmk.uf2→ right half
-
Clear the host Bluetooth bond with
&bt BT_CLR_ALL
Note: The settings reset is required because the keyboard name is stored in persistent memory.