Explorar o código

Merge remote-tracking branch 'origin/develop' into xap

QMK Bot %!s(int64=3) %!d(string=hai) anos
pai
achega
26cfc07723
Modificáronse 36 ficheiros con 1067 adicións e 198 borrados
  1. 135 0
      keyboards/doio/kb16/rev1/keymaps/pugmajere/keymap.c
  2. 10 0
      keyboards/doio/kb16/rev1/keymaps/pugmajere/readme.md
  3. 2 0
      keyboards/doio/kb16/rev1/keymaps/pugmajere/rules.mk
  4. 3 3
      keyboards/horrortroll/chinese_pcb/black_e65/config.h
  5. 1 1
      keyboards/horrortroll/chinese_pcb/black_e65/info.json
  6. 2 2
      keyboards/horrortroll/chinese_pcb/black_e65/keymaps/default/keymap.c
  7. 2 2
      keyboards/horrortroll/chinese_pcb/black_e65/keymaps/via/keymap.c
  8. 3 2
      keyboards/horrortroll/chinese_pcb/black_e65/readme.md
  9. 11 6
      keyboards/horrortroll/chinese_pcb/devil68_pro/config.h
  10. 1 1
      keyboards/horrortroll/chinese_pcb/devil68_pro/info.json
  11. 15 59
      keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/default/keymap.c
  12. 0 3
      keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/default/readme.md
  13. 1 5
      keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/via/config.h
  14. 15 59
      keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/via/keymap.c
  15. 0 3
      keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/via/readme.md
  16. 4 3
      keyboards/horrortroll/chinese_pcb/devil68_pro/readme.md
  17. 0 14
      keyboards/horrortroll/chinese_pcb/readme.md
  18. 23 23
      keyboards/horrortroll/readme.md
  19. 54 0
      keyboards/keyboardio/model01/keymaps/pugmajere/config.h
  20. 192 0
      keyboards/keyboardio/model01/keymaps/pugmajere/keymap.c
  21. 20 0
      keyboards/keyboardio/model01/keymaps/pugmajere/readme.md
  22. 1 0
      keyboards/keyboardio/model01/keymaps/pugmajere/rules.mk
  23. 2 12
      keyboards/keychron/q1/config.h
  24. 41 0
      keyboards/keychron/q1/iso_encoder/config.h
  25. 105 0
      keyboards/keychron/q1/iso_encoder/info.json
  26. 150 0
      keyboards/keychron/q1/iso_encoder/iso_encoder.c
  27. 19 0
      keyboards/keychron/q1/iso_encoder/iso_encoder.h
  28. 68 0
      keyboards/keychron/q1/iso_encoder/keymaps/default/keymap.c
  29. 1 0
      keyboards/keychron/q1/iso_encoder/keymaps/default/rules.mk
  30. 78 0
      keyboards/keychron/q1/iso_encoder/keymaps/keychron/keymap.c
  31. 5 0
      keyboards/keychron/q1/iso_encoder/keymaps/keychron/rules.mk
  32. 69 0
      keyboards/keychron/q1/iso_encoder/keymaps/via/keymap.c
  33. 2 0
      keyboards/keychron/q1/iso_encoder/keymaps/via/rules.mk
  34. 5 0
      keyboards/keychron/q1/iso_encoder/readme.md
  35. 25 0
      keyboards/keychron/q1/iso_encoder/rules.mk
  36. 2 0
      keyboards/keychron/q1/q1.h

+ 135 - 0
keyboards/doio/kb16/rev1/keymaps/pugmajere/keymap.c

