From f07841cce38d1ae63d6c41b2c067c650a7bee648 Mon Sep 17 00:00:00 2001
From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com>
Date: Fri, 10 Feb 2023 04:40:17 +0800
Subject: [Keyboard] Added JIS version for Keychron Q2 (#19491)

Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
---
 keyboards/keychron/q2/ansi/info.json               |   2 +
 keyboards/keychron/q2/ansi/rules.mk                |   6 -
 keyboards/keychron/q2/ansi_encoder/info.json       |   2 +
 keyboards/keychron/q2/ansi_encoder/rules.mk        |   6 -
 keyboards/keychron/q2/iso/info.json                |   2 +
 keyboards/keychron/q2/iso/rules.mk                 |   6 -
 keyboards/keychron/q2/iso_encoder/info.json        |   2 +
 keyboards/keychron/q2/iso_encoder/rules.mk         |   6 -
 keyboards/keychron/q2/jis/config.h                 |  27 +++++
 keyboards/keychron/q2/jis/info.json                |  94 +++++++++++++++
 keyboards/keychron/q2/jis/jis.c                    | 134 +++++++++++++++++++++
 keyboards/keychron/q2/jis/keymaps/default/keymap.c |  67 +++++++++++
 .../keychron/q2/jis/keymaps/keychron/keymap.c      |  74 ++++++++++++
 .../keychron/q2/jis/keymaps/keychron/rules.mk      |   4 +
 keyboards/keychron/q2/jis/keymaps/via/keymap.c     |  67 +++++++++++
 keyboards/keychron/q2/jis/keymaps/via/rules.mk     |   1 +
 keyboards/keychron/q2/jis/rules.mk                 |  21 ++++
 keyboards/keychron/q2/jis_encoder/config.h         |  33 +++++
 keyboards/keychron/q2/jis_encoder/info.json        |  94 +++++++++++++++
 keyboards/keychron/q2/jis_encoder/jis_encoder.c    | 134 +++++++++++++++++++++
 .../q2/jis_encoder/keymaps/default/keymap.c        |  77 ++++++++++++
 .../q2/jis_encoder/keymaps/default/rules.mk        |   1 +
 .../q2/jis_encoder/keymaps/keychron/keymap.c       |  84 +++++++++++++
 .../q2/jis_encoder/keymaps/keychron/rules.mk       |   5 +
 .../keychron/q2/jis_encoder/keymaps/via/keymap.c   |  77 ++++++++++++
 .../keychron/q2/jis_encoder/keymaps/via/rules.mk   |   2 +
 keyboards/keychron/q2/jis_encoder/rules.mk         |  22 ++++
 keyboards/keychron/q2/q2.c                         |  44 ++++++-
 keyboards/keychron/q2/readme.md                    |   4 +-
 29 files changed, 1071 insertions(+), 27 deletions(-)
 create mode 100644 keyboards/keychron/q2/jis/config.h
 create mode 100644 keyboards/keychron/q2/jis/info.json
 create mode 100644 keyboards/keychron/q2/jis/jis.c
 create mode 100644 keyboards/keychron/q2/jis/keymaps/default/keymap.c
 create mode 100644 keyboards/keychron/q2/jis/keymaps/keychron/keymap.c
 create mode 100644 keyboards/keychron/q2/jis/keymaps/keychron/rules.mk
 create mode 100644 keyboards/keychron/q2/jis/keymaps/via/keymap.c
 create mode 100644 keyboards/keychron/q2/jis/keymaps/via/rules.mk
 create mode 100644 keyboards/keychron/q2/jis/rules.mk
 create mode 100644 keyboards/keychron/q2/jis_encoder/config.h
 create mode 100644 keyboards/keychron/q2/jis_encoder/info.json
 create mode 100644 keyboards/keychron/q2/jis_encoder/jis_encoder.c
 create mode 100644 keyboards/keychron/q2/jis_encoder/keymaps/default/keymap.c
 create mode 100644 keyboards/keychron/q2/jis_encoder/keymaps/default/rules.mk
 create mode 100644 keyboards/keychron/q2/jis_encoder/keymaps/keychron/keymap.c
 create mode 100644 keyboards/keychron/q2/jis_encoder/keymaps/keychron/rules.mk
 create mode 100644 keyboards/keychron/q2/jis_encoder/keymaps/via/keymap.c
 create mode 100644 keyboards/keychron/q2/jis_encoder/keymaps/via/rules.mk
 create mode 100644 keyboards/keychron/q2/jis_encoder/rules.mk

diff --git a/keyboards/keychron/q2/ansi/info.json b/keyboards/keychron/q2/ansi/info.json
index 5992d5a69d..054786185a 100644
--- a/keyboards/keychron/q2/ansi/info.json
+++ b/keyboards/keychron/q2/ansi/info.json
@@ -8,6 +8,8 @@
         "pid": "0x0110",
         "device_version": "1.0.0"
     },
