Personal QMK firmware fork for the Lily58
split keyboard. The primary artifact is the minimal-code keymap, targeting two
hardware variants.
| Variant | MCU | File |
|---|---|---|
lily58/rev1 |
ATmega32U4 (Pro Micro) | keyboards/lily58/rev1/keyboard.json |
lily58/lite_rev3 |
RP2040 | keyboards/lily58/lite_rev3/keyboard.json |
Right half is master (MASTER_RIGHT in config.h).
All keymap files live in:
keyboards/lily58/keymaps/minimal-code/
├── keymap.c # Layer definitions and OLED rendering
├── config.h # Hardware and feature configuration
├── rules.mk # Build flags and feature toggles
├── Makefile # Convenience targets (compile, flash, clean, json)
└── README.md # Layer diagrams, performance metrics, customization guide
From the keymap directory:
make compile # qmk compile -kb lily58 -km minimal-code
make flash # qmk flash -kb lily58 -km minimal-code (put board in bootloader first)
make clean # qmk clean
make json # generate minimal-code.json for QMK ConfiguratorTo target a specific variant directly:
qmk compile -kb lily58/rev1 -km minimal-code
qmk compile -kb lily58/lite_rev3 -km minimal-codeThis keymap is explicitly named "minimal-code" — keep it that way. Disabled by intent:
In rules.mk:
MOUSEKEY_ENABLE = noLOCKING_SUPPORT_ENABLE = noSPACE_CADET_ENABLE = noGRAVE_ESC_ENABLE = noMAGIC_ENABLE = noCOMMAND_ENABLE = noLTO_ENABLE = yes— link-time optimization for size/speedAVR_USE_MINIMAL_PRINTF = yes
In config.h:
NO_ACTION_TAPPING— no tap dance, tap-hold, etc.NO_ACTION_ONESHOT— no one-shot keys/layersNO_ACTION_MACRO/NO_ACTION_FUNCTIONLAYER_STATE_8BIT— limits to 8 layers max, saves space
Do not add features without removing others to compensate. The target is maximum scan rate and minimal firmware size.
_BASE(0): Standard QWERTY with coding symbols on base,TG(_LOWER)on right thumb_LOWER(1): F-keys, arrow keys (VIM hjkl position), media/brightness,TO(_BASE)to return
- 128×32 display (21 chars × 4 lines)
- Only redraws on layer change — avoids expensive writes mid-scan
- Master half rotated 180°
- ASCII art shows active layer name (
BASE/LOWE) - 60s timeout with slowest fade-out (
OLED_FADE_OUT_INTERVAL 15)
| Metric | Value |
|---|---|
| Matrix scan rate | ~1569 Hz |
| USB polling | 1ms (USB_POLLING_INTERVAL_MS 1) |
| Debounce | 5ms sym_eager_pk |
| NKRO | enabled by default |
- Set
CONSOLE_ENABLE = yesinrules.mk(the#if defined(CONSOLE_ENABLE)guard inconfig.hauto-enablesDEBUG_MATRIX_SCAN_RATE) - Flash and run
qmk console - Set back to
nobefore committing — console costs scan rate
keyboards/lily58/config.h— sets the OLED font for the whole keyboardkeyboards/lily58/lite_rev3/config.h— RP2040-specific: bootloader, USART, I2Ckeyboards/lily58/lite_rev3/keyboard.json— RP2040 pin assignmentskeyboards/lily58/rev1/keyboard.json— AVR pin assignments
GPL-2.0-or-later. All .c and .h files must have a GPL2+ header.