@@ -0,0 +1,135 @@
+/* Copyright 2022 DOIO
+ * Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
+ * Copyright 2022 Ryan Anderson <ryan@michonline.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+// OLED animation
+#include "lib/layer_status/layer_status.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+enum layer_names {
+    _BASE = 0,
+    _FN,
+    _FN1,
+    _FN2,
+};
+
+// enum layer_keycodes { };
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    /*
+           ┌───┬───┬───┬───┐   ┌───┐ ┌───┐
+           │C-D│C-E│M-D│M-E│   │Ply│ │TO1│
+           ├───┼───┼───┼───┤   └───┘ └───┘
+           │ 5 │ 6 │ 7 │ 8 │
+           ├───┼───┼───┼───┤
+           │ 9 │ 0 │ ↑ │Ent│      ┌───┐
+           ├───┼───┼───┼───┤      │Mut│
+           │Fn2│ ← │ ↓ │ → │      └───┘
+           └───┴───┴───┴───┘
+           ┌───┬───┬───┬───┐   ┌───┐ ┌───┐
+           │ ! │ @ │ # │ $ │   │   │ │   │
+           ├───┼───┼───┼───┤   └───┘ └───┘
+           │ % │ ^ │ & │ * │
+           ├───┼───┼───┼───┤
+           │ ( │ ) │   │   │      ┌───┐
+           ├───┼───┼───┼───┤      │   │
+           │   │   │   │   │      └───┘
+           └───┴───┴───┴───┘
+    */
+    /*  Row:    0         1        2        3         4        5        6      */
+    [_BASE] = LAYOUT(C(KC_D), C(KC_E), LCMD(KC_D), LCMD(KC_E), KC_MPLY,
+                     KC_5, KC_6, LCTL(LCMD(KC_H)), KC_8, TO(_FN),
+                     KC_9, KC_0, KC_UP, KC_ENT, KC_MUTE,
+                     MO(_FN2), KC_LEFT, KC_DOWN, KC_RIGHT),
+
+    /*
+           ┌───┬───┬───┬───┐   ┌───┐ ┌───┐
+           │   │   │   │   │   │   │ │   │
+           ├───┼───┼───┼───┤   └───┘ └───┘
+           │   │   │   │   │
+           ├───┼───┼───┼───┤
+           │   │   │   │   │      ┌───┐
+           ├───┼───┼───┼───┤      │   │
+           │   │   │   │   │      └───┘
+           └───┴───┴───┴───┘
+    */
+    /*  Row:    0        1        2        3        4        5         6      */
+    [_FN] = LAYOUT(_______, _______, _______, _______, _______,
+                   _______, _______, _______, _______, TO(_FN1),
+                   _______, _______, _______, _______, _______,
+                   _______, _______, _______, _______),
+
+    /*
+           ┌───┬───┬───┬───┐   ┌───┐ ┌───┐
+           │   │   │   │   │   │   │ │   │
+           ├───┼───┼───┼───┤   └───┘ └───┘
+           │   │   │   │   │
+           ├───┼───┼───┼───┤
+           │   │   │   │   │      ┌───┐
+           ├───┼───┼───┼───┤      │   │
+           │   │   │   │   │      └───┘
+           └───┴───┴───┴───┘
+    */
+    /*  Row:    0        1        2        3        4        5         6      */
+    [_FN1] = LAYOUT(_______, _______, _______, _______, _______,
+                    _______, _______, _______, _______, TO(_FN2),
+                    _______, _______, _______, _______, _______,
+                    _______, _______, _______, _______),
+
+    /*
+           ┌───┬───┬───┬───┐   ┌───┐ ┌───┐
+           │Spi│Spd│   │   │   │   │ │TO0│
+           ├───┼───┼───┼───┤   └───┘ └───┘
+           │Sai│Sad│   │   │
+           ├───┼───┼───┼───┤
+           │Tog│Mod│Hui│   │      ┌───┐
+           ├───┼───┼───┼───┤      │   │
+           │   │Vai│Hud│Vad│      └───┘
+           └───┴───┴───┴───┘
+    */
+    /*  Row:    0        1        2        3        4        5          6      */
+    [_FN2] = LAYOUT(RGB_SPI, RGB_SPD, _______, QK_BOOT, _______,
+                    RGB_SAI, RGB_SAD, _______, _______, TO(_BASE),
+                    RGB_TOG, RGB_MOD, RGB_HUI, _______, _______,
+                    _______, RGB_VAI, RGB_HUD, RGB_VAD),
+};
+// clang-format on
+
+#ifdef OLED_ENABLE
+bool oled_task_user(void) {
+    render_layer_status();
+
+    return true;
+}
+#endif
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+    [_BASE] = {ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [_FN]   = {ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [_FN2]  = {ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [_BASE] = {ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+};
+#endif

+ 10 - 0
keyboards/doio/kb16/rev1/keymaps/pugmajere/readme.md

@@ -0,0 +1,10 @@
+# pugmajere's Google Meet optimized version of the default keymap
+
+A lightly modified version of the default keymap.
+
+The top row is converted to keys used for muting audio and video in
+Google Meet, in both Linux and MacOS. (Yes, they annoyingly have
+different conventions.)
+
+The ASCII-art depiction uses "C-E" to mean "ctrl-e", and "M-E" to mean
+CMD(GUI) and "e", roughly following Emacs naming conventions.

+ 2 - 0
keyboards/doio/kb16/rev1/keymaps/pugmajere/rules.mk

@@ -0,0 +1,2 @@
+# Encoder enabled
+ENCODER_MAP_ENABLE = yes

+ 3 - 3
keyboards/horrortroll/chinese_pcb/black_e65/config.h

@@ -1,4 +1,4 @@
-/* Copyright 2021 HorrorTroll <https://github.com/HorrorTroll>
+/* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -18,11 +18,11 @@
 
 #include "config_common.h"
 
-/* key matrix size */
+/* Key matrix size */
 #define MATRIX_ROWS 5
 #define MATRIX_COLS 15
 
-/* key matrix pins */
+/* Key matrix pins */
 #define MATRIX_ROW_PINS { B0, B1, B2, B3, B7 }
 #define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4, F7, F6, F5, F4, F1, F0 }
 

+ 1 - 1
keyboards/horrortroll/chinese_pcb/black_e65/info.json

@@ -5,7 +5,7 @@
     "maintainer": "HorrorTroll",
     "usb": {
         "vid": "0x7516",
-        "pid": "0x6003",
+        "pid": "0x7000",
         "device_version": "0.0.1"
     },
     "layouts": {

+ 2 - 2
keyboards/horrortroll/chinese_pcb/black_e65/keymaps/default/keymap.c

@@ -54,13 +54,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        │    │    │    │                        │   │   │   │   │   │   │
        └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
 */
-    /*  Row:    0        1        2        3        4        5        6        7        8        9        10       11       12       13       14       15      */
+    /*  Row:    0        1        2        3        4        5        6        7        8        9        10       11       12       13       14       15     */
     [_BASE] = LAYOUT_all(
                 KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_GRV,  KC_BSPC, KC_DEL,
                 KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,          KC_PGUP,
                 KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,                    KC_PGDN,
                 KC_LSFT, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,          KC_UP,   MO(_FN),
-                KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+                KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
             ),
 
 /*

+ 2 - 2
keyboards/horrortroll/chinese_pcb/black_e65/keymaps/via/keymap.c

@@ -56,13 +56,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        │    │    │    │                        │   │   │   │   │   │   │
        └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
 */
-    /*  Row:    0        1        2        3        4        5        6        7        8        9        10       11       12       13       14       15      */
+    /*  Row:    0        1        2        3        4        5        6        7        8        9        10       11       12       13       14       15     */
     [_BASE] = LAYOUT_all(
                 KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_GRV,  KC_BSPC, KC_DEL,
                 KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,          KC_PGUP,
                 KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,                    KC_PGDN,
                 KC_LSFT, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,          KC_UP,   MO(_FN),
-                KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+                KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
             ),
 
 /*

+ 3 - 2
keyboards/horrortroll/chinese_pcb/black_e65/readme.md

@@ -1,9 +1,10 @@
 # Black E6.5
 
-A chinese PCB clone of Exclusive E6.5.
+A Exclusive E6.5 clone keyboard made by Chinese maker, which controlled by an ATMEGA32U4 chipset. The keyboard features per-key backlight, RGB underglow.
 
 * Keyboard Maintainer: [HorrorTroll](https://github.com/HorrorTroll)
-* Hardware Supported: Atmega32u4
+* Hardware Supported: ATMEGA32U4
+* Hardware Availability: Unknown
 
 Make example for this keyboard (after setting up your build environment):
 

+ 11 - 6
keyboards/horrortroll/chinese_pcb/devil68_pro/config.h

@@ -1,4 +1,4 @@
-/* Copyright 2021 HorrorTroll <https://github.com/HorrorTroll>
+/* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -18,16 +18,16 @@
 
 #include "config_common.h"
 
-/* key matrix size */
+/* Key matrix size */
 #define MATRIX_ROWS 5
 #define MATRIX_COLS 16
 
-/* key matrix pins */
+/* Key matrix pins */
 #define MATRIX_ROW_PINS { B7, B3, B2, F6, F7 }
 #define MATRIX_COL_PINS { B1, B0, B5, B6, C6, C7, E2, D0, D1, D2, D3, D5, D4, D6, D7, B4 }
 
-#define BOOTMAGIC_LITE_ROW 3
-#define BOOTMAGIC_LITE_COLUMN 6
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
 
 /* COL2ROW or ROW2COL */
 #define DIODE_DIRECTION COL2ROW
@@ -43,6 +43,7 @@
     #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
     #define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
     #define RGB_MATRIX_KEYPRESSES
+    #define RGB_MATRIX_FRAMEBUFFER_EFFECTS
 
     /* RGB Matrix config */
     #define RGB_DI_PIN E6
@@ -75,8 +76,12 @@
     #define ENABLE_RGB_MATRIX_HUE_PENDULUM
     #define ENABLE_RGB_MATRIX_HUE_WAVE
     #define ENABLE_RGB_MATRIX_PIXEL_RAIN
+    #define ENABLE_RGB_MATRIX_PIXEL_FLOW
     #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
-// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+
+    #define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+    #define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
     #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
     #define ENABLE_RGB_MATRIX_SOLID_REACTIVE
     #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE

+ 1 - 1
keyboards/horrortroll/chinese_pcb/devil68_pro/info.json

@@ -5,7 +5,7 @@
     "maintainer": "HorrorTroll",
     "usb": {
         "vid": "0x7516",
-        "pid": "0x6001",
+        "pid": "0x7001",
         "device_version": "0.0.1"
     },
     "layouts": {

+ 15 - 59
keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/default/keymap.c

@@ -1,4 +1,4 @@
-/* Copyright 2021 HorrorTroll <https://github.com/HorrorTroll>
+/* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,26 +27,10 @@
 // entirely and just use numbers.
 
 enum layer_names {
-    _BASE = 0,
-    _FN = 1
+    _BASE,
+    _FN,
 };
 
-enum user_rgb_mode {
-    RGB_MODE_ALL,
-    RGB_MODE_KEYLIGHT,
-    RGB_MODE_UNDERGLOW,
-    RGB_MODE_NONE,
-};
-
-typedef union {
-    uint32_t raw;
-    struct {
-        uint8_t rgb_mode :8;
-    };
-} user_config_t;
-
-user_config_t user_config;
-
 // enum layer_keycodes { };
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -75,13 +59,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        │    │    │    │                        │   │   │   │   │   │   │
        └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
 */
-    /*  Row:    0        1        2        3        4     5     6       7     8     9        10       11       12       13       14       15     */
+    /*  Row:    0        1        2        3        4        5        6        7        8        9        10       11       12       13       14       15     */
     [_BASE] = LAYOUT_65_ansi(
-                KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4, KC_5, KC_6,   KC_7, KC_8, KC_9,    KC_0,    KC_MINS, KC_EQL,           KC_BSPC, KC_GRV,
-                KC_TAB,           KC_Q,    KC_W,    KC_E, KC_R, KC_T,   KC_Y, KC_U, KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
-                KC_CAPS,          KC_A,    KC_S,    KC_D, KC_F, KC_G,   KC_H, KC_J, KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,           KC_PGUP,
-                         KC_LSFT, KC_Z,    KC_X,    KC_C, KC_V, KC_B,   KC_N, KC_M, KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT, KC_UP,   KC_PGDN,
-                KC_LCTL, KC_LGUI,          KC_LALT,             KC_SPC,                      KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+                KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,           KC_BSPC, KC_GRV,
+                KC_TAB,           KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+                KC_CAPS,          KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,           KC_PGUP,
+                         KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT, KC_UP,   KC_PGDN,
+                KC_LCTL, KC_LGUI,          KC_LALT,                   KC_SPC,                             KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
             ),
 
 /*
@@ -97,38 +81,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        │    │    │    │                        │   │   │App│Spd│Vad│Spi│
        └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
 */
-    /*  Row:    0        1        2        3         4        5        6        7        8        9        10       11       12       13       14     */
+    /*  Row:    0        1        2        3        4        5        6        7        8        9        10       11       12       13       14       15     */
     [_FN]   = LAYOUT_65_ansi(
-                _______, KC_F1,   KC_F2,   KC_F3,    KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,           _______, QK_BOOT,
-                _______,          _______, KC_UP,   _______,  _______, _______, _______, _______, KC_INS,  _______, KC_PSCR, _______, _______, RGB_HUI, RGB_MOD,
-                _______,          KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______,          KC_HOME,
-                         _______, _______, _______,  KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,          _______, RGB_VAI, KC_END,
-                _______, _______,          _______,                    _______,                            _______, _______, KC_APP,  RGB_SPD, RGB_VAD, RGB_SPI
+                _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,           _______, QK_BOOT,
+                _______,          _______, KC_UP,   _______, _______, _______, _______, _______, KC_INS,  _______, KC_PSCR, _______, _______, RGB_HUI, RGB_MOD,
+                _______,          KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______,          KC_HOME,
+                         _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,          _______, RGB_VAI, KC_END,
+                _______, _______,          _______,                   _______,                            _______, _______, KC_APP,  RGB_SPD, RGB_VAD, RGB_SPI
             ),
 };
 
-void keyboard_post_init_user(void) {
-    user_config.raw = eeconfig_read_user();
-    switch (user_config.rgb_mode) {
-        case RGB_MODE_ALL:
-            rgb_matrix_set_flags(LED_FLAG_ALL);
-            rgb_matrix_enable_noeeprom();
-            break;
-        case RGB_MODE_KEYLIGHT:
-            rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR);
-            rgb_matrix_set_color_all(0, 0, 0);
-            break;
-        case RGB_MODE_UNDERGLOW:
-            rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
-            rgb_matrix_set_color_all(0, 0, 0);
-            break;
-        case RGB_MODE_NONE:
-            rgb_matrix_set_flags(LED_FLAG_NONE);
-            rgb_matrix_set_color_all(0, 0, 0);
-            break;
-    }
-}
-
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     switch (keycode) {
         case RGB_TOG:
@@ -137,33 +99,27 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
                     case LED_FLAG_ALL: {
                         rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR);
                         rgb_matrix_set_color_all(0, 0, 0);
-                        user_config.rgb_mode = RGB_MODE_KEYLIGHT;
                     }
                     break;
                     case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): {
                         rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
                         rgb_matrix_set_color_all(0, 0, 0);
-                        user_config.rgb_mode = RGB_MODE_UNDERGLOW;
                     }
                     break;
                     case (LED_FLAG_UNDERGLOW): {
                         rgb_matrix_set_flags(LED_FLAG_NONE);
                         rgb_matrix_set_color_all(0, 0, 0);
-                        user_config.rgb_mode = RGB_MODE_NONE;
                     }
                     break;
                     default: {
                         rgb_matrix_set_flags(LED_FLAG_ALL);
                         rgb_matrix_enable_noeeprom();
-                        user_config.rgb_mode = RGB_MODE_ALL;
                     }
                     break;
                 }
-                eeconfig_update_user(user_config.raw);
             }
             return false;
 	}
