diff --git a/.gitignore b/.gitignore
index f6401d9f832..ca9f00a7330 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,6 +18,11 @@
*.lst
*.map
*.o
+*.a
+*.so
+*.dylib
+*.dll
+*.la
*.stackdump
*.sym
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/info.json b/keyboards/1upkeyboards/pi60_rgb_v2/info.json
new file mode 100644
index 00000000000..88b3e1ced4a
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/info.json
@@ -0,0 +1,258 @@
+{
+ "manufacturer": "1upkeyboards",
+ "keyboard_name": "pi60_rgb_v2",
+ "maintainer": "ziptyze",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x5612",
+ "vid": "0x6F75"
+ },
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 10
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true,
+ },
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "matrix_pins": {
+ "cols": ["GP25", "GP1", "GP15", "GP4", "GP5", "GP14", "GP6", "GP7", "GP8", "GP13", "GP12", "GP9", "GP11", "GP10"],
+ "rows": ["GP29", "GP27", "GP26", "GP17", "GP16"]
+ },
+ "rgb_matrix": {
+ "max_brightness": 125,
+ "sleep": true,
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"x": 4, "y": 5, "flags": 2},
+ {"matrix": [0, 0], "x": 8, "y": 7, "flags": 1},
+ {"matrix": [0, 1], "x": 23, "y": 7, "flags": 4},
+ {"x": 30, "y": 7, "flags": 2},
+ {"matrix": [0, 2], "x": 37, "y": 7, "flags": 4},
+ {"x": 45, "y": 7, "flags": 2},
+ {"matrix": [0, 3], "x": 52, "y": 7, "flags": 4},
+ {"x": 60, "y": 7, "flags": 2},
+ {"matrix": [0, 4], "x": 67, "y": 7, "flags": 4},
+ {"x": 75, "y": 7, "flags": 2},
+ {"matrix": [0, 5], "x": 82, "y": 7, "flags": 4},
+ {"x": 90, "y": 7, "flags": 2},
+ {"matrix": [0, 6], "x": 97, "y": 7, "flags": 4},
+ {"x": 105, "y": 7, "flags": 2},
+ {"matrix": [0, 7], "x": 112, "y": 7, "flags": 4},
+ {"x": 120, "y": 7, "flags": 2},
+ {"matrix": [0, 8], "x": 127, "y": 7, "flags": 4},
+ {"x": 135, "y": 7, "flags": 2},
+ {"matrix": [0, 9], "x": 142, "y": 7, "flags": 4},
+ {"x": 149, "y": 7, "flags": 2},
+ {"matrix": [0, 10], "x": 157, "y": 7, "flags": 4},
+ {"x": 164, "y": 7, "flags": 2},
+ {"matrix": [0, 11], "x": 172, "y": 7, "flags": 4},
+ {"x": 179, "y": 7, "flags": 2},
+ {"matrix": [0, 12], "x": 187, "y": 7, "flags": 4},
+ {"x": 198, "y": 7, "flags": 2},
+ {"matrix": [0, 13], "x": 209, "y": 7, "flags": 1},
+ {"x": 220, "y": 7, "flags": 2},
+ {"x": 220, "y": 19, "flags": 2},
+ {"matrix": [1, 13], "x": 213, "y": 19, "flags": 1},
+ {"matrix": [1, 12], "x": 194, "y": 19, "flags": 4},
+ {"matrix": [1, 11], "x": 179, "y": 19, "flags": 4},
+ {"matrix": [1, 10], "x": 164, "y": 19, "flags": 4},
+ {"matrix": [1, 9], "x": 149, "y": 19, "flags": 4},
+ {"matrix": [1, 8], "x": 134, "y": 19, "flags": 4},
+ {"matrix": [1, 7], "x": 119, "y": 19, "flags": 4},
+ {"matrix": [1, 6], "x": 105, "y": 19, "flags": 4},
+ {"matrix": [1, 5], "x": 90, "y": 19, "flags": 4},
+ {"matrix": [1, 4], "x": 75, "y": 19, "flags": 4},
+ {"matrix": [1, 3], "x": 60, "y": 19, "flags": 4},
+ {"matrix": [1, 2], "x": 45, "y": 19, "flags": 4},
+ {"matrix": [1, 1], "x": 30, "y": 19, "flags": 4},
+ {"matrix": [1, 0], "x": 11, "y": 19, "flags": 1},
+ {"x": 4, "y": 19, "flags": 2},
+ {"x": 4, "y": 32, "flags": 2},
+ {"matrix": [2, 0], "x": 13, "y": 32, "flags": 1},
+ {"matrix": [2, 1], "x": 34, "y": 32, "flags": 4},
+ {"matrix": [2, 2], "x": 49, "y": 32, "flags": 4},
+ {"matrix": [2, 3], "x": 64, "y": 32, "flags": 4},
+ {"matrix": [2, 4], "x": 79, "y": 32, "flags": 4},
+ {"matrix": [2, 5], "x": 94, "y": 32, "flags": 4},
+ {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4},
+ {"matrix": [2, 7], "x": 123, "y": 32, "flags": 4},
+ {"matrix": [2, 8], "x": 138, "y": 32, "flags": 4},
+ {"matrix": [2, 9], "x": 153, "y": 32, "flags": 4},
+ {"matrix": [2, 10], "x": 168, "y": 32, "flags": 4},
+ {"matrix": [2, 11], "x": 183, "y": 32, "flags": 4},
+ {"matrix": [2, 13], "x": 207, "y": 32, "flags": 1},
+ {"x": 220, "y": 32, "flags": 2},
+ {"x": 220, "y": 45, "flags": 2},
+ {"matrix": [3, 13], "x": 203, "y": 45, "flags": 1},
+ {"matrix": [3, 10], "x": 175, "y": 45, "flags": 4},
+ {"matrix": [3, 9], "x": 161, "y": 45, "flags": 4},
+ {"matrix": [3, 8], "x": 146, "y": 45, "flags": 4},
+ {"matrix": [3, 7], "x": 135, "y": 45, "flags": 4},
+ {"matrix": [3, 6], "x": 116, "y": 45, "flags": 4},
+ {"matrix": [3, 5], "x": 101, "y": 45, "flags": 4},
+ {"matrix": [3, 4], "x": 86, "y": 45, "flags": 4},
+ {"matrix": [3, 3], "x": 71, "y": 45, "flags": 4},
+ {"matrix": [3, 2], "x": 56, "y": 45, "flags": 4},
+ {"matrix": [3, 1], "x": 41, "y": 45, "flags": 4},
+ {"matrix": [3, 0], "x": 17, "y": 45, "flags": 1},
+ {"x": 4, "y": 45, "flags": 2},
+ {"x": 4, "y": 57, "flags": 2},
+ {"matrix": [4, 0], "x": 9, "y": 57, "flags": 1},
+ {"x": 15, "y": 57, "flags": 2},
+ {"x": 23, "y": 57, "flags": 2},
+ {"matrix": [4, 1], "x": 28, "y": 57, "flags": 1},
+ {"x": 34, "y": 57, "flags": 2},
+ {"x": 41, "y": 57, "flags": 2},
+ {"matrix": [4, 2], "x": 47, "y": 57, "flags": 1},
+ {"x": 53, "y": 57, "flags": 2},
+ {"x": 67, "y": 57, "flags": 2},
+ {"x": 71, "y": 57, "flags": 1},
+ {"x": 81, "y": 57, "flags": 2},
+ {"x": 95, "y": 57, "flags": 2},
+ {"matrix": [4, 5], "x": 103, "y": 57, "flags": 1},
+ {"x": 110, "y": 57, "flags": 2},
+ {"x": 125, "y": 57, "flags": 2},
+ {"x": 134, "y": 57, "flags": 1},
+ {"x": 139, "y": 57, "flags": 2},
+ {"x": 153, "y": 57, "flags": 2},
+ {"matrix": [4, 9], "x": 159, "y": 57, "flags": 1},
+ {"x": 165, "y": 57, "flags": 2},
+ {"x": 172, "y": 57, "flags": 2},
+ {"matrix": [4, 10], "x": 177, "y": 57, "flags": 1},
+ {"x": 183, "y": 57, "flags": 2},
+ {"x": 190, "y": 57, "flags": 2},
+ {"matrix": [4, 12], "x": 196, "y": 57, "flags": 1},
+ {"x": 202, "y": 57, "flags": 2},
+ {"x": 209, "y": 57, "flags": 2},
+ {"matrix": [4, 13], "x": 215, "y": 57, "flags": 1},
+ {"x": 220, "y": 57, "flags": 2}
+ ]
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP28"
+ },
+ "community_layouts" : ["60_ansi"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "BS", "matrix": [0, 13], "w": 2, "x": 13, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1},
+ {"label": "Caps", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2},
+ {"label": "LShift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3},
+ {"label": "Z", "matrix": [3, 1], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 2], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 3], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 4], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 5], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 6], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 7], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 8], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 9], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 10], "x": 11.25, "y": 3},
+ {"label": "RShift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3},
+ {"label": "LCtrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4},
+ {"label": "LGui", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4},
+ {"label": "LAlt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4},
+ {"label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4},
+ {"label": "RAlt", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4},
+ {"label": "RGui", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4},
+ {"label": "FN", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4},
+ {"label": "RCtrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/default/keymap.c b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/default/keymap.c
new file mode 100644
index 00000000000..88f17a44e9f
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/* Copyright 2022 ziptyze
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_60_ansi(
+ 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_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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ )
+};
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/keymap.c b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/keymap.c
new file mode 100644
index 00000000000..5ed2ca48cde
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/keymap.c
@@ -0,0 +1,44 @@
+/* Copyright 2022 ziptyze
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_60_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
+ ),
+
+ [1] = LAYOUT_60_ansi(
+ 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_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT_60_ansi(
+ 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,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, RGB_M_SN,RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/rules.mk b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/readme.md b/keyboards/1upkeyboards/pi60_rgb_v2/readme.md
new file mode 100644
index 00000000000..87dc3f50305
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/readme.md
@@ -0,0 +1,24 @@
+# 1up pi60 rgb v2
+
+![1up pi60 rgb v2](https://i.imgur.com/H1tRGZh.png)
+
+The pi60 RGB v2 is a 60% pcb from 1upkeyboards. This keyboard features an ANSI layout hot swap PCB with per-key in-switch RGB lighting as well as RGB underglow. The controller is a Raspberry Pi rp2040 microcontroller.
+
+* Keyboard Maintainer: [ziptyze](https://github.com/ziptyze)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 1upkeyboards/pi60_rgb_v2:default
+
+Flashing example for this keyboard:
+
+ make 1upkeyboards/pi60_rgb_v2: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 2 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
+* **Bootloader button**: Hold the button on the back of the PCB and plug in the keyboard
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/rules.mk b/keyboards/1upkeyboards/pi60_rgb_v2/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/mode/m80v1/m80h/info.json b/keyboards/mode/m80v1/m80h/info.json
index be7338c6f87..f132f25fe58 100644
--- a/keyboards/mode/m80v1/m80h/info.json
+++ b/keyboards/mode/m80v1/m80h/info.json
@@ -15,7 +15,6 @@
"diode_direction": "COL2ROW",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
- "community_layouts": ["tkl_ansi"],
"layout_aliases": {
"LAYOUT_eighty_m80h": "LAYOUT_tkl_ansi"
},
diff --git a/keyboards/mode/m80v2/m80v2h/info.json b/keyboards/mode/m80v2/m80v2h/info.json
index 03a2d912bcd..b332a6853b8 100644
--- a/keyboards/mode/m80v2/m80v2h/info.json
+++ b/keyboards/mode/m80v2/m80v2h/info.json
@@ -19,7 +19,6 @@
},
"processor": "STM32F072",
"bootloader": "stm32-dfu",
- "community_layouts": ["tkl_ansi"],
"layout_aliases": {
"LAYOUT_m80v2h": "LAYOUT_tkl_ansi"
},
diff --git a/keyboards/proteus67/config.h b/keyboards/proteus67/config.h
new file mode 100644
index 00000000000..66faa7a2981
--- /dev/null
+++ b/keyboards/proteus67/config.h
@@ -0,0 +1,7 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define RGBLIGHT_MAX_LAYERS 3
+#define ENCODER_MAP_KEY_DELAY 10
+#define ENCODER_DEFAULT_POS 0x3
diff --git a/keyboards/proteus67/info.json b/keyboards/proteus67/info.json
new file mode 100644
index 00000000000..0ab7117ef27
--- /dev/null
+++ b/keyboards/proteus67/info.json
@@ -0,0 +1,129 @@
+{
+ "manufacturer": "gzowski",
+ "keyboard_name": "Proteus67",
+ "maintainer": "gzowski",
+ "development_board": "elite_pi",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP21", "pin_b": "GP9"}
+ ]
+ },
+ "features": {
+ "encoder": true,
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP23", "GP20", "GP22", "GP26", "GP27", "GP28", "GP29"],
+ "rows": ["GP12", "GP13", "GP14", "GP15", "GP16"]
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": false,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "brightness_steps": 5,
+ "led_count": 21,
+ "saturation_steps": 5,
+ "sleep": true,
+ "layers": {
+ "enabled": true,
+ "override_rgb": false
+ }
+ },
+ "url": "https://github.com/gzowski",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x6F64",
+ "vid": "0x7072"
+ },
+ "ws2812": {
+ "pin": "GP0",
+ "driver": "vendor"
+ },
+ "layouts": {
+ "LAYOUT_ortho_5x14": {
+ "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], "x": 13, "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": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "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": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [2, 11], "x": 11, "y": 2},
+ {"matrix": [2, 12], "x": 12, "y": 2},
+ {"matrix": [2, 13], "x": 13, "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},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3},
+ {"matrix": [3, 10], "x": 10, "y": 3},
+ {"matrix": [3, 11], "x": 11, "y": 3},
+ {"matrix": [3, 12], "x": 12, "y": 3},
+ {"matrix": [3, 13], "x": 13, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+ {"matrix": [4, 7], "x": 7, "y": 4},
+ {"matrix": [4, 8], "x": 8, "y": 4},
+ {"matrix": [4, 9], "x": 9, "y": 4},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/proteus67/keymaps/colemak/keymap.c b/keyboards/proteus67/keymaps/colemak/keymap.c
new file mode 100644
index 00000000000..df572f0bc01
--- /dev/null
+++ b/keyboards/proteus67/keymaps/colemak/keymap.c
@@ -0,0 +1,42 @@
+// Copyright 2023 James Gzowski
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+enum custom_layer {
+ _LAYERA,
+ _LAYERB,
+ _LAYERC,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_LAYERA] = LAYOUT_ortho_5x14(
+ KC_ESC , KC_1 ,KC_2 ,KC_3 , KC_4 , KC_5 , KC_PSCR , KC_EQL , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_GRV ,
+ KC_TAB , KC_Q ,KC_W ,KC_F , KC_P , KC_G , KC_END , KC_HOME , KC_J , KC_L , KC_U , KC_Y , KC_SCLN ,KC_MINUS,
+ KC_LCTL, KC_A ,KC_R ,KC_S , KC_T , KC_D , KC_PGDN , KC_PGUP , KC_H , KC_N , KC_E , KC_I , KC_O ,KC_QUOT ,
+ KC_LSFT, KC_Z ,KC_X ,KC_C , KC_V , KC_B , KC_LBRC, KC_RBRC, KC_K , KC_M , KC_COMM , KC_DOT , KC_SLSH, KC_RSFT,
+ KC_NO , MO(_LAYERB) ,KC_LGUI,KC_LALT, KC_SPC , KC_MUTE, KC_ENT , KC_BSPC , MO(_LAYERC) , KC_INS , KC_DEL
+),
+ [_LAYERB] = LAYOUT_ortho_5x14(
+ RGB_TOG , RGB_HUD ,RGB_HUI ,RGB_SAD , RGB_SAI , RGB_VAD , RGB_VAI , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_K , RGB_M_TW , RGB_M_G ,
+ KC_TRNS , KC_TRNS, KC_TRNS ,KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_TRNS ,KC_TRNS,
+ KC_TRNS, KC_TRNS ,KC_TRNS ,KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_MS_L , KC_MS_D , KC_MS_R , KC_SCLN,KC_QUOT ,
+ 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_NUBS, KC_TRNS,
+ KC_TRNS , KC_TRNS ,KC_TRNS,KC_TRNS, KC_TRNS , RGB_RMOD, KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+),
+ [_LAYERC] = LAYOUT_ortho_5x14(
+ KC_TRNS , KC_F1 ,KC_F2 ,KC_F3 , KC_F4 , KC_F5 , KC_TRNS , KC_TRNS , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_GRV ,
+ 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_LEFT , KC_DOWN , KC_UP , KC_RIGHT,KC_QUOT ,
+ 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_NUBS, KC_TRNS,
+ KC_TRNS , KC_TRNS ,KC_TRNS,KC_TRNS, KC_TRNS , RGB_MOD, KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_LAYERA] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [_LAYERB] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI)},
+ [_LAYERC] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}
+};
+#endif
+
diff --git a/keyboards/proteus67/keymaps/colemak/rules.mk b/keyboards/proteus67/keymaps/colemak/rules.mk
new file mode 100644
index 00000000000..f1adcab005e
--- /dev/null
+++ b/keyboards/proteus67/keymaps/colemak/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/proteus67/keymaps/default/keymap.c b/keyboards/proteus67/keymaps/default/keymap.c
new file mode 100644
index 00000000000..bef2a5d1c5b
--- /dev/null
+++ b/keyboards/proteus67/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+// Copyright 2023 James Gzowski
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+enum custom_layer {
+ _LAYERA,
+ _LAYERB,
+ _LAYERC,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_LAYERA] = LAYOUT_ortho_5x14(
+ KC_ESC , KC_1 ,KC_2 ,KC_3 , KC_4 , KC_5 , KC_MINUS , KC_EQL , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_GRV ,
+ KC_TAB , KC_Q ,KC_W ,KC_E , KC_R , KC_T , KC_END , KC_HOME , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_MINUS,
+ KC_LCTL, KC_A ,KC_S ,KC_D , KC_F , KC_G , KC_PGDN , KC_PGUP , KC_H , KC_J , KC_K , KC_L , KC_SCLN,KC_QUOT ,
+ KC_LSFT, KC_Z ,KC_X ,KC_C , KC_V , KC_B , KC_LBRC, KC_RBRC, KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH, KC_RSFT,
+ KC_NO , MO(_LAYERB) ,KC_LGUI,KC_LALT, KC_SPC , KC_MUTE, KC_ENT , KC_BSPC , MO(_LAYERC) , KC_INS , KC_DEL
+),
+ [_LAYERB] = LAYOUT_ortho_5x14(
+ RGB_TOG , RGB_HUI ,RGB_HUD ,RGB_SAI , RGB_SAD , RGB_VAI , RGB_VAD , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_K , RGB_M_X , RGB_M_G ,
+ KC_TRNS , KC_TRNS, KC_TRNS ,KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_TRNS ,KC_TRNS,
+ KC_TRNS, KC_TRNS ,KC_TRNS ,KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_MS_L , KC_MS_D , KC_MS_R , KC_SCLN,KC_QUOT ,
+ 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_NUBS, KC_TRNS,
+ KC_TRNS , KC_TRNS ,KC_TRNS,KC_TRNS, KC_TRNS , RGB_RMOD, KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+),
+ [_LAYERC] = LAYOUT_ortho_5x14(
+ KC_TRNS , KC_F1 ,KC_F2 ,KC_F3 , KC_F4 , KC_F5 , KC_TRNS , KC_TRNS , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_GRV ,
+ KC_TRNS , KC_TRNS, KC_TRNS ,KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_UP , 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_LEFT , KC_DOWN , KC_RIGHT , KC_SCLN,KC_QUOT ,
+ 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_NUBS, KC_TRNS,
+ KC_TRNS , KC_TRNS ,KC_TRNS,KC_TRNS, KC_TRNS , RGB_MOD, KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_LAYERA] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [_LAYERB] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI)},
+ [_LAYERC] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}
+};
+#endif
diff --git a/keyboards/proteus67/keymaps/default/rules.mk b/keyboards/proteus67/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/proteus67/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/proteus67/keymaps/via/keymap.c b/keyboards/proteus67/keymaps/via/keymap.c
new file mode 100644
index 00000000000..c79ac61e9e6
--- /dev/null
+++ b/keyboards/proteus67/keymaps/via/keymap.c
@@ -0,0 +1,41 @@
+// Copyright 2023 James Gzowski
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+enum custom_layer {
+ _LAYERA,
+ _LAYERB,
+ _LAYERC,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_LAYERA] = LAYOUT_ortho_5x14(
+ KC_ESC , KC_1 ,KC_2 ,KC_3 , KC_4 , KC_5 , KC_MINUS , KC_EQL , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_GRV ,
+ KC_TAB , KC_Q ,KC_W ,KC_E , KC_R , KC_T , KC_END , KC_HOME , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_MINUS,
+ KC_LCTL, KC_A ,KC_S ,KC_D , KC_F , KC_G , KC_PGDN , KC_PGUP , KC_H , KC_J , KC_K , KC_L , KC_SCLN,KC_QUOT ,
+ KC_LSFT, KC_Z ,KC_X ,KC_C , KC_V , KC_B , KC_LBRC, KC_RBRC, KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH, KC_RSFT,
+ KC_NO , MO(_LAYERB) ,KC_LGUI,KC_LALT, KC_SPC , KC_MUTE, KC_ENT , KC_BSPC , MO(_LAYERC) , KC_INS , KC_DEL
+),
+ [_LAYERB] = LAYOUT_ortho_5x14(
+ RGB_TOG , RGB_HUD ,RGB_HUI ,RGB_SAD , RGB_SAI , RGB_VAD , RGB_VAI , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_K , RGB_M_TW , RGB_M_G ,
+ KC_TRNS , KC_TRNS, KC_TRNS ,KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_TRNS ,KC_TRNS,
+ KC_TRNS, KC_TRNS ,KC_TRNS ,KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_MS_L , KC_MS_D , KC_MS_R , KC_SCLN,KC_QUOT ,
+ 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_NUBS, KC_TRNS,
+ KC_TRNS , KC_TRNS ,KC_TRNS,KC_TRNS, KC_TRNS , RGB_RMOD, KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+),
+ [_LAYERC] = LAYOUT_ortho_5x14(
+ KC_TRNS , KC_F1 ,KC_F2 ,KC_F3 , KC_F4 , KC_F5 , KC_TRNS , KC_TRNS , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_GRV ,
+ KC_TRNS , KC_TRNS, KC_TRNS ,KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_UP , 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_LEFT , KC_DOWN , KC_RIGHT , KC_SCLN,KC_QUOT ,
+ 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_NUBS, KC_TRNS,
+ KC_TRNS , KC_TRNS ,KC_TRNS,KC_TRNS, KC_TRNS , RGB_MOD, KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_LAYERA] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [_LAYERB] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI)},
+ [_LAYERC] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}
+};
+#endif
diff --git a/keyboards/proteus67/keymaps/via/rules.mk b/keyboards/proteus67/keymaps/via/rules.mk
new file mode 100644
index 00000000000..f1adcab005e
--- /dev/null
+++ b/keyboards/proteus67/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/proteus67/proteus67.c b/keyboards/proteus67/proteus67.c
new file mode 100644
index 00000000000..4073ac87d3e
--- /dev/null
+++ b/keyboards/proteus67/proteus67.c
@@ -0,0 +1,42 @@
+// Copyright 2023 James Gzowski
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+enum custom_layer {
+ _LAYERA,
+ _LAYERB,
+ _LAYERC,
+};
+
+// MO(_LAYERB)
+const rgblight_segment_t PROGMEM backlight_layer_layerb[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 4, HSV_GOLD}
+);
+// MO(_LAYERC)
+const rgblight_segment_t PROGMEM backlight_layer_layerc[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 4, HSV_CYAN}
+);
+const rgblight_segment_t PROGMEM backlight_layer_layera[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 4, HSV_BLACK}
+);
+const rgblight_segment_t* const PROGMEM set_backlight_mode[] = RGBLIGHT_LAYERS_LIST(
+ backlight_layer_layerb,
+ backlight_layer_layerc,
+ backlight_layer_layera
+);
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+ rgblight_set_layer_state(0, layer_state_cmp(state, _LAYERB));
+ rgblight_set_layer_state(1, layer_state_cmp(state, _LAYERC));
+ rgblight_set_layer_state(2, layer_state_cmp(state, _LAYERA));
+
+ return layer_state_set_user(state);
+}
+
+void keyboard_post_init_kb(void) {
+ rgblight_set_effect_range(4, 17);
+ rgblight_sethsv_range(HSV_BLACK, 0, 4);
+ rgblight_layers = set_backlight_mode;
+
+ keyboard_post_init_user();
+}
diff --git a/keyboards/proteus67/readme.md b/keyboards/proteus67/readme.md
new file mode 100644
index 00000000000..b1422b80421
--- /dev/null
+++ b/keyboards/proteus67/readme.md
@@ -0,0 +1,25 @@
+# proteus67
+
+![proteus67](https://i.imgur.com/mYhl7Jah.png)
+
+67 key ortholinear layout with rotary encoder.
+
+* Keyboard Maintainer: [James Gzowski](https://github.com/gzowski)
+* Hardware Supported: Elite-Pi or equivilent RP2040 controller with additional I/O along bottom.
+* Build Guide: [Proteus67](https://github.com/gzowski/Proteus67)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make proteus67:default
+
+Flashing example for this keyboard:
+
+ make proteus67: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
+
+* **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, if using a RP2040 press repeatidly to enter boot mode.
+* **Hold down boot loader button on MCU** Hold down the boot loader button on the MCU while plugging in the keyboard
diff --git a/keyboards/proteus67/rules.mk b/keyboards/proteus67/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/proteus67/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/tacworks/tac_k1/config.h b/keyboards/tacworks/tac_k1/config.h
new file mode 100644
index 00000000000..7cc691ea956
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
diff --git a/keyboards/tacworks/tac_k1/halconf.h b/keyboards/tacworks/tac_k1/halconf.h
new file mode 100644
index 00000000000..8760386e815
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/halconf.h
@@ -0,0 +1,10 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/tacworks/tac_k1/info.json b/keyboards/tacworks/tac_k1/info.json
new file mode 100644
index 00000000000..cf098291be8
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/info.json
@@ -0,0 +1,411 @@
+{
+ "manufacturer": "TACWORKS",
+ "keyboard_name": "TAC-K1",
+ "maintainer": "JoyLee",
+ "bootloader": "wb32-dfu",
+ "diode_direction": "ROW2COL",
+ "eeprom": {
+ "driver": "wear_leveling",
+ "wear_leveling": {
+ "driver": "spi_flash",
+ "backing_size": 4096
+ }
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "A5",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["C0", "C1", "C2", "C3", "A6", "B1", "B10", "B11", "B12", "B13", "B14", "B15", "C6", "C7", "C8", "C9"],
+ "rows": ["A1", "A2", "A3", "A4", "C13"]
+ },
+ "processor": "WB32FQ95",
+ "url": "https://tacworks.store",
+ "usb": {
+ "device_version": "1.0.0",
+ "force_nkro": true,
+ "pid": "0xE431",
+ "suspend_wakeup_delay": 1000,
+ "vid": "0x342D"
+ },
+ "community_layouts": [
+ "65_ansi_blocker",
+ "65_ansi_blocker_split_bs",
+ "65_iso_blocker",
+ "65_iso_blocker_split_bs"
+ ],
+ "layouts": {
+ "LAYOUT_all": {
+ "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], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"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], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"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], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"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, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 4, "w": 2.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 7], "x": 7.5, "y": 4, "w": 2.5},
+ {"matrix": [4, 8], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker": {
+ "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], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"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], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"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, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"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, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 8], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_split_bs": {
+ "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], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"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], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"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, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"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, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 8], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "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], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"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, 14], "x": 15, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"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], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"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, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 8], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker_split_bs": {
+ "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], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"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, 14], "x": 15, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"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], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"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, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 8], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/tacworks/tac_k1/keymaps/default/keymap.c b/keyboards/tacworks/tac_k1/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ba7dcc81963
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#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_BSPC, _______, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, _______, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, _______, KC_SPC, _______, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [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, EE_CLR, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_INS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
diff --git a/keyboards/tacworks/tac_k1/keymaps/via/keymap.c b/keyboards/tacworks/tac_k1/keymaps/via/keymap.c
new file mode 100644
index 00000000000..ba7dcc81963
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/keymaps/via/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#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_BSPC, _______, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, _______, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, _______, KC_SPC, _______, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [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, EE_CLR, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_INS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
diff --git a/keyboards/tacworks/tac_k1/keymaps/via/rules.mk b/keyboards/tacworks/tac_k1/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/tacworks/tac_k1/mcuconf.h b/keyboards/tacworks/tac_k1/mcuconf.h
new file mode 100644
index 00000000000..ca0e017ebdf
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef WB32_SPI_USE_QSPI
+#define WB32_SPI_USE_QSPI TRUE
diff --git a/keyboards/tacworks/tac_k1/readme.md b/keyboards/tacworks/tac_k1/readme.md
new file mode 100644
index 00000000000..8ec29459c74
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/readme.md
@@ -0,0 +1,25 @@
+
+# TAC-K1
+
+![tac-k1](https://i.imgur.com/3YGvrSZh.jpg)
+
+* Keyboard Maintainer: [JoyLee](https://github.com/itarze)
+* Hardware Supported: TAC-K1 PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make tacworks/tac_k1:default
+
+Flashing example for this keyboard:
+
+ make tacworks/tac_k1: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/tacworks/tac_k1/rules.mk b/keyboards/tacworks/tac_k1/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/themadnoodle/udon13/config.h b/keyboards/themadnoodle/udon13/config.h
new file mode 100644
index 00000000000..fbb498c4081
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/config.h
@@ -0,0 +1,6 @@
+// Copyright 2023 Jesse Leventhal (@The=Mad-Noodle)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL + 5
diff --git a/keyboards/themadnoodle/udon13/info.json b/keyboards/themadnoodle/udon13/info.json
new file mode 100644
index 00000000000..b0ece11612f
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/info.json
@@ -0,0 +1,75 @@
+{
+ "manufacturer": "The Mad Noodle",
+ "keyboard_name": "Udon13",
+ "maintainer": "The-Mad-Noodle",
+ "url": "https://www.madnoodleprototypes.com/",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "ROW2COL",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "encoder": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true,
+ "oled": true
+ },
+ "rgblight": {
+ "hue_steps": 10,
+ "led_count": 6,
+ "sleep": true,
+ "animations": {
+ "breathing": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "knight": true,
+ "christmas": true,
+ "static_gradient": true,
+ "rgb_test": true,
+ "alternating": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "pin": "B7"
+ },
+ "matrix_pins": {
+ "cols": ["F0", "F5", "F4", "F6"],
+ "rows": ["F7", "F1", "D6", "D7"]
+ },
+ "processor": "atmega32u4",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0012",
+ "vid": "0x6A6C"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Encoder", "x":3, "y":0, "matrix": [0,3]},
+ {"x":0, "y":1, "matrix": [1,0]},
+ {"x":1, "y":1, "matrix": [1,1]},
+ {"x":2, "y":1, "matrix": [1,2]},
+ {"x":3, "y":1, "matrix": [1,3]},
+ {"x":0, "y":2, "matrix": [2,0]},
+ {"x":1, "y":2, "matrix": [2,1]},
+ {"x":2, "y":2, "matrix": [2,2]},
+ {"x":3, "y":2, "matrix": [2,3]},
+ {"x":0, "y":3, "matrix": [3,0]},
+ {"x":1, "y":3, "matrix": [3,1]},
+ {"x":2, "y":3, "matrix": [3,2]},
+ {"x":3, "y":3, "matrix": [3,3]}
+ ]
+ }
+ },
+
+ "encoder": {
+ "rotary": [
+ { "pin_a": "B6", "pin_b": "B5" }
+ ]
+
+ }
+}
\ No newline at end of file
diff --git a/keyboards/themadnoodle/udon13/keymaps/default/keymap.c b/keyboards/themadnoodle/udon13/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d9e4ddc51ef
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/keymaps/default/keymap.c
@@ -0,0 +1,52 @@
+// Copyright 2023 The Mad Noodle(@the_mad_noodle)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/*Layer 0*/
+ [0] = LAYOUT(
+ KC_MUTE,
+ KC_MPLY, KC_MPRV, KC_MNXT, KC_MSEL,
+ KC_UNDO, KC_CALC, KC_MAIL, KC_MYCM,
+ KC_COPY, KC_CUT, KC_PSTE, TO(3)
+ ),
+
+/*Layer 1*/
+ [1] = LAYOUT(
+ RGB_TOG,
+ RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI,
+ RGB_MOD, RGB_RMOD, RGB_M_P, RGB_M_B,
+ RGB_M_SW, RGB_SPD, RGB_SPI, TO(0)
+ ),
+
+/*Layer 2*/
+ [2] = LAYOUT(
+ KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, TO(0)
+ ),
+
+/*Layer 3*/
+ [3] = LAYOUT(
+ KC_NO,
+ TO(1), TO(2), KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, TO(0)
+ ),
+
+};
+
+/*Encoder Mapping*/
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+ [2] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT)},
+ [3] = { ENCODER_CCW_CW(KC_DOWN, KC_UP)},
+
+};
+#endif
diff --git a/keyboards/themadnoodle/udon13/keymaps/default/rules.mk b/keyboards/themadnoodle/udon13/keymaps/default/rules.mk
new file mode 100644
index 00000000000..217da48272e
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
+ENCODER_MAP_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/themadnoodle/udon13/keymaps/via/keymap.c b/keyboards/themadnoodle/udon13/keymaps/via/keymap.c
new file mode 100644
index 00000000000..6f6fcc60590
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/keymaps/via/keymap.c
@@ -0,0 +1,52 @@
+// Copyright 2023 The Mad Noodle(@the_mad_noodle)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/*Layer 0*/
+ [0] = LAYOUT(
+ KC_MUTE,
+ KC_MPLY, KC_MPRV, KC_MNXT, KC_MSEL,
+ KC_UNDO, KC_CALC, KC_MAIL, KC_MYCM,
+ KC_COPY, KC_CUT, KC_PSTE, TO(3)
+ ),
+
+/*Layer 1*/
+ [1] = LAYOUT(
+ RGB_TOG,
+ RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI,
+ RGB_MOD, RGB_RMOD, RGB_M_P, RGB_M_B,
+ RGB_M_SW, RGB_SPD, RGB_SPI, TO(0)
+ ),
+
+/*Layer 2*/
+ [2] = LAYOUT(
+ KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, TO(0)
+ ),
+
+/*Layer 3*/
+ [3] = LAYOUT(
+ KC_NO,
+ TO(1), TO(2), KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, TO(0)
+ ),
+
+};
+
+/*Encoder Mapping*/
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+ [2] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT)},
+ [3] = { ENCODER_CCW_CW(KC_DOWN, KC_UP)},
+
+};
+#endif
diff --git a/keyboards/themadnoodle/udon13/keymaps/via/rules.mk b/keyboards/themadnoodle/udon13/keymaps/via/rules.mk
new file mode 100644
index 00000000000..e81bb711d50
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+ENCODER_MAP_ENABLE = yes
+LTO_ENABLE = yes
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/themadnoodle/udon13/readme.md b/keyboards/themadnoodle/udon13/readme.md
new file mode 100644
index 00000000000..a55dc2c7cb3
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/readme.md
@@ -0,0 +1,27 @@
+# Udon:13
+
+![Udon13](https://i.imgur.com/DppYeTCh.jpg)
+
+*The Udon:13 is a 12 hotswap key macro keypad with a push button encoder knob and 128x32 OLED display*
+
+* Keyboard Maintainer: [The Mad Noodle](https://github.com/The-Mad-Noodle)
+* Hardware Supported: Udon:13 PCB
+* Hardware Availability: https://www.madnoodleprototypes.com/shop
+
+
+Compile example for this keyboard (after setting up your build environment):
+
+ qmk compile -kb themadnoodle/udon13 -km default
+
+Flashing example for this keyboard:
+
+ qmk flash -kb themadnoodle/udon13 -km 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).
+
+## Bootloader & Flashing
+
+
+**Physical reset button**:
+
+* Press the physical button located on the top left of the back of the PCB (Labeled RST) to enter Bootloader Mode
diff --git a/keyboards/themadnoodle/udon13/rules.mk b/keyboards/themadnoodle/udon13/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/themadnoodle/udon13/udon13.c b/keyboards/themadnoodle/udon13/udon13.c
new file mode 100644
index 00000000000..bda0ae7e7bc
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/udon13.c
@@ -0,0 +1,76 @@
+// Copyright 2023 The Mad Noodle(@the_mad_noodle)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+
+/* OLED Settings */
+//------------------------------------------------------------------------------------------------
+
+static void render_logo(void) { // Render Mad Noodle logo
+ static const char PROGMEM logo_1[] = {0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x04, 0x06, 0x82, 0xc3, 0x43, 0x61, 0xa1, 0xa1, 0xa1, 0xa1, 0x61, 0x43, 0xc3, 0x82, 0x06, 0x04, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00};
+ static const char PROGMEM logo_2[] = {0xf8, 0x1e, 0xc3, 0xf8, 0x5c, 0x76, 0x7b, 0x6d, 0x75, 0x55, 0x55, 0x75, 0x6d, 0x7b, 0x76, 0x5e, 0x7e, 0x77, 0x5b, 0x6d, 0x75, 0x55, 0x55, 0x75, 0x4d, 0x7b, 0x66, 0x5c, 0xf0, 0xc3, 0x3e, 0xf0};
+ static const char PROGMEM logo_3[] = {0x1f, 0x78, 0xc1, 0x0f, 0x38, 0xe0, 0xc0, 0x00, 0x00, 0x02, 0x0e, 0x0e, 0x8e, 0xc6, 0xc0, 0x40, 0x40, 0xc0, 0xc6, 0x8e, 0x0e, 0x0e, 0x02, 0x00, 0x80, 0xc0, 0x60, 0x38, 0x0f, 0xc0, 0x7c, 0x0f};
+ static const char PROGMEM logo_4[] = {0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, 0x31, 0x23, 0x66, 0x44, 0x44, 0xc4, 0xc4, 0x84, 0x84, 0x84, 0x84, 0xc4, 0xc4, 0x44, 0x46, 0x66, 0x23, 0x11, 0x18, 0x0c, 0x06, 0x03, 0x00, 0x00, 0x00};
+ oled_set_cursor(0, 0);
+ oled_write_raw_P(logo_1, sizeof(logo_1));
+ oled_set_cursor(0, 1);
+ oled_write_raw_P(logo_2, sizeof(logo_2));
+ oled_set_cursor(0, 2);
+ oled_write_raw_P(logo_3, sizeof(logo_3));
+ oled_set_cursor(0, 3);
+ oled_write_raw_P(logo_4, sizeof(logo_4));
+}
+//-----------
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) { return false; }
+ render_logo();
+ oled_set_cursor(7, 0);
+ oled_write_P(PSTR("The Mad Noodle"), false);
+
+ oled_set_cursor(7, 1);
+ oled_write_P(PSTR("Layer: "), false);
+
+ /*
+ To change LAYER NAMES displayed on the OLED ensure they are a total of 6 characters, including spaces.
+ Example:
+ ---------------------------------------------------
+ case 0:
+ oled_write_P(PSTR("Base "), false);
+ break;
+ ---------------------------------------------------
+ "B A S E *SPACE* *SPACE*" = 6 characters
+ This would change layer 0 to Base on the OLED
+ */
+
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write_P(PSTR("Zero "), false);
+ break;
+ case 1:
+ oled_write_P(PSTR("One "), false);
+ break;
+ case 2:
+ oled_write_P(PSTR("Two "), false);
+ break;
+ case 3:
+ oled_write_P(PSTR("Three "), false);
+ break;
+
+ default:
+ oled_write_P(PSTR("N/A "), false);
+ }
+ oled_set_cursor(7, 2);
+ oled_write_P(PSTR("Status: "), false);
+ oled_set_cursor(7, 3);
+ led_t led_state = host_keyboard_led_state();
+ oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
+ oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
+ oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
+
+ return false;
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/vertex/cycle8/config.h b/keyboards/vertex/cycle8/config.h
new file mode 100644
index 00000000000..ea83fd49fa4
--- /dev/null
+++ b/keyboards/vertex/cycle8/config.h
@@ -0,0 +1,6 @@
+// Copyright 2022 Eason
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define WS2812_SPI_DRIVER SPID2
diff --git a/keyboards/vertex/cycle8/halconf.h b/keyboards/vertex/cycle8/halconf.h
new file mode 100644
index 00000000000..7dda577da1b
--- /dev/null
+++ b/keyboards/vertex/cycle8/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Eason
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next
diff --git a/keyboards/vertex/cycle8/info.json b/keyboards/vertex/cycle8/info.json
new file mode 100644
index 00000000000..100c2d21f16
--- /dev/null
+++ b/keyboards/vertex/cycle8/info.json
@@ -0,0 +1,523 @@
+{
+ "keyboard_name": "Cycle8",
+ "manufacturer": "vertex",
+ "url": "",
+ "maintainer": "Eason",
+ "usb": {
+ "vid": "0x8A94",
+ "pid": "0x8F70",
+ "device_version": "0.0.1",
+ "force_nkro": true
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "rgblight": {
+ "led_count": 7,
+ "animations": {
+ "breathing": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "knight": true,
+ "christmas": true,
+ "static_gradient": true,
+ "rgb_test": true,
+ "alternating": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "pin": "B15",
+ "driver": "spi"
+ },
+ "indicators": {
+ "caps_lock": "C13",
+ "scroll_lock": "A10"
+ },
+ "matrix_pins": {
+ "rows": ["B7", "B6", "B5", "B4", "B3","A15"],
+ "cols": ["A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "B10", "B11", "B12", "B13", "B14", "A8", "A9"]
+ },
+ "diode_direction": "COL2ROW",
+ "processor": "STM32F103",
+ "bootloader": "uf2boot",
+ "community_layouts": [
+ "tkl_ansi",
+ "tkl_ansi_split_bs_rshift",
+ "tkl_iso",
+ "tkl_iso_split_bs_rshift",
+ ],
+ "layouts":{
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12, "y": 0},
+ {"matrix": [0, 11], "x": 13, "y": 0},
+ {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 13], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0},
+ {"matrix": [0, 15], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15.25, "y": 1.5},
+ {"matrix": [3, 13], "x": 16.25, "y": 1.5},
+ {"matrix": [3, 14], "x": 17.25, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.5},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.5},
+ {"matrix": [3, 15], "x": 17.25, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 14], "x": 16.25, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 9], "x": 10, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 11], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 12], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 13], "x": 15.25, "y": 5.5},
+ {"matrix": [5, 14], "x": 16.25, "y": 5.5},
+ {"matrix": [5, 15], "x": 17.25, "y": 5.5}
+ ]
+ },
+ "LAYOUT_tkl_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12, "y": 0},
+ {"matrix": [0, 11], "x": 13, "y": 0},
+ {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 13], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0},
+ {"matrix": [0, 15], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15.25, "y": 1.5},
+ {"matrix": [3, 13], "x": 16.25, "y": 1.5},
+ {"matrix": [3, 14], "x": 17.25, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.5},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.5},
+ {"matrix": [3, 15], "x": 17.25, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 14], "x": 16.25, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 9], "x": 10, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 11], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 12], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 13], "x": 15.25, "y": 5.5},
+ {"matrix": [5, 14], "x": 16.25, "y": 5.5},
+ {"matrix": [5, 15], "x": 17.25, "y": 5.5}
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12, "y": 0},
+ {"matrix": [0, 11], "x": 13, "y": 0},
+ {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 13], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0},
+ {"matrix": [0, 15], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15.25, "y": 1.5},
+ {"matrix": [3, 13], "x": 16.25, "y": 1.5},
+ {"matrix": [3, 14], "x": 17.25, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.5},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.5},
+ {"matrix": [3, 15], "x": 17.25, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 2.75},
+ {"matrix": [4, 14], "x": 16.25, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 9], "x": 10, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 11], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 12], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 13], "x": 15.25, "y": 5.5},
+ {"matrix": [5, 14], "x": 16.25, "y": 5.5},
+ {"matrix": [5, 15], "x": 17.25, "y": 5.5}
+ ]
+ },
+ "LAYOUT_tkl_iso_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12, "y": 0},
+ {"matrix": [0, 11], "x": 13, "y": 0},
+ {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 13], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0},
+ {"matrix": [0, 15], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15.25, "y": 1.5},
+ {"matrix": [3, 13], "x": 16.25, "y": 1.5},
+ {"matrix": [3, 14], "x": 17.25, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [3, 12], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.5},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.5},
+ {"matrix": [3, 15], "x": 17.25, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [2, 13], "x": 12.75, "y": 3.5},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 14], "x": 16.25, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 9], "x": 10, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 11], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 12], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 13], "x": 15.25, "y": 5.5},
+ {"matrix": [5, 14], "x": 16.25, "y": 5.5},
+ {"matrix": [5, 15], "x": 17.25, "y": 5.5}
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12, "y": 0},
+ {"matrix": [0, 11], "x": 13, "y": 0},
+ {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 13], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0},
+ {"matrix": [0, 15], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15.25, "y": 1.5},
+ {"matrix": [3, 13], "x": 16.25, "y": 1.5},
+ {"matrix": [3, 14], "x": 17.25, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [3, 12], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.5},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.5},
+ {"matrix": [3, 15], "x": 17.25, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [2, 13], "x": 12.75, "y": 3.5},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 2.75},
+ {"matrix": [4, 14], "x": 16.25, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 9], "x": 10, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 11], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 12], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 13], "x": 15.25, "y": 5.5},
+ {"matrix": [5, 14], "x": 16.25, "y": 5.5},
+ {"matrix": [5, 15], "x": 17.25, "y": 5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/vertex/cycle8/keymaps/default/keymap.c b/keyboards/vertex/cycle8/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ec3138424f7
--- /dev/null
+++ b/keyboards/vertex/cycle8/keymaps/default/keymap.c
@@ -0,0 +1,16 @@
+// Copyright 2022 Eason
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+ #include QMK_KEYBOARD_H
+
+ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_DEL, 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_1, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+ };
diff --git a/keyboards/vertex/cycle8/keymaps/via/keymap.c b/keyboards/vertex/cycle8/keymaps/via/keymap.c
new file mode 100644
index 00000000000..ec3138424f7
--- /dev/null
+++ b/keyboards/vertex/cycle8/keymaps/via/keymap.c
@@ -0,0 +1,16 @@
+// Copyright 2022 Eason
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+ #include QMK_KEYBOARD_H
+
+ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_DEL, 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_1, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+ };
diff --git a/keyboards/vertex/cycle8/keymaps/via/rules.mk b/keyboards/vertex/cycle8/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/vertex/cycle8/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/vertex/cycle8/mcuconf.h b/keyboards/vertex/cycle8/mcuconf.h
new file mode 100644
index 00000000000..bac8fc07c5f
--- /dev/null
+++ b/keyboards/vertex/cycle8/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2022 Eason
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef STM32_SPI_USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
diff --git a/keyboards/vertex/cycle8/readme.md b/keyboards/vertex/cycle8/readme.md
new file mode 100644
index 00000000000..b12008b5d0b
--- /dev/null
+++ b/keyboards/vertex/cycle8/readme.md
@@ -0,0 +1,27 @@
+# cycle8
+
+![Cycle8](https://i.imgur.com/gCExreih.png)
+
+A customizable soldered TKL/80% keyboard.
+
+* Keyboard Maintainer: [EASON](https://github.com/EasonQian1)
+* Hardware Supported: Cycle8 PCB
+* Hardware Availability: [EASON](https://github.com/EasonQian1)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make vertex/cycle8:default
+
+Flashing example for this keyboard:
+
+ make vertex/cycle8: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/vertex/cycle8/rules.mk b/keyboards/vertex/cycle8/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/vertex/cycle8/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/wilba_tech/wt20_h1/info.json b/keyboards/wilba_tech/wt20_h1/info.json
new file mode 100644
index 00000000000..77905e275e0
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/info.json
@@ -0,0 +1,80 @@
+{
+ "manufacturer": "wilba.tech",
+ "keyboard_name": "WT20-H1",
+ "maintainer": "Wilba",
+ "bootloader": "atmel-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["F4", "F0", "B2", "B1"],
+ "rows": ["B3", "F1", "F5", "F6", "F7"]
+ },
+ "processor": "atmega32u4",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0041",
+ "vid": "0x6582"
+ },
+ "community_layouts": ["ortho_5x4", "numpad_5x4"],
+ "layouts": {
+ "LAYOUT_numpad_5x4": {
+ "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, "h": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "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, "h": 2},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2},
+ {"matrix": [4, 2], "x": 2, "y": 4}
+ ]
+ },
+ "LAYOUT_ortho_5x4": {
+ "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},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/wilba_tech/wt20_h1/keymaps/default/keymap.c b/keyboards/wilba_tech/wt20_h1/keymaps/default/keymap.c
new file mode 100644
index 00000000000..541fbd05fb1
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/keymaps/default/keymap.c
@@ -0,0 +1,14 @@
+// Copyright 2024 Jason Williams (@wilba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_5x4(
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_P0, KC_P0, KC_PDOT, KC_PENT
+ ),
+};
diff --git a/keyboards/wilba_tech/wt20_h1/keymaps/via/keymap.c b/keyboards/wilba_tech/wt20_h1/keymaps/via/keymap.c
new file mode 100644
index 00000000000..4fc052443e4
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/keymaps/via/keymap.c
@@ -0,0 +1,4 @@
+// Copyright 2024 Jason Williams (@wilba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "../default/keymap.c"
diff --git a/keyboards/wilba_tech/wt20_h1/keymaps/via/rules.mk b/keyboards/wilba_tech/wt20_h1/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt20_h1/readme.md b/keyboards/wilba_tech/wt20_h1/readme.md
new file mode 100644
index 00000000000..586b7e36f4e
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/readme.md
@@ -0,0 +1,19 @@
+# wilba.tech WT20-H1
+
+WT20-H1 is a hotswap numpad PCB supporting split plus, enter and zero keys (i.e. 5x4 ortho).
+
+Initially designed for the [HIBI JUNIOR](https://hibi.mx/products/junior-r1)
+
+- Keyboard Maintainer: [wilba](https://github.com/wilba)
+- Hardware Supported: wilba.tech WT20-H1-HIBI
+- Hardware Availability: [HIBI](https://hibi.mx/products/junior-r1)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wilba_tech/wt20_h1:default
+
+Flashing example for this keyboard:
+
+ make wilba_tech/wt20_h1: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).
diff --git a/keyboards/wilba_tech/wt20_h1/rules.mk b/keyboards/wilba_tech/wt20_h1/rules.mk
new file mode 100644
index 00000000000..c80812f6e0a
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/rules.mk
@@ -0,0 +1 @@
+# This file is intentionally blank
diff --git a/keyboards/ziptyze/lets_split_v3/config.h b/keyboards/ziptyze/lets_split_v3/config.h
new file mode 100644
index 00000000000..a4b5e40dcba
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/config.h
@@ -0,0 +1,24 @@
+/*
+Copyright 2023 ziptyze
+
+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 .
+*/
+
+#pragma once
+
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP16
+#define SERIAL_USART_RX_PIN GP17
+#define SERIAL_USART_PIN_SWAP
+
diff --git a/keyboards/ziptyze/lets_split_v3/info.json b/keyboards/ziptyze/lets_split_v3/info.json
new file mode 100644
index 00000000000..3db80047568
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/info.json
@@ -0,0 +1,305 @@
+{
+ "manufacturer": "ziptyze",
+ "keyboard_name": "Let's Split v3",
+ "maintainer": "ziptyze",
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true
+ },
+ "dynamic_keymap": {
+ "layer_count": 10
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x6900",
+ "vid": "0x6F75"
+ },
+ "split": {
+ "transport": {
+ "sync": {
+ "matrix_state": true
+ }
+ },
+ "enabled": true
+ },
+ "matrix_pins": {
+ "direct": [
+ ["GP25", "GP27", "GP28", "GP4", "GP5", "GP8"],
+ ["GP24", "GP26", "GP29", "GP3", "GP6", "GP9"],
+ ["GP23", "GP21", "GP18", "GP15", "GP12", "GP10"],
+ ["GP22", "GP20", "GP19", "GP14", "GP13", "GP11"]
+ ]
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP1"
+ },
+ "community_layouts": ["ortho_4x12"],
+ "layouts": {
+ "LAYOUT_ortho_4x12": {
+ "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": [4, 0], "x": 7, "y": 0},
+ {"matrix": [4, 1], "x": 8, "y": 0},
+ {"matrix": [4, 2], "x": 9, "y": 0},
+ {"matrix": [4, 3], "x": 10, "y": 0},
+ {"matrix": [4, 4], "x": 11, "y": 0},
+ {"matrix": [4, 5], "x": 12, "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": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+
+ {"matrix": [5, 0], "x": 7, "y": 1},
+ {"matrix": [5, 1], "x": 8, "y": 1},
+ {"matrix": [5, 2], "x": 9, "y": 1},
+ {"matrix": [5, 3], "x": 10, "y": 1},
+ {"matrix": [5, 4], "x": 11, "y": 1},
+ {"matrix": [5, 5], "x": 12, "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": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+
+ {"matrix": [6, 0], "x": 7, "y": 2},
+ {"matrix": [6, 1], "x": 8, "y": 2},
+ {"matrix": [6, 2], "x": 9, "y": 2},
+ {"matrix": [6, 3], "x": 10, "y": 2},
+ {"matrix": [6, 4], "x": 11, "y": 2},
+ {"matrix": [6, 5], "x": 12, "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},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+
+ {"matrix": [7, 0], "x": 7, "y": 3},
+ {"matrix": [7, 1], "x": 8, "y": 3},
+ {"matrix": [7, 2], "x": 9, "y": 3},
+ {"matrix": [7, 3], "x": 10, "y": 3},
+ {"matrix": [7, 4], "x": 11, "y": 3},
+ {"matrix": [7, 5], "x": 12, "y": 3}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "split_count": [63, 63],
+ "max_brightness": 200,
+ "sleep": true,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ { "flags": 2, "x": 62, "y": 1 },
+ { "flags": 2, "x": 70, "y": 1 },
+ { "flags": 2, "x": 79, "y": 1 },
+ { "flags": 2, "x": 88, "y": 1 },
+ { "flags": 2, "x": 98, "y": 1 },
+ { "flags": 2, "x": 107, "y": 1 },
+ { "flags": 2, "x": 111, "y": 4 },
+ { "flags": 2, "x": 111, "y": 12 },
+
+ { "flags": 4, "matrix": [0, 5], "x": 103, "y": 8 },
+ { "flags": 4, "matrix": [0, 4], "x": 84, "y": 8 },
+ { "flags": 4, "matrix": [0, 3], "x": 65, "y": 8 },
+ { "flags": 4, "matrix": [1, 3], "x": 65, "y": 24 },
+ { "flags": 4, "matrix": [1, 4], "x": 84, "y": 24 },
+ { "flags": 4, "matrix": [1, 5], "x": 103, "y": 24 },
+
+ { "flags": 2, "x": 111, "y": 20 },
+ { "flags": 2, "x": 111, "y": 28 },
+ { "flags": 2, "x": 111, "y": 36 },
+ { "flags": 2, "x": 111, "y": 44 },
+
+ { "flags": 4, "matrix": [2, 5], "x": 103, "y": 40 },
+ { "flags": 4, "matrix": [2, 4], "x": 84, "y": 40 },
+ { "flags": 4, "matrix": [2, 3], "x": 65, "y": 40 },
+ { "flags": 1, "matrix": [3, 3], "x": 65, "y": 56 },
+ { "flags": 1, "matrix": [3, 4], "x": 84, "y": 56 },
+ { "flags": 1, "matrix": [3, 5], "x": 103, "y": 56 },
+
+ { "flags": 2, "x": 111, "y": 52 },
+ { "flags": 2, "x": 111, "y": 60 },
+ { "flags": 2, "x": 107, "y": 63 },
+ { "flags": 2, "x": 98, "y": 63 },
+ { "flags": 2, "x": 88, "y": 63 },
+ { "flags": 2, "x": 79, "y": 63 },
+ { "flags": 2, "x": 70, "y": 63 },
+ { "flags": 2, "x": 61, "y": 63 },
+ { "flags": 2, "x": 51, "y": 63 },
+ { "flags": 2, "x": 42, "y": 63 },
+ { "flags": 2, "x": 33, "y": 63 },
+ { "flags": 2, "x": 23, "y": 63 },
+ { "flags": 2, "x": 14, "y": 63 },
+ { "flags": 2, "x": 5, "y": 63 },
+ { "flags": 2, "x": 1, "y": 60 },
+ { "flags": 2, "x": 1, "y": 52 },
+
+ { "flags": 1, "matrix": [3, 0], "x": 9, "y": 56 },
+ { "flags": 1, "matrix": [3, 1], "x": 28, "y": 56 },
+ { "flags": 1, "matrix": [3, 2], "x": 47, "y": 56 },
+ { "flags": 4, "matrix": [2, 2], "x": 47, "y": 40 },
+ { "flags": 4, "matrix": [2, 1], "x": 28, "y": 40 },
+ { "flags": 1, "matrix": [2, 0], "x": 9, "y": 40 },
+
+ { "flags": 2, "x": 1, "y": 44 },
+ { "flags": 2, "x": 1, "y": 36 },
+ { "flags": 2, "x": 1, "y": 28 },
+ { "flags": 2, "x": 1, "y": 20 },
+
+ { "flags": 1, "matrix": [1, 0], "x": 9, "y": 24 },
+ { "flags": 4, "matrix": [1, 1], "x": 28, "y": 24 },
+ { "flags": 4, "matrix": [1, 2], "x": 47, "y": 24 },
+ { "flags": 4, "matrix": [0, 2], "x": 47, "y": 8 },
+ { "flags": 4, "matrix": [0, 1], "x": 28, "y": 8 },
+ { "flags": 1, "matrix": [0, 0], "x": 9, "y": 8 },
+
+ { "flags": 2, "x": 1, "y": 12 },
+ { "flags": 2, "x": 1, "y": 4 },
+ { "flags": 2, "x": 5, "y": 1 },
+ { "flags": 2, "x": 13, "y": 1 },
+ { "flags": 2, "x": 28, "y": 1 },
+ { "flags": 2, "x": 37, "y": 1 },
+ { "flags": 2, "x": 47, "y": 1 },
+
+
+
+
+ { "flags": 2, "x": 174, "y": 1 },
+ { "flags": 2, "x": 182, "y": 1 },
+ { "flags": 2, "x": 191, "y": 1 },
+ { "flags": 2, "x": 200, "y": 1 },
+ { "flags": 2, "x": 210, "y": 1 },
+ { "flags": 2, "x": 219, "y": 1 },
+ { "flags": 2, "x": 223, "y": 4 },
+ { "flags": 2, "x": 223, "y": 12 },
+
+ { "flags": 1, "matrix": [4, 5], "x": 215, "y": 8 },
+ { "flags": 4, "matrix": [4, 4], "x": 196, "y": 8 },
+ { "flags": 4, "matrix": [4, 3], "x": 177, "y": 8 },
+ { "flags": 4, "matrix": [5, 3], "x": 177, "y": 24 },
+ { "flags": 4, "matrix": [5, 4], "x": 196, "y": 24 },
+ { "flags": 1, "matrix": [5, 5], "x": 215, "y": 24 },
+
+ { "flags": 2, "x": 223, "y": 20 },
+ { "flags": 2, "x": 223, "y": 28 },
+ { "flags": 2, "x": 223, "y": 36 },
+ { "flags": 2, "x": 223, "y": 44 },
+
+ { "flags": 1, "matrix": [6, 5], "x": 215, "y": 40 },
+ { "flags": 4, "matrix": [6, 4], "x": 196, "y": 40 },
+ { "flags": 4, "matrix": [6, 3], "x": 177, "y": 40 },
+ { "flags": 1, "matrix": [7, 3], "x": 177, "y": 56 },
+ { "flags": 1, "matrix": [7, 4], "x": 196, "y": 56 },
+ { "flags": 1, "matrix": [7, 5], "x": 215, "y": 56 },
+
+ { "flags": 2, "x": 223, "y": 52 },
+ { "flags": 2, "x": 223, "y": 60 },
+ { "flags": 2, "x": 219, "y": 63 },
+ { "flags": 2, "x": 210, "y": 63 },
+ { "flags": 2, "x": 200, "y": 63 },
+ { "flags": 2, "x": 191, "y": 63 },
+ { "flags": 2, "x": 182, "y": 63 },
+ { "flags": 2, "x": 173, "y": 63 },
+ { "flags": 2, "x": 163, "y": 63 },
+ { "flags": 2, "x": 154, "y": 63 },
+ { "flags": 2, "x": 145, "y": 63 },
+ { "flags": 2, "x": 135, "y": 63 },
+ { "flags": 2, "x": 126, "y": 63 },
+ { "flags": 2, "x": 117, "y": 63 },
+ { "flags": 2, "x": 113, "y": 60 },
+ { "flags": 2, "x": 113, "y": 52 },
+
+ { "flags": 1, "matrix": [7, 0], "x": 121, "y": 56 },
+ { "flags": 1, "matrix": [7, 1], "x": 140, "y": 56 },
+ { "flags": 1, "matrix": [7, 2], "x": 159, "y": 56 },
+ { "flags": 4, "matrix": [6, 2], "x": 159, "y": 40 },
+ { "flags": 4, "matrix": [6, 1], "x": 140, "y": 40 },
+ { "flags": 4, "matrix": [6, 0], "x": 121, "y": 40 },
+
+ { "flags": 2, "x": 113, "y": 44 },
+ { "flags": 2, "x": 113, "y": 36 },
+ { "flags": 2, "x": 113, "y": 28 },
+ { "flags": 2, "x": 113, "y": 20 },
+
+ { "flags": 4, "matrix": [5, 0], "x": 121, "y": 24 },
+ { "flags": 4, "matrix": [5, 1], "x": 148, "y": 24 },
+ { "flags": 4, "matrix": [5, 2], "x": 159, "y": 24 },
+ { "flags": 4, "matrix": [4, 2], "x": 159, "y": 8 },
+ { "flags": 4, "matrix": [4, 1], "x": 148, "y": 8 },
+ { "flags": 4, "matrix": [4, 0], "x": 121, "y": 8 },
+
+ { "flags": 2, "x": 113, "y": 12 },
+ { "flags": 2, "x": 113, "y": 4 },
+ { "flags": 2, "x": 117, "y": 1 },
+ { "flags": 2, "x": 140, "y": 1 },
+ { "flags": 2, "x": 149, "y": 1 },
+ { "flags": 2, "x": 159, "y": 1 },
+ { "flags": 2, "x": 169, "y": 1 }
+ ]
+ }
+}
diff --git a/keyboards/ziptyze/lets_split_v3/keymaps/default/keymap.c b/keyboards/ziptyze/lets_split_v3/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d640e1bf234
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Danny Nguyen
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4x12(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, TL_LOWR, KC_SPC, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ortho_4x12(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ BL_STEP, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ [2] = LAYOUT_ortho_4x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ [3] = LAYOUT_ortho_4x12(
+ _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/ziptyze/lets_split_v3/keymaps/via/keymap.c b/keyboards/ziptyze/lets_split_v3/keymaps/via/keymap.c
new file mode 100644
index 00000000000..d640e1bf234
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/keymaps/via/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Danny Nguyen
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4x12(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, TL_LOWR, KC_SPC, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ortho_4x12(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ BL_STEP, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ [2] = LAYOUT_ortho_4x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ [3] = LAYOUT_ortho_4x12(
+ _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/ziptyze/lets_split_v3/keymaps/via/rules.mk b/keyboards/ziptyze/lets_split_v3/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/ziptyze/lets_split_v3/readme.md b/keyboards/ziptyze/lets_split_v3/readme.md
new file mode 100644
index 00000000000..18b967d9057
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/readme.md
@@ -0,0 +1,26 @@
+# Let's Split v3
+
+![Let's Split v3](https://i.imgur.com/ksZ64dKh.jpg)
+
+Version 3 of the Let's Split keyboard, originally designed by Wootapatoot. This version features identical PCBs for both halves powered by an RP2040 controller. Each half features full hot swap capability as well as in-switch addressable LEDs and 39 1mm underglow LEDs.
+
+* Keyboard Maintainer: [ziptyze](https://github.com/ziptyze)
+* Hardware Supported: Let's Split v3 PCB
+* Hardware Availability: [1upkeyboards](https://1upkeyboards.com/shop/keyboard-kits/diy-40-kits/lets-split-v3/#choose-your-kit)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ziptyze/lets_split_v3:default
+
+Flashing example for this keyboard:
+
+ make ziptyze/lets_split_v3: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 2 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix, the top left key, and plug in the keyboard
+* **BOOTSEL button**: Hold down the reset button on the PCB, and plug in the keyboard
diff --git a/keyboards/ziptyze/lets_split_v3/rules.mk b/keyboards/ziptyze/lets_split_v3/rules.mk
new file mode 100644
index 00000000000..161ec22b16e
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/rules.mk
@@ -0,0 +1 @@
+SERIAL_DRIVER = vendor