Personal ZMK firmware configuration for a Corne split keyboard (42 keys) with nice!nano v2 controller and nice!view e-paper display.
The SVG diagram below is auto-generated by keymap-drawer on every push.
| Layer | Activation | Contents |
|---|---|---|
| Default (0) | — | QWERTY, LALT on right thumb |
| Lower (1) | Left thumb (LWR) | Numbers, navigation (arrows/Home/End/PgUp/PgDn), word-jump modifiers, Undo/Cut/Copy/Paste |
| Raise (2) | Right thumb (RSE) | Symbols and advanced punctuation |
| Adjust (3) | LWR + RSE (tri-layer) | F1–F12, media/volume, macOS window management (Mission Control, Exposé, Desktop switch) |
| Bluetooth (4) | Combo A+S | BT profile selection (×3), BT clear, USB/BLE toggle, reset, bootloader |
| Keys | Output | Layer |
|---|---|---|
| D + F | Tab | Default |
| J + K | Esc | Default |
| U + I | Backspace | Default |
| G + H | Caps Word | Default |
| L + ; | Enter | Default |
| A + S | Bluetooth layer | Default |
All combos use
require-prior-idle-ms(150–200 ms) to prevent accidental activation during fast typing.
The left home row on the Lower layer provides modifiers that combine with the right-hand arrow keys, enabling cross-OS text editing:
| Key | Modifier | macOS | Linux |
|---|---|---|---|
| A pos | Ctrl+Alt (WORD) | Jump word ✅ | Jump word ✅ |
| S pos | Shift (SHFT) | Select character ✅ | Select character ✅ |
| D pos | Ctrl+Alt+Shift (W+SHF) | Select word ✅ | Select word ✅ |
| Ctrl pos | GUI | Window snap (Rectangle) | Hyprland binds |
The
word_modmacro presses Ctrl+Alt simultaneously — macOS honors Option (word jump) while Linux honors Ctrl (word jump). The extra modifier is ignored on each OS.
| Key | Shortcut | macOS | Hyprland |
|---|---|---|---|
| Ctrl pos | Ctrl+↑ |
Mission Control | Configurable |
| A pos | Ctrl+↓ |
App Exposé | Configurable |
| S pos | Ctrl+← |
Previous desktop | Configurable |
| D pos | Ctrl+→ |
Next desktop | Configurable |
| F pos | `Cmd+`` | Switch windows (same app) | Configurable |
| G pos | Cmd+Tab |
App Switcher | Configurable |
Activated by holding A+S simultaneously. Protected with require-prior-idle-ms = 200.
| Key | Action |
|---|---|
| D | BT Profile 0 |
| F | BT Profile 1 |
| G | BT Profile 2 |
| Z | BT Clear (unpair current profile) |
| X | Toggle USB ↔ BLE output |
| C | System reset |
| V | Enter bootloader |
Press G + H to activate Caps Word mode: all letters are capitalized until you type a space or punctuation. Great for typing constants like HTTP_SERVER, MAX_RETRIES, etc.
| Setting | Value | Description |
|---|---|---|
| Idle Timeout | 30 s | Enters idle state to ease BT reconnection |
| Deep Sleep | 15 min | Battery saving after prolonged inactivity |
| BT TX Power | +8 dBm | Extended Bluetooth range |
| BLE Experimental | Enabled | More stable BT connection |
| BT Max Connections | 4 | 3 profiles + 1 split link |
| BT Name | "Corne" | Name shown during pairing |
- MCU: nice!nano v2 (nRF52840)
- Display: nice!view (e-paper)
- Layout: Corne (3×6 + 3 thumb keys per side)
Firmware is automatically compiled via GitHub Actions on every push.
- Go to the Actions tab
- Click the latest run with ✅
- Download the
firmwareartifact (contains.uf2files for left and right halves) - Connect each half via USB and copy the matching
.uf2to theNICENANOdrive