-
     return true;
 }
 

+ 0 - 3
keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/default/readme.md

@@ -1,3 +0,0 @@
-# Default Layout
-
-Keymap is default 68 qwerty, 65% layout

+ 1 - 5
keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/via/config.h

@@ -1,4 +1,4 @@
-/* Copyright 2021 HorrorTroll <https://github.com/HorrorTroll>
+/* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,7 +17,3 @@
 #pragma once
 
 #define DYNAMIC_KEYMAP_LAYER_COUNT 2
-
-#ifdef RGB_MATRIX_ENABLE
-    #define VIA_QMK_RGBLIGHT_ENABLE
-#endif

+ 15 - 59
keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/via/keymap.c

@@ -1,4 +1,4 @@
-/* Copyright 2021 HorrorTroll <https://github.com/HorrorTroll>
+/* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,26 +27,10 @@
 // entirely and just use numbers.
 
 enum layer_names {
-    _BASE = 0,
-    _FN = 1
+    _BASE,
+    _FN,
 };
 
-enum user_rgb_mode {
-    RGB_MODE_ALL,
-    RGB_MODE_KEYLIGHT,
-    RGB_MODE_UNDERGLOW,
-    RGB_MODE_NONE,
-};
-
-typedef union {
-    uint32_t raw;
-    struct {
-        uint8_t rgb_mode :8;
-    };
-} user_config_t;
-
-user_config_t user_config;
-
 // enum layer_keycodes { };
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -75,13 +59,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        │    │    │    │                        │   │   │   │   │   │   │
        └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
 */
-    /*  Row:    0        1        2        3        4     5     6       7     8     9        10       11       12       13       14       15     */
+    /*  Row:    0        1        2        3        4        5        6        7        8        9        10       11       12       13       14       15     */
     [_BASE] = LAYOUT_65_ansi(
-                KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4, KC_5, KC_6,   KC_7, KC_8, KC_9,    KC_0,    KC_MINS, KC_EQL,           KC_BSPC, KC_GRV,
-                KC_TAB,           KC_Q,    KC_W,    KC_E, KC_R, KC_T,   KC_Y, KC_U, KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
-                KC_CAPS,          KC_A,    KC_S,    KC_D, KC_F, KC_G,   KC_H, KC_J, KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,           KC_PGUP,
-                         KC_LSFT, KC_Z,    KC_X,    KC_C, KC_V, KC_B,   KC_N, KC_M, KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT, KC_UP,   KC_PGDN,
-                KC_LCTL, KC_LGUI,          KC_LALT,             KC_SPC,                      KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+                KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,           KC_BSPC, KC_GRV,
+                KC_TAB,           KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+                KC_CAPS,          KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,           KC_PGUP,
+                         KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT, KC_UP,   KC_PGDN,
+                KC_LCTL, KC_LGUI,          KC_LALT,                   KC_SPC,                             KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
             ),
 
 /*
@@ -97,38 +81,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        │    │    │    │                        │   │   │App│Spd│Vad│Spi│
        └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
 */
-    /*  Row:    0        1        2        3         4        5        6        7        8        9        10       11       12       13       14     */
+    /*  Row:    0        1        2        3        4        5        6        7        8        9        10       11       12       13       14       15     */
     [_FN]   = LAYOUT_65_ansi(
-                _______, KC_F1,   KC_F2,   KC_F3,    KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,           _______, QK_BOOT,
-                _______,          _______, KC_UP,   _______,  _______, _______, _______, _______, KC_INS,  _______, KC_PSCR, _______, _______, RGB_HUI, RGB_MOD,
-                _______,          KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______,          KC_HOME,
-                         _______, _______, _______,  KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,          _______, RGB_VAI, KC_END,
-                _______, _______,          _______,                    _______,                            _______, _______, KC_APP,  RGB_SPD, RGB_VAD, RGB_SPI
+                _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,           _______, QK_BOOT,
+                _______,          _______, KC_UP,   _______, _______, _______, _______, _______, KC_INS,  _______, KC_PSCR, _______, _______, RGB_HUI, RGB_MOD,
+                _______,          KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______,          KC_HOME,
+                         _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,          _______, RGB_VAI, KC_END,
+                _______, _______,          _______,                   _______,                            _______, _______, KC_APP,  RGB_SPD, RGB_VAD, RGB_SPI
             ),
 };
 
