Commit ddf3e40b79aa

Vincent Demeester <vincent@sbr.pm>
2025-10-08 22:08:09
keyboards/moonlander: add some basic combos for layers switching..
- Take QWE layer to define combos (easier) - Add RGB lighting for BEPO and ERGL layers (similar to QWER) - Make BEPO layer default (like on zmk) Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 212f21a
Changed files (2)
keyboards
moonlander
keyboards/moonlander/config/config.h
@@ -24,6 +24,7 @@
 
 #define TAPPING_TERM 280
 #define QUICK_TAP_TERM 0 // 175
+#define COMBO_TERM 40
 
 // Left-hand home row mods
 #define GUI_A LGUI_T(KC_A)
keyboards/moonlander/config/keymap.c
@@ -24,9 +24,9 @@
 #include "keymap_bepo.h"
 
 enum layers {
-    QWER,
     BEPO,
     ERGL,
+    QWER,
     SYMB,
     NUMB,
     NAVI,
@@ -40,7 +40,30 @@ enum custom_keycodes {
 const key_override_t *key_overrides[] = {
 };
 
+#define COMBO_REF_DEFAULT QWER
+
+uint8_t combo_ref_from_layer(uint8_t layer){
+    switch (get_highest_layer(layer_state)){
+        case BEPO: return QWER;
+        default: return QWER;
+    }
+    return layer;  // important if default is not in case.
+}
+
+const uint16_t PROGMEM combo_to_bepo[] = {LT(NAVI,KC_BSPC), SFTLLCK, COMBO_END};
+const uint16_t PROGMEM combo_to_ergol[] = {LT(NUMB,KC_SPC), LT(SYMB, KC_ENT), COMBO_END};
+const uint16_t PROGMEM combo_to_qwerty[] = {KC_DEL, KC_RALT, COMBO_END};
+const uint16_t PROGMEM combo_qwe_escape[] = {ALT_L, GUI_SCLN, COMBO_END};
+const uint16_t PROGMEM combo_toggle_mouse[] = {KC_Q, KC_R, COMBO_END};
+
 combo_t key_combos[] = {
+  // Layers
+  COMBO(combo_to_bepo, TO(BEPO)),
+  COMBO(combo_to_ergol, TO(ERGL)),
+  COMBO(combo_to_qwerty, TO(QWER)),
+  COMBO(combo_toggle_mouse, TG(MOUS)),
+  // Others
+  COMBO(combo_qwe_escape, KC_ESC),
 };
 
 tap_dance_action_t tap_dance_actions[] = {
@@ -48,19 +71,11 @@ tap_dance_action_t tap_dance_actions[] = {
 
 // clang-format off
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-    [QWER] = LAYOUT(
-        KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    XXXXXXX,           XXXXXXX, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
-        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    XXXXXXX,           XXXXXXX, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC,
-        KC_EQL,  GUI_A,    ALT_S,    SFT_D,    CTL_F,    HYP_G,    XXXXXXX,           XXXXXXX, HYP_H,    CTL_J,    SFT_K,    ALT_L,    GUI_SCLN, KC_QUOT,
-        KC_GRV,  KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                                KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RBRC,
-        XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_DEL,  _______,               _______,      KC_RALT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
-	LT(NUMB, KC_SPC),  LT(NAVI,KC_BSPC), XXXXXXX,           XXXXXXX,  SFTLLCK,  LT(SYMB, KC_ENT)
-    ),
     [BEPO] = LAYOUT(
         KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    XXXXXXX,           XXXXXXX, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
         KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    XXXXXXX,           XXXXXXX, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC,
         // KC_TAB,  KC_B,    KC_É,    KC_P,    KC_O,    KC_È,    XXXXXXX,           XXXXXXX, caret,    KC_V,    KC_D,    KC_L,    KC_J,    KC_Z,
-        KC_EQL,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    XXXXXXX,           XXXXXXX,  KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+        KC_EQL,  GUI_A,    ALT_S,    SFT_D,    CTL_F,    HYP_G,    XXXXXXX,           XXXXXXX, HYP_H,    CTL_J,    SFT_K,    ALT_L,    GUI_SCLN, KC_QUOT,
         // KC_EQL,  KC_A,    KC_U,    KC_I,    KC_E,    KC_COM,  XXXXXXX,           XXXXXXX,  KC_H,    KC_J,    KC_K,    KC_L,    LT(NAVI, KC_SCLN), LGUI_T(KC_QUOT),
         KC_GRV,  KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                                KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RBRC,
         //KC_GRV, LCTL_T(KC_Z),KC_X,KC_C,    KC_V,    KC_B,                                KC_N,    KC_M,    KC_COMM, KC_DOT,  RCTL_T(KC_SLSH), KC_RSFT,
@@ -69,9 +84,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
     [ERGL] = LAYOUT(
         KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    XXXXXXX,           XXXXXXX, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
-        KC_DEL,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    XXXXXXX,           XXXXXXX, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS,
-        KC_BSPC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    XXXXXXX,           XXXXXXX,  KC_H,    KC_J,    KC_K,    KC_L,    LT(NAVI, KC_SCLN), LGUI_T(KC_QUOT),
-        KC_LSFT, LCTL_T(KC_Z),KC_X,KC_C,    KC_V,    KC_B,                                KC_N,    KC_M,    KC_COMM, KC_DOT,  RCTL_T(KC_SLSH), KC_RSFT,
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    XXXXXXX,           XXXXXXX, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC,
+        KC_EQL,  GUI_A,    ALT_S,    SFT_D,    CTL_F,    HYP_G,    XXXXXXX,           XXXXXXX, HYP_H,    CTL_J,    SFT_K,    ALT_L,    GUI_SCLN, KC_QUOT,
+        KC_GRV,  KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                                KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RBRC,
+        XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_DEL,  _______,               _______,      KC_RALT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
+	LT(NUMB, KC_SPC),  LT(NAVI,KC_BSPC), XXXXXXX,           XXXXXXX,  SFTLLCK,  LT(SYMB, KC_ENT)
+    ),
+    [QWER] = LAYOUT(
+        KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    XXXXXXX,           XXXXXXX, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    XXXXXXX,           XXXXXXX, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC,
+        KC_EQL,  GUI_A,    ALT_S,    SFT_D,    CTL_F,    HYP_G,    XXXXXXX,           XXXXXXX, HYP_H,    CTL_J,    SFT_K,    ALT_L,    GUI_SCLN, KC_QUOT,
+        KC_GRV,  KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                                KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RBRC,
         XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_DEL,  _______,               _______,      KC_RALT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
 	LT(NUMB, KC_SPC),  LT(NAVI,KC_BSPC), XXXXXXX,           XXXXXXX,  SFTLLCK,  LT(SYMB, KC_ENT)
     ),
@@ -216,14 +239,44 @@ void my_set_rgb_matrix_color_line(int line,  uint8_t red, uint8_t green, uint8_t
 //    ├────┼────┼────┼────┼────┼────┼─────────┐   ┌─────────┼────┼────┼────┼────┼────┼────┤
 //    │ 4  │ 9  │ 14 │ 19 │ 24 │    │   35    │   │   71    │    │ 60 │ 55 │ 50 │ 45 │ 40 │
 //    └────┴────┴────┴────┴────┼────┼────┬────┤   ├────┬────┼────┼────┴────┴────┴────┴────┘
-//                             │ 32 │ 33 │ 34 │   │ 68 │ 69 │ 70 │
+//                             │ 32 │ 33 │ 34 │   │ 70 │ 69 │ 68 │
 //                             └────┴────┴────┘   └────┴────┴────┘
 // Runs constantly in the background, in a loop.
 bool rgb_matrix_indicators_user(void) {
   if (rgb_matrix_get_flags() & (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER)) {
     switch (get_highest_layer(layer_state)) {
+    case BEPO:
+      rgb_matrix_set_color_all(RGB_OFF);
+      // Line 1
+      my_set_rgb_matrix_color_line(1,213,144,0);
+      // Line 2
+      my_set_rgb_matrix_color_line(2,27,213,0);
+      my_set_rgb_matrix_color_homerow(206,255,206);
+      // Line 3
+      my_set_rgb_matrix_color_line(3,0,255,167);
+      // Line 4
+      my_set_rgb_matrix_color_line(4,0,113,255);
+      break;
+    case ERGL:
+      rgb_matrix_set_color_all(RGB_OFF);
+      // ERGOL layer
+      rgb_matrix_set_color(34, 0, 113, 255);
+      rgb_matrix_set_color(70, 0, 113, 255);
+      // Line 1
+      my_set_rgb_matrix_color_line(1,213,144,0);
+      // Line 2
+      my_set_rgb_matrix_color_line(2,27,213,0);
+      my_set_rgb_matrix_color_homerow(206,255,206);
+      // Line 3
+      my_set_rgb_matrix_color_line(3,0,255,167);
+      // Line 4
+      my_set_rgb_matrix_color_line(4,0,113,255);
+      break;
     case QWER:
       rgb_matrix_set_color_all(RGB_OFF);
+      // QWERTY layer
+      rgb_matrix_set_color(34, 27,213,0);
+      rgb_matrix_set_color(70, 27,213,0);
       // Line 1
       my_set_rgb_matrix_color_line(1,213,144,0);
       // Line 2