custom qmk/vial firmware for keebio iris lm (k1 pcb).
set up as a qmk external userspace repository, so the firmware build toolchain (vial-qmk) lives separately and is upstream-clean — no fork modifications.
for day-to-day workflow, see docs/workflow.md.
keyboards/keebio/iris_lm/keymaps/vial_custom/ keymap source (keymap.c, config.h, rules.mk, vial.json, keebio-iris-lm.vil)
docs/ design notes + spec/plan history
tools/gen_led_map.py led position helper
tools/check_vil_keymap_sync.py drift check for `.vil` vs `keymap.c` defaults
.claude/agents/keyb.vial-to-kanata.md claude code agent for syncing kanata config from vial keymap (symlinked from ~/.claude/agents/)
.claude/agents/keyb.qmk-rgb.md claude code agent for syncing rgb cluster arrays with vial keymap (symlinked from ~/.claude/agents/)
qmk.json userspace build target manifest
qmk config user.overlay_dir="$(realpath .)"
qmk userspace-doctor # should report "userspace enabled: true"qmk compile -kb keebio/iris_lm/k1 -km vial_custom
# or build all targets in qmk.json:
qmk userspace-compilethe .bin file lands in this repo's root. flash with qmk flash.
these checks do not require the qmk cli:
python3 -m json.tool qmk.json >/dev/null
python3 -m json.tool keyboards/keebio/iris_lm/keymaps/vial_custom/vial.json >/dev/null
python3 -m json.tool keyboards/keebio/iris_lm/keymaps/vial_custom/keebio-iris-lm.vil >/dev/null
python3 -m py_compile tools/*.py
python3 tools/check_vil_keymap_sync.pykeymaps/vial_custom/keebio-iris-lm.vil is the keymap-as-data exported from vial. it pairs with a firmware build that includes vial.json (compiled in via rules.mk).
this file is the canonical source of truth. ~/.config/vial-qmk/keebio-iris-lm.vil is a symlink to it, so vial gui's default save location writes through to the repo automatically. keymap.c contains firmware defaults generated/synced from the same layout; after saving vial, run the keyb:vial-to-kanata agent, deploy/restart kanata with chezmoi apply ~/.config/kanata/config.kbd + sudo launchctl kickstart -k system/xbxd.kanata if that source changed, then run the keyb:qmk-rgb agent, then python3 tools/check_vil_keymap_sync.py to catch drift before flashing.
current known-good vial qmk settings live in the .vil settings block:
{"7": 200, "25": 150, "26": 1, "27": 0}7tapping term =20025quick tap term =15026chordal hold = enabled27flow tap =0
see docs/homerow-mods.md for the full tap-hold rationale and Vial runtime override warning.
tagged firmware releases (firmware-vN). the .bin is gitignored, so each release is built from the tagged commit before flashing.