+    "processor": "STM32L432",
+    "bootloader": "stm32-dfu",
     "layouts": {
         "LAYOUT_ansi_67": {
             "layout": [
diff --git a/keyboards/keychron/q2/ansi/rules.mk b/keyboards/keychron/q2/ansi/rules.mk
index 8da17d91b3..6c675518ee 100644
--- a/keyboards/keychron/q2/ansi/rules.mk
+++ b/keyboards/keychron/q2/ansi/rules.mk
@@ -1,9 +1,3 @@
-# MCU name
-MCU = STM32L433
-
-# Bootloader selection
-BOOTLOADER = stm32-dfu
-
 # Build Options
 #   change yes to no to disable
 #
diff --git a/keyboards/keychron/q2/ansi_encoder/info.json b/keyboards/keychron/q2/ansi_encoder/info.json
index 67c4788067..f3eddd9ecb 100644
--- a/keyboards/keychron/q2/ansi_encoder/info.json
+++ b/keyboards/keychron/q2/ansi_encoder/info.json
@@ -8,6 +8,8 @@
         "pid": "0x0111",
         "device_version": "1.0.0"
     },
+    "processor": "STM32L432",
+    "bootloader": "stm32-dfu",
     "layouts": {
         "LAYOUT_ansi_67": {
             "layout": [
diff --git a/keyboards/keychron/q2/ansi_encoder/rules.mk b/keyboards/keychron/q2/ansi_encoder/rules.mk
index 8631891e0d..0e909ff6f8 100644
--- a/keyboards/keychron/q2/ansi_encoder/rules.mk
+++ b/keyboards/keychron/q2/ansi_encoder/rules.mk
@@ -1,9 +1,3 @@
-# MCU name
-MCU = STM32L433
-
-# Bootloader selection
-BOOTLOADER = stm32-dfu
-
 # Build Options
 #   change yes to no to disable
 #
diff --git a/keyboards/keychron/q2/iso/info.json b/keyboards/keychron/q2/iso/info.json
index 104b97cd23..e295fcef18 100644
--- a/keyboards/keychron/q2/iso/info.json
+++ b/keyboards/keychron/q2/iso/info.json
@@ -8,6 +8,8 @@
         "pid": "0x0112",
         "device_version": "1.0.0"
     },
+    "processor": "STM32L432",
+    "bootloader": "stm32-dfu",
     "layouts": {
         "LAYOUT_iso_68": {
             "layout": [
diff --git a/keyboards/keychron/q2/iso/rules.mk b/keyboards/keychron/q2/iso/rules.mk
index 38d48f0b27..57b7516f4c 100644
--- a/keyboards/keychron/q2/iso/rules.mk
+++ b/keyboards/keychron/q2/iso/rules.mk
@@ -1,9 +1,3 @@
-# MCU name
-MCU = STM32L433
-
-# Bootloader selection
-BOOTLOADER = stm32-dfu
-
 # Build Options
 #   change yes to no to disable
 #
diff --git a/keyboards/keychron/q2/iso_encoder/info.json b/keyboards/keychron/q2/iso_encoder/info.json
index 38ea233ea1..36184a8807 100644
--- a/keyboards/keychron/q2/iso_encoder/info.json
+++ b/keyboards/keychron/q2/iso_encoder/info.json
@@ -8,6 +8,8 @@
         "pid": "0x0113",
         "device_version": "1.0.0"
     },
+    "processor": "STM32L432",
+    "bootloader": "stm32-dfu",
     "layouts": {
         "LAYOUT_iso_68": {
             "layout": [
diff --git a/keyboards/keychron/q2/iso_encoder/rules.mk b/keyboards/keychron/q2/iso_encoder/rules.mk
index 9332d29432..987db28ad5 100644
--- a/keyboards/keychron/q2/iso_encoder/rules.mk
+++ b/keyboards/keychron/q2/iso_encoder/rules.mk
@@ -1,9 +1,3 @@
-# MCU name
-MCU = STM32L433
-
-# Bootloader selection
-BOOTLOADER = stm32-dfu
-
 # Build Options
 #   change yes to no to disable
 #
diff --git a/keyboards/keychron/q2/jis/config.h b/keyboards/keychron/q2/jis/config.h
new file mode 100644
index 0000000000..2d83933f9a
--- /dev/null
+++ b/keyboards/keychron/q2/jis/config.h
@@ -0,0 +1,27 @@
+/* Copyright 2023 @ 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
+
+/* RGB Matrix Configuration */
+#define DRIVER_1_LED_TOTAL 35
+#define DRIVER_2_LED_TOTAL 36
+#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+
+#define CKLED2001_CURRENT_TUNE { 0xC0, 0xC0, 0x5D, 0xC0, 0xC0, 0x5D, 0xC0, 0xC0, 0x5D, 0xC0, 0xC0, 0x5D }
+
+/* Enable caps-lock LED */
+#define CAPS_LOCK_LED_INDEX 30
diff --git a/keyboards/keychron/q2/jis/info.json b/keyboards/keychron/q2/jis/info.json
new file mode 100644
index 0000000000..d41bf49cb2
--- /dev/null
+++ b/keyboards/keychron/q2/jis/info.json
@@ -0,0 +1,94 @@
+{
+    "keyboard_name": "Keychron Q2",
+    "manufacturer": "Keychron",
+    "url": "https://github.com/Keychron",
+    "maintainer": "lalalademaxiya1",
+    "usb": {
+        "vid": "0x3434",
+        "pid": "0x0114",
+        "device_version": "1.0.0"
+    },
+    "processor": "STM32L432",
+    "bootloader": "stm32-dfu",
+    "layouts": {
+        "LAYOUT_jis_71": {
+            "layout": [
+                {"matrix":[0, 0], "x":0, "y":0.25},
+                {"matrix":[0, 1], "x":1, "y":0.25},
+                {"matrix":[0, 2], "x":2, "y":0.25},
+                {"matrix":[0, 3], "x":3, "y":0.25},
+                {"matrix":[0, 4], "x":4, "y":0.25},
+                {"matrix":[0, 5], "x":5, "y":0.25},
+                {"matrix":[0, 6], "x":6, "y":0.25},
+                {"matrix":[0, 7], "x":7, "y":0.25},
+                {"matrix":[0, 8], "x":8, "y":0.25},
+                {"matrix":[0, 9], "x":9, "y":0.25},
+                {"matrix":[0,10], "x":10, "y":0.25},
+                {"matrix":[0,11], "x":11, "y":0.25},
+                {"matrix":[0,12], "x":12, "y":0.25},
+                {"matrix":[0,13], "x":13, "y":0.25},
+                {"matrix":[3, 1], "x":14, "y":0.25},
+                {"matrix":[0,14], "x":15.25, "y":0},
+
+                {"matrix":[1, 0], "x":0, "y":1.25, "w":1.5},
+                {"matrix":[1, 1], "x":1.5, "y":1.25},
+                {"matrix":[1, 2], "x":2.5, "y":1.25},
+                {"matrix":[1, 3], "x":3.5, "y":1.25},
+                {"matrix":[1, 4], "x":4.5, "y":1.25},
+                {"matrix":[1, 5], "x":5.5, "y":1.25},
+                {"matrix":[1, 6], "x":6.5, "y":1.25},
+                {"matrix":[1, 7], "x":7.5, "y":1.25},
+                {"matrix":[1, 8], "x":8.5, "y":1.25},
+                {"matrix":[1, 9], "x":9.5, "y":1.25},
+                {"matrix":[1,10], "x":10.5, "y":1.25},
+                {"matrix":[1,11], "x":11.5, "y":1.25},
+                {"matrix":[1,12], "x":12.5, "y":1.25},
+                {"matrix":[1,14], "x":15.25, "y":1.25},
+
+                {"matrix":[2, 0], "x":0, "y":2.25, "w":1.75},
+                {"matrix":[2, 1], "x":1.75, "y":2.25},
+                {"matrix":[2, 2], "x":2.75, "y":2.25},
+                {"matrix":[2, 3], "x":3.75, "y":2.25},
+                {"matrix":[2, 4], "x":4.75, "y":2.25},
+                {"matrix":[2, 5], "x":5.75, "y":2.25},
+                {"matrix":[2, 6], "x":6.75, "y":2.25},
+                {"matrix":[2, 7], "x":7.75, "y":2.25},
+                {"matrix":[2, 8], "x":8.75, "y":2.25},
+                {"matrix":[2, 9], "x":9.75, "y":2.25},
+                {"matrix":[2,10], "x":10.75, "y":2.25},
+                {"matrix":[2,11], "x":11.75, "y":2.25},
+                {"matrix":[2,13], "x":12.75, "y":2.25},
+                {"matrix":[1,13], "x":13.75, "y":1.25, "w":1.25, "h":2},
+                {"matrix":[2,14], "x":15.25, "y":2.25},
+
+                {"matrix":[3, 0], "x":0, "y":3.25, "w":2.25},
+                {"matrix":[3, 2], "x":2.25, "y":3.25},
+                {"matrix":[3, 3], "x":3.25, "y":3.25},
+                {"matrix":[3, 4], "x":4.25, "y":3.25},
+                {"matrix":[3, 5], "x":5.25, "y":3.25},
+                {"matrix":[3, 6], "x":6.25, "y":3.25},
+                {"matrix":[3, 7], "x":7.25, "y":3.25},
+                {"matrix":[3, 8], "x":8.25, "y":3.25},
+                {"matrix":[3, 9], "x":9.25, "y":3.25},
+                {"matrix":[3,10], "x":10.25, "y":3.25},
+                {"matrix":[3,11], "x":11.25, "y":3.25},
+                {"matrix":[3,12], "x":12.25, "y":3.25},
+                {"matrix":[3,13], "x":13.25, "y":3.25},
+                {"matrix":[3,14], "x":14.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, "w":1.25},
+                {"matrix":[4, 3], "x":3.5, "y":4.25},
+                {"matrix":[4, 6], "x":4.5, "y":4.25, "w":4.5},
+                {"matrix":[4, 9], "x":9, "y":4.25, "w":1.25},
+                {"matrix":[4,10], "x":10.25, "y":4.25},
+                {"matrix":[4,11], "x":11.25, "y":4.25},
+                {"matrix":[4,12], "x":12.25, "y":4.25},
+                {"matrix":[4,13], "x":13.25, "y":4.25},
+                {"matrix":[2,12], "x":14.25, "y":4.25},
+                {"matrix":[4,14], "x":15.25, "y":4.25}
+            ]
+        }
+    }
+}
diff --git a/keyboards/keychron/q2/jis/jis.c b/keyboards/keychron/q2/jis/jis.c
new file mode 100644
index 0000000000..31ed1edc58
--- /dev/null
+++ b/keyboards/keychron/q2/jis/jis.c
@@ -0,0 +1,134 @@
+/* Copyright 2023 @ 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 "quantum.h"
+
+#ifdef RGB_MATRIX_ENABLE
+
+const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |       G location
+ *   |  |       |       B location
+ *   |  |       |       | */
+    {0, C_1,    A_1,    B_1},
+    {0, C_2,    A_2,    B_2},
+    {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_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},
+    {1, I_6,    G_6,    H_6},
+    {1, I_7,    G_7,    H_7},
+    {1, I_8,    G_8,    H_8},
+    {1, I_9,    G_9,    H_9},
+    {1, I_10,   G_10,   H_10},
+    {1, I_11,   G_11,   H_11},
+    {1, I_12,   G_12,   H_12},
+    {1, I_14,   G_14,   H_14},
+    {0, F_14,   D_14,   E_14},
+    {1, I_16,   G_16,   H_16},
+
+    {1, C_1,    A_1,    B_1},
+    {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_13,   A_13,   B_13},
+    {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_4,    D_4,    E_4},
+    {1, F_7,    D_7,    E_7},
+    {1, F_10,   D_10,   E_10},
+    {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, 13, 15 },
+        { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 43, 29 },
+        { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 69, 42, 44 },
+        { 45, 14, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 },
+        { 59, 60, 61, 62, __, __, 63, __, __, 64, 65, 66, 67, 68, 70 }
+    },
+    {
+        // LED Index to Physical Position
+        {0,4},  {15,4},  {29,4},  {44,4},  {59,4},  {73,4},  {88,4},  {103,4},  {117,4},  {132,4},  {146,4},  {161,4},  {176,4},  {190,4},  {205,4},  {224,0},
+        {4,19}, {22,19}, {37,19}, {51,19}, {66,19}, {81,19}, {95,19}, {110,19}, {125,19}, {139,19}, {154,19}, {168,19}, {183,19},                     {224,19},
+        {6,34}, {26,34}, {40,34}, {55,34}, {70,34}, {84,34}, {99,34}, {114,34}, {128,34}, {143,34}, {158,34}, {172,34}, {187,34}, {207,29},           {224,34},
+        {9,49},          {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {150,49}, {165,49}, {179,49}, {194,49}, {209,49},
+        {2,64}, {18,64}, {35,64}, {51,64},                   {92,64},                     {134,64}, {150,64}, {165,64}, {179,64}, {194,64}, {209,64}, {223,64},
+    },
+    {
+        // RGB LED Index to Flag
+        1, 4, 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,
+        8, 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, 1,       4,       1, 1, 1, 1, 1, 1, 1
+    }
+};
+
+#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/keychron/q2/jis/keymaps/default/keymap.c b/keyboards/keychron/q2/jis/keymaps/default/keymap.c
new file mode 100644
index 0000000000..e11a31cda5
--- /dev/null
+++ b/keyboards/keychron/q2/jis/keymaps/default/keymap.c
@@ -0,0 +1,67 @@
+/* Copyright 2023 @ 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,
+    WIN_BASE,
+    _FN1,
+    _FN2,
+    _FN3
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [MAC_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_INS,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LOPT,  KC_LCMD,  KC_LNG2,                   KC_SPC,                    KC_LNG1, KC_RCMD,  MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [WIN_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_INS,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LWIN,  KC_LALT,  KC_INT5,                   KC_SPC,                    KC_INT4, KC_RALT,  MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [_FN1] = LAYOUT_jis_71(
+        KC_GRV,  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, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN2] = LAYOUT_jis_71(
+        KC_GRV,  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_MOD,  RGB_VAI,  RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
+        _______, RGB_RMOD, RGB_VAD,  RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN3] = LAYOUT_jis_71(
+        KC_TILD, 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, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, _______, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______)
+};
diff --git a/keyboards/keychron/q2/jis/keymaps/keychron/keymap.c b/keyboards/keychron/q2/jis/keymaps/keychron/keymap.c
new file mode 100644
index 0000000000..930f461466
--- /dev/null
+++ b/keyboards/keychron/q2/jis/keymaps/keychron/keymap.c
@@ -0,0 +1,74 @@
+/* Copyright 2023 @ 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,
+    WIN_BASE,
+    _FN1,
+    _FN2,
+    _FN3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [MAC_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_INS,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2,                   KC_SPC,                    KC_LNG1, KC_RCMMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [WIN_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_INS,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LWIN,  KC_LALT,  KC_INT5,                   KC_SPC,                    KC_INT4, KC_RALT,  MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [_FN1] = LAYOUT_jis_71(
+        KC_GRV,  KC_BRID,  KC_BRIU,  KC_MCTL, KC_LPAD, 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, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN2] = LAYOUT_jis_71(
+        KC_GRV,  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_MOD,  RGB_VAI,  RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
+        _______, RGB_RMOD, RGB_VAD,  RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN3] = LAYOUT_jis_71(
+        KC_TILD, 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, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, _______, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______)
+};
+
+// clang-format on
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    if (!process_record_keychron(keycode, record)) {
+        return false;
+    }
+    return true;
+}
diff --git a/keyboards/keychron/q2/jis/keymaps/keychron/rules.mk b/keyboards/keychron/q2/jis/keymaps/keychron/rules.mk
new file mode 100644
index 0000000000..495e8907b4
--- /dev/null
+++ b/keyboards/keychron/q2/jis/keymaps/keychron/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/keyboards/keychron/q2/jis/keymaps/via/keymap.c b/keyboards/keychron/q2/jis/keymaps/via/keymap.c
new file mode 100644
index 0000000000..e11a31cda5
--- /dev/null
+++ b/keyboards/keychron/q2/jis/keymaps/via/keymap.c
@@ -0,0 +1,67 @@
+/* Copyright 2023 @ 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,
+    WIN_BASE,
+    _FN1,
+    _FN2,
+    _FN3
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [MAC_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_INS,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LOPT,  KC_LCMD,  KC_LNG2,                   KC_SPC,                    KC_LNG1, KC_RCMD,  MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [WIN_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_INS,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LWIN,  KC_LALT,  KC_INT5,                   KC_SPC,                    KC_INT4, KC_RALT,  MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [_FN1] = LAYOUT_jis_71(
+        KC_GRV,  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, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN2] = LAYOUT_jis_71(
+        KC_GRV,  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_MOD,  RGB_VAI,  RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
+        _______, RGB_RMOD, RGB_VAD,  RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN3] = LAYOUT_jis_71(
+        KC_TILD, 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, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, _______, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______)
+};
diff --git a/keyboards/keychron/q2/jis/keymaps/via/rules.mk b/keyboards/keychron/q2/jis/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/keychron/q2/jis/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/q2/jis/rules.mk b/keyboards/keychron/q2/jis/rules.mk
new file mode 100644
index 0000000000..345807d824
--- /dev/null
+++ b/keyboards/keychron/q2/jis/rules.mk
@@ -0,0 +1,21 @@
+# 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 USB N-key Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+AUDIO_ENABLE = no           # Audio output
+DIP_SWITCH_ENABLE = yes
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = CKLED2001
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = embedded_flash
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
diff --git a/keyboards/keychron/q2/jis_encoder/config.h b/keyboards/keychron/q2/jis_encoder/config.h
new file mode 100644
index 0000000000..e0ca950bc3
--- /dev/null
+++ b/keyboards/keychron/q2/jis_encoder/config.h
@@ -0,0 +1,33 @@
+/* Copyright 2023 @ 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
+
+/* RGB Matrix Configuration */
+#define DRIVER_1_LED_TOTAL 35
+#define DRIVER_2_LED_TOTAL 36
+#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+
+#define CKLED2001_CURRENT_TUNE { 0xC0, 0xC0, 0x5D, 0xC0, 0xC0, 0x5D, 0xC0, 0xC0, 0x5D, 0xC0, 0xC0, 0x5D }
+
+/* Encoder Configuration */
+#define ENCODERS_PAD_A { A10 }
+#define ENCODERS_PAD_B { B5 }
+#define ENCODER_RESOLUTION 4
+#define ENCODER_DEFAULT_POS 0x3
+
+/* Enable caps-lock LED */
+#define CAPS_LOCK_LED_INDEX 30
diff --git a/keyboards/keychron/q2/jis_encoder/info.json b/keyboards/keychron/q2/jis_encoder/info.json
new file mode 100644
index 0000000000..a0b5852b15
--- /dev/null
+++ b/keyboards/keychron/q2/jis_encoder/info.json
@@ -0,0 +1,94 @@
+{
+    "keyboard_name": "Keychron Q2",
+    "manufacturer": "Keychron",
+    "url": "https://github.com/Keychron",
+    "maintainer": "lalalademaxiya1",
+    "usb": {
+        "vid": "0x3434",
+        "pid": "0x0115",
+        "device_version": "1.0.0"
+    },
+    "processor": "STM32L432",
+    "bootloader": "stm32-dfu",
+    "layouts": {
+        "LAYOUT_jis_71": {
+            "layout": [
+                {"matrix":[0, 0], "x":0, "y":0.25},
+                {"matrix":[0, 1], "x":1, "y":0.25},
+                {"matrix":[0, 2], "x":2, "y":0.25},
+                {"matrix":[0, 3], "x":3, "y":0.25},
+                {"matrix":[0, 4], "x":4, "y":0.25},
+                {"matrix":[0, 5], "x":5, "y":0.25},
+                {"matrix":[0, 6], "x":6, "y":0.25},
+                {"matrix":[0, 7], "x":7, "y":0.25},
+                {"matrix":[0, 8], "x":8, "y":0.25},
+                {"matrix":[0, 9], "x":9, "y":0.25},
+                {"matrix":[0,10], "x":10, "y":0.25},
+                {"matrix":[0,11], "x":11, "y":0.25},
+                {"matrix":[0,12], "x":12, "y":0.25},
+                {"matrix":[0,13], "x":13, "y":0.25},
+                {"matrix":[3, 1], "x":14, "y":0.25},
+                {"matrix":[0,14], "x":15.25, "y":0},
+
+                {"matrix":[1, 0], "x":0, "y":1.25, "w":1.5},
+                {"matrix":[1, 1], "x":1.5, "y":1.25},
+                {"matrix":[1, 2], "x":2.5, "y":1.25},
+                {"matrix":[1, 3], "x":3.5, "y":1.25},
+                {"matrix":[1, 4], "x":4.5, "y":1.25},
+                {"matrix":[1, 5], "x":5.5, "y":1.25},
+                {"matrix":[1, 6], "x":6.5, "y":1.25},
+                {"matrix":[1, 7], "x":7.5, "y":1.25},
+                {"matrix":[1, 8], "x":8.5, "y":1.25},
+                {"matrix":[1, 9], "x":9.5, "y":1.25},
+                {"matrix":[1,10], "x":10.5, "y":1.25},
+                {"matrix":[1,11], "x":11.5, "y":1.25},
+                {"matrix":[1,12], "x":12.5, "y":1.25},
+                {"matrix":[1,14], "x":15.25, "y":1.25},
+
+                {"matrix":[2, 0], "x":0, "y":2.25, "w":1.75},
+                {"matrix":[2, 1], "x":1.75, "y":2.25},
+                {"matrix":[2, 2], "x":2.75, "y":2.25},
+                {"matrix":[2, 3], "x":3.75, "y":2.25},
+                {"matrix":[2, 4], "x":4.75, "y":2.25},
+                {"matrix":[2, 5], "x":5.75, "y":2.25},
+                {"matrix":[2, 6], "x":6.75, "y":2.25},
+                {"matrix":[2, 7], "x":7.75, "y":2.25},
+                {"matrix":[2, 8], "x":8.75, "y":2.25},
+                {"matrix":[2, 9], "x":9.75, "y":2.25},
+                {"matrix":[2,10], "x":10.75, "y":2.25},
+                {"matrix":[2,11], "x":11.75, "y":2.25},
+                {"matrix":[2,13], "x":12.75, "y":2.25},
+                {"matrix":[1,13], "x":13.75, "y":1.25, "w":1.25, "h":2},
+                {"matrix":[2,14], "x":15.25, "y":2.25},
+
+                {"matrix":[3, 0], "x":0, "y":3.25, "w":2.25},
+                {"matrix":[3, 2], "x":2.25, "y":3.25},
+                {"matrix":[3, 3], "x":3.25, "y":3.25},
+                {"matrix":[3, 4], "x":4.25, "y":3.25},
+                {"matrix":[3, 5], "x":5.25, "y":3.25},
+                {"matrix":[3, 6], "x":6.25, "y":3.25},
+                {"matrix":[3, 7], "x":7.25, "y":3.25},
+                {"matrix":[3, 8], "x":8.25, "y":3.25},
+                {"matrix":[3, 9], "x":9.25, "y":3.25},
+                {"matrix":[3,10], "x":10.25, "y":3.25},
+                {"matrix":[3,11], "x":11.25, "y":3.25},
+                {"matrix":[3,12], "x":12.25, "y":3.25},
+                {"matrix":[3,13], "x":13.25, "y":3.25},
+                {"matrix":[3,14], "x":14.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, "w":1.25},
+                {"matrix":[4, 3], "x":3.5, "y":4.25},
+                {"matrix":[4, 6], "x":4.5, "y":4.25, "w":4.5},
+                {"matrix":[4, 9], "x":9, "y":4.25, "w":1.25},
+                {"matrix":[4,10], "x":10.25, "y":4.25},
+                {"matrix":[4,11], "x":11.25, "y":4.25},
+                {"matrix":[4,12], "x":12.25, "y":4.25},
+                {"matrix":[4,13], "x":13.25, "y":4.25},
+                {"matrix":[2,12], "x":14.25, "y":4.25},
+                {"matrix":[4,14], "x":15.25, "y":4.25}
+            ]
+        }
+    }
+}
diff --git a/keyboards/keychron/q2/jis_encoder/jis_encoder.c b/keyboards/keychron/q2/jis_encoder/jis_encoder.c
new file mode 100644
index 0000000000..de20255e0b
--- /dev/null
+++ b/keyboards/keychron/q2/jis_encoder/jis_encoder.c
@@ -0,0 +1,134 @@
+/* Copyright 2023 @ 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 "quantum.h"
+
+#ifdef RGB_MATRIX_ENABLE
+
+const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |       G location
+ *   |  |       |       B location
+ *   |  |       |       | */
+    {0, C_1,    A_1,    B_1},
+    {0, C_2,    A_2,    B_2},
+    {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_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},
+    {1, I_6,    G_6,    H_6},
+    {1, I_7,    G_7,    H_7},
+    {1, I_8,    G_8,    H_8},
+    {1, I_9,    G_9,    H_9},
+    {1, I_10,   G_10,   H_10},
+    {1, I_11,   G_11,   H_11},
+    {1, I_12,   G_12,   H_12},
+    {1, I_14,   G_14,   H_14},
+    {0, F_14,   D_14,   E_14},
+    {1, I_16,   G_16,   H_16},
+
+    {1, C_1,    A_1,    B_1},
+    {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_13,   A_13,   B_13},
+    {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_4,    D_4,    E_4},
+    {1, F_7,    D_7,    E_7},
+    {1, F_10,   D_10,   E_10},
+    {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, 13, 15 },
+        { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 43, 29 },
+        { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 69, 42, 44 },
+        { 45, 14, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 },
+        { 59, 60, 61, 62, __, __, 63, __, __, 64, 65, 66, 67, 68, 70 },
+    },
+    {
+        // LED Index to Physical Position
+        {0,4},  {15,4},  {29,4},  {44,4},  {59,4},  {73,4},  {88,4},  {103,4},  {117,4},  {132,4},  {146,4},  {161,4},  {176,4},  {190,4},  {205,4},  {224,0},
+        {4,19}, {22,19}, {37,19}, {51,19}, {66,19}, {81,19}, {95,19}, {110,19}, {125,19}, {139,19}, {154,19}, {168,19}, {183,19},                     {224,19},
+        {6,34}, {26,34}, {40,34}, {55,34}, {70,34}, {84,34}, {99,34}, {114,34}, {128,34}, {143,34}, {158,34}, {172,34}, {187,34}, {207,29},           {224,34},
+        {9,49},          {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {150,49}, {165,49}, {179,49}, {194,49}, {209,49},
+        {2,64}, {18,64}, {35,64}, {51,64},                   {92,64},                     {134,64}, {150,64}, {165,64}, {179,64}, {194,64}, {209,64}, {223,64},
+    },
+    {
+        // RGB LED Index to Flag
+        1, 4, 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,
+        8, 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, 1,       4,       1, 1, 1, 1, 1, 1, 1,
+    }
+};
+
+#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/keychron/q2/jis_encoder/keymaps/default/keymap.c b/keyboards/keychron/q2/jis_encoder/keymaps/default/keymap.c
new file mode 100644
index 0000000000..e513ceba0d
--- /dev/null
+++ b/keyboards/keychron/q2/jis_encoder/keymaps/default/keymap.c
@@ -0,0 +1,77 @@
+/* Copyright 2023 @ 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,
+    WIN_BASE,
+    _FN1,
+    _FN2,
+    _FN3
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [MAC_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_MUTE,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LOPT,  KC_LCMD,  KC_LNG2,                   KC_SPC,                    KC_LNG1, KC_RCMD,  MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [WIN_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_MUTE,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LWIN,  KC_LALT,  KC_INT5,                   KC_SPC,                    KC_INT4, KC_RALT,  MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [_FN1] = LAYOUT_jis_71(
+        KC_GRV,  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_TOG, RGB_MOD,  RGB_VAI,  RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
+        _______, RGB_RMOD, RGB_VAD,  RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN2] = LAYOUT_jis_71(
+        KC_GRV,  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, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN3] = LAYOUT_jis_71(
+        KC_TILD, 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, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, _______, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [_FN1]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+    [_FN2]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+    [_FN3]   = { ENCODER_CCW_CW(_______, _______)}
+};
+#endif // ENCODER_MAP_ENABLE
diff --git a/keyboards/keychron/q2/jis_encoder/keymaps/default/rules.mk b/keyboards/keychron/q2/jis_encoder/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ee32568148
--- /dev/null
+++ b/keyboards/keychron/q2/jis_encoder/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keychron/q2/jis_encoder/keymaps/keychron/keymap.c b/keyboards/keychron/q2/jis_encoder/keymaps/keychron/keymap.c
new file mode 100644
index 0000000000..5a52f4ff15
--- /dev/null
+++ b/keyboards/keychron/q2/jis_encoder/keymaps/keychron/keymap.c
@@ -0,0 +1,84 @@
+/* Copyright 2023 @ 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,
+    WIN_BASE,
+    _FN1,
+    _FN2,
+    _FN3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [MAC_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_MUTE,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2,                   KC_SPC,                    KC_LNG1, KC_RCMMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [WIN_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_MUTE,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LWIN,  KC_LALT,  KC_INT5,                   KC_SPC,                    KC_INT4, KC_RALT,  MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [_FN1] = LAYOUT_jis_71(
+        KC_GRV,  KC_BRID,  KC_BRIU,  KC_MCTL, KC_LPAD, 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, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN2] = LAYOUT_jis_71(
+        KC_GRV,  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, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN3] = LAYOUT_jis_71(
+        KC_TILD, 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, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, _______, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______)
+};
+
+// clang-format on
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [_FN1]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+    [_FN2]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+    [_FN3]   = { ENCODER_CCW_CW(_______, _______)}
+};
+#endif // ENCODER_MAP_ENABLE
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    if (!process_record_keychron(keycode, record)) {
+        return false;
+    }
+    return true;
+}
diff --git a/keyboards/keychron/q2/jis_encoder/keymaps/keychron/rules.mk b/keyboards/keychron/q2/jis_encoder/keymaps/keychron/rules.mk
new file mode 100644
index 0000000000..9cf1a9b56c
--- /dev/null
+++ b/keyboards/keychron/q2/jis_encoder/keymaps/keychron/rules.mk
@@ -0,0 +1,5 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/keyboards/keychron/q2/jis_encoder/keymaps/via/keymap.c b/keyboards/keychron/q2/jis_encoder/keymaps/via/keymap.c
new file mode 100644
index 0000000000..e513ceba0d
--- /dev/null
+++ b/keyboards/keychron/q2/jis_encoder/keymaps/via/keymap.c
@@ -0,0 +1,77 @@
+/* Copyright 2023 @ 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,
+    WIN_BASE,
+    _FN1,
+    _FN2,
+    _FN3
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [MAC_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_MUTE,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LOPT,  KC_LCMD,  KC_LNG2,                   KC_SPC,                    KC_LNG1, KC_RCMD,  MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [WIN_BASE] = LAYOUT_jis_71(
+        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_INT3, KC_BSPC, KC_MUTE,
+        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_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_NUHS,  KC_ENT,           KC_HOME,
+        KC_LSFT,           KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,  KC_INT1,  KC_RSFT, KC_UP,
+        KC_LCTL, KC_LWIN,  KC_LALT,  KC_INT5,                   KC_SPC,                    KC_INT4, KC_RALT,  MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
+
+    [_FN1] = LAYOUT_jis_71(
+        KC_GRV,  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_TOG, RGB_MOD,  RGB_VAI,  RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
+        _______, RGB_RMOD, RGB_VAD,  RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN2] = LAYOUT_jis_71(
+        KC_GRV,  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, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______),
+
+    [_FN3] = LAYOUT_jis_71(
+        KC_TILD, 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, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
+        _______,           _______,  _______, _______, _______, _______, _______, _______, _______, _______,  _______,  _______,  _______, _______,
+        _______, _______,  _______,  _______,                   _______,                   _______, _______,  _______,  _______,  _______, _______, _______)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [_FN1]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+    [_FN2]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+    [_FN3]   = { ENCODER_CCW_CW(_______, _______)}
+};
+#endif // ENCODER_MAP_ENABLE
diff --git a/keyboards/keychron/q2/jis_encoder/keymaps/via/rules.mk b/keyboards/keychron/q2/jis_encoder/keymaps/via/rules.mk
new file mode 100644
index 0000000000..f1adcab005
--- /dev/null
+++ b/keyboards/keychron/q2/jis_encoder/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keychron/q2/jis_encoder/rules.mk b/keyboards/keychron/q2/jis_encoder/rules.mk
new file mode 100644
index 0000000000..5240004b8c
--- /dev/null
+++ b/keyboards/keychron/q2/jis_encoder/rules.mk
@@ -0,0 +1,22 @@
+# 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 USB 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 = CKLED2001
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = embedded_flash
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
diff --git a/keyboards/keychron/q2/q2.c b/keyboards/keychron/q2/q2.c
index 7a8edd8016..13b2238d17 100644
--- a/keyboards/keychron/q2/q2.c
+++ b/keyboards/keychron/q2/q2.c
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Keychron (https://www.keychron.com)
+/* Copyright 2023 @ 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
@@ -35,3 +35,45 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
 }
 
 #endif // DIP_SWITCH_ENABLE
+
+#if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX)
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+    if (!process_record_user(keycode, record)) { return false; }
+    switch (keycode) {
+        case RGB_TOG:
+            if (record->event.pressed) {
+                switch (rgb_matrix_get_flags()) {
+                    case LED_FLAG_ALL: {
+                        rgb_matrix_set_flags(LED_FLAG_NONE);
+                        rgb_matrix_set_color_all(0, 0, 0);
+                    } break;
+                    default: {
+                        rgb_matrix_set_flags(LED_FLAG_ALL);
+                    } break;
+                }
+            }
+            if (!rgb_matrix_is_enabled()) {
+                rgb_matrix_set_flags(LED_FLAG_ALL);
+                rgb_matrix_enable();
+            }
+            return false;
+    }
+    return true;
+}
+
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+    if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; }
+    // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue);
+
+    if (host_keyboard_led_state().caps_lock) {
+        RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 255, 255, 255);
+    } else {
+        if (!rgb_matrix_get_flags()) {
+           RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0);
+        }
+    }
+    return true;
+}
+
+#endif // CAPS_LOCK_LED_INDEX
diff --git a/keyboards/keychron/q2/readme.md b/keyboards/keychron/q2/readme.md
index 7488df99f1..60144a1079 100644
--- a/keyboards/keychron/q2/readme.md
+++ b/keyboards/keychron/q2/readme.md
@@ -8,11 +8,11 @@ A customizable 65% keyboard.
 
 Make example for this keyboard (after setting up your build environment):
 
-  make keychron/q2/ansi:default
+    make keychron/q2/ansi:default
 
 Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
 
-  make keychron/q2/ansi:default:flash
+    make keychron/q2/ansi:default:flash
 
 **Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
 
-- 
cgit v1.2.3


From e19cbe25f371e89ae1de04e71e5596625b8783f2 Mon Sep 17 00:00:00 2001
From: Katrina <62135880+PepperKats@users.noreply.github.com>
Date: Thu, 9 Feb 2023 13:43:22 -0700
Subject: [Keyboard] Doio kb38 (#19650)

---
 keyboards/doio/kb38/config.h                 |  39 ++++++++
 keyboards/doio/kb38/info.json                | 135 +++++++++++++++++++++++++++
 keyboards/doio/kb38/kb38.c                   |  69 ++++++++++++++
 keyboards/doio/kb38/keymaps/default/keymap.c |  61 ++++++++++++
 keyboards/doio/kb38/readme.md                |  24 +++++
 keyboards/doio/kb38/rgb_matrix_kb.inc        |  27 ++++++
 keyboards/doio/kb38/rules.mk                 |   3 +
 7 files changed, 358 insertions(+)
 create mode 100644 keyboards/doio/kb38/config.h
 create mode 100644 keyboards/doio/kb38/info.json
 create mode 100644 keyboards/doio/kb38/kb38.c
 create mode 100644 keyboards/doio/kb38/keymaps/default/keymap.c
 create mode 100644 keyboards/doio/kb38/readme.md
 create mode 100644 keyboards/doio/kb38/rgb_matrix_kb.inc
 create mode 100644 keyboards/doio/kb38/rules.mk

diff --git a/keyboards/doio/kb38/config.h b/keyboards/doio/kb38/config.h
new file mode 100644
index 0000000000..ba8eb14a11
--- /dev/null
+++ b/keyboards/doio/kb38/config.h
@@ -0,0 +1,39 @@
+// Copyright 2022 Katrina (@Daggette10)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+#include "config_common.h"
+
+#define RGB_DI_PIN F6
+#define RGB_MATRIX_LED_COUNT 44
+
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR
+#define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+
+#define ENCODERS_PAD_A { C7, F7, D6 }
+#define ENCODERS_PAD_B { C6, E6, D7 }
+#define ENCODER_RESOLUTIONS { 4, 4, 2 }
+
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/doio/kb38/info.json b/keyboards/doio/kb38/info.json
new file mode 100644
index 0000000000..9d75ada43e
--- /dev/null
+++ b/keyboards/doio/kb38/info.json
@@ -0,0 +1,135 @@
+{
+    "manufacturer": "Doio",
+    "keyboard_name": "doio/kb38",
+    "maintainer": "PepperKats",
+    "url":  "https://www.keebmonkey.com/products/megalodon-doio-triple-knob-38-keyboard-with-oled-screen",
+    "bootloader": "atmel-dfu",
+    "diode_direction": "COL2ROW",
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true,
+        "rgb_matrix": true,
+        "rgblight": false
+    },
+    "matrix_pins": {
+        "cols": ["F5", "F4", "F1", "F0", "B7", "B6", "B5", "B4"],
+        "rows": ["D5", "D4", "D3", "D2", "B3", "B2"]
+    },
+    "processor": "atmega32u4",
+    "usb": {
+        "device_version": "1.0.0",
+        "pid": "0x0000",
+        "vid": "0xFEED"
+    },
+    "rgb_matrix": {
+        "driver": "WS2812",
+        "layout": [
+            {"flags": 4, "matrix": [0, 0], "x":0, "y":0},
+            {"flags": 4, "matrix": [0, 1], "x":62.2, "y":0},
+            {"flags": 4, "matrix": [0, 2], "x":99.6, "y":0},
+            {"flags": 4, "matrix": [0, 3], "x":124.4, "y":0},
+            {"flags": 4, "matrix": [0, 4], "x":149.3, "y":0},
+            {"flags": 4, "matrix": [0, 5], "x":174.2, "y":0},
+            {"flags": 4, "matrix": [0, 6], "x":199.1, "y":0},
+            {"flags": 4, "matrix": [0, 7], "x":224, "y":0},
+            
+            {"flags": 4, "matrix": [1, 0], "x":0, "y":12.8},
+            {"flags": 4, "matrix": [1, 1], "x":24.9, "y":12.8},
+            {"flags": 4, "matrix": [1, 2], "x":49.8, "y":12.8},
+            {"flags": 4, "matrix": [1, 3], "x":74.6, "y":12.8},
+            {"flags": 4, "matrix": [1, 4], "x":99.6, "y":12.8},
+            {"flags": 4, "matrix": [1, 5], "x":124.4, "y":12.8},
+            {"flags": 4, "matrix": [1, 6], "x":149.3, "y":12.8},
+
+            {"flags": 4, "matrix": [2, 0], "x":0, "y":25.6},
+            {"flags": 4, "matrix": [2, 1], "x":24.9, "y":25.6},
+            {"flags": 4, "matrix": [2, 2], "x":49.8, "y":25.6},
+            {"flags": 4, "matrix": [2, 3], "x":74.6, "y":32},
+            {"flags": 4, "matrix": [2, 4], "x":90, "y":25.6},
+            {"flags": 4, "matrix": [2, 5], "x":124.4, "y":25.6},
+            {"flags": 4, "matrix": [2, 6], "x":149.3, "y":25.6},
+
+            {"flags": 4, "matrix": [3, 0], "x":0, "y":38.4},
+            {"flags": 4, "matrix": [3, 1], "x":24.9, "y":38.4},
+            {"flags": 4, "matrix": [3, 2], "x":49.8, "y":38.4},
+            {"flags": 4, "matrix": [3, 3], "x":99.6, "y":38.4},
+            {"flags": 4, "matrix": [3, 4], "x":124.4, "y":38.4},
+            {"flags": 4, "matrix": [3, 5], "x":149.3, "y":38.4},
+
+            {"flags": 4, "matrix": [4, 0], "x":0, "y":51.2},
+            {"flags": 4, "matrix": [4, 1], "x":24.9, "y":51.2},
+            {"flags": 4, "matrix": [4, 2], "x":49.8, "y":51.2},
+            {"flags": 4, "matrix": [4, 3], "x":74.6, "y":57.6},
+            {"flags": 4, "matrix": [4, 5], "x":124.4, "y":51.2},
+
+            {"flags": 4, "matrix": [5, 0], "x":12.5, "y":64},
+            {"flags": 4, "matrix": [5, 1], "x":49.8, "y":64},
+            {"flags": 4, "matrix": [5, 2], "x":99.6, "y":64},
+            {"flags": 4, "matrix": [5, 3], "x":124.4, "y":64},
+            {"flags": 4, "matrix": [5, 4], "x":149.3, "y":64},
+
+            {"flags": 2, "x":224, "y":64},
+            {"flags": 2, "x":74.6, "y":64},
+            {"flags": 2, "x":0, "y":64},
+            {"flags": 2, "x":0, "y":0},
+            {"flags": 2, "x":74.6, "y":0},
+            {"flags": 2, "x":224, "y":0}
+        ]
+    },
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                {"matrix": [0, 0], "label":"ESC", "x":0, "y":0},
+                {"matrix": [0, 1], "label":"BSPC", "x":1, "y":0},
+                {"matrix": [0, 2], "label":"RGB BACK", "x":2, "y":0},
+                {"matrix": [0, 3], "label":"RGB OFF", "x":3, "y":0},
+                {"matrix": [0, 4], "label":"RGB FORW", "x":4, "y":0},
+                {"matrix": [0, 5], "label":"MAKE", "x":5, "y":0},
+                {"matrix": [0, 6], "label":"REBOOT", "x":6, "y":0},
+                {"matrix": [0, 7], "label":"BOOTLOAD", "x":7, "y":0},
+
+                {"matrix": [1, 0], "label":"NUMLOCK", "x":0, "y":1},
+                {"matrix": [1, 1], "label":"PSLS", "x":1, "y":1},
+                {"matrix": [1, 2], "label":"PAST", "x":2, "y":1},
+                {"matrix": [1, 3], "label":"PMNS", "x":3, "y":1},
+                {"matrix": [1, 4], "label":"PAUS", "x":3, "y":1},
+                {"matrix": [1, 5], "label":"SCRL", "x":3, "y":1},
+                {"matrix": [1, 6], "label":"PSCR", "x":3, "y":1},
+
+                {"matrix": [2, 0], "label":"7", "x":0, "y":2},
+                {"matrix": [2, 1], "label":"8", "x":1, "y":2},
+                {"matrix": [2, 2], "label":"9", "x":2, "y":2},
+                {"matrix": [2, 3], "label":"PPLS", "x":3, "y":2},
+                {"matrix": [2, 4], "label":"INS", "x":3, "y":2},
+                {"matrix": [2, 5], "label":"HOME", "x":3, "y":2},
+                {"matrix": [2, 6], "label":"PGUP", "x":3, "y":2},
+
+                {"matrix": [3, 0], "label":"4", "x":0, "y":3},
+                {"matrix": [3, 1], "label":"5", "x":1, "y":3},
+                {"matrix": [3, 2], "label":"6", "x":2, "y":3},
+                {"matrix": [3, 3], "label":"END", "x":3, "y":3},
+                {"matrix": [3, 4], "label":"DEL", "x":3, "y":3},
+                {"matrix": [3, 5], "label":"PGDN", "x":3, "y":3},
+
+                {"matrix": [4, 0], "label":"1", "x":0, "y":4},
+                {"matrix": [4, 1], "label":"2", "x":1, "y":4},
+                {"matrix": [4, 2], "label":"3", "x":2, "y":4},
+                {"matrix": [4, 3], "label":"PENT", "x":3, "y":4},
+                {"matrix": [4, 5], "label":"UP", "x":3, "y":4},
+
+                {"matrix": [5, 0], "label":"0", "x":0, "y":5},
+                {"matrix": [5, 1], "label":"PDOT", "x":1, "y":5},
+                {"matrix": [5, 2], "label":"LEFT", "x":2, "y":5},
+                {"matrix": [5, 3], "label":"DOWN", "x":3, "y":5},
+                {"matrix": [5, 4], "label":"RIGHT", "x":4, "y":5},
+                {"matrix": [5, 5], "label":"KNOB_L", "x":3, "y":5},
+                {"matrix": [5, 6], "label":"KNOB_R", "x":3, "y":5},
+                {"matrix": [5, 7], "label":"KNOB_D", "x":3, "y":5}
+            ]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/doio/kb38/kb38.c b/keyboards/doio/kb38/kb38.c
new file mode 100644
index 0000000000..55a88a068b
--- /dev/null
+++ b/keyboards/doio/kb38/kb38.c
@@ -0,0 +1,69 @@
+/* Copyright 2021 Katrina (@PepperKats)
+ *
+ * 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 "quantum.h"
+
+//Display
+#ifdef OLED_ENABLE
+static void render_logo(void) {
+    static const char PROGMEM qmk_logo[] = {
+        0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
+        0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
+        0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
+    };
+
+    oled_write_P(qmk_logo, false);
+}
+
+bool oled_task_kb(void) {
+    if (!oled_task_user()) { return false; }
+    render_logo();
+    return true;
+}
+#endif
+
+//Knobs
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+    if (!encoder_update_user(index, clockwise)) {
+        return false;
+    }
+
+    if (index == 0) {
+        // Page Up/Down
+        if (clockwise) {
+            tap_code(KC_PGDN);
+        } else {
+            tap_code(KC_PGUP);
+        }
+    } else if (index == 1) {
+        // Mouse Wheel Up/Down
+        if (clockwise) {
+            tap_code(KC_MS_WH_DOWN);
+        } else {
+            tap_code(KC_MS_WH_UP);
+        }
+    } else if (index == 2) {
+        // Volume Up/Down
+        if (clockwise) {
+            tap_code(KC_VOLU);
+        } else {
+            tap_code(KC_VOLD);
+        }
+    }
+    return true;
+}
+#endif
\ No newline at end of file
diff --git a/keyboards/doio/kb38/keymaps/default/keymap.c b/keyboards/doio/kb38/keymaps/default/keymap.c
new file mode 100644
index 0000000000..2496fef083
--- /dev/null
+++ b/keyboards/doio/kb38/keymaps/default/keymap.c
@@ -0,0 +1,61 @@
+/* Copyright 2021 Katrina (@PepperKats)
+ *
+ * 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 {
+    _QWERTY,
+    _LAYERTWO
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* ┌───┐   ┌───────┐┌───┬───┬───┐┌───┬───┬───┐
+     * │ESC│   │KC_BSPC││F1 │F2 │F3 ││F4 │F5 │F6 │
+     * └───┘   └───────┘└───┴───┴───┘└───┴───┴───┘
+     * ┌───┬───┬───┬───┐┌───┬───┬───┐
+     * │NUM│ / │ * │ - ││PAS│SCR│PSC│
+     * ├───┼───┼───┼───┤├───┼───┼───│
+     * │ 7 │ 8 │ 9 │   ││INS│HOM│PGU│
+     * ├───┼───┼───│ + │├───┼───┼───│
+     * │ 4 │ 5 │ 6 │   ││END│DEL│PGD│
+     * ├───┼───┼───┼───┤└───┼───┼───┘
+     * │ 1 │ 2 │ 3 │ E │    │UP │    
+     * ├───┼───┼───│ N │┌───┼───┼───┐┌───┬───┬───┐
+     * │   0   │DEL│ T ││LFT│DWN│RHT││ O │ O │ O │
+     * └───┴───┴───┴───┘└───┴───┴───┘└───┴───┴───┘
+     */
+    [_QWERTY] = LAYOUT(
+        MO(1),            KC_BSPC,          RGB_RMOD, RGB_TOG, RGB_MOD,   KC_F1,     KC_F2,     KC_F3,
+        KC_NUM,  KC_PSLS, KC_PAST, KC_PMNS, KC_PAUS,  KC_SCRL, KC_PSCR, 
+        KC_P7,   KC_P8,   KC_P9,   KC_PPLS, KC_INS,   KC_HOME, KC_PGUP, 
+        KC_P4,   KC_P5,   KC_P6,            KC_END,   KC_DEL,  KC_PGDN, 
+        KC_P1,   KC_P2,   KC_P3,   KC_PENT,           KC_UP,
+        KC_P0,            KC_PDOT,          KC_LEFT,  KC_DOWN, KC_RGHT,  KC_HOME,    KC_END,    KC_B
+    ),
+    [_LAYERTWO] = LAYOUT(
+        _______,          KC_BSPC,          RGB_RMOD, RGB_TOG, RGB_MOD,   KC_A,   QK_REBOOT,   QK_BOOTLOADER,
+        KC_NUM,  KC_PSLS, KC_PAST, KC_PMNS, KC_PAUS,  KC_SCRL, KC_PSCR, 
+        KC_P7,   KC_P8,   KC_P9,   KC_PPLS, KC_INS,   KC_HOME, KC_PGUP, 
+        KC_P4,   KC_P5,   KC_P6,            KC_END,   KC_DEL,  KC_PGDN, 
+        KC_P1,   KC_P2,   KC_P3,   KC_PENT,           KC_UP,
+        KC_P0,            KC_PDOT,          KC_LEFT,  KC_DOWN, KC_RGHT,  KC_HOME,    KC_END,        KC_B
+    )
+};
+
+/*NOTE FOR PERSON MODIFYING KEYMAP
+The large knob press is mapped as KC_B, despite it not having one.
+I'm not quite sure why, but the only reason it can't be clicked is because the potentiometer is different.
+If you were to replace it with one that can be clicked, it would work. I shorted it and it does work.*/
\ No newline at end of file
diff --git a/keyboards/doio/kb38/readme.md b/keyboards/doio/kb38/readme.md
new file mode 100644
index 0000000000..fef8a33f8f
--- /dev/null
+++ b/keyboards/doio/kb38/readme.md
@@ -0,0 +1,24 @@
+# doio/kb38
+
+QMK for Megalodon DOIO Triple Knob 38% with OLED Screen. 
+
+* Keyboard Maintainer: [Katrina](https://github.com/PepperKats)
+* Hardware Supported: Megalodon DOIO Triple Knob 38%
+* Hardware Availability: https://www.keebmonkey.com/products/megalodon-doio-triple-knob-38-keyboard-with-oled-screen
+
+Make example for this keyboard (after setting up your build environment):
+
+    make doio/kb38:default
+
+Flashing example for this keyboard:
+
+    make doio/kb38:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Physical reset button**: Briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/doio/kb38/rgb_matrix_kb.inc b/keyboards/doio/kb38/rgb_matrix_kb.inc
new file mode 100644
index 0000000000..6e672c889d
--- /dev/null
+++ b/keyboards/doio/kb38/rgb_matrix_kb.inc
@@ -0,0 +1,27 @@
+RGB_MATRIX_EFFECT(trans)
+#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+static bool trans(effect_params_t* params) {
+    RGB_MATRIX_USE_LIMITS(led_min, led_max);
+    for (int i = 0; i < 8; i++) {
+        rgb_matrix_set_color(i, 0x00, 0x00, 0xFF);
+    }
+    for (int i = 8; i < 15; i++) {
+        rgb_matrix_set_color(i, 0xFF, 0x00, 0x92);
+    }
+    for (int i = 15; i < 28; i++) {
+        rgb_matrix_set_color(i, 0xFF, 0xFF, 0xFF);
+    }
+    for (int i = 28; i < 33; i++) {
+        rgb_matrix_set_color(i, 0xFF, 0x00, 0x92);
+    }
+    for (int i = 33; i < 38; i++) {
+        rgb_matrix_set_color(i, 0x00, 0x00, 0xFF);
+    }
+    for (int i = 38; i < 44; i++) {
+        rgb_matrix_set_color(i, 0x00, 0x00, 0xFF);
+    }
+    return rgb_matrix_check_finished_leds(led_max);
+}
+
+#endif 
\ No newline at end of file
diff --git a/keyboards/doio/kb38/rules.mk b/keyboards/doio/kb38/rules.mk
new file mode 100644
index 0000000000..a5f1063634
--- /dev/null
+++ b/keyboards/doio/kb38/rules.mk
@@ -0,0 +1,3 @@
+OLED_ENABLE = yes
+ENCODER_ENABLE = yes
+RGB_MATRIX_CUSTOM_KB = yes
\ No newline at end of file
-- 
cgit v1.2.3


From 758766820d943c83e9f3a0b92b2b47d05b03385e Mon Sep 17 00:00:00 2001
From: Andrew Kannan <andrew.kannan@klaviyo.com>
Date: Thu, 9 Feb 2023 15:55:26 -0500
Subject: Add Type-B firmware to QMK (#19764)

Co-authored-by: jack <0x6a73@protonmail.com>
---
 keyboards/cannonkeys/typeb/config.h                | 24 ++++++
 keyboards/cannonkeys/typeb/info.json               | 97 ++++++++++++++++++++++
 .../cannonkeys/typeb/keymaps/default/keymap.c      | 45 ++++++++++
 keyboards/cannonkeys/typeb/keymaps/via/keymap.c    | 61 ++++++++++++++
 keyboards/cannonkeys/typeb/keymaps/via/rules.mk    |  1 +
 keyboards/cannonkeys/typeb/readme.md               | 26 ++++++
 keyboards/cannonkeys/typeb/rules.mk                |  2 +
 7 files changed, 256 insertions(+)
 create mode 100644 keyboards/cannonkeys/typeb/config.h
 create mode 100644 keyboards/cannonkeys/typeb/info.json
 create mode 100644 keyboards/cannonkeys/typeb/keymaps/default/keymap.c
 create mode 100644 keyboards/cannonkeys/typeb/keymaps/via/keymap.c
 create mode 100644 keyboards/cannonkeys/typeb/keymaps/via/rules.mk
 create mode 100644 keyboards/cannonkeys/typeb/readme.md
 create mode 100644 keyboards/cannonkeys/typeb/rules.mk

diff --git a/keyboards/cannonkeys/typeb/config.h b/keyboards/cannonkeys/typeb/config.h
new file mode 100644
index 0000000000..582695dac6
--- /dev/null
+++ b/keyboards/cannonkeys/typeb/config.h
@@ -0,0 +1,24 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.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
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
+
diff --git a/keyboards/cannonkeys/typeb/info.json b/keyboards/cannonkeys/typeb/info.json
new file mode 100644
index 0000000000..d09eb90026
--- /dev/null
+++ b/keyboards/cannonkeys/typeb/info.json
@@ -0,0 +1,97 @@
+{
+    "keyboard_name": "Type-B",
+    "maintainer": "awkannan",
+    "manufacturer": "CannonKeys",
+    "processor": "RP2040",
+    "bootloader": "rp2040",
+    "usb": {
+        "vid": "0xCA04",
+        "pid": "0x001B",
+        "device_version": "0.0.1"
+    },
+    "url": "https://cannonkeys.com",
+    "diode_direction": "COL2ROW",
+    "matrix_pins": {
+        "cols": ["GP3", "GP2", "GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18"],
+        "rows": ["GP4", "GP5", "GP13", "GP14", "GP10"]
+    },
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true
+    },
+    "indicators": {
+        "caps_lock": "GP12",
+        "on_state": 0
+    },
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                { "matrix": [0, 0], "x": 0.0, "y": 0.0 },
+                { "matrix": [0, 1], "x": 1.0, "y": 0.0 },
+                { "matrix": [0, 2], "x": 2.0, "y": 0.0 },
+                { "matrix": [0, 3], "x": 3.0, "y": 0.0 },
+                { "matrix": [0, 4], "x": 4.0, "y": 0.0 },
+                { "matrix": [0, 5], "x": 5.0, "y": 0.0 },
+                { "matrix": [0, 6], "x": 6.0, "y": 0.0 },
+                { "matrix": [0, 7], "x": 7.0, "y": 0.0 },
+                { "matrix": [0, 8], "x": 8.0, "y": 0.0 },
+                { "matrix": [0, 9], "x": 9.0, "y": 0.0 },
+                { "matrix": [0, 10], "x": 10.0, "y": 0.0 },
+                { "matrix": [0, 11], "x": 11.0, "y": 0.0 },
+                { "matrix": [0, 12], "x": 12.0, "y": 0.0 },
+                { "matrix": [0, 13], "x": 13.0, "y": 0.0 },
+                { "matrix": [2, 12], "x": 14.0, "y": 0.0 },
+                { "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 },
+                { "matrix": [1, 1], "x": 1.5, "y": 1.0 },
+                { "matrix": [1, 2], "x": 2.5, "y": 1.0 },
+                { "matrix": [1, 3], "x": 3.5, "y": 1.0 },
+                { "matrix": [1, 4], "x": 4.5, "y": 1.0 },
+                { "matrix": [1, 5], "x": 5.5, "y": 1.0 },
+                { "matrix": [1, 6], "x": 6.5, "y": 1.0 },
+                { "matrix": [1, 7], "x": 7.5, "y": 1.0 },
+                { "matrix": [1, 8], "x": 8.5, "y": 1.0 },
+                { "matrix": [1, 9], "x": 9.5, "y": 1.0 },
+                { "matrix": [1, 10], "x": 10.5, "y": 1.0 },
+                { "matrix": [1, 11], "x": 11.5, "y": 1.0 },
+                { "matrix": [1, 12], "x": 12.5, "y": 1.0 },
+                { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1.0 },
+                { "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 },
+                { "matrix": [2, 1], "x": 1.75, "y": 2.0 },
+                { "matrix": [2, 2], "x": 2.75, "y": 2.0 },
+                { "matrix": [2, 3], "x": 3.75, "y": 2.0 },
+                { "matrix": [2, 4], "x": 4.75, "y": 2.0 },
+                { "matrix": [2, 5], "x": 5.75, "y": 2.0 },
+                { "matrix": [2, 6], "x": 6.75, "y": 2.0 },
+                { "matrix": [2, 7], "x": 7.75, "y": 2.0 },
+                { "matrix": [2, 8], "x": 8.75, "y": 2.0 },
+                { "matrix": [2, 9], "x": 9.75, "y": 2.0 },
+                { "matrix": [2, 10], "x": 10.75, "y": 2.0 },
+                { "matrix": [2, 11], "x": 11.75, "y": 2.0 },
+                { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2.0 },
+                { "matrix": [3, 0], "w": 1.25, "x": 0.0, "y": 3.0 },
+                { "matrix": [3, 1], "x": 1.25, "y": 3.0 },
+                { "matrix": [3, 2], "x": 2.25, "y": 3.0 },
+                { "matrix": [3, 3], "x": 3.25, "y": 3.0 },
+                { "matrix": [3, 4], "x": 4.25, "y": 3.0 },
+                { "matrix": [3, 5], "x": 5.25, "y": 3.0 },
+                { "matrix": [3, 6], "x": 6.25, "y": 3.0 },
+                { "matrix": [3, 7], "x": 7.25, "y": 3.0 },
+                { "matrix": [3, 8], "x": 8.25, "y": 3.0 },
+                { "matrix": [3, 9], "x": 9.25, "y": 3.0 },
+                { "matrix": [3, 10], "x": 10.25, "y": 3.0 },
+                { "matrix": [3, 11], "x": 11.25, "y": 3.0 },
+                { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3.0 },
+                { "matrix": [3, 13], "x": 14.0, "y": 3.0 },
+                { "matrix": [4, 1], "x": 1.5, "y": 4.0 },
+                { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4.0 },
+                { "matrix": [4, 6], "w": 6, "x": 4.0, "y": 4.0 },
+                { "matrix": [4, 10], "w": 1.5, "x": 10.0, "y": 4.0 },
+                { "matrix": [4, 11], "x": 11.5, "y": 4.0 }
+            ]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/cannonkeys/typeb/keymaps/default/keymap.c b/keyboards/cannonkeys/typeb/keymaps/default/keymap.c
new file mode 100644
index 0000000000..208596d9ba
--- /dev/null
+++ b/keyboards/cannonkeys/typeb/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.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
+
+
+// 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 {
+  _BASE = 0,
+  _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_BASE] = LAYOUT(
+    QK_GESC, 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_BSLS, 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_BSPC,
+    KC_LCTL, 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_LSFT, KC_BSLS, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,                 KC_M,    KC_COMM, KC_DOT,  KC_SLSH,           KC_RSFT, MO(_FN1),
+             KC_LGUI, KC_LALT,                            KC_SPC,                                          KC_RALT, KC_RCTL
+  ),
+
+  [_FN1] = LAYOUT(
+    QK_GESC, 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_UP,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, 
+             _______, _______,                            _______,                            _______, QK_BOOT
+  )
+};
diff --git a/keyboards/cannonkeys/typeb/keymaps/via/keymap.c b/keyboards/cannonkeys/typeb/keymaps/via/keymap.c
new file mode 100644
index 0000000000..43980201b9
--- /dev/null
+++ b/keyboards/cannonkeys/typeb/keymaps/via/keymap.c
@@ -0,0 +1,61 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.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
+
+
+// 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 {
+  _BASE = 0,
+  _FN1,
+  _FN2,
+  _FN3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_BASE] = LAYOUT(
+    QK_GESC, 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_BSLS, 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_BSPC,
+    KC_LCTL, 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_LSFT, KC_BSLS, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,                 KC_M,    KC_COMM, KC_DOT,  KC_SLSH,           KC_RSFT, MO(_FN1),
+             KC_LGUI, KC_LALT,                            KC_SPC,                                          KC_RALT, KC_RCTL
+  ),
+
+  [_FN1] = LAYOUT(
+    QK_GESC, 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_UP,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, 
+             _______, _______,                            _______,                            _______, QK_BOOT
+  ),
+  [_FN2] = LAYOUT(
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, 
+             _______, _______,                            _______,                            _______, _______
+  ),
+  [_FN3] = LAYOUT(
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, 
+             _______, _______,                            _______,                            _______, _______
+  )
+};
diff --git a/keyboards/cannonkeys/typeb/keymaps/via/rules.mk b/keyboards/cannonkeys/typeb/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/cannonkeys/typeb/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/typeb/readme.md b/keyboards/cannonkeys/typeb/readme.md
new file mode 100644
index 0000000000..e0fb872f38
--- /dev/null
+++ b/keyboards/cannonkeys/typeb/readme.md
@@ -0,0 +1,26 @@
+# Type-B
+
+Type-B Keyboard by bababaul
+
+* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
+* Hardware Supported: RP2040
+* Hardware Availability: [CannonKeys](https://cannonkeys.com)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+    make cannonkeys/typeb:default
+    
+Flashing example for this keyboard:
+
+    make cannonkeys/typeb:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Toggle the switch on the back of the PCB to "Recovery" and briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cannonkeys/typeb/rules.mk b/keyboards/cannonkeys/typeb/rules.mk
new file mode 100644
index 0000000000..59f8593f18
--- /dev/null
+++ b/keyboards/cannonkeys/typeb/rules.mk
@@ -0,0 +1,2 @@
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = rp2040_flash
-- 
cgit v1.2.3


From 4eb5c6803ff2cbcf6a166fd9e05636cacc2c7fdf Mon Sep 17 00:00:00 2001
From: Alabahuy <rezzaadio@gmail.com>
Date: Fri, 10 Feb 2023 03:56:17 +0700
Subject: Fix Matrix for kamigakushi (#19775)

---
 keyboards/kamigakushi/info.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/keyboards/kamigakushi/info.json b/keyboards/kamigakushi/info.json
index fc8de7bdca..9358b0a79a 100644
--- a/keyboards/kamigakushi/info.json
+++ b/keyboards/kamigakushi/info.json
@@ -112,8 +112,8 @@
                 { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
                 { "matrix": [4, 1], "x": 1.5, "y": 4 },
                 { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
-                { "matrix": [4, 3], "w": 7, "x": 4, "y": 4 },
-                { "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
+                { "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
+                { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
                 { "matrix": [4, 12], "x": 13, "y": 4 },
                 { "matrix": [4, 13], "x": 14, "y": 4 },
                 { "matrix": [4, 14], "x": 15, "y": 4 }
-- 
cgit v1.2.3


From 9c6b8fae404f4e31a898b01e47e9d53d9c0c8a45 Mon Sep 17 00:00:00 2001
From: eason <98533237+EasonQian1@users.noreply.github.com>
Date: Fri, 10 Feb 2023 04:57:31 +0800
Subject: [Keyboard] Add greatsword80 (#19746)

Co-authored-by: jack <0x6a73@protonmail.com>
---
 keyboards/eason/greatsword80/config.h              |  26 +++++
 keyboards/eason/greatsword80/info.json             | 112 +++++++++++++++++++++
 .../eason/greatsword80/keymaps/default/keymap.c    |  38 +++++++
 keyboards/eason/greatsword80/keymaps/via/keymap.c  |  56 +++++++++++
 keyboards/eason/greatsword80/keymaps/via/rules.mk  |   2 +
 keyboards/eason/greatsword80/readme.md             |  22 ++++
 keyboards/eason/greatsword80/rules.mk              |  12 +++
 7 files changed, 268 insertions(+)
 create mode 100644 keyboards/eason/greatsword80/config.h
 create mode 100644 keyboards/eason/greatsword80/info.json
 create mode 100644 keyboards/eason/greatsword80/keymaps/default/keymap.c
 create mode 100644 keyboards/eason/greatsword80/keymaps/via/keymap.c
 create mode 100644 keyboards/eason/greatsword80/keymaps/via/rules.mk
 create mode 100644 keyboards/eason/greatsword80/readme.md
 create mode 100644 keyboards/eason/greatsword80/rules.mk

diff --git a/keyboards/eason/greatsword80/config.h b/keyboards/eason/greatsword80/config.h
new file mode 100644
index 0000000000..73347f77df
--- /dev/null
+++ b/keyboards/eason/greatsword80/config.h
@@ -0,0 +1,26 @@
+/* Copyright 2023 Eason <xiaoxuxk@yeah.net>
+ *
+ * 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
+
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5, D4 }
+#define MATRIX_COL_PINS { D6, D7, B4, B5, B6, C6, C7, E2, F7, F6, F5, F4, B0, B1, B2, B3 }
+
+
+#define DIODE_DIRECTION COL2ROW
+
+#define LED_CAPS_LOCK_PIN  F0
+#define LED_PIN_ON_STATE 0
diff --git a/keyboards/eason/greatsword80/info.json b/keyboards/eason/greatsword80/info.json
new file mode 100644
index 0000000000..69e4bc7ef2
--- /dev/null
+++ b/keyboards/eason/greatsword80/info.json
@@ -0,0 +1,112 @@
+{
+    "keyboard_name": "GREATSWORD80",
+    "manufacturer": "Eason",
+    "url": "https://github.com/EasonQian1",
+    "maintainer": "Eason",
+    "usb": {
+        "vid": "0x980E",
+        "pid": "0x998F",
+        "device_version": "0.0.1"
+    },
+    "processor": "atmega32u4",
+    "bootloader": "atmel-dfu",
+    "layouts": {
+        "LAYOUT": {
+          "layout":  [
+              {"label": "K00 (D0,D6)", "matrix": [0, 0], "x": 0, "y": 0},
+              {"label": "K01 (D0,D7)", "matrix": [0, 1], "x": 1.25, "y": 0},
+              {"label": "K02 (D0,B4)", "matrix": [0, 2], "x": 2.25, "y": 0},
+              {"label": "K03 (D0,B5)", "matrix": [0, 3], "x": 3.25, "y": 0},
+              {"label": "K04 (D0,B6)", "matrix": [0, 4], "x": 4.25, "y": 0},
+              {"label": "K05 (D0,C6)", "matrix": [0, 5], "x": 5.5, "y": 0},
+              {"label": "K06 (D0,C7)", "matrix": [0, 6], "x": 6.5, "y": 0},
+              {"label": "K07 (D0,E2)", "matrix": [0, 7], "x": 7.5, "y": 0},
+              {"label": "K08 (D0,F7)", "matrix": [0, 8], "x": 8.5, "y": 0},
+              {"label": "K09 (D0,F6)", "matrix": [0, 9], "x": 9.75, "y": 0},
+              {"label": "K0A (D0,F5)", "matrix": [0, 10], "x": 10.75, "y": 0},
+              {"label": "K0B (D0,F4)", "matrix": [0, 11], "x": 11.75, "y": 0},
+              {"label": "K0C (D0,B0)", "matrix": [0, 12], "x": 12.75, "y": 0},
+              {"label": "K0D (D0,B1)", "matrix": [0, 13], "x": 14, "y": 0},
+              {"label": "K0E (D0,B2)", "matrix": [0, 14], "x": 15.5, "y": 0},
+              {"label": "K0F (D0,B3)", "matrix": [0, 15], "x": 16.5, "y": 0},
+              {"label": "K5A (D4,F5)", "matrix": [5, 10], "x": 17.5, "y": 0},
+
+              {"label": "K10 (D1,D6)", "matrix": [1, 0], "x": 0, "y": 1.25},
+              {"label": "K11 (D1,D7)", "matrix": [1, 1], "x": 1, "y": 1.25},
+              {"label": "K12 (D1,B4)", "matrix": [1, 2], "x": 2, "y": 1.25},
+              {"label": "K13 (D1,B5)", "matrix": [1, 3], "x": 3, "y": 1.25},
+              {"label": "K14 (D1,B6)", "matrix": [1, 4], "x": 4, "y": 1.25},
+              {"label": "K15 (D1,C6)", "matrix": [1, 5], "x": 5, "y": 1.25},
+              {"label": "K16 (D1,C7)", "matrix": [1, 6], "x": 6, "y": 1.25},
+              {"label": "K17 (D1,E2)", "matrix": [1, 7], "x": 7, "y": 1.25},
+              {"label": "K18 (D1,F7)", "matrix": [1, 8], "x": 8, "y": 1.25},
+              {"label": "K19 (D1,F6)", "matrix": [1, 9], "x": 9, "y": 1.25},
+              {"label": "K1A (D1,F5)", "matrix": [1, 10], "x": 10, "y": 1.25},
+              {"label": "K1B (D1,F4)", "matrix": [1, 11], "x": 11, "y": 1.25},
+              {"label": "K1C (D1,B0)", "matrix": [1, 12], "x": 12, "y": 1.25},
+              {"label": "K1D (D1,B1)", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+              {"label": "K1E (D1,B2)", "matrix": [1, 14], "x": 15.5, "y": 1.25},
+              {"label": "K1F (D1,B3)", "matrix": [1, 15], "x": 16.5, "y": 1.25},
+              {"label": "K5B (D4,F4)", "matrix": [5, 11], "x": 17.5, "y": 1.25},
+
+              {"label": "K20 (D2,D6)", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+              {"label": "K21 (D2,D7)", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+              {"label": "K22 (D2,B4)", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+              {"label": "K23 (D2,B5)", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+              {"label": "K24 (D2,B6)", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+              {"label": "K25 (D2,C6)", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+              {"label": "K26 (D2,C7)", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+              {"label": "K27 (D2,E2)", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+              {"label": "K28 (D2,F7)", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+              {"label": "K29 (D2,F6)", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+              {"label": "K2A (D2,F5)", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+              {"label": "K2B (D2,F4)", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+              {"label": "K2C (D2,B0)", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+              {"label": "K2D (D2,B1)", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+              {"label": "K2E (D2,B2)", "matrix": [2, 14], "x": 15.5, "y": 2.25},
+              {"label": "K2F (D2,B3)", "matrix": [2, 15], "x": 16.5, "y": 2.25},
+              {"label": "K5C (D4,B0)", "matrix": [5, 12], "x": 17.5, "y": 2.25},
+
+              {"label": "K30 (D3,D6)", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+              {"label": "K31 (D3,D7)", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+              {"label": "K32 (D3,B4)", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+              {"label": "K33 (D3,B5)", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+              {"label": "K34 (D3,B6)", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+              {"label": "K35 (D3,C6)", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+              {"label": "K36 (D3,C7)", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+              {"label": "K37 (D3,E2)", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+              {"label": "K38 (D3,F7)", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+              {"label": "K39 (D3,F6)", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+              {"label": "K3A (D3,F5)", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+              {"label": "K3B (D3,F4)", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+              {"label": "K3C (D3,B0)", "matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+
+              {"label": "K40 (D5,D6)", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+              {"label": "K41 (D5,D7)", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+              {"label": "K42 (D5,B4)", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+              {"label": "K43 (D5,B5)", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+              {"label": "K44 (D5,B6)", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+              {"label": "K45 (D5,C6)", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+              {"label": "K46 (D5,C7)", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+              {"label": "K47 (D5,E2)", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+              {"label": "K48 (D5,F7)", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+              {"label": "K49 (D5,F6)", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+              {"label": "K4A (D5,F5)", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+              {"label": "K4B (D5,F4)", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+              {"label": "K4C (D5,B0)", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+              {"label": "K4E (D5,B2)", "matrix": [4, 14], "x": 16.5, "y": 4.25},
+
+              {"label": "K50 (D4,D6)", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+              {"label": "K51 (D4,D7)", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+              {"label": "K52 (D4,B4)", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+              {"label": "K56 (D4,C7)", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+              {"label": "K57 (D4,E2)", "matrix": [5, 7], "x": 11, "y": 5.25, "w": 1.5},
+              {"label": "K58 (D4,F7)", "matrix": [5, 8], "x": 12.5, "y": 5.25},
+              {"label": "K59 (D4,F6)", "matrix": [5, 9], "x": 13.5, "y": 5.25, "w": 1.5},
+              {"label": "K5D (D4,B1)", "matrix": [5, 13], "x": 15.5, "y": 5.25},
+              {"label": "K5E (D4,B2)", "matrix": [5, 14], "x": 16.5, "y": 5.25},
+              {"label": "K5F (D4,B3)", "matrix": [5, 15], "x": 17.5, "y": 5.25}
+         ]
+      }
+  }
+}
diff --git a/keyboards/eason/greatsword80/keymaps/default/keymap.c b/keyboards/eason/greatsword80/keymaps/default/keymap.c
new file mode 100644
index 0000000000..dbe1c40a51
--- /dev/null
+++ b/keyboards/eason/greatsword80/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
+/* Copyright 2023 Eason <xiaoxuxk@yeah.net>
+ *
+ * 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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [0] = LAYOUT(
+      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,   MO(1),     KC_PSCR, KC_SCRL, KC_PAUS,
+      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_INS,  KC_HOME, 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_BSLS,    KC_DEL,  KC_END,  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_ENT,
+      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, KC_RGUI, KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT
+  ),
+
+      [1] = LAYOUT(
+          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+          _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+          _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______,                      _______,
+          _______, _______, _______,                            _______,                            _______, _______, _______,             _______, _______, _______
+      ),
+};
diff --git a/keyboards/eason/greatsword80/keymaps/via/keymap.c b/keyboards/eason/greatsword80/keymaps/via/keymap.c
new file mode 100644
index 0000000000..d1b6f2412b
--- /dev/null
+++ b/keyboards/eason/greatsword80/keymaps/via/keymap.c
@@ -0,0 +1,56 @@
+/* Copyright 2023 Eason <xiaoxuxk@yeah.net>
+ *
+ * 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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [0] = LAYOUT(
+        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,   MO(1),     KC_PSCR, KC_SCRL, KC_PAUS,
+        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_INS,  KC_HOME, 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_BSLS,    KC_DEL,  KC_END,  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_ENT,
+        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, KC_RGUI, KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+
+    [1] = LAYOUT(
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+        _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______,                      _______,
+        _______, _______, _______,                            _______,                            _______, _______, _______,             _______, _______, _______
+    ),
+    [2] = LAYOUT(
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                      _______,
+        _______, _______, _______,                            _______,                            _______, _______, _______,             _______, _______, _______
+    ),
+    [3] = LAYOUT(
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                      _______,
+        _______, _______, _______,                            _______,                            _______, _______, _______,             _______, _______, _______
+    ),
+
+
+};
diff --git a/keyboards/eason/greatsword80/keymaps/via/rules.mk b/keyboards/eason/greatsword80/keymaps/via/rules.mk
new file mode 100644
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/eason/greatsword80/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/eason/greatsword80/readme.md b/keyboards/eason/greatsword80/readme.md
new file mode 100644
index 0000000000..baebf15493
--- /dev/null
+++ b/keyboards/eason/greatsword80/readme.md
@@ -0,0 +1,22 @@
+# GREATSWORD80
+A customizable soldering 80% keyboard.
+
+* Keyboard Maintainer: [eason](https://github.com/EasonQian1)
+* Hardware Supported: greatsword80
+* Hardware Availability: [eason](https://github.com/EasonQian1)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make eason/greatsword80:default
+    
+Flashing example for this keyboard:
+
+    make eason/greatsword80:default:flash
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader Enter the bootloader in 3 ways:
+* **Bootmagic reset**: Hold down esc in the keyboard then replug
+* **Physical reset button**: Briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT`
diff --git a/keyboards/eason/greatsword80/rules.mk b/keyboards/eason/greatsword80/rules.mk
new file mode 100644
index 0000000000..2542628fd4
--- /dev/null
+++ b/keyboards/eason/greatsword80/rules.mk
@@ -0,0 +1,12 @@
+# 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
-- 
cgit v1.2.3


From 989f2476b6053fbb970a1560094b04b88d337891 Mon Sep 17 00:00:00 2001
From: Vino Rodrigues <366673+vinorodrigues@users.noreply.github.com>
Date: Fri, 10 Feb 2023 08:01:21 +1100
Subject: [Keyboard] Add Binepad BNR1 v2 rotary encoder (#19770)

---
 keyboards/binepad/bnr1/info.json                |  4 +---
 keyboards/binepad/bnr1/keymaps/default/rules.mk |  2 --
 keyboards/binepad/bnr1/keymaps/via/rules.mk     |  1 -
 keyboards/binepad/bnr1/readme.md                |  8 +++++++-
 keyboards/binepad/bnr1/rules.mk                 |  4 ++--
 keyboards/binepad/bnr1/v1/info.json             | 10 +++++++++-
 keyboards/binepad/bnr1/v1/rules.mk              |  4 +++-
 keyboards/binepad/bnr1/v2/config.h              |  9 +++++++++
 keyboards/binepad/bnr1/v2/info.json             | 22 ++++++++++++++++++++++
 keyboards/binepad/bnr1/v2/rules.mk              |  7 +++++++
 10 files changed, 60 insertions(+), 11 deletions(-)
 create mode 100644 keyboards/binepad/bnr1/v2/config.h
 create mode 100755 keyboards/binepad/bnr1/v2/info.json
 create mode 100755 keyboards/binepad/bnr1/v2/rules.mk

diff --git a/keyboards/binepad/bnr1/info.json b/keyboards/binepad/bnr1/info.json
index c5f1c05cce..880209f6f1 100755
--- a/keyboards/binepad/bnr1/info.json
+++ b/keyboards/binepad/bnr1/info.json
@@ -14,9 +14,7 @@
     },
     "url": "http://binepad.com",
     "usb": {
-        "vid": "0x4249",
-        "pid": "0x4231",
-        "device_version": "1.0.0"
+        "vid": "0x4249"
     },
     "community_layouts": ["ortho_1x1"],
     "layouts": {
diff --git a/keyboards/binepad/bnr1/keymaps/default/rules.mk b/keyboards/binepad/bnr1/keymaps/default/rules.mk
index 7f80bd39c6..1148b627d9 100644
--- a/keyboards/binepad/bnr1/keymaps/default/rules.mk
+++ b/keyboards/binepad/bnr1/keymaps/default/rules.mk
@@ -1,6 +1,4 @@
 # Copyright 2022 Binepad (@binpad)
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-LTO_ENABLE = yes
-
 ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/binepad/bnr1/keymaps/via/rules.mk b/keyboards/binepad/bnr1/keymaps/via/rules.mk
index 746edfaa56..254ffa32e8 100644
--- a/keyboards/binepad/bnr1/keymaps/via/rules.mk
+++ b/keyboards/binepad/bnr1/keymaps/via/rules.mk
@@ -1,7 +1,6 @@
 # Copyright 2022 Binepad (@binpad)
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-LTO_ENABLE = yes
 VIA_ENABLE = yes
 
 ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/binepad/bnr1/readme.md b/keyboards/binepad/bnr1/readme.md
index 5a8afe2be9..7acc09127b 100755
--- a/keyboards/binepad/bnr1/readme.md
+++ b/keyboards/binepad/bnr1/readme.md
@@ -3,13 +3,19 @@
 The BNR1 is a multifunction knob, which can be rotated, pressed, and rotated while pressed.
 
 * Keyboard Maintainer: [Binpad](https://github.com/binepad)
-* Hardware Supported: **BNR1** & **BNR1 R2** *("V1" ft. ATMega32u4 MCU)*
+* Hardware Supported:
+    * **BNR1** & **BNR1 R2** *("V1" ft. ATMega32u4 MCU)*
+    * **BNR1 V2** *("V2" ft. STM32F103 MCU)*
 * Hardware Availability: [Binepad.com](https://www.binepad.com/bnr1)
 
 Make example for this keyboard (after setting up your build environment):
 
     make binepad/bnr1/v1:default
 
+  ..or..
+
+    make binepad/bnr1/v2:default
+
 See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
 Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
 
diff --git a/keyboards/binepad/bnr1/rules.mk b/keyboards/binepad/bnr1/rules.mk
index b1b1126ff4..9719de29b8 100755
--- a/keyboards/binepad/bnr1/rules.mk
+++ b/keyboards/binepad/bnr1/rules.mk
@@ -1,3 +1,3 @@
-# This file intentionally left blank
+# This file is mostly left blank
 
-DEFAULT_FOLDER = binepad/bnr1/v1
+DEFAULT_FOLDER = binepad/bnr1/v2
diff --git a/keyboards/binepad/bnr1/v1/info.json b/keyboards/binepad/bnr1/v1/info.json
index 44edbf87d3..1797755549 100644
--- a/keyboards/binepad/bnr1/v1/info.json
+++ b/keyboards/binepad/bnr1/v1/info.json
@@ -2,13 +2,21 @@
     "bootloader": "atmel-dfu",
     "processor": "atmega32u4",
     "diode_direction": "COL2ROW",
+    "usb": {
+        "pid": "0x4231",
+        "device_version": "1.0.0"
+    },
     "matrix_pins": {
         "cols": ["B0"],
         "rows": ["E6"]
     },
     "encoder": {
+        "enabled": true,
         "rotary": [
-            { "pin_a": "D6", "pin_b": "D7" }
+            { 
+                "pin_a": "D6",
+                "pin_b": "D7"
+            }
         ]
     }
 }
diff --git a/keyboards/binepad/bnr1/v1/rules.mk b/keyboards/binepad/bnr1/v1/rules.mk
index 6e7633bfe0..ac022b38ca 100644
--- a/keyboards/binepad/bnr1/v1/rules.mk
+++ b/keyboards/binepad/bnr1/v1/rules.mk
@@ -1 +1,3 @@
-# This file intentionally left blank
+# This file is mostly left blank
+
+LTO_ENABLE = yes
diff --git a/keyboards/binepad/bnr1/v2/config.h b/keyboards/binepad/bnr1/v2/config.h
new file mode 100644
index 0000000000..7fbf1cfab1
--- /dev/null
+++ b/keyboards/binepad/bnr1/v2/config.h
@@ -0,0 +1,9 @@
+// Copyright 2022 BINEPAD (@binepad)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "config_common.h"
+
+#define WEAR_LEVELING_LOGICAL_SIZE 1024
+#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2)
diff --git a/keyboards/binepad/bnr1/v2/info.json b/keyboards/binepad/bnr1/v2/info.json
new file mode 100755
index 0000000000..03cee81b99
--- /dev/null
+++ b/keyboards/binepad/bnr1/v2/info.json
@@ -0,0 +1,22 @@
+{
+    "bootloader": "stm32duino",
+    "processor": "STM32F103",
+    "diode_direction": "COL2ROW",
+    "usb": {
+        "pid": "0x4241",
+        "device_version": "2.0.0"
+    },
+    "matrix_pins": {
+        "cols": ["A15"],
+        "rows": ["A8"]
+    },
+    "encoder": {
+        "enabled": true,
+        "rotary": [
+            { 
+                "pin_a": "B3", 
+                "pin_b": "B4"
+            }
+        ]
+    }
+}
diff --git a/keyboards/binepad/bnr1/v2/rules.mk b/keyboards/binepad/bnr1/v2/rules.mk
new file mode 100755
index 0000000000..a9a826d49f
--- /dev/null
+++ b/keyboards/binepad/bnr1/v2/rules.mk
@@ -0,0 +1,7 @@
+# This file only contains EFL/WL settings and enables F103 low-power mode
+
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = embedded_flash
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
-- 
cgit v1.2.3


From 40f0325af85110388626d154331d6e3d4f4077c5 Mon Sep 17 00:00:00 2001
From: QMK Bot <hello@qmk.fm>
Date: Thu, 9 Feb 2023 13:04:20 -0800
Subject: [CI] Format code according to conventions (#19794)

---
 .../eason/greatsword80/keymaps/default/keymap.c    | 76 +++++++++++-----------
 1 file changed, 38 insertions(+), 38 deletions(-)

diff --git a/keyboards/eason/greatsword80/keymaps/default/keymap.c b/keyboards/eason/greatsword80/keymaps/default/keymap.c
index dbe1c40a51..b44194c707 100644
--- a/keyboards/eason/greatsword80/keymaps/default/keymap.c
+++ b/keyboards/eason/greatsword80/keymaps/default/keymap.c
@@ -1,38 +1,38 @@
-/* Copyright 2023 Eason <xiaoxuxk@yeah.net>
- *
- * 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
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-  [0] = LAYOUT(
-      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,   MO(1),     KC_PSCR, KC_SCRL, KC_PAUS,
-      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_INS,  KC_HOME, 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_BSLS,    KC_DEL,  KC_END,  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_ENT,
-      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, KC_RGUI, KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT
-  ),
-
-      [1] = LAYOUT(
-          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
-          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
-          _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
-          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-          _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______,                      _______,
-          _______, _______, _______,                            _______,                            _______, _______, _______,             _______, _______, _______
-      ),
-};
+/* Copyright 2023 Eason <xiaoxuxk@yeah.net>
+ *
+ * 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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [0] = LAYOUT(
+      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,   MO(1),     KC_PSCR, KC_SCRL, KC_PAUS,
+      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_INS,  KC_HOME, 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_BSLS,    KC_DEL,  KC_END,  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_ENT,
+      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, KC_RGUI, KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT
+  ),
+
+      [1] = LAYOUT(
+          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+          _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______,
+          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+          _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______,                      _______,
+          _______, _______, _______,                            _______,                            _______, _______, _______,             _______, _______, _______
+      ),
+};
-- 
cgit v1.2.3


From cdaac2586164178dcf99fc2d72c5a506c99ef09a Mon Sep 17 00:00:00 2001
From: Juno Nguyen <juno.ngx@gmail.com>
Date: Fri, 10 Feb 2023 05:07:00 +0800
Subject: [Keymap] junonum: community keymap improvement (#19727)

Co-authored-by: Minh-tri Nguyen <mtngx@PigeonMac.local>
Co-authored-by: Joel Challis <git@zvecr.com>
---
 layouts/community/ortho_4x12/junonum/keymap.c | 293 ++++++++++++++------------
 layouts/community/ortho_4x12/junonum/rules.mk |  10 +-
 2 files changed, 163 insertions(+), 140 deletions(-)

diff --git a/layouts/community/ortho_4x12/junonum/keymap.c b/layouts/community/ortho_4x12/junonum/keymap.c
index 416949aecc..311a94d7ee 100644
--- a/layouts/community/ortho_4x12/junonum/keymap.c
+++ b/layouts/community/ortho_4x12/junonum/keymap.c
@@ -1,5 +1,24 @@
+/* Copyright 2023 Juno Nguyen <juno.ngx@gmail.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 "muse.h"
+
+#ifdef AUDIO_ENABLE
+#    include "muse.h"
+#endif
 
 enum planck_layers {
     _QWERTY,
@@ -120,39 +139,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 };
 
 #ifdef AUDIO_ENABLE
-float plover_song[][2]    = SONG(PLOVER_SOUND);
-float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
-
-float caps_song_on[][2]  = SONG(NUM_LOCK_ON_SOUND);
-float caps_song_off[][2] = SONG(SCROLL_LOCK_ON_SOUND);
-
-// Custom songs for DPAD layer status
-float dpad_song_on[][2] = {
-	HD_NOTE(_A4), HD_NOTE(_A4), HD_NOTE(_A4),
-	QD_NOTE(_F4), QD_NOTE(_C5), HD_NOTE(_A4),
-	QD_NOTE(_F4),  QD_NOTE(_C5), WD_NOTE(_A4)
-};
-
-float dpad_song_off[][2] = {
-	ED_NOTE(_C6), ED_NOTE(_C6),
-	ED_NOTE(_C6), ED_NOTE(_C6),
-	W__NOTE(_REST), QD_NOTE(_GS5),
-	QD_NOTE(_AS5), Q__NOTE(_C6),
-	Q__NOTE(_AS5), Q__NOTE(_C6)
-};
+    float plover_song[][2]    = SONG(PLOVER_SOUND);
+    float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+
+    float caps_song_on[][2]  = SONG(NUM_LOCK_ON_SOUND);
+    float caps_song_off[][2] = SONG(SCROLL_LOCK_ON_SOUND);
+
+    // Custom songs for DPAD layer status
+    float dpad_song_on[][2] = {
+        HD_NOTE(_A4), HD_NOTE(_A4), HD_NOTE(_A4),
+        QD_NOTE(_F4), QD_NOTE(_C5), HD_NOTE(_A4),
+        QD_NOTE(_F4),  QD_NOTE(_C5), WD_NOTE(_A4)
+    };
+
+    float dpad_song_off[][2] = {
+        ED_NOTE(_C6), ED_NOTE(_C6),
+        ED_NOTE(_C6), ED_NOTE(_C6),
+        W__NOTE(_REST), QD_NOTE(_GS5),
+        QD_NOTE(_AS5), Q__NOTE(_C6),
+        Q__NOTE(_AS5), Q__NOTE(_C6)
+    };
 #endif
 
-#ifndef BACKLIGHT_ENABLE
 layer_state_t layer_state_set_user(layer_state_t state) {
-    return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-}
-
-#else
-
-layer_state_t layer_state_set_user(layer_state_t state) {
-    // LED control, lighting up when Fn layer is activated
     state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-    switch (get_highest_layer(state)) {
+#   ifdef BACKLIGHT_ENABLE
+        // LED control, lighting up when Fn layer is activated
+        switch (get_highest_layer(state)) {
         case _QWERTY:
             backlight_set(0);
             break;
@@ -162,112 +175,111 @@ layer_state_t layer_state_set_user(layer_state_t state) {
         case _DPAD:
             backlight_set(3);
             break;
-    }
+        }
+#   endif
+
     return state;
 }
 
-#endif
-
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     switch (keycode) {
-        case QWERTY:
-            if (record->event.pressed) {
-                print("mode just switched to qwerty and this is a huge string\n");
-                set_single_persistent_default_layer(_QWERTY);
-            }
-            return false;
-            break;
-        case COLEMAK:
-            if (record->event.pressed) {
-                set_single_persistent_default_layer(_COLEMAK);
-            }
-            return false;
-            break;
-        case DVORAK:
-            if (record->event.pressed) {
-                set_single_persistent_default_layer(_DVORAK);
-            }
-            return false;
-            break;
-        case BACKLIT:
-            if (record->event.pressed) {
-                register_code(KC_RSFT);
-#ifdef BACKLIGHT_ENABLE
+    case QWERTY:
+        if (record->event.pressed) {
+            print("mode just switched to qwerty and this is a huge string\n");
+            set_single_persistent_default_layer(_QWERTY);
+        }
+        return false;
+        break;
+    case COLEMAK:
+        if (record->event.pressed) {
+            set_single_persistent_default_layer(_COLEMAK);
+        }
+        return false;
+        break;
+    case DVORAK:
+        if (record->event.pressed) {
+            set_single_persistent_default_layer(_DVORAK);
+        }
+        return false;
+        break;
+    case BACKLIT:
+        if (record->event.pressed) {
+            register_code(KC_RSFT);
+#           ifdef BACKLIGHT_ENABLE
                 backlight_step();
-#endif
-#ifdef KEYBOARD_planck_rev5
+#           endif
+#           ifdef KEYBOARD_planck_rev5
                 writePinLow(E6);
-#endif
-            } else {
-                unregister_code(KC_RSFT);
-#ifdef KEYBOARD_planck_rev5
+#           endif
+        } else {
+            unregister_code(KC_RSFT);
+#           ifdef KEYBOARD_planck_rev5
                 writePinHigh(E6);
-#endif
-            }
-            return false;
-            break;
-        case PLOVER:
-            if (record->event.pressed) {
-#ifdef AUDIO_ENABLE
+#           endif
+        }
+        return false;
+        break;
+    case PLOVER:
+        if (record->event.pressed) {
+#           ifdef AUDIO_ENABLE
                 stop_all_notes();
                 PLAY_SONG(plover_song);
-#endif
-                layer_off(_RAISE);
-                layer_off(_LOWER);
-                layer_off(_ADJUST);
-                layer_on(_PLOVER);
-                if (!eeconfig_is_enabled()) {
-                    eeconfig_init();
-                }
-                keymap_config.raw  = eeconfig_read_keymap();
-                keymap_config.nkro = 1;
-                eeconfig_update_keymap(keymap_config.raw);
+#           endif
+            layer_off(_RAISE);
+            layer_off(_LOWER);
+            layer_off(_ADJUST);
+            layer_on(_PLOVER);
+            if (!eeconfig_is_enabled()) {
+                eeconfig_init();
             }
-            return false;
-            break;
-        case EXT_PLV:
-            if (record->event.pressed) {
-#ifdef AUDIO_ENABLE
+            keymap_config.raw  = eeconfig_read_keymap();
+            keymap_config.nkro = 1;
+            eeconfig_update_keymap(keymap_config.raw);
+        }
+        return false;
+        break;
+    case EXT_PLV:
+        if (record->event.pressed) {
+#           ifdef AUDIO_ENABLE
                 PLAY_SONG(plover_gb_song);
-#endif
-                layer_off(_PLOVER);
-            }
-            return false;
-            break;
-
-            // Play audio upon switching Caps Lock and custom layers
+#           endif
+            layer_off(_PLOVER);
+        }
+        return false;
+        break;
 
-        case KC_CAPS:
-            if (record->event.pressed) {
-#ifdef AUDIO_ENABLE
+        // Play audio upon switching Caps Lock and custom layers
+    case KC_CAPS:
+        if (record->event.pressed) {
+#           ifdef AUDIO_ENABLE
                 if (host_keyboard_led_state().caps_lock) {
                     PLAY_SONG(caps_song_off);
                 } else {
                     PLAY_SONG(caps_song_on);
                 }
-#endif
-            }
-            return true;
+#           endif
+        }
+        return true;
 
-        case DP_ON:
-            if (record->event.pressed) {
-            } else {  // only actived upon key release
-#ifdef AUDIO_ENABLE
+    case DP_ON:
+        if (record->event.pressed) {
+        } else {  // only actived upon key release
+#           ifdef AUDIO_ENABLE
                 PLAY_SONG(dpad_song_on);
-#endif
+#           endif
 
-                layer_off(_FN1);
-                layer_on(_DPAD);
-            }
+            layer_off(_FN1);
+            layer_on(_DPAD);
+        }
 
-        case DP_OFF:
-            if (record->event.pressed) {
-#ifdef AUDIO_ENABLE
+    case DP_OFF:
+        if (record->event.pressed) {
+#           ifdef AUDIO_ENABLE
                 PLAY_SONG(dpad_song_off);
-#endif
+#           endif
 
-                layer_off(_DPAD);
-            }
+            layer_off(_DPAD);
+        }
     }
     return true;
 }
@@ -305,28 +317,28 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
 
 bool dip_switch_update_user(uint8_t index, bool active) {
     switch (index) {
-        case 0:
-            if (active) {
-#ifdef AUDIO_ENABLE
+    case 0:
+        if (active) {
+#           ifdef AUDIO_ENABLE
                 PLAY_SONG(plover_song);
-#endif
-                layer_on(_ADJUST);
-            } else {
-#ifdef AUDIO_ENABLE
+#           endif
+            layer_on(_ADJUST);
+        } else {
+#           ifdef AUDIO_ENABLE
                 PLAY_SONG(plover_gb_song);
-#endif
-                layer_off(_ADJUST);
-            }
-            break;
-        case 1:
-            if (active) {
-                muse_mode = true;
-            } else {
-                muse_mode = false;
-#ifdef AUDIO_ENABLE
+#           endif
+            layer_off(_ADJUST);
+        }
+        break;
+    case 1:
+        if (active) {
+            muse_mode = true;
+        } else {
+            muse_mode = false;
+#           ifdef AUDIO_ENABLE
                 stop_all_notes();
-#endif
-            }
+#           endif
+        }
     }
     return true;
 }
@@ -349,10 +361,19 @@ void matrix_scan_user(void) {
 
 bool music_mask_user(uint16_t keycode) {
     switch (keycode) {
-        case RAISE:
-        case LOWER:
-            return false;
-        default:
-            return true;
+    case RAISE:
+    case LOWER:
+        return false;
+    default:
+        return true;
     }
 }
+
+#ifdef RGBLIGHT_ENABLE
+    void keyboard_post_init_user(void) {
+        rgblight_enable_noeeprom(); // Enables RGB, without saving settings
+        // Vibrant cyan
+        rgblight_sethsv_noeeprom(HSV_SPRINGGREEN);
+        rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+    }
+#endif
diff --git a/layouts/community/ortho_4x12/junonum/rules.mk b/layouts/community/ortho_4x12/junonum/rules.mk
index 72e6214d23..ecb8d8aa1a 100644
--- a/layouts/community/ortho_4x12/junonum/rules.mk
+++ b/layouts/community/ortho_4x12/junonum/rules.mk
@@ -1,13 +1,15 @@
-SRC += muse.c
+ifeq ($(strip $(AUDIO_ENABLE)), yes)
+    SRC += muse.c
+endif
 
 ifeq ($(strip $(KEYBOARD)),$(filter $(strip $(KEYBOARD)), planck/rev2 planck/rev3 planck/rev4 planck/rev5))
-  BACKLIGHT_ENABLE = yes
+    BACKLIGHT_ENABLE = yes
 else
-  BACKLIGHT_ENABLE = no
+    BACKLIGHT_ENABLE = no
 endif
 
 ifeq ($(strip $(KEYBOARD)), vitamins_included/rev1)
-  NKRO_ENABLE = no
+    NKRO_ENABLE = no
 endif
 
 MIDI_ENABLE=no
-- 
cgit v1.2.3


From bc784749066fc830935bf409d1a0faf323619a8c Mon Sep 17 00:00:00 2001
From: Vertex-kb <102476474+Vertex-kb@users.noreply.github.com>
Date: Fri, 10 Feb 2023 05:07:44 +0800
Subject: [Keyboard] add arc60h (#18798)

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
---
 keyboards/vertex/arc60h/arc60h.c                 | 18 ++++++
 keyboards/vertex/arc60h/arc60h.h                 | 36 +++++++++++
 keyboards/vertex/arc60h/config.h                 | 59 +++++++++++++++++
 keyboards/vertex/arc60h/halconf.h                | 25 ++++++++
 keyboards/vertex/arc60h/info.json                | 82 ++++++++++++++++++++++++
 keyboards/vertex/arc60h/keymaps/default/keymap.c | 36 +++++++++++
 keyboards/vertex/arc60h/keymaps/via/keymap.c     | 51 +++++++++++++++
 keyboards/vertex/arc60h/keymaps/via/rules.mk     |  2 +
 keyboards/vertex/arc60h/mcuconf.h                | 27 ++++++++
 keyboards/vertex/arc60h/readme.md                | 22 +++++++
 keyboards/vertex/arc60h/rules.mk                 | 17 +++++
 11 files changed, 375 insertions(+)
 create mode 100644 keyboards/vertex/arc60h/arc60h.c
 create mode 100644 keyboards/vertex/arc60h/arc60h.h
 create mode 100644 keyboards/vertex/arc60h/config.h
 create mode 100644 keyboards/vertex/arc60h/halconf.h
 create mode 100644 keyboards/vertex/arc60h/info.json
 create mode 100644 keyboards/vertex/arc60h/keymaps/default/keymap.c
 create mode 100644 keyboards/vertex/arc60h/keymaps/via/keymap.c
 create mode 100644 keyboards/vertex/arc60h/keymaps/via/rules.mk
 create mode 100644 keyboards/vertex/arc60h/mcuconf.h
 create mode 100644 keyboards/vertex/arc60h/readme.md
 create mode 100644 keyboards/vertex/arc60h/rules.mk

diff --git a/keyboards/vertex/arc60h/arc60h.c b/keyboards/vertex/arc60h/arc60h.c
new file mode 100644
index 0000000000..2ef6bb3ff4
--- /dev/null
+++ b/keyboards/vertex/arc60h/arc60h.c
@@ -0,0 +1,18 @@
+/* Copyright 2022 vertex
+ *
+ * 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 "arc60h.h"
diff --git a/keyboards/vertex/arc60h/arc60h.h b/keyboards/vertex/arc60h/arc60h.h
new file mode 100644
index 0000000000..d82886a20f
--- /dev/null
+++ b/keyboards/vertex/arc60h/arc60h.h
@@ -0,0 +1,36 @@
+/* Copyright 2022 vertex
+ *
+ * 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"
+
+#define ___ KC_NO
+
+
+#define LAYOUT_all( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C,      K1E, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D,      \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D, K3E, \
+    K40, K41,      K43,           K46,                     K4B, K4C,      K4E  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, ___, K1E }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, ___, K2D, ___ }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, K3E }, \
+    { K40, K41, ___, K43, ___, ___, K46, ___, ___, ___, ___, K4B, K4C, ___, K4E }  \
+}
diff --git a/keyboards/vertex/arc60h/config.h b/keyboards/vertex/arc60h/config.h
new file mode 100644
index 0000000000..1795f9b2ee
--- /dev/null
+++ b/keyboards/vertex/arc60h/config.h
@@ -0,0 +1,59 @@
+/* Copyright 2022 vertex
+
+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
+
+#define MATRIX_COL_PINS { B9, B8, B7, B6, B5, B4, B3, B11, A15, A10, A9, B14, B13, B12, A5 }
+#define MATRIX_ROW_PINS { B10, B1, B0, A7, A6 }
+#define DIODE_DIRECTION COL2ROW
+
+#define LED_CAPS_LOCK_PIN C13
+#define LED_PIN_ON_STATE 0
+
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_SNAKE
+#define RGBLIGHT_EFFECT_KNIGHT
+#define RGBLIGHT_EFFECT_CHRISTMAS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RGB_TEST
+#define RGBLIGHT_EFFECT_ALTERNATING
+#define RGBLIGHT_EFFECT_TWINKLE
+#define RGB_DI_PIN B15
+#define RGBLED_NUM 9
+#define WS2812_SPI SPID2
+#define WS2812_SPI_MOSI_PAL_MODE 5
+
+
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+#define FORCE_NKRO
+
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/vertex/arc60h/halconf.h b/keyboards/vertex/arc60h/halconf.h
new file mode 100644
index 0000000000..79481e04e4
--- /dev/null
+++ b/keyboards/vertex/arc60h/halconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2022 vertex
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ *    `qmk chibios-confmigrate -i keyboards/bt66tech/bt66tech60/halconf.h -r platforms/chibios/common/configs/halconf.h`
+ */
+
+#pragma once
+#define HAL_USE_SPI TRUE
+
+#include_next <halconf.h>
diff --git a/keyboards/vertex/arc60h/info.json b/keyboards/vertex/arc60h/info.json
new file mode 100644
index 0000000000..9cd38dd907
--- /dev/null
+++ b/keyboards/vertex/arc60h/info.json
@@ -0,0 +1,82 @@
+{
+    "keyboard_name": "ARC60H",
+    "manufacturer": "vertex",
+    "url": "",
+    "maintainer": "EasonQian1, Vertex-kb",
+    "usb": {
+        "vid": "0x7374",
+        "pid": "0x9770",
+        "device_version": "0.0.1"
+    },
+    "processor": "STM32F103",
+    "bootloader": "stm32duino",
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [
+                {"x": 0, "y": 0 },
+                {"x": 1, "y": 0 },
+                {"x": 2, "y": 0 },
+                {"x": 3, "y": 0 },
+                {"x": 4, "y": 0 },
+                {"x": 5, "y": 0 },
+                {"x": 6, "y": 0 },
+                {"x": 7, "y": 0 },
+                {"x": 8, "y": 0 },
+                {"x": 9, "y": 0 },
+                {"x": 10, "y": 0 },
+                {"x": 11, "y": 0 },
+                {"x": 12, "y": 0 },
+                {"x": 13, "y": 0 },
+                {"x": 14, "y": 0 },
+                {"x": 0, "y": 1, "w": 1.5 },
+                {"x": 1.5, "y": 1 },
+                {"x": 2.5, "y": 1 },
+                {"x": 3.5, "y": 1 },
+                {"x": 4.5, "y": 1 },
+                {"x": 5.5, "y": 1 },
+                {"x": 6.5, "y": 1 },
+                {"x": 7.5, "y": 1 },
+                {"x": 8.5, "y": 1 },
+                {"x": 9.5, "y": 1 },
+                {"x": 10.5, "y": 1 },
+                {"x": 11.5, "y": 1 },
+                {"x": 12.5, "y": 1 },
+                {"x": 13.5, "y": 1, "w": 1.5 },
+                {"x": 0, "y": 2, "w": 1.75 },
+                {"x": 1.75, "y": 2 },
+                {"x": 2.75, "y": 2 },
+                {"x": 3.75, "y": 2 },
+                {"x": 4.75, "y": 2 },
+                {"x": 5.75, "y": 2 },
+                {"x": 6.75, "y": 2 },
+                {"x": 7.75, "y": 2 },
+                {"x": 8.75, "y": 2 },
+                {"x": 9.75, "y": 2 },
+                {"x": 10.75, "y": 2 },
+                {"x": 11.75, "y": 2 },
+                {"x": 12.75, "y": 2, "w": 2.25 },
+                {"x": 0, "y": 3, "w": 1.25 },
+                {"x": 1.25, "y": 3 },
+                {"x": 2.25, "y": 3 },
+                {"x": 3.25, "y": 3 },
+                {"x": 4.25, "y": 3 },
+                {"x": 5.25, "y": 3 },
+                {"x": 6.25, "y": 3 },
+                {"x": 7.25, "y": 3 },
+                {"x": 8.25, "y": 3 },
+                {"x": 9.25, "y": 3 },
+                {"x": 10.25, "y": 3 },
+                {"x": 11.25, "y": 3 },
+                {"x": 12.25, "y": 3, "w": 1.75 },
+                {"x": 14, "y": 3 },
+                {"x": 0, "y": 4, "w": 1.5 },
+                {"x": 1.5, "y": 4, "w": 1 },
+                {"x": 2.5, "y": 4, "w": 1.5 },
+                {"x": 4, "y": 4, "w": 7 },
+                {"x": 11, "y": 4, "w": 1.5 },
+                {"x": 12.5, "y": 4, "w": 1 },
+                {"x": 13.5, "y": 4, "w": 1.5 }
+            ]
+        }
+    }
+}
diff --git a/keyboards/vertex/arc60h/keymaps/default/keymap.c b/keyboards/vertex/arc60h/keymaps/default/keymap.c
new file mode 100644
index 0000000000..3a8bf9d24e
--- /dev/null
+++ b/keyboards/vertex/arc60h/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2022 vertex
+ *
+ * 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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [0] = 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_1,    KC_BSPC,
+        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_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_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, MO(1),
+        KC_LCTL, KC_LGUI,       KC_LALT,                    KC_SPC,                                      KC_RALT, MO(1),            KC_RCTL
+    ),
+
+    [1] = LAYOUT_all(
+        KC_GRV,  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,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______,
+        _______, _______,          _______,                   _______,                                      _______, _______,         _______
+    ),
+
+};
diff --git a/keyboards/vertex/arc60h/keymaps/via/keymap.c b/keyboards/vertex/arc60h/keymaps/via/keymap.c
new file mode 100644
index 0000000000..2cbef4bce2
--- /dev/null
+++ b/keyboards/vertex/arc60h/keymaps/via/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2022 vertex
+ *
+ * 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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [0] = 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_1,    KC_BSPC,
+        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_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_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,  MO(1),
+        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                                      KC_RGUI, MO(1),             KC_RCTL
+    ),
+
+    [1] = LAYOUT_all(
+        KC_GRV,  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_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_MOD, _______, _______, _______, _______, _______, _______,          _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          QK_BOOT,
+        _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,          _______, _______,
+        _______, _______,          _______,                   _______,                                     _______, _______,          _______
+    ),
+
+    [2] = LAYOUT_all(
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          QK_BOOT,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______,
+        _______, _______,          _______,                   _______,                                     _______, _______,          _______
+    ),
+
+    [3] = LAYOUT_all(
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          QK_BOOT,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______,
+        _______, _______,          _______,                   _______,                                     _______, _______,          _______
+    ),
+};
diff --git a/keyboards/vertex/arc60h/keymaps/via/rules.mk b/keyboards/vertex/arc60h/keymaps/via/rules.mk
new file mode 100644
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/vertex/arc60h/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/vertex/arc60h/mcuconf.h b/keyboards/vertex/arc60h/mcuconf.h
new file mode 100644
index 0000000000..5d05bd2505
--- /dev/null
+++ b/keyboards/vertex/arc60h/mcuconf.h
@@ -0,0 +1,27 @@
+/* Copyright 2022 vertex
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ *    `qmk chibios-confmigrate -i keyboards/bt66tech/bt66tech60/mcuconf.h -r platforms/chibios/STM32_F103_STM32DUINO/configs/mcuconf.h`
+ */
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef STM32_SPI_USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
diff --git a/keyboards/vertex/arc60h/readme.md b/keyboards/vertex/arc60h/readme.md
new file mode 100644
index 0000000000..72f9cddbc9
--- /dev/null
+++ b/keyboards/vertex/arc60h/readme.md
@@ -0,0 +1,22 @@
+# arc60h
+
+* A customizable hotswap 60% keyboard.
+
+* Keyboard Maintainer: [EASON](https://github.com/EasonQian1)
+* Hardware Supported: arc60h
+* Hardware Availability: [vertex-kb](https://github.com/Vertex-kb)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make vertex/arc60h:default
+
+Flashing example for this keyboard:
+
+    make vertex/arc60h:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader Enter the bootloader in 3 ways:
+* **Bootmagic reset**: Hold down Enter in the keyboard then replug
+* **Physical reset button**: Briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT`
diff --git a/keyboards/vertex/arc60h/rules.mk b/keyboards/vertex/arc60h/rules.mk
new file mode 100644
index 0000000000..94b0fb2aa9
--- /dev/null
+++ b/keyboards/vertex/arc60h/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no       # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = yes        # Console for debug
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
+AUDIO_ENABLE = no           # Audio output
+SLEEP_LED_ENABLE = yes
+WS2812_DRIVER = spi
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
-- 
cgit v1.2.3


From 1b3b1427d2eee2e64c872aa0a6c403dbd06defa2 Mon Sep 17 00:00:00 2001
From: djok0127 <djok0127@gmail.com>
Date: Thu, 9 Feb 2023 13:10:25 -0800
Subject: [Keyboard] Add Igloo (#19678)

Co-authored-by: jack <0x6a73@protonmail.com>
---
 keyboards/igloo/info.json                | 119 +++++++++++++++++++++++++++++++
 keyboards/igloo/keymaps/default/keymap.c |  42 +++++++++++
 keyboards/igloo/keymaps/via/keymap.c     |  42 +++++++++++
 keyboards/igloo/keymaps/via/rules.mk     |   1 +
 keyboards/igloo/readme.md                |  18 +++++
 keyboards/igloo/rules.mk                 |   1 +
 6 files changed, 223 insertions(+)
 create mode 100644 keyboards/igloo/info.json
 create mode 100644 keyboards/igloo/keymaps/default/keymap.c
 create mode 100644 keyboards/igloo/keymaps/via/keymap.c
 create mode 100644 keyboards/igloo/keymaps/via/rules.mk
 create mode 100644 keyboards/igloo/readme.md
 create mode 100644 keyboards/igloo/rules.mk

diff --git a/keyboards/igloo/info.json b/keyboards/igloo/info.json
new file mode 100644
index 0000000000..9ff5a23b0f
--- /dev/null
+++ b/keyboards/igloo/info.json
@@ -0,0 +1,119 @@
+{
+    "manufacturer": "Dong Jae Shin",
+    "keyboard_name": "Igloo",
+    "maintainer": "Dong Jae Shin",
+    "bootloader": "atmel-dfu",
+    "diode_direction": "COL2ROW",
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true
+    },
+    "matrix_pins": {
+        "cols": ["F7", "F6", "F5", "F4", "F1", "F0", 
+                 "B0", "B1", "B2", "B4", "B5", "B6", 
+                 "C6", "C7", "D5", "D6", "D4"],
+        "rows": ["B7", "D0", "D1", "D2", "D3"]
+    },
+    "processor": "atmega32u4",
+    "url": "",
+    "usb": {
+        "device_version": "1.0.0",
+        "pid": "0x0001",
+        "vid": "0xBEAD"
+    },
+    "layouts": {
+        "LAYOUT_tkl_nofrow_ansi": {
+            "layout": [
+                { "matrix": [0, 0], "x": 0, "y": 0 },
+                { "matrix": [0, 1], "x": 1, "y": 0 },
+                { "matrix": [0, 2], "x": 2, "y": 0 },
+                { "matrix": [0, 3], "x": 3, "y": 0 },
+                { "matrix": [0, 4], "x": 4, "y": 0 },
+                { "matrix": [0, 5], "x": 5, "y": 0 },
+                { "matrix": [0, 6], "x": 6, "y": 0 },
+                { "matrix": [0, 7], "x": 7, "y": 0 },
+                { "matrix": [0, 8], "x": 8, "y": 0 },
+                { "matrix": [0, 9], "x": 9, "y": 0 },
+                { "matrix": [0, 10], "x": 10, "y": 0 },
+                { "matrix": [0, 11], "x": 11, "y": 0 },
+                { "matrix": [0, 12], "x": 12, "y": 0 },
+                { "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
+                { "matrix": [0, 14], "x": 15.25, "y": 0 },
+                { "matrix": [0, 15], "x": 16.25, "y": 0 },
+                { "matrix": [0, 16], "x": 17.25, "y": 0 },
+
+                { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+                { "matrix": [1, 1], "x": 1.5, "y": 1 },
+                { "matrix": [1, 2], "x": 2.5, "y": 1 },
+                { "matrix": [1, 3], "x": 3.5, "y": 1 },
+                { "matrix": [1, 4], "x": 4.5, "y": 1 },
+                { "matrix": [1, 5], "x": 5.5, "y": 1 },
+                { "matrix": [1, 6], "x": 6.5, "y": 1 },
+                { "matrix": [1, 7], "x": 7.5, "y": 1 },
+                { "matrix": [1, 8], "x": 8.5, "y": 1 },
+                { "matrix": [1, 9], "x": 9.5, "y": 1 },
+                { "matrix": [1, 10], "x": 10.5, "y": 1 },
+                { "matrix": [1, 11], "x": 11.5, "y": 1 },
+                { "matrix": [1, 12], "x": 12.5, "y": 1 },
+                { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+                { "matrix": [1, 14], "x": 15.25, "y": 1 },
+                { "matrix": [1, 15], "x": 16.25, "y": 1 },
+                { "matrix": [1, 16], "x": 17.25, "y": 1 },
+
+                { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+                { "matrix": [2, 1], "x": 1.75, "y": 2 },
+                { "matrix": [2, 2], "x": 2.75, "y": 2 },
+                { "matrix": [2, 3], "x": 3.75, "y": 2 },
+                { "matrix": [2, 4], "x": 4.75, "y": 2 },
+                { "matrix": [2, 5], "x": 5.75, "y": 2 },
+                { "matrix": [2, 6], "x": 6.75, "y": 2 },
+                { "matrix": [2, 7], "x": 7.75, "y": 2 },
+                { "matrix": [2, 8], "x": 8.75, "y": 2 },
+                { "matrix": [2, 9], "x": 9.75, "y": 2 },
+                { "matrix": [2, 10], "x": 10.75, "y": 2 },
+                { "matrix": [2, 11], "x": 11.75, "y": 2 },
+                { "matrix": [2, 12], "w": 2.25, "x": 12.75, "y": 2 },
+                { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+                { "matrix": [2, 14], "x": 12.75, "y": 2 }, 
+                { "matrix": [2, 15], "x": 13, "y": 0 }, 
+
+
+                { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+                { "matrix": [3, 1], "x": 1.25, "y": 3 }, 
+                { "matrix": [3, 2], "x": 2.25, "y": 3 },
+                { "matrix": [3, 3], "x": 3.25, "y": 3 },
+                { "matrix": [3, 4], "x": 4.25, "y": 3 },
+                { "matrix": [3, 5], "x": 5.25, "y": 3 },
+                { "matrix": [3, 6], "x": 6.25, "y": 3 },
+                { "matrix": [3, 7], "x": 7.25, "y": 3 },
+                { "matrix": [3, 8], "x": 8.25, "y": 3 },
+                { "matrix": [3, 9], "x": 9.25, "y": 3 }, 
+                { "matrix": [3, 10], "x": 10.25, "y": 3 }, 
+                { "matrix": [3, 11], "x": 11.25, "y": 3 }, 
+                { "matrix": [3, 12], "x": 12.25, "y": 3 }, 
+                { "matrix": [3, 14], "x": 13.25, "y": 3 },
+                { "matrix": [3, 15], "x": 16.25, "y": 3 }, 
+
+                { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+                { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+                { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+                { "matrix": [4, 3], "x": 6.25, "y": 4 },
+                { "matrix": [4, 4], "w": 2.25, "x": 4, "y": 4 },
+                { "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
+                { "matrix": [4, 6], "w": 2.25, "x": 7.25, "y": 4 },
+                { "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
+                { "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
+                { "matrix": [4, 11], "w": 1.25, "x": 12.5, "y": 4 }, 
+                { "matrix": [4, 12], "w": 1.25, "x": 13.75, "y": 4 },
+                { "matrix": [4, 13], "w": 1.25, "x": 15, "y": 4 },
+                { "matrix": [4, 14], "x": 15.25, "y": 4 },
+                { "matrix": [4, 15], "x": 16.25, "y": 4 },
+                { "matrix": [4, 16], "x": 17.25, "y": 4 }
+            ]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/igloo/keymaps/default/keymap.c b/keyboards/igloo/keymaps/default/keymap.c
new file mode 100644
index 0000000000..ec59b5ad0b
--- /dev/null
+++ b/keyboards/igloo/keymaps/default/keymap.c
@@ -0,0 +1,42 @@
+/*
+Copyright 2023 Dong Jae Shin <djok0127@gmail.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 {
+    _LAYER0,
+    _LAYER1,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [_LAYER0] = LAYOUT_tkl_nofrow_ansi(
+    //  0,       1        2        3        4        5        6        7        8        9        10       11       12       13          14       15             16
+        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_INS,  KC_HOME,       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_BSLS,    KC_DEL,  KC_END,        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_ENT,     KC_ENT,  KC_NONUS_HASH, KC_BSPC,
+        KC_LSFT, KC_BSLS, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, MO(1),               KC_UP,       
+        KC_LCTL, KC_LGUI, KC_LALT,          MO(1),   KC_SPC,  KC_SPC,  KC_SPC,           KC_RGUI, KC_RALT, MO(1),   KC_APP,  KC_RCTL,    KC_LEFT, KC_DOWN,       KC_RGHT
+    ),
+
+    [_LAYER1] = LAYOUT_tkl_nofrow_ansi(
+    //  0,       1         2          3         4         5         6         7         8         9         10       11       12       13          14       15       16
+        KC_GRV,  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_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, 
+        KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,
+        KC_TRNS, KC_TRNS,  KC_TRNS,             KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS
+    )
+};
diff --git a/keyboards/igloo/keymaps/via/keymap.c b/keyboards/igloo/keymaps/via/keymap.c
new file mode 100644
index 0000000000..ec59b5ad0b
--- /dev/null
+++ b/keyboards/igloo/keymaps/via/keymap.c
@@ -0,0 +1,42 @@
+/*
+Copyright 2023 Dong Jae Shin <djok0127@gmail.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 {
+    _LAYER0,
+    _LAYER1,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [_LAYER0] = LAYOUT_tkl_nofrow_ansi(
+    //  0,       1        2        3        4        5        6        7        8        9        10       11       12       13          14       15             16
+        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_INS,  KC_HOME,       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_BSLS,    KC_DEL,  KC_END,        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_ENT,     KC_ENT,  KC_NONUS_HASH, KC_BSPC,
+        KC_LSFT, KC_BSLS, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, MO(1),               KC_UP,       
+        KC_LCTL, KC_LGUI, KC_LALT,          MO(1),   KC_SPC,  KC_SPC,  KC_SPC,           KC_RGUI, KC_RALT, MO(1),   KC_APP,  KC_RCTL,    KC_LEFT, KC_DOWN,       KC_RGHT
+    ),
+
+    [_LAYER1] = LAYOUT_tkl_nofrow_ansi(
+    //  0,       1         2          3         4         5         6         7         8         9         10       11       12       13          14       15       16
+        KC_GRV,  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_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, 
+        KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,
+        KC_TRNS, KC_TRNS,  KC_TRNS,             KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS
+    )
+};
diff --git a/keyboards/igloo/keymaps/via/rules.mk b/keyboards/igloo/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/igloo/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/igloo/readme.md b/keyboards/igloo/readme.md
new file mode 100644
index 0000000000..c5e16c13a9
--- /dev/null
+++ b/keyboards/igloo/readme.md
@@ -0,0 +1,18 @@
+# Igloo
+
+* Keyboard Maintainer: [Chris Shin](https://github.com/djok0127)
+* Hardware Supported: Igloo PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+    make igloo:default
+
+Flashing example for this keyboard:
+
+    make igloo:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
diff --git a/keyboards/igloo/rules.mk b/keyboards/igloo/rules.mk
new file mode 100644
index 0000000000..6e7633bfe0
--- /dev/null
+++ b/keyboards/igloo/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
-- 
cgit v1.2.3


From 462ab3c4d23615b0a80a19b18ab7c69cf8904313 Mon Sep 17 00:00:00 2001
From: Colin Kinloch <colin@kinlo.ch>
Date: Thu, 9 Feb 2023 21:29:23 +0000
Subject: [Keyboard] Add CXT Studio (#19531)

Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Colin Kinloch <colin.kinloch@collabora.com>
---
 keyboards/cxt_studio/config.h                    | 48 +++++++++++++++
 keyboards/cxt_studio/cxt_studio.c                | 55 +++++++++++++++++
 keyboards/cxt_studio/info.json                   | 76 ++++++++++++++++++++++++
 keyboards/cxt_studio/keymaps/default/keymap.json | 13 ++++
 keyboards/cxt_studio/readme.md                   | 27 +++++++++
 keyboards/cxt_studio/rules.mk                    |  1 +
 6 files changed, 220 insertions(+)
 create mode 100644 keyboards/cxt_studio/config.h
 create mode 100644 keyboards/cxt_studio/cxt_studio.c
 create mode 100644 keyboards/cxt_studio/info.json
 create mode 100644 keyboards/cxt_studio/keymaps/default/keymap.json
 create mode 100644 keyboards/cxt_studio/readme.md
 create mode 100644 keyboards/cxt_studio/rules.mk

diff --git a/keyboards/cxt_studio/config.h b/keyboards/cxt_studio/config.h
new file mode 100644
index 0000000000..82a60de39b
--- /dev/null
+++ b/keyboards/cxt_studio/config.h
@@ -0,0 +1,48 @@
+// Copyright 2023 Colin Kinloch (@ColinKinloch)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGB_MATRIX_LED_COUNT 12
+#define RGB_DI_PIN F7
+
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_TYPING_HEATMAP
+
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+#define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+#define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+#define RGB_MATRIX_TYPING_HEATMAP_SPREAD 9
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/cxt_studio/cxt_studio.c b/keyboards/cxt_studio/cxt_studio.c
new file mode 100644
index 0000000000..2e7622ff91
--- /dev/null
+++ b/keyboards/cxt_studio/cxt_studio.c
@@ -0,0 +1,55 @@
+// Copyright 2023 Colin Kinloch (@ColinKinloch)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+static uint8_t anim = 0;
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+    if (!encoder_update_user(index, clockwise)) {
+        return false;
+    }
+    switch (index) {
+      case 0: {
+        if (clockwise) {
+            tap_code_delay(KC_VOLU, 10);
+        } else {
+            tap_code_delay(KC_VOLD, 10);
+        }
+      }
+      break;
+      case 1: {
+        if (clockwise) {
+            rgblight_increase_hue();
+        } else {
+            rgblight_decrease_hue();
+        }
+      }
+      break;
+      case 2: {
+        if (clockwise) {
+            rgblight_increase_val();
+        } else {
+            rgblight_decrease_val();
+        }
+      }
+      break;
+      case 3: {
+        if (clockwise) {
+            anim++;
+        } else {
+            anim--;
+        }
+	if (anim >= RGB_MATRIX_EFFECT_MAX) {
+		anim = 0;
+	} else if (anim < 0) {
+		anim = RGB_MATRIX_EFFECT_MAX - 1;
+	}
+	rgblight_mode(anim);
+      }
+      break;
+    }
+    return true;
+}
+#endif
diff --git a/keyboards/cxt_studio/info.json b/keyboards/cxt_studio/info.json
new file mode 100644
index 0000000000..35e8031819
--- /dev/null
+++ b/keyboards/cxt_studio/info.json
@@ -0,0 +1,76 @@
+{
+    "manufacturer": "CXT",
+    "keyboard_name": "cxt_studio",
+    "maintainer": "ColinKinloch",
+    "bootloader": "atmel-dfu",
+    "diode_direction": "ROW2COL",
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": true,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true,
+        "encoder": true,
+        "rgb_matrix": true
+    },
+    "matrix_pins": {
+        "cols": ["D4", "D7", "B4", "B5"],
+        "rows": ["C7", "C6", "D6", "F4"]
+    },
+    "encoder": {
+        "rotary": [
+            { "pin_a": "D5", "pin_b": "D3" },
+            { "pin_a": "B2", "pin_b": "B3" },
+            { "pin_a": "F5", "pin_b": "F6" },
+            { "pin_a": "E6", "pin_b": "F0" }
+        ]
+    },
+    "processor": "atmega32u4",
+    "rgb_matrix": {
+       "driver": "WS2812",
+       "layout": [
+         { "flags": 4, "matrix": [0, 3], "x": 3, "y": 0 },
+         { "flags": 4, "matrix": [0, 2], "x": 2, "y": 0 },
+         { "flags": 4, "matrix": [0, 1], "x": 1, "y": 0 },
+         { "flags": 4, "matrix": [0, 0], "x": 0, "y": 0 },
+         { "flags": 4, "matrix": [1, 0], "x": 0, "y": 1 },
+         { "flags": 4, "matrix": [1, 1], "x": 1, "y": 1 },
+         { "flags": 4, "matrix": [1, 2], "x": 2, "y": 1 },
+         { "flags": 4, "matrix": [1, 3], "x": 3, "y": 1 },
+         { "flags": 4, "matrix": [2, 3], "x": 3, "y": 2 },
+         { "flags": 4, "matrix": [2, 2], "x": 2, "y": 2 },
+         { "flags": 4, "matrix": [2, 1], "x": 1, "y": 2 },
+         { "flags": 4, "matrix": [2, 0], "x": 0, "y": 2 }
+       ]
+    },
+    "url": "",
+    "usb": {
+        "device_version": "1.0.0",
+        "pid": "0x0000",
+        "vid": "0xFEED"
+    },
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                { "matrix": [0, 0], "x": 0, "y": 0 },
+                { "matrix": [0, 1], "x": 1, "y": 0 },
+                { "matrix": [0, 2], "x": 2, "y": 0 },
+                { "matrix": [0, 3], "x": 3, "y": 0 },
+                { "matrix": [1, 0], "x": 0, "y": 1 },
+                { "matrix": [1, 1], "x": 1, "y": 1 },
+                { "matrix": [1, 2], "x": 2, "y": 1 },
+                { "matrix": [1, 3], "x": 3, "y": 1 },
+                { "matrix": [2, 0], "x": 0, "y": 2 },
+                { "matrix": [2, 1], "x": 1, "y": 2 },
+                { "matrix": [2, 2], "x": 2, "y": 2 },
+                { "matrix": [2, 3], "x": 3, "y": 2 },
+
+                { "matrix": [3, 0], "x": 0, "y": 3 },
+                { "matrix": [3, 1], "x": 1, "y": 3 },
+                { "matrix": [3, 2], "x": 2, "y": 3 },
+                { "matrix": [3, 3], "x": 3, "y": 3 }
+            ]
+        }
+    }
+}
diff --git a/keyboards/cxt_studio/keymaps/default/keymap.json b/keyboards/cxt_studio/keymaps/default/keymap.json
new file mode 100644
index 0000000000..77b4cabc92
--- /dev/null
+++ b/keyboards/cxt_studio/keymaps/default/keymap.json
@@ -0,0 +1,13 @@
+{
+    "keyboard": "cxt_studio",
+    "keymap": "default",
+    "layout": "LAYOUT",
+    "layers": [
+        [
+            "KC_ESC",  "KC_F11",  "KC_NO",   "KC_MSTP",
+            "KC_NO",   "KC_NO",   "KC_MRWD", "KC_MFFD",
+            "KC_NO",   "KC_MPLY", "KC_MPLY", "KC_MNXT",
+            "KC_MUTE", "KC_NO",   "KC_NO",   "RGB_TOG"
+        ]
+    ]
+}
diff --git a/keyboards/cxt_studio/readme.md b/keyboards/cxt_studio/readme.md
new file mode 100644
index 0000000000..6397a3fdfd
--- /dev/null
+++ b/keyboards/cxt_studio/readme.md
@@ -0,0 +1,27 @@
+# cxt_studio
+
+![cxt_studio](https://i.imgur.com/AMCTioSh.jpeg)
+
+3x4 ortho rgb lighting 4 knobs.
+
+* Keyboard Maintainer: [Colin Kinloch](https://github.com/ColinKinloch)
+* Hardware Supported: CXT-Studio
+* Hardware Availability: AliExpress. I think the manufacturer is on Taobao.
+
+Make example for this keyboard (after setting up your build environment):
+
+    make cxt_studio:default
+
+Flashing example for this keyboard:
+
+    make cxt_studio:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cxt_studio/rules.mk b/keyboards/cxt_studio/rules.mk
new file mode 100644
index 0000000000..6e7633bfe0
--- /dev/null
+++ b/keyboards/cxt_studio/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
-- 
cgit v1.2.3


From 5208361dcbd2bfd851a598964b88ac7da5e5340e Mon Sep 17 00:00:00 2001
From: lalalademaxiya1 <66767061+lalalademaxiya1@users.noreply.github.com>
Date: Fri, 10 Feb 2023 11:54:40 +0800
Subject: Update info.json for Keychron V10 (#19791)

---
 keyboards/keychron/v10/ansi_encoder/info.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/keyboards/keychron/v10/ansi_encoder/info.json b/keyboards/keychron/v10/ansi_encoder/info.json
index 5f08fa0072..9507fe6d32 100644
--- a/keyboards/keychron/v10/ansi_encoder/info.json
+++ b/keyboards/keychron/v10/ansi_encoder/info.json
@@ -5,7 +5,7 @@
     "maintainer": "lalalademaxiya1",
     "usb": {
         "vid": "0x3434",
-        "pid": "0x01A1",
+        "pid": "0x03A1",
         "device_version": "1.0.0"
     },
     "processor": "STM32L432",
-- 
cgit v1.2.3


From 25ff06c01d84ba0d580e8a572e9b655cc555dcd9 Mon Sep 17 00:00:00 2001
From: Wolf Van Herreweghe <wolfvanh@gmail.com>
Date: Fri, 10 Feb 2023 04:59:03 +0100
Subject: Move FAve 84H to data driven design + Via Custom UI (#19763)

Co-authored-by: Wolf <contact@vwolf.be>
---
 keyboards/linworks/fave84h/config.h                |  41 +-
 keyboards/linworks/fave84h/fave84h.c               |  44 --
 keyboards/linworks/fave84h/fave84h.h               |  69 ---
 keyboards/linworks/fave84h/info.json               | 510 +++++++++++++--------
 .../linworks/fave84h/keymaps/default/keymap.c      |   3 +-
 keyboards/linworks/fave84h/keymaps/via/keymap.c    | 131 +++++-
 keyboards/linworks/fave84h/rules.mk                |  20 -
 7 files changed, 464 insertions(+), 354 deletions(-)
 delete mode 100644 keyboards/linworks/fave84h/fave84h.c
 delete mode 100644 keyboards/linworks/fave84h/fave84h.h

diff --git a/keyboards/linworks/fave84h/config.h b/keyboards/linworks/fave84h/config.h
index 6a75578801..516f30e96f 100644
--- a/keyboards/linworks/fave84h/config.h
+++ b/keyboards/linworks/fave84h/config.h
@@ -14,49 +14,20 @@ 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 "config_common.h"
-
-/* key matrix size */
-#define MATRIX_ROWS 6
-#define MATRIX_COLS 17
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-
-// Checked with Eagle Schematic
-#define MATRIX_ROW_PINS { B1, B2, B3, D3, D1, D0  }
-#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, B0, B7, E6}
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
 /* Define RGB */
-#define RGBLED_NUM 86
-#define RGB_MATRIX_LED_COUNT 86
-#define RGB_DI_PIN D2
-
 #ifdef RGB_MATRIX_ENABLE
 
+#define RGB_MATRIX_LED_COUNT 126
+#define RGB_DI_PIN D2
+
 #define RGB_DISABLE_WHEN_USB_SUSPENDED
 #define RGB_MATRIX_KEYPRESSES 
 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS
 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120
 
-#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
 
 #define ENABLE_RGB_MATRIX_ALPHAS_MODS
 #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
@@ -111,4 +82,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 #define ENABLE_RGB_MATRIX_SOLID_SPLASH
 #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
 
+#define EECONFIG_KB_DATA_SIZE 4
+
+#define CAPS_INDICATOR_INDEX 12
+
 #endif
diff --git a/keyboards/linworks/fave84h/fave84h.c b/keyboards/linworks/fave84h/fave84h.c
deleted file mode 100644
index 4a17096df6..0000000000
--- a/keyboards/linworks/fave84h/fave84h.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-Copyright 2020 <contact@vwolf.be>
-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 "fave84h.h"
-
-#ifdef RGB_MATRIX_ENABLE
-led_config_t g_led_config = {
-    {
-        // Key Matrix to LED Index
-        { 47, NO_LED, 48,     49,     50, 51,     52,     53,     54,     55, 56,     57,     58,     59,     60,     61,     62 },
-        { 46,     45, 44,     43,     42, 41,     40,     39,     38,     37, 36,     35,     34,     33,     32,     31,     30 },
-        { 13,     14, 15,     16,     17, 18,     19,     20,     21,     22, 23,     24,     25,     26,     27,     28,     29 },
-        { 12,     11, 10,      9,      8,  7,      6,      5,      4,      3,  2,      1, NO_LED,      0, NO_LED, NO_LED, NO_LED },
-        { 73,     74, 75,     76,     77, 78,     79,     80,     81,     82, 83, NO_LED,     84, NO_LED, NO_LED,     85, NO_LED },
-        { 72,     71, 70, NO_LED, NO_LED, 69, NO_LED, NO_LED, NO_LED, NO_LED, 68, NO_LED,     67,     66,     65,     64,     63 },
-    }, {
-        // LED Index to Physical Position
-        {   0,  0 },              {  28,  0 }, {  42,  0 }, {  57,  0 }, {  71,  0 }, {  92,  0 }, { 106,  0 }, { 120,  0 }, { 134,  0 }, { 156,  0 }, { 170,  0 }, { 184,  0 }, { 198,  0 },     { 216,  0 }, { 230,  0 }, { 244,  0 },
-        {   0, 15 }, {  14, 15 }, {  28, 15 }, {  42, 15 }, {  57, 15 }, {  71, 15 }, {  85, 15 }, {  99, 15 }, { 113, 15 }, { 127, 15 }, { 141, 15 }, { 156, 15 }, { 170, 15 }, { 191, 17 },     { 216, 15 }, { 230, 15 }, { 244, 15 },
-        {   4, 27 }, {  21, 27 }, {  35, 27 }, {  50, 27 }, {  64, 27 }, {  78, 27 }, {  92, 27 }, { 106, 27 }, { 120, 27 }, { 134, 27 }, { 149, 27 }, { 163, 27 }, { 177, 27 }, { 194, 27 },     { 216, 27 }, { 230, 27 }, { 244, 27 },
-        {  10, 40 }, {  25, 40 }, {  39, 40 }, {  53, 40 }, {  67, 40 }, {  81, 40 }, {  95, 40 }, { 110, 40 }, { 124, 40 }, { 138, 40 }, { 152, 40 }, { 166, 40 },              { 189, 40 },
-        {   9, 52 },              {  32, 52 }, {  46, 52 }, {  60, 52 }, {  74, 52 }, {  88, 52 }, { 103, 52 }, { 117, 52 }, { 131, 52 }, { 145, 52 }, { 159, 52 },              { 186, 52 },                  { 230, 52 },
-        {   4, 64 }, {  21, 64 }, {  39, 64 },                           {  99, 64 },                                                     { 159, 64 },              { 177, 64 }, { 194, 64 },     { 216, 64 }, { 230, 64 }, { 244, 64 }
-    }, {
-        // LED Index to Flag
-        1,    4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4,    1, 1, 1,
-        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1, 1, 1,
-        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1, 1, 1,
-        9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1,
-        1,    4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1,       1,
-        1, 1, 1,       4,             1,    1, 1,    1, 1, 1
-    }
-};
-#endif
diff --git a/keyboards/linworks/fave84h/fave84h.h b/keyboards/linworks/fave84h/fave84h.h
deleted file mode 100644
index 1d97f97236..0000000000
--- a/keyboards/linworks/fave84h/fave84h.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-Copyright 2020 <contact@vwolf.be>
-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"
-
-#define ___ KC_NO
-
-/*
- * ┌───┐   ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
- * │00 │   │02 │03 │04 │05 │ │06 │07 │08 │09 │ │0A │0B │0C │0D │ │0E │0F │0G │
- * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
- * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐   ┌───────┐
- * │10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │3C │ │1E │1F │1G │   │1D     │ 2u Backspace
- * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤   └───────┘
- * │20   │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D   │ │2E │2F │2G │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
- * │30    │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D      │
- * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───┐
- * │40      │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4C        │     │4F │
- * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤ ┌───┼───┼───┐
- * │50   │51 │52   │55                         │5A   │5C │5D   │ │5E │5F │5G │
- * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘
- */
-
-/* FAve 84H Keymap Definitions */
-#define LAYOUT_tkl_ansi_tsangan_split_bs( \
-    K00,      K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,       K0E, K0F, K0G, \
-    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K3C,  K1E, K1F, K1G, \
-    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,       K2E, K2F, K2G, \
-    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D,                      \
-    K40,      K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A,      K4C,            K4F,      \
-    K50, K51, K52,                K55,                     K5A, K5C, K5D,       K5E, K5F, K5G  \
-) { \
-    { K00, ___, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \
-    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
-    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G }, \
-    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, ___, ___, ___ }, \
-    { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, ___, K4C, ___, ___, K4F, ___ }, \
-    { K50, K51, K52, ___, ___, K55, ___, ___, ___, ___, K5A, ___, K5C, K5D, K5E, K5F, K5G }  \
-}
-
-#define LAYOUT_tkl_ansi_tsangan( \
-    K00,      K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,  K0E, K0F, K0G, \
-    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,  K1E, K1F, K1G, \
-    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,  K2E, K2F, K2G, \
-    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D,                 \
-    K40,      K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A,      K4C,       K4F,      \
-    K50, K51, K52,                K55,                     K5A, K5C, K5D,  K5E, K5F, K5G  \
-) { \
-    { K00, ___, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \
-    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
-    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G }, \
-    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, ___, ___, ___ }, \
-    { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, ___, K4C, ___, ___, K4F, ___ }, \
-    { K50, K51, K52, ___, ___, K55, ___, ___, ___, ___, K5A, ___, K5C, K5D, K5E, K5F, K5G }  \
-}
diff --git a/keyboards/linworks/fave84h/info.json b/keyboards/linworks/fave84h/info.json
index 4447c404f8..1d2ab8bd42 100644
--- a/keyboards/linworks/fave84h/info.json
+++ b/keyboards/linworks/fave84h/info.json
@@ -1,12 +1,160 @@
 {
-    "keyboard_name": "FAve 84H",
     "manufacturer": "Lx3",
-    "url": "",
+    "keyboard_name": "FAve 84H",
     "maintainer": "ToastyStoemp",
+    "bootloader": "atmel-dfu",
+    "diode_direction": "COL2ROW",
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true,
+        "rgb_matrix": true,
+        "rgblight": false
+    },
+    "matrix_pins": {
+        "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "B0", "B7", "E6"],
+        "rows": ["B1", "B2", "B3", "D3", "D1", "D0"]
+    },
+    "processor": "atmega32u4",
+    "rgb_matrix": {
+        "driver": "WS2812",
+        "layout": [
+            { "flags": 1, "matrix": [3, 13], "x": 190, "y": 40 },
+            { "flags": 4, "matrix": [3, 11], "x": 167, "y": 40 },
+            { "flags": 4, "matrix": [3, 10], "x": 153, "y": 40 },
+            { "flags": 4, "matrix": [3, 9], "x": 139, "y": 40 },
+            { "flags": 4, "matrix": [3, 8], "x": 125, "y": 40 },
+            { "flags": 4, "matrix": [3, 7], "x": 111, "y": 40 },
+            { "flags": 4, "matrix": [3, 6], "x": 97, "y": 40 },
+            { "flags": 4, "matrix": [3, 5], "x": 83, "y": 40 },
+            { "flags": 4, "matrix": [3, 4], "x": 69, "y": 40 },
+            { "flags": 4, "matrix": [3, 3], "x": 55, "y": 40 },
+            { "flags": 4, "matrix": [3, 2], "x": 41, "y": 40 },
+            { "flags": 4, "matrix": [3, 1], "x": 27, "y": 40 },
+            { "flags": 1, "matrix": [3, 0], "x": 0, "y": 41 },
+            { "flags": 1, "matrix": [2, 0], "x": 6, "y": 27 },
+            { "flags": 4, "matrix": [2, 1], "x": 23, "y": 27 },
+            { "flags": 4, "matrix": [2, 2], "x": 37, "y": 27 },
+            { "flags": 4, "matrix": [2, 3], "x": 51, "y": 27 },
+            { "flags": 4, "matrix": [2, 4], "x": 65, "y": 27 },
+            { "flags": 4, "matrix": [2, 5], "x": 79, "y": 27 },
+            { "flags": 4, "matrix": [2, 6], "x": 93, "y": 27 },
+            { "flags": 4, "matrix": [2, 7], "x": 107, "y": 27 },
+            { "flags": 4, "matrix": [2, 8], "x": 121, "y": 27 },
+            { "flags": 4, "matrix": [2, 9], "x": 135, "y": 27 },
+            { "flags": 4, "matrix": [2, 10], "x": 149, "y": 27 },
+            { "flags": 4, "matrix": [2, 11], "x": 163, "y": 27 },
+            { "flags": 4, "matrix": [2, 12], "x": 177, "y": 27 },
+            { "flags": 1, "matrix": [2, 13], "x": 195, "y": 27 },
+            { "flags": 1, "matrix": [2, 14], "x": 216, "y": 27 },
+            { "flags": 1, "matrix": [2, 15], "x": 230, "y": 27 },
+            { "flags": 1, "matrix": [2, 16], "x": 244, "y": 27 },
+            { "flags": 1, "matrix": [1, 16], "x": 244, "y": 15 },
+            { "flags": 1, "matrix": [1, 15], "x": 230, "y": 15 },
+            { "flags": 1, "matrix": [1, 14], "x": 216, "y": 15 },
+            { "flags": 1, "matrix": [1, 13], "x": 191, "y": 17 },
+            { "flags": 4, "matrix": [1, 12], "x": 170, "y": 15 },
+            { "flags": 4, "matrix": [1, 11], "x": 156, "y": 15 },
+            { "flags": 4, "matrix": [1, 10], "x": 142, "y": 15 },
+            { "flags": 4, "matrix": [1, 9], "x": 128, "y": 15 },
+            { "flags": 4, "matrix": [1, 8], "x": 114, "y": 15 },
+            { "flags": 4, "matrix": [1, 7], "x": 100, "y": 15 },
+            { "flags": 4, "matrix": [1, 6], "x": 86, "y": 15 },
+            { "flags": 4, "matrix": [1, 5], "x": 72, "y": 15 },
+            { "flags": 4, "matrix": [1, 4], "x": 58, "y": 15 },
+            { "flags": 4, "matrix": [1, 3], "x": 44, "y": 15 },
+            { "flags": 4, "matrix": [1, 2], "x": 30, "y": 15 },
+            { "flags": 4, "matrix": [1, 1], "x": 16, "y": 15 },
+            { "flags": 1, "matrix": [1, 0], "x": 2, "y": 15 },
+            { "flags": 1, "matrix": [0, 0], "x": 2, "y": 0 },
+            { "flags": 1, "matrix": [0, 2], "x": 30, "y": 0 },
+            { "flags": 1, "matrix": [0, 3], "x": 44, "y": 0 },
+            { "flags": 1, "matrix": [0, 4], "x": 58, "y": 0 },
+            { "flags": 1, "matrix": [0, 5], "x": 72, "y": 0 },
+            { "flags": 1, "matrix": [0, 6], "x": 93, "y": 0 },
+            { "flags": 1, "matrix": [0, 7], "x": 107, "y": 0 },
+            { "flags": 1, "matrix": [0, 8], "x": 121, "y": 0 },
+            { "flags": 1, "matrix": [0, 9], "x": 135, "y": 0 },
+            { "flags": 1, "matrix": [0, 10], "x": 156, "y": 0 },
+            { "flags": 1, "matrix": [0, 11], "x": 170, "y": 0 },
+            { "flags": 1, "matrix": [0, 12], "x": 184, "y": 0 },
+            { "flags": 1, "matrix": [0, 13], "x": 198, "y": 0 },
+            { "flags": 1, "matrix": [0, 14], "x": 216, "y": 0 },
+            { "flags": 1, "matrix": [0, 15], "x": 230, "y": 0 },
+            { "flags": 1, "matrix": [0, 16], "x": 244, "y": 0 },
+            { "flags": 1, "matrix": [5, 16], "x": 244, "y": 64 },
+            { "flags": 1, "matrix": [5, 15], "x": 230, "y": 64 },
+            { "flags": 1, "matrix": [5, 14], "x": 216, "y": 64 },
+            { "flags": 1, "matrix": [5, 13], "x": 195, "y": 64 },
+            { "flags": 1, "matrix": [5, 12], "x": 177, "y": 64 },
+            { "flags": 1, "matrix": [5, 10], "x": 160, "y": 64 },
+            { "flags": 1, "matrix": [5, 5], "x": 100, "y": 64 },
+            { "flags": 1, "matrix": [5, 2], "x": 41, "y": 64 },
+            { "flags": 1, "matrix": [5, 1], "x": 23, "y": 64 },
+            { "flags": 1, "matrix": [5, 0], "x": 6, "y": 64 },
+            { "flags": 1, "matrix": [4, 0], "x": 11, "y": 52 },
+            { "flags": 4, "matrix": [4, 1], "x": 34, "y": 52 },
+            { "flags": 4, "matrix": [4, 2], "x": 48, "y": 52 },
+            { "flags": 4, "matrix": [4, 3], "x": 62, "y": 52 },
+            { "flags": 4, "matrix": [4, 4], "x": 76, "y": 52 },
+            { "flags": 4, "matrix": [4, 5], "x": 90, "y": 52 },
+            { "flags": 4, "matrix": [4, 6], "x": 104, "y": 52 },
+            { "flags": 4, "matrix": [4, 7], "x": 118, "y": 52 },
+            { "flags": 4, "matrix": [4, 8], "x": 132, "y": 52 },
+            { "flags": 4, "matrix": [4, 9], "x": 146, "y": 52 },
+            { "flags": 4, "matrix": [4, 10], "x": 160, "y": 52 },
+            { "flags": 1, "matrix": [4, 12], "x": 186, "y": 52 },
+            { "flags": 1, "matrix": [4, 15], "x": 230, "y": 52 },
+            { "flags": 2, "x": 242, "y": 55 },
+            { "flags": 2, "x": 227, "y": 55 },
+            { "flags": 2, "x": 212, "y": 55 },
+            { "flags": 2, "x": 198, "y": 55 },
+            { "flags": 2, "x": 183, "y": 55 },
+            { "flags": 2, "x": 168, "y": 55 },
+            { "flags": 2, "x": 153, "y": 55 },
+            { "flags": 2, "x": 138, "y": 55 },
+            { "flags": 2, "x": 123, "y": 55 },
+            { "flags": 2, "x": 108, "y": 55 },
+            { "flags": 2, "x": 93, "y": 55 },
+            { "flags": 2, "x": 78, "y": 55 },
+            { "flags": 2, "x": 67, "y": 55 },
+            { "flags": 2, "x": 49, "y": 55 },
+            { "flags": 2, "x": 34, "y": 55 },
+            { "flags": 2, "x": 17, "y": 55 },
+            { "flags": 2, "x": 6, "y": 55 },
+            { "flags": 2, "x": 6, "y": 43 },
+            { "flags": 2, "x": 6, "y": 30 },
+            { "flags": 2, "x": 6, "y": 18 },
+            { "flags": 2, "x": 6, "y": 3 },
+            { "flags": 2, "x": 20, "y": 3 },
+            { "flags": 2, "x": 35, "y": 3 },
+            { "flags": 2, "x": 50, "y": 3 },
+            { "flags": 2, "x": 65, "y": 3 },
+            { "flags": 2, "x": 80, "y": 3 },
+            { "flags": 2, "x": 94, "y": 3 },
+            { "flags": 2, "x": 109, "y": 3 },
+            { "flags": 2, "x": 124, "y": 3 },
+            { "flags": 2, "x": 139, "y": 3 },
+            { "flags": 2, "x": 153, "y": 3 },
+            { "flags": 2, "x": 168, "y": 3 },
+            { "flags": 2, "x": 183, "y": 3 },
+            { "flags": 2, "x": 198, "y": 3 },
+            { "flags": 2, "x": 212, "y": 3 },
+            { "flags": 2, "x": 227, "y": 3 },
+            { "flags": 2, "x": 242, "y": 3 },
+            { "flags": 2, "x": 242, "y": 18 },
+            { "flags": 2, "x": 242, "y": 31 },
+            { "flags": 2, "x": 242, "y": 43 }
+        ]
+    },
+    "url": "",
     "usb": {
-        "vid": "0x4C58",
+        "device_version": "1.0.0",
         "pid": "0x0004",
-        "device_version": "0.0.1"
+        "vid": "0x4C58"
     },
     "community_layouts": [
         "tkl_ansi_tsangan"
@@ -14,194 +162,194 @@
     "layouts": {
         "LAYOUT_tkl_ansi_tsangan_split_bs": {
             "layout": [
-                {"label":"Esc", "x":0, "y":0},
-                {"label":"F1", "x":2, "y":0},
-                {"label":"F2", "x":3, "y":0},
-                {"label":"F3", "x":4, "y":0},
-                {"label":"F4", "x":5, "y":0},
-                {"label":"F5", "x":6.5, "y":0},
-                {"label":"F6", "x":7.5, "y":0},
-                {"label":"F7", "x":8.5, "y":0},
-                {"label":"F8", "x":9.5, "y":0},
-                {"label":"F9", "x":11, "y":0},
-                {"label":"F10", "x":12, "y":0},
-                {"label":"F11", "x":13, "y":0},
-                {"label":"F12", "x":14, "y":0},
-                {"label":"PrtSc", "x":15.25, "y":0},
-                {"label":"Scroll Lock", "x":16.25, "y":0},
-                {"label":"Pause", "x":17.25, "y":0},
-
-                {"label":"`~", "x":0, "y":1.25},
-                {"label":"1!", "x":1, "y":1.25},
-                {"label":"2@", "x":2, "y":1.25},
-                {"label":"3#", "x":3, "y":1.25},
-                {"label":"4$", "x":4, "y":1.25},
-                {"label":"5%", "x":5, "y":1.25},
-                {"label":"6^", "x":6, "y":1.25},
-                {"label":"7&", "x":7, "y":1.25},
-                {"label":"8*", "x":8, "y":1.25},
-                {"label":"9(", "x":9, "y":1.25},
-                {"label":"0)", "x":10, "y":1.25},
-                {"label":"-_", "x":11, "y":1.25},
-                {"label":"=+", "x":12, "y":1.25},
-                {"label":"Backspace", "x":13, "y":1.25},
-                {"label":"Delete", "x":14, "y":1.25},
-                {"label":"Insert", "x":15.25, "y":1.25},
-                {"label":"Home", "x":16.25, "y":1.25},
-                {"label":"PgUp", "x":17.25, "y":1.25},
+                { "matrix": [0, 0], "x": 0, "y": 0 },
+                { "matrix": [0, 2], "x": 2, "y": 0 },
+                { "matrix": [0, 3], "x": 3, "y": 0 },
+                { "matrix": [0, 4], "x": 4, "y": 0 },
+                { "matrix": [0, 5], "x": 5, "y": 0 },
+                { "matrix": [0, 6], "x": 6.5, "y": 0 },
+                { "matrix": [0, 7], "x": 7.5, "y": 0 },
+                { "matrix": [0, 8], "x": 8.5, "y": 0 },
+                { "matrix": [0, 9], "x": 9.5, "y": 0 },
+                { "matrix": [0, 10], "x": 11, "y": 0 },
+                { "matrix": [0, 11], "x": 12, "y": 0 },
+                { "matrix": [0, 12], "x": 13, "y": 0 },
+                { "matrix": [0, 13], "x": 14, "y": 0 },
+                { "matrix": [0, 14], "x": 15.25, "y": 0 },
+                { "matrix": [0, 15], "x": 16.25, "y": 0 },
+                { "matrix": [0, 16], "x": 17.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 },
+                { "matrix": [3, 12], "x": 14, "y": 1.25 },
+                { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+                { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+                { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
 
-                {"label":"Tab", "x":0, "y":2.25, "w":1.5},
-                {"label":"Q", "x":1.5, "y":2.25},
-                {"label":"W", "x":2.5, "y":2.25},
-                {"label":"E", "x":3.5, "y":2.25},
-                {"label":"R", "x":4.5, "y":2.25},
-                {"label":"T", "x":5.5, "y":2.25},
-                {"label":"Y", "x":6.5, "y":2.25},
-                {"label":"U", "x":7.5, "y":2.25},
-                {"label":"I", "x":8.5, "y":2.25},
-                {"label":"O", "x":9.5, "y":2.25},
-                {"label":"P", "x":10.5, "y":2.25},
-                {"label":"[{", "x":11.5, "y":2.25},
-                {"label":"]}", "x":12.5, "y":2.25},
-                {"label":"\\|", "x":13.5, "y":2.25, "w":1.5},
-                {"label":"Delete", "x":15.25, "y":2.25},
-                {"label":"End", "x":16.25, "y":2.25},
-                {"label":"PgDn", "x":17.25, "y":2.25},
+                { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+                { "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, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+                { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+                { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+                { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
 
-                {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
-                {"label":"A", "x":1.75, "y":3.25},
-                {"label":"S", "x":2.75, "y":3.25},
-                {"label":"D", "x":3.75, "y":3.25},
-                {"label":"F", "x":4.75, "y":3.25},
-                {"label":"G", "x":5.75, "y":3.25},
-                {"label":"H", "x":6.75, "y":3.25},
-                {"label":"J", "x":7.75, "y":3.25},
-                {"label":"K", "x":8.75, "y":3.25},
-                {"label":"L", "x":9.75, "y":3.25},
-                {"label":";:", "x":10.75, "y":3.25},
-                {"label":"'\"", "x":11.75, "y":3.25},
-                {"label":"Enter", "x":12.75, "y":3.25, "w":2.25},
+                { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+                { "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], "w": 2.25, "x": 12.75, "y": 3.25 },
 
-                {"label":"Shift", "x":0, "y":4.25, "w":2.25},
-                {"label":"Z", "x":2.25, "y":4.25},
-                {"label":"X", "x":3.25, "y":4.25},
-                {"label":"C", "x":4.25, "y":4.25},
-                {"label":"V", "x":5.25, "y":4.25},
-                {"label":"B", "x":6.25, "y":4.25},
-                {"label":"N", "x":7.25, "y":4.25},
-                {"label":"M", "x":8.25, "y":4.25},
-                {"label":",<", "x":9.25, "y":4.25},
-                {"label":".>", "x":10.25, "y":4.25},
-                {"label":"/?", "x":11.25, "y":4.25},
-                {"label":"Shift", "x":12.25, "y":4.25, "w":2.75},
-                {"label":"\u2191", "x":16.25, "y":4.25},
+                { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+                { "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+                { "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+                { "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+                { "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+                { "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+                { "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+                { "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+                { "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+                { "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+                { "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+                { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+                { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
 
-                {"label":"Ctrl", "x":0, "y":5.25, "w":1.5},
-                {"label":"Win", "x":1.5, "y":5.25},
-                {"label":"Alt", "x":2.5, "y":5.25, "w":1.5},
-                {"label":"Space", "x":4, "y":5.25, "w":7},
-                {"label":"Alt", "x":11, "y":5.25, "w":1.5},
-                {"label":"Fn", "x":12.5, "y":5.25},
-                {"label":"Ctrl", "x":13.5, "y":5.25, "w":1.5},
-                {"label":"\u2190", "x":15.25, "y":5.25},
-                {"label":"\u2193", "x":16.25, "y":5.25},
-                {"label":"\u2192", "x":17.25, "y":5.25}
+                { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+                { "matrix": [5, 1], "x": 1.5, "y": 5.25 },
+                { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+                { "matrix": [5, 5], "w": 7, "x": 4, "y": 5.25 },
+                { "matrix": [5, 10], "w": 1.5, "x": 11, "y": 5.25 },
+                { "matrix": [5, 12], "x": 12.5, "y": 5.25 },
+                { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+                { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+                { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+                { "matrix": [5, 16], "x": 17.25, "y": 5.25 }
             ]
         },
         "LAYOUT_tkl_ansi_tsangan": {
             "layout": [
-                {"label":"Esc", "x":0, "y":0},
-                {"label":"F1", "x":2, "y":0},
-                {"label":"F2", "x":3, "y":0},
-                {"label":"F3", "x":4, "y":0},
-                {"label":"F4", "x":5, "y":0},
-                {"label":"F5", "x":6.5, "y":0},
-                {"label":"F6", "x":7.5, "y":0},
-                {"label":"F7", "x":8.5, "y":0},
-                {"label":"F8", "x":9.5, "y":0},
-                {"label":"F9", "x":11, "y":0},
-                {"label":"F10", "x":12, "y":0},
-                {"label":"F11", "x":13, "y":0},
-                {"label":"F12", "x":14, "y":0},
-                {"label":"PrtSc", "x":15.25, "y":0},
-                {"label":"Scroll Lock", "x":16.25, "y":0},
-                {"label":"Pause", "x":17.25, "y":0},
-
-                {"label":"`~", "x":0, "y":1.25},
-                {"label":"1!", "x":1, "y":1.25},
-                {"label":"2@", "x":2, "y":1.25},
-                {"label":"3#", "x":3, "y":1.25},
-                {"label":"4$", "x":4, "y":1.25},
-                {"label":"5%", "x":5, "y":1.25},
-                {"label":"6^", "x":6, "y":1.25},
-                {"label":"7&", "x":7, "y":1.25},
-                {"label":"8*", "x":8, "y":1.25},
-                {"label":"9(", "x":9, "y":1.25},
-                {"label":"0)", "x":10, "y":1.25},
-                {"label":"-_", "x":11, "y":1.25},
-                {"label":"=+", "x":12, "y":1.25},
-                {"label":"Backspace", "x":13, "y":1.25, "w":2},
-                {"label":"Insert", "x":15.25, "y":1.25},
-                {"label":"Home", "x":16.25, "y":1.25},
-                {"label":"PgUp", "x":17.25, "y":1.25},
-
-                {"label":"Tab", "x":0, "y":2.25, "w":1.5},
-                {"label":"Q", "x":1.5, "y":2.25},
-                {"label":"W", "x":2.5, "y":2.25},
-                {"label":"E", "x":3.5, "y":2.25},
-                {"label":"R", "x":4.5, "y":2.25},
-                {"label":"T", "x":5.5, "y":2.25},
-                {"label":"Y", "x":6.5, "y":2.25},
-                {"label":"U", "x":7.5, "y":2.25},
-                {"label":"I", "x":8.5, "y":2.25},
-                {"label":"O", "x":9.5, "y":2.25},
-                {"label":"P", "x":10.5, "y":2.25},
-                {"label":"[{", "x":11.5, "y":2.25},
-                {"label":"]}", "x":12.5, "y":2.25},
-                {"label":"\\|", "x":13.5, "y":2.25, "w":1.5},
-                {"label":"Delete", "x":15.25, "y":2.25},
-                {"label":"End", "x":16.25, "y":2.25},
-                {"label":"PgDn", "x":17.25, "y":2.25},
+                { "matrix": [0, 0], "x": 0, "y": 0 },
+                { "matrix": [0, 2], "x": 2, "y": 0 },
+                { "matrix": [0, 3], "x": 3, "y": 0 },
+                { "matrix": [0, 4], "x": 4, "y": 0 },
+                { "matrix": [0, 5], "x": 5, "y": 0 },
+                { "matrix": [0, 6], "x": 6.5, "y": 0 },
+                { "matrix": [0, 7], "x": 7.5, "y": 0 },
+                { "matrix": [0, 8], "x": 8.5, "y": 0 },
+                { "matrix": [0, 9], "x": 9.5, "y": 0 },
+                { "matrix": [0, 10], "x": 11, "y": 0 },
+                { "matrix": [0, 11], "x": 12, "y": 0 },
+                { "matrix": [0, 12], "x": 13, "y": 0 },
+                { "matrix": [0, 13], "x": 14, "y": 0 },
+                { "matrix": [0, 14], "x": 15.25, "y": 0 },
+                { "matrix": [0, 15], "x": 16.25, "y": 0 },
+                { "matrix": [0, 16], "x": 17.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], "w":2, "x": 13, "y": 1.25 },
+                { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+                { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+                { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
 
-                {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
-                {"label":"A", "x":1.75, "y":3.25},
-                {"label":"S", "x":2.75, "y":3.25},
-                {"label":"D", "x":3.75, "y":3.25},
-                {"label":"F", "x":4.75, "y":3.25},
-                {"label":"G", "x":5.75, "y":3.25},
-                {"label":"H", "x":6.75, "y":3.25},
-                {"label":"J", "x":7.75, "y":3.25},
-                {"label":"K", "x":8.75, "y":3.25},
-                {"label":"L", "x":9.75, "y":3.25},
-                {"label":";:", "x":10.75, "y":3.25},
-                {"label":"'\"", "x":11.75, "y":3.25},
-                {"label":"Enter", "x":12.75, "y":3.25, "w":2.25},
+                { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+                { "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, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+                { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+                { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+                { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
 
-                {"label":"Shift", "x":0, "y":4.25, "w":2.25},
-                {"label":"Z", "x":2.25, "y":4.25},
-                {"label":"X", "x":3.25, "y":4.25},
-                {"label":"C", "x":4.25, "y":4.25},
-                {"label":"V", "x":5.25, "y":4.25},
-                {"label":"B", "x":6.25, "y":4.25},
-                {"label":"N", "x":7.25, "y":4.25},
-                {"label":"M", "x":8.25, "y":4.25},
-                {"label":",<", "x":9.25, "y":4.25},
-                {"label":".>", "x":10.25, "y":4.25},
-                {"label":"/?", "x":11.25, "y":4.25},
-                {"label":"Shift", "x":12.25, "y":4.25, "w":2.75},
-                {"label":"\u2191", "x":16.25, "y":4.25},
+                { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+                { "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], "w": 2.25, "x": 12.75, "y": 3.25 },
 
-                {"label":"Ctrl", "x":0, "y":5.25, "w":1.5},
-                {"label":"Win", "x":1.5, "y":5.25},
-                {"label":"Alt", "x":2.5, "y":5.25, "w":1.5},
-                {"label":"Space", "x":4, "y":5.25, "w":7},
-                {"label":"Alt", "x":11, "y":5.25, "w":1.5},
-                {"label":"Fn", "x":12.5, "y":5.25},
-                {"label":"Ctrl", "x":13.5, "y":5.25, "w":1.5},
-                {"label":"\u2190", "x":15.25, "y":5.25},
-                {"label":"\u2193", "x":16.25, "y":5.25},
-                {"label":"\u2192", "x":17.25, "y":5.25}
+                { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+                { "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+                { "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+                { "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+                { "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+                { "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+                { "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+                { "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+                { "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+                { "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+                { "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+                { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+                { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+                
+                { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+                { "matrix": [5, 1], "x": 1.5, "y": 5.25 },
+                { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+                { "matrix": [5, 5], "w": 7, "x": 4, "y": 5.25 },
+                { "matrix": [5, 10], "w": 1.5, "x": 11, "y": 5.25 },
+                { "matrix": [5, 12], "x": 12.5, "y": 5.25 },
+                { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+                { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+                { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+                { "matrix": [5, 16], "x": 17.25, "y": 5.25 }
             ]
         }
     }
-}
+}
\ No newline at end of file
diff --git a/keyboards/linworks/fave84h/keymaps/default/keymap.c b/keyboards/linworks/fave84h/keymaps/default/keymap.c
index 596261c96b..64e5dc07d3 100644
--- a/keyboards/linworks/fave84h/keymaps/default/keymap.c
+++ b/keyboards/linworks/fave84h/keymaps/default/keymap.c
@@ -37,8 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          EE_CLR,
         KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,                      KC_VOLU,
         KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                                     KC_TRNS, KC_TRNS, KC_TRNS,             KC_MPRV, KC_VOLD, KC_MNXT
-    ),
-
+    )
 };
 
 bool rgb_matrix_indicators_user(void) {
diff --git a/keyboards/linworks/fave84h/keymaps/via/keymap.c b/keyboards/linworks/fave84h/keymaps/via/keymap.c
index 0cc5a93d13..bfc3c69b8a 100644
--- a/keyboards/linworks/fave84h/keymaps/via/keymap.c
+++ b/keyboards/linworks/fave84h/keymaps/via/keymap.c
@@ -57,14 +57,135 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
         KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,                      KC_TRNS,
         KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                                     KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS, KC_TRNS, KC_TRNS
-    ),
+    )
+};
+
+// Single Indicator memory layout
+typedef struct _indicator_config_t {
+    uint8_t h;
+    uint8_t s;
+    uint8_t v;
+    bool    enabled;
+} indicator_config;
+
+// Board memory layout
+typedef struct _fave_config_t {
+    indicator_config caps;
+} fave_config;
 
+fave_config fave;
+
+void eeconfig_init_user(void) {
+    // Default values
+    fave.caps.h       = 0;
+    fave.caps.s       = 0;
+    fave.caps.v       = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
+    fave.caps.enabled = true;
+
+    // Write default value to EEPROM now
+    eeconfig_update_kb_datablock(&fave);
+}
+
+enum via_fave {
+    id_caps_indicator_enabled    = 1,
+    id_caps_indicator_brightness = 2,
+    id_caps_indicator_color      = 3
 };
 
+//On Keyboard startup
+void keyboard_post_init_user(void) {
+    //Read our custom menu variables from memory
+    eeconfig_read_kb_datablock(&fave);
+}
+
 bool rgb_matrix_indicators_user(void) {
-    led_t host_leds = host_keyboard_led_state();
-    if (host_leds.caps_lock) {
-        rgb_matrix_set_color(12, 254, 189, 41); // set caps lock led color first number is index, R G B
+    if (fave.caps.enabled) {
+        // The rgb_matrix_set_color function needs an RGB code to work, so first the indicator color is cast to an HSV value and then translated to RGB
+        HSV hsv_caps_indicator_color = {fave.caps.h, fave.caps.s, fave.caps.v};
+        RGB rgb_caps_indicator_color = hsv_to_rgb(hsv_caps_indicator_color);
+        if (host_keyboard_led_state().caps_lock)
+            rgb_matrix_set_color(CAPS_INDICATOR_INDEX, rgb_caps_indicator_color.r, rgb_caps_indicator_color.g, rgb_caps_indicator_color.b);
+    }
+
+    return true;
+}
+
+void fave_config_set_value(uint8_t *data) {
+    // data = [ value_id, value_data ]
+    uint8_t *value_id   = &(data[0]);
+    uint8_t *value_data = &(data[1]);
+
+    switch (*value_id) {
+        case id_caps_indicator_enabled: {
+            fave.caps.enabled = value_data[0];
+            break;
+        }
+        case id_caps_indicator_brightness: {
+            fave.caps.v = value_data[0];
+            break;
+        }
+        case id_caps_indicator_color: {
+            fave.caps.h = value_data[0];
+            fave.caps.s = value_data[1];
+            break;
+        }
     }
-    return false;
+}
+
+void fave_config_get_value(uint8_t *data) {
+    // data = [ value_id, value_data ]
+    uint8_t *value_id   = &(data[0]);
+    uint8_t *value_data = &(data[1]);
+
+    switch (*value_id) {
+        case id_caps_indicator_enabled: {
+            value_data[0] = fave.caps.enabled;
+            break;
+        }
+        case id_caps_indicator_brightness: {
+            value_data[0] = fave.caps.v;
+            break;
+        }
+        case id_caps_indicator_color: {
+            value_data[0] = fave.caps.h;
+            value_data[1] = fave.caps.s;
+            break;
+        }
+    }
+}
+
+void fave_config_save(void) {
+    eeconfig_update_kb_datablock(&fave);
+}
+
+void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
+    // data = [ command_id, channel_id, value_id, value_data ]
+    uint8_t *command_id        = &(data[0]);
+    uint8_t *channel_id        = &(data[1]);
+    uint8_t *value_id_and_data = &(data[2]);
+
+    if (*channel_id == id_custom_channel) {
+        switch (*command_id) {
+            case id_custom_set_value: {
+                fave_config_set_value(value_id_and_data);
+                break;
+            }
+            case id_custom_get_value: {
+                fave_config_get_value(value_id_and_data);
+                break;
+            }
+            case id_custom_save: {
+                fave_config_save();
+                break;
+            }
+            default: {
+                // Unhandled message.
+                *command_id = id_unhandled;
+                break;
+            }
+        }
+        return;
+    }
+
+    *command_id = id_unhandled;
 }
diff --git a/keyboards/linworks/fave84h/rules.mk b/keyboards/linworks/fave84h/rules.mk
index c3ddbe4252..713f7f8a41 100644
--- a/keyboards/linworks/fave84h/rules.mk
+++ b/keyboards/linworks/fave84h/rules.mk
@@ -1,23 +1,3 @@
-# MCU name
-MCU = atmega32u4
 
 # Processor frequency
 F_CPU = 8000000
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# Build Options
-#   change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes     # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no       # 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
-RGB_MATRIX_ENABLE = yes
-RGB_MATRIX_DRIVER = WS2812
-- 
cgit v1.2.3


From bc3c6f0831939198e5e97e91bb5ff33c2ba444ae Mon Sep 17 00:00:00 2001
From: buzzlighter1 <mikhail.evtushenko@gmail.com>
Date: Fri, 10 Feb 2023 07:03:56 +0300
Subject: Update buzzlighter1 keymap (#19757)

Co-authored-by: zvecr <git@zvecr.com>
---
 keyboards/xiudi/xd75/keymaps/buzzlighter1/config.h |  5 --
 keyboards/xiudi/xd75/keymaps/buzzlighter1/keymap.c | 99 ++++++----------------
 .../xiudi/xd75/keymaps/buzzlighter1/readme.md      | 56 +-----------
 keyboards/xiudi/xd75/keymaps/buzzlighter1/rules.mk |  4 +-
 4 files changed, 29 insertions(+), 135 deletions(-)
 delete mode 100644 keyboards/xiudi/xd75/keymaps/buzzlighter1/config.h

diff --git a/keyboards/xiudi/xd75/keymaps/buzzlighter1/config.h b/keyboards/xiudi/xd75/keymaps/buzzlighter1/config.h
deleted file mode 100644
index 84f050577c..0000000000
--- a/keyboards/xiudi/xd75/keymaps/buzzlighter1/config.h
+++ /dev/null
@@ -1,5 +0,0 @@
-
-#pragma once
-
-#define FORCE_NKRO
-#define RGBLIGHT_SLEEP
diff --git a/keyboards/xiudi/xd75/keymaps/buzzlighter1/keymap.c b/keyboards/xiudi/xd75/keymaps/buzzlighter1/keymap.c
index f2d483fff4..6dcdcdef18 100644
--- a/keyboards/xiudi/xd75/keymaps/buzzlighter1/keymap.c
+++ b/keyboards/xiudi/xd75/keymaps/buzzlighter1/keymap.c
@@ -1,113 +1,66 @@
 #include QMK_KEYBOARD_H
-
-// Layer shorthand
 #define _QW 0
 #define _FN 1
 
-// Defines the keycodes used by our macros in process_record_user
-enum custom_keycodes {
-  QMKBEST = SAFE_RANGE,
-  QMKURL
-};
-
-#define FN_CAPS  LT(_FN, KC_CAPS)
-
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* QWERTY
  * .--------------------------------------------------------------------------------------------------------------------------------------.
- * | GESC   | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | Del    | BACKSP |
+ * | ESC    | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | Del    | BACKSP |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | [      | ]      | \      | Mute   |
+ * | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | [      | ]      | HOME   | CAPS   |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
- * | FN(CPS)| A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      | Vol-   | Vol+   | ENTER  |
+ * | TT(FN) | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      | \      | END    | ENTER  |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
- * | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | Home   | PGUP   | UP     | PGDWN  |
+ * | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | Vol+   | PGUP   | UP     | PGDWN  |
  * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL  | Del    | ENTER  | LALT   |                             SPACE                            | End    | LEFT   | DOWN   | RIGHT  |
+ * | LCTRL  | WIN    | MUTE   | LALT   |                             SPACE                            | Vol-   | LEFT   | DOWN   | RIGHT  |
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
 
   [_QW] = LAYOUT_ortho_5x15( /* QWERTY */
-    QK_GESC, 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_DEL,  KC_BSPC,
-    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_MUTE,
-    FN_CAPS,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_VOLD, KC_VOLU, KC_ENT,
-    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_HOME, KC_PGUP, KC_UP,   KC_PGDN,
-    KC_LCTL, KC_MPRV, KC_MNXT, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  XXXXXXX, XXXXXXX, XXXXXXX, KC_END,  KC_LEFT, KC_DOWN, KC_RGHT
+    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_DEL,  KC_BSPC,
+    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_HOME, KC_CAPS,
+    TT(1),   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_BSLS, KC_END,  KC_ENT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_VOLU, KC_PGUP, KC_UP,   KC_PGDN,
+    KC_LCTL, KC_LGUI, KC_MUTE, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD,  KC_LEFT, KC_DOWN, KC_RGHT
   ),
 
 /* FUNCTION
  * .--------------------------------------------------------------------------------------------------------------------------------------.
- * | XXXXXXX| F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | F11    | F12    | _______| _______|
+ * | GRV    | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | F11    | F12    | _______| _______|
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | _______| P7     | P8     | P9     | +      | P*     | XXXXXXX| PR SCR | SCR LK | PAUSE  | XXXXXXX| BL_DOWN| BL_UP  | RGB HD | RGB HI |
+ * | _______| P7     | P8     | P9     | +      | P*     | XXXXXXX| XXXXXXX| NKRON  | NKROFF | XXXXXXX| BL_DEC | BL_INC | RGB HD | RGB HI |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | _______| P4     | P5     | P6     | NumLk  | CALC   | XXXXXXX| POWER  | XXXXXXX| QK_BOOT| XXXXXXX| BL_BRTG| BL_STEP| RGB SD | RGB SI |
+ * | _______| P4     | P5     | P6     | NumLk  | CALC   | RESET  | BOOTLDR| CLEAREE| XXXXXXX| XXXXXXX| BL_BRTG| BL_STEP| RGB SD | RGB SI |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | _______| P1     | P2     | P3     | -      | P/     | XXXXXXX| OS     |  PLAY  | PREV   | NXT    | BL_OFF | BL_ON  | RGB VD | RGB VI |
+ * | _______| P1     | P2     | P3     | -      | P/     | XXXXXXX| XXXXXXX|  PREV  | NXT    | PLAY   | BL_OFF | BL_ON  | RGB VD | RGB VI |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  * | _______| P0     | P.     | PENT   |                             SPACE                            | BL_TOGG| RGB TG | RGB RMD| RGB MD |
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
 
   [_FN] = LAYOUT_ortho_5x15( /* FUNCTION */
-    XXXXXXX, 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_P7,   KC_P8,   KC_P9,   KC_PPLS, KC_PAST, XXXXXXX, KC_SCRL, KC_PAUS, XXXXXXX, XXXXXXX, BL_DOWN, BL_UP,   RGB_HUD, RGB_HUI,
-    _______, KC_P4,   KC_P5,   KC_P6,   KC_NUM,  KC_CALC, XXXXXXX, KC_PWR,  XXXXXXX, QK_BOOT, XXXXXXX, BL_BRTG, BL_STEP, RGB_SAD, RGB_SAI,
-    _______, KC_P1,   KC_P2,   KC_P3,   KC_PMNS, KC_PSLS, XXXXXXX, KC_LWIN, KC_MPLY, KC_MPRV, KC_MNXT, BL_OFF,  BL_ON,   RGB_VAD, RGB_VAI,
+    KC_GRV,  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_P7,   KC_P8,   KC_P9,   KC_PPLS, KC_PAST, XXXXXXX, XXXXXXX, NK_ON,   NK_OFF,  XXXXXXX, BL_DEC,  BL_INC,  RGB_HUD, RGB_HUI,
+    _______, KC_P4,   KC_P5,   KC_P6,   KC_LNUM, KC_CALC, QK_RBT,  QK_BOOT, EE_CLR,  XXXXXXX, XXXXXXX, BL_BRTG, BL_STEP, RGB_SAD, RGB_SAI,
+    _______, KC_P1,   KC_P2,   KC_P3,   KC_PMNS, KC_PSLS, XXXXXXX, XXXXXXX, KC_MPRV, KC_MNXT, KC_MPLY, BL_OFF,  BL_ON,   RGB_VAD, RGB_VAI,
     _______, KC_P0,   KC_PDOT, KC_PENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG, RGB_TOG, RGB_RMOD,RGB_MOD
   )
 };
 
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-  switch (keycode) {
-    case QMKBEST:
-      if (record->event.pressed) {
-        // when keycode QMKBEST is pressed
-        SEND_STRING("QMK is the best thing ever!");
-      } else {
-        // when keycode QMKBEST is released
-      }
-      break;
-    case QMKURL:
-      if (record->event.pressed) {
-        // when keycode QMKURL is pressed
-        SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
-      } else {
-        // when keycode QMKURL is released
-      }
-      break;
-  }
-  return true;
-}
-
-void matrix_init_user(void) {
-
-}
-
-void matrix_scan_user(void) {
-
-}
-
-void led_set_user(uint8_t usb_led) {
-    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+bool led_update_user(led_t led_state) {
+    if (led_state.caps_lock) {
         capslock_led_on();
     } else {
         capslock_led_off();
     }
-}
 
-// Runs whenever there is a layer state change.
-layer_state_t layer_state_set_user(layer_state_t state) {
-  uint8_t layer = get_highest_layer(state);
-
-  gp100_led_off();
-  //gp103_led_off();
-
-  // turns on gp100 (top left led) for odd layers
-  if (layer & (1<<0)) gp100_led_on();
-  // turns on gp103 (top mid led) for layers 2, 6, ...
-  //if (layer & (1<<1)) gp103_led_on();
+    if (IS_LAYER_ON(_FN)) {
+      gp100_led_on();
+    } else {
+      gp100_led_off();
+    }
 
-  return state;
+    return false;
 }
diff --git a/keyboards/xiudi/xd75/keymaps/buzzlighter1/readme.md b/keyboards/xiudi/xd75/keymaps/buzzlighter1/readme.md
index efa4e6bde1..1b0ac3020a 100644
--- a/keyboards/xiudi/xd75/keymaps/buzzlighter1/readme.md
+++ b/keyboards/xiudi/xd75/keymaps/buzzlighter1/readme.md
@@ -1,54 +1,2 @@
-# XD75 with 7U spacebar for EN-RU gamers
- * Standard QWERTY made for gamers with a Russian alternative input.
- * The keys for extra letters in RU alphabet are where they are expected.
- * Full 2x4 nav cluster.
- * Volume/mute control are on base layer, Win key is on function layer.
- * FN_CAPS provides fast F-keys access while gaming. Lefthanded Numpad operation.
- * NKRO is on (forced).
-
-## Layout
-```c
-/* QWERTY
- * .--------------------------------------------------------------------------------------------------------------------------------------.
- * | GESC   | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | Del    | BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | [      | ]      | \      | Mute   |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
- * | FN(CPS)| A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      | Vol-   | Vol+   | ENTER  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
- * | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | Home   | PGUP   | UP     | PGDWN  |
- * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL  | Del    | ENTER  | LALT   |                             SPACE                            | End    | LEFT   | DOWN   | RIGHT  |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-```
-```c
-/* FUNCTION
- * .--------------------------------------------------------------------------------------------------------------------------------------.
- * | XXXXXXX| F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | F11    | F12    | _______| _______|
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | _______| P7     | P8     | P9     | +      | P*     | XXXXXXX| PR SCR | SCR LK | PAUSE  | XXXXXXX| BL_DOWN| BL_UP  | RGB HD | RGB HI |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | _______| P4     | P5     | P6     | NumLk  | CALC   | XXXXXXX| POWER  | XXXXXXX| RESET  | XXXXXXX| BL_BRTG| BL_STEP| RGB SD | RGB SI |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | _______| P1     | P2     | P3     | -      | P/     | XXXXXXX| OS     |  PLAY  | PREV   | NXT    | BL_OFF | BL_ON  | RGB VD | RGB VI |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | _______| P0     | P.     | PENT   |                             SPACE                            | BL_TOGG| RGB TG | RGB RMD| RGB MD |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-```
-## LEDs
-Top left LED - Function layer active.
-Mid left LED - CapsLock active.
-
-## Compile
-
-go to qmk top directory.
-```
-$ cd qmk_firmware
-```
-
-build
-```
-$ make xiudi/xd75:buzzlighter1
-```
+# XD75 with 7U spacebar
+Two layers - qwerty and combined function + adjust. Backlight and "RGB" disabled. NKRO enabled.
diff --git a/keyboards/xiudi/xd75/keymaps/buzzlighter1/rules.mk b/keyboards/xiudi/xd75/keymaps/buzzlighter1/rules.mk
index 108a4f6330..6420d6b81c 100644
--- a/keyboards/xiudi/xd75/keymaps/buzzlighter1/rules.mk
+++ b/keyboards/xiudi/xd75/keymaps/buzzlighter1/rules.mk
@@ -1,4 +1,2 @@
-
-BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
-BACKLIGHT_ENABLE = yes
 RGBLIGHT_ENABLE = no
+NKRO_ENABLE = yes
-- 
cgit v1.2.3


From 3b987f4a9d224e2ef5765b306ad25afbb28ce7a2 Mon Sep 17 00:00:00 2001
From: FLinguenheld <90783310+FLinguenheld@users.noreply.github.com>
Date: Fri, 10 Feb 2023 10:07:39 +0100
Subject: [Keyboard] Flinguenheld (#19661)

---
 .../aurora/sweep/keymaps/flinguenheld/config.h     |  75 ++++
 .../keymaps/flinguenheld/features/auto_shift.c     | 199 +++++++++
 .../sweep/keymaps/flinguenheld/features/combo.c    | 275 +++++++++++++
 .../sweep/keymaps/flinguenheld/features/leader.c   | 268 ++++++++++++
 .../aurora/sweep/keymaps/flinguenheld/keycodes.h   |  44 ++
 .../aurora/sweep/keymaps/flinguenheld/keymap.c     | 133 ++++++
 .../sweep/keymaps/flinguenheld/oled/glcdfont.c     | 232 +++++++++++
 .../aurora/sweep/keymaps/flinguenheld/oled/oled.c  | 457 +++++++++++++++++++++
 .../aurora/sweep/keymaps/flinguenheld/readme.md    | 130 ++++++
 .../aurora/sweep/keymaps/flinguenheld/rules.mk     |  22 +
 10 files changed, 1835 insertions(+)
 create mode 100644 keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/config.h
 create mode 100644 keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c
 create mode 100644 keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c
 create mode 100644 keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/leader.c
 create mode 100644 keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keycodes.h
 create mode 100644 keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keymap.c
 create mode 100644 keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/glcdfont.c
 create mode 100644 keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/oled.c
 create mode 100644 keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/readme.md
 create mode 100644 keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/rules.mk

diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/config.h b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/config.h
new file mode 100644
index 0000000000..c147d5e67f
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/config.h
@@ -0,0 +1,75 @@
+/* Copyright 2023 Florent Linguenheld (@FLinguenheld)
+ *
+ * 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
+
+/* Flash */
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET              // Activates the double-tap behavior
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // Timeout window in ms in which the double tap can occur.
+
+/* OLED */
+#undef OLED_FONT_H
+#define OLED_FONT_H "./oled/glcdfont.c"
+
+#define  OLED_TIMEOUT 25000
+#define OLED_BRIGHTNESS 60 // Protect my eyesss
+#define SPLIT_LAYER_STATE_ENABLE
+#define SPLIT_MODS_ENABLE
+#define SPLIT_OLED_ENABLE
+
+/* Auto shift ♥ */
+#define AUTO_SHIFT_TIMEOUT 115
+
+/* Redefine CTRL + space (See space cadet shift) */
+#define LCPO_KEYS KC_LCTL, KC_TRNS, KC_SPC
+
+/* Unicode */
+// #define UNICODE_SELECTED_MODES UC_LNX
+#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX
+
+/* leader */
+#define LEADER_PER_KEY_TIMING
+#define LEADER_TIMEOUT 280
+#define LEADER_NO_TIMEOUT
+
+/* Mouse */
+#define MK_3_SPEED
+#define MK_MOMENTARY_ACCEL
+
+#define MK_C_OFFSET_0 1
+#define MK_C_INTERVAL_0 12
+
+#define MK_C_OFFSET_1 4
+#define MK_C_INTERVAL_1 18
+
+#define MK_C_OFFSET_UNMOD 13
+#define MK_C_INTERVAL_UNMOD 15
+
+#define MK_C_OFFSET_2 25
+#define MK_C_INTERVAL_2 10
+
+
+#define MK_W_OFFSET_0 1
+#define MK_W_INTERVAL_0 160
+
+#define MK_W_OFFSET_1 2
+#define MK_W_INTERVAL_1 120
+
+#define MK_W_OFFSET_UNMOD 4
+#define MK_W_INTERVAL_UNMOD 70
+
+#define MK_W_OFFSET_2 10
+#define MK_W_INTERVAL_2 30
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c
new file mode 100644
index 0000000000..d6bd3818b4
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c
@@ -0,0 +1,199 @@
+// Copyright 2023 Florent Linguenheld (@FLinguenheld)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+#include "keycodes.h"
+
+/* Only for basis letters
+   Exceptions like Tab or Enter */
+bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
+
+    switch (keycode) {
+
+        case KC_TAB:
+        case KC_ENT:
+
+        // --
+        case KC_A:
+        case KC_B:
+        case KC_C:
+        case KC_D:
+        case KC_E:
+        case KC_F:
+        case KC_G:
+        case KC_H:
+        case KC_I:
+        case KC_J:
+        case KC_K:
+        case KC_L:
+        case KC_M:
+        case KC_N:
+        case KC_O:
+        case KC_P:
+        case KC_Q:
+        case KC_R:
+        case KC_S:
+        case KC_T:
+        case KC_U:
+        case KC_V:
+        case KC_W:
+        case KC_X:
+        case KC_Y:
+        case KC_Z:
+
+            return true;
+    }
+
+    return get_custom_auto_shifted_key(keycode, record);
+}
+
+
+/* Custom auto shift
+   I use this instead of tap dance because double tap is horrible
+   Add here the letter or the custom enum, then add in press_user and press_release the actions */
+bool get_custom_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
+    switch(keycode) {
+
+        case KC_BSPC:
+        case KC_LABK:  // Easy indent with vim
+        case KC_RABK:
+
+        /* French */
+        case CS_E_ACUTE:
+
+        case CS_A_GRAVE:
+        case CS_E_GRAVE:
+        case CS_I_GRAVE:
+        case CS_O_GRAVE:
+        case CS_U_GRAVE:
+
+        case CS_A_CIRCUMFLEX:
+        case CS_E_CIRCUMFLEX:
+        case CS_I_CIRCUMFLEX:
+        case CS_O_CIRCUMFLEX:
+        case CS_U_CIRCUMFLEX:
+
+        case CS_A_DIAERESIS:
+        case CS_E_DIAERESIS:
+        case CS_I_DIAERESIS:
+        case CS_O_DIAERESIS:
+        case CS_U_DIAERESIS:
+        case CS_Y_DIAERESIS:
+
+        case CS_C_CEDILLA:
+        case CS_AE:
+        case CS_OE:
+
+            return true;
+
+        default:
+            return false;
+    }
+}
+
+void autoshift_press_user(uint16_t keycode, bool shifted, keyrecord_t *record) {
+    switch(keycode) {
+
+        case KC_BSPC:
+            register_code16((!shifted) ? KC_BSPC : KC_DEL);
+            break;
+
+        case KC_LABK:
+            if (shifted) { send_unicode_string("<<"); }
+            else         { send_unicode_string("<"); } break;
+
+        case KC_RABK:
+            if (shifted) { send_unicode_string(">>"); }
+            else         { send_unicode_string(">"); } break;
+
+        /* French
+           Release is not necessary with 'send_unicode_string()' */
+        case CS_E_ACUTE:
+            if (shifted) { send_unicode_string("É"); }
+            else         { send_unicode_string("é"); } break;
+
+        case CS_A_GRAVE:
+            if (shifted) { send_unicode_string("À"); }
+            else         { send_unicode_string("à"); } break;
+        case CS_E_GRAVE:
+            if (shifted) { send_unicode_string("È"); }
+            else         { send_unicode_string("è"); } break;
+        case CS_I_GRAVE:
+            if (shifted) { send_unicode_string("Ì"); }
+            else         { send_unicode_string("ì"); } break;
+        case CS_O_GRAVE:
+            if (shifted) { send_unicode_string("Ò"); }
+            else         { send_unicode_string("ò"); } break;
+        case CS_U_GRAVE:
+            if (shifted) { send_unicode_string("Ù"); }
+            else         { send_unicode_string("ù"); } break;
+
+        case CS_A_CIRCUMFLEX:
+            if (shifted) { send_unicode_string("Â"); }
+            else         { send_unicode_string("â"); }  break;
+        case CS_E_CIRCUMFLEX:
+            if (shifted) { send_unicode_string("Ê"); }
+            else         { send_unicode_string("ê"); }  break;
+        case CS_I_CIRCUMFLEX:
+            if (shifted) { send_unicode_string("Î"); }
+            else         { send_unicode_string("î"); }  break;
+        case CS_O_CIRCUMFLEX:
+            if (shifted) { send_unicode_string("Ô"); }
+            else         { send_unicode_string("ô"); }  break;
+        case CS_U_CIRCUMFLEX:
+            if (shifted) { send_unicode_string("Û"); }
+            else         { send_unicode_string("û"); }  break;
+
+        case CS_A_DIAERESIS:
+            if (shifted) { send_unicode_string("Ä"); }
+            else         { send_unicode_string("ä"); }  break;
+        case CS_E_DIAERESIS:
+            if (shifted) { send_unicode_string("Ë"); }
+            else         { send_unicode_string("ë"); }  break;
+        case CS_I_DIAERESIS:
+            if (shifted) { send_unicode_string("Ï"); }
+            else         { send_unicode_string("ï"); }  break;
+        case CS_O_DIAERESIS:
+            if (shifted) { send_unicode_string("Ö"); }
+            else         { send_unicode_string("ö"); }  break;
+        case CS_U_DIAERESIS:
+            if (shifted) { send_unicode_string("Ü"); }
+            else         { send_unicode_string("ü"); }  break;
+        case CS_Y_DIAERESIS:
+            if (shifted) { send_unicode_string("Ÿ"); }
+            else         { send_unicode_string("ÿ"); }  break;
+
+        case CS_C_CEDILLA:
+            if (shifted) { send_unicode_string("Ç"); }
+            else         { send_unicode_string("ç"); } break;
+        case CS_AE:
+            if (shifted) { send_unicode_string("Æ"); }
+            else         { send_unicode_string("æ"); } break;
+        case CS_OE:
+            if (shifted) { send_unicode_string("Œ"); }
+            else         { send_unicode_string("œ"); } break;
+
+
+        default:
+            if (shifted) {
+                add_weak_mods(MOD_BIT(KC_LSFT));
+            }
+            /* & 0xFF gets the Tap key for Tap Holds, required when using Retro Shift */
+            register_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode);
+    }
+}
+
+void autoshift_release_user(uint16_t keycode, bool shifted, keyrecord_t *record) {
+    switch(keycode) {
+
+        case KC_BSPC:
+            unregister_code16((!shifted) ? KC_BSPC : KC_DEL);
+            break;
+
+        default:
+            /* & 0xFF gets the Tap key for Tap Holds, required when using Retro Shift
+               The IS_RETRO check isn't really necessary here, always using
+               keycode & 0xFF would be fine. */
+            unregister_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode);
+    }
+}
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c
new file mode 100644
index 0000000000..e5b897dc62
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c
@@ -0,0 +1,275 @@
+// Copyright 2023 Florent Linguenheld (@FLinguenheld)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+#include "keycodes.h"
+
+/* How to :
+        - Add an entry in the enum
+        - Create a new sequence of keys
+        - Link the enum to this sequence in the key_combos table
+
+   For macros :
+        - Same steps
+        - And add the macro in the process_combo_event() function
+*/
+
+enum combos {
+    LEADER,
+    BOOTLOADER,
+
+    LAYER_ADJUST,
+    LAYER_FN,
+    LAYER_LEFT_HAND,
+
+    /* French */
+    E_ACUTE,
+    C_CEDILLA,
+    E_A,
+    E_O,
+
+    A_GRAVE,
+    E_GRAVE,
+    I_GRAVE,
+    O_GRAVE,
+    U_GRAVE,
+
+    A_CIRCUMFLEX,
+    E_CIRCUMFLEX,
+    I_CIRCUMFLEX,
+    O_CIRCUMFLEX,
+    U_CIRCUMFLEX,
+
+    A_DIAERESIS,
+    E_DIAERESIS,
+    I_DIAERESIS,
+    O_DIAERESIS,
+    U_DIAERESIS,
+    Y_DIAERESIS,
+
+    /* -- */
+    AMPERSAND,
+    AT_SIGN,
+    BACKSLASH,
+    CIRCUMFLEX,
+    COLON,
+    DOLLAR,
+    EQUAL,
+    EXCLAMATION_MARK,
+    GRAVE,
+    HASH,
+    MINUS,
+    PERCENT,
+    PIPE,
+    PLUS,
+    QUESTION_MARK,
+    QUOTE,
+    QUOTE_DOUBLE,
+    SEMICOLON,
+    SLASH,
+    STAR,
+    TILDE,
+    UNDERSCORE,
+
+    ANGLE_BRACKET_LEFT,
+    ANGLE_BRACKET_RIGHT,
+
+    BRACKET_LEFT,
+    BRACKET_RIGHT,
+    CURLY_BRACKET_LEFT,
+    CURLY_BRACKET_RIGHT,
+    PARENTHESIS_LEFT,
+    PARENTHESIS_RIGHT,
+
+    /* -- */
+    ALT_SHIFT,
+    CONTROL_SHIFT,
+    CONTROL_ALT,
+    CONTROL_SHIFT_ALT,
+    RIGHT_ALT,
+
+    /* One hand special */
+    CONTROL_RIGHT,
+    CONTROL_SHIFT_RIGHT,
+
+    // DEL_LEFT,
+    SHIFT_LEFT,
+    ALTGR_LEFT,
+    CONTROL_SHIFT_LEFT,
+
+    /* Just to replace the define in config.h */
+    COMBO_LENGTH,
+};
+uint16_t COMBO_LEN = COMBO_LENGTH;
+
+
+/* Sequences fo keys */
+const uint16_t PROGMEM combo_leader[] =                 {LT(_MOUSE, KC_COMM), LT(_ARROWS, KC_DOT), COMBO_END};
+const uint16_t PROGMEM combo_bootloader[] =             {KC_K, KC_TAB, KC_Z, KC_BSPC, KC_V, KC_J, COMBO_END};
+
+const uint16_t PROGMEM combo_adjust[] =                 {KC_LCPO, LT(_NUMERIC, KC_ENT), COMBO_END};
+const uint16_t PROGMEM combo_fn[] =                     {LT(_NUMERIC, KC_ENT), KC_N, COMBO_END};
+const uint16_t PROGMEM combo_left_hand[] =              {KC_LCPO, GUI_T(KC_ESC), COMBO_END};
+
+/* -- */
+// const uint16_t PROGMEM combo_enter_shifted[] =          {LT(_NUMERIC, KC_ENT), KC_S, COMBO_END};
+const uint16_t PROGMEM combo_control_shift[] =          {KC_LCPO, KC_S, COMBO_END};
+const uint16_t PROGMEM combo_control_alt[] =            {KC_LCPO, KC_LALT, COMBO_END};
+const uint16_t PROGMEM combo_control_shift_alt[] =      {KC_LCPO, KC_S, KC_A, COMBO_END};
+const uint16_t PROGMEM combo_right_alt[] =              {KC_LAPO, KC_G, COMBO_END};
+const uint16_t PROGMEM combo_alt_shift[] =              {KC_LALT, KC_S, COMBO_END};
+
+/* -- */
+const uint16_t PROGMEM combo_e_acute[] =                {KC_LCPO, KC_E, COMBO_END};
+const uint16_t PROGMEM combo_c_cedilla[] =              {KC_LCPO, KC_I, COMBO_END};
+const uint16_t PROGMEM combo_ea[] =                     {KC_LCPO, KC_A, COMBO_END};
+const uint16_t PROGMEM combo_eo[] =                     {KC_LCPO, KC_O, COMBO_END};
+
+const uint16_t PROGMEM combo_a_grave[] =                {LT(_MOUSE, KC_COMM), KC_A, COMBO_END};
+const uint16_t PROGMEM combo_e_grave[] =                {LT(_MOUSE, KC_COMM), KC_E, COMBO_END};
+const uint16_t PROGMEM combo_i_grave[] =                {LT(_MOUSE, KC_COMM), KC_I, COMBO_END};
+const uint16_t PROGMEM combo_o_grave[] =                {LT(_MOUSE, KC_COMM), KC_O, COMBO_END};
+const uint16_t PROGMEM combo_u_grave[] =                {LT(_MOUSE, KC_COMM), KC_U, COMBO_END};
+
+const uint16_t PROGMEM combo_a_circumflex[] =           {KC_C, KC_A, COMBO_END};
+const uint16_t PROGMEM combo_e_circumflex[] =           {KC_C, KC_E, COMBO_END};
+const uint16_t PROGMEM combo_i_circumflex[] =           {KC_C, KC_I, COMBO_END};
+const uint16_t PROGMEM combo_o_circumflex[] =           {KC_C, KC_O, COMBO_END};
+const uint16_t PROGMEM combo_u_circumflex[] =           {KC_C, KC_U, COMBO_END};
+
+const uint16_t PROGMEM combo_a_diaeresis[] =            {KC_T, KC_A, COMBO_END};
+const uint16_t PROGMEM combo_e_diaeresis[] =            {KC_T, KC_E, COMBO_END};
+const uint16_t PROGMEM combo_i_diaeresis[] =            {KC_T, KC_I, COMBO_END};
+const uint16_t PROGMEM combo_o_diaeresis[] =            {KC_T, KC_O, COMBO_END};
+const uint16_t PROGMEM combo_u_diaeresis[] =            {KC_T, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_y_diaeresis[] =            {KC_T, KC_Y, COMBO_END};
+
+/* -- */
+const uint16_t PROGMEM combo_ampersand[] =              {KC_I, KC_E, COMBO_END};
+const uint16_t PROGMEM combo_at_sign[] =                {KC_Q, KC_Y, COMBO_END};
+const uint16_t PROGMEM combo_backslash[] =              {KC_D, KC_R, COMBO_END};
+const uint16_t PROGMEM combo_circumflex[] =             {KC_T, KC_D, COMBO_END};
+const uint16_t PROGMEM combo_colon[] =                  {KC_C, KC_G, COMBO_END};
+const uint16_t PROGMEM combo_dollar[] =                 {KC_D, KC_L, COMBO_END};
+const uint16_t PROGMEM combo_equal[] =                  {KC_T, KC_H, COMBO_END};
+const uint16_t PROGMEM combo_exclamation_mark[] =       {KC_O, KC_W, COMBO_END};
+const uint16_t PROGMEM combo_grave[] =                  {KC_T, KC_G, COMBO_END};
+const uint16_t PROGMEM combo_hash[] =                   {KC_I, KC_O, COMBO_END};
+const uint16_t PROGMEM combo_minus[] =                  {KC_T, KC_R, COMBO_END};
+const uint16_t PROGMEM combo_percent[] =                {KC_O, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_pipe[] =                   {KC_E, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_plus[] =                   {KC_T, KC_L, COMBO_END};
+const uint16_t PROGMEM combo_question_mark[] =          {KC_B, KC_O, COMBO_END};
+const uint16_t PROGMEM combo_quote[] =                  {KC_T, KC_N, COMBO_END};
+const uint16_t PROGMEM combo_quote_double[] =           {KC_A, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_semicolon[] =              {KC_G, KC_H, COMBO_END};
+const uint16_t PROGMEM combo_slash[] =                  {KC_S, KC_L, COMBO_END};
+const uint16_t PROGMEM combo_star[] =                   {KC_S, KC_T, COMBO_END};
+const uint16_t PROGMEM combo_tilde[] =                  {KC_I, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_underscore[] =             {KC_S, KC_R, COMBO_END};
+
+const uint16_t PROGMEM combo_angle_bracket_left[] =     {KC_C, KC_S, COMBO_END};
+const uint16_t PROGMEM combo_angle_bracket_right[] =    {KC_S, KC_H, COMBO_END};
+
+const uint16_t PROGMEM combo_bracket_left[] =           {KC_Q, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_bracket_right[] =          {KC_E, KC_Y, COMBO_END};
+const uint16_t PROGMEM combo_curly_bracket_left[] =     {KC_X, KC_E, COMBO_END};
+const uint16_t PROGMEM combo_curly_bracket_right[] =    {KC_I, KC_Q, COMBO_END};
+const uint16_t PROGMEM combo_parenthesis_left[] =       {KC_X, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_parenthesis_right[] =      {KC_I, KC_Y, COMBO_END};
+
+/* One hand special */
+const uint16_t PROGMEM combo_control_right[] =          {LT(_NUMERIC, KC_ENT), KC_R, COMBO_END};
+const uint16_t PROGMEM combo_control_shift_right[] =    {LT(_NUMERIC, KC_ENT), KC_S, COMBO_END};
+
+const uint16_t PROGMEM combo_shift_left[] =             {KC_LCPO, KC_LALT, COMBO_END};
+// const uint16_t PROGMEM combo_altgr_left[] =             {LT(_MOUSE, KC_COMM), KC_LALT, COMBO_END};
+// const uint16_t PROGMEM combo_del_left[] =               {GUI_T(KC_ESC), KC_K, COMBO_END};
+const uint16_t PROGMEM combo_control_shift_left[] =     {LT(_MOUSE, KC_COMM), KC_LALT, COMBO_END};
+
+
+/* Sequences fo keys */
+combo_t key_combos[] = {
+    [LEADER] = COMBO(combo_leader,                          KC_LEAD),
+    [BOOTLOADER] = COMBO(combo_bootloader,                  QK_BOOTLOADER),
+
+    [LAYER_ADJUST] = COMBO(combo_adjust,                    OSL(_ADJUST)),
+    [LAYER_FN] = COMBO(combo_fn,                            OSL(_FN)),
+    [LAYER_LEFT_HAND] = COMBO(combo_left_hand,              OSL(_LEFT_HAND)),
+
+    /* -- */
+    // [ENTER_SHIFTED] = COMBO(combo_enter_shifted,            S(KC_ENT)),
+    [ALT_SHIFT] = COMBO(combo_alt_shift,                    A(S(XXXXXXX))),
+    [CONTROL_SHIFT] = COMBO(combo_control_shift,            C(S(XXXXXXX))),
+    [CONTROL_ALT] = COMBO(combo_control_alt,                C(A(XXXXXXX))),
+    [CONTROL_SHIFT_ALT] = COMBO(combo_control_shift_alt,    C(S(A(XXXXXXX)))),
+    [RIGHT_ALT] = COMBO(combo_right_alt,                    KC_RALT),
+
+    /* French */
+    [E_ACUTE] = COMBO(combo_e_acute,                        CS_E_ACUTE),
+    [C_CEDILLA] = COMBO(combo_c_cedilla,                    CS_C_CEDILLA),
+    [E_A] = COMBO(combo_ea,                                 CS_AE),
+    [E_O] = COMBO(combo_eo,                                 CS_OE),
+
+    [A_GRAVE] = COMBO(combo_a_grave,                        CS_A_GRAVE),
+    [E_GRAVE] = COMBO(combo_e_grave,                        CS_E_GRAVE),
+    [I_GRAVE] = COMBO(combo_i_grave,                        CS_I_GRAVE),
+    [O_GRAVE] = COMBO(combo_o_grave,                        CS_O_GRAVE),
+    [U_GRAVE] = COMBO(combo_u_grave,                        CS_U_GRAVE),
+
+    [A_CIRCUMFLEX] = COMBO(combo_a_circumflex,              CS_A_CIRCUMFLEX),
+    [E_CIRCUMFLEX] = COMBO(combo_e_circumflex,              CS_E_CIRCUMFLEX),
+    [I_CIRCUMFLEX] = COMBO(combo_i_circumflex,              CS_I_CIRCUMFLEX),
+    [O_CIRCUMFLEX] = COMBO(combo_o_circumflex,              CS_O_CIRCUMFLEX),
+    [U_CIRCUMFLEX] = COMBO(combo_u_circumflex,              CS_U_CIRCUMFLEX),
+
+    [A_DIAERESIS] = COMBO(combo_a_diaeresis,                CS_A_DIAERESIS),
+    [E_DIAERESIS] = COMBO(combo_e_diaeresis,                CS_E_DIAERESIS),
+    [I_DIAERESIS] = COMBO(combo_i_diaeresis,                CS_I_DIAERESIS),
+    [O_DIAERESIS] = COMBO(combo_o_diaeresis,                CS_O_DIAERESIS),
+    [U_DIAERESIS] = COMBO(combo_u_diaeresis,                CS_U_DIAERESIS),
+    [Y_DIAERESIS] = COMBO(combo_y_diaeresis,                CS_Y_DIAERESIS),
+
+    /* -- */
+    [AMPERSAND] = COMBO(combo_ampersand,                    KC_AMPR),
+    [AT_SIGN] = COMBO(combo_at_sign,                        KC_AT),
+    [BACKSLASH] = COMBO(combo_backslash,                    KC_BSLS),
+    [CIRCUMFLEX] = COMBO(combo_circumflex,                  KC_CIRC),
+    [COLON] = COMBO(combo_colon,                            KC_COLON),
+    [DOLLAR] = COMBO(combo_dollar,                          KC_DLR),
+    [EQUAL] = COMBO(combo_equal,                            KC_EQL),
+    [EXCLAMATION_MARK] = COMBO(combo_exclamation_mark,      KC_EXCLAIM),
+    [GRAVE] = COMBO(combo_grave,                            KC_GRV),
+    [HASH] = COMBO(combo_hash,                              KC_HASH),
+    [MINUS] = COMBO(combo_minus,                            KC_MINS),
+    [PERCENT] = COMBO(combo_percent,                        KC_PERC),
+    [PIPE] = COMBO(combo_pipe,                              KC_PIPE),
+    [PLUS] = COMBO(combo_plus,                              KC_PLUS),
+    [QUESTION_MARK] = COMBO(combo_question_mark,            KC_QUESTION),
+    [QUOTE] = COMBO(combo_quote,                            KC_QUOTE),
+    [QUOTE_DOUBLE] = COMBO(combo_quote_double,              KC_DOUBLE_QUOTE),
+    [SEMICOLON] = COMBO(combo_semicolon,                    KC_SEMICOLON),
+    [SLASH] = COMBO(combo_slash,                            KC_SLSH),
+    [STAR] = COMBO(combo_star,                              KC_ASTR),
+    [TILDE] = COMBO(combo_tilde,                            KC_TILD),
+    [UNDERSCORE] = COMBO(combo_underscore,                  KC_UNDS),
+
+    [ANGLE_BRACKET_LEFT] = COMBO(combo_angle_bracket_left,      KC_LABK),
+    [ANGLE_BRACKET_RIGHT] = COMBO(combo_angle_bracket_right,    KC_RABK),
+
+    [BRACKET_LEFT] = COMBO(combo_bracket_left,                  KC_LEFT_BRACKET),
+    [BRACKET_RIGHT] = COMBO(combo_bracket_right,                KC_RIGHT_BRACKET),
+    [CURLY_BRACKET_LEFT] = COMBO(combo_curly_bracket_left,      KC_LEFT_CURLY_BRACE),
+    [CURLY_BRACKET_RIGHT] = COMBO(combo_curly_bracket_right,    KC_RIGHT_CURLY_BRACE),
+    [PARENTHESIS_LEFT] = COMBO(combo_parenthesis_left,          KC_LEFT_PAREN),
+    [PARENTHESIS_RIGHT] COMBO(combo_parenthesis_right,          KC_RIGHT_PAREN),
+
+    /* One hand special */
+    [CONTROL_RIGHT] = COMBO(combo_control_right,                KC_RCTL),
+    [CONTROL_SHIFT_RIGHT] = COMBO(combo_control_shift_right,    C(S(XXXXXXX))),
+
+    [SHIFT_LEFT] = COMBO(combo_shift_left,                      KC_LSFT),
+    // [ALTGR_LEFT] = COMBO(combo_altgr_left,                      KC_ALGR),
+    [CONTROL_SHIFT_LEFT] = COMBO(combo_control_shift_left,      C(S(XXXXXXX))),
+    // [DEL_LEFT] = COMBO(combo_del_left,                          KC_BSPC),
+};
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/leader.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/leader.c
new file mode 100644
index 0000000000..7cfd30af6d
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/leader.c
@@ -0,0 +1,268 @@
+// Copyright 2023 Florent Linguenheld (@FLinguenheld)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+LEADER_EXTERNS();
+
+void matrix_scan_user(void) {
+  LEADER_DICTIONARY() {
+    leading = false;
+    leader_end();
+
+    // SEQ_ONE_KEY(KC_F) {
+      // // Anything you can do in a macro.
+      // SEND_STRING("QMK is awesome."); }
+
+
+    SEQ_TWO_KEYS(KC_M, KC_S) {
+      SEND_STRING("f@linguenheld.fr"); }
+    SEQ_TWO_KEYS(KC_M, KC_L) {
+      SEND_STRING("florent@linguenheld.fr"); }
+    SEQ_TWO_KEYS(KC_F, KC_L) {
+      SEND_STRING("FLinguenheld"); }
+
+    SEQ_THREE_KEYS(KC_T, KC_E, KC_S) {
+      SEND_STRING("test01234"); }
+    SEQ_THREE_KEYS(KC_A, KC_D, KC_M) {
+      SEND_STRING("admin01234"); }
+
+    SEQ_ONE_KEY(KC_C) {
+      SEND_STRING(" | xclip -r -selection clipboard"); }
+
+    /* Degree */
+    SEQ_THREE_KEYS(KC_D, KC_E, KC_G) {
+      send_unicode_string("°"); }
+
+    /* Copyright / Register */
+    SEQ_THREE_KEYS(KC_C, KC_O, KC_P) {
+      send_unicode_string("©"); }
+    SEQ_THREE_KEYS(KC_R, KC_E, KC_G) {
+      send_unicode_string("®"); }
+
+    /* Diameter */
+    SEQ_THREE_KEYS(KC_D, KC_I, KC_A) {
+      send_unicode_string("ø"); }
+    SEQ_FOUR_KEYS(KC_D, KC_I, KC_A, KC_M) {
+      send_unicode_string("Ø"); }
+
+    /* Currency */
+    SEQ_THREE_KEYS(KC_E, KC_U, KC_R) {
+      send_unicode_string("€"); }
+    SEQ_THREE_KEYS(KC_P, KC_O, KC_U) {
+      send_unicode_string("£"); }
+    SEQ_THREE_KEYS(KC_Y, KC_E, KC_N) {
+      send_unicode_string("¥"); }
+    SEQ_THREE_KEYS(KC_C, KC_E, KC_N) {
+      send_unicode_string("¢"); }
+
+    /* Fractions */
+    SEQ_THREE_KEYS(KC_F, KC_C, KC_T) {
+      send_unicode_string("¼"); }
+    SEQ_THREE_KEYS(KC_F, KC_C, KC_G) {
+      send_unicode_string("½"); }
+    SEQ_THREE_KEYS(KC_F, KC_H, KC_T) {
+      send_unicode_string("¾"); }
+
+    /* Maths */
+    SEQ_THREE_KEYS(KC_M, KC_U, KC_L) {
+      send_unicode_string("×"); }
+    SEQ_THREE_KEYS(KC_D, KC_I, KC_V) {
+      send_unicode_string("÷"); }
+    SEQ_TWO_KEYS(KC_P, KC_M) {
+      send_unicode_string("±"); }
+    SEQ_THREE_KEYS(KC_I, KC_N, KC_E) {
+      send_unicode_string("≠"); }
+    SEQ_THREE_KEYS(KC_A, KC_L, KC_M) {
+      send_unicode_string("≈"); }
+    SEQ_THREE_KEYS(KC_S, KC_Q, KC_U) {
+      send_unicode_string("√"); }
+    SEQ_THREE_KEYS(KC_I, KC_N, KC_F) {
+      send_unicode_string("∞"); }
+    SEQ_TWO_KEYS(KC_LABK, KC_LABK) {
+      send_unicode_string("≤"); }
+    SEQ_TWO_KEYS(KC_RABK, KC_RABK) {
+      send_unicode_string("≥"); }
+
+    /* Greek */
+    SEQ_TWO_KEYS(KC_P, KC_I) {
+      send_unicode_string("π"); }
+    SEQ_THREE_KEYS(KC_P, KC_I, KC_I) {
+      send_unicode_string("Π"); }
+
+    SEQ_THREE_KEYS(KC_O, KC_M, KC_E) {
+      send_unicode_string("ω"); }
+    SEQ_FOUR_KEYS(KC_O, KC_M, KC_E, KC_G) {
+      send_unicode_string("Ω"); }
+
+    /* Icons */
+    SEQ_THREE_KEYS(KC_F, KC_L, KC_A) {
+      send_unicode_string("⚡"); }
+    SEQ_THREE_KEYS(KC_S, KC_T, KC_A) {
+      send_unicode_string("⭐"); }
+    SEQ_THREE_KEYS(KC_S, KC_P, KC_A) {
+      send_unicode_string("✨"); }
+    SEQ_THREE_KEYS(KC_P, KC_O, KC_P) {
+      send_unicode_string("🎉"); }
+    SEQ_THREE_KEYS(KC_R, KC_E, KC_C) {
+      send_unicode_string("♻️"); }
+    SEQ_THREE_KEYS(KC_L, KC_O, KC_V) {
+      send_unicode_string("❤️"); }
+    SEQ_THREE_KEYS(KC_F, KC_I, KC_R) {
+      send_unicode_string("🔥"); }
+    SEQ_THREE_KEYS(KC_B, KC_O, KC_M) {
+      send_unicode_string("💣"); }
+    SEQ_FOUR_KEYS(KC_B, KC_O, KC_U, KC_M) {
+      send_unicode_string("💥"); }
+    SEQ_THREE_KEYS(KC_R, KC_O, KC_C) {
+      send_unicode_string("🚀"); }
+    SEQ_THREE_KEYS(KC_T, KC_E, KC_L) {
+      send_unicode_string("🔭"); }
+    SEQ_THREE_KEYS(KC_M, KC_A, KC_G) {
+      send_unicode_string("🔎"); }
+    SEQ_THREE_KEYS(KC_W, KC_A, KC_R) {
+      send_unicode_string("⚠️"); }
+
+    SEQ_THREE_KEYS(KC_B, KC_U, KC_L) {
+      send_unicode_string("💡"); }
+    SEQ_FOUR_KEYS(KC_I, KC_N, KC_F, KC_O) {
+      send_unicode_string("ℹ️"); }
+    SEQ_THREE_KEYS(KC_G, KC_E, KC_A) {
+      send_unicode_string("⚙️"); }
+    SEQ_THREE_KEYS(KC_L, KC_I, KC_N) {
+      send_unicode_string("🔗"); }
+    SEQ_THREE_KEYS(KC_P, KC_I, KC_N) {
+      send_unicode_string("📌"); }
+    SEQ_FOUR_KEYS(KC_F, KC_L, KC_A, KC_G) {
+      send_unicode_string("🚩"); }
+    SEQ_THREE_KEYS(KC_B, KC_A, KC_L) {
+      send_unicode_string("🎈"); }
+    SEQ_THREE_KEYS(KC_G, KC_I, KC_F) {
+      send_unicode_string("🎁"); }
+
+    SEQ_THREE_KEYS(KC_P, KC_E, KC_N) {
+      send_unicode_string("✏️"); }
+    SEQ_THREE_KEYS(KC_K, KC_E, KC_Y) {
+      send_unicode_string("🔑"); }
+    SEQ_THREE_KEYS(KC_B, KC_O, KC_X) {
+      send_unicode_string("🧰"); }
+
+    SEQ_TWO_KEYS(KC_O, KC_K) {
+      send_unicode_string("👌"); }
+    SEQ_THREE_KEYS(KC_O, KC_W, KC_D) {
+      send_unicode_string("⛔"); }
+
+    SEQ_ONE_KEY(KC_V) {
+      send_unicode_string("✓"); }
+    SEQ_TWO_KEYS(KC_V, KC_B) {
+      send_unicode_string("☑"); }
+    SEQ_TWO_KEYS(KC_V, KC_G) {
+      send_unicode_string("✅"); }
+
+    SEQ_ONE_KEY(KC_X) {
+      send_unicode_string("✗"); }
+    SEQ_TWO_KEYS(KC_X, KC_B) {
+      send_unicode_string("☒"); }
+    SEQ_TWO_KEYS(KC_X, KC_G) {
+      send_unicode_string("❎"); }
+    SEQ_TWO_KEYS(KC_X, KC_R) {
+      send_unicode_string("❌"); }
+
+    SEQ_ONE_KEY(KC_QUESTION) {
+      send_unicode_string("❔"); }
+    SEQ_ONE_KEY(KC_EXCLAIM) {
+      send_unicode_string("❕"); }
+    SEQ_TWO_KEYS(KC_QUESTION, KC_QUESTION) {
+      send_unicode_string("❓"); }
+    SEQ_TWO_KEYS(KC_EXCLAIM, KC_EXCLAIM) {
+      send_unicode_string("❗"); }
+
+    SEQ_THREE_KEYS(KC_C, KC_O, KC_F) {
+      send_unicode_string("☕"); }
+    SEQ_THREE_KEYS(KC_U, KC_M, KC_B) {
+      send_unicode_string("☔"); }
+
+    SEQ_THREE_KEYS(KC_L, KC_O, KC_L) {
+      send_unicode_string("😀"); }
+    SEQ_THREE_KEYS(KC_M, KC_D, KC_R) {
+      send_unicode_string("🤣"); }
+    SEQ_THREE_KEYS(KC_K, KC_I, KC_S) {
+      send_unicode_string("😙"); }
+    SEQ_THREE_KEYS(KC_A, KC_N, KC_G) {
+      send_unicode_string("😇"); }
+    SEQ_THREE_KEYS(KC_G, KC_L, KC_A) {
+      send_unicode_string("😎"); }
+    SEQ_THREE_KEYS(KC_A, KC_N, KC_G) {
+      send_unicode_string("🤬"); }
+    SEQ_THREE_KEYS(KC_F, KC_E, KC_A) {
+      send_unicode_string("😱"); }
+    SEQ_THREE_KEYS(KC_N, KC_E, KC_U) {
+      send_unicode_string("😐"); }
+    SEQ_THREE_KEYS(KC_T, KC_H, KC_I) {
+      send_unicode_string("🤔"); }
+    SEQ_THREE_KEYS(KC_Z, KC_I, KC_P) {
+      send_unicode_string("🤐"); }
+    SEQ_THREE_KEYS(KC_S, KC_U, KC_R) {
+      send_unicode_string("😯"); }
+    SEQ_THREE_KEYS(KC_R, KC_O, KC_L) {
+      send_unicode_string("🙄"); }
+    SEQ_THREE_KEYS(KC_M, KC_O, KC_O) {
+      send_unicode_string("🌝"); }
+    SEQ_THREE_KEYS(KC_H, KC_U, KC_G) {
+      send_unicode_string("🫂"); }
+
+    SEQ_THREE_KEYS(KC_H, KC_E, KC_N) {
+      send_unicode_string("🐔"); }
+    SEQ_THREE_KEYS(KC_R, KC_O, KC_O) {
+      send_unicode_string("🐓"); }
+    SEQ_THREE_KEYS(KC_D, KC_U, KC_C) {
+      send_unicode_string("🦆"); }
+    SEQ_THREE_KEYS(KC_P, KC_E, KC_A) {
+      send_unicode_string("🦚"); }
+    SEQ_THREE_KEYS(KC_B, KC_I, KC_R) {
+      send_unicode_string("🐦"); }
+
+    /* Subscript / superscript */
+    SEQ_THREE_KEYS(KC_U, KC_P, KC_F) {
+      send_unicode_string("⁰"); }
+    SEQ_THREE_KEYS(KC_D, KC_N, KC_F) {
+      send_unicode_string("₀"); }
+    SEQ_THREE_KEYS(KC_U, KC_P, KC_C) {
+      send_unicode_string("¹"); }
+    SEQ_THREE_KEYS(KC_D, KC_N, KC_C) {
+      send_unicode_string("₁"); }
+    SEQ_THREE_KEYS(KC_U, KC_P, KC_G) {
+      send_unicode_string("²"); }
+    SEQ_THREE_KEYS(KC_D, KC_N, KC_G) {
+      send_unicode_string("₂"); }
+    SEQ_THREE_KEYS(KC_U, KC_P, KC_H) {
+      send_unicode_string("³"); }
+    SEQ_THREE_KEYS(KC_D, KC_N, KC_H) {
+      send_unicode_string("₃"); }
+    SEQ_THREE_KEYS(KC_U, KC_P, KC_T) {
+      send_unicode_string("⁴"); }
+    SEQ_THREE_KEYS(KC_D, KC_N, KC_T) {
+      send_unicode_string("₄"); }
+    SEQ_THREE_KEYS(KC_U, KC_P, KC_S) {
+      send_unicode_string("⁵"); }
+    SEQ_THREE_KEYS(KC_D, KC_N, KC_S) {
+      send_unicode_string("₅"); }
+    SEQ_THREE_KEYS(KC_U, KC_P, KC_R) {
+      send_unicode_string("⁶"); }
+    SEQ_THREE_KEYS(KC_D, KC_N, KC_R) {
+      send_unicode_string("₆"); }
+    SEQ_THREE_KEYS(KC_U, KC_P, KC_P) {
+      send_unicode_string("⁷"); }
+    SEQ_THREE_KEYS(KC_D, KC_N, KC_P) {
+      send_unicode_string("₇"); }
+    SEQ_THREE_KEYS(KC_U, KC_P, KC_D) {
+      send_unicode_string("⁸"); }
+    SEQ_THREE_KEYS(KC_D, KC_N, KC_D) {
+      send_unicode_string("₈"); }
+    SEQ_THREE_KEYS(KC_U, KC_P, KC_L) {
+      send_unicode_string("⁹"); }
+    SEQ_THREE_KEYS(KC_D, KC_N, KC_L) {
+      send_unicode_string("₉"); }
+
+  };
+}
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keycodes.h b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keycodes.h
new file mode 100644
index 0000000000..b90b28fda4
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keycodes.h
@@ -0,0 +1,44 @@
+// Copyright 2023 Florent Linguenheld (@FLinguenheld)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+enum layers {
+    _BASE,
+    _NUMERIC,
+    _ARROWS,
+    _MOUSE,
+    _ADJUST,
+    _FN,
+    _LEFT_HAND,
+};
+
+enum custom_keys {
+    UNICODE = SAFE_RANGE, // Shortcut to write unicodes, see numeric layer
+
+    /* See auto-shift */
+    CS_E_ACUTE,
+
+    CS_A_GRAVE,
+    CS_E_GRAVE,
+    CS_I_GRAVE,
+    CS_O_GRAVE,
+    CS_U_GRAVE,
+
+    CS_C_CEDILLA,
+    CS_AE,
+    CS_OE,
+
+    CS_A_CIRCUMFLEX,
+    CS_E_CIRCUMFLEX,
+    CS_I_CIRCUMFLEX,
+    CS_O_CIRCUMFLEX,
+    CS_U_CIRCUMFLEX,
+
+    CS_A_DIAERESIS,
+    CS_E_DIAERESIS,
+    CS_I_DIAERESIS,
+    CS_O_DIAERESIS,
+    CS_U_DIAERESIS,
+    CS_Y_DIAERESIS,
+};
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keymap.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keymap.c
new file mode 100644
index 0000000000..50fb7909f3
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keymap.c
@@ -0,0 +1,133 @@
+/* Copyright 2023 Florent Linguenheld (@FLinguenheld)
+ *
+ * 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 "keycodes.h"
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+    /* Macros */
+    switch (keycode) {
+
+        case UNICODE:
+            if (record->event.pressed) {
+                register_code(KC_LCTL);
+                register_code(KC_LSFT);
+                tap_code16(KC_U);
+            } else {
+                unregister_code(KC_LCTL);
+                unregister_code(KC_LSFT);
+            }
+            break;
+    }
+
+    return true;
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [_BASE] = LAYOUT(
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+        GUI_T(KC_ESC) ,     KC_B      ,     KC_O      ,     KC_W      ,     KC_BSPC   ,             KC_J      ,      KC_P     ,      KC_D     ,      KC_L     ,      KC_F     ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+            KC_A      ,     KC_I      ,     KC_E      ,     KC_U      ,     KC_TAB    ,             KC_V      ,      KC_T     ,      KC_S     ,      KC_R     ,      KC_N     ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           KC_LALT    ,     KC_X      ,     KC_Q      ,     KC_Y      ,      KC_K     ,             KC_Z      ,      KC_C     ,      KC_G     ,      KC_H     ,      KC_M     ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+                                          LT(_MOUSE, KC_COMM)  ,        KC_LCPO          ,    LT(_NUMERIC, KC_ENT)   ,  LT(_ARROWS, KC_DOT)
+    //                               |-------------------------+----/* Space ctl */------| |-------------------------+-------------------------|
+    ),
+
+    [_NUMERIC] = LAYOUT(
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           _______    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    _______    ,            XXXXXXX    ,     KC_7      ,     KC_8      ,     KC_9      ,    KC_DOT     ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    _______    ,            XXXXXXX    ,     KC_4      ,     KC_5      ,     KC_6      ,     KC_0      ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           _______    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,            XXXXXXX    ,     KC_1      ,     KC_2      ,     KC_3      ,    KC_COMM    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+                                                XXXXXXX        ,         UNICODE         ,          XXXXXXX          ,       XXXXXXX
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+    ),
+
+    [_MOUSE] = LAYOUT(
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+        KC_MS_WH_LEFT ,  KC_MS_WH_UP  , KC_MS_WH_DOWN , KC_MS_WH_RIGHT,    _______    ,            XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+          KC_MS_LEFT  ,   KC_MS_UP    ,  KC_MS_DOWN   ,  KC_MS_RIGHT  ,    _______    ,            XXXXXXX    ,  KC_MS_ACCEL0 ,  KC_MS_ACCEL1 ,  KC_MS_ACCEL2 ,    XXXXXXX    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+          KC_MS_BTN1  ,    XXXXXXX    ,  KC_MS_BTN3   ,  KC_MS_BTN2   ,    XXXXXXX    ,            XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+                                                XXXXXXX        ,        _______          ,         KC_MS_BTN1        ,       KC_MS_BTN2
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+    ),
+
+    [_ARROWS] = LAYOUT(
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           _______    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    _______    ,            XXXXXXX    ,    KC_HOME    ,  KC_PAGE_DOWN ,   KC_PAGE_UP  ,     KC_END    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    _______    ,            XXXXXXX    ,    KC_LEFT    ,    KC_DOWN    ,     KC_UP     ,    KC_RIGHT   ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           _______    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,            XXXXXXX    ,    XXXXXXX    ,    C(KC_D)    ,    C(KC_U)    ,    XXXXXXX    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+                                                XXXXXXX        ,        _______          ,           XXXXXXX         ,       XXXXXXX
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+    ),
+
+    [_ADJUST] = LAYOUT(
+    //|---------------+---------------+---------------+---------------+------------------|       |---------------+---------------+---------------+---------------+-----------------|
+           XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,  KC_PRINT_SCREEN ,            XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    , KC_AUDIO_VOL_UP ,
+    //|---------------+---------------+---------------+---------------+------------------|       |---------------+---------------+---------------+---------------+-----------------|
+           XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,S(KC_PRINT_SCREEN),            XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,KC_AUDIO_VOL_DOWN,
+    //|---------------+---------------+---------------+---------------+------------------|       |---------------+---------------+---------------+---------------+-----------------|
+           XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,     XXXXXXX      ,            XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,  KC_AUDIO_MUTE  ,
+    //|---------------+---------------+---------------+---------------+------------------|       |---------------+---------------+---------------+---------------+-----------------|
+    //                                  |-------------------------+-------------------------| |-------------------------+-------------------------|
+                                                   XXXXXXX        ,        _______          ,           XXXXXXX         ,       XXXXXXX
+    //                                  |-------------------------+-------------------------| |-------------------------+-------------------------|
+    ),
+
+    [_FN] = LAYOUT(
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           _______    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    _______    ,            XXXXXXX    ,     KC_F7     ,     KC_F8     ,     KC_F9     ,     KC_F10    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    _______    ,            XXXXXXX    ,     KC_F4     ,     KC_F5     ,     KC_F6     ,     KC_F11    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           _______    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,            XXXXXXX    ,     KC_F1     ,     KC_F2     ,     KC_F3     ,     KC_F12    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+                                                XXXXXXX        ,        _______          ,           XXXXXXX         ,       XXXXXXX
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+    ),
+
+    [_LEFT_HAND] = LAYOUT(
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           _______    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    _______    ,            XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           XXXXXXX    ,    C(KC_X)    ,    C(KC_C)    ,    C(KC_V)    ,    _______    ,            XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+           _______    ,    XXXXXXX    ,    XXXXXXX    ,    C(KC_Z)    ,    XXXXXXX    ,            XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,    XXXXXXX    ,
+    //|---------------+---------------+---------------+---------------+---------------|       |---------------+---------------+---------------+---------------+---------------|
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+                                                XXXXXXX        ,        _______          ,           XXXXXXX         ,       XXXXXXX
+    //                               |-------------------------+-------------------------| |-------------------------+-------------------------|
+    ),
+};
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/glcdfont.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/glcdfont.c
new file mode 100644
index 0000000000..ad4448993f
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/glcdfont.c
@@ -0,0 +1,232 @@
+// Copyright 2023 Florent Linguenheld (@FLinguenheld)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "progmem.h"
+
+/* Online editor: https://joric.github.io/qle/ */
+static const unsigned char PROGMEM font[] = {
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0xFC, 0xFE, 0x0E, 0x06, 0xE6, 0xE6,
+    0xE6, 0xE6, 0xE6, 0xFE, 0xFE, 0xE6,
+    0xE6, 0xE6, 0x06, 0x06, 0xE6, 0xE6,
+    0xE6, 0xFE, 0xFE, 0x06, 0x06, 0xFE,
+    0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFC,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x3F, 0x7F, 0x70, 0x60, 0x67, 0x67,
+    0x67, 0x67, 0x67, 0x7F, 0x7F, 0x7F,
+    0x7F, 0x7F, 0x60, 0x60, 0x7F, 0x7F,
+    0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x67,
+    0x67, 0x67, 0x67, 0x67, 0x7F, 0x3F,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0xFC, 0xFE, 0x0E, 0x06, 0xE6, 0xE6,
+    0xE6, 0xE6, 0x06, 0x0E, 0xFE, 0xFE,
+    0x06, 0x06, 0xFE, 0xFE, 0xFE, 0xFE,
+    0xFE, 0xFE, 0xE6, 0xE6, 0xE6, 0x06,
+    0x06, 0xE6, 0xE6, 0xE6, 0xFE, 0xFC,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0xFC, 0xFE, 0x0E, 0x06, 0x66, 0x66,
+    0x66, 0x66, 0xE6, 0xFE, 0xFE, 0x06,
+    0x06, 0x66, 0x66, 0x66, 0xE6, 0xE6,
+    0xFE, 0xFE, 0xE6, 0xE6, 0xE6, 0x06,
+    0x06, 0xE6, 0xE6, 0xE6, 0xFE, 0xFC,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x3F, 0x7F, 0x60, 0x60, 0x7C, 0x7C,
+    0x7C, 0x7C, 0x60, 0x60, 0x7F, 0x7F,
+    0x60, 0x60, 0x67, 0x67, 0x67, 0x67,
+    0x67, 0x7F, 0x7F, 0x7F, 0x7F, 0x60,
+    0x60, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x3F, 0x7F, 0x67, 0x66, 0x66, 0x66,
+    0x66, 0x60, 0x70, 0x7F, 0x7F, 0x60,
+    0x60, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F,
+    0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x60,
+    0x60, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0xFC, 0xFE, 0x0E, 0x06, 0xE6, 0xE6,
+    0xE6, 0x06, 0x0E, 0xFE, 0xFE, 0x0E,
+    0x06, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6,
+    0xFE, 0xFE, 0x06, 0x06, 0x66, 0x66,
+    0x66, 0x66, 0x06, 0x0E, 0xFE, 0xFC,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0xFC, 0xFE, 0x0E, 0x06, 0xE6, 0xE6,
+    0xE6, 0xE6, 0xE6, 0xFE, 0xFE, 0x06,
+    0x06, 0xCE, 0x9E, 0x9E, 0xCE, 0x06,
+    0x06, 0xFE, 0xFE, 0x06, 0x06, 0xE6,
+    0xE6, 0xE6, 0x0E, 0x1E, 0xFE, 0xFC,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x3F, 0x7F, 0x60, 0x60, 0x7C, 0x7C,
+    0x7C, 0x60, 0x60, 0x7F, 0x7F, 0x70,
+    0x60, 0x67, 0x67, 0x64, 0x60, 0x70,
+    0x7F, 0x7F, 0x60, 0x60, 0x7E, 0x7E,
+    0x78, 0x70, 0x62, 0x67, 0x7F, 0x3F,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x3F, 0x7F, 0x70, 0x60, 0x67, 0x67,
+    0x67, 0x67, 0x67, 0x7F, 0x7F, 0x60,
+    0x60, 0x7F, 0x7F, 0x7F, 0x7F, 0x60,
+    0x60, 0x7F, 0x7F, 0x60, 0x60, 0x67,
+    0x67, 0x67, 0x70, 0x78, 0x7F, 0x3F,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/oled.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/oled.c
new file mode 100644
index 0000000000..5b177acc7c
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/oled.c
@@ -0,0 +1,457 @@
+// Copyright 2023 Florent Linguenheld (@FLinguenheld)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+#include "keycodes.h"
+
+/* Leader state */
+static bool is_leader_active = false;
+void leader_start(void) {
+    is_leader_active = true;
+}
+void leader_end(void) {
+    is_leader_active = false;
+}
+
+
+void oled_display(void) {
+
+    /* Layers */
+    switch (get_highest_layer(layer_state)) {
+
+        case _BASE: ;
+            if (is_keyboard_master()) {
+                static const char PROGMEM qmk_logo_master[] = {
+                    // 'raven', 32x128px
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+                    0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x8f, 0x5f, 0x31, 0x79, 0x33, 0x7f,
+                    0x3b, 0x71, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x4c, 0x02, 0x01, 0x95, 0xff, 0xb5, 0x05, 0x02, 0x4c, 0x30,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7e, 0x01, 0x01, 0x01, 0x7e, 0x40, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0,
+                    0xf0, 0xf8, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0x7c, 0x7c, 0xf8, 0xf0, 0xe0, 0x80, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xcf, 0xef, 0xe7, 0xf3, 0xfb, 0xf9,
+                    0xfd, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x0f, 0x0e, 0x1a, 0x23, 0x43, 0x3f, 0x03, 0x00,
+                    0x00, 0x0c, 0x1e, 0x1f, 0x3f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x80, 0x40, 0xe0, 0xbf, 0x33,
+                    0x30, 0x60, 0x20, 0x21, 0xff, 0x20, 0x60, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8,
+                    0xfc, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0xfc, 0xfc, 0xf8, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x30,
+                    0x20, 0x30, 0x20, 0x32, 0x20, 0x32, 0x20, 0x30, 0x20, 0x1c, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+                };
+                oled_write_raw_P(qmk_logo_master, sizeof(qmk_logo_master));
+
+            } else {
+                static const char PROGMEM qmk_logo_slave[] = {
+                    // 'birds', 32x128px
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x40, 0xc0, 0xe0, 0xd0, 0x88, 0x84, 0x04, 0x04, 0xc4, 0xc4, 0x08, 0x08, 0x10, 0x60, 0x80,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0xf8, 0x46, 0x81, 0x02, 0x02, 0x06, 0x04, 0x04, 0x04, 0x74, 0x84, 0x06, 0x03, 0x81,
+                    0x42, 0x24, 0x18, 0x10, 0xa0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x01, 0x06, 0x08, 0x11, 0x12, 0x24, 0x24, 0x48, 0xc8, 0x48, 0x48, 0xc9, 0x49, 0x4a,
+                    0x4a, 0x26, 0x25, 0x25, 0x14, 0x14, 0x14, 0x1d, 0x15, 0x2e, 0x54, 0x60, 0x40, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x05, 0x02, 0x03, 0x02, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x80, 0x40, 0x20, 0x10, 0x08, 0x08, 0x08, 0x08, 0x88, 0xc8, 0x08, 0x30, 0xc0, 0xc0, 0x80, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x18, 0x04, 0x03,
+                    0x00, 0x00, 0x00, 0x80, 0x80, 0x70, 0x18, 0x00, 0x00, 0x00, 0x80, 0x70, 0x0f, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x70, 0x50, 0x48, 0x48, 0x24, 0x24, 0x12, 0x0a, 0x05, 0x09, 0x13, 0x12, 0x22, 0x22,
+                    0xe1, 0x21, 0x21, 0x20, 0xe0, 0x20, 0x20, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x04, 0x07, 0x04, 0x00, 0x04, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+                };
+                oled_write_raw_P(qmk_logo_slave, sizeof(qmk_logo_slave));
+            }
+            break;
+
+        case _NUMERIC: ;
+            static const char PROGMEM qmk_numeric[] = {
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x03, 0x07, 0x0f, 0x1e,
+                0x3c, 0x78, 0xf0, 0xe0, 0xc0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x87, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x01, 0x03, 0x87, 0x87, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
+                0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x0e, 0x1c, 0x38, 0x70, 0xe0,
+                0xe0, 0x70, 0x38, 0x1c, 0x0e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
+                0xc7, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x3f, 0x38, 0x38, 0x38, 0x38, 0x38,
+                0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x1c, 0x1c, 0x1c, 0x1c,
+                0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x06, 0x06, 0x06, 0x06,
+                0x06, 0x06, 0x0e, 0x1e, 0x3e, 0x77, 0xe7, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x70, 0xf0, 0xf0,
+                0xf0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xff, 0xff,
+                0xff, 0xff, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
+                0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01,
+                0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
+                0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+            };
+
+            oled_write_raw_P(qmk_numeric, sizeof(qmk_numeric));
+            break;
+
+        case _MOUSE: ;
+            static const char PROGMEM qmk_mouse[] = {
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x3e, 0x3c, 0x78, 0xf0, 0xe0, 0xc0,
+                0xc0, 0xe0, 0xf0, 0x78, 0x3c, 0x3e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03,
+                0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x81, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+                0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+                0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc1, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc1, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x7f, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
+                0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x7f, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
+                0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x7f, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
+                0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+                0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x81, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
+                0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
+                0xc1, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
+                0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+            };
+
+            oled_write_raw_P(qmk_mouse, sizeof(qmk_mouse));
+            break;
+
+        case _ARROWS: ;
+            static const char PROGMEM qmk_arrows[] = {
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc,
+                0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0xff, 0xff,
+                0xff, 0xff, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3e, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+                0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
+                0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0x7c, 0x3c, 0x1c, 0x0c,
+                0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x0c, 0x1e, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xde, 0x9e, 0x1e, 0x1e, 0x1e,
+                0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x0f, 0x0e, 0x0c,
+                0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+                0x30, 0x70, 0xf0, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
+                0x78, 0x78, 0x78, 0x79, 0x7b, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+                0x30, 0x38, 0x3c, 0x3e, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0,
+                0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+                0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x7c, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0xff, 0xff,
+                0xff, 0xff, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0x7c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f,
+                0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+            };
+
+            oled_write_raw_P(qmk_arrows, sizeof(qmk_arrows));
+            break;
+
+        case _ADJUST: ;
+            static const char PROGMEM qmk_adjust[] = {
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38,
+                0x38, 0x38, 0x38, 0x38, 0x38, 0xf8, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x38, 0x38, 0x38, 0x38, 0x38,
+                0x38, 0x38, 0x38, 0x38, 0x38, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x07, 0x07, 0x07, 0x07,
+                0x07, 0x07, 0x07, 0x07, 0x0f, 0xfe, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc0, 0xc0, 0xc0, 0xc0,
+                0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xff, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xe1, 0xe1, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
+                0xe1, 0xe1, 0xe1, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x3f, 0x38,
+                0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+                0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
+                0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
+                0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf0, 0xf0,
+                0xf0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+                0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f,
+                0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+            };
+
+            oled_write_raw_P(qmk_adjust, sizeof(qmk_adjust));
+            break;
+
+        case _FN: ;
+            static const char PROGMEM qmk_fn[] = {
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+                0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+                0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
+                0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xf8, 0xe0, 0x80, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0x07, 0x1f, 0x7f, 0xfe,
+                0xf8, 0xe0, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+                0x07, 0x1f, 0x7f, 0xfe, 0xf8, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+            };
+
+            oled_write_raw_P(qmk_fn, sizeof(qmk_fn));
+            break;
+
+        case _LEFT_HAND: ;
+            static const char PROGMEM qmk_left_hand[] = {
+                // 'layers_left_hand', 32x128px
+                0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0xe1, 0xf1, 0xf1, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0xff, 0xff, 0xff, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x0f, 0x1f, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0xff, 0xff, 0xff, 0x87, 0x87, 0x87, 0x87, 0x87, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0xff, 0xff, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
+                0x71, 0x71, 0x71, 0x70, 0x70, 0xf0, 0xf0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xff, 0xff, 0xff,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0xf0, 0xf8, 0xfc, 0x3c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x3c, 0xfc, 0xf8, 0xf0,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, 0xff,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0xe3, 0xe3, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0xe3, 0xe3,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x0f, 0x1e, 0x3c, 0x78, 0xf0, 0xe0, 0xc0, 0xff, 0xff, 0xff,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x1f, 0x1f, 0x1f,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x1e, 0xfc, 0xf8, 0xf0,
+                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0x78, 0x3f, 0x1f, 0x0f
+            };
+
+            oled_write_raw_P(qmk_left_hand, sizeof(qmk_left_hand));
+            break;
+    }
+
+    /* Leader */
+    if (is_leader_active) {
+
+        static const char PROGMEM qmk_leader[] = {
+            0x00, 0x00, 0xf8, 0xf8, 0x78, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+            0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x78, 0xf8, 0xf8, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00,
+            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0,
+            0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
+            0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x18, 0x18, 0x18,
+            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87, 0x87, 0x87, 0x87, 0x87,
+            0x87, 0x87, 0x87, 0x87, 0x87, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3,
+            0xc3, 0xc3, 0xc3, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00,
+            0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x0e, 0x0e,
+            0x0e, 0x0e, 0x0e, 0xfe, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x70, 0x70,
+            0x70, 0x70, 0x70, 0x7f, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xf8, 0x38, 0x38, 0x38,
+            0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc6, 0xc6, 0xc6,
+            0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
+            0xe1, 0xe1, 0xe1, 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x38, 0x38, 0x38,
+            0x78, 0xf8, 0xf8, 0xbf, 0x1f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00,
+            0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00,
+            0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+            0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00
+        };
+
+        oled_write_raw_P(qmk_leader, sizeof(qmk_leader));
+    }
+
+    /* Modifier keys */
+    if (get_mods()) {
+
+        if (get_mods() & MOD_MASK_CTRL) {
+
+            oled_write_char(0x01, false);
+            oled_write_char(0x02, false);
+            oled_write_char(0x03, false);
+            oled_write_char(0x04, false);
+            oled_write_char(0x05, false);
+
+            oled_write_char(0x21, false);
+            oled_write_char(0x22, false);
+            oled_write_char(0x23, false);
+            oled_write_char(0x24, false);
+            oled_write_char(0x25, false);
+        }
+        if (get_mods() & MOD_BIT(KC_LALT)) {
+
+            oled_write_char(0x41, false);
+            oled_write_char(0x42, false);
+            oled_write_char(0x43, false);
+            oled_write_char(0x44, false);
+            oled_write_char(0x45, false);
+
+            oled_write_char(0x61, false);
+            oled_write_char(0x62, false);
+            oled_write_char(0x63, false);
+            oled_write_char(0x64, false);
+            oled_write_char(0x65, false);
+        }
+        if (get_mods() & MOD_BIT(KC_RALT)) {
+
+            oled_write_char(0x81, false);
+            oled_write_char(0x82, false);
+            oled_write_char(0x83, false);
+            oled_write_char(0x84, false);
+            oled_write_char(0x85, false);
+
+            oled_write_char(0xA1, false);
+            oled_write_char(0xA2, false);
+            oled_write_char(0xA3, false);
+            oled_write_char(0xA4, false);
+            oled_write_char(0xA5, false);
+        }
+        if (get_mods() & MOD_MASK_SHIFT) {
+
+            oled_write_char(0x4B, false);
+            oled_write_char(0x4C, false);
+            oled_write_char(0x4D, false);
+            oled_write_char(0x4E, false);
+            oled_write_char(0x4F, false);
+
+            oled_write_char(0x6B, false);
+            oled_write_char(0x6C, false);
+            oled_write_char(0x6D, false);
+            oled_write_char(0x6E, false);
+            oled_write_char(0x6F, false);
+        }
+        if (get_mods() & MOD_MASK_GUI) {
+
+            oled_write_char(0x8B, false);
+            oled_write_char(0x8C, false);
+            oled_write_char(0x8D, false);
+            oled_write_char(0x8E, false);
+            oled_write_char(0x8F, false);
+
+            oled_write_char(0xAB, false);
+            oled_write_char(0xAC, false);
+            oled_write_char(0xAD, false);
+            oled_write_char(0xAE, false);
+            oled_write_char(0xAF, false);
+        }
+    }
+};
+
+bool oled_task_user(void) {
+    oled_display();
+    return false;
+}
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/readme.md b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/readme.md
new file mode 100644
index 0000000000..3873ca45cf
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/readme.md
@@ -0,0 +1,130 @@
+### Custom aurora sweep keymap
+
+
+This keymap is inspired by [optimot](https://bepo.fr/) which is a French layout.  
+Nonetheless all French characters are sent in unicode, so it works with the standard US ANSI layout.
+
+It uses the *best* qmk features :
+- combos ♥
+- auto shift
+- leader
+
+I tried to optimise key positions for neovim and i3wm while limit digrams.  
+The oled screens are used to display the current layout, the modifier keys and the leader key.  
+
+![oledmodifiers](https://i.imgur.com/on95jx0.png)
+![oledmouse](https://i.imgur.com/PwkR6P2.png)
+
+#### Install
+
+Clone this repo in the folder :
+
+    ~/qmk_firmware/keyboards/splitkb/aurora/sweep/keymaps/
+
+#### Compile and flash
+
+Navigate into the keymap folder and launch this command for both sides :
+
+    qmk compile && qmk flash
+
+and :
+
+    Click twice on the flash button and use nautilus for instance to clic on the keyboard.  
+    Don't forget to flash with the double tap bootloader define before soldering.
+
+#### Links
+
+[qmk](https://docs.qmk.fm/#/)  
+[ferris sweep](https://github.com/davidphilipbarr/Sweep)  
+[splitkb](https://splitkb.com)  
+
+#### Layouts
+
+![base](https://i.imgur.com/E3hRkxW.png)  
+![numeric](https://i.imgur.com/GeC0reE.png)  
+![mouse](https://i.imgur.com/QhsWVrE.png)  
+![arrows](https://i.imgur.com/4sAfGAt.png)  
+![adjust](https://i.imgur.com/hcoN2P8.png)  
+![fn](https://i.imgur.com/dVunqFF.png)  
+![left hand](https://i.imgur.com/fk5YJj6.png)  
+![combo](https://i.imgur.com/aZ8TpuY.png)  
+![combo2](https://i.imgur.com/QayRuFA.png)  
+![combo3](https://i.imgur.com/YpnbMeh.png)  
+
+#### French
+
+|        -         |                        |
+|------------------|------------------------|
+|   space + e      |   é                    |
+|   space + i      |   ç                    |
+|   space + a      |   æ                    |
+|   space + o      |   œ                    |
+|   comma + a      |   à                    |
+|   comma + e      |   è                    |
+|   comma + i      |   ì                    |
+|   comma + o      |   ò                    |
+|   comma + u      |   ù                    |
+|   enter + a      |   â                    |
+|   enter + e      |   ê                    |
+|   enter + i      |   î                    |
+|   enter + o      |   ô                    |
+|   enter + u      |   û                    |
+|   dot + a        |   ä                    |
+|   dot + e        |   ë                    |
+|   dot + i        |   ï                    |
+|   dot + o        |   ö                    |
+|   dot + u        |   ü                    |
+|   dot + y        |   ÿ                    |
+
+
+#### Leader
+
+| -                  |                        |
+|--------------------|------------------------|
+|   M + S            |   mail short           |
+|   M + L            |   mail long            |
+|   D + E + G        |   °                    |
+|   C + O + P        |   ©                    |
+|   R + E + G        |   ®                    |
+|   D + I + A        |   ø                    |
+|   D + I + A + M    |   Ø                    |
+|   E + U + R        |   €                    |
+|   P + O + U        |   £                    |
+|   Y + E + N        |   ¥                    |
+|   C + E + N        |   ¢                    |
+|   P + I            |   π                    |
+|   P + I + I        |   Π                    |
+|   O + M + E        |   ω                    |
+|   O + M + E + G    |   Ω                    |
+|   U + P + F        |   ⁰                    |
+|   D + N + F        |   ₀                    |
+
+| -                  |                        |
+|--------------------|------------------------|
+|   M + U + L        |   ×                    |
+|   D + I + V        |   ÷                    |
+|   P + M            |   ±                    |
+|   I + N + E        |   ≠                    |
+|   A + L + M        |   ≈                    |
+|   S + Q + U        |   √                    |
+|   I + N + F        |   ∞                    |
+|   < + <            |   ≤                    |
+|   > + >            |   ≥                    |
+|   F + S + T        |   ¼                    |
+|   F + S + G        |   ½                    |
+|   F + H + T        |   ¾                    |
+
+| -                  |                        |
+|--------------------|------------------------|
+|   F + L + A        |   ⚡                   |
+|   S + P + A        |   ✨                   |
+|   O + W + D        |   ⛔                   |
+|   C + O + F        |   ☕                   |
+|   U + M + B        |   ☔                   |
+|   Y + E + S        |   ✅                   |
+|   N + O            |   ❎                   |
+|   C + R + O        |   ❌                   |
+|   ?                |   ❔                   |
+|   !                |   ❕                   |
+|   ? + ?            |   ❓                   |
+|   ! + !            |   ❗                   |
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/rules.mk b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/rules.mk
new file mode 100644
index 0000000000..d854cbb16b
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/rules.mk
@@ -0,0 +1,22 @@
+LTO_ENABLE = yes
+CONVERT_TO = elite_pi
+
+SRC += features/auto_shift.c
+SRC += features/combo.c
+SRC += features/leader.c
+SRC += oled/oled.c
+
+OLED_ENABLE = yes
+OLED_DRIVER = SSD1306
+
+MOUSEKEY_ENABLE = yes
+AUTO_SHIFT_ENABLE = yes
+AUTO_SHIFT_MODIFIERS = no
+COMBO_ENABLE = yes
+LEADER_ENABLE = yes
+
+# Recommended for space cadet shift
+COMMAND_ENABLE = no
+
+UNICODE_ENABLE = yes
+SEND_STRING_ENABLE = yes
-- 
cgit v1.2.3


From bccf2cba6aa4bcbed7041ee499ac312b42d0d563 Mon Sep 17 00:00:00 2001
From: yiancar <yiangosyiangou@cytanet.com.cy>
Date: Fri, 10 Feb 2023 09:09:40 +0000
Subject: [Keyboard] Add alas keyboard (#19717)

Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: yiancar <yiancar@gmail.com>
---
 keyboards/alas/alas.c                   |  21 +++++
 keyboards/alas/alas.h                   | 132 ++++++++++++++++++++++++++++++++
 keyboards/alas/config.h                 |  31 ++++++++
 keyboards/alas/info.json                |  39 ++++++++++
 keyboards/alas/keymaps/default/keymap.c |  32 ++++++++
 keyboards/alas/keymaps/via/keymap.c     |  46 +++++++++++
 keyboards/alas/keymaps/via/rules.mk     |   1 +
 keyboards/alas/readme.md                |  39 ++++++++++
 keyboards/alas/rules.mk                 |  22 ++++++
 9 files changed, 363 insertions(+)
 create mode 100755 keyboards/alas/alas.c
 create mode 100644 keyboards/alas/alas.h
 create mode 100755 keyboards/alas/config.h
 create mode 100755 keyboards/alas/info.json
 create mode 100644 keyboards/alas/keymaps/default/keymap.c
 create mode 100644 keyboards/alas/keymaps/via/keymap.c
 create mode 100755 keyboards/alas/keymaps/via/rules.mk
 create mode 100755 keyboards/alas/readme.md
 create mode 100755 keyboards/alas/rules.mk

diff --git a/keyboards/alas/alas.c b/keyboards/alas/alas.c
new file mode 100755
index 0000000000..2932aedb03
--- /dev/null
+++ b/keyboards/alas/alas.c
@@ -0,0 +1,21 @@
+/* Copyright 2023 Yiancar-Designs
+ *
+ * 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 "alas.h"
+
+void led_init_ports(void) {
+    // Set our LED pins as open drain outputs
+    palSetLineMode(LED_CAPS_LOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
+}
diff --git a/keyboards/alas/alas.h b/keyboards/alas/alas.h
new file mode 100644
index 0000000000..47314c8ce8
--- /dev/null
+++ b/keyboards/alas/alas.h
@@ -0,0 +1,132 @@
+/* Copyright 2023 Yiancar-Designs
+ *
+ * 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
+
+#define XXX KC_NO
+
+#include "quantum.h"
+
+#define LAYOUT_all( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2C, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D,      \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,      \
+    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D       \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+    { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D }  \
+}
+
+#define LAYOUT_60_ansi( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D, \
+    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3C, \
+    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D }, \
+    { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX }, \
+    { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D }  \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2C, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D,      \
+    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,      \
+    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D       \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+    { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+    { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D }  \
+}
+
+#define LAYOUT_60_ansi_tsangan( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D, \
+    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3C, \
+    K40, K41, K42,                K46,                     K4B, K4C, K4D  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D }, \
+    { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX }, \
+    { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, XXX, K4B, K4C, K4D }  \
+}
+
+#define LAYOUT_60_iso( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C,      \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K1D, K2D, \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3C, \
+    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX }, \
+    { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D }  \
+}
+
+#define LAYOUT_60_iso_split_bs_rshift( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2C, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C,           \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K1D, K2D,      \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,      \
+    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D       \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+    { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D }  \
+}
+
+#define LAYOUT_60_iso_tsangan( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C,      \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K1D, K2D, \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3C, \
+    K40, K41, K42,                K46,                     K4B, K4C, K4D  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX }, \
+    { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, XXX, K4B, K4C, K4D }  \
+}
+
+#define LAYOUT_60_tsangan_hhkb( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2C, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D,      \
+    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,      \
+    K40, K41, K42,                K46,                     K4B, K4C, K4D       \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+    { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+    { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, XXX, K4B, K4C, K4D }  \
+}
diff --git a/keyboards/alas/config.h b/keyboards/alas/config.h
new file mode 100755
index 0000000000..95a8e7bcdb
--- /dev/null
+++ b/keyboards/alas/config.h
@@ -0,0 +1,31 @@
+/*
+Copyright 2023 Yiancar-Designs
+
+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
+
+#define MATRIX_ROW_PINS { A2, B9, B8, B5, B4 }
+#define MATRIX_COL_PINS { A1, B1, B0, A7, A6, A5, A4, A3, B2, B10, B11, B12, B13, B14 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Ensure we jump to bootloader if the RESET keycode was pressed */
+#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
+
+/* Indicator LEDs */
+#define LED_CAPS_LOCK_PIN B6
+#define LED_PIN_ON_STATE 0
diff --git a/keyboards/alas/info.json b/keyboards/alas/info.json
new file mode 100755
index 0000000000..aa87efaae3
--- /dev/null
+++ b/keyboards/alas/info.json
@@ -0,0 +1,39 @@
+{
+    "keyboard_name": "Alas",
+    "manufacturer": "Yiancar-Designs",
+    "url": "https://yiancar-designs.com",
+    "maintainer": "Yiancar-Designs",
+    "usb": {
+        "vid": "0x8968",
+        "pid": "0x414C",
+        "device_version": "0.0.1"
+    },
+    "processor": "STM32F072",
+    "bootloader": "stm32-dfu",
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+        },
+        "LAYOUT_60_ansi": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+        },
+        "LAYOUT_60_ansi_split_bs_rshift": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+        },
+        "LAYOUT_60_ansi_tsangan": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"x":11, "y":4, "w":1.5}, {"x":12.5, "y":4}, {"x":13.5, "y":4, "w":1.5}]
+        },
+        "LAYOUT_60_iso": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.75, "y":1, "w":1.25, "h":2}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+        },
+        "LAYOUT_60_iso_split_bs_rshift": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.75, "y":1, "w":1.25, "h":2}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+        },
+        "LAYOUT_60_iso_tsangan": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.75, "y":1, "w":1.25, "h":2}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"x":11, "y":4, "w":1.5}, {"x":12.5, "y":4}, {"x":13.5, "y":4, "w":1.5}]
+        },
+        "LAYOUT_60_tsangan_hhkb": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"x":11, "y":4, "w":1.5}, {"x":12.5, "y":4}, {"x":13.5, "y":4, "w":1.5}]
+        }
+    }
+}
diff --git a/keyboards/alas/keymaps/default/keymap.c b/keyboards/alas/keymaps/default/keymap.c
new file mode 100644
index 0000000000..66d8614837
--- /dev/null
+++ b/keyboards/alas/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+/* Copyright 2023 Yiancar-Designs
+ *
+ * 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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_all( /* Base */
+    QK_GESC,  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_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_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_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, MO(1),
+    KC_LCTL,  KC_LGUI,  KC_LALT,                       KC_SPC,                          KC_RALT,  MO(1),    KC_APP,  KC_RCTL),
+
+[1] = LAYOUT_all( /* FN */
+    KC_GRV,   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_TRNS,
+    KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PSCR,  KC_SCRL,  KC_PAUS,  KC_UP,    KC_TRNS,  KC_TRNS,
+    KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_HOME,  KC_PGUP,  KC_LEFT,  KC_RGHT,            KC_TRNS,
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDN,  KC_DOWN,  KC_TRNS,  KC_TRNS,
+    KC_VOLU,  KC_VOLD,  KC_MUTE,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS)
+};
diff --git a/keyboards/alas/keymaps/via/keymap.c b/keyboards/alas/keymaps/via/keymap.c
new file mode 100644
index 0000000000..3f84154ca4
--- /dev/null
+++ b/keyboards/alas/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
+/* Copyright 2023 Yiancar-Designs
+ *
+ * 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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_all( /* Base */
+    QK_GESC,  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_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_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_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, MO(1),
+    KC_LCTL,  KC_LGUI,  KC_LALT,                       KC_SPC,                          KC_RALT,  MO(1),    KC_APP,  KC_RCTL),
+
+[1] = LAYOUT_all( /* FN */
+    KC_GRV,   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_TRNS,
+    KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PSCR,  KC_SCRL,  KC_PAUS,  KC_UP,    KC_TRNS,  KC_TRNS,
+    KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_HOME,  KC_PGUP,  KC_LEFT,  KC_RGHT,            KC_TRNS,
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDN,  KC_DOWN,  KC_TRNS,  KC_TRNS,
+    KC_VOLU,  KC_VOLD,  KC_MUTE,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),
+
+[2] = LAYOUT_all( /* Empty for dynamic keymaps */
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[3] = LAYOUT_all( /* Empty for dynamic keymaps */
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/alas/keymaps/via/rules.mk b/keyboards/alas/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/alas/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/alas/readme.md b/keyboards/alas/readme.md
new file mode 100755
index 0000000000..35d891464e
--- /dev/null
+++ b/keyboards/alas/readme.md
@@ -0,0 +1,39 @@
+# Alas
+
+This is a standard 60% layout PCB. It supports VIA.
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A 60% keyboard with STM32F072CB
+* Hardware Availability: https://geekhack.org/index.php?topic=119025.0 
+
+![Layer 0](https://i.imgur.com/LL5mZXAh.png)
+![Layer 1](https://i.imgur.com/RJDVmtyh.png)
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+    make alas:default
+
+Flashing example for this keyboard:
+
+    make alas:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+### Reset
+
+- Unplug
+- Hold Escape
+- Plug In
+- Unplug
+- Release Escape
+
+### Flash
+
+- Unplug
+- Hold Escape
+- Plug In
+- Flash using QMK Toolbox or CLI (`make alas:<keymap>:flash`)
diff --git a/keyboards/alas/rules.mk b/keyboards/alas/rules.mk
new file mode 100755
index 0000000000..4b25596ba2
--- /dev/null
+++ b/keyboards/alas/rules.mk
@@ -0,0 +1,22 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+# 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
+
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_ansi_tsangan 60_iso 60_iso_split_bs_rshift 60_iso_tsangan 60_tsangan_hhkb
-- 
cgit v1.2.3