Repository navigation
The firmware moves off ZMK v0.3 / Zephyr 3.5 onto ZMK main (Zephyr 4.1), via cormoran's main+dya fork. The keymap is unchanged: same layers, home-row mods, combos, game mode and underglow. This is a major version because flashing it needs a settings reset and re-pairing.
⚠️ Upgrading from v2.x
- Flash
settings_reset.uf2on both halves. - Flash the new left and right firmware.
- Power both off, then turn on the right half first, then the left.
- On each computer, remove the old "Eyelash Sofle" pairing (for example
bluetoothctl remove <MAC>), then pair again fromSYS|NUM+ BT0–BT4.
mise run flash-release-reset # once per half
mise run flash-release # left, then rightHighlights
- ZMK main + Zephyr 4.1 (cormoran
main+dya@e5c9b691, Zephyrv4.1.0+zmk-fixes@10ba6d0c, both SHA-pinned). Upstream ZMK has no v0.4 release. This is the line cormoran's "v4" modules target. - Studio still works over USB and Bluetooth (locking off). The custom-RPC plumbing is kept:
cormoran_ble(BLE profile list/switch/rename/unpair, output priority) andcormoran_rsr(runtime encoder binding). That's the groundwork for sofleii, a planned Rust/ratatui status + control TUI. - Leaner module set. Removed
battery-historyandsettings-rpc(still v0.3-only upstream) andruntime-input-processor(only the vendor overlay used it). Their DYA Studio panels are gone. - Shield vendored in-repo at
config/boards/shields/eyelash_sofle/. The vendor module only supported v0.3. While copying it, a duplicateext-powernode was removed (the v4 board already drives P0.13), along with a deprecatedBT_CTLRdefault.
Breaking / renamed
- Board:
nice_nano_v2→nice_nano//zmk. - Reset artifact:
settings_reset-nice_nano_v2-zmk.uf2→settings_reset.uf2. CONFIG_WS2812_STRIPremoved (no longer exists on Zephyr 4.1).
Tested on hardware (2026-10-17)
Typing on both halves, split link, volume encoder, joystick mouse, per-layer underglow, all layers, game mode, nice!view, soft-off (Q+S+Z, 2 s; wake with one reset press), BLE host pairing, and Studio over USB (raw RPC: device info, custom subsystems, BLE profiles). Studio over BLE in the browser wasn't re-tested.
Memory budget
Left 457 KB / 792 KB flash (57.7%), 123 KB / 256 KB RAM. Right 323 KB (40.8%) / 77 KB. The newer Zephyr/BLE stack costs about 47–53 KB of flash per half versus v2.8.0, even after dropping three modules. Plenty of headroom remains.
Known issue (upstream)
cormoran_ble.get_split_info returns an empty reply. The module never sets nanopb's has_info, and it hardcodes peripheral_connected = false anyway. This doesn't affect the keyboard; it only matters to RPC clients.
Docs
CLAUDE.md said the soft-off combo was Q+A+Z. It's Q+S+Z (positions 14 28 40).
Full changelog: v2.8.0...v3.0.0