VIA keymap¶
Ripple is a stock QMK VIA build, so live keymap editing works on stock firmware with the
screen intact, no flash. (Cert source research/mk856-src/repo/yunzii/al80/: VIA_ENABLE,
ENCODER_MAP_ENABLE, 4 layers, 6×15 matrix = 90 positions, 16 macros, 1 encoder C6/C7.)
⌨️ Supported VIA command set¶
Solid (standard VIA): keymap get/set 0x04/0x05, bulk buffer 0x12/0x13, layer count 0x11,
encoder 0x14/0x15, macros 0x0C–0x10, switch-matrix key tester 0x02/0x03, lighting 0x07–0x09,
protocol version 0x01.
Out (Vial-only → need custom vial firmware): tap dance, combos, key overrides, QMK settings, VialRGB.
Read path must be added to hid.js (today lighting only writes; port the-via keyboard-api.ts
request/response queue). Keycodes are 16-bit big-endian; flat↔matrix i = row*15 + col; bulk
offset layer*90*2 + i*2.
📟 LCD view-switch custom keycodes (stock Fn bindings)¶
CUSTOM(22) = 0x7E16 = HOME (Fn+9, PK_GO_HOME)
CUSTOM(23) = 0x7E17 = PICTURE (Fn+8, picture view)
CUSTOM(24) = 0x7E18 = GIF (Fn+0, PK_GO_GIF)
Encoder CW/CCW direction — unconfirmed on hardware
VIA/QMK's encoder-map convention puts CCW at index 0 (CW at index 1), but the al80-studio app currently treats index 0 as CW. If encoder-bound actions come out reversed, this off-by-one is the suspect. Resolve by binding two distinct keycodes and turning the knob.
⌨️ Current keymap¶
Live layout: keymap/al80_keymap.json (4 layers, macros, encoders). The
keymap/AL80_QMK__V0106_20251219.json alongside it is the VIA keyboard definition, not the
bindings. Workflow in usevia.app: Save-JSON → edit → Load-JSON (VIA's blank "Any" key assigns
KC_NO, not a custom keycode, so direct JSON editing was used).
- Layer 0: F12 =
LT(1,KC_F12); Caps Lock =LT(2,KC_CAPS); Del restored toKC_DEL. - Layer 1 (hold F12) app launcher: S=
LGUI(3)T=LGUI(4)E=LGUI(5)C=LGUI(6), rest TRNS. - Layer 2 (hold Caps): S=
MACRO(0)snipping tool, N=KC_NUM, Q=LALT(F4)close window. - Macro 0 (snip): Down(LGUI) Down(LSFT) Tap(S) Up(LSFT) Up(LGUI).
Export note: VIA's own Save button always works. Programmatic JS export is intermittent.
window.__editedJSON holds the keymap string when the site allows JS exec, so don't rely on it.
See research/via-protocol.md for the full VIA raw-HID protocol and coexistence notes.