diff --git a/builddefs/docsgen/.vitepress/config.mts b/builddefs/docsgen/.vitepress/config.mts
index 54ecae2e86bd..5beca70634e3 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 64593cbad12c..95cde67f0cdd 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 82110537a9d3..c1061cdf8236 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 6e8172ec0288..48faa60362b7 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/handwired/tenstad/keyboard.json b/keyboards/handwired/tenstad/keyboard.json
new file mode 100644
index 000000000000..1220d3b107f6
--- /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 000000000000..4882e3073211
--- /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 000000000000..8ed975133031
--- /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 000000000000..15f3e27ac18c
--- /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 000000000000..28762b9a17c0
--- /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 000000000000..35cca7ec06f4
--- /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 000000000000..b5ce6407d712
--- /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 000000000000..638db198227e
--- /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 000000000000..333b33bc0b40
--- /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 000000000000..04098cb522dd
--- /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 000000000000..d6f5ce9cd835
--- /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 000000000000..c4762d577d6e
--- /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 000000000000..40ef5c436bfc
--- /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/shorty/keyboard.json b/keyboards/shorty/keyboard.json
new file mode 100644
index 000000000000..158648badd42
--- /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 000000000000..ef4bbba7ef01
--- /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 000000000000..23f023b92ced
--- /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/whitefacemountain/ampersand/keyboard.json b/keyboards/whitefacemountain/ampersand/keyboard.json
index 04840d05bcd9..b0929e2d3c9e 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 000000000000..1b5f34fe3e80
--- /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 000000000000..dd3134e2a0f6
--- /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 000000000000..2fa0952a8302
--- /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 000000000000..c501951e4222
--- /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 f1ce31fe64d7..542bad9c6fc1 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 000000000000..767cc3f69ac2
--- /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 000000000000..de5530b8dec0
--- /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 000000000000..e04c98a9fbbd
--- /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 000000000000..41c5cded51d7
--- /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 bfed91e22cdb..7d8b1b066c91 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 @@
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 cf9be0fd1e29..4c4669d45178 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 72b19a9fec67..82082f5cf0d8 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.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 b73fab89d128..8f99410e1de8 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.