-void keyboard_post_init_user(void) {
-    user_config.raw = eeconfig_read_user();
-    switch (user_config.rgb_mode) {
-        case RGB_MODE_ALL:
-            rgb_matrix_set_flags(LED_FLAG_ALL);
-            rgb_matrix_enable_noeeprom();
-            break;
-        case RGB_MODE_KEYLIGHT:
-            rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR);
-            rgb_matrix_set_color_all(0, 0, 0);
-            break;
-        case RGB_MODE_UNDERGLOW:
-            rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
-            rgb_matrix_set_color_all(0, 0, 0);
-            break;
-        case RGB_MODE_NONE:
-            rgb_matrix_set_flags(LED_FLAG_NONE);
-            rgb_matrix_set_color_all(0, 0, 0);
-            break;
-    }
-}
-
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     switch (keycode) {
         case RGB_TOG:
@@ -137,33 +99,27 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
                     case LED_FLAG_ALL: {
                         rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR);
                         rgb_matrix_set_color_all(0, 0, 0);
-                        user_config.rgb_mode = RGB_MODE_KEYLIGHT;
                     }
                     break;
                     case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): {
                         rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
                         rgb_matrix_set_color_all(0, 0, 0);
-                        user_config.rgb_mode = RGB_MODE_UNDERGLOW;
                     }
                     break;
                     case (LED_FLAG_UNDERGLOW): {
                         rgb_matrix_set_flags(LED_FLAG_NONE);
                         rgb_matrix_set_color_all(0, 0, 0);
-                        user_config.rgb_mode = RGB_MODE_NONE;
                     }
                     break;
                     default: {
                         rgb_matrix_set_flags(LED_FLAG_ALL);
                         rgb_matrix_enable_noeeprom();
-                        user_config.rgb_mode = RGB_MODE_ALL;
                     }
                     break;
                 }
-                eeconfig_update_user(user_config.raw);
             }
             return false;
 	}
-
     return true;
 }
 

+ 0 - 3
keyboards/horrortroll/chinese_pcb/devil68_pro/keymaps/via/readme.md

@@ -1,3 +0,0 @@
-# Default Layout with VIA
-
-Keymap is default 68 qwerty, 65% layout

+ 4 - 3
keyboards/horrortroll/chinese_pcb/devil68_pro/readme.md

@@ -1,9 +1,10 @@
 # Devil68 Pro
 
-Support Atmega32u4 keyboard.
+A 65% keyboard made by Chinese maker, which controlled by an ATMEGA32U4 chipset. The keyboard features per-key RGB, RGB underglow.
 
 * Keyboard Maintainer: [HorrorTroll](https://github.com/HorrorTroll)
-* Hardware Supported: Atmega32u4
+* Hardware Supported: ATMEGA32U4
+* Hardware Availability: Unknown
 
 Make example for this keyboard (after setting up your build environment):
 
@@ -19,6 +20,6 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
 
 Enter the bootloader in 3 ways:
 
-* **Bootmagic reset**: Hold down the key at (3,6) in the matrix (B key) and plug in the keyboard
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (Esc key) and plug in the keyboard
 * **Reset by wire**: Using a wire, 1 head to GND hole and other one to Reset pin on MCU
 * **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

+ 0 - 14
keyboards/horrortroll/chinese_pcb/readme.md

@@ -1,14 +0,0 @@
-# A folder for some Chinese PCB without source code
-
-This is a folder for collection code of Chinese PCB, where they only sold one-time limited on Taobao and no source code or contact info of Maker. Everything was re-write by using multimeter and sometimes with ISP/ICP flashing!
-
-## List for those keyboard in here:
-<details>
-  <summary>Click to expand!</summary>
-
-  | Keyboard name | MCU           | Layout        | Hotswap | LED                      | OLED | Other |
-  | ------------- | ------------- | ------------- | ------- | ------------------------ | ---- | ----- |
-  | Black E6.5    | Atmega32U4    | 68 Keys (65%) | No      | Backlight & RGB Lighting | No   | No    |
-  | Devil68 Pro   | Atmega32U4    | 68 Keys (65%) | Yes     | RGB Matrix               | No   | No    |
-  |               |               |               |         |                          |      |       |
-</details>

+ 23 - 23
keyboards/horrortroll/readme.md

@@ -1,32 +1,32 @@
-# Welcome to my keyboard folder
+# Welcome to my Keyboard Firmwares
 
-In here, you can find:
-- Chinese PCB that doesn't have source code (lost contact of Maker, can't found on Taobao, ... etc)
-- My keyboard
+## Keyboards Released by me:
+  | Keyboard name    | MCU           | Layout       | Vendor ID | Product ID | Features                                     |
+  | ---------------- | ------------- | ------------ | --------- | ---------- | -------------------------------------------- |
+  | Handwired K552   | STM32F103RCT6 | TKL          | 0x7516    | 0x5000     | Hotswap, RGB Underglow, OLED 128x32          |
+  | Paws 60          | ATMEGA32U4    | 60%          | 0x7516    | 0x5001     | Hotswap                                      |
 
-## List for my keyboard in here:
-<details>
-  <summary>Click to expand!</summary>
+## Keyboards Completed has Collaboration with me:
+  | Keyboard name    | MCU           | Layout       | Vendor ID | Product ID | Features                                     |
+  | ---------------- | ------------- | ------------ | --------- | ---------- | -------------------------------------------- |
+  | Lemon40          | ATMEGA32U4    | 40% Alice    | 0x7516    | 0x6000     | Solder, RGB Underglow, OLED 128x32           |
 
