diff --git a/builddefs/docsgen/.vitepress/config.mts b/builddefs/docsgen/.vitepress/config.mts
index 54ecae2e86b..5beca70634e 100644
--- a/builddefs/docsgen/.vitepress/config.mts
+++ b/builddefs/docsgen/.vitepress/config.mts
@@ -41,6 +41,8 @@ export default defineConfig(({ mode }) => {
sidebar: sidebar,
+ externalLinkIcon: true,
+
socialLinks: [
{ icon: { svg: '' }, link: "https://reddit.com/r/olkb" },
{ icon: "discord", link: "https://discord.gg/qmk" },
diff --git a/docs/newbs.md b/docs/newbs.md
index 64593cbad12..95cde67f0cd 100644
--- a/docs/newbs.md
+++ b/docs/newbs.md
@@ -4,7 +4,7 @@ Your computer keyboard has a processor inside of it, similar to the one inside y
QMK tries to put a lot of power into your hands by making easy things easy, and hard things possible. You don't have to know how to program to create powerful keymaps — you only have to follow a few simple syntax rules.
-Not sure if your keyboard can run QMK? If it's a mechanical keyboard you built yourself chances are good it can. We support a [large number of hobbyist boards](https://qmk.fm/keyboards/). If your current keyboard can't run QMK there are a lot of choices out there for boards that do.
+Not sure if your keyboard can run QMK? If it's a mechanical keyboard you built yourself chances are good it can. We support a [large number of hobbyist boards](https://browse.qmk.fm/). If your current keyboard can't run QMK there are a lot of choices out there for boards that do.
::: tip Is This Guide For Me?
If the thought of programming intimidates you, please [take a look at our online GUI](newbs_building_firmware_configurator) instead.
diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md
index e798765464d..987d49f4882 100644
--- a/docs/reference_info_json.md
+++ b/docs/reference_info_json.md
@@ -16,7 +16,7 @@ You can create `info.json` files at every level under `qmk_firmware/keyboards/String Required
- * A URL to the keyboard's product page, [QMK.fm/keyboards](https://qmk.fm/keyboards) page, or other page describing information about the keyboard.
+ * A URL to the keyboard's product page, [QMK Keyboards](https://browse.qmk.fm/) page, or other page describing information about the keyboard.
* Example: `"https://clueboard.co"`
* `bootloader_instructions` String
* Instructions for putting the keyboard into a mode that allows for firmware flashing.
diff --git a/keyboards/cannonkeys/satisfaction75_hs/keyboard.json b/keyboards/cannonkeys/satisfaction75_hs/keyboard.json
index 6e8172ec028..48faa60362b 100644
--- a/keyboards/cannonkeys/satisfaction75_hs/keyboard.json
+++ b/keyboards/cannonkeys/satisfaction75_hs/keyboard.json
@@ -112,9 +112,9 @@
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
- {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1},
- {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1},
- {"matrix": [5, 9], "x": 12, "y": 5.25, "w": 1},
+ {"matrix": [5, 10], "x": 10, "y": 5.25},
+ {"matrix": [5, 11], "x": 11, "y": 5.25},
+ {"matrix": [5, 9], "x": 12, "y": 5.25},
{"matrix": [5, 12], "x": 13.25, "y": 5.5},
{"matrix": [5, 13], "x": 14.25, "y": 5.5},
{"matrix": [5, 14], "x": 15.25, "y": 5.5}
diff --git a/keyboards/converter/thinkpad_t6x/rpi_pico/keyboard.json b/keyboards/converter/thinkpad_t6x/rpi_pico/keyboard.json
new file mode 100644
index 00000000000..4f876a4a94e
--- /dev/null
+++ b/keyboards/converter/thinkpad_t6x/rpi_pico/keyboard.json
@@ -0,0 +1,131 @@
+{
+ "manufacturer": "strobo5",
+ "keyboard_name": "converter/thinkpad_t6x/rpi_pico",
+ "maintainer": "strobo5",
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true
+ },
+ "matrix_pins": {
+ "cols": ["GP7", "GP9", "GP11", "GP13", "GP17", "GP16", "GP14", "GP12", "GP15", "GP8", "GP10", "GP6", "GP4", "GP2", "GP5", "GP3"],
+ "rows": ["GP20", "GP26", "GP22", "GP21", "GP18", "GP19", "GP27", "GP28"]
+ },
+ "processor": "RP2040",
+ "ps2": {
+ "clock_pin": "GP1",
+ "data_pin": "GP0",
+ "driver": "vendor",
+ "enabled": true,
+ "mouse_enabled": true
+ },
+ "url": "https://github.com/strobo5/T61_PiPico_Scanner",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT_iso": {
+ "layout": [
+ {"label": "Esc", "matrix": [5, 0], "x": 0, "y": 0, "w": 0.9, "h": 0.75},
+ {"label": "Mute", "matrix": [4, 10], "x": 0.9, "y": 0, "w": 0.75, "h": 0.5},
+ {"label": "Vol -", "matrix": [3, 10], "x": 1.65, "y": 0, "w": 0.75, "h": 0.5},
+ {"label": "Vol +", "matrix": [2, 10], "x": 2.4, "y": 0, "w": 0.75, "h": 0.5},
+ {"label": "ThinkVantage", "matrix": [5, 10], "x": 3.5, "y": 0, "w": 1.25, "h": 0.5},
+ {"label": "PrtSc", "matrix": [1, 13], "x": 8.9, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "ScrLk", "matrix": [2, 13], "x": 9.8, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "Pause", "matrix": [6, 12], "x": 10.7, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "Insert", "matrix": [0, 9], "x": 12, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "Home", "matrix": [0, 12], "x": 12.9, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "PgUp", "matrix": [0, 11], "x": 13.8, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "F1", "matrix": [0, 1], "x": 0, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F2", "matrix": [0, 2], "x": 0.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F3", "matrix": [3, 2], "x": 1.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F4", "matrix": [5, 2], "x": 2.7, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F5", "matrix": [5, 8], "x": 4, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F6", "matrix": [5, 5], "x": 4.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F7", "matrix": [3, 6], "x": 5.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F8", "matrix": [0, 6], "x": 6.7, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F9", "matrix": [0, 8], "x": 8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F10", "matrix": [1, 8], "x": 8.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F11", "matrix": [1, 10], "x": 9.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F12", "matrix": [1, 9], "x": 10.7, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "Delete", "matrix": [0, 10], "x": 12, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "End", "matrix": [1, 12], "x": 12.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "PgDn", "matrix": [1, 11], "x": 13.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "`\u00ac", "matrix": [0, 0], "x": 0, "y": 1.4},
+ {"label": "1!", "matrix": [1, 0], "x": 1, "y": 1.4},
+ {"label": "2\"", "matrix": [1, 1], "x": 2, "y": 1.4},
+ {"label": "3\u00a3", "matrix": [1, 2], "x": 3, "y": 1.4},
+ {"label": "4$", "matrix": [1, 3], "x": 4, "y": 1.4},
+ {"label": "5%", "matrix": [0, 3], "x": 5, "y": 1.4},
+ {"label": "6^", "matrix": [0, 4], "x": 6, "y": 1.4},
+ {"label": "7&", "matrix": [1, 4], "x": 7, "y": 1.4},
+ {"label": "8*", "matrix": [1, 5], "x": 8, "y": 1.4},
+ {"label": "9(", "matrix": [1, 6], "x": 9, "y": 1.4},
+ {"label": "0)", "matrix": [1, 7], "x": 10, "y": 1.4},
+ {"label": "-_", "matrix": [0, 7], "x": 11, "y": 1.4},
+ {"label": "=+", "matrix": [0, 5], "x": 12, "y": 1.4},
+ {"label": "Bksp", "matrix": [3, 8], "x": 13, "y": 1.4, "w": 2},
+ {"label": "Tab", "matrix": [3, 0], "x": 0, "y": 2.4, "w": 1.5},
+ {"label": "Q", "matrix": [2, 0], "x": 1.5, "y": 2.4},
+ {"label": "W", "matrix": [2, 1], "x": 2.5, "y": 2.4},
+ {"label": "E", "matrix": [2, 2], "x": 3.5, "y": 2.4},
+ {"label": "R", "matrix": [2, 3], "x": 4.5, "y": 2.4},
+ {"label": "T", "matrix": [3, 3], "x": 5.5, "y": 2.4},
+ {"label": "Y", "matrix": [3, 4], "x": 6.5, "y": 2.4},
+ {"label": "U", "matrix": [2, 4], "x": 7.5, "y": 2.4},
+ {"label": "I", "matrix": [2, 5], "x": 8.5, "y": 2.4},
+ {"label": "O", "matrix": [2, 6], "x": 9.5, "y": 2.4},
+ {"label": "P", "matrix": [2, 7], "x": 10.5, "y": 2.4},
+ {"label": "[{", "matrix": [3, 7], "x": 11.5, "y": 2.4},
+ {"label": "]}", "matrix": [3, 5], "x": 12.5, "y": 2.4},
+ {"label": "Caps Lock", "matrix": [3, 1], "x": 0, "y": 3.4, "w": 1.75},
+ {"label": "A", "matrix": [4, 0], "x": 1.75, "y": 3.4},
+ {"label": "S", "matrix": [4, 1], "x": 2.75, "y": 3.4},
+ {"label": "D", "matrix": [4, 2], "x": 3.75, "y": 3.4},
+ {"label": "F", "matrix": [4, 3], "x": 4.75, "y": 3.4},
+ {"label": "G", "matrix": [5, 3], "x": 5.75, "y": 3.4},
+ {"label": "H", "matrix": [5, 4], "x": 6.75, "y": 3.4},
+ {"label": "J", "matrix": [4, 4], "x": 7.75, "y": 3.4},
+ {"label": "K", "matrix": [4, 5], "x": 8.75, "y": 3.4},
+ {"label": "L", "matrix": [4, 6], "x": 9.75, "y": 3.4},
+ {"label": ";:", "matrix": [4, 7], "x": 10.75, "y": 3.4},
+ {"label": "'@", "matrix": [5, 7], "x": 11.75, "y": 3.4},
+ {"label": "#~", "matrix": [6, 7], "x": 12.75, "y": 3.4},
+ {"label": "Enter", "matrix": [6, 8], "x": 13.75, "y": 2.4, "w": 1.25, "h": 2},
+ {"label": "Shift", "matrix": [3, 14], "x": 0, "y": 4.4, "w": 1.25},
+ {"label": "\\|", "matrix": [5, 1], "x": 1.25, "y": 4.4},
+ {"label": "Z", "matrix": [6, 0], "x": 2.25, "y": 4.4},
+ {"label": "X", "matrix": [6, 1], "x": 3.25, "y": 4.4},
+ {"label": "C", "matrix": [6, 2], "x": 4.25, "y": 4.4},
+ {"label": "V", "matrix": [6, 3], "x": 5.25, "y": 4.4},
+ {"label": "B", "matrix": [7, 3], "x": 6.25, "y": 4.4},
+ {"label": "N", "matrix": [7, 4], "x": 7.25, "y": 4.4},
+ {"label": "M", "matrix": [6, 4], "x": 8.25, "y": 4.4},
+ {"label": ",<", "matrix": [6, 5], "x": 9.25, "y": 4.4},
+ {"label": ".>", "matrix": [6, 6], "x": 10.25, "y": 4.4},
+ {"label": "/?", "matrix": [7, 7], "x": 11.25, "y": 4.4},
+ {"label": "Shift", "matrix": [6, 14], "x": 12.25, "y": 4.4, "w": 2.75},
+ {"label": "Fn", "matrix": [4, 9], "x": 0, "y": 5.4},
+ {"label": "Ctrl", "matrix": [0, 15], "x": 1, "y": 5.4, "w": 1.25},
+ {"label": "Left OS", "matrix": [2, 11], "x": 2.25, "y": 5.4, "w": 0.9},
+ {"label": "Alt", "matrix": [5, 13], "x": 3.15, "y": 5.4},
+ {"label": "Space", "matrix": [7, 8], "x": 4.15, "y": 5.4, "w": 5},
+ {"label": "AltGr", "matrix": [7, 13], "x": 9.25, "y": 5.4},
+ {"label": "Menu", "matrix": [4, 11], "x": 10.25, "y": 5.4},
+ {"label": "Ctrl", "matrix": [6, 15], "x": 11.25, "y": 5.4},
+ {"label": "Browser Back", "matrix": [6, 11], "x": 12.25, "y": 5.4, "w": 0.9, "h": 0.75},
+ {"label": "Up", "matrix": [5, 12], "x": 13.15, "y": 5.4, "w": 0.9, "h": 0.75},
+ {"label": "Browser Forward", "matrix": [7, 11], "x": 14.05, "y": 5.4, "w": 0.9, "h": 0.75},
+ {"label": "Left", "matrix": [7, 12], "x": 12.25, "y": 6.15, "w": 0.9, "h": 0.75},
+ {"label": "Down", "matrix": [7, 10], "x": 13.15, "y": 6.15, "w": 0.9, "h": 0.75},
+ {"label": "Right", "matrix": [7, 9], "x": 14.05, "y": 6.15, "w": 0.9, "h": 0.75}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/thinkpad_t6x/rpi_pico/keymaps/default/keymap.c b/keyboards/converter/thinkpad_t6x/rpi_pico/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4dac20888fb
--- /dev/null
+++ b/keyboards/converter/thinkpad_t6x/rpi_pico/keymaps/default/keymap.c
@@ -0,0 +1,17 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_iso(
+ KC_ESC, KC_MUTE, KC_VOLD, KC_VOLU, QK_BOOT, KC_PSCR, KC_SCRL, KC_PAUS, KC_INS, KC_HOME, KC_PGUP,
+ 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_END, KC_PGDN,
+ 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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_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_NO, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_WBAK, KC_UP , KC_WFWD,
+ KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/converter/thinkpad_t6x/rpi_pico/readme.md b/keyboards/converter/thinkpad_t6x/rpi_pico/readme.md
new file mode 100644
index 00000000000..0008dad2f14
--- /dev/null
+++ b/keyboards/converter/thinkpad_t6x/rpi_pico/readme.md
@@ -0,0 +1,27 @@
+# converter/thinkpad_t6x/rpi_pico
+
+![converter/thinkpad_t6x/rpi_pico](https://i.imgur.com/wUG9p6eh.jpeg)
+
+This is a converter PCB for Lenovo Thinkpad keyboards from a wide range of models (T60, T61, X220, ...), based on the Raspberry Pi Pico. The QMK implementation here is specific to the converter in the link below. Similar PCB designs to convert a Thinkpad keyboard to USB exist, but they use a different microcontroller and wiring of the keyboard connector with the MCU.
+
+* Keyboard Maintainer: [Michael Büchler](https://github.com/strobo5)
+* Hardware Supported: The linked converter PCB with keyboards from various Thinkpad models
+* Hardware Availability: [Custom PCB](https://github.com/strobo5/T61_PiPico_Scanner)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/thinkpad_t6x/rpi_pico:default
+
+Flashing example for this keyboard:
+
+ make converter/thinkpad_t6x/rpi_pico: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/handwired/tenstad/keyboard.json b/keyboards/handwired/tenstad/keyboard.json
new file mode 100644
index 00000000000..1220d3b107f
--- /dev/null
+++ b/keyboards/handwired/tenstad/keyboard.json
@@ -0,0 +1,85 @@
+{
+ "manufacturer": "Amund Tenstad",
+ "keyboard_name": "tenstad",
+ "maintainer": "tenstad",
+ "bootloader": "rp2040",
+ "diode_direction": "ROW2COL",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP15", "GP14"],
+ "rows": ["GP3", "GP4", "GP5", "GP6"]
+ },
+ "processor": "RP2040",
+ "split": {
+ "enabled": true,
+ "serial": {
+ "driver": "vendor"
+ },
+ "transport": {
+ "protocol": "serial"
+ }
+ },
+ "url": "https://github.com/tenstad/keyboard",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT_split_3x6_5": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 1.35},
+ {"matrix": [0, 1], "x": 1, "y": 0.95},
+ {"matrix": [0, 2], "x": 2.35, "y": 0.35},
+ {"matrix": [0, 3], "x": 3.35, "y": 0},
+ {"matrix": [0, 4], "x": 4.65, "y": 0.4},
+ {"matrix": [0, 5], "x": 5.65, "y": 0.4},
+ {"matrix": [4, 5], "x": 12.25, "y": 0.4},
+ {"matrix": [4, 4], "x": 13.25, "y": 0.4},
+ {"matrix": [4, 3], "x": 14.55, "y": 0},
+ {"matrix": [4, 2], "x": 15.55, "y": 0.35},
+ {"matrix": [4, 1], "x": 16.9, "y": 0.95},
+ {"matrix": [4, 0], "x": 17.9, "y": 1.35},
+ {"matrix": [1, 0], "x": 0.1, "y": 2.35},
+ {"matrix": [1, 1], "x": 1.1, "y": 1.95},
+ {"matrix": [1, 2], "x": 2.4, "y": 1.35},
+ {"matrix": [1, 3], "x": 3.4, "y": 1},
+ {"matrix": [1, 4], "x": 4.65, "y": 1.4},
+ {"matrix": [1, 5], "x": 5.65, "y": 1.4},
+ {"matrix": [5, 5], "x": 12.25, "y": 1.4},
+ {"matrix": [5, 4], "x": 13.25, "y": 1.4},
+ {"matrix": [5, 3], "x": 14.5, "y": 1},
+ {"matrix": [5, 2], "x": 15.5, "y": 1.35},
+ {"matrix": [5, 1], "x": 16.8, "y": 1.95},
+ {"matrix": [5, 0], "x": 17.8, "y": 2.35},
+ {"matrix": [2, 0], "x": 0.2, "y": 3.35},
+ {"matrix": [2, 1], "x": 1.2, "y": 2.95},
+ {"matrix": [2, 2], "x": 2.45, "y": 2.35},
+ {"matrix": [2, 3], "x": 3.45, "y": 2},
+ {"matrix": [2, 4], "x": 4.65, "y": 2.4},
+ {"matrix": [2, 5], "x": 5.65, "y": 2.4},
+ {"matrix": [6, 5], "x": 12.25, "y": 2.4},
+ {"matrix": [6, 4], "x": 13.25, "y": 2.4},
+ {"matrix": [6, 3], "x": 14.45, "y": 2},
+ {"matrix": [6, 2], "x": 15.45, "y": 2.35},
+ {"matrix": [6, 1], "x": 16.7, "y": 2.95},
+ {"matrix": [6, 0], "x": 17.7, "y": 3.35},
+ {"matrix": [3, 5], "x": 6.85, "y": 3},
+ {"matrix": [3, 3], "x": 7.95, "y": 3.35},
+ {"matrix": [3, 4], "x": 5.6, "y": 3.95},
+ {"matrix": [3, 1], "x": 6.7, "y": 4.1},
+ {"matrix": [3, 2], "x": 7.8, "y": 4.45},
+ {"matrix": [7, 3], "x": 9.95, "y": 3.35},
+ {"matrix": [7, 5], "x": 11.05, "y": 3},
+ {"matrix": [7, 2], "x": 10.1, "y": 4.45},
+ {"matrix": [7, 1], "x": 11.2, "y": 4.1},
+ {"matrix": [7, 4], "x": 12.3, "y": 3.95}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/tenstad/keymaps/default/keymap.json b/keyboards/handwired/tenstad/keymaps/default/keymap.json
new file mode 100644
index 00000000000..4882e307321
--- /dev/null
+++ b/keyboards/handwired/tenstad/keymaps/default/keymap.json
@@ -0,0 +1,55 @@
+{
+ "keyboard": "handwired/tenstad",
+ "keymap": "default",
+ "layout": "LAYOUT_split_3x6_5",
+ "layers": [
+ [
+ "KC_ESC",
+ "KC_Q",
+ "KC_W",
+ "KC_E",
+ "KC_R",
+ "KC_T",
+ "KC_Y",
+ "KC_U",
+ "KC_I",
+ "KC_O",
+ "KC_P",
+ "KC_RBRC",
+ "KC_TAB",
+ "KC_A",
+ "KC_S",
+ "KC_D",
+ "KC_F",
+ "KC_G",
+ "KC_H",
+ "KC_J",
+ "KC_K",
+ "KC_L",
+ "KC_GRV",
+ "KC_QUOT",
+ "KC_LCTL",
+ "KC_Z",
+ "KC_X",
+ "KC_C",
+ "KC_V",
+ "KC_B",
+ "KC_N",
+ "KC_M",
+ "KC_COMM",
+ "KC_DOT",
+ "KC_MINS",
+ "KC_RSFT",
+ "KC_NO",
+ "KC_NO",
+ "KC_TAB",
+ "KC_NO",
+ "KC_NO",
+ "KC_DEL",
+ "KC_NO",
+ "KC_BSPC",
+ "KC_SPC",
+ "KC_ENT"
+ ]
+ ]
+}
diff --git a/keyboards/handwired/tenstad/readme.md b/keyboards/handwired/tenstad/readme.md
new file mode 100644
index 00000000000..8ed97513303
--- /dev/null
+++ b/keyboards/handwired/tenstad/readme.md
@@ -0,0 +1,19 @@
+# tenstad
+
+![tenstad](https://i.imgur.com/Lh4TAUF.png)
+
+[tenstad/keyboard](https://github.com/tenstad/keyboard) - hand-soldered ergonomic split 3x6 keyboard with 5 thumb keys
+
+* Keyboard Maintainer: [Amund Tenstad](https://github.com/tenstad)
+* Hardware Supported: RP2040 Zero
+* Hardware Availability: [List of Parts](https://github.com/tenstad/keyboard/blob/main/README.md#parts) from [AliExpress](https://aliexpress.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/tenstad:default
+
+Flashing example for this keyboard:
+
+ make handwired/tenstad: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/herevoland/buff75/keyboard.json b/keyboards/herevoland/buff75/keyboard.json
new file mode 100644
index 00000000000..15f3e27ac18
--- /dev/null
+++ b/keyboards/herevoland/buff75/keyboard.json
@@ -0,0 +1,137 @@
+{
+ "keyboard_name": "Buff75",
+ "processor": "STM32F103",
+ "bootloader": "stm32duino",
+ "manufacturer": "HereVoLand",
+ "url": "",
+ "maintainer": "Here VoLand @Vem",
+ "usb": {
+ "vid": "0xB727",
+ "pid": "0xB727",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "rgblight": {
+ "led_count": 1,
+ "brightness_steps": 8,
+ "saturation_steps": 8,
+ "sleep": true,
+ "animations": {
+ "breathing": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "knight": true,
+ "christmas": true,
+ "static_gradient": true,
+ "alternating": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "pin": "B2"
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A8", "B15", "B14", "B13", "B12", "A3", "A4" ],
+ "rows": ["A5", "B10", "B1", "B0", "A7", "A6"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "matrix": [0,0], "x":0, "y":0},
+ {"label":"F1", "matrix": [0,1], "x":1.5, "y":0},
+ {"label":"F2", "matrix": [0,2], "x":2.5, "y":0},
+ {"label":"F3", "matrix": [0,3], "x":3.5, "y":0},
+ {"label":"F4", "matrix": [0,4], "x":4.5, "y":0},
+ {"label":"F5", "matrix": [0,6], "x":6, "y":0},
+ {"label":"F6", "matrix": [0,7], "x":7, "y":0},
+ {"label":"F7", "matrix": [0,8], "x":8, "y":0},
+ {"label":"F8", "matrix": [0,9], "x":9, "y":0},
+ {"label":"F9", "matrix": [0,10], "x":10.5, "y":0},
+ {"label":"F10", "matrix": [0,11], "x":11.5, "y":0},
+ {"label":"F11", "matrix": [0,12], "x":12.5, "y":0},
+ {"label":"F12", "matrix": [0,13], "x":13.5, "y":0},
+ {"label":"Home", "matrix": [0,14], "x":15, "y":0},
+
+ {"label":"`~", "matrix": [1,0], "x":0, "y":1.25},
+ {"label":"1!", "matrix": [1,1], "x":1, "y":1.25},
+ {"label":"2@", "matrix": [1,2], "x":2, "y":1.25},
+ {"label":"3#", "matrix": [1,3], "x":3, "y":1.25},
+ {"label":"4$", "matrix": [1,4], "x":4, "y":1.25},
+ {"label":"5%", "matrix": [1,5], "x":5, "y":1.25},
+ {"label":"6^", "matrix": [1,6], "x":6, "y":1.25},
+ {"label":"7&", "matrix": [1,7], "x":7, "y":1.25},
+ {"label":"8*", "matrix": [1,8], "x":8, "y":1.25},
+ {"label":"9(", "matrix": [1,9], "x":9, "y":1.25},
+ {"label":"0)", "matrix": [1,10], "x":10, "y":1.25},
+ {"label":"-_", "matrix": [1,11], "x":11, "y":1.25},
+ {"label":"=+", "matrix": [1,12], "x":12, "y":1.25},
+ {"label":"Backspace", "matrix": [1,13], "x":13, "y":1.25},
+ {"label":"Page Up", "matrix": [1,14], "x":15, "y":1.25},
+
+ {"label":"Tab", "matrix": [2,0], "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "matrix": [2,1], "x":1.5, "y":2.25},
+ {"label":"W", "matrix": [2,2], "x":2.5, "y":2.25},
+ {"label":"E", "matrix": [2,3], "x":3.5, "y":2.25},
+ {"label":"R", "matrix": [2,4], "x":4.5, "y":2.25},
+ {"label":"T", "matrix": [2,5], "x":5.5, "y":2.25},
+ {"label":"Y", "matrix": [2,6], "x":6.5, "y":2.25},
+ {"label":"U", "matrix": [2,7], "x":7.5, "y":2.25},
+ {"label":"I", "matrix": [2,8], "x":8.5, "y":2.25},
+ {"label":"O", "matrix": [2,9], "x":9.5, "y":2.25},
+ {"label":"P", "matrix": [2,10], "x":10.5, "y":2.25},
+ {"label":"[", "matrix": [2,11], "x":11.5, "y":2.25},
+ {"label":"]", "matrix": [2,12], "x":12.5, "y":2.25},
+ {"label":"\\", "matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"label":"Page Down", "matrix": [2,14], "x":15, "y":2.25},
+
+ {"label":"Caps Lock", "matrix": [3,0], "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "matrix": [3,1], "x":1.75, "y":3.25},
+ {"label":"S", "matrix": [3,2], "x":2.75, "y":3.25},
+ {"label":"D", "matrix": [3,3], "x":3.75, "y":3.25},
+ {"label":"F", "matrix": [3,4], "x":4.75, "y":3.25},
+ {"label":"G", "matrix": [3,5], "x":5.75, "y":3.25},
+ {"label":"H", "matrix": [3,6], "x":6.75, "y":3.25},
+ {"label":"J", "matrix": [3,7], "x":7.75, "y":3.25},
+ {"label":"K", "matrix": [3,8], "x":8.75, "y":3.25},
+ {"label":"L", "matrix": [3,9], "x":9.75, "y":3.25},
+ {"label":";", "matrix": [3,10], "x":10.75, "y":3.25},
+ {"label":"'", "matrix": [3,11], "x":11.75, "y":3.25},
+ {"label":"Enter", "matrix": [3,13], "x":12.75, "y":3.25, "w":2.25},
+ {"label":"End", "matrix": [3,14], "x":15, "y":3.25},
+
+ {"label":"Shift", "matrix": [4,0], "x":0, "y":4.25, "w":2.25},
+ {"label":"Z", "matrix": [4,2], "x":2.25, "y":4.25},
+ {"label":"X", "matrix": [4,3], "x":3.25, "y":4.25},
+ {"label":"C", "matrix": [4,4], "x":4.25, "y":4.25},
+ {"label":"V", "matrix": [4,5], "x":5.25, "y":4.25},
+ {"label":"B", "matrix": [4,6], "x":6.25, "y":4.25},
+ {"label":"N", "matrix": [4,7], "x":7.25, "y":4.25},
+ {"label":"M", "matrix": [4,8], "x":8.25, "y":4.25},
+ {"label":",", "matrix": [4,9], "x":9.25, "y":4.25},
+ {"label":".", "matrix": [4,10], "x":10.25, "y":4.25},
+ {"label":"/", "matrix": [4,11], "x":11.25, "y":4.25},
+ {"label":"Shift", "matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"label":"Up", "matrix": [4,13], "x":14, "y":4.25},
+ {"label":"End", "matrix": [4,14], "x":15, "y":4.25},
+
+ {"label":"Ctrl", "matrix": [5,0], "x":0, "y":5.25, "w":1.25},
+ {"label":"Win", "matrix": [5,1], "x":1.25, "y":5.25, "w":1.25},
+ {"label":"Alt", "matrix": [5,2], "x":2.5, "y":5.25, "w":1.25},
+ {"label":"Space", "matrix": [5,6], "x":3.75, "y":5.25, "w":6.25},
+ {"label":"Alt", "matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"label":"Fn", "matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"label":"Left", "matrix": [5,12], "x":13, "y":5.25},
+ {"label":"Down", "matrix": [5,13], "x":14, "y":5.25},
+ {"label":"Right", "matrix": [5,14], "x":15, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/herevoland/buff75/keymaps/default/keymap.c b/keyboards/herevoland/buff75/keymaps/default/keymap.c
new file mode 100644
index 00000000000..28762b9a17c
--- /dev/null
+++ b/keyboards/herevoland/buff75/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2024 楽(HereVoLand @Vem)
+ *
+ * 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(
+ 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_HOME,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, 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_DEL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/herevoland/buff75/matrix_diagram.md b/keyboards/herevoland/buff75/matrix_diagram.md
new file mode 100644
index 00000000000..35cca7ec06f
--- /dev/null
+++ b/keyboards/herevoland/buff75/matrix_diagram.md
@@ -0,0 +1,18 @@
+# Matrix Diagram for Buff75
+
+```
+ ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┐
+ │00 │ │01 │02 │03 │04 │ │06 │07 │08 │09 │ │0A │0B │0C │0D │ │0E │
+ └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┘
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ │10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬──┼───┤
+ │20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D│2E │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬─────┴──┼───┤
+ │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3E │
+ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ │40 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4E │
+ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴───┴┬─┬───┼───┼───┤
+ │50 │51 │52 │56 │5A │ 5B │ │5C │5D |5E |
+ └────┴────┴────┴────────────────────────┴───┴─────┘ └───┴───┘───┘
+```
diff --git a/keyboards/herevoland/buff75/readme.md b/keyboards/herevoland/buff75/readme.md
new file mode 100644
index 00000000000..b5ce6407d71
--- /dev/null
+++ b/keyboards/herevoland/buff75/readme.md
@@ -0,0 +1,25 @@
+# Buff75
+
+![Buff75](https://imgur.com/pQfzIZr.jpg)
+An 75%/TenKeyLess sized keyboard with 1 RGB.
+
+* Keyboard Maintainer: [HereVoLand](https://github.com/Vem-596)
+* Hardware Supported: buff75
+* Hardware Availability: [BUFF Customer-Keyboard](https://shop107132374.taobao.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make herevoland/buff75:default
+
+Flashing example for this keyboard:
+
+ make herevoland/buff75: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 which is Escape in this keyboard) and plug in the keyboard
+- **Keycode in layout**: Press the key mapped to `QK_BOOT`
diff --git a/keyboards/idyllic/pizzapad/keyboard.json b/keyboards/idyllic/pizzapad/keyboard.json
new file mode 100644
index 00000000000..638db198227
--- /dev/null
+++ b/keyboards/idyllic/pizzapad/keyboard.json
@@ -0,0 +1,36 @@
+{
+ "manufacturer": "Zykrah",
+ "keyboard_name": "Pizza Pad",
+ "maintainer": "zykrah",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 6
+ },
+ "matrix_pins": {
+ "cols": ["GP1", "GP0", "GP7"],
+ "rows": ["GP6", "GP29", "GP28"]
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x5050",
+ "vid": "0x7A79"
+ },
+ "community_layouts": ["ortho_3x3"],
+ "layouts": {
+ "LAYOUT_ortho_3x3": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/idyllic/pizzapad/keymaps/default/keymap.c b/keyboards/idyllic/pizzapad/keymaps/default/keymap.c
new file mode 100644
index 00000000000..333b33bc0b4
--- /dev/null
+++ b/keyboards/idyllic/pizzapad/keymaps/default/keymap.c
@@ -0,0 +1,12 @@
+// Copyright 2024 Zykrah (@zykrah)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x3(
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6,
+ KC_P1, KC_P2, KC_P3
+ )
+};
diff --git a/keyboards/idyllic/pizzapad/readme.md b/keyboards/idyllic/pizzapad/readme.md
new file mode 100644
index 00000000000..04098cb522d
--- /dev/null
+++ b/keyboards/idyllic/pizzapad/readme.md
@@ -0,0 +1,27 @@
+# Pizza Pad PCB
+
+![Pizza Pad PCB](https://i.imgur.com/eJLuaZY.jpg)
+
+A 3x3 PCB designed for the Idyllic Pretty Pad.
+
+* Keyboard Maintainer: Zykrah
+* Hardware Supported: Pizza Pad PCB (using a SEEED XIAO RP2040)
+* Hardware Availability: [Mechstock](https://mechstock.com.au/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make idyllic/pizzapad:default
+
+Flashing example for this keyboard:
+
+ make idyllic/pizzapad: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 both the `BOOT` and `RESET` buttons at the same time
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/mountainmechdesigns/teton_78/keyboard.json b/keyboards/mountainmechdesigns/teton_78/keyboard.json
new file mode 100644
index 00000000000..d6f5ce9cd83
--- /dev/null
+++ b/keyboards/mountainmechdesigns/teton_78/keyboard.json
@@ -0,0 +1,113 @@
+{
+ "manufacturer": "Bennett Balogh",
+ "keyboard_name": "teton_78",
+ "maintainer": "qmk",
+ "bootloader": "atmel-dfu",
+ "bootmagic": {
+ "matrix": [0, 2]
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["F7", "F6", "F5", "F4", "F1", "F0", "B0", "B1", "B2", "B3", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7"],
+ "rows": ["D0", "D1", "D2", "D3", "D5"]
+ },
+ "processor": "atmega32u4",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x3349",
+ "vid": "0x8A5B"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 0, "y": 1},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 7.25, "y": 0},
+ {"matrix": [0, 8], "x": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [0, 15], "x": 15.25, "y": 0, "w": 2},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1},
+ {"matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+ {"matrix": [3, 7], "x": 8.5, "y": 3},
+ {"matrix": [3, 8], "x": 9.5, "y": 3},
+ {"matrix": [3, 9], "x": 10.5, "y": 3},
+ {"matrix": [3, 10], "x": 11.5, "y": 3},
+ {"matrix": [3, 11], "x": 12.5, "y": 3},
+ {"matrix": [3, 12], "x": 13.5, "y": 3},
+ {"matrix": [3, 13], "x": 14.5, "y": 3, "w": 2.75},
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 7], "x": 6, "y": 4, "w": 6.25},
+ {"matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 14.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 16.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 16], "x": 17.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 17], "x": 18.5, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/mountainmechdesigns/teton_78/keymaps/default/keymap.c b/keyboards/mountainmechdesigns/teton_78/keymaps/default/keymap.c
new file mode 100644
index 00000000000..c4762d577d6
--- /dev/null
+++ b/keyboards/mountainmechdesigns/teton_78/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+/* Copyright 2024 Bennett Balogh LLC
+ *
+ * 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(
+
+ KC_F1, KC_F6, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME,
+ KC_F2, KC_F7, 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_F3, KC_F8, 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_F4, KC_F9, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_F5, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/mountainmechdesigns/teton_78/readme.md b/keyboards/mountainmechdesigns/teton_78/readme.md
new file mode 100644
index 00000000000..40ef5c436bf
--- /dev/null
+++ b/keyboards/mountainmechdesigns/teton_78/readme.md
@@ -0,0 +1,37 @@
+# Teton 78 QMK Firmware
+
+## Introduction
+
+![Teton 78](https://i.imgur.com/MnASIrv.jpeg)
+
+This is the QMK firmware repository for the Teton78, a 68XT solder and hotswao keyboard designed by Mountain Mech Designs - Bennett Balogh.
+
+The Teton 78 has entered GB and sucessfully finalized in November 2024 The IC page for the keyboard can be found [here](https://geekhack.org/index.php?topic=123275.0).
+The sale page can be found [here](https://www.mountainmechdesigns.com/)
+Discord link can be found [here](https://discord.gg/h9dMwRNfVy)
+
+## About
+
+* Keyboard Maintainer: [Bennett Balogh](https://github.com/AwesomeBalogh)
+* Hardware Supported: Atmega32u4
+* Hardware Availability: N/A
+
+## How to compile
+
+After setting up your build environment, you can compile the Teton 78 default keymap by using:
+
+ make mountainmechdesigns/teton_78:default
+
+Flash using
+
+ make mountainmechdesigns/teton_78: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
\ No newline at end of file
diff --git a/keyboards/sdrakbs/sdrakb00/keyboard.json b/keyboards/sdrakbs/sdrakb00/keyboard.json
new file mode 100644
index 00000000000..f9e24cc63f0
--- /dev/null
+++ b/keyboards/sdrakbs/sdrakb00/keyboard.json
@@ -0,0 +1,71 @@
+{
+ "manufacturer": "Diego Andres Rabaioli",
+ "keyboard_name": "sdrakb00",
+ "maintainer": "drabaioli",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B5", "pin_b": "B6", "resolution": 2}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["F0", "F1", "F4", "F5"],
+ "rows": ["D4", "D6", "D7"]
+ },
+ "processor": "atmega32u4",
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
+ {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
+ {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4},
+ {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4},
+ {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4},
+ {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4},
+ {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4},
+ {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4},
+ {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4},
+ {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}
+ ],
+ "max_brightness": 100,
+ "sleep": true,
+ "timeout": 300000
+ },
+ "url": "https://github.com/drabaioli/SdraKb00",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x4200",
+ "vid": "0x7331"
+ },
+ "ws2812": {
+ "pin": "B0"
+ },
+ "layouts": {
+ "LAYOUT_ortho_3x4": {
+ "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, "encoder": 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}
+ ]
+ }
+ }
+}
diff --git a/keyboards/sdrakbs/sdrakb00/keymaps/default/keymap.c b/keyboards/sdrakbs/sdrakb00/keymaps/default/keymap.c
new file mode 100644
index 00000000000..c5481b1076e
--- /dev/null
+++ b/keyboards/sdrakbs/sdrakb00/keymaps/default/keymap.c
@@ -0,0 +1,74 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+/* Keymap for 3x4 Macropad
+ *
+ * Layer 0 (Base Layer) - Numpad layout with mute button and layer toggle:
+ * ,----------------------,
+ * | 7 | 8 | 9 | MUTE |
+ * |-------+-------+-------+--------|
+ * | 4 | 5 | 6 | Layer1 |
+ * |-------+-------+-------+--------|
+ * | 1 | 2 | 3 | 0 |
+ * `-----------------------^--------'
+ *
+ * Layer 1 (Function Layer) - Accessed by holding MO(1):
+ * ,----------------------,
+ * | BKSP | / | - | ---- |
+ * |-------+-------+-------+--------|
+ * | = | * | + | ---- |
+ * |-------+-------+-------+--------|
+ * | ENTER | ---- | ---- | . |
+ * `-----------------------^--------'
+ *
+ * The base layer (0) provides standard numpad functionality with:
+ * - Numbers 0-9 in traditional numpad layout
+ * - Mute button in top right
+ * - Layer 1 momentary toggle (MO1) in middle right
+ *
+ * The function layer (1) adds:
+ * - Basic mathematical operators (+, -, *, /)
+ * - Backspace, Enter, and decimal point
+ * - Equal sign for calculations
+ * - Empty slots marked as ---- (KC_NO)
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ortho_3x4(
+ KC_KP_7, KC_KP_8, KC_KP_9, KC_MUTE,
+ KC_KP_4, KC_KP_5, KC_KP_6, MO(1),
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_0
+ ),
+
+ [1] = LAYOUT_ortho_3x4(
+ KC_BACKSPACE, KC_KP_SLASH, KC_KP_MINUS, _______,
+ KC_EQUAL, KC_KP_ASTERISK, KC_KP_PLUS, _______,
+ KC_ENTER, _______, _______, KC_KP_DOT
+ )
+};
+
+
+/*
+ * Handle layer state changes by updating RGB matrix colors
+ *
+ * Sets RGB matrix colors based on active layer:
+ * - Layer 0: Light green (#88FB7A)
+ * - Layer 1: Red
+ * - Other layers: Red (fallback)
+ */
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case 0:
+ rgb_matrix_sethsv(85, 255, 251); // #88FB7A for layer 0
+ break;
+ case 1:
+ rgb_matrix_sethsv(0, 255, 255); // Red for layer 1
+ break;
+ default:
+ rgb_matrix_sethsv(0, 255, 255); // Red for any other layer
+ break;
+ }
+ return state;
+}
diff --git a/keyboards/sdrakbs/sdrakb00/readme.md b/keyboards/sdrakbs/sdrakb00/readme.md
new file mode 100644
index 00000000000..21e56f9595a
--- /dev/null
+++ b/keyboards/sdrakbs/sdrakb00/readme.md
@@ -0,0 +1,52 @@
+# sdrakb00
+
+![sdrakb00](https://i.imgur.com/0HfpFqW.jpeg)
+
+11 keys hot-swap macropad with rotary encoder.
+
+Macropad features:
+- 11 hot-swap keys
+- Rotary encoder with push button
+- AtMega32U4 MCU
+- Per-key RGB led for backlighting
+- USB-C connector
+- On PCB SPI header
+- MCU reset button
+- Switch mounting plate
+- Power LED indicator
+
+* Keyboard Maintainer: [Diego Andres Rabaioli](https://github.com/drabaioli)
+* Hardware Supported: Pro Micro Atmega32u4 based macropad with 11 keys, RGB LED chain and rotary encoder
+* Hardware Availability: [Get the gerbers and have fun building it your self ;)](https://github.com/drabaioli/SdraKb00)
+
+Build SdraKb00 firmware:
+
+ make sdrakbs/sdrakb00:default
+
+Flashing SdraKb00 firmware, execute:
+
+ make sdrakbs/sdrakb00:default:flash
+
+Then press the reset button on the back side of the PCB.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Physical reset button** (preferred): Briefly press the button on the back of the PCB
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+
+## Default Keymap
+
+### Base Layer (0)
+- NumPad layout (1-9, 0)
+- Encoder: Volume Up/Down
+- Encoder Push: Mute
+- Layer Switch: Hold (1,3) key for function layer
+
+### Function Layer (1)
+- NumPad operators (+, -, *, /)
+- Enter, "=" and backspace keys
+- Decimal point
diff --git a/keyboards/shorty/keyboard.json b/keyboards/shorty/keyboard.json
new file mode 100644
index 00000000000..158648badd4
--- /dev/null
+++ b/keyboards/shorty/keyboard.json
@@ -0,0 +1,48 @@
+{
+ "manufacturer": "Hawtkeys",
+ "keyboard_name": "shorty",
+ "maintainer": "hawtkeys",
+ "bootloader": "rp2040",
+ "diode_direction": "ROW2COL",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP28", "pin_b": "GP27"},
+ {"pin_a": "GP3", "pin_b": "GP4"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP14", "GP13", "GP12"],
+ "rows": ["GP11", "GP10", "GP9", "GP29", "GP2"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x5400",
+ "vid": "0x5453"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [3, 0], "x": 0, "y": 0},
+ {"matrix": [4, 0], "x": 2, "y": 0},
+ {"matrix": [0, 0], "x": 0, "y": 1},
+ {"matrix": [0, 1], "x": 1, "y": 1},
+ {"matrix": [0, 2], "x": 2, "y": 1},
+ {"matrix": [1, 0], "x": 0, "y": 2},
+ {"matrix": [1, 1], "x": 1, "y": 2},
+ {"matrix": [1, 2], "x": 2, "y": 2},
+ {"matrix": [2, 0], "x": 0, "y": 3},
+ {"matrix": [2, 1], "x": 1, "y": 3},
+ {"matrix": [2, 2], "x": 2, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/shorty/keymaps/default/keymap.c b/keyboards/shorty/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ef4bbba7ef0
--- /dev/null
+++ b/keyboards/shorty/keymaps/default/keymap.c
@@ -0,0 +1,18 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_A, KC_D,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6,
+ KC_P1, KC_P2, KC_P3
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(MS_WHLD, MS_WHLU) }
+};
+#endif
diff --git a/keyboards/shorty/readme.md b/keyboards/shorty/readme.md
new file mode 100644
index 00000000000..23f023b92ce
--- /dev/null
+++ b/keyboards/shorty/readme.md
@@ -0,0 +1,27 @@
+# Shorty Zero
+
+![Shorty Zero by hawtkeys.com](https://i.imgur.com/hoMHYLW.png)
+
+The Shorty Zero is a 3x3 customizable macropad designed for productivity, gaming, and creative workflows, featuring programmable keys and rotary knobs.
+
+* Keyboard Maintainer: [Hawtkeys](https://github.com/hawtkeys)
+* Hardware Supported: Raspberry Pi Pico, Hawtkeys Shorty Zero PCB
+* Hardware Availability: [Available @ hawtkeys.com](https://hawtkeys.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make shorty:default
+
+Flashing example for this keyboard:
+
+ make shorty: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
\ No newline at end of file
diff --git a/keyboards/takashicompany/klec_01/keyboard.json b/keyboards/takashicompany/klec_01/keyboard.json
new file mode 100644
index 00000000000..36baa8bf60f
--- /dev/null
+++ b/keyboards/takashicompany/klec_01/keyboard.json
@@ -0,0 +1,77 @@
+{
+ "manufacturer": "takashicompany",
+ "keyboard_name": "KLEC-01",
+ "maintainer": "takashicompany",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6"],
+ "rows": ["D4", "C6", "D7", "E6", "B4", "B5"]
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1001",
+ "vid": "0x7463"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [1, 0], "x": 4, "y": 0},
+ {"matrix": [1, 1], "x": 5, "y": 0},
+ {"matrix": [1, 2], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [2, 0], "x": 8, "y": 0},
+ {"matrix": [2, 1], "x": 9, "y": 0},
+ {"matrix": [2, 2], "x": 10, "y": 0},
+ {"matrix": [2, 3], "x": 11, "y": 0, "w": 1.75},
+ {"matrix": [0, 4], "x": 0, "y": 1, "w": 1.25},
+ {"matrix": [0, 5], "x": 1.25, "y": 1},
+ {"matrix": [0, 6], "x": 2.25, "y": 1},
+ {"matrix": [0, 7], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [1, 5], "x": 5.25, "y": 1},
+ {"matrix": [1, 6], "x": 6.25, "y": 1},
+ {"matrix": [1, 7], "x": 7.25, "y": 1},
+ {"matrix": [2, 4], "x": 8.25, "y": 1},
+ {"matrix": [2, 5], "x": 9.25, "y": 1},
+ {"matrix": [2, 6], "x": 10.25, "y": 1},
+ {"matrix": [2, 7], "x": 11.25, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 2},
+ {"matrix": [3, 2], "x": 2.75, "y": 2},
+ {"matrix": [3, 3], "x": 3.75, "y": 2},
+ {"matrix": [4, 0], "x": 4.75, "y": 2},
+ {"matrix": [4, 1], "x": 5.75, "y": 2},
+ {"matrix": [4, 2], "x": 6.75, "y": 2},
+ {"matrix": [4, 3], "x": 7.75, "y": 2},
+ {"matrix": [5, 0], "x": 8.75, "y": 2},
+ {"matrix": [5, 1], "x": 9.75, "y": 2},
+ {"matrix": [5, 2], "x": 10.75, "y": 2},
+ {"matrix": [5, 3], "x": 11.75, "y": 2},
+ {"matrix": [3, 4], "x": 0, "y": 3},
+ {"matrix": [3, 5], "x": 1, "y": 3},
+ {"matrix": [3, 6], "x": 2, "y": 3},
+ {"matrix": [3, 7], "x": 3, "y": 3, "w": 1.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 3, "w": 2},
+ {"matrix": [4, 5], "x": 6.25, "y": 3, "w": 2.25},
+ {"matrix": [5, 4], "x": 8.5, "y": 3, "w": 1.25},
+ {"matrix": [5, 5], "x": 9.75, "y": 3},
+ {"matrix": [5, 6], "x": 10.75, "y": 3},
+ {"matrix": [5, 7], "x": 11.75, "y": 3}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/takashicompany/klec_01/keymaps/default/keymap.c b/keyboards/takashicompany/klec_01/keymaps/default/keymap.c
new file mode 100644
index 00000000000..551c211b73a
--- /dev/null
+++ b/keyboards/takashicompany/klec_01/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, KC_ENT,
+ KC_LSFT, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_UP, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LNG1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3, KC_TRNS,
+ KC_TRNS, LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3), KC_TRNS,
+ KC_TRNS, KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3), KC_TRNS,
+ KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ KC_TRNS, LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS,
+ KC_TRNS, KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, KC_TRNS,
+ KC_TRNS, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [4] = LAYOUT(
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3, KC_TRNS,
+ KC_TRNS, LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [5] = LAYOUT(
+ KC_TRNS, KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
+ KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [6] = LAYOUT(
+ KC_TRNS, KC_ESC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_LCTL, KC_TRNS, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [7] = LAYOUT(
+ KC_TRNS, KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+ KC_TRNS, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [8] = LAYOUT(
+ KC_TRNS, UG_TOGG, UG_NEXT, UG_HUEU, UG_SATU, UG_VALU, KC_NO, KC_NO, KC_NO, DF(0), DF(3), KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/takashicompany/klec_01/readme.md b/keyboards/takashicompany/klec_01/readme.md
new file mode 100644
index 00000000000..e907c7b68a3
--- /dev/null
+++ b/keyboards/takashicompany/klec_01/readme.md
@@ -0,0 +1,29 @@
+# takashicompany/klec_01
+
+![takashicompany/klec_01](https://i.imgur.com/oFZHNFJ.jpeg)
+
+46-key integrated keyboard.
+
+The layout is similar to a conventional keyboard, making it a good introduction to 40% keyboards.
+
+* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
+* Hardware Supported: PCB, Pro Micro
+* Hardware Availability: https://github.com/takashicompany/klec_01
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashicompany/klec_01:default
+
+Flashing example for this keyboard:
+
+ make takashicompany/klec_01: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/takashicompany/klec_02/keyboard.json b/keyboards/takashicompany/klec_02/keyboard.json
new file mode 100644
index 00000000000..045c4ef315c
--- /dev/null
+++ b/keyboards/takashicompany/klec_02/keyboard.json
@@ -0,0 +1,73 @@
+{
+ "manufacturer": "takashicompany",
+ "keyboard_name": "KLEC-02",
+ "maintainer": "takashicompany",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["D4", "C6", "D7", "E6", "B4"],
+ "rows": ["F4", "F5", "F6", "F7"]
+ },
+ "split": {
+ "enabled": true,
+ "serial": {
+ "pin": "D2"
+ }
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1002",
+ "vid": "0x7463"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [4, 0], "x": 6.25, "y": 0},
+ {"matrix": [4, 1], "x": 7.25, "y": 0},
+ {"matrix": [4, 2], "x": 8.25, "y": 0},
+ {"matrix": [4, 3], "x": 9.25, "y": 0},
+ {"matrix": [4, 4], "x": 10.25, "y": 0},
+ {"matrix": [1, 0], "x": 0.25, "y": 1},
+ {"matrix": [1, 1], "x": 1.25, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [5, 0], "x": 6.5, "y": 1},
+ {"matrix": [5, 1], "x": 7.5, "y": 1},
+ {"matrix": [5, 2], "x": 8.5, "y": 1},
+ {"matrix": [5, 3], "x": 9.5, "y": 1},
+ {"matrix": [5, 4], "x": 10.5, "y": 1},
+ {"matrix": [2, 0], "x": 0.5, "y": 2},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [6, 0], "x": 6.75, "y": 2},
+ {"matrix": [6, 1], "x": 7.75, "y": 2},
+ {"matrix": [6, 2], "x": 8.75, "y": 2},
+ {"matrix": [6, 3], "x": 9.75, "y": 2},
+ {"matrix": [6, 4], "x": 10.75, "y": 2},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.25},
+ {"matrix": [3, 4], "x": 5, "y": 3},
+ {"matrix": [7, 0], "x": 6.25, "y": 3},
+ {"matrix": [7, 1], "x": 7.25, "y": 3, "w": 1.25},
+ {"matrix": [7, 2], "x": 8.5, "y": 3}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/takashicompany/klec_02/keymaps/default/keymap.c b/keyboards/takashicompany/klec_02/keymaps/default/keymap.c
new file mode 100644
index 00000000000..0431b8e6b7e
--- /dev/null
+++ b/keyboards/takashicompany/klec_02/keymaps/default/keymap.c
@@ -0,0 +1,70 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LNG1), KC_RGUI
+ ),
+
+ [1] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3,
+ LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3),
+ KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(5, KC_SPC), LT(4, KC_LNG1), KC_RGUI
+ ),
+
+ [4] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3,
+ LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [5] = LAYOUT(
+ KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS,
+ KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [6] = LAYOUT(
+ KC_ESC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO,
+ KC_LCTL, KC_TRNS, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [7] = LAYOUT(
+ KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), MO(9),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [8] = LAYOUT(
+ UG_TOGG, UG_NEXT, UG_HUEU, UG_SATU, UG_VALU, KC_NO, KC_NO, KC_NO, DF(0), DF(3),
+ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/takashicompany/klec_02/readme.md b/keyboards/takashicompany/klec_02/readme.md
new file mode 100644
index 00000000000..0b492a5e18a
--- /dev/null
+++ b/keyboards/takashicompany/klec_02/readme.md
@@ -0,0 +1,28 @@
+# KLEC-02
+
+![takashicompany/klec_02](https://i.imgur.com/1w6agBI.jpeg)
+
+The KLEC-02 is a 36-key segmented keyboard.
+The PCB can be fitted with key switch sockets, allowing easy replacement of key switches.
+
+* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
+* Hardware Supported: PCB, Pro Micro
+* Hardware Availability: https://github.com/takashicompany/klec_02
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashicompany/klec_02:default
+
+Flashing example for this keyboard:
+
+ make takashicompany/klec_02: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/whitefacemountain/ampersand/keyboard.json b/keyboards/whitefacemountain/ampersand/keyboard.json
index 04840d05bcd..b0929e2d3c9 100644
--- a/keyboards/whitefacemountain/ampersand/keyboard.json
+++ b/keyboards/whitefacemountain/ampersand/keyboard.json
@@ -64,13 +64,13 @@
{"label": ".", "matrix": [2, 9], "x": 9.75, "y": 2},
{"label": "/", "matrix": [2, 10], "x": 10.75, "y": 2},
{"label": "Shift", "matrix": [2, 11], "x": 11.75, "y": 2, "w": 1.75},
- {"label": "Ctrl", "matrix": [3, 0], "x": 0, "y": 3, "w": 1},
- {"label": "LAlt", "matrix": [3, 1], "x": 1.75, "y": 3, "w": 1},
- {"label": "LGui", "matrix": [3, 2], "x": 2.75, "y": 3, "w": 1},
+ {"label": "Ctrl", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "LAlt", "matrix": [3, 1], "x": 1.75, "y": 3},
+ {"label": "LGui", "matrix": [3, 2], "x": 2.75, "y": 3},
{"label": "Space", "matrix": [3, 5], "x": 3.75, "y": 3, "w": 6},
- {"label": "RGui", "matrix": [3, 8], "x": 9.75, "y": 3, "w": 1},
- {"label": "RAlt", "matrix": [3, 9], "x": 10.75, "y": 3, "w": 1},
- {"label": "RCtrl", "matrix": [3, 11], "x": 12.5, "y": 3, "w": 1}
+ {"label": "RGui", "matrix": [3, 8], "x": 9.75, "y": 3},
+ {"label": "RAlt", "matrix": [3, 9], "x": 10.75, "y": 3},
+ {"label": "RCtrl", "matrix": [3, 11], "x": 12.5, "y": 3}
]
},
"LAYOUT_split_bars": {
@@ -113,14 +113,14 @@
{"label": ".", "matrix": [2, 9], "x": 9.75, "y": 2},
{"label": "/", "matrix": [2, 10], "x": 10.75, "y": 2},
{"label": "Shift", "matrix": [2, 11], "x": 11.75, "y": 2, "w": 1.75},
- {"label": "Ctrl", "matrix": [3, 0], "x": 0, "y": 3, "w": 1},
+ {"label": "Ctrl", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "LAlt", "matrix": [3, 1], "x": 1.75, "y": 3, "w": 1.5},
- {"label": "LGui", "matrix": [3, 2], "x": 3.25, "y": 3, "w": 1},
+ {"label": "LGui", "matrix": [3, 2], "x": 3.25, "y": 3},
{"label": "Space", "matrix": [3, 3], "x": 4.25, "y": 3, "w": 2.25},
{"label": "Space", "matrix": [3, 7], "x": 6.5, "y": 3, "w": 2.75},
- {"label": "RGui", "matrix": [3, 8], "x": 9.25, "y": 3, "w": 1},
+ {"label": "RGui", "matrix": [3, 8], "x": 9.25, "y": 3},
{"label": "RAlt", "matrix": [3, 9], "x": 10.25, "y": 3, "w": 1.5},
- {"label": "RCtrl", "matrix": [3, 11], "x": 12.5, "y": 3, "w": 1}
+ {"label": "RCtrl", "matrix": [3, 11], "x": 12.5, "y": 3}
]
}
}
diff --git a/keyboards/windstudio/wind_x/r1/keyboard.json b/keyboards/windstudio/wind_x/r1/keyboard.json
new file mode 100644
index 00000000000..1b5f34fe3e8
--- /dev/null
+++ b/keyboards/windstudio/wind_x/r1/keyboard.json
@@ -0,0 +1,205 @@
+{
+ "manufacturer": "Windstudio",
+ "keyboard_name": "Wind X R1",
+ "maintainer": "chrisgve",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["C7", "C6", "B6", "E6", "F6", "D6", "D7", "B4", "B5", "F7", "B7", "F4", "F5", "D4", "B0", "B1", "B2", "B3"],
+ "rows": ["F0", "F1", "D2", "D1", "D0"]
+ },
+ "processor": "atmega32u4",
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6801",
+ "vid": "0x6F75"
+ },
+ "layout_aliases": {
+ "LAYOUT_tsangan": "LAYOUT_7u_space_bar_split_bs"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "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": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"label": "Del", "matrix": [4, 11], "x": 16, "y": 0},
+ {"label": "NumLock", "matrix": [0, 14], "x": 18, "y": 0},
+ {"label": "KP/", "matrix": [0, 15], "x": 19, "y": 0},
+ {"label": "KP*", "matrix": [0, 16], "x": 20, "y": 0},
+ {"label": "KP-", "matrix": [0, 17], "x": 21, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"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": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "PgUp", "matrix": [4, 12], "x": 16, "y": 1},
+ {"label": "KP7", "matrix": [1, 14], "x": 18, "y": 1},
+ {"label": "KP8", "matrix": [1, 15], "x": 19, "y": 1},
+ {"label": "KP9", "matrix": [1, 16], "x": 20, "y": 1},
+ {"label": "KP+", "matrix": [1, 17], "x": 21, "y": 1},
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"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": "Return", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "PgDn", "matrix": [4, 13], "x": 16, "y": 2},
+ {"label": "KP4", "matrix": [2, 14], "x": 18, "y": 2},
+ {"label": "KP5", "matrix": [2, 15], "x": 19, "y": 2},
+ {"label": "KP6", "matrix": [2, 16], "x": 20, "y": 2},
+ {"label": "KP+", "matrix": [2, 17], "x": 21, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Up", "matrix": [3, 13], "x": 13, "y": 3},
+ {"label": "KP1", "matrix": [3, 14], "x": 18, "y": 3},
+ {"label": "KP2", "matrix": [3, 15], "x": 19, "y": 3},
+ {"label": "KP3", "matrix": [3, 16], "x": 20, "y": 3},
+ {"label": "Enter", "matrix": [3, 17], "x": 21, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 5], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "GUI", "matrix": [4, 6], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 7], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Left", "matrix": [4, 8], "x": 14, "y": 4},
+ {"label": "Down", "matrix": [4, 9], "x": 15, "y": 4},
+ {"label": "Right", "matrix": [4, 10], "x": 16, "y": 4},
+ {"label": "KP0", "matrix": [4, 16], "x": 18, "y": 4},
+ {"label": "KP.", "matrix": [4, 17], "x": 19, "y": 4}
+ ]
+ },
+ "LAYOUT_7u_space_bar_split_bs": {
+ "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": "\\", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "`", "matrix": [1, 13], "x": 14, "y": 0},
+ {"label": "PgUp", "matrix": [4, 11], "x": 16, "y": 0},
+ {"label": "NumLock", "matrix": [0, 14], "x": 18, "y": 0},
+ {"label": "KP/", "matrix": [0, 15], "x": 19, "y": 0},
+ {"label": "KP*", "matrix": [0, 16], "x": 20, "y": 0},
+ {"label": "KP-", "matrix": [0, 17], "x": 21, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"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": "Backspace", "matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "PgDn", "matrix": [4, 12], "x": 16, "y": 1},
+ {"label": "KP7", "matrix": [1, 14], "x": 18, "y": 1},
+ {"label": "KP8", "matrix": [1, 15], "x": 19, "y": 1},
+ {"label": "KP9", "matrix": [1, 16], "x": 20, "y": 1},
+ {"label": "KP+", "matrix": [1, 17], "x": 21, "y": 1},
+ {"label": "Ctrl", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"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": "Return", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "End", "matrix": [4, 13], "x": 16, "y": 2},
+ {"label": "KP4", "matrix": [2, 14], "x": 18, "y": 2},
+ {"label": "KP5", "matrix": [2, 15], "x": 19, "y": 2},
+ {"label": "KP6", "matrix": [2, 16], "x": 20, "y": 2},
+ {"label": "KP+", "matrix": [2, 17], "x": 21, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Up", "matrix": [3, 13], "x": 13, "y": 3},
+ {"label": "KP1", "matrix": [3, 14], "x": 18, "y": 3},
+ {"label": "KP2", "matrix": [3, 15], "x": 19, "y": 3},
+ {"label": "KP3", "matrix": [3, 16], "x": 20, "y": 3},
+ {"label": "Enter", "matrix": [3, 17], "x": 21, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 5], "x": 4, "y": 4, "w": 7},
+ {"label": "Ctrl", "matrix": [4, 7], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Left", "matrix": [4, 8], "x": 13, "y": 4},
+ {"label": "Down", "matrix": [4, 9], "x": 14, "y": 4},
+ {"label": "Right", "matrix": [4, 10], "x": 15, "y": 4},
+ {"label": "KP0", "matrix": [4, 16], "x": 18, "y": 4},
+ {"label": "KP.", "matrix": [4, 17], "x": 19, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/windstudio/wind_x/r1/keymaps/default/keymap.c b/keyboards/windstudio/wind_x/r1/keymaps/default/keymap.c
new file mode 100644
index 00000000000..dd3134e2a0f
--- /dev/null
+++ b/keyboards/windstudio/wind_x/r1/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2024 chrisgve
+ *
+ * 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
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
+
+// clang-format on
diff --git a/keyboards/windstudio/wind_x/r1/keymaps/default/readme.md b/keyboards/windstudio/wind_x/r1/keymaps/default/readme.md
new file mode 100644
index 00000000000..2fa0952a830
--- /dev/null
+++ b/keyboards/windstudio/wind_x/r1/keymaps/default/readme.md
@@ -0,0 +1,6 @@
+# Default Wind X R1 Layout
+
+This is the default layout that comes flashed on every Wind X R1. For the most
+part it's a straightforward and easy to follow layout. The only unusual key is
+the key in the upper left, which sends Escape normally, but Grave when any of
+the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/windstudio/wind_x/r1/readme.md b/keyboards/windstudio/wind_x/r1/readme.md
new file mode 100644
index 00000000000..c501951e422
--- /dev/null
+++ b/keyboards/windstudio/wind_x/r1/readme.md
@@ -0,0 +1,28 @@
+# WindX R1 by Windstudio
+
+![WindX R1](https://i.imgur.com/FEVczwG.jpg)
+_Compact, yet feature full working or gaming keyboard_
+
+A large layout keyboard without the function keys. [More info on geekhack.org](https://geekhack.org/index.php?topic=114767.0)
+
+- Keyboard Maintainer: [Christian C. Berclaz](https://github.com/chrisgve)
+- Hardware Supported: Wind X R1 w/ ATmega32U4 microcontroller
+- Hardware Availability: [windstudio.store](https://windstudio.store/collections/wind-x)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make windstudio/wind_x/r1:default
+
+Flashing example for this keyboard:
+
+ make windstudio/wind_x/r1:default:flash
+
+See the [build environment setup](getting_started_build_tools) and the [make instructions](getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](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/zeix/singa/kohaku/keyboard.json b/keyboards/zeix/singa/kohaku/keyboard.json
index f1ce31fe64d..542bad9c6fc 100644
--- a/keyboards/zeix/singa/kohaku/keyboard.json
+++ b/keyboards/zeix/singa/kohaku/keyboard.json
@@ -326,7 +326,7 @@
{"matrix": [7, 6], "x": 14, "y": 3},
{"matrix": [7, 7], "x": 15, "y": 3},
{"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
- {"matrix": [9, 0], "x": 1.5, "y": 4, "w": 1},
+ {"matrix": [9, 0], "x": 1.5, "y": 4},
{"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [8, 3], "x": 4, "y": 4, "w": 7},
{"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
@@ -397,7 +397,7 @@
{"matrix": [7, 6], "x": 14, "y": 3},
{"matrix": [7, 7], "x": 15, "y": 3},
{"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
- {"matrix": [9, 0], "x": 1.5, "y": 4, "w": 1},
+ {"matrix": [9, 0], "x": 1.5, "y": 4},
{"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [8, 3], "x": 4, "y": 4, "w": 7},
{"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
@@ -613,7 +613,7 @@
{"matrix": [7, 6], "x": 14, "y": 3},
{"matrix": [7, 7], "x": 15, "y": 3},
{"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
- {"matrix": [9, 0], "x": 1.5, "y": 4, "w": 1},
+ {"matrix": [9, 0], "x": 1.5, "y": 4},
{"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [8, 3], "x": 4, "y": 4, "w": 7},
{"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
@@ -685,7 +685,7 @@
{"matrix": [7, 6], "x": 14, "y": 3},
{"matrix": [7, 7], "x": 15, "y": 3},
{"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
- {"matrix": [9, 0], "x": 1.5, "y": 4, "w": 1},
+ {"matrix": [9, 0], "x": 1.5, "y": 4},
{"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [8, 3], "x": 4, "y": 4, "w": 7},
{"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
diff --git a/keyboards/zykrah/fuyu_hs/config.h b/keyboards/zykrah/fuyu_hs/config.h
new file mode 100644
index 00000000000..767cc3f69ac
--- /dev/null
+++ b/keyboards/zykrah/fuyu_hs/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2024 Zykrah
+
+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 RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
diff --git a/keyboards/zykrah/fuyu_hs/keyboard.json b/keyboards/zykrah/fuyu_hs/keyboard.json
new file mode 100644
index 00000000000..de5530b8dec
--- /dev/null
+++ b/keyboards/zykrah/fuyu_hs/keyboard.json
@@ -0,0 +1,404 @@
+{
+ "keyboard_name": "Fuyu Hotswap",
+ "maintainer": "zykrah",
+ "manufacturer": "Zykrah",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x4648",
+ "vid": "0x7A79"
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 6
+ },
+ "matrix_pins": {
+ "rows": ["GP13", "GP12", "GP11", "GP10", "GP15", "GP14"],
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18", "GP17", "GP16", "GP2", "GP1", "GP0"]
+ },
+ "rgb_matrix": {
+ "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,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": 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_rain": true,
+ "pixel_flow": true,
+ "pixel_fractal": true
+ },
+ "default": {
+ "val": 150
+ },
+ "driver": "ws2812",
+ "max_brightness": 200,
+ "layout": [
+ {"x": 112, "y": 32, "flags": 8},
+ {"x": 138, "y": 17, "flags": 8},
+ {"x": 112, "y": 2, "flags": 8},
+ {"x": 86, "y": 17, "flags": 8},
+ {"x": 86, "y": 47, "flags": 8},
+ {"x": 112, "y": 62, "flags": 8},
+ {"x": 138, "y": 47, "flags": 8},
+ {"x": 0, "y": 0, "flags": 2},
+ {"x": 16, "y": 0, "flags": 2},
+ {"x": 32, "y": 0, "flags": 2},
+ {"x": 48, "y": 0, "flags": 2},
+ {"x": 64, "y": 0, "flags": 2},
+ {"x": 80, "y": 0, "flags": 2},
+ {"x": 96, "y": 0, "flags": 2},
+ {"x": 112, "y": 0, "flags": 2},
+ {"x": 128, "y": 0, "flags": 2},
+ {"x": 144, "y": 0, "flags": 2},
+ {"x": 160, "y": 0, "flags": 2},
+ {"x": 176, "y": 0, "flags": 2},
+ {"x": 192, "y": 0, "flags": 2},
+ {"x": 208, "y": 0, "flags": 2},
+ {"x": 208, "y": 16, "flags": 2},
+ {"x": 208, "y": 32, "flags": 2},
+ {"x": 208, "y": 48, "flags": 2},
+ {"x": 208, "y": 64, "flags": 2},
+ {"x": 192, "y": 64, "flags": 2},
+ {"x": 176, "y": 64, "flags": 2},
+ {"x": 160, "y": 64, "flags": 2},
+ {"x": 144, "y": 64, "flags": 2},
+ {"x": 128, "y": 64, "flags": 2},
+ {"x": 112, "y": 64, "flags": 2},
+ {"x": 96, "y": 64, "flags": 2},
+ {"x": 80, "y": 64, "flags": 2},
+ {"x": 64, "y": 64, "flags": 2},
+ {"x": 48, "y": 64, "flags": 2},
+ {"x": 32, "y": 64, "flags": 2},
+ {"x": 16, "y": 64, "flags": 2},
+ {"x": 0, "y": 64, "flags": 2},
+ {"x": 0, "y": 48, "flags": 2},
+ {"x": 0, "y": 32, "flags": 2},
+ {"x": 0, "y": 16, "flags": 2}
+ ]
+ },
+ "url": "https://github.com/zykrah/fuyu",
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP3"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [3, 13], "x": 14, "y": 1.25},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [3, 14], "x": 15.25, "y": 3.25},
+ {"matrix": [3, 15], "x": 16.25, "y": 3.25},
+ {"matrix": [3, 16], "x": 17.25, "y": 3.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.25},
+ {"matrix": [4, 14], "x": 15.25, "y": 4.25},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [4, 16], "x": 17.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_numpad": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [3, 14], "x": 15.25, "y": 3.25},
+ {"matrix": [3, 15], "x": 16.25, "y": 3.25},
+ {"matrix": [3, 16], "x": 17.25, "y": 3.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 14], "x": 15.25, "y": 4.25},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [4, 16], "x": 17.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_numpad": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [3, 14], "x": 15.25, "y": 3.25},
+ {"matrix": [3, 15], "x": 16.25, "y": 3.25},
+ {"matrix": [3, 16], "x": 17.25, "y": 3.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 14], "x": 15.25, "y": 4.25},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [4, 16], "x": 17.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/zykrah/fuyu_hs/keymaps/default/keymap.c b/keyboards/zykrah/fuyu_hs/keymaps/default/keymap.c
new file mode 100644
index 00000000000..e04c98a9fbb
--- /dev/null
+++ b/keyboards/zykrah/fuyu_hs/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/*
+Copyright 2024 Zykrah
+
+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_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_BSPC, 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_TRNS, KC_TRNS, KC_TRNS,
+ 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_TRNS, KC_TRNS, KC_UP, KC_TRNS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+
+ [1] = LAYOUT_all(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/zykrah/fuyu_hs/readme.md b/keyboards/zykrah/fuyu_hs/readme.md
new file mode 100644
index 00000000000..41c5cded51d
--- /dev/null
+++ b/keyboards/zykrah/fuyu_hs/readme.md
@@ -0,0 +1,27 @@
+# FUYU HOTSWAP
+
+![FUYU HS 7U](https://i.imgur.com/8zjDNJT.jpg)
+
+An F12 TKL Hotswappable H87-Compat Type-C PCB for the Geon F1-8K
+
+* Keyboard Maintainer: [Zykrah](https://github.com/zykrah)
+* Hardware Supported: Fuyu HS 7u rev1, Fuyu HS 6.25u rev1
+* Hardware Availability: [Github Repo](https://github.com/zykrah/fuyu), [GEON Store](https://geon.works/products/fuyu-pcb-for-f1-8k), [Cafege](https://cafege.com.au/products/fuyu-8k-pcb)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make zykrah/fuyu_hs:default
+
+Flashing example for this keyboard:
+
+ make zykrah/fuyu_hs: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 short the `RST` and `GND` pads on the SWD header twice, or short the `BOOT` header and plug in keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/lib/python/qmk/cli/find.py b/lib/python/qmk/cli/find.py
index bfed91e22cd..7d8b1b066c9 100644
--- a/lib/python/qmk/cli/find.py
+++ b/lib/python/qmk/cli/find.py
@@ -1,5 +1,6 @@
"""Command to search through all keyboards and keymaps for a given search criteria.
"""
+import os
from milc import cli
from qmk.search import filter_help, search_keymap_targets
from qmk.util import maybe_exit_config
@@ -20,6 +21,7 @@ from qmk.util import maybe_exit_config
def find(cli):
"""Search through all keyboards and keymaps for a given search criteria.
"""
+ os.environ.setdefault('SKIP_SCHEMA_VALIDATION', '1')
maybe_exit_config(should_exit=False, should_reraise=True)
targets = search_keymap_targets([('all', cli.config.find.keymap)], cli.args.filter)
diff --git a/lib/python/qmk/cli/mass_compile.py b/lib/python/qmk/cli/mass_compile.py
index cf9be0fd1e2..4c4669d4517 100755
--- a/lib/python/qmk/cli/mass_compile.py
+++ b/lib/python/qmk/cli/mass_compile.py
@@ -20,6 +20,8 @@ def mass_compile_targets(targets: List[BuildTarget], clean: bool, dry_run: bool,
if len(targets) == 0:
return
+ os.environ.setdefault('SKIP_SCHEMA_VALIDATION', '1')
+
make_cmd = find_make()
builddir = Path(QMK_FIRMWARE) / '.build'
makefile = builddir / 'parallel_kb_builds.mk'
diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py
index 72b19a9fec6..82082f5cf0d 100644
--- a/lib/python/qmk/info.py
+++ b/lib/python/qmk/info.py
@@ -1,6 +1,7 @@
"""Functions that help us generate and use info.json files.
"""
import re
+import os
from pathlib import Path
import jsonschema
from dotty_dict import dotty
@@ -14,7 +15,7 @@ from qmk.keyboard import config_h, rules_mk
from qmk.commands import parse_configurator_json
from qmk.makefile import parse_rules_mk_file
from qmk.math import compute
-from qmk.util import maybe_exit
+from qmk.util import maybe_exit, truthy
true_values = ['1', 'on', 'yes']
false_values = ['0', 'off', 'no']
@@ -262,7 +263,9 @@ def info_json(keyboard, force_layout=None):
info_data["community_layouts"] = [force_layout]
# Validate
- _validate(keyboard, info_data)
+ # Skip processing if necessary
+ if not truthy(os.environ.get('SKIP_SCHEMA_VALIDATION'), False):
+ _validate(keyboard, info_data)
# Check that the reported matrix size is consistent with the actual matrix size
_check_matrix(info_data)
@@ -944,13 +947,14 @@ def merge_info_jsons(keyboard, info_data):
_log_error(info_data, "Invalid file %s, root object should be a dictionary." % (str(info_file),))
continue
- try:
- validate(new_info_data, 'qmk.keyboard.v1')
- except jsonschema.ValidationError as e:
- json_path = '.'.join([str(p) for p in e.absolute_path])
- cli.log.error('Not including data from file: %s', info_file)
- cli.log.error('\t%s: %s', json_path, e.message)
- continue
+ if not truthy(os.environ.get('SKIP_SCHEMA_VALIDATION'), False):
+ try:
+ validate(new_info_data, 'qmk.keyboard.v1')
+ except jsonschema.ValidationError as e:
+ json_path = '.'.join([str(p) for p in e.absolute_path])
+ cli.log.error('Not including data from file: %s', info_file)
+ cli.log.error('\t%s: %s', json_path, e.message)
+ continue
# Merge layout data in
if 'layout_aliases' in new_info_data:
diff --git a/lib/python/qmk/util.py b/lib/python/qmk/util.py
index b73fab89d12..8f99410e1de 100644
--- a/lib/python/qmk/util.py
+++ b/lib/python/qmk/util.py
@@ -27,6 +27,27 @@ def maybe_exit_config(should_exit: bool = True, should_reraise: bool = False):
maybe_exit_reraise = should_reraise
+def truthy(value, value_if_unknown=False):
+ """Returns True if the value is truthy, False otherwise.
+
+ Deals with:
+ True: 1, true, t, yes, y, on
+ False: 0, false, f, no, n, off
+ """
+ if value in {False, True}:
+ return bool(value)
+
+ test_value = str(value).strip().lower()
+
+ if test_value in {"1", "true", "t", "yes", "y", "on"}:
+ return True
+
+ if test_value in {"0", "false", "f", "no", "n", "off"}:
+ return False
+
+ return value_if_unknown
+
+
@contextlib.contextmanager
def parallelize():
"""Returns a function that can be used in place of a map() call.