Compare commits

..
2 Commits
Author SHA1 Message Date
rootiest 354fb7ca3f feat(q5_max): add ESC key RGB indicator for active layer
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.
2026-04-06 23:45:56 -04:00
rootiest e7faaf3376 feat(q5_max): add COMM+DOT+SLSH fallback combo to return to BASE
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.
2026-04-06 23:45:40 -04:00
3 changed files with 47 additions and 0 deletions
@@ -0,0 +1,8 @@
// Copyright 2024 rootiest
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
// Always resolve combo keycodes from BASE (layer 0) so the
// COMM+DOT+SLSH fallback combo fires regardless of the active layer.
#define COMBO_ONLY_FROM_LAYER 0
@@ -108,6 +108,15 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
// clang-format on
// Combos -----------------------------------------------------------------
// COMM + DOT + SLSH → TO(BASE): emergency fallback to base layer.
// COMBO_ONLY_FROM_LAYER 0 (config.h) ensures these keycodes are always
// resolved from BASE so the combo fires regardless of the active layer.
const uint16_t PROGMEM fallback_combo[] = {KC_COMM, KC_DOT, KC_SLSH, COMBO_END};
combo_t key_combos[] = {
COMBO(fallback_combo, TO(BASE)),
};
void keyboard_post_init_user(void) {
chord_init();
// Use the Linux unicode input method (Ctrl+Shift+U → hex → Enter).
@@ -169,6 +178,35 @@ void matrix_scan_user(void) {
chord_scan();
}
// RGB Matrix Indicators --------------------------------------------------
// ESC key (LED index 0) shows which layer is active at a glance.
// BASE stays dark; each FN/control layer gets a distinct colour.
#if defined(RGB_MATRIX_ENABLE)
bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
switch (get_highest_layer(layer_state)) {
case FN1:
RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 128, 255); // blue
break;
case FN2:
RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 220, 80); // green
break;
case FN3:
RGB_MATRIX_INDICATOR_SET_COLOR(0, 255, 120, 0); // orange
break;
case FN4:
RGB_MATRIX_INDICATOR_SET_COLOR(0, 180, 0, 255); // purple
break;
case KEEB_CTL:
RGB_MATRIX_INDICATOR_SET_COLOR(0, 255, 0, 0); // red
break;
default: // BASE — keep ESC dark
RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0);
break;
}
return false;
}
#endif // RGB_MATRIX_ENABLE
// Tap Dance definitions
tap_dance_action_t tap_dance_actions[] = {
// Tap once for Home, twice for End
@@ -1,4 +1,5 @@
VIA_ENABLE = yes
TAP_DANCE_ENABLE = yes
UNICODE_ENABLE = yes
COMBO_ENABLE = yes
SRC += chord_unicode.c