-  | Keyboard name  | MCU           | Layout        | Hotswap | LED          | OLED | Other |
-  | -------------- | ------------- | ------------- | ------- | ------------ | ---- | ----- |
-  | Handwired K552 | STM32F103RCT6 | 87 Keys (TKL) | Yes     | RGB Lighting | Yes  | No    |
-  | Paws 60        | Atmega32U4    | 68 Keys (65%) | Yes     | No           | No   | No    |
-  |                |               |               |         |              |      |       |
-</details>
+## Keyboard Rewrited by me:
+  | Keyboard name                                                                               | MCU           | Layout       | Vendor ID | Product ID | Features                                     |
+  | ------------------------------------------------------------------------------------------- | ------------- | ------------ | --------- | ---------- | -------------------------------------------- |
+  | Black E6.5                                                                                  | ATMEGA32U4    | 65%          | 0x7516    | 0x7000     | Solder, Backlight, RGB Underglow             |
+  | Devil68 Pro                                                                                 | ATMEGA32U4    | 65%          | 0x7516    | 0x7001     | Hotswap, RGB Matrix & Underglow              |
+  | [IK75](https://github.com/qmk/qmk_firmware/blob/master/keyboards/feker/ik75)                | ATMEGA32U4    | 75% Exploded | 0xF2E7    | 0x1226     | Hotswap, RGB Matrix & Underglow, 1 Encoder   |
+  | [Gas75](https://github.com/qmk/qmk_firmware/blob/master/keyboards/ml/gas75)                 | ATMEGA32U4    | 75% Exploded | 0xC0B0    | 0x6060     | Hotswap, RGB Matrix, 1 Encoder               |
+  | [GG86](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gopolar/gg86)              | ATMEGA32U4    | TKL          | 0x0007    | 0x0007     | Hotswap, RGB Matrix & Underglow, OLED 128x32 |
+  | [KB16-01 (Rev 1)](https://github.com/qmk/qmk_firmware/tree/master/keyboards/doio/kb16/rev1) | ATMEGA32U4    | TKL          | 0xD010    | 0x1601     | Hotswap, RGB Matrix, 3 Encoder, OLED 128x32  |
+  | [KB16-01 (Rev 2)](https://github.com/qmk/qmk_firmware/tree/master/keyboards/doio/kb16/rev2) | APM32F103CBT6 | TKL          | 0xD010    | 0x1601     | Hotswap, RGB Matrix, 3 Encoder, OLED 128x32  |
+  | [M63 RGB](https://github.com/qmk/qmk_firmware/blob/master/keyboards/mss_studio/m63_rgb)     | STM32F072CBU6 | 60%          | 0x4D4B    | 0x6063     | Hotswap, RGB Matrix & Underglow              |
+  | [M64 RGB](https://github.com/qmk/qmk_firmware/blob/master/keyboards/mss_studio/m64_rgb)     | STM32F072CBU6 | 60%          | 0x4D4B    | 0x6064     | Hotswap, RGB Matrix & Underglow              |
 
-## List for my collab keyboard in here:
-<details>
-  <summary>Click to expand!</summary>
-
-  | Keyboard name  | MCU           | Layout              | Hotswap | LED          | OLED | Other |
-  | -------------- | ------------- | ------------------- | ------- | ------------ | ---- | ----- |
-  | Lemon40        | Atmega32U4    | 47 Keys (40% Alice) | No      | RGB Lighting | Yes  | No    |
-  |                |               |                     |         |              |      |       |
-</details>
 
 ## Contact me if you have any problem
 
 **Discord:** HorrorTroll#0975  
 **Facebook:** https://www.facebook.com/PhamChonChe.Duc/  
-**Email:** sonicvipduc@gmail.com
+**Email:** sonicvipduc@gmail.com

+ 54 - 0
keyboards/keyboardio/model01/keymaps/pugmajere/config.h

@@ -0,0 +1,54 @@
+// Copyright 2022 Ryan Anderson <ryan@michonline.com> (@pugmajere)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define USB_MAX_POWER_CONSUMPTION 500
+
+#define RGBLIGHT_LIMIT_VAL 175
+
+#undef ENABLE_RGB_MATRIX_ALPHAS_MODS
+#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_BREATHING
+#undef ENABLE_RGB_MATRIX_BAND_SAT
+#undef ENABLE_RGB_MATRIX_BAND_VAL
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#undef ENABLE_RGB_MATRIX_CYCLE_ALL
+#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+/* #undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON */
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+/* #undef ENABLE_RGB_MATRIX_DUAL_BEACON */
+/* #undef ENABLE_RGB_MATRIX_RAINBOW_BEACON */
+/* #undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS */
+#undef ENABLE_RGB_MATRIX_RAINDROPS
+#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#undef ENABLE_RGB_MATRIX_HUE_BREATHING
+#undef ENABLE_RGB_MATRIX_HUE_PENDULUM
+#undef ENABLE_RGB_MATRIX_HUE_WAVE
+#undef ENABLE_RGB_MATRIX_PIXEL_RAIN
+#undef ENABLE_RGB_MATRIX_PIXEL_FLOW
+#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is undefd
+#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is undefd
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#undef ENABLE_RGB_MATRIX_SPLASH
+#undef ENABLE_RGB_MATRIX_MULTISPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_SPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH

+ 192 - 0
keyboards/keyboardio/model01/keymaps/pugmajere/keymap.c

@@ -0,0 +1,192 @@
+/* Copyright 2022 Ryan Anderson <ryan@michonline.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+/* layer constants */
+enum {
+    DEF = 0,
+    FUN,
+};
+
+enum custom_keycode {
+    MACRO_CTRL_PAGE_UP = SAFE_RANGE,
+    KC_MT_LCBRC,
+    KC_MT_RCBRC,
+    KC_MT_LPAR,
+    KC_MT_RPAR,
+    MACRO_KVM_1,
+    MACRO_KVM_2,
+    MACRO_KVM_3,
+    MACRO_KVM_4,
+    MACRO_KVM_TG,
+};
+
+// Work around limitations in mod-tapping
+static uint16_t space_cadet_control_timer    = 0;
+static bool     space_cadet_key_pressed_flag = false;
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[DEF] = LAYOUT(
+  QK_BOOT  , KC_1   , KC_2   , KC_3   , KC_4   , KC_5   ,                      KC_6   , KC_7   , KC_8   , KC_9   , KC_0   , MACRO_CTRL_PAGE_UP,
+  KC_GRV , KC_Q   , KC_W   , KC_E   , KC_R   , KC_T   , RGB_MOD,    MACRO_KVM_TG, KC_Y   , KC_U   , KC_I   , KC_O   , KC_P   , KC_EQL ,
+  LCTL_T(KC_PGUP), KC_A   , KC_S   , KC_D   , KC_F   , KC_G   , KC_TAB ,    KC_ENT , KC_H   , KC_J   , KC_K   , KC_L   , KC_SCLN, KC_QUOT,
+  KC_PGDN, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_ESC ,    KC_RALT, KC_N   , KC_M   , KC_COMM, KC_DOT , KC_SLSH, KC_MINS,
+                                  LCTL_T(KC_LBRC),                                 RCTL_T(KC_RBRC),
+                                            KC_BSPC,                                     KC_SPC ,
+                                          KC_MT_LCBRC,                              KC_MT_RCBRC,
+                                             KC_MT_LPAR,                           KC_MT_RPAR,
+                                                   MO(FUN),                         MO(FUN)
+  ),
+[FUN] = LAYOUT(
+  _______, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  ,                      KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11 ,
+  KC_TAB , _______, KC_MS_U, KC_WH_U, KC_BTN3, MACRO_KVM_1, RGB_TOG,    KC_MPRV, KC_MNXT, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 ,
+  KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, MACRO_KVM_2, RGB_SPI,    KC_MPLY, KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT, _______, _______,
+  KC_END , KC_PSCR, KC_INS , KC_WH_D, KC_BTN2, MACRO_KVM_4, RGB_SPD,    _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_BSLS, KC_PIPE,
+                                         _______,                                 _______,
+                                            KC_DEL ,                           KC_ENT ,
+                                               _______,                     _______,
+                                                  _______,               _______,
+                                      _______,                                        _______
+  )
+};
+
+/* template for new layouts:
+LAYOUT(
+  _______, _______, _______, _______, _______, _______,                      _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______, _______, _______, _______, _______,
+                                         _______,                                 _______,
+                                            _______,                           _______,
+                                               _______,                     _______,
+                                                  _______,               _______,
+                                      _______,                                        _______
+  )
+*/
+// clang-format on
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    if (record->event.pressed) {
+        space_cadet_key_pressed_flag = true;
+    }
+    switch (keycode) {
+        case MACRO_CTRL_PAGE_UP:
+            if (record->event.pressed) {
+                // send some data
+                SEND_STRING(SS_LCTL(SS_TAP(X_PGUP)));
+            } else {
+                // when keycode MACRO_CTRL_PAGE_UP is pressed
+            }
+            break;
+
+            // These next two cases duplicate mod-tap functionality by hand to
+            // work around the lack of support for shifted/modded keys as
+            // "tap" side of things.
+        case KC_MT_LCBRC:
+            if (record->event.pressed) {
+                space_cadet_control_timer    = timer_read();
+                space_cadet_key_pressed_flag = false;
+                register_mods(MOD_BIT(KC_LGUI));
+            } else {
+                unregister_mods(MOD_BIT(KC_LGUI));
+                if (timer_elapsed(space_cadet_control_timer) < TAPPING_TERM && !space_cadet_key_pressed_flag) {
+                    tap_code16(LSFT(KC_LBRC));
+                }
+            }
+            return false;
+            break;
+        case KC_MT_RCBRC:
+            if (record->event.pressed) {
+                space_cadet_control_timer    = timer_read();
+                space_cadet_key_pressed_flag = false;
+                register_mods(MOD_BIT(KC_LALT));
+            } else {
+                unregister_mods(MOD_BIT(KC_LALT));
+                if (timer_elapsed(space_cadet_control_timer) < TAPPING_TERM && !space_cadet_key_pressed_flag) {
+                    tap_code16(LSFT(KC_RBRC));
+                }
+            }
+            return false;
+            break;
+        case KC_MT_LPAR:
+            if (record->event.pressed) {
+                space_cadet_control_timer    = timer_read();
+                space_cadet_key_pressed_flag = false;
+                register_mods(MOD_BIT(KC_LSFT));
+            } else {
+                unregister_mods(MOD_BIT(KC_LSFT));
+                if (timer_elapsed(space_cadet_control_timer) < TAPPING_TERM && !space_cadet_key_pressed_flag) {
+                    tap_code16(LSFT(KC_9));
+                }
+            }
+            return false;
+            break;
+        case KC_MT_RPAR:
+            if (record->event.pressed) {
+                space_cadet_control_timer    = timer_read();
+                space_cadet_key_pressed_flag = false;
+                register_mods(MOD_BIT(KC_RSFT));
+            } else {
+                unregister_mods(MOD_BIT(KC_RSFT));
+                if (timer_elapsed(space_cadet_control_timer) < TAPPING_TERM && !space_cadet_key_pressed_flag) {
+                    tap_code16(LSFT(KC_0));
+                }
+            }
+            return false;
+            break;
+        case MACRO_KVM_1:
+            if (record->event.pressed) {
+                tap_code(KC_SCRL);
+                tap_code(KC_SCRL);
+                tap_code(KC_1);
+            }
+            break;
+        case MACRO_KVM_2:
+            if (record->event.pressed) {
+                tap_code(KC_SCRL);
+                tap_code(KC_SCRL);
+                tap_code(KC_2);
+            }
+            break;
+        case MACRO_KVM_3:
+            if (record->event.pressed) {
+                tap_code(KC_SCRL);
+                tap_code(KC_SCRL);
+                tap_code(KC_3);
+            }
+            break;
+        case MACRO_KVM_4:
+            if (record->event.pressed) {
+                tap_code(KC_SCRL);
+                tap_code(KC_SCRL);
+                tap_code(KC_4);
+            }
+            break;
+        case MACRO_KVM_TG:
+            if (record->event.pressed) {
+                register_code(KC_LSFT);
+                tap_code(KC_NUMLOCK);
+                tap_code(KC_NUMLOCK);
+                unregister_code(KC_LSFT);
+                tap_code(KC_LCTL);
+            }
+            break;
+    }
+    return true;
+};
+
+/* vim: set ts=2 sw=2 et: */

+ 20 - 0
keyboards/keyboardio/model01/keymaps/pugmajere/readme.md

@@ -0,0 +1,20 @@
+# pugmajere's fairly modified version of the default keymap
+
+This is fairly modified, but roughly follows the original default
+keymap in spirit.
+
+- The num lock layer is removed.
+- The "any" key is replace with RALT.
+- The thumb keys are converted into combo keys.
+- Page-Up is a combo key with LCTRL.
+- The NUMLOCK key is replaced with LCTRL-PGUP (for bouncing through
+  browser tabs)
+- Mouse scroll keys are added.
+- Some KVM control sequences are worked into a few open slots in the
+  keymap. (FN-[tgb])
+- QMK-standard debouncing is enabled.
+- A bunch of RGB Matrix modes are turned off to save space.
+
+Quite possibly something else that I'm forgetting about.
+
+

+ 1 - 0
keyboards/keyboardio/model01/keymaps/pugmajere/rules.mk

@@ -0,0 +1 @@
+DEBOUNCE_TYPE = sym_defer_pk

+ 2 - 12
keyboards/keychron/q1/config.h

@@ -37,17 +37,9 @@
 /* Disable DIP switch in matrix data */
 #define MATRIX_MASKED
 
-/* NKRO */
-#define FORCE_NKRO
-
 /* Disable RGB lighting when PC is in suspend */
 #define RGB_DISABLE_WHEN_USB_SUSPENDED
 
-/* Allow VIA to edit lighting */
-#ifdef VIA_ENABLE
-#define VIA_QMK_RGBLIGHT_ENABLE
-#endif
-
 // RGB Matrix Animation modes. Explicitly enabled
 // For full list of effects, see:
 // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
@@ -97,7 +89,5 @@
 #define ENABLE_RGB_MATRIX_SOLID_SPLASH
 #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
 
-/* Allow VIA to edit lighting */
-#ifdef VIA_ENABLE
-#define VIA_QMK_RGBLIGHT_ENABLE
-#endif
+// #define RGB_MATRIX_KEYPRESSES
+// #define RGB_MATRIX_FRAMEBUFFER_EFFECTS

+ 41 - 0
keyboards/keychron/q1/iso_encoder/config.h

@@ -0,0 +1,41 @@
+/* Copyright 2021 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D3, D2, B3, B2, B1, B0 }
+#define MATRIX_COL_PINS { D5, D4, D6, D7, B4, B5, B6, C6, C7, F7, F6, F5, F4, F1, F0 }
+
+/* DIP switch */
+#define DIP_SWITCH_MATRIX_GRID  { {0,1} }
+
+/* RGB Matrix Driver Configuration */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1010000
+#define DRIVER_ADDR_2 0b1011111
+
+/* RGB Matrix Configuration */
+#define DRIVER_1_LED_TOTAL 59
+#define DRIVER_2_LED_TOTAL 24
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+
+/* Encoder Configuration */
+#define ENCODERS_PAD_A { E6 }
+#define ENCODERS_PAD_B { B7 }
+
+/* Enable caps-lock LED */
+#define CAPS_LOCK_LED_INDEX 44

+ 105 - 0
keyboards/keychron/q1/iso_encoder/info.json

@@ -0,0 +1,105 @@
+{
+    "keyboard_name": "Keychron Q1",
+    "manufacturer": "Keychron",
+    "url": "https://github.com/Keychron",
+    "maintainer": "lalalademaxiya1",
+    "usb": {
+        "vid": "0x3434",
+        "pid": "0x0103",
+        "device_version": "1.0.2"
+    },
+    "layouts": {
+        "LAYOUT_iso_83": {
+            "layout": [
+                {"matrix":[0, 0], "x":0, "y":0},
+                {"matrix":[0, 2], "x":1.25, "y":0},
+                {"matrix":[0, 3], "x":2.25, "y":0},
+                {"matrix":[0, 4], "x":3.25, "y":0},
+                {"matrix":[0, 5], "x":4.25, "y":0},
+                {"matrix":[0, 6], "x":5.5, "y":0},
+                {"matrix":[0, 7], "x":6.5, "y":0},
+                {"matrix":[0, 8], "x":7.5, "y":0},
+                {"matrix":[0, 9], "x":8.5, "y":0},
+                {"matrix":[0,10], "x":9.75, "y":0},
+                {"matrix":[0,11], "x":10.75, "y":0},
+                {"matrix":[0,12], "x":11.75, "y":0},
+                {"matrix":[0,13], "x":12.75, "y":0},
+                {"matrix":[4,14], "x":14, "y":0},
+                {"matrix":[0,14], "x":15.25, "y":0},
+
+                {"matrix":[1, 0], "x":0, "y":1.25},
+                {"matrix":[1, 1], "x":1, "y":1.25},
+                {"matrix":[1, 2], "x":2, "y":1.25},
+                {"matrix":[1, 3], "x":3, "y":1.25},
+                {"matrix":[1, 4], "x":4, "y":1.25},
+                {"matrix":[1, 5], "x":5, "y":1.25},
+                {"matrix":[1, 6], "x":6, "y":1.25},
+                {"matrix":[1, 7], "x":7, "y":1.25},
+                {"matrix":[1, 8], "x":8, "y":1.25},
+                {"matrix":[1, 9], "x":9, "y":1.25},
+                {"matrix":[1,10], "x":10, "y":1.25},
+                {"matrix":[1,11], "x":11, "y":1.25},
+                {"matrix":[1,12], "x":12, "y":1.25},
+                {"matrix":[1,13], "x":13, "y":1.25, "w":2},
+                {"matrix":[1,14], "x":15.25, "y":1.25},
+
+                {"matrix":[2, 0], "x":0, "y":2.25, "w":1.5},
+                {"matrix":[2, 1], "x":1.5, "y":2.25},
+                {"matrix":[2, 2], "x":2.5, "y":2.25},
+                {"matrix":[2, 3], "x":3.5, "y":2.25},
+                {"matrix":[2, 4], "x":4.5, "y":2.25},
+                {"matrix":[2, 5], "x":5.5, "y":2.25},
+                {"matrix":[2, 6], "x":6.5, "y":2.25},
+                {"matrix":[2, 7], "x":7.5, "y":2.25},
+                {"matrix":[2, 8], "x":8.5, "y":2.25},
+                {"matrix":[2, 9], "x":9.5, "y":2.25},
+                {"matrix":[2,10], "x":10.5, "y":2.25},
+                {"matrix":[2,11], "x":11.5, "y":2.25},
+                {"matrix":[2,12], "x":12.5, "y":2.25},
+                {"matrix":[2,14], "x":15.25, "y":2.25},
+
+                {"matrix":[3, 0], "x":0, "y":3.25, "w":1.75},
+                {"matrix":[3, 1], "x":1.75, "y":3.25},
+                {"matrix":[3, 2], "x":2.75, "y":3.25},
+                {"matrix":[3, 3], "x":3.75, "y":3.25},
+                {"matrix":[3, 4], "x":4.75, "y":3.25},
+                {"matrix":[3, 5], "x":5.75, "y":3.25},
+                {"matrix":[3, 6], "x":6.75, "y":3.25},
+                {"matrix":[3, 7], "x":7.75, "y":3.25},
+                {"matrix":[3, 8], "x":8.75, "y":3.25},
+                {"matrix":[3, 9], "x":9.75, "y":3.25},
+                {"matrix":[3,10], "x":10.75, "y":3.25},
+                {"matrix":[3,11], "x":11.75, "y":3.25},
+                {"matrix":[3,13], "x":12.75, "y":3.25},
+                {"matrix":[2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+                {"matrix":[3,14], "x":15.25, "y":3.25},
+
+                {"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
+                {"matrix":[4, 1], "x":1.25, "y":4.25},
+                {"matrix":[4, 2], "x":2.25, "y":4.25},
+                {"matrix":[4, 3], "x":3.25, "y":4.25},
+                {"matrix":[4, 4], "x":4.25, "y":4.25},
+                {"matrix":[4, 5], "x":5.25, "y":4.25},
+                {"matrix":[4, 6], "x":6.25, "y":4.25},
+                {"matrix":[4, 7], "x":7.25, "y":4.25},
+                {"matrix":[4, 8], "x":8.25, "y":4.25},
+                {"matrix":[4, 9], "x":9.25, "y":4.25},
+                {"matrix":[4,10], "x":10.25, "y":4.25},
+                {"matrix":[4,11], "x":11.25, "y":4.25},
+                {"matrix":[4,13], "x":12.25, "y":4.25, "w":1.75},
+                {"matrix":[3,12], "x":14.25, "y":4.5},
+
+                {"matrix":[5, 0], "x":0, "y":5.25, "w":1.25},
+                {"matrix":[5, 1], "x":1.25, "y":5.25, "w":1.25},
+                {"matrix":[5, 2], "x":2.5, "y":5.25, "w":1.25},
+                {"matrix":[5, 6], "x":3.75, "y":5.25, "w":6.25},
+                {"matrix":[5,10], "x":10, "y":5.25},
+                {"matrix":[5,11], "x":11, "y":5.25},
+                {"matrix":[5,12], "x":12, "y":5.25},
+                {"matrix":[5,13], "x":13.25, "y":5.5},
+                {"matrix":[4,12], "x":14.25, "y":5.5},
+                {"matrix":[5,14], "x":15.25, "y":5.5}
+            ]
+        }
+    }
+}

+ 150 - 0
keyboards/keychron/q1/iso_encoder/iso_encoder.c

@@ -0,0 +1,150 @@
+/* Copyright 2021 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "iso_encoder.h"
+
+#ifdef RGB_MATRIX_ENABLE
+
+const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |       G location
+ *   |  |       |       B location
+ *   |  |       |       | */
+    {0, C_1,    A_1,    B_1},
+    {0, C_3,    A_3,    B_3},
+    {0, C_4,    A_4,    B_4},
+    {0, C_5,    A_5,    B_5},
+    {0, C_6,    A_6,    B_6},
+    {0, C_7,    A_7,    B_7},
+    {0, C_8,    A_8,    B_8},
+    {0, C_9,    A_9,    B_9},
+    {0, C_10,   A_10,   B_10},
+    {0, C_11,   A_11,   B_11},
+    {0, C_12,   A_12,   B_12},
+    {0, C_13,   A_13,   B_13},
+    {0, C_14,   A_14,   B_14},
+    {0, C_15,   A_15,   B_15},
+    {0, C_16,   A_16,   B_16},
+
+    {0, F_1,    D_1,    E_1},
+    {0, F_2,    D_2,    E_2},
+    {0, F_3,    D_3,    E_3},
+    {0, F_4,    D_4,    E_4},
+    {0, F_5,    D_5,    E_5},
+    {0, F_6,    D_6,    E_6},
+    {0, F_7,    D_7,    E_7},
+    {0, F_8,    D_8,    E_8},
+    {0, F_9,    D_9,    E_9},
+    {0, F_10,   D_10,   E_10},
+    {0, F_11,   D_11,   E_11},
+    {0, F_12,   D_12,   E_12},
+    {0, F_13,   D_13,   E_13},
+    {0, F_14,   D_14,   E_14},
+    {0, F_16,   D_16,   E_16},
+
+    {0, I_1,    G_1,    H_1},
+    {0, I_2,    G_2,    H_2},
+    {0, I_3,    G_3,    H_3},
+    {0, I_4,    G_4,    H_4},
+    {0, I_5,    G_5,    H_5},
+    {0, I_6,    G_6,    H_6},
+    {0, I_7,    G_7,    H_7},
+    {0, I_8,    G_8,    H_8},
+    {0, I_9,    G_9,    H_9},
+    {0, I_10,   G_10,   H_10},
+    {0, I_11,   G_11,   H_11},
+    {0, I_12,   G_12,   H_12},
+    {0, I_13,   G_13,   H_13},
+    {0, I_16,   G_16,   H_16},
+
+    {0, L_1,    J_1,    K_1},
+    {0, L_2,    J_2,    K_2},
+    {0, L_3,    J_3,    K_3},
+    {0, L_4,    J_4,    K_4},
+    {0, L_5,    J_5,    K_5},
+    {0, L_6,    J_6,    K_6},
+    {0, L_7,    J_7,    K_7},
+    {0, L_8,    J_8,    K_8},
+    {0, L_9,    J_9,    K_9},
+    {0, L_10,   J_10,   K_10},
+    {0, L_11,   J_11,   K_11},
+    {0, L_12,   J_12,   K_12},
+    {0, L_14,   J_14,   K_14},
+    {0, I_14,   G_14,   H_14},
+    {0, L_16,   J_16,   K_16},
+
+    {1, C_1,    A_1,    B_1},
+    {1, C_2,    A_2,    B_2},
+    {1, C_3,    A_3,    B_3},
+    {1, C_4,    A_4,    B_4},
+    {1, C_5,    A_5,    B_5},
+    {1, C_6,    A_6,    B_6},
+    {1, C_7,    A_7,    B_7},
+    {1, C_8,    A_8,    B_8},
+    {1, C_9,    A_9,    B_9},
+    {1, C_10,   A_10,   B_10},
+    {1, C_11,   A_11,   B_11},
+    {1, C_12,   A_12,   B_12},
+    {1, C_14,   A_14,   B_14},
+    {1, C_15,   A_15,   B_15},
+
+    {1, F_1,    D_1,    E_1},
+    {1, F_2,    D_2,    E_2},
+    {1, F_3,    D_3,    E_3},
+    {1, F_7,    D_7,    E_7},
+    {1, F_11,   D_11,   E_11},
+    {1, F_12,   D_12,   E_12},
+    {1, F_13,   D_13,   E_13},
+    {1, F_14,   D_14,   E_14},
+    {1, F_15,   D_15,   E_15},
+    {1, F_16,   D_16,   E_16}
+};
+
+#define __ NO_LED
+
+led_config_t g_led_config = {
+    {
+        // Key Matrix to LED Index
+        { 0,  __, 1,  2,  3,  4,  5,  6,  7,   8,  9, 10, 11, 12, 14 },
+        { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
+        { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 57, 43 },
+        { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 72, 56, 58 },
+        { 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 81, 71, 13 },
+        { 73, 74, 75, __, __, __, 76, __, __, __, 77, 78, 79, 80, 82 }
+    },
+    {
+        // LED Index to Physical Position
+        {0,0},  {18,0},  {33,0},  {48,0},  {62,0},  {81,0},  {95,0},  {110,0},  {125,0},  {143,0},  {158,0},  {173,0},  {187,0},  {206,0},            {224,0},
+        {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15},           {224,15},
+        {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26},                     {224,26},
+        {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38}, {187,38}, {203,32},           {224,38},
+        {2,49}, {18,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49},           {185,49}, {209,52},
+        {2,61}, {20,61}, {39,61}, {94,61},                            {147,61},                               {162,61}, {176,61}, {195,64}, {209,64}, {224,64}
+    },
+    {
+        // RGB LED Index to Flag
+        1,    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
+        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,       1,
+        9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
+        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1, 1,
+        1, 1, 1,           4,         1, 1, 1, 1, 1, 1
+    }
+};
+
+#endif // RGB_MATRIX_ENABLE

+ 19 - 0
keyboards/keychron/q1/iso_encoder/iso_encoder.h

@@ -0,0 +1,19 @@
+/* Copyright 2021 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"

+ 68 - 0
keyboards/keychron/q1/iso_encoder/keymaps/default/keymap.c

@@ -0,0 +1,68 @@
+/* Copyright 2022 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+
+enum layers{
+    MAC_BASE,
+    MAC_FN,
+    WIN_BASE,
+    WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [MAC_BASE] = LAYOUT_iso_83(
+        KC_ESC,             KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,    KC_VOLD,  KC_VOLU,  KC_DEL,   KC_MUTE,
+        KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,    KC_EQL,   KC_BSPC,            KC_PGUP,
+        KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,    KC_RBRC,                      KC_PGDN,
+        KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,    KC_NUHS,  KC_ENT,             KC_HOME,
+        KC_LSFT,  KC_NUBS,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,              KC_RSFT,  KC_UP,
+        KC_LCTL,  KC_LOPT,  KC_LCMD ,                               KC_SPC,                                 KC_RCMD,  MO(MAC_FN), KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
+
+    [MAC_FN] = LAYOUT_iso_83(
+        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,     KC_F11,   KC_F12,   _______,  _______,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,    _______,                      _______,
+        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,              _______,  _______,
+        _______,  _______,  _______,                                _______,                                _______,  _______,    _______,  _______,  _______,  _______),
+
+    [WIN_BASE] = LAYOUT_iso_83(
+        KC_ESC,             KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,     KC_F11,   KC_F12,   KC_DEL,   KC_MUTE,
+        KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,    KC_EQL,   KC_BSPC,            KC_PGUP,
+        KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,    KC_RBRC,                      KC_PGDN,
+        KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,    KC_NUHS,  KC_ENT,             KC_HOME,
+        KC_LSFT,  KC_NUBS,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,              KC_RSFT,  KC_UP,
+        KC_LCTL,  KC_LGUI,  KC_LALT,                                KC_SPC,                                 KC_RALT,  MO(WIN_FN), KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
+
+    [WIN_FN] = LAYOUT_iso_83(
+        _______,            KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,    KC_VOLD,  KC_VOLU,  _______,  _______,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,    _______,                      _______,
+        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,              _______,  _______,
+        _______,  _______,  _______,                                _______,                                _______,  _______,    _______,  _______,  _______,  _______)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+    [MAC_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+    [WIN_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+};
+#endif

+ 1 - 0
keyboards/keychron/q1/iso_encoder/keymaps/default/rules.mk

@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes

+ 78 - 0
keyboards/keychron/q1/iso_encoder/keymaps/keychron/keymap.c

@@ -0,0 +1,78 @@
+/* Copyright 2021 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+
+// clang-format off
+
+enum layers{
+    MAC_BASE,
+    MAC_FN,
+    WIN_BASE,
+    WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [MAC_BASE] = LAYOUT_iso_83(
+        KC_ESC,             KC_BRID,  KC_BRIU,  KC_MCTL,  KC_LPAD,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,    KC_VOLD,  KC_VOLU,  KC_DEL,   KC_MUTE,
+        KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,    KC_EQL,   KC_BSPC,            KC_PGUP,
+        KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,    KC_RBRC,                      KC_PGDN,
+        KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,    KC_NUHS,  KC_ENT,             KC_HOME,
+        KC_LSFT,  KC_NUBS,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,              KC_RSFT,  KC_UP,
+        KC_LCTL,  KC_LOPTN, KC_LCMMD,                               KC_SPC,                                 KC_RCMMD, MO(MAC_FN), KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
+
+    [MAC_FN] = LAYOUT_iso_83(
+        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,     KC_F11,   KC_F12,   _______,  RGB_TOG,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,    _______,                      _______,
+        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,              _______,  _______,
+        _______,  _______,  _______,                                _______,                                _______,  _______,    _______,  _______,  _______,  _______),
+
+    [WIN_BASE] = LAYOUT_iso_83(
+        KC_ESC,             KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,     KC_F11,   KC_F12,   KC_DEL,   KC_MUTE,
+        KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,    KC_EQL,   KC_BSPC,            KC_PGUP,
+        KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,    KC_RBRC,                      KC_PGDN,
+        KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,    KC_NUHS,  KC_ENT,             KC_HOME,
+        KC_LSFT,  KC_NUBS,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,              KC_RSFT,  KC_UP,
+        KC_LCTL,  KC_LGUI,  KC_LALT,                                KC_SPC,                                 KC_RALT,  MO(WIN_FN), KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
+
+    [WIN_FN] = LAYOUT_iso_83(
+        _______,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,    KC_VOLD,  KC_VOLU,  _______,  RGB_TOG,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,    _______,                      _______,
+        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,              _______,  _______,
+        _______,  _______,  _______,                                _______,                                _______,  _______,    _______,  _______,  _______,  _______)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+    [MAC_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+    [WIN_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+};
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    if (!process_record_keychron(keycode, record)) {
+        return false;
+    }
+
+    return true;
+}

+ 5 - 0
keyboards/keychron/q1/iso_encoder/keymaps/keychron/rules.mk

@@ -0,0 +1,5 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c

+ 69 - 0
keyboards/keychron/q1/iso_encoder/keymaps/via/keymap.c

@@ -0,0 +1,69 @@
+/* Copyright 2021 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+enum layers{
+    MAC_BASE,
+    MAC_FN,
+    WIN_BASE,
+    WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [MAC_BASE] = LAYOUT_iso_83(
+        KC_ESC,             KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,    KC_VOLD,  KC_VOLU,  KC_DEL,   KC_MUTE,
+        KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,    KC_EQL,   KC_BSPC,            KC_PGUP,
+        KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,    KC_RBRC,                      KC_PGDN,
+        KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,    KC_NUHS,  KC_ENT,             KC_HOME,
+        KC_LSFT,  KC_NUBS,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,              KC_RSFT,  KC_UP,
+        KC_LCTL,  KC_LOPT,  KC_LCMD ,                               KC_SPC,                                 KC_RCMD,  MO(MAC_FN), KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
+
+    [MAC_FN] = LAYOUT_iso_83(
+        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,     KC_F11,   KC_F12,   _______,  _______,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,    _______,                      _______,
+        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,              _______,  _______,
+        _______,  _______,  _______,                                _______,                                _______,  _______,    _______,  _______,  _______,  _______),
+
+    [WIN_BASE] = LAYOUT_iso_83(
+        KC_ESC,             KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,     KC_F11,   KC_F12,   KC_DEL,   KC_MUTE,
+        KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,    KC_EQL,   KC_BSPC,            KC_PGUP,
+        KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,    KC_RBRC,                      KC_PGDN,
+        KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,    KC_NUHS,  KC_ENT,             KC_HOME,
+        KC_LSFT,  KC_NUBS,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,              KC_RSFT,  KC_UP,
+        KC_LCTL,  KC_LGUI,  KC_LALT,                                KC_SPC,                                 KC_RALT,  MO(WIN_FN), KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
+
+    [WIN_FN] = LAYOUT_iso_83(
+        _______,            KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,    KC_VOLD,  KC_VOLU,  _______,  _______,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,    _______,                      _______,
+        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,            _______,
+        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,              _______,  _______,
+        _______,  _______,  _______,                                _______,                                _______,  _______,    _______,  _______,  _______,  _______)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+    [MAC_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+    [WIN_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+};
+#endif

+ 2 - 0
keyboards/keychron/q1/iso_encoder/keymaps/via/rules.mk

@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes

+ 5 - 0
keyboards/keychron/q1/iso_encoder/readme.md

@@ -0,0 +1,5 @@
+# The ISO variant of the Keychron Q1
+
+- Enables EC11 rotary encoder.
+- Turn clockwise to increase volume and turn counter-clockwise to decrease volume.
+- Press top right button to mute.

+ 25 - 0
keyboards/keychron/q1/iso_encoder/rules.mk

@@ -0,0 +1,25 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+NKRO_ENABLE = yes           # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+AUDIO_ENABLE = no           # Audio output
+ENCODER_ENABLE = yes        # Enable Encoder
+DIP_SWITCH_ENABLE = yes
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = IS31FL3733
+RAW_ENABLE = yes
+LTO_ENABLE = yes
+

+ 2 - 0
keyboards/keychron/q1/q1.h

@@ -24,4 +24,6 @@
 #    include "rev_0101.h"
 #elif defined(KEYBOARD_keychron_q1_rev_0102)
 #    include "rev_0102.h"
+#elif defined(KEYBOARD_keychron_q1_iso_encoder)
+#    include "iso_encoder.h"
 #endif