Replace the Win/Mac default-layer switch with an RGB effect toggle:
- Win side → solid white backlight
- Mac side → typing heatmap
Add a weak dip_switch_update_keymap() hook in q5_max.c to work around
factory_test.c already owning dip_switch_update_user().
Define TAPPING_TERM (200ms default) and TAPPING_TERM_PER_KEY in config.h,
then implement get_tapping_term() to set a tight 50ms window for TD_HOME_END
so a single Home tap never accidentally resolves as End.
CK_CTRL_K_C and CK_CTRL_K_D were leftover from an earlier failed
attempt using ACTION_TAP_DANCE_DOUBLE with custom keycodes. Now that
TD_CHORDS uses ACTION_TAP_DANCE_FN with SEND_STRING, they are unused.
Two build errors:
1. RAW_EPSIZE undeclared — usb_descriptor.h is not in scope when
keymap.c is compiled through Keychron's build path. Replace all
uses with HID_PACKET_SIZE (= 32), now defined in hid_protocol.h.
2. via_command_kb duplicate symbol — keychron_raw_hid.c already defines
via_command_kb (non-weak) so we cannot redefine it in keymap.c.
Fix by adding a weak kc_raw_hid_rx_kb() extension hook to
keychron_raw_hid.c (following the same pattern as kc_rgb_matrix_rx).
kc_raw_hid_rx() now calls this hook from its default case instead of
returning false directly. The keymap overrides kc_raw_hid_rx_kb() to
handle our custom HID command range (0x40-0x7E).
Add hid_protocol.h defining a shared 32-byte packet structure for the
qmk-host bridge application (command IDs 0x40-0x7E, clear of VIA's
range). Implement via_command_kb() in keymap.c to intercept incoming
packets: LAYER_SYNC applies a new active layer, VOLUME and BRIGHTNESS
store host-reported values for future RGB indicators, and ACTIVE_APP
is stubbed for a later commit. Layer state changes are broadcast to the
host via raw_hid_send() from layer_state_set_user(), guarded by
g_hid_recv_active to prevent echo loops when the change itself
originated from HID.
Introduces LCK_FN1–LCK_FN4, LCK_CTL, and LCK_BASE custom keycodes that
toggle a layer into a locked state so it stays active after momentary keys
are released. A second press on the same lock key or pressing LCK_BASE
clears all locks and returns to BASE.
Implements rgb_matrix_indicators_advanced_user to colour the ESC key
(LED 0) based on the current layer: dark on BASE, blue on FN1, green
on FN2, orange on FN3, purple on FN4, and red on KEEB_CTL.
Adds a three-key combo (, . /) that fires TO(BASE), providing an
emergency escape hatch when stuck on an unknown layer. COMBO_ONLY_FROM_LAYER
is set to 0 in the keymap config.h so keycodes are always resolved from
BASE, making the combo reliable regardless of the active layer.
Implement a chord-mode unicode entry system activated by Fn1+LeftAlt
(CHORD_KEY). Supports two activation styles: tap CHORD_KEY then type
the sequence within a 2-second window, or hold CHORD_KEY, type the
sequence, and release to commit.
- Add chord_unicode.c/h with a ~110-entry table covering math symbols
(°²³√≈≠≤≥±÷×∞π), Greek letters, currency, fractions, arrows,
typography, and a broad emoji set
- Prefix-aware matching with a 300ms disambiguation timer handles
same-prefix alias pairs (e.g. lte/lteq→≤, inf/infty→∞) cleanly
- Backspace deletes, Enter confirms, Escape cancels while in chord mode
- Modifier and layer key-up events pass through so TT(FN1) release
correctly deactivates the layer while chord mode is active
- Enable UNICODE_ENABLE and wire chord_unicode.c into the build
Add additional functionality and more intuitive use of existing keys:
- Add a Sleep key (FN1+Esc)
- Add a Power key (FN2+Esc)
- Keep old End key behavior alongside tap-dance (FN1+Home - End)
- Add Home key (FN1+LeftArrow)
- Add End key (FN1+RightArrow)
Replace stock MAC/WIN dual-boot layers with a single-OS 6-layer layout
(BASE, FN1, FN2, FN3, FN4, KEEB_CTL). Add tap-dance Home/End, a mouse
control layer (FN2), and timer-based Alt+Tab cycling on the FN2 encoder.
- Restructure layers: drop MAC_BASE/MAC_FN/WIN_BASE/WIN_FN; add FN1-FN4
and KEEB_CTL with Bluetooth/RGB controls
- Add ALT_TAB_FWD/ALT_TAB_BWD custom keycodes driven by matrix_scan_user
timer to hold Alt across encoder ticks (750ms timeout)
- Assign FN2 encoder to Alt+Tab / Alt+Shift+Tab cycling
- Add TD_HOME_END tap-dance (tap=Home, double=End) on numpad Home key
- Enable MOUSEKEY_ENABLE and TAP_DANCE_ENABLE in rules.mk
- Set DYNAMIC_KEYMAP_LAYER_COUNT=6 and TAPPING_TOGGLE=3 in config.h