aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/amptrics/0422/0422.c67
-rw-r--r--keyboards/amptrics/0422/config.h5
-rw-r--r--keyboards/amptrics/0422/keyboard.json40
-rw-r--r--keyboards/amptrics/0422/keymaps/default/keymap.c58
-rw-r--r--keyboards/amptrics/0422/readme.md25
-rw-r--r--keyboards/cipulot/ok_1/config.h25
-rw-r--r--keyboards/cipulot/ok_1/halconf.h22
-rw-r--r--keyboards/cipulot/ok_1/keyboard.json255
-rw-r--r--keyboards/cipulot/ok_1/keymaps/default/keymap.c90
-rw-r--r--keyboards/cipulot/ok_1/mcuconf.h22
-rw-r--r--keyboards/cipulot/ok_1/readme.md25
-rw-r--r--keyboards/cipulot/ok_1/rules.mk2
-rw-r--r--keyboards/handwired/hen_des/epssp75/keyboard.json107
-rw-r--r--keyboards/handwired/hen_des/epssp75/keymaps/default/keymap.c21
-rw-r--r--keyboards/handwired/hen_des/epssp75/readme.md18
-rw-r--r--keyboards/handwired/lumawing/keyboard.json94
-rw-r--r--keyboards/handwired/lumawing/keymaps/default/keymap.c70
-rw-r--r--keyboards/handwired/lumawing/readme.md15
-rw-r--r--keyboards/jcpm2/config.h20
-rw-r--r--keyboards/jcpm2/jcpm2.c46
-rw-r--r--keyboards/jcpm2/keyboard.json79
-rw-r--r--keyboards/jcpm2/keymaps/default/keymap.c132
-rw-r--r--keyboards/jcpm2/keymaps/default/rules.mk1
-rw-r--r--keyboards/jcpm2/readme.md27
-rw-r--r--keyboards/mzmkb/slimdash/info.json10
-rw-r--r--keyboards/mzmkb/slimdash/readme.md41
-rw-r--r--keyboards/mzmkb/slimdash/rev1/config.h28
-rw-r--r--keyboards/mzmkb/slimdash/rev1/keyboard.json239
-rw-r--r--keyboards/mzmkb/slimdash/rev1/keymaps/default/keymap.c126
-rw-r--r--keyboards/splitkb/halcyon/elora/info.json80
-rw-r--r--keyboards/splitkb/halcyon/elora/keymaps/default/keymap.c241
-rw-r--r--keyboards/splitkb/halcyon/elora/keymaps/default/readme.md262
-rw-r--r--keyboards/splitkb/halcyon/elora/keymaps/default/rules.mk1
-rw-r--r--keyboards/splitkb/halcyon/elora/readme.md31
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/config.h32
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/halconf.h14
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/keyboard.json177
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/mcuconf.h14
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/rev2.c28
-rw-r--r--keyboards/umbra/hotswap/config.h20
-rw-r--r--keyboards/umbra/hotswap/keyboard.json250
-rw-r--r--keyboards/umbra/hotswap/keymaps/default/keymap.c40
-rw-r--r--keyboards/umbra/hotswap/keymaps/default/rules.mk1
-rw-r--r--keyboards/umbra/hotswap/matrix_diagram.md24
-rw-r--r--keyboards/umbra/hotswap/readme.md26
-rw-r--r--keyboards/umbra/hotswap/rules.mk2
-rw-r--r--keyboards/umbra/solder/config.h20
-rw-r--r--keyboards/umbra/solder/keyboard.json1235
-rw-r--r--keyboards/umbra/solder/keymaps/default/keymap.c40
-rw-r--r--keyboards/umbra/solder/keymaps/default/rules.mk1
-rw-r--r--keyboards/umbra/solder/matrix_diagram.md37
-rw-r--r--keyboards/umbra/solder/readme.md26
-rw-r--r--keyboards/umbra/solder/rules.mk2
-rw-r--r--keyboards/umbra/solder/solder.c35
-rw-r--r--keyboards/umbra/solder/solder.h22
55 files changed, 4371 insertions, 0 deletions
diff --git a/keyboards/amptrics/0422/0422.c b/keyboards/amptrics/0422/0422.c
new file mode 100644
index 0000000000..034151b5b8
--- /dev/null
+++ b/keyboards/amptrics/0422/0422.c
@@ -0,0 +1,67 @@
+/* Copyright 2024 Vinod Chowl (@vchowl)
+ *
+ * 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.0 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+#define LED_LAYER_0 B3
+#define LED_LAYER_1 B4
+#define LED_LAYER_2 B5
+#define LED_LAYER_3 B6
+
+#define LED_PINS_COUNT 4
+
+pin_t pins[LED_PINS_COUNT] = {LED_LAYER_0, LED_LAYER_1, LED_LAYER_2, LED_LAYER_3};
+
+
+// Function to turn on all LEDs
+void turn_on_all_leds(void) {
+ for (int i = 0; i < LED_PINS_COUNT; i++) {
+ gpio_write_pin_high(pins[i]); // Turn on LED
+ }
+}
+
+// Function to turn off all LEDs
+void turn_off_all_leds(void) {
+ for (int i = 0; i < LED_PINS_COUNT; i++) {
+ gpio_write_pin_low(pins[i]); // Turn off LED
+ }
+}
+
+void update_leds_for_layer(uint8_t layer) {
+ turn_off_all_leds();
+ gpio_write_pin_high(pins[layer]);
+}
+
+void keyboard_post_init_kb(void) {
+ for (int i = 0; i < LED_PINS_COUNT; i++) {
+ gpio_set_pin_output(pins[i]);
+ gpio_write_pin_low(pins[i]);
+ }
+
+ // Blink all LEDs
+ turn_on_all_leds();
+ wait_ms(500); // Keep LEDs on for 500ms
+ turn_off_all_leds();
+
+ update_leds_for_layer(0); // Update LEDs to indicate the default layer
+ keyboard_post_init_user();
+}
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+ uint8_t layer = get_highest_layer(state);
+ update_leds_for_layer(layer);
+ return layer_state_set_user(state);
+}
diff --git a/keyboards/amptrics/0422/config.h b/keyboards/amptrics/0422/config.h
new file mode 100644
index 0000000000..e9c1eed8b9
--- /dev/null
+++ b/keyboards/amptrics/0422/config.h
@@ -0,0 +1,5 @@
+// Copyright 2025 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define DYNAMIC_KEYMAP_MACRO_COUNT 36
diff --git a/keyboards/amptrics/0422/keyboard.json b/keyboards/amptrics/0422/keyboard.json
new file mode 100644
index 0000000000..669e355264
--- /dev/null
+++ b/keyboards/amptrics/0422/keyboard.json
@@ -0,0 +1,40 @@
+{
+ "manufacturer": "Amptrics Technologies",
+ "keyboard_name": "Amptrics 0422",
+ "maintainer": "vchowl",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "ROW2COL",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["C8", "C7", "C6"],
+ "rows": ["A14", "A13", "A10", "A9"]
+ },
+ "processor": "STM32F072",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x01A6",
+ "vid": "0x616D"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "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},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/amptrics/0422/keymaps/default/keymap.c b/keyboards/amptrics/0422/keymaps/default/keymap.c
new file mode 100644
index 0000000000..ef36a65835
--- /dev/null
+++ b/keyboards/amptrics/0422/keymaps/default/keymap.c
@@ -0,0 +1,58 @@
+/* Copyright 2024 Vinod Chowl (@vchowl)
+ *
+ * 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.0 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐
+ * │Tog│
+ * ├───┼───┬───┐
+ * │ 7 │ 8 │ 9 │
+ * ├───┼───┼───┤
+ * │ 4 │ 5 │ 6 │
+ * ├───┼───┼───┤
+ * │ 1 │ 2 │ 3 │
+ * └───┴───┴───┘
+ */
+ [0] = LAYOUT(
+ TO(1),
+ KC_7, KC_8, KC_9,
+ KC_4, KC_5, KC_6,
+ KC_1, KC_2, KC_3
+ ),
+
+ [1] = LAYOUT(
+ TO(2),
+ KC_A, KC_B, KC_C,
+ KC_D, KC_E, KC_F,
+ KC_G, KC_H, KC_I
+ ),
+
+ [2] = LAYOUT(
+ TO(3),
+ KC_J, KC_K, KC_L,
+ KC_M, KC_N, KC_O,
+ KC_P, KC_Q, KC_R
+ ),
+
+ [3] = LAYOUT(
+ TO(0),
+ KC_S, KC_T, KC_U,
+ KC_V, KC_W, KC_X,
+ KC_Y, KC_Z, KC_ENT
+ )
+};
diff --git a/keyboards/amptrics/0422/readme.md b/keyboards/amptrics/0422/readme.md
new file mode 100644
index 0000000000..7d900f9b58
--- /dev/null
+++ b/keyboards/amptrics/0422/readme.md
@@ -0,0 +1,25 @@
+# Amptrics 0422 Programmable Keypad
+
+![magtray4x3](https://i.imgur.com/G5QMlpn_d.jpeg)
+
+* Keyboard Maintainer: [vchowl](https://github.com/vchowl)
+* Hardware Supported: STM32F072RBT6
+* Hardware Availability: Not yet available.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make amptrics/0422:default
+
+Flashing example for this keyboard:
+
+ make amptrics/0422: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/cipulot/ok_1/config.h b/keyboards/cipulot/ok_1/config.h
new file mode 100644
index 0000000000..64700a1aff
--- /dev/null
+++ b/keyboards/cipulot/ok_1/config.h
@@ -0,0 +1,25 @@
+/* Copyright 2024 Cipulot
+ *
+ * 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// PWM driver with direct memory access (DMA) support
+#define WS2812_PWM_COMPLEMENTARY_OUTPUT
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 1
+#define WS2812_PWM_PAL_MODE 2
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM5
+#define WS2812_DMA_CHANNEL 6
diff --git a/keyboards/cipulot/ok_1/halconf.h b/keyboards/cipulot/ok_1/halconf.h
new file mode 100644
index 0000000000..33477f45bd
--- /dev/null
+++ b/keyboards/cipulot/ok_1/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2024 Cipulot
+ *
+ * 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define HAL_USE_PAL TRUE
+#define HAL_USE_PWM TRUE
+
+#include_next <halconf.h>
diff --git a/keyboards/cipulot/ok_1/keyboard.json b/keyboards/cipulot/ok_1/keyboard.json
new file mode 100644
index 0000000000..2457f22fd8
--- /dev/null
+++ b/keyboards/cipulot/ok_1/keyboard.json
@@ -0,0 +1,255 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "OK-1",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["B10", "B2", "B1", "B0", "A7", "A6", "A5", "A1", "A0", "F1", "F0", "C15", "A4", "A3"],
+ "rows": ["B11", "A2", "B9", "B8", "B7", "B6"]
+ },
+ "processor": "STM32F072",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "fractal": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "default": {
+ "animation": "rainbow_moving_chevron"
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 13], "x": 205, "y": 0, "flags": 1},
+ {"matrix": [0, 12], "x": 187, "y": 0, "flags": 4},
+ {"matrix": [0, 11], "x": 172, "y": 0, "flags": 4},
+ {"matrix": [0, 10], "x": 157, "y": 0, "flags": 4},
+ {"matrix": [0, 9], "x": 142, "y": 0, "flags": 4},
+ {"matrix": [0, 8], "x": 127, "y": 0, "flags": 4},
+ {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4},
+ {"matrix": [0, 6], "x": 97, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 82, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 67, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 52, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 37, "y": 0, "flags": 4},
+ {"matrix": [0, 1], "x": 22, "y": 0, "flags": 4},
+ {"matrix": [0, 0], "x": 4, "y": 0, "flags": 1},
+ {"matrix": [1, 0], "x": 0, "y": 13, "flags": 4},
+ {"matrix": [1, 1], "x": 15, "y": 13, "flags": 4},
+ {"matrix": [1, 2], "x": 30, "y": 13, "flags": 4},
+ {"matrix": [1, 3], "x": 45, "y": 13, "flags": 4},
+ {"matrix": [1, 4], "x": 60, "y": 13, "flags": 4},
+ {"matrix": [1, 5], "x": 75, "y": 13, "flags": 4},
+ {"matrix": [1, 6], "x": 90, "y": 13, "flags": 4},
+ {"matrix": [1, 7], "x": 105, "y": 13, "flags": 4},
+ {"matrix": [1, 8], "x": 119, "y": 13, "flags": 4},
+ {"matrix": [1, 9], "x": 134, "y": 13, "flags": 4},
+ {"matrix": [1, 10], "x": 149, "y": 13, "flags": 4},
+ {"matrix": [1, 11], "x": 164, "y": 13, "flags": 4},
+ {"matrix": [1, 12], "x": 179, "y": 13, "flags": 4},
+ {"matrix": [1, 13], "x": 202, "y": 13, "flags": 1},
+ {"matrix": [2, 13], "x": 205, "y": 26, "flags": 4},
+ {"matrix": [2, 12], "x": 187, "y": 26, "flags": 4},
+ {"matrix": [2, 11], "x": 172, "y": 26, "flags": 4},
+ {"matrix": [2, 10], "x": 157, "y": 26, "flags": 4},
+ {"matrix": [2, 9], "x": 142, "y": 26, "flags": 4},
+ {"matrix": [2, 8], "x": 127, "y": 26, "flags": 4},
+ {"matrix": [2, 7], "x": 112, "y": 26, "flags": 4},
+ {"matrix": [2, 6], "x": 97, "y": 26, "flags": 4},
+ {"matrix": [2, 5], "x": 82, "y": 26, "flags": 4},
+ {"matrix": [2, 4], "x": 67, "y": 26, "flags": 4},
+ {"matrix": [2, 3], "x": 52, "y": 26, "flags": 4},
+ {"matrix": [2, 2], "x": 37, "y": 26, "flags": 4},
+ {"matrix": [2, 1], "x": 22, "y": 26, "flags": 4},
+ {"matrix": [2, 0], "x": 4, "y": 26, "flags": 1},
+ {"matrix": [3, 0], "x": 6, "y": 38, "flags": 8},
+ {"matrix": [3, 1], "x": 26, "y": 38, "flags": 4},
+ {"matrix": [3, 2], "x": 41, "y": 38, "flags": 4},
+ {"matrix": [3, 3], "x": 56, "y": 38, "flags": 4},
+ {"matrix": [3, 4], "x": 71, "y": 38, "flags": 4},
+ {"matrix": [3, 5], "x": 86, "y": 38, "flags": 4},
+ {"matrix": [3, 6], "x": 101, "y": 38, "flags": 4},
+ {"matrix": [3, 7], "x": 116, "y": 38, "flags": 4},
+ {"matrix": [3, 8], "x": 131, "y": 38, "flags": 4},
+ {"matrix": [3, 9], "x": 146, "y": 38, "flags": 4},
+ {"matrix": [3, 10], "x": 161, "y": 38, "flags": 4},
+ {"matrix": [3, 11], "x": 175, "y": 38, "flags": 4},
+ {"matrix": [3, 12], "x": 200, "y": 38, "flags": 1},
+ {"matrix": [4, 12], "x": 209, "y": 51, "flags": 1},
+ {"matrix": [4, 11], "x": 189, "y": 51, "flags": 1},
+ {"matrix": [4, 10], "x": 168, "y": 51, "flags": 4},
+ {"matrix": [4, 9], "x": 153, "y": 51, "flags": 4},
+ {"matrix": [4, 8], "x": 138, "y": 51, "flags": 4},
+ {"matrix": [4, 7], "x": 123, "y": 51, "flags": 4},
+ {"matrix": [4, 6], "x": 108, "y": 51, "flags": 4},
+ {"matrix": [4, 5], "x": 93, "y": 51, "flags": 4},
+ {"matrix": [4, 4], "x": 78, "y": 51, "flags": 4},
+ {"matrix": [4, 3], "x": 63, "y": 51, "flags": 4},
+ {"matrix": [4, 2], "x": 49, "y": 51, "flags": 4},
+ {"matrix": [4, 1], "x": 34, "y": 51, "flags": 4},
+ {"matrix": [4, 0], "x": 9, "y": 51, "flags": 4},
+ {"matrix": [5, 0], "x": 0, "y": 64, "flags": 1},
+ {"matrix": [5, 1], "x": 15, "y": 64, "flags": 1},
+ {"matrix": [5, 2], "x": 30, "y": 64, "flags": 1},
+ {"matrix": [5, 3], "x": 47, "y": 64, "flags": 1},
+ {"matrix": [5, 6], "x": 103, "y": 64, "flags": 4},
+ {"matrix": [5, 9], "x": 159, "y": 64, "flags": 1},
+ {"matrix": [5, 10], "x": 177, "y": 64, "flags": 1},
+ {"matrix": [5, 11], "x": 194, "y": 64, "flags": 1},
+ {"matrix": [5, 12], "x": 209, "y": 64, "flags": 1},
+ {"matrix": [5, 13], "x": 224, "y": 64, "flags": 1}
+ ],
+ "sleep": true
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6BCA",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B13"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
+ {"matrix": [0, 1], "x": 1.5, "y": 0},
+ {"matrix": [0, 2], "x": 2.5, "y": 0},
+ {"matrix": [0, 3], "x": 3.5, "y": 0},
+ {"matrix": [0, 4], "x": 4.5, "y": 0},
+ {"matrix": [0, 5], "x": 5.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": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0, "w": 1.5},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"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": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 12], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [4, 1], "x": 2.25, "y": 4},
+ {"matrix": [4, 2], "x": 3.25, "y": 4},
+ {"matrix": [4, 3], "x": 4.25, "y": 4},
+ {"matrix": [4, 4], "x": 5.25, "y": 4},
+ {"matrix": [4, 5], "x": 6.25, "y": 4},
+ {"matrix": [4, 6], "x": 7.25, "y": 4},
+ {"matrix": [4, 7], "x": 8.25, "y": 4},
+ {"matrix": [4, 8], "x": 9.25, "y": 4},
+ {"matrix": [4, 9], "x": 10.25, "y": 4},
+ {"matrix": [4, 10], "x": 11.25, "y": 4},
+ {"matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [5, 0], "x": 0, "y": 5},
+ {"matrix": [5, 1], "x": 1, "y": 5},
+ {"matrix": [5, 2], "x": 2, "y": 5},
+ {"matrix": [5, 3], "x": 3, "y": 5, "w": 1.25},
+ {"matrix": [5, 6], "x": 4.25, "y": 5, "w": 6.25},
+ {"matrix": [5, 9], "x": 10.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.75, "y": 5, "w": 1.25},
+ {"matrix": [5, 11], "x": 13, "y": 5},
+ {"matrix": [5, 12], "x": 14, "y": 5},
+ {"matrix": [5, 13], "x": 15, "y": 5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ok_1/keymaps/default/keymap.c b/keyboards/cipulot/ok_1/keymaps/default/keymap.c
new file mode 100644
index 0000000000..ceadc4c064
--- /dev/null
+++ b/keyboards/cipulot/ok_1/keymaps/default/keymap.c
@@ -0,0 +1,90 @@
+/* Copyright 2024 Cipulot
+ *
+ * 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+enum layers{
+ _MAC_BASE,
+ _MAC_FN,
+ _WIN_BASE,
+ _WIN_FN
+};
+
+enum custom_keycodes {
+ SNIP = SAFE_RANGE,
+};
+// clang-format on
+
+#define MAC PDF(_MAC_BASE)
+#define WIN PDF(_WIN_BASE)
+
+#define MACFN MO(_MAC_FN)
+#define WINFN MO(_WIN_FN)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [_MAC_BASE] = 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_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ MACFN, KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [_MAC_FN] = LAYOUT(
+ _______, KC_BRID, KC_BRIU, KC_MCTL, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, SNIP,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, WIN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RM_VALU,
+ _______, _______, _______, _______, _______, _______, _______, RM_PREV, RM_VALD, RM_PREV
+ ),
+ [_WIN_BASE] = 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_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ WINFN, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [_WIN_FN] = LAYOUT(
+ _______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, SNIP,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, MAC, _______, _______, _______, _______, RM_VALU,
+ _______, _______, _______, _______, _______, _______, _______, RM_PREV, RM_VALD, RM_PREV
+ ),
+ // clang-format on
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SNIP:
+ if (record->event.pressed) {
+ if (IS_LAYER_ON(_WIN_FN)) {
+ tap_code(KC_PSCR);
+ } else if (IS_LAYER_ON(_MAC_FN)) {
+ tap_code16(LSFT(LGUI(KC_3)));
+ }
+ }
+ return false;
+
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/cipulot/ok_1/mcuconf.h b/keyboards/cipulot/ok_1/mcuconf.h
new file mode 100644
index 0000000000..e65368bf26
--- /dev/null
+++ b/keyboards/cipulot/ok_1/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2024 Cipulot
+ *
+ * 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
diff --git a/keyboards/cipulot/ok_1/readme.md b/keyboards/cipulot/ok_1/readme.md
new file mode 100644
index 0000000000..aa003326d9
--- /dev/null
+++ b/keyboards/cipulot/ok_1/readme.md
@@ -0,0 +1,25 @@
+# OK-1
+
+OK-1 is a low profile keyboard.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: OK-1
+* Hardware Availability: TBD
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ok_1:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ok_1: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:
+
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is configured.
+* **Physical reset button**: Long press the reset button soldered on the PCB.
+* **Bootmagic reset**: Hold down the top left key and plug in the controller.
diff --git a/keyboards/cipulot/ok_1/rules.mk b/keyboards/cipulot/ok_1/rules.mk
new file mode 100644
index 0000000000..0ab54aaaf7
--- /dev/null
+++ b/keyboards/cipulot/ok_1/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
diff --git a/keyboards/handwired/hen_des/epssp75/keyboard.json b/keyboards/handwired/hen_des/epssp75/keyboard.json
new file mode 100644
index 0000000000..4d0739b800
--- /dev/null
+++ b/keyboards/handwired/hen_des/epssp75/keyboard.json
@@ -0,0 +1,107 @@
+{
+ "manufacturer": "Henning Cordes",
+ "keyboard_name": "epssp75",
+ "maintainer": "hen-des",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP16", "GP17", "GP18", "GP19", "GP20", "GP21", "GP22"],
+ "rows": ["GP1", "GP2", "GP3", "GP4", "GP5"]
+ },
+ "processor": "RP2040",
+ "url": "https://hen-des.github.io/epssp75/",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0075",
+ "vid": "0x6863"
+ },
+ "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": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 9], "x": 8.5, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [0, 16], "x": 16, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 8], "x": 7.25, "y": 1, "w": 2.5},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1},
+ {"matrix": [1, 14], "x": 14, "y": 1},
+ {"matrix": [1, 15], "x": 15, "y": 1},
+ {"matrix": [1, 16], "x": 16, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2, "h": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2, "h": 2},
+ {"matrix": [2, 11], "x": 11, "y": 2},
+ {"matrix": [2, 12], "x": 12, "y": 2},
+ {"matrix": [2, 13], "x": 13, "y": 2},
+ {"matrix": [2, 14], "x": 14, "y": 2},
+ {"matrix": [2, 15], "x": 15, "y": 2},
+ {"matrix": [2, 16], "x": 16, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3},
+ {"matrix": [3, 11], "x": 11, "y": 3},
+ {"matrix": [3, 12], "x": 12, "y": 3},
+ {"matrix": [3, 13], "x": 13, "y": 3},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [3, 16], "x": 16, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 5], "x": 4, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 6, "y": 4, "h": 2},
+ {"matrix": [4, 10], "x": 10, "y": 4, "h": 2},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 2},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+ {"matrix": [4, 16], "x": 16, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/hen_des/epssp75/keymaps/default/keymap.c b/keyboards/handwired/hen_des/epssp75/keymaps/default/keymap.c
new file mode 100644
index 0000000000..65c6508e0a
--- /dev/null
+++ b/keyboards/handwired/hen_des/epssp75/keymaps/default/keymap.c
@@ -0,0 +1,21 @@
+// 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, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F22, KC_RBRC, KC_PSCR, KC_F23, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_F20, KC_ENT, KC_F21, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_DEL, KC_HOME, KC_UP, KC_END, KC_BSPC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LEFT, KC_DOWN, KC_RGHT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_NUBS, KC_SPC, KC_LSFT, KC_ENT, KC_SPC, KC_RALT, MO(1), RGUI_T(KC_APP), KC_RCTL
+ ),
+ [1] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F22, KC_PAUS, KC_PSCR, KC_F23, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TAB, KC_PGUP, LCTL(KC_LEFT), KC_UP, LCTL(KC_RGHT), KC_PGDN, KC_F20, KC_ENT, KC_F21, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_CAPS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_DEL, KC_HOME, KC_VOLU, KC_END, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_RSFT, LCA(KC_F2), KC_TAB, KC_F2, KC_F5, KC_F23, KC_MUTE, KC_VOLD, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_NUBS, KC_SPC, KC_LSFT, KC_ENT, KC_SPC, KC_RALT, _______, KC_APP, KC_RCTL
+ )
+};
diff --git a/keyboards/handwired/hen_des/epssp75/readme.md b/keyboards/handwired/hen_des/epssp75/readme.md
new file mode 100644
index 0000000000..5c353d215b
--- /dev/null
+++ b/keyboards/handwired/hen_des/epssp75/readme.md
@@ -0,0 +1,18 @@
+# epssp75
+
+Ergonomic PSeudo SPlit 75-key Keyboard. Desinged after two years of working with a [Truly Ergonomic CLEAVE Keyboard](https://trulyergonomic.com) and also inspired by the [Redox Keyboard](https://github.com/mattdibi/redox-keyboard).
+I am using and the [NOTED](https://neo-layout.org/Layouts/noted/) layout and the [ReNeo](https://neo-layout.org/Einrichtung/reneo/) software which offers additional possible key functions and layers.
+
+* Keyboard Maintainer: [Henning Cordes](https://github.com/hen-des)
+* Files: [https://github.com/hen-des/epssp75](https://github.com/hen-des/epssp75)
+
+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).
+
+Detailed [description](https://hen-des.github.io/epssp75/index.html) and expiriences of the conception and manufacturing.
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead \ No newline at end of file
diff --git a/keyboards/handwired/lumawing/keyboard.json b/keyboards/handwired/lumawing/keyboard.json
new file mode 100644
index 0000000000..a99d6d2a2e
--- /dev/null
+++ b/keyboards/handwired/lumawing/keyboard.json
@@ -0,0 +1,94 @@
+{
+ "keyboard_name": "LuMaWing",
+ "manufacturer": "Lucas Mateijsen",
+ "url": "",
+ "maintainer": "qmk",
+ "usb": {
+ "vid": "0xBB80",
+ "pid": "0x050D",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false
+ },
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "matrix_pins": {
+ "cols": ["B1", "B3", "B2", "B6", "B5", "B4", "E6", "D7", "C6", "D4", "D0", "D1", "D2", "D3"],
+ "rows": ["F4", "F5", "F6", "F7"]
+ },
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "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": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [2, 11], "x": 11, "y": 2},
+ {"matrix": [2, 12], "x": 12, "y": 2},
+ {"matrix": [2, 13], "x": 13, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 6], "x": 5, "y": 3, "w": 2},
+ {"matrix": [3, 7], "x": 7, "y": 3, "w": 2},
+ {"matrix": [3, 9], "x": 9, "y": 3},
+ {"matrix": [3, 10], "x": 10, "y": 3},
+ {"matrix": [3, 11], "x": 11, "y": 3},
+ {"matrix": [3, 12], "x": 12, "y": 3},
+ {"matrix": [3, 13], "x": 13, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/lumawing/keymaps/default/keymap.c b/keyboards/handwired/lumawing/keymaps/default/keymap.c
new file mode 100644
index 0000000000..c9d1367c8c
--- /dev/null
+++ b/keyboards/handwired/lumawing/keymaps/default/keymap.c
@@ -0,0 +1,70 @@
+/* Copyright 2021 Richard Nunez <[email protected]>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+#define KC_COPY LCTL(KC_C)
+#define KC_CUT LCTL(KC_X)
+#define KC_PSTE LCTL(KC_V)
+
+#define KC_UNDO LCTL(KC_Z)
+#define KC_AGIN LCTL(KC_Y)
+
+enum layer_names {
+ _COLEMAKDH,
+ _QWERTY,
+ _NUMBERS,
+ _FUNCTIONAL,
+ _ADMIN
+};
+
+ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_COLEMAKDH] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_B, XXXXXXX, XXXXXXX, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
+ KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_G, XXXXXXX, XXXXXXX, KC_M, KC_N, KC_E, KC_I, KC_O, KC_BSPC,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, XXXXXXX, XXXXXXX, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, MO(3), KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RGUI, XXXXXXX, KC_ENT
+ ),
+
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_DEL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, MO(3), KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RGUI, XXXXXXX, KC_ENT
+ ),
+
+ [_NUMBERS] = LAYOUT(
+ KC_ESC, 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,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_QUOT, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ _______, XXXXXXX, XXXXXXX, _______, MO(4), _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+ [_FUNCTIONAL] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, KC_AGIN, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+ [_ADMIN] = LAYOUT(
+ QK_BOOT, DF(0), DF(1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
+ )
+};
diff --git a/keyboards/handwired/lumawing/readme.md b/keyboards/handwired/lumawing/readme.md
new file mode 100644
index 0000000000..aea5dab4ac
--- /dev/null
+++ b/keyboards/handwired/lumawing/readme.md
@@ -0,0 +1,15 @@
+# LuMaWing handwired
+
+Custom handwired LuMaWing keyboard.
+
+* Keyboard Maintainer: [Lucas Mateijsen](https://github.com/LucasMateijsen/)
+* Hardware Supported: Handwired LuMaWing 14x4 ortho keyboard Pro-Micro
+* Hardware Availability:
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/ortho4x14:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+To get into the Bootloader, simply hold down the top-left key (pos 0, 0) and power the board.
diff --git a/keyboards/jcpm2/config.h b/keyboards/jcpm2/config.h
new file mode 100644
index 0000000000..0f06cd1466
--- /dev/null
+++ b/keyboards/jcpm2/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2025 Jeremy Cook Consulting LLC <[email protected]>
+ *
+ * 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.
+ *
+ * If you did not receive a copy of the GNU General Public License
+ * along with this program, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define OLED_DISPLAY_128X64
+#define OLED_TIMEOUT 2000000
diff --git a/keyboards/jcpm2/jcpm2.c b/keyboards/jcpm2/jcpm2.c
new file mode 100644
index 0000000000..1439ffcdcd
--- /dev/null
+++ b/keyboards/jcpm2/jcpm2.c
@@ -0,0 +1,46 @@
+/* Copyright 2025 Jeremy Cook Consulting LLC <[email protected]>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+static uint32_t logo_timer = 0;
+
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ logo_timer = timer_read();
+ return OLED_ROTATION_180;
+}
+
+static void render_logo(void) {
+ static const char PROGMEM qmk_logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
+ };
+ oled_write_P(qmk_logo, false);
+}
+
+bool oled_task_kb(void) {
+ if (timer_elapsed32(logo_timer) < 1000) {
+ render_logo();
+ return false;
+ }
+ if (!oled_task_user()) {
+ return false;
+ }
+ return true;
+}
+
+#endif
diff --git a/keyboards/jcpm2/keyboard.json b/keyboards/jcpm2/keyboard.json
new file mode 100644
index 0000000000..17734a0ed0
--- /dev/null
+++ b/keyboards/jcpm2/keyboard.json
@@ -0,0 +1,79 @@
+{
+ "manufacturer": "jeremyscook",
+ "keyboard_name": "jcpm2",
+ "maintainer": "jeremyscook",
+ "development_board": "promicro",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "D2", "pin_b": "D3"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "direct": [
+ ["D4", null, "F4", "B3"],
+ ["B4", null, "F5", "B2"],
+ ["B1", "F7", "F6", "B6"]
+ ]
+ },
+ "rgb_matrix": {
+ "animations": {
+ "digital_rain": true,
+ "hue_breathing": true,
+ "typing_heatmap": true
+ },
+ "default": {
+ "animation": "typing_heatmap",
+ "val": 180
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [2, 0], "x": 0, "y": 64, "flags": 4},
+ {"matrix": [2, 1], "x": 75, "y": 64, "flags": 4},
+ {"matrix": [2, 2], "x": 150, "y": 64, "flags": 4},
+ {"matrix": [1, 2], "x": 150, "y": 32, "flags": 4},
+ {"matrix": [0, 2], "x": 150, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 224, "y": 0, "flags": 4},
+ {"matrix": [1, 3], "x": 224, "y": 32, "flags": 4},
+ {"matrix": [2, 3], "x": 224, "y": 64, "flags": 4},
+ {"x": 224, "y": 0, "flags": 2},
+ {"x": 224, "y": 64, "flags": 2},
+ {"x": 112, "y": 64, "flags": 2},
+ {"x": 0, "y": 64, "flags": 2}
+ ],
+ "sleep": true
+ },
+ "url": "https://github.com/JeremySCook/JC-Pro-Macro-2",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "ws2812": {
+ "pin": "C6"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 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/jcpm2/keymaps/default/keymap.c b/keyboards/jcpm2/keymaps/default/keymap.c
new file mode 100644
index 0000000000..6ea8906cec
--- /dev/null
+++ b/keyboards/jcpm2/keymaps/default/keymap.c
@@ -0,0 +1,132 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+// Define the layers
+enum layer_names {
+ _LAYER0,
+ _LAYER0_MOD,
+ _LAYER1,
+ _LAYER2
+};
+
+#define UNDERGLOW 60
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┐
+ * │ E │ n │ 6 │ 7 │
+ * ├───┼───┼───┼───┤
+ * │ B │ n │ 5 │ 8 │
+ * ├───┼───┼───┼───┤
+ * │ 2 │ 3 │ 4 │ 9 │
+ * └───┴───┴───┴───┘
+ */
+ [_LAYER0] = LAYOUT( // default
+ KC_MUTE, LSFT(KC_COMM), LSFT(KC_DOT),
+ DF(_LAYER1), KC_J, KC_L,
+ KC_MPRV, KC_MPLY, KC_MNXT, TG(_LAYER0_MOD) // btm-right one shot mod layer
+ ),
+ [_LAYER0_MOD] = LAYOUT( // default MOD
+ _______, RM_VALU, RM_NEXT, // _______ transparent, goes to above layer
+ _______, RM_VALD, RM_TOGG,
+ LCTL(LGUI(KC_SPC)), _______, _______, TG(_LAYER0_MOD)
+ ),
+ [_LAYER1] = LAYOUT( // FCPX
+ LSFT(LGUI(KC_B)), LGUI(KC_B), LGUI(KC_EQL),
+ DF(_LAYER2), LALT(KC_K), LGUI(KC_MINS),
+ KC_J, KC_K, KC_L, KC_BSPC
+ ),
+ [_LAYER2] = LAYOUT( // KICAD
+ KC_E, KC_ESC, KC_M,
+ DF(_LAYER0), LGUI(KC_Z), KC_X,
+ KC_V, KC_D, KC_U, KC_BSPC
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_LAYER0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, // default
+ [_LAYER0_MOD] = { ENCODER_CCW_CW(_______, _______) }, // default MOD
+ [_LAYER1] = { ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) }, // FCPX
+ [_LAYER2] = { ENCODER_CCW_CW(KC_R, S(KC_R)) } // KICAD
+};
+#endif
+
+#ifdef OLED_ENABLE
+// Function to display the current layer and information on the OLED
+bool oled_task_user(void) {
+ switch (get_highest_layer(layer_state | default_layer_state)) {
+ case _LAYER0:
+ oled_write_ln_P(PSTR("(VOL- VOL+) LAYER0"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("MUTE SLOW FAST"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("LAYR RSET 10BK 10FW"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("MREV MPLA MFWD +OPT"), false);
+ break;
+ case _LAYER0_MOD:
+ oled_write_ln_P(PSTR("____ ____ 0-MOD"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("____ BRI+ ANIM"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("____ ____ BRI- TOGG"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("EMOJ ____ ____ -OPT"), false);
+ break;
+ case _LAYER1:
+ oled_write_ln_P(PSTR("(FRA- FRA+) FCPX"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("XXXX BRAK ZOM+"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("LAYR RSET KFRA ZOM-"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("BACK STOP FORW DELT"), false);
+ break;
+ case _LAYER2:
+ oled_write_ln_P(PSTR("(RO L RO R) KICAD"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("EDIT ESCP MOVE"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("LAYR RSET UNDO TRAK"), false);
+ oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR("VIA DRAG SALL DELT"), false);
+ break;
+ }
+ return false;
+}
+#endif
+
+bool rgb_matrix_indicators_user(void) {
+ switch(get_highest_layer(layer_state|default_layer_state)) {
+ case _LAYER2:
+ rgb_matrix_set_color(11, 0, 0, UNDERGLOW);
+ rgb_matrix_set_color(10, 0, 0, UNDERGLOW);
+ rgb_matrix_set_color(9, 0, 0, UNDERGLOW);
+ rgb_matrix_set_color(8, 0, 0, UNDERGLOW);
+ break;
+ case _LAYER1:
+ rgb_matrix_set_color(11, 0, UNDERGLOW, 0);
+ rgb_matrix_set_color(10, 0, UNDERGLOW, 0);
+ rgb_matrix_set_color(9, 0, UNDERGLOW, 0);
+ rgb_matrix_set_color(8, 0, UNDERGLOW, 0);
+ break;
+ case _LAYER0_MOD:
+ rgb_matrix_set_color(11, UNDERGLOW/2, 0, UNDERGLOW/2);
+ rgb_matrix_set_color(10, UNDERGLOW/2, 0, UNDERGLOW/2);
+ rgb_matrix_set_color(9, UNDERGLOW/2, 0, UNDERGLOW/2);
+ rgb_matrix_set_color(8, UNDERGLOW/2, 0, UNDERGLOW/2);
+ break;
+ case _LAYER0:
+ rgb_matrix_set_color(11, UNDERGLOW, 0, 0);
+ rgb_matrix_set_color(10, UNDERGLOW, 0, 0);
+ rgb_matrix_set_color(9, UNDERGLOW, 0, 0);
+ rgb_matrix_set_color(8, UNDERGLOW, 0, 0);
+ break;
+ default:
+ break;
+ }
+ return false;
+}
diff --git a/keyboards/jcpm2/keymaps/default/rules.mk b/keyboards/jcpm2/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ee32568148
--- /dev/null
+++ b/keyboards/jcpm2/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/jcpm2/readme.md b/keyboards/jcpm2/readme.md
new file mode 100644
index 0000000000..9a5560dfd0
--- /dev/null
+++ b/keyboards/jcpm2/readme.md
@@ -0,0 +1,27 @@
+# jcpm2
+
+![jcpm2](https://i.imgur.com/EM5JoGC.jpeg)
+
+An 8-key macro pad with rotary encoder, RGB backlighting and underlighting. Made and sold by JCC LLC.
+
+* Keyboard Maintainer: [jeremyscook](https://github.com/jeremyscook)
+* Hardware Supported: JCPM2 PCB, Pro Micro
+* Hardware Availability: [Tindie.com](https://www.tindie.com/products/25414)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jcpm2:default
+
+Flashing example for this keyboard:
+
+ make jcpm2: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 rotary encoder and plug in the keyboard
+* **Physical reset button**: Double-click the small inside button on top of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/mzmkb/slimdash/info.json b/keyboards/mzmkb/slimdash/info.json
new file mode 100644
index 0000000000..ed8def5958
--- /dev/null
+++ b/keyboards/mzmkb/slimdash/info.json
@@ -0,0 +1,10 @@
+{
+ "manufacturer": "mzmkb",
+ "maintainer": "mizma",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "split": {
+ "enabled": true
+ },
+ "url": "https://github.com/mizma/slimdash"
+}
diff --git a/keyboards/mzmkb/slimdash/readme.md b/keyboards/mzmkb/slimdash/readme.md
new file mode 100644
index 0000000000..8590472aae
--- /dev/null
+++ b/keyboards/mzmkb/slimdash/readme.md
@@ -0,0 +1,41 @@
+# Slimdash
+
+![mzmkb/slimdash/rev1](https://i.imgur.com/ymf8ROw.jpeg)
+
+__SlimDash__ is a slim low profile split ortho-staggered keyboard inspired by omkbd/ErgoDash
+with following key highlights:
+
+* Ortho-Staggered Split keyboard layout
+* Slim body (20-22mm depending on key caps and rubber feet used)
+* Rigid body structure
+* Per-Key RGB LED Matrix lighting
+* USB-C connector
+* Easy build utilizing PCBA service for the harder SMT components
+* Keyboard Maintainer: [mizma](https://github.com/mizma)
+* Hardware Supported: [SlimDash](https://github.com/mizma/SlimDash/)
+* Hardware Availability: Build your own using design data at [SlimDash](https://github.com/mizma/SlimDash/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mzmkb/slimdash/rev1:default
+
+Flashing example for this keyboard:
+
+ make mzmkb/slimdash/rev1:default:flash
+
+You may also enter Bootloader on your keyboard, and copy the `mzmkb_slimdash_*_*.uf2`
+file into the `RPI-RP2` drive shown in your PC.
+
+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:
+
+* __Reset button__: Double-tap the RESET button on the side of the keyboard near
+ TRRS jack.
+* __Physical reset button__: Hold BOOT_SW and press RESET on the side of the keyboard
+ near TRRS jack.
+* __Keycode in layout__: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/mzmkb/slimdash/rev1/config.h b/keyboards/mzmkb/slimdash/rev1/config.h
new file mode 100644
index 0000000000..4c77e71b78
--- /dev/null
+++ b/keyboards/mzmkb/slimdash/rev1/config.h
@@ -0,0 +1,28 @@
+/* Copyright 2025 mizma (@mizma)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// Make it easier to enter the bootloader
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+
+// UART1, communication between the two halves
+#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode
+#define SERIAL_USART_TX_PIN GP17 // USART TX pin
+#define SERIAL_USART_RX_PIN GP18 // USART RX pin
+#define SERIAL_PIO_USE_PIO1 // Use PIO1 as PIO0 is used for WS2812 driver
+
diff --git a/keyboards/mzmkb/slimdash/rev1/keyboard.json b/keyboards/mzmkb/slimdash/rev1/keyboard.json
new file mode 100644
index 0000000000..c9549c903b
--- /dev/null
+++ b/keyboards/mzmkb/slimdash/rev1/keyboard.json
@@ -0,0 +1,239 @@
+{
+ "keyboard_name": "slimdash rev1.0",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true,
+ },
+ "matrix_pins": {
+ "cols": ["GP0", "GP1", "GP3", "GP5", "GP8", "GP7", "GP9"],
+ "rows": ["GP2", "GP4", "GP6", "GP11", "GP10"]
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_color": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [3, 6], "x": 105, "y": 51, "flags": 4},
+ {"matrix": [4, 6], "x": 105, "y": 64, "flags": 4},
+ {"matrix": [4, 5], "x": 90, "y": 51, "flags": 4},
+ {"matrix": [4, 4], "x": 75, "y": 51, "flags": 4},
+ {"matrix": [4, 3], "x": 45, "y": 51, "flags": 4},
+ {"matrix": [4, 2], "x": 30, "y": 51, "flags": 4},
+ {"matrix": [4, 1], "x": 15, "y": 51, "flags": 4},
+ {"matrix": [4, 0], "x": 0, "y": 51, "flags": 4},
+ {"matrix": [3, 0], "x": 0, "y": 38, "flags": 4},
+ {"matrix": [3, 1], "x": 15, "y": 38, "flags": 4},
+ {"matrix": [3, 2], "x": 30, "y": 38, "flags": 4},
+ {"matrix": [3, 3], "x": 45, "y": 38, "flags": 4},
+ {"matrix": [3, 4], "x": 60, "y": 38, "flags": 4},
+ {"matrix": [3, 5], "x": 75, "y": 38, "flags": 4},
+ {"matrix": [2, 6], "x": 90, "y": 26, "flags": 4},
+ {"matrix": [1, 6], "x": 90, "y": 13, "flags": 4},
+ {"matrix": [2, 5], "x": 75, "y": 26, "flags": 4},
+ {"matrix": [2, 4], "x": 60, "y": 26, "flags": 4},
+ {"matrix": [2, 3], "x": 45, "y": 26, "flags": 4},
+ {"matrix": [2, 2], "x": 30, "y": 26, "flags": 4},
+ {"matrix": [2, 1], "x": 15, "y": 26, "flags": 4},
+ {"matrix": [2, 0], "x": 0, "y": 26, "flags": 4},
+ {"matrix": [1, 0], "x": 0, "y": 13, "flags": 4},
+ {"matrix": [1, 1], "x": 15, "y": 13, "flags": 4},
+ {"matrix": [1, 2], "x": 30, "y": 13, "flags": 4},
+ {"matrix": [1, 3], "x": 45, "y": 13, "flags": 4},
+ {"matrix": [1, 4], "x": 60, "y": 13, "flags": 4},
+ {"matrix": [1, 5], "x": 75, "y": 13, "flags": 4},
+ {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4},
+ {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4},
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
+ {"matrix": [8, 6], "x": 119, "y": 51, "flags": 4},
+ {"matrix": [9, 6], "x": 119, "y": 64, "flags": 4},
+ {"matrix": [9, 5], "x": 134, "y": 51, "flags": 4},
+ {"matrix": [9, 4], "x": 149, "y": 51, "flags": 4},
+ {"matrix": [9, 3], "x": 179, "y": 51, "flags": 4},
+ {"matrix": [9, 2], "x": 194, "y": 51, "flags": 4},
+ {"matrix": [9, 1], "x": 209, "y": 51, "flags": 4},
+ {"matrix": [9, 0], "x": 224, "y": 51, "flags": 4},
+ {"matrix": [8, 0], "x": 224, "y": 38, "flags": 4},
+ {"matrix": [8, 1], "x": 209, "y": 38, "flags": 4},
+ {"matrix": [8, 2], "x": 194, "y": 38, "flags": 4},
+ {"matrix": [8, 3], "x": 179, "y": 38, "flags": 4},
+ {"matrix": [8, 4], "x": 164, "y": 38, "flags": 4},
+ {"matrix": [8, 5], "x": 149, "y": 38, "flags": 4},
+ {"matrix": [7, 6], "x": 134, "y": 26, "flags": 4},
+ {"matrix": [6, 6], "x": 134, "y": 13, "flags": 4},
+ {"matrix": [7, 5], "x": 149, "y": 26, "flags": 4},
+ {"matrix": [7, 4], "x": 164, "y": 26, "flags": 4},
+ {"matrix": [7, 3], "x": 179, "y": 26, "flags": 4},
+ {"matrix": [7, 2], "x": 194, "y": 26, "flags": 4},
+ {"matrix": [7, 1], "x": 209, "y": 26, "flags": 4},
+ {"matrix": [7, 0], "x": 224, "y": 26, "flags": 4},
+ {"matrix": [6, 0], "x": 224, "y": 13, "flags": 4},
+ {"matrix": [6, 1], "x": 209, "y": 13, "flags": 4},
+ {"matrix": [6, 2], "x": 194, "y": 13, "flags": 4},
+ {"matrix": [6, 3], "x": 179, "y": 13, "flags": 4},
+ {"matrix": [6, 4], "x": 164, "y": 13, "flags": 4},
+ {"matrix": [6, 5], "x": 149, "y": 13, "flags": 4},
+ {"matrix": [5, 6], "x": 134, "y": 0, "flags": 4},
+ {"matrix": [5, 5], "x": 149, "y": 0, "flags": 4},
+ {"matrix": [5, 4], "x": 164, "y": 0, "flags": 4},
+ {"matrix": [5, 3], "x": 179, "y": 0, "flags": 4},
+ {"matrix": [5, 2], "x": 194, "y": 0, "flags": 4},
+ {"matrix": [5, 1], "x": 209, "y": 0, "flags": 4},
+ {"matrix": [5, 0], "x": 224, "y": 0, "flags": 4}
+ ],
+ "max_brightness": 128,
+ "sleep": true,
+ "split_count": [35, 35]
+ },
+ "split": {
+ "matrix_pins": {
+ "right": {
+ "cols": ["GP0", "GP1", "GP3", "GP5", "GP8", "GP7", "GP9"],
+ "rows": ["GP2", "GP4", "GP6", "GP11", "GP10"]
+ }
+ },
+ "serial": {
+ "driver": "vendor"
+ },
+ "transport": {
+ "sync": {
+ "matrix_state": true
+ }
+ }
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x7344",
+ "vid": "0x4D5A"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP20"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.375},
+ {"matrix": [0, 1], "x": 1, "y": 0.375},
+ {"matrix": [0, 2], "x": 2, "y": 0.125},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.125},
+ {"matrix": [0, 5], "x": 5, "y": 0.25},
+ {"matrix": [0, 6], "x": 6, "y": 0.75},
+ {"matrix": [5, 6], "x": 11.5, "y": 0.75},
+ {"matrix": [5, 5], "x": 12.5, "y": 0.25},
+ {"matrix": [5, 4], "x": 13.5, "y": 0.125},
+ {"matrix": [5, 3], "x": 14.5, "y": 0},
+ {"matrix": [5, 2], "x": 15.5, "y": 0.125},
+ {"matrix": [5, 1], "x": 16.5, "y": 0.375},
+ {"matrix": [5, 0], "x": 17.5, "y": 0.375},
+ {"matrix": [1, 0], "x": 0, "y": 1.375},
+ {"matrix": [1, 1], "x": 1, "y": 1.375},
+ {"matrix": [1, 2], "x": 2, "y": 1.125},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.125},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.75},
+ {"matrix": [6, 6], "x": 11.5, "y": 1.75},
+ {"matrix": [6, 5], "x": 12.5, "y": 1.25},
+ {"matrix": [6, 4], "x": 13.5, "y": 1.125},
+ {"matrix": [6, 3], "x": 14.5, "y": 1},
+ {"matrix": [6, 2], "x": 15.5, "y": 1.125},
+ {"matrix": [6, 1], "x": 16.5, "y": 1.375},
+ {"matrix": [6, 0], "x": 17.5, "y": 1.375},
+ {"matrix": [2, 0], "x": 0, "y": 2.375},
+ {"matrix": [2, 1], "x": 1, "y": 2.375},
+ {"matrix": [2, 2], "x": 2, "y": 2.125},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.125},
+ {"matrix": [2, 5], "x": 5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6, "y": 2.75},
+ {"matrix": [7, 6], "x": 11.5, "y": 2.75},
+ {"matrix": [7, 5], "x": 12.5, "y": 2.25},
+ {"matrix": [7, 4], "x": 13.5, "y": 2.125},
+ {"matrix": [7, 3], "x": 14.5, "y": 2},
+ {"matrix": [7, 2], "x": 15.5, "y": 2.125},
+ {"matrix": [7, 1], "x": 16.5, "y": 2.375},
+ {"matrix": [7, 0], "x": 17.5, "y": 2.375},
+ {"matrix": [3, 0], "x": 0, "y": 3.375},
+ {"matrix": [3, 1], "x": 1, "y": 3.375},
+ {"matrix": [3, 2], "x": 2, "y": 3.125},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3.125},
+ {"matrix": [3, 5], "x": 5, "y": 3.25},
+ {"matrix": [3, 6], "x": 7.25, "y": 4},
+ {"matrix": [8, 6], "x": 10.25, "y": 4},
+ {"matrix": [8, 5], "x": 12.5, "y": 3.25},
+ {"matrix": [8, 4], "x": 13.5, "y": 3.125},
+ {"matrix": [8, 3], "x": 14.5, "y": 3},
+ {"matrix": [8, 2], "x": 15.5, "y": 3.125},
+ {"matrix": [8, 1], "x": 16.5, "y": 3.375},
+ {"matrix": [8, 0], "x": 17.5, "y": 3.375},
+ {"matrix": [4, 0], "x": 0, "y": 4.375},
+ {"matrix": [4, 1], "x": 1, "y": 4.375},
+ {"matrix": [4, 2], "x": 2, "y": 4.125},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 5.25, "y": 5},
+ {"matrix": [4, 5], "x": 6.25, "y": 4, "h": 2},
+ {"matrix": [4, 6], "x": 7.25, "y": 5},
+ {"matrix": [9, 6], "x": 10.25, "y": 5},
+ {"matrix": [9, 5], "x": 11.25, "y": 4, "h": 2},
+ {"matrix": [9, 4], "x": 12.25, "y": 5},
+ {"matrix": [9, 3], "x": 14.5, "y": 4},
+ {"matrix": [9, 2], "x": 15.5, "y": 4.125},
+ {"matrix": [9, 1], "x": 16.5, "y": 4.375},
+ {"matrix": [9, 0], "x": 17.5, "y": 4.375}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mzmkb/slimdash/rev1/keymaps/default/keymap.c b/keyboards/mzmkb/slimdash/rev1/keymaps/default/keymap.c
new file mode 100644
index 0000000000..f43ac674a8
--- /dev/null
+++ b/keyboards/mzmkb/slimdash/rev1/keymaps/default/keymap.c
@@ -0,0 +1,126 @@
+/* Copyright 2025 mizma (@mizma)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QWERTY,
+ _GAMEMODE,
+ _LOWER,
+ _RAISE
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define GAMEM TG(_GAMEMODE)
+
+#define EISU LALT(KC_GRV)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,------------------------------------------------. .------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | LCTL | A | S | D | F | G | Del | | Ins | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
+ * | LSFT | Z | X | C | V | B | | N | M | , | . | / | RSFT |
+ * |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
+ * | RM_DN| RM_UP| GAMEM| GUI | | | LALT | | RALT | | | HOME | END |PageUp|PageDn|
+ * .---------------------------. .------| Space|------| |------| Enter|------. .---------------------------.
+ * | Lower| | LSFT | | RCTL | | Raise|
+ * .--------------------. .--------------------.
+ */
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_DEL , KC_INS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ RM_VALD, RM_VALU, GAMEM, KC_LGUI, LOWER, KC_SPC, KC_LSFT, KC_RCTL, KC_ENT, RAISE, KC_HOME, KC_END, KC_PGUP, KC_PGDN
+ ),
+
+ /* Game Mode Toggle: sample toggle layer. turn off GUI key and add arrows
+ * ,------------------------------------------------. .------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
+ * | | | | NOOP | | | | | | | | ← | ↓ | ↑ | → |
+ * .---------------------------. .------| |------| |------| |------. .---------------------------.
+ * | | | | | | | |
+ * .--------------------. .--------------------.
+ */
+ [_GAMEMODE] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_NO, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Lower: NUMPAD, App/Media keys and RGM Matrix
+ * ,------------------------------------------------. .------------------------------------------------.
+ * | ` | | | | | Mute | Vol- | | Vol+ | | NumL | / | * | - | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | |RGBTGL| | BrDn | | BrUp | | 7 | 8 | 9 | + | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | CAPS | | |RM_HUD|RM_HUU| |RM_PRV| |RM_NXT| | 4 | 5 | 6 | , | |
+ * |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
+ * | | | |RM_SPD|RM_SPU| | | | 1 | 2 | 3 | = | |
+ * |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
+ * | | | | | | | | | | | | 0 | . | | |
+ * .---------------------------. .------| |------| |------| PENT |------. .---------------------------.
+ * | | | | | | | |
+ * .--------------------. .--------------------.
+ */
+ [_LOWER] = LAYOUT(
+ KC_GRV, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, _______,
+ _______, _______, _______, _______, RM_TOGG, _______, KC_BRID, KC_BRIU, _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______,
+ KC_CAPS, _______, _______, RM_HUED, RM_HUEU, _______, RM_PREV, RM_NEXT, _______, KC_P4, KC_P5, KC_P6, KC_PCMM, _______,
+ _______, _______, _______, RM_SPDD, RM_SPDU, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PEQL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_PENT, _______, KC_P0, KC_PDOT, _______, _______
+ ),
+
+ /* Raise: Functions and Mouse
+ * ,------------------------------------------------. .------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | |WheelL|WheelR| | | | | | | Pause|ScrolL| PrnSc| F12 |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | CAPS | |Mouse3|Mouse2|Mouse1|WheelU| | | | ← | ↓ | ↑ | → | | |
+ * |------+------+------+------+------+------+------. .------+------+------+------+------+------+------|
+ * | |Accel0|Accel1|Accel2| |WheelD| |MouseL|MouseD|MouseU|MouseR| | |
+ * |------+------+------+------+------+--+---+--+------. .------+--+---+--+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * .---------------------------. .------| |------| |------| |------. .---------------------------.
+ * | | | | | | | |
+ * .--------------------. .--------------------.
+ */
+ [_RAISE] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, _______, _______, MS_WHLL, MS_WHLR, _______, _______, _______, _______, _______, KC_PAUS, KC_SCRL, KC_PSCR, KC_F12,
+ KC_CAPS, _______, MS_BTN3, MS_BTN2, MS_BTN1, MS_WHLU, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
+ _______, MS_ACL0, MS_ACL1, MS_ACL2, _______, MS_WHLD, _______, _______, MS_LEFT, MS_DOWN, MS_UP, MS_RGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
diff --git a/keyboards/splitkb/halcyon/elora/info.json b/keyboards/splitkb/halcyon/elora/info.json
new file mode 100644
index 0000000000..ea97888673
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/info.json
@@ -0,0 +1,80 @@
+{
+ "manufacturer": "splitkb.com",
+ "maintainer": "splitkb",
+ "url": "https://splitkb.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "vid": "0x8D1D"
+ },
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_split_4x6_5"
+ },
+ "layouts": {
+ "LAYOUT_split_4x6_5": {
+ "layout": [
+ {"label": "L06", "matrix": [0, 6], "x": 0, "y": 0.75},
+ {"label": "L05", "matrix": [0, 5], "x": 1, "y": 0.75},
+ {"label": "L04", "matrix": [0, 4], "x": 2, "y": 0.25},
+ {"label": "L03", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "L02", "matrix": [0, 2], "x": 4, "y": 0.25},
+ {"label": "L01", "matrix": [0, 1], "x": 5, "y": 0.5},
+ {"label": "R01", "matrix": [5, 1], "x": 10.5, "y": 0.5},
+ {"label": "R02", "matrix": [5, 2], "x": 11.5, "y": 0.25},
+ {"label": "R03", "matrix": [5, 3], "x": 12.5, "y": 0},
+ {"label": "R04", "matrix": [5, 4], "x": 13.5, "y": 0.25},
+ {"label": "R05", "matrix": [5, 5], "x": 14.5, "y": 0.75},
+ {"label": "R06", "matrix": [5, 6], "x": 15.5, "y": 0.75},
+ {"label": "L12", "matrix": [1, 6], "x": 0, "y": 1.75},
+ {"label": "L11", "matrix": [1, 5], "x": 1, "y": 1.75},
+ {"label": "L10", "matrix": [1, 4], "x": 2, "y": 1.25},
+ {"label": "L09", "matrix": [1, 3], "x": 3, "y": 1},
+ {"label": "L08", "matrix": [1, 2], "x": 4, "y": 1.25},
+ {"label": "L07", "matrix": [1, 1], "x": 5, "y": 1.5},
+ {"label": "R07", "matrix": [6, 1], "x": 10.5, "y": 1.5},
+ {"label": "R08", "matrix": [6, 2], "x": 11.5, "y": 1.25},
+ {"label": "R09", "matrix": [6, 3], "x": 12.5, "y": 1},
+ {"label": "R10", "matrix": [6, 4], "x": 13.5, "y": 1.25},
+ {"label": "R11", "matrix": [6, 5], "x": 14.5, "y": 1.75},
+ {"label": "R12", "matrix": [6, 6], "x": 15.5, "y": 1.75},
+ {"label": "L18", "matrix": [2, 6], "x": 0, "y": 2.75},
+ {"label": "L17", "matrix": [2, 5], "x": 1, "y": 2.75},
+ {"label": "L16", "matrix": [2, 4], "x": 2, "y": 2.25},
+ {"label": "L15", "matrix": [2, 3], "x": 3, "y": 2},
+ {"label": "L14", "matrix": [2, 2], "x": 4, "y": 2.25},
+ {"label": "L13", "matrix": [2, 1], "x": 5, "y": 2.5},
+ {"label": "R13", "matrix": [7, 1], "x": 10.5, "y": 2.5},
+ {"label": "R14", "matrix": [7, 2], "x": 11.5, "y": 2.25},
+ {"label": "R15", "matrix": [7, 3], "x": 12.5, "y": 2},
+ {"label": "R16", "matrix": [7, 4], "x": 13.5, "y": 2.25},
+ {"label": "R17", "matrix": [7, 5], "x": 14.5, "y": 2.75},
+ {"label": "R18", "matrix": [7, 6], "x": 15.5, "y": 2.75},
+ {"label": "L26", "matrix": [3, 6], "x": 0, "y": 3.75},
+ {"label": "L25", "matrix": [3, 5], "x": 1, "y": 3.75},
+ {"label": "L24", "matrix": [3, 4], "x": 2, "y": 3.25},
+ {"label": "L23", "matrix": [3, 3], "x": 3, "y": 3},
+ {"label": "L22", "matrix": [3, 2], "x": 4, "y": 3.25},
+ {"label": "L21", "matrix": [3, 1], "x": 5, "y": 3.5},
+ {"label": "L20", "matrix": [4, 3], "x": 6, "y": 4},
+ {"label": "L19", "matrix": [3, 0], "x": 7, "y": 4.25},
+ {"label": "R19", "matrix": [8, 0], "x": 8.5, "y": 4.25},
+ {"label": "R20", "matrix": [9, 3], "x": 9.5, "y": 4},
+ {"label": "R21", "matrix": [8, 1], "x": 10.5, "y": 3.5},
+ {"label": "R22", "matrix": [8, 2], "x": 11.5, "y": 3.25},
+ {"label": "R23", "matrix": [8, 3], "x": 12.5, "y": 3},
+ {"label": "R24", "matrix": [8, 4], "x": 13.5, "y": 3.25},
+ {"label": "R26", "matrix": [8, 5], "x": 14.5, "y": 3.75},
+ {"label": "R27", "matrix": [8, 6], "x": 15.5, "y": 3.75},
+ {"label": "L31", "matrix": [4, 4], "x": 2.5, "y": 4.25},
+ {"label": "L30", "matrix": [4, 2], "x": 3.5, "y": 4.25},
+ {"label": "L29", "matrix": [4, 1], "x": 4.5, "y": 4.5},
+ {"label": "L28", "matrix": [4, 5], "x": 5.5, "y": 5},
+ {"label": "L27", "matrix": [4, 0], "x": 6.5, "y": 5.25},
+ {"label": "R27", "matrix": [9, 0], "x": 9, "y": 5.25},
+ {"label": "R28", "matrix": [9, 5], "x": 10, "y": 5},
+ {"label": "R29", "matrix": [9, 1], "x": 11, "y": 4.5},
+ {"label": "R30", "matrix": [9, 2], "x": 12, "y": 4.25},
+ {"label": "R31", "matrix": [9, 4], "x": 13, "y": 4.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/splitkb/halcyon/elora/keymaps/default/keymap.c b/keyboards/splitkb/halcyon/elora/keymaps/default/keymap.c
new file mode 100644
index 0000000000..542314bf21
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/keymaps/default/keymap.c
@@ -0,0 +1,241 @@
+// Copyright 2025 splitkb.com ([email protected])
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY = 0,
+ _DVORAK,
+ _COLEMAK_DH,
+ _NAV,
+ _SYM,
+ _FUNCTION,
+ _ADJUST,
+};
+
+// Aliases for readability
+#define QWERTY DF(_QWERTY)
+#define COLEMAK DF(_COLEMAK_DH)
+#define DVORAK DF(_DVORAK)
+
+#define SYM MO(_SYM)
+#define NAV MO(_NAV)
+#define FKEYS MO(_FUNCTION)
+#define ADJUST MO(_ADJUST)
+
+#define CTL_ESC MT(MOD_LCTL, KC_ESC)
+#define CTL_QUOT MT(MOD_RCTL, KC_QUOTE)
+#define CTL_MINS MT(MOD_RCTL, KC_MINUS)
+#define ALT_ENT MT(MOD_LALT, KC_ENT)
+
+// Note: LAlt/Enter (ALT_ENT) is not the same thing as the keyboard shortcut Alt+Enter.
+// The notation `mod/tap` denotes a key that activates the modifier `mod` when held down, and
+// produces the key `tap` when tapped (i.e. pressed and released).
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * Base Layer: QWERTY
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * |Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
+ * | | | Enter| | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_QWERTY] = LAYOUT(
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC ,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y, KC_U , KC_I , KC_O , KC_P , KC_BSPC,
+ CTL_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H, KC_J , KC_K , KC_L ,KC_SCLN,CTL_QUOT,
+ KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_N, KC_M ,KC_COMM, KC_DOT ,KC_SLSH, KC_RSFT,
+ ADJUST , KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
+ ),
+
+/*
+ * Base Layer: Dvorak
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | Tab | ' " | , < | . > | P | Y | | F | G | C | R | L | Bksp |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * |Ctrl/Esc| A | O | E | U | I | | D | H | T | N | S |Ctrl/- _|
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | LShift | ; : | Q | J | K | X | [ { |CapsLk| |F-keys| ] } | B | M | W | V | Z | RShift |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
+ * | | | Enter| | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_DVORAK] = LAYOUT(
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC ,
+ KC_TAB ,KC_QUOTE,KC_COMM, KC_DOT, KC_P , KC_Y , KC_F, KC_G , KC_C , KC_R , KC_L , KC_BSPC,
+ CTL_ESC , KC_A , KC_O , KC_E , KC_U , KC_I , KC_D, KC_H , KC_T , KC_N , KC_S , CTL_MINS,
+ KC_LSFT ,KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_B, KC_M , KC_W , KC_V , KC_Z , KC_RSFT,
+ ADJUST, KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
+ ),
+
+/*
+ * Base Layer: Colemak DH
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | Tab | Q | W | F | P | B | | J | L | U | Y | ; : | Bksp |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * |Ctrl/Esc| A | R | S | T | G | | M | N | E | I | O |Ctrl/' "|
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | LShift | Z | X | C | D | V | [ { |CapsLk| |F-keys| ] } | K | H | , < | . > | / ? | RShift |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
+ * | | | Enter| | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_COLEMAK_DH] = LAYOUT(
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC ,
+ KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_B , KC_J, KC_L , KC_U , KC_Y ,KC_SCLN, KC_BSPC,
+ CTL_ESC , KC_A , KC_R , KC_S , KC_T , KC_G , KC_M, KC_N , KC_E , KC_I , KC_O , CTL_QUOT,
+ KC_LSFT , KC_Z , KC_X , KC_C , KC_D , KC_V , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_K, KC_H ,KC_COMM, KC_DOT ,KC_SLSH, KC_RSFT,
+ ADJUST, KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
+ ),
+
+/*
+ * Nav Layer: Media, navigation
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | | | | | | | PgUp | Home | ↑ | End | VolUp| Delete |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | GUI | Alt | Ctrl | Shift| | | PgDn | ← | ↓ | → | VolDn| Insert |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | | | | | | |ScLck | | | | Pause|M Prev|M Play|M Next|VolMut| PrtSc |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | | | | | | | |
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_NAV] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_VOLU, KC_DEL,
+ _______, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_INS,
+ _______, _______, _______, _______, _______, _______, _______, KC_SCRL, _______, _______,KC_PAUSE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_PSCR,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/*
+ * Sym Layer: Numbers and symbols
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | | \ | : | ; | - | [ | { | | | | } | ] | _ | , | . | / | ? |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | | | | | | | |
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_SYM] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL ,
+ KC_TILD , KC_EXLM, KC_AT , KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS,
+ KC_PIPE , KC_BSLS, KC_COLN, KC_SCLN, KC_MINS, KC_LBRC, KC_LCBR, _______, _______, KC_RCBR, KC_RBRC, KC_UNDS, KC_COMM, KC_DOT, KC_SLSH, KC_QUES,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/*
+ * Function Layer: Function keys
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | F9 | F10 | F11 | F12 | | | | | | | | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | F5 | F6 | F7 | F8 | | | | Shift| Ctrl | Alt | GUI | |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | F1 | F2 | F3 | F4 | | | | | | | | | | | | |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | | | | | | | |
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_FUNCTION] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_F9 , KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , _______, _______, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, _______,
+ _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/*
+ * Adjust Layer: Default layer settings, RGB
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | Reset | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | | |QWERTY| | | | | | | | | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | | |Dvorak| | | | TOG | SAI | HUI | VAI | MOD | |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | | |Colmak| | | | | | | | | SAD | HUD | VAD | RMOD | |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | | | | | | | |
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_ADJUST] = LAYOUT(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, QWERTY , _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, DVORAK , _______, _______, RM_TOGG, RM_SATU, RM_HUEU, RM_VALU, RM_NEXT, _______,
+ _______, _______, _______, COLEMAK, _______, _______,_______, _______, _______, _______, _______, RM_SATD, RM_HUED, RM_VALD, RM_PREV, _______,
+ _______, _______, _______,_______, _______, _______, _______, _______, _______, _______
+ ),
+
+// /*
+// * Layer template
+// *
+// * ,-------------------------------------------. ,-------------------------------------------.
+// * | | | | | | | | | | | | | |
+// * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+// * | | | | | | | | | | | | | |
+// * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+// * | | | | | | | | | | | | | |
+// * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+// * | | | | | | | | | | | | | | | | | |
+// * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+// * | | | | | | | | | | | |
+// * | | | | | | | | | | | |
+// * `----------------------------------' `----------------------------------'
+// */
+// [_LAYERINDEX] = LAYOUT(
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+// ),
+//
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_PGDN, KC_PGUP) },
+ [1] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
+ [2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
+ [3] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
+ [4] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
+ [5] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
+ [6] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
+};
+#endif
diff --git a/keyboards/splitkb/halcyon/elora/keymaps/default/readme.md b/keyboards/splitkb/halcyon/elora/keymaps/default/readme.md
new file mode 100644
index 0000000000..bd386bfa39
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/keymaps/default/readme.md
@@ -0,0 +1,262 @@
+# Halcyon Elora's Default Keymap
+
+The default keymap contains 5 layers which allows it to include all keys found on an ANSI layout TKL keyboard plus media keys.
+Hardware features of the Elora such as rotary encoders and underglow are also supported.
+
+The Elora keymap is in essence identical to the Kyria keymap, just with an additional number row. A deep dive into the keymap is provided there.
+
+The five different layers are the following:
+1. Base layer (QWERTY, Colemak-DH or Dvorak)
+2. Navigation layer
+3. Symbols/Numbers layer
+4. Function layer
+5. Adjust layer
+
+## Base layer(s)
+```
+Base Layer: -
+
+,-------------------------------------------. ,-------------------------------------------.
+| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| Tab | - | - | - | - | - | | - | - | - | - | - | Bksp |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+|Ctrl/Esc| - | - | - | - | - | | - | - | - | - | - |Ctrl/ - |
+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+| LShift | - | - | - | - | - | [ { |CapsLk| |F-Keys| ] } | - | - | - | - | - | RShift |
+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
+ | | | Enter| | | | | | | | |
+ `----------------------------------' `----------------------------------'
+```
+Three different well-known keyboard layouts are provided to fill in the placeholder `-` keys: QWERTY, Colemak-DH, and Dvorak. The default layer can be changed at runtime, more info on that in the section on the [adjust layer](#adjust-layer).
+
+For the rest of this write-up, the base layer will be assumed to be QWERTY and will be used as a reference to describe physical keys, e.g. “<kbd>B</kbd> key” vs, the much more verbose, “lower inner index key”.
+
+```
+Base Layer: QWERTY
+
+,-------------------------------------------. ,-------------------------------------------.
+| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
+ | | | Enter| | | | | | | | |
+ `----------------------------------' `----------------------------------'
+```
+
+Aside from variations in the alpha cluster, the rest of the base keys remain the same and are designed to feel familiar.
+
+![Step-by-step animation of the transformation of an ortholinear TKL to a Kyria](https://i.imgur.com/uVDCOek.gif)
+
+<details>
+After making transformations to the classic ANSI US QWERTY TKL 60% to arrive to the layout of the Elora, as illustrated in the animation above, the result looks like this:
+
+```
+,-------------------------------------------. ,-------------------------------------------.
+| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| Cap Lk | A | S | D | F | G | | H | J | K | L | ; : | ' " |
+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+| LShift | Z | X | C | V | B | | | | | | N | M | , < | . > | / ? | RShift |
+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ | LCtrl| LGUI | LAlt | Space| | | | Space| AltGr| RGUI | Menu |
+ | | | | | | | | | | | |
+ `----------------------------------' '----------------------------------'
+```
+
+First thing to notice is the presence of blank keys. To fill in the blank keys above the <kbd>Space</kbd> keys, we can take inspiration from other split keyboards featuring an extra inner index column on each half. A common mapping for those kind of keys are the bracket keys that got removed in the fourth step of the animated transformation. The thumb keys besides <kbd>Space</kbd>s is prime real estate for dedicated layer-switching keys. It doesn't matter on which side is assigned the sym-layer-switch key but it helps to keep the nav-layer-switch on the left in order to keep the arrow keys on the right side like on a classic keyboard, so we'll put nav on the left and sym on the right. We'll address the remaining blank thumb keys later.
+
+The base layer is starting to form but there remains some flaws. One glaring issue is the position of Control. Control is a very commonly used function but the key on which it sits right now is way too tucked in under the hand to be able to press it comfortably with either the thumb or the pinky from resting position. In fact, installing a rotary encoder there is a common move among Elora users and I guarantee you that activating Control by holding down a rotary encoder does not spark joy. Instead, let's employ a popular trick that involves remapping the current Caps Lock key, which is positioned at a comfortable position on the keyboard, to Control.
+
+We can go further though; a variant of this trick makes the Control key produce Escape when tapped. This is called a “modtap”. There is no use to tapping Control by itself without chording it with another key and there is no use to holding down the Esc key so why not combine the two into a single key?
+
+All of this leaves us with three blank keys.
+
+```
+,-------------------------------------------. ,-------------------------------------------.
+| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : | ' " |
+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+| LShift | Z | X | C | V | B | [ { | | | | ] } | N | M | , < | . > | / ? | RShift |
+`--------+-------------+--------------------+------+------| |------+------+--------------------+------+---------------'
+ | | LGUI | LAlt | Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
+ | | | | | | | | | | | |
+ `----------------------------------' '----------------------------------'
+```
+
+These keys are not easily reachable while touch typing (that is, not reachable without picking up your hand) and should thus be associated with functions that you are not likely to be typed within a stream of text. The idea is that if you have to pick up your hand to hit a key, you want it to be at a time when you are likely to be pausing your interaction with the machine, rather than in the midst of a flurry of typing. They're thus well suited for accessing the adjust layer and the function layer. We can also toss in Caps Lock even though it is an editing-type function that gets used within a stream of text because shouting in ALL-CAPS should be a deliberate action.
+
+```
+,-------------------------------------------. ,-------------------------------------------.
+| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : | ' " |
+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ |Adjust| LGUI | LAlt | Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
+ | | | | | | | | | | | |
+ `----------------------------------' `----------------------------------'
+```
+
+The next glaring issue is the absence of an Enter key on the current base layer this far. Enter is a very frequently used key so it deserves to be placed at a good spot in the keymap. The best way to insert it in the keymap with minimal changes to the current layout is to use modtaps. A tempting solution is to turn the <kbd>RShift</kbd> key into a <kbd>RShift/Enter</kbd> modtap but that can result in chat messages sent too frustratingly early when you're not used to it. Using GUI is also sub-optimal because tapping the GUI modifier actually has a use as opposed to taps of the Control or the Shift key. Pressing and releasing the GUI key by itself opens the App menu in many desktop environments. The natural choice is thus <kbd>LAlt/Enter</kbd>. That way, Enter is 1u away from resting thumb position and is unlikely to get accidentally activated because Alt is very rarely used in the midst of prose.
+
+Finally, we're one Quality-Of-Life update away from the actual base layer. <kbd>Ctrl/' "</kbd> not only preserves symmetry in the keymap with <kbd>Ctrl/Esc</kbd> but also helps balance the load between your pinkies and invites you to use both hands instead of contortions. Perhaps more importantly, it also frees you from the necessity of picking up your hand, breaking touch typing position and pressing a pinky key with your ring finger in order to execute Ctrl+A or Ctrl+Z. That becomes even more important on a board with such an aggressive pinky columnar stagger like the Elora.
+
+
+```
+,-------------------------------------------. ,-------------------------------------------.
+| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
+ | | | Enter| | | | | | | | |
+ `----------------------------------' `----------------------------------'
+```
+
+</details>
+
+## Navigation layer
+
+```
+Nav Layer: Media, navigation
+
+,-------------------------------------------. ,-------------------------------------------.
+| | | | | | | | | | | | | |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| | | | | | | | PgUp | Home | ↑ | End | VolUp| Delete |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| | GUI | Alt | Ctrl | Shift| | | PgDn | ← | ↓ | → | VolDn| Insert |
+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+| | | | | | | |ScLck | | | | Pause|M Prev|M Play|M Next|VolMut| PrtSc |
+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ | | | | | | | | | | | |
+ | | | | | | | | | | | |
+ `----------------------------------' `----------------------------------'
+```
+
+This is where you'll find all the keys that are generally between the main block of a classic keyboard and the numpad in addition to media controls and modifiers on easy access on the home row for fast and comfortable chording with navigation keys.
+
+Useful mnemonics:
+- “GACS” to remember the order of the modifiers on the left-hand home row
+- <kbd>Scroll Lock</kbd> is on the same key as <kbd>Caps Lock</kbd> because they're both locks
+- <kbd>Delete</kbd> is on the same key as <kbd>Backspace</kbd> because they both erase characters
+- <kbd>Home</kbd> is the leftmost position on the current line so it is above <kbd>←</kbd>. Same logic applies for <kbd>End</kbd>.
+- <kbd>Media Previous</kbd> = ⏮, <kbd>Media Next</kbd> = ⏭
+- <kbd>Page Up</kbd>, <kbd>Page Down</kbd> and <kbd>Volume Up</kbd>, <kbd>Volume Down</kbd> are positioned like the main <kbd>Up</kbd> and <kbd>Down</kbd> keys.
+
+## Sym layer
+```
+Sym Layer: Numbers, symbols
+
+,-------------------------------------------. ,-------------------------------------------.
+| | | | | | | | | | | | | |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+| | | \ | : | ; | - | [ | { | | | | } | ] | _ | , | . | / | ? |
+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ | | | | | | | | | | | |
+ | | | | | | | | | | | |
+ `----------------------------------' `----------------------------------'
+```
+The top row is the unshifted num row, the home row of the layer is the shifted num row and the bottom row contains the hyphen `-` and the underscore `_` on the best lower row spot because of how frequent they are as well as redundant symbols that are already present on the base layer but are reproduced here to avoid juggling back and forth between base, shift, and sym when typing a string of symbols.
+
+The layout of the first two rows needs no introduction, you're already used to them but it's worth looking into the structure of the bottom row.
+
+The two halves are mirrored in a sense. On the right, you can find <kbd>,</kbd> <kbd>.</kbd> <kbd>/</kbd> at their usual spots with the addition of <kbd>Shift</kbd>+<kbd>/</kbd>=<kbd>?</kbd> to the right of the <kbd>/</kbd> key to remove the need to press simultaneously <kbd>Sym</kbd> and a <kbd>Shift</kbd> key to access `?`.
+
+Now, if you look at the left side, you'll notice that the mirror of <kbd>,</kbd> is <kbd>;</kbd>, the mirror of <kbd>.</kbd> is <kbd>:</kbd> and the mirror of <kbd>/</kbd> is <kbd>\\</kbd>. The same logic used for <kbd>Shift</kbd>+<kbd>/</kbd>=<kbd>?</kbd> also applies to <kbd>Shift</kbd>+<kbd>\\</kbd>=<kbd>|</kbd>.
+
+In case you wish to combine <kbd>Shift</kbd> with a symbol key anyways, you can hold down <kbd>Shift</kbd> on the base layer with your pinky, activate <kbd>Sym</kbd> with your right thumb and while still holding down the <kbd>Shift</kbd> key, tap your desired symbol key. Same thing if you need <kbd>Ctrl</kbd>+<kbd>Digit</kbd>.
+
+## Function layer
+```
+Function Layer: Function keys
+
+,-------------------------------------------. ,-------------------------------------------.
+| | | | | | | | | | | | | |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| | F9 | F10 | F11 | F12 | | | | | | | | |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| | F5 | F6 | F7 | F8 | | | | Shift| Ctrl | Alt | GUI | |
+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+| | F1 | F2 | F3 | F4 | | | | | | | | | | | | |
+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ | | | | | | | | | | | |
+ | | | | | | | | | | | |
+ `----------------------------------' `----------------------------------'
+```
+In a similar fashion to the nav layer, pressing down `FKEYS` with the right thumb enables a numpad of function keys on the opposite hand and modifiers on the right-hand home row. Once again, mirror symmetry is leveraged in this keymap for the order of the right-hand modifiers.
+
+The <kbd>Alt</kbd> modifier, despite being situated on the right half of the keyboard is *not* `KC_RALT`, it is `KC_LALT`. `KC_RALT` is actually the <kbd>AltGr</kbd> key which generally acts very differently to the left <kbd>Alt</kbd> key. Keyboard shortcuts involving <kbd>AltGr</kbd>+<kbd>F#</kbd> are rare and infrequent as opposed to the much more common <kbd>Alt</kbd>+<kbd>F#</kbd> shortcuts. Consequently, `KC_LALT` was chosen for the function layer.
+
+Since there are more than 10 function keys, the cluster of F-keys does not follow the usual 3×3+1 numpad arrangement.
+
+
+## Adjust layer
+```
+Adjust Layer: Default layer settings, RGB
+
+,-------------------------------------------. ,-------------------------------------------.
+| | | | | | | | | | | | | |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| | | |QWERTY| | | | | | | | | |
+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
+| | | |Dvorak| | | | TOG | SAI | HUI | VAI | MOD | |
+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+| | | |Colmak| | | | | | | | | SAD | HUD | VAD | RMOD | |
+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ | | | | | | | | | | | |
+ | | | | | | | | | | | |
+ `----------------------------------' `----------------------------------'
+```
+
+Default layer settings on the left and various RGB underglow controls on the right.
+
+The default layer settings are lined up on the middle finger column because the home middle finger key is <kbd>D</kbd> on QWERTY (like the “D” in “Dvorak”) and the lower middle finger key is <kbd>C</kbd> on QWERTY (like the “C” in “Colemak”). I can hear you say that “QWERTY” doesn't start with “E” but Dvorak and Colemak were already aligned in a column so the QWERTY may as well join the formation.
+
+NOTE: The default layer settings set by those keys are *NOT* stored in EEPROM and thus do not persist through boots. If you wish to change the default layer in a non-volatile manner, either change the order of the layers in the firmware, for example like so if you want to set Dvorak as the new default:
+```c
+enum layers {
+ _DVORAK = 0,
+ _QWERTY,
+ _COLEMAK_DH,
+ _NAV,
+ _SYM,
+ _FUNCTION,
+ _ADJUST
+};
+```
+or re-define the `QWERTY`, `COLEMAK` and `DVORAK` keys to point to custom keycodes starting on `SAFE_RANGE` and calling the `set_single_persistent_default_layer` function inside of `process_record_user`.
+
+## Hardware Features
+
+### Rotary Encoder
+The left rotary encoder is programmed to control the volume whereas the right encoder sends <kbd>PgUp</kbd> or <kbd>PgDn</kbd> on every turn.
+
+## Going further…
+
+This default keymap can be used as is, unchanged, as a daily driver for your Elora but you're invited to treat your keymap like a bonsai. At the beginning, it's just like the default keymap but from time to time, you can tweak it a little. Cut a little key here, let another combo grow there. Slowly but surely it will be a unique keymap that will fit you like a glove.
+
+Check out the #keymap-ideas channel on the official SplitKB Discord server for inspiration.
diff --git a/keyboards/splitkb/halcyon/elora/keymaps/default/rules.mk b/keyboards/splitkb/halcyon/elora/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ee32568148
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/splitkb/halcyon/elora/readme.md b/keyboards/splitkb/halcyon/elora/readme.md
new file mode 100644
index 0000000000..9970d31f43
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/readme.md
@@ -0,0 +1,31 @@
+# Halcyon Elora
+
+![splitkb/halcyon/elora](https://i.imgur.com/TbFWzsh.png)
+
+The Halcyon Elora rev2 is the second Elora revision and the second keyboard in our Halcyon range. Similar to Aurora, all keyboards in the series share the same feature set. The key highlights:
+
+- Halcyon keyboards come preassembled! You won't need a soldering iron.
+- You'll be able to install [VIK](https://github.com/sadekbaroudi/vik) modules.
+- It'll come fully documented, which includes the unboxing, assembly (with only a screwdriver), first installation and some advanced use cases.
+- Both the connection to the host device as well as the interconnect between the keyboard halves use USB C.
+- The controller has full ESD protection on all USB C ports, as well as all switch matrix GPIO!
+- The controller is interchangable. If part of your keyboard ever breaks, we can replace just the bits that need replacing.
+
+* Keyboard Maintainer: [splitkb.com](https://github.com/splitkb.com)
+* Hardware Availability: [splitkb.com](https://splitkb.com).
+
+Make example for this keyboard (after setting up your build environment):
+
+ make splitkb/halcyon/elora/rev2:default
+
+The keyboard can be flashed by copying the resulting `.uf2` file onto the `RPI-RP2` flash drive.
+
+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:
+
+* **Reset button**: Double-tap the reset button at the top of the controller, right above the USB-C port.
+* **Bootloader reset**: Hold down the "Boot" button and plug in the keyboard.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available. \ No newline at end of file
diff --git a/keyboards/splitkb/halcyon/elora/rev2/config.h b/keyboards/splitkb/halcyon/elora/rev2/config.h
new file mode 100644
index 0000000000..b5cd6f95f2
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/config.h
@@ -0,0 +1,32 @@
+// Copyright 2025 splitkb.com ([email protected])
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// Make it easier to enter the bootloader
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+
+// UART1, communication between the two halves
+#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode.
+#define SERIAL_USART_TX_PIN GP28 // USART TX pin
+#define SERIAL_USART_RX_PIN GP29 // USART RX pin
+#define SERIAL_PIO_USE_PIO1 // Use PIO1 as PIO0 is used for WS2812 driver
+
+// VBUS detection
+#define USB_VBUS_PIN GP1
+
+//// VIK
+
+// GPIO1 = GP27
+// GPIO2 = GP26
+// CS = GP13
+
+#define I2C_DRIVER I2C0
+#define I2C1_SDA_PIN GP16
+#define I2C1_SCL_PIN GP17
+
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN GP14
+#define SPI_MOSI_PIN GP15
+#define SPI_MISO_PIN GP12
diff --git a/keyboards/splitkb/halcyon/elora/rev2/halconf.h b/keyboards/splitkb/halcyon/elora/rev2/halconf.h
new file mode 100644
index 0000000000..fd95e15f83
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/halconf.h
@@ -0,0 +1,14 @@
+// Copyright 2025 splitkb.com ([email protected])
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+//// VIK
+
+#define HAL_USE_I2C TRUE
+
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next <halconf.h>
diff --git a/keyboards/splitkb/halcyon/elora/rev2/keyboard.json b/keyboards/splitkb/halcyon/elora/rev2/keyboard.json
new file mode 100644
index 0000000000..c2dc711f07
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/keyboard.json
@@ -0,0 +1,177 @@
+{
+ "keyboard_name": "Halcyon Elora rev2",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP22", "pin_b": "GP18", "resolution": 2}
+ ]
+ },
+ "features": {
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP24", "GP19", "GP20", "GP25", "GP4", "GP9", "GP10"],
+ "rows": ["GP8", "GP11", "GP7", "GP6", "GP5"]
+ },
+ "processor": "RP2040",
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_color": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"x": 75, "y": 2, "flags": 2},
+ {"x": 50, "y": 1, "flags": 2},
+ {"x": 14, "y": 4, "flags": 2},
+ {"x": 25, "y": 45, "flags": 2},
+ {"x": 58, "y": 49, "flags": 2},
+ {"x": 94, "y": 53, "flags": 2},
+ {"matrix": [4, 0], "x": 94, "y": 64, "flags": 4},
+ {"matrix": [4, 5], "x": 79, "y": 61, "flags": 4},
+ {"matrix": [4, 1], "x": 65, "y": 55, "flags": 4},
+ {"matrix": [4, 2], "x": 51, "y": 52, "flags": 4},
+ {"matrix": [4, 4], "x": 36, "y": 52, "flags": 4},
+ {"matrix": [3, 0], "x": 101, "y": 52, "flags": 4},
+ {"matrix": [4, 3], "x": 87, "y": 49, "flags": 4},
+ {"matrix": [3, 1], "x": 72, "y": 43, "flags": 4},
+ {"matrix": [3, 2], "x": 58, "y": 40, "flags": 4},
+ {"matrix": [3, 3], "x": 43, "y": 37, "flags": 4},
+ {"matrix": [3, 4], "x": 29, "y": 40, "flags": 4},
+ {"matrix": [3, 5], "x": 14, "y": 46, "flags": 4},
+ {"matrix": [3, 6], "x": 0, "y": 46, "flags": 4},
+ {"matrix": [2, 1], "x": 72, "y": 30, "flags": 4},
+ {"matrix": [2, 2], "x": 58, "y": 27, "flags": 4},
+ {"matrix": [2, 3], "x": 43, "y": 24, "flags": 4},
+ {"matrix": [2, 4], "x": 29, "y": 27, "flags": 4},
+ {"matrix": [2, 5], "x": 14, "y": 34, "flags": 4},
+ {"matrix": [2, 6], "x": 0, "y": 34, "flags": 4},
+ {"matrix": [1, 1], "x": 72, "y": 18, "flags": 4},
+ {"matrix": [1, 2], "x": 58, "y": 15, "flags": 4},
+ {"matrix": [1, 3], "x": 43, "y": 12, "flags": 4},
+ {"matrix": [1, 4], "x": 29, "y": 15, "flags": 4},
+ {"matrix": [1, 5], "x": 14, "y": 21, "flags": 4},
+ {"matrix": [1, 6], "x": 0, "y": 21, "flags": 4},
+ {"matrix": [0, 1], "x": 72, "y": 6, "flags": 4},
+ {"matrix": [0, 2], "x": 48, "y": 3, "flags": 4},
+ {"matrix": [0, 3], "x": 43, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 29, "y": 3, "flags": 4},
+ {"matrix": [0, 5], "x": 14, "y": 9, "flags": 4},
+ {"matrix": [0, 6], "x": 0, "y": 9, "flags": 4},
+ {"x": 149, "y": 2, "flags": 2},
+ {"x": 174, "y": 1, "flags": 2},
+ {"x": 210, "y": 4, "flags": 2},
+ {"x": 199, "y": 45, "flags": 2},
+ {"x": 166, "y": 49, "flags": 2},
+ {"x": 130, "y": 53, "flags": 2},
+ {"matrix": [9, 0], "x": 130, "y": 64, "flags": 4},
+ {"matrix": [9, 5], "x": 145, "y": 61, "flags": 4},
+ {"matrix": [9, 1], "x": 159, "y": 55, "flags": 4},
+ {"matrix": [9, 2], "x": 173, "y": 52, "flags": 4},
+ {"matrix": [9, 4], "x": 188, "y": 52, "flags": 4},
+ {"matrix": [8, 0], "x": 123, "y": 52, "flags": 4},
+ {"matrix": [9, 3], "x": 137, "y": 49, "flags": 4},
+ {"matrix": [8, 1], "x": 152, "y": 43, "flags": 4},
+ {"matrix": [8, 2], "x": 166, "y": 40, "flags": 4},
+ {"matrix": [8, 3], "x": 181, "y": 37, "flags": 4},
+ {"matrix": [8, 4], "x": 195, "y": 40, "flags": 4},
+ {"matrix": [8, 5], "x": 210, "y": 46, "flags": 4},
+ {"matrix": [8, 6], "x": 224, "y": 46, "flags": 4},
+ {"matrix": [7, 1], "x": 152, "y": 30, "flags": 4},
+ {"matrix": [7, 2], "x": 166, "y": 27, "flags": 4},
+ {"matrix": [7, 3], "x": 181, "y": 24, "flags": 4},
+ {"matrix": [7, 4], "x": 195, "y": 27, "flags": 4},
+ {"matrix": [7, 5], "x": 210, "y": 34, "flags": 4},
+ {"matrix": [7, 6], "x": 224, "y": 34, "flags": 4},
+ {"matrix": [6, 1], "x": 152, "y": 18, "flags": 4},
+ {"matrix": [6, 2], "x": 166, "y": 15, "flags": 4},
+ {"matrix": [6, 3], "x": 181, "y": 12, "flags": 4},
+ {"matrix": [6, 4], "x": 195, "y": 15, "flags": 4},
+ {"matrix": [6, 5], "x": 210, "y": 21, "flags": 4},
+ {"matrix": [6, 6], "x": 224, "y": 21, "flags": 4},
+ {"matrix": [5, 1], "x": 152, "y": 6, "flags": 4},
+ {"matrix": [5, 2], "x": 166, "y": 3, "flags": 4},
+ {"matrix": [5, 3], "x": 181, "y": 0, "flags": 4},
+ {"matrix": [5, 4], "x": 195, "y": 3, "flags": 4},
+ {"matrix": [5, 5], "x": 210, "y": 9, "flags": 4},
+ {"matrix": [5, 6], "x": 224, "y": 9, "flags": 4}
+ ],
+ "max_brightness": 128,
+ "sleep": true,
+ "split_count": [37, 37]
+ },
+ "split": {
+ "enabled": true,
+ "handedness": {
+ "pin": "GP23"
+ },
+ "matrix_pins": {
+ "right": {
+ "cols": ["GP10", "GP9", "GP4", "GP25", "GP20", "GP19", "GP24"],
+ "rows": ["GP8", "GP11", "GP7", "GP6", "GP5"]
+ }
+ },
+ "serial": {
+ "driver": "vendor"
+ },
+ "transport": {
+ "sync": {
+ "matrix_state": true
+ }
+ }
+ },
+ "usb": {
+ "pid": "0xA392"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP3"
+ }
+}
diff --git a/keyboards/splitkb/halcyon/elora/rev2/mcuconf.h b/keyboards/splitkb/halcyon/elora/rev2/mcuconf.h
new file mode 100644
index 0000000000..126697a4a0
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/mcuconf.h
@@ -0,0 +1,14 @@
+// Copyright 2025 splitkb.com ([email protected])
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+//// VIK
+
+#undef RP_I2C_USE_I2C0
+#define RP_I2C_USE_I2C0 TRUE
+
+#undef RP_SPI_USE_SPI1
+#define RP_SPI_USE_SPI1 TRUE
diff --git a/keyboards/splitkb/halcyon/elora/rev2/rev2.c b/keyboards/splitkb/halcyon/elora/rev2/rev2.c
new file mode 100644
index 0000000000..e0a64ae9a4
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/rev2.c
@@ -0,0 +1,28 @@
+// Copyright 2025 splitkb.com ([email protected])
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+ if (index == 0) {
+ // Volume control
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) {
+ // Page up/Page down
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+ return false;
+}
+#endif
diff --git a/keyboards/umbra/hotswap/config.h b/keyboards/umbra/hotswap/config.h
new file mode 100644
index 0000000000..56ca17df40
--- /dev/null
+++ b/keyboards/umbra/hotswap/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2024 Joseph Williams IV "IV Works" <[email protected]>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#define WS2812_EXTERNAL_PULLUP
+
diff --git a/keyboards/umbra/hotswap/keyboard.json b/keyboards/umbra/hotswap/keyboard.json
new file mode 100644
index 0000000000..4b53432caa
--- /dev/null
+++ b/keyboards/umbra/hotswap/keyboard.json
@@ -0,0 +1,250 @@
+{
+ "manufacturer": "IV Works",
+ "keyboard_name": "Umbra",
+ "maintainer": "IV Works",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "A2", "pin_b": "A1", "resolution": 2}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "key_lock": true,
+ "mousekey": true,
+ "encoder": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["B2", "A4", "A3", "A0", "F1", "F0", "C15", "C14", "C13", "B9", "B8", "B7", "A15", "B3"],
+ "rows": ["B14", "A9", "B6", "B5", "B4"]
+ },
+ "processor": "STM32F072",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 17
+ },
+ "url": "https://iv-works.com/i",
+ "usb": {
+ "device_version": "0.0.5",
+ "pid": "0x0102",
+ "vid": "0x7786"
+ },
+ "ws2812": {
+ "pin": "A8"
+ },
+ "community_layouts": ["60_ansi_tsangan_split_bs_rshift", "60_hhkb"],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": "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": "Caps Lock", "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": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "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, 4], "x":4, "y":4, "w":3},
+ {"label": "Space", "matrix": [4, 6], "x":7, "y":4},
+ {"label": "Space", "matrix": [4, 8], "x":8, "y":4, "w":3},
+ {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": "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": "Caps Lock", "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": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "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, 6], "x":4, "y":4, "w": 7},
+ {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": "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": "Bsp", "matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"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": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Alt", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Win", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x":4, "y":4, "w": 7},
+ {"label": "Win", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Alt", "matrix": [4, 12], "x": 12.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/umbra/hotswap/keymaps/default/keymap.c b/keyboards/umbra/hotswap/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9562681cb2
--- /dev/null
+++ b/keyboards/umbra/hotswap/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2024 Joseph Williams IV "IV Works" <[email protected]>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_all(
+ QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL,
+ KC_TRNS, UG_TOGG, KC_UP, UG_NEXT, UG_PREV, UG_HUED, UG_HUEU, UG_SATD, UG_SATU, UG_VALD, UG_VALU, KC_HOME, KC_PGUP, KC_VOLU,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_VOLD,
+ KC_TRNS, KC_SLEP, KC_MYCM, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_PGDN, KC_PGUP) }
+};
+#endif
diff --git a/keyboards/umbra/hotswap/keymaps/default/rules.mk b/keyboards/umbra/hotswap/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ee32568148
--- /dev/null
+++ b/keyboards/umbra/hotswap/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/umbra/hotswap/matrix_diagram.md b/keyboards/umbra/hotswap/matrix_diagram.md
new file mode 100644
index 0000000000..a3ff87cd21
--- /dev/null
+++ b/keyboards/umbra/hotswap/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for IV Works Umbra Hotswap
+
+```
+ ┌───────┐
+ 2u Backspace │1D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │1D │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │2C │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2D │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+│30 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴───┴───┼───┴┬────┬┴───┤
+│40 │41 │42 │46 │4B │4C │4D │ Tsangan/WKL/HHKB
+└────┴────┴────┴─────────────────────────────┴────┴────┴────┘
+┌─────┬───┬─────┬───────────┬───┬───────────┬─────┬───┬─────┐
+│40 │41 │42 │44 │46 │48 │4B │4C │4D │ 7u split spacebar
+└─────┴───┴─────┴───────────┴───┴───────────┴─────┴───┴─────┘
+┌─────┬───┬───────────────────────────────────────┬───┬─────┐
+│40 │41 │46 │4C │4D │ 10u Spacebar
+└─────┴───┴───────────────────────────────────────┴───┴─────┘
+```
diff --git a/keyboards/umbra/hotswap/readme.md b/keyboards/umbra/hotswap/readme.md
new file mode 100644
index 0000000000..bf86db069b
--- /dev/null
+++ b/keyboards/umbra/hotswap/readme.md
@@ -0,0 +1,26 @@
+# UMBRA
+
+![UMBRA](https://i.imgur.com/2d94i6H.jpg)
+
+A multi-mount 60% keyboard with PCB choice featuring popular layouts, underglow, and rotary option.
+
+* Keyboard Maintainer: [IV Works](https://www.iv-works.com/)
+* Hardware Supported: [UMBRA](https://www.iv-works.com/i)
+* Hardware Availability: [Shop](https://iv-works.com/product-category/umbra/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make umbra/hotswap:default
+
+Flashing example for this keyboard:
+
+ make umbra/hotswap: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
+
+How to enter bootloader (DFU):
+* PCB will arrive flashed. With USB plugged in press Fn+Esc to enter DFU. Flash the firmware and replug the USB cable to fresh boot the PCB.
+
+* If that method fails please locate the RESET header on the back of the PCB just right of the MCU. Short the 2 plated holes for 2 seconds to enter DFU. Flash the firmware and replug the USB cable to fresh boot the PCB. \ No newline at end of file
diff --git a/keyboards/umbra/hotswap/rules.mk b/keyboards/umbra/hotswap/rules.mk
new file mode 100644
index 0000000000..04fe1eba2a
--- /dev/null
+++ b/keyboards/umbra/hotswap/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -p FFFF -v FFFF
diff --git a/keyboards/umbra/solder/config.h b/keyboards/umbra/solder/config.h
new file mode 100644
index 0000000000..56ca17df40
--- /dev/null
+++ b/keyboards/umbra/solder/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2024 Joseph Williams IV "IV Works" <[email protected]>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#define WS2812_EXTERNAL_PULLUP
+
diff --git a/keyboards/umbra/solder/keyboard.json b/keyboards/umbra/solder/keyboard.json
new file mode 100644
index 0000000000..4f014b2e94
--- /dev/null
+++ b/keyboards/umbra/solder/keyboard.json
@@ -0,0 +1,1235 @@
+{
+ "manufacturer": "IV Works",
+ "keyboard_name": "Umbra",
+ "maintainer": "IV Works",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "A2", "pin_b": "A1", "resolution": 2}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "key_lock": true,
+ "mousekey": true,
+ "encoder": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["B2", "A5", "A4", "A3", "F1", "F0", "C15", "C14", "C13", "B9", "B8", "B7", "A15", "B3"],
+ "rows": ["B14", "A9", "B6", "B5", "B4"]
+ },
+ "processor": "STM32F072",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 17
+ },
+ "url": "https://iv-works.com/",
+ "usb": {
+ "device_version": "0.0.5",
+ "pid": "0x0101",
+ "vid": "0x7786"
+ },
+ "ws2812": {
+ "pin": "A8"
+ },
+ "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_ansi_tsangan_split_bs_rshift", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"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": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "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": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "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, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Fn", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 14, "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": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "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": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "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, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Fn", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"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": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "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": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "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, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 14, "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": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "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": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Win", "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, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"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": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "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": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"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": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "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": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "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, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Fn", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 14, "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": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "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": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "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, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Fn", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"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": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "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": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "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, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 14, "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": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "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": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "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, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"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": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "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": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 14, "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": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "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": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 14, "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": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "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": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 1], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 2], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 14, "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": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "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": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 1], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Alt", "matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_6u_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"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": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "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": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x":0, "y":4, "w":1.5},
+ {"label": "Win", "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, 6], "x":4, "y":4, "w":6},
+ {"label": "Alt", "matrix": [4, 9], "x":10, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 10], "x":11.5, "y":4},
+ {"label": "Menu", "matrix": [4, 11], "x":12.5, "y":4},
+ {"label": "Fn", "matrix": [4, 12], "x":13.5, "y":4, "w":1.5}
+ ]
+ },
+ "LAYOUT_6u_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 14, "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": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "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": "Enter", "matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x":0, "y":4, "w":1.5},
+ {"label": "Win", "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, 6], "x":4, "y":4, "w":6},
+ {"label": "Alt", "matrix": [4, 9], "x":10, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 10], "x":11.5, "y":4},
+ {"label": "Menu", "matrix": [4, 11], "x":12.5, "y":4},
+ {"label": "Fn", "matrix": [4, 12], "x":13.5, "y":4, "w":1.5}
+ ]
+ },
+ "LAYOUT_6u_iso": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"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": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "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": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": 2.75},
+ {"label": "Ctrl", "matrix": [4, 0], "x":0, "y":4, "w":1.5},
+ {"label": "Win", "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, 6], "x":4, "y":4, "w":6},
+ {"label": "Alt", "matrix": [4, 9], "x":10, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 10], "x":11.5, "y":4},
+ {"label": "Menu", "matrix": [4, 11], "x":12.5, "y":4},
+ {"label": "Fn", "matrix": [4, 12], "x":13.5, "y":4, "w":1.5}
+ ]
+ },
+ "LAYOUT_6u_iso_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": [2, 13], "x": 14, "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": "Enter", "matrix": [3, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "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": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x":0, "y":4, "w":1.5},
+ {"label": "Win", "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, 6], "x":4, "y":4, "w":6},
+ {"label": "Alt", "matrix": [4, 9], "x":10, "y":4, "w":1.5},
+ {"label": "Win", "matrix": [4, 10], "x":11.5, "y":4},
+ {"label": "Menu", "matrix": [4, 11], "x":12.5, "y":4},
+ {"label": "Fn", "matrix": [4, 12], "x":13.5, "y":4, "w":1.5}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "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": "Backspace", "matrix": [2, 13], "x": 14, "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": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "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": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2, "w": 1.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": "Fn", "matrix": [4, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "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, 4], "x": 3.75, "y": 4, "w": 2.25},
+ {"label": "Space", "matrix": [4, 6], "x": 6, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 8], "x": 7.25, "y": 4, "w": 2.75},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/umbra/solder/keymaps/default/keymap.c b/keyboards/umbra/solder/keymaps/default/keymap.c
new file mode 100644
index 0000000000..d987b42da9
--- /dev/null
+++ b/keyboards/umbra/solder/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/*
+Copyright 2024 Joseph Williams IV "IV Works" <[email protected]>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
+// basic function layer
+[1] = LAYOUT_all(
+ QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL,
+ KC_TRNS, UG_TOGG, KC_UP, UG_NEXT, UG_PREV, UG_HUED, UG_HUEU, UG_SATD, UG_SATU, UG_VALD, UG_VALU, KC_HOME, KC_PGUP, KC_VOLU,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_VOLD, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_SLEP, KC_MYCM, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_PGDN, KC_PGUP) }
+};
+#endif
diff --git a/keyboards/umbra/solder/keymaps/default/rules.mk b/keyboards/umbra/solder/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ee32568148
--- /dev/null
+++ b/keyboards/umbra/solder/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/umbra/solder/matrix_diagram.md b/keyboards/umbra/solder/matrix_diagram.md
new file mode 100644
index 0000000000..4135960202
--- /dev/null
+++ b/keyboards/umbra/solder/matrix_diagram.md
@@ -0,0 +1,37 @@
+# Matrix Diagram for IV Works Umbra Solder
+
+```
+ ┌───────┐
+ 2u Backspace │2D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │2D │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ┌──┴┐3D │
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │3D │ │2C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │4D │ ISO Enter
+├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬────┬┴───┤
+│40 │41 │42 │44 │46 │48 │49 │4A │4B │4C │
+└────┴────┴────┴────────┴────┴──────────┴────┴────┴────┴────┘
+┌────────┐ ┌──────────┐
+│30 │ 2.25u LShift 2.75u RShift │3C │
+└────────┘ └──────────┘
+┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
+│40 │41 │42 │46 │49 │4A │4B │4C │ Standard
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │46 │4A │4B │4C │ Tsangan/WKL/HHKB
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+┌─────┬───┬─────┬───────────────────────┬─────┬───┬───┬─────┐
+│40 │41 │42 │46 │49 │4A │4B │4C │ 6U bottom row
+└─────┴───┴─────┴───────────────────────┴─────┴───┴───┴─────┘
+┌─────┬───┬─────┬──────────┬──────┬─────────┬─────┬───┬─────┐
+│40 │41 │42 │44 │46 │48 │4A │4B │4C │ 3U split space
+└─────┴───┴─────┴──────────┴──────┴─────────┴─────┴───┴─────┘
+┌─────┬───┬───────────────────────────────────────┬───┬─────┐
+│40 │41 │46 │4B │4C │ 10U space
+└─────┴───┴───────────────────────────────────────┴───┴─────┘
+
+```
diff --git a/keyboards/umbra/solder/readme.md b/keyboards/umbra/solder/readme.md
new file mode 100644
index 0000000000..61a564578b
--- /dev/null
+++ b/keyboards/umbra/solder/readme.md
@@ -0,0 +1,26 @@
+# UMBRA
+
+![UMBRA](https://i.imgur.com/2d94i6H.jpg)
+
+A multi-mount 60% keyboard with PCB choice featuring popular layouts, underglow, and rotary option.
+
+* Keyboard Maintainer: [IV Works](https://www.iv-works.com/)
+* Hardware Supported: [UMBRA](https://www.iv-works.com/i)
+* Hardware Availability: [Shop](https://iv-works.com/product-category/umbra/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make umbra/solder:default
+
+Flashing example for this keyboard:
+
+ make umbra/solder: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
+
+How to enter bootloader (DFU):
+* PCB will arrive flashed. With USB plugged in press Fn+Esc to enter DFU. Flash the firmware and replug the USB cable to fresh boot the PCB.
+
+* If that method fails please locate the RESET header on the back of the PCB just right of the MCU. Short the 2 plated holes for 2 seconds to enter DFU. Flash the firmware and replug the USB cable to fresh boot the PCB. \ No newline at end of file
diff --git a/keyboards/umbra/solder/rules.mk b/keyboards/umbra/solder/rules.mk
new file mode 100644
index 0000000000..04fe1eba2a
--- /dev/null
+++ b/keyboards/umbra/solder/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -p FFFF -v FFFF
diff --git a/keyboards/umbra/solder/solder.c b/keyboards/umbra/solder/solder.c
new file mode 100644
index 0000000000..ef7581deab
--- /dev/null
+++ b/keyboards/umbra/solder/solder.c
@@ -0,0 +1,35 @@
+/*
+Copyright 2024 Joseph Williams IV "IV Works" <[email protected]>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "solder.h"
+
+void keyboard_pre_init_kb(void) {
+ rgblight_set_effect_range(0, 16);
+ keyboard_pre_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (CAPS_LOCK_ENABLE && res) {
+ if(led_state.caps_lock) {
+ rgblight_sethsv_at(CAPS_LOCK_COLOR, 16);
+ }
+ else{
+ rgblight_sethsv_at(HSV_OFF, 16);
+ }
+ }
+ return res;
+}
diff --git a/keyboards/umbra/solder/solder.h b/keyboards/umbra/solder/solder.h
new file mode 100644
index 0000000000..4a82a87a09
--- /dev/null
+++ b/keyboards/umbra/solder/solder.h
@@ -0,0 +1,22 @@
+/*
+Copyright 2024 Joseph Williams IV "IV Works" <[email protected]>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include "quantum.h"
+
+#define CAPS_LOCK_ENABLE true
+#define CAPS_LOCK_COLOR HSV_GREEN