diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 52dfd718c41..39a8e396bec 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -37,7 +37,7 @@ jobs:
qmk --verbose generate-docs
- name: Deploy
- uses: JamesIves/github-pages-deploy-action@v4.4.2
+ uses: JamesIves/github-pages-deploy-action@v4.4.3
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BASE_BRANCH: master
diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson
index a656288a8fb..f1c1f81e9ad 100644
--- a/data/mappings/keyboard_aliases.hjson
+++ b/data/mappings/keyboard_aliases.hjson
@@ -305,6 +305,9 @@
"kbdfans/kbd67/mkiirgb": {
"target": "kbdfans/kbd67/mkiirgb/v1"
},
+ "keebio/chocopad": {
+ "target": "keebio/chocopad/rev1"
+ },
"keebio/dsp40": {
"target": "keebio/dsp40/rev1"
},
diff --git a/docs/feature_layers.md b/docs/feature_layers.md
index 697064b49ae..e57642071f4 100644
--- a/docs/feature_layers.md
+++ b/docs/feature_layers.md
@@ -64,7 +64,7 @@ There are a number of functions (and variables) related to how you can use or ma
| `layer_move(layer)` | Turns specified layer on, and all other layers off. |
| `layer_on(layer)` | Turns specified layer on, leaves all other layers in existing state. |
| `layer_off(layer)` | Turns specified layer off, leaves all other layers in existing state. |
-| `layer_invert(layer)` | Interverts/toggles the state of the specified layer |
+| `layer_invert(layer)` | Inverts/toggles the state of the specified layer |
| `layer_or(layer_mask)` | Turns on layers based on matching bits between specifed layer and existing layer state. |
| `layer_and(layer_mask)` | Turns on layers based on matching enabled bits between specifed layer and existing layer state. |
| `layer_xor(layer_mask)` | Turns on layers based on non-matching bits between specifed layer and existing layer state. |
diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md
index bc86099f1ff..86dff89eca9 100644
--- a/docs/feature_led_matrix.md
+++ b/docs/feature_led_matrix.md
@@ -433,7 +433,7 @@ The EEPROM for it is currently shared with the RGB Matrix system (it's generally
### Indicators :id=indicators
-If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, you can use the `led_matrix_indicators_kb` or `led_matrix_indicators_user` function for that:
+If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, then you can use the `led_matrix_indicators_kb` function on the keyboard level source file, or `led_matrix_indicators_user` function in the user `keymap.c`.
```c
bool led_matrix_indicators_kb(void) {
if (!led_matrix_indicators_user()) {
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index 75f07b5e64c..822bc8f7348 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -964,7 +964,7 @@ The EEPROM for it is currently shared with the LED Matrix system (it's generally
### Indicators :id=indicators
-If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, you can use the `rgb_matrix_indicators_kb` or `rgb_matrix_indicators_user` function for that:
+If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, then you can use the `rgb_matrix_indicators_kb` function on the keyboard level source file, or `rgb_matrix_indicators_user` function in the user `keymap.c`.
```c
bool rgb_matrix_indicators_kb(void) {
if (!rgb_matrix_indicators_user()) {
diff --git a/docs/other_vscode.md b/docs/other_vscode.md
index 83ae6e6ed06..49d5035b08e 100644
--- a/docs/other_vscode.md
+++ b/docs/other_vscode.md
@@ -96,7 +96,7 @@ There are a number of extensions that you may want to install:
* [clangd](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) - _[Optional]_ - This is the language server for C/C++ that VS Code uses. It provides IntelliSense and other features.
* [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) - _[Optional]_ - Helps to keep the code to the QMK Coding Conventions.
* [GitHub Markdown Preview](https://marketplace.visualstudio.com/items?itemName=bierner.github-markdown-preview) - _[Optional]_ - Makes the markdown preview in VS Code more like GitHub's.
-* [VS Live Share Extension Pack](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack) - _[Optional]_ - This extension allows somebody else to access your workspace (or you to access somebody else's workspace) and help out. This is great if you're having issues and need some help from somebody.
+* [VS Live Share Extension Pack](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - _[Optional]_ - This extension allows somebody else to access your workspace (or you to access somebody else's workspace) and help out. This is great if you're having issues and need some help from somebody.
Restart once you've installed any extensions.
diff --git a/docs/pr_checklist.md b/docs/pr_checklist.md
index 65584a95381..d22e912e86a 100644
--- a/docs/pr_checklist.md
+++ b/docs/pr_checklist.md
@@ -132,6 +132,7 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- if using `MO(1)` and `MO(2)` keycodes together to access a third layer, the [Tri Layer](https://docs.qmk.fm/#/feature_tri_layer) feature should be used, rather than manually implementing this using `layer_on/off()` and `update_tri_layer()` functions in the keymap's `process_record_user()`.
- default (and via) keymaps should be "pristine"
- bare minimum to be used as a "clean slate" for another user to develop their own user-specific keymap
+ - what does pristine mean? no custom keycodes. no advanced features like tap dance or macros. basic mod taps and home row mods would be acceptable where their use is necessary
- standard layouts preferred in these keymaps, if possible
- should use [encoder map feature](https://docs.qmk.fm/#/feature_encoders?id=encoder-map), rather than `encoder_update_user()`
- default keymap should not enable VIA -- the VIA integration documentation requires a keymap called `via`
diff --git a/docs/quantum_painter.md b/docs/quantum_painter.md
index 317a9d9f1a2..5e399183f8b 100644
--- a/docs/quantum_painter.md
+++ b/docs/quantum_painter.md
@@ -40,7 +40,7 @@ Supported devices:
| `QUANTUM_PAINTER_NUM_FONTS` | `4` | The maximum number of fonts that can be loaded at any one time. |
| `QUANTUM_PAINTER_CONCURRENT_ANIMATIONS` | `4` | The maximum number of animations that can be executed at the same time. |
| `QUANTUM_PAINTER_LOAD_FONTS_TO_RAM` | `FALSE` | Whether or not fonts should be loaded to RAM. Relevant for fonts stored in off-chip persistent storage, such as external flash. |
-| `QUANTUM_PAINTER_PIXDATA_BUFFER_SIZE` | `32` | The limit of the amount of pixel data that can be transmitted in one transaction to the display. Higher values require more RAM on the MCU. |
+| `QUANTUM_PAINTER_PIXDATA_BUFFER_SIZE` | `1024` | The limit of the amount of pixel data that can be transmitted in one transaction to the display. Higher values require more RAM on the MCU. |
| `QUANTUM_PAINTER_SUPPORTS_256_PALETTE` | `FALSE` | If 256-color palettes are supported. Requires significantly more RAM on the MCU. |
| `QUANTUM_PAINTER_SUPPORTS_NATIVE_COLORS` | `FALSE` | If native color range is supported. Requires significantly more RAM on the MCU. |
| `QUANTUM_PAINTER_DEBUG` | _unset_ | Prints out significant amounts of debugging information to CONSOLE output. Significant performance degradation, use only for debugging. |
diff --git a/docs/squeezing_avr.md b/docs/squeezing_avr.md
index ce9e43cdaea..d5ced573826 100644
--- a/docs/squeezing_avr.md
+++ b/docs/squeezing_avr.md
@@ -88,6 +88,21 @@ Or if you're not using layers at all, you can outright remove the functionality
#define NO_ACTION_LAYER
```
+## Magic keycodes
+
+There are two `__attribute__ ((weak))` placeholder functions available to customize magic keycodes. If you are not using that feature to swap keycodes, such as backslash with backspace, add the following to your `keymap.c` or user space code:
+```c
+uint16_t keycode_config(uint16_t keycode) {
+ return keycode;
+}
+```
+Likewise, if you are not using magic keycodes to swap modifiers, such as Control with GUI, add the following to your `keymap.c` or user space code:
+```c
+uint8_t mod_config(uint8_t mod) {
+ return mod;
+}
+```
+Both of them will overwrite the placeholder functions with a simple return statement to reduce firmware size.
## OLED tweaks
diff --git a/keyboards/1upkeyboards/1upocarina/config.h b/keyboards/1upkeyboards/1upocarina/config.h
new file mode 100644
index 00000000000..4431ef6bdbc
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/config.h
@@ -0,0 +1,70 @@
+/* Copyright 2023 Ziptyze
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define RGB_MATRIX_LED_COUNT 32
+#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+
+# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+// # define ENABLE_RGB_MATRIX_ALPHAS_MODS
+// # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_BAND_SAT
+# define ENABLE_RGB_MATRIX_BAND_VAL
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM
+# define ENABLE_RGB_MATRIX_HUE_WAVE
+// # define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// # define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// # define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+// # define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/1upkeyboards/1upocarina/info.json b/keyboards/1upkeyboards/1upocarina/info.json
new file mode 100644
index 00000000000..6b37eef2b5e
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/info.json
@@ -0,0 +1,96 @@
+{
+ "manufacturer": "1upkeyboards",
+ "keyboard_name": "1upocarina",
+ "maintainer": "ziptyze",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "board": "GENERIC_RP_RP2040",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x5607",
+ "vid": "0x6F75"
+ },
+ "dynamic_keymap": {
+ "layer_count": 10
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "rgb_matrix": true
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {
+ "pin_a": "GP25", "pin_b": "GP26"
+ }
+ ]
+ },
+ "matrix_pins": {
+ "direct": [
+ ["GP28", "GP29", "GP27", "GP1", "GP2"]
+ ]
+ },
+ "ws2812": {
+ "pin": "GP24"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "layout": [
+ { "flags": 4, "matrix": [0, 0], "x": 23, "y": 26 },
+ { "flags": 4, "matrix": [0, 1], "x": 62, "y": 26 },
+ { "flags": 4, "matrix": [0, 2], "x": 112, "y": 34 },
+ { "flags": 4, "matrix": [0, 3], "x": 161, "y": 26 },
+ { "flags": 4, "matrix": [0, 4], "x": 200, "y": 26 },
+
+ { "flags": 2, "x": 133, "y": 3 },
+ { "flags": 2, "x": 154, "y": 3 },
+ { "flags": 2, "x": 174, "y": 3 },
+ { "flags": 2, "x": 194, "y": 3 },
+ { "flags": 2, "x": 218, "y": 5 },
+
+ { "flags": 2, "x": 221, "y": 19 },
+ { "flags": 2, "x": 221, "y": 31 },
+ { "flags": 2, "x": 221, "y": 44 },
+ { "flags": 2, "x": 217, "y": 58 },
+ { "flags": 2, "x": 195, "y": 61 },
+
+ { "flags": 2, "x": 174, "y": 61 },
+ { "flags": 2, "x": 154, "y": 61 },
+ { "flags": 2, "x": 133, "y": 61 },
+ { "flags": 2, "x": 112, "y": 61 },
+ { "flags": 2, "x": 91, "y": 61 },
+
+ { "flags": 2, "x": 70, "y": 61 },
+ { "flags": 2, "x": 49, "y": 61 },
+ { "flags": 2, "x": 28, "y": 61 },
+ { "flags": 2, "x": 5, "y": 58 },
+ { "flags": 2, "x": 2, "y": 44 },
+
+ { "flags": 2, "x": 2, "y": 31 },
+ { "flags": 2, "x": 2, "y": 19 },
+ { "flags": 2, "x": 5, "y": 5 },
+ { "flags": 2, "x": 28, "y": 3 },
+ { "flags": 2, "x": 49, "y": 3 },
+
+ { "flags": 2, "x": 70, "y": 3 },
+ { "flags": 2, "x": 91, "y": 3 }
+ ]
+ },
+ "layouts": {
+ "LAYOUT_1x5": {
+ "layout": [
+ { "label": "z", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
+ { "label": "x", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
+ { "label": "esc", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
+ { "label": "c", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
+ { "label": "v", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/1upkeyboards/1upocarina/keymaps/default/keymap.c b/keyboards/1upkeyboards/1upocarina/keymaps/default/keymap.c
new file mode 100644
index 00000000000..86e3f440fee
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 ziptyze
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_1x5(
+ KC_Z, KC_X, LT(1, KC_ESC), KC_C, KC_V
+ ),
+
+ [1] = LAYOUT_1x5(
+ RGB_TOG, RGB_MOD, KC_TRNS, RGB_VAD, RGB_VAI
+ )
+};
+
+#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_TRNS, KC_TRNS)}
+};
+#endif
diff --git a/keyboards/1upkeyboards/1upocarina/keymaps/default/rules.mk b/keyboards/1upkeyboards/1upocarina/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/1upkeyboards/1upocarina/keymaps/via/keymap.c b/keyboards/1upkeyboards/1upocarina/keymaps/via/keymap.c
new file mode 100644
index 00000000000..86e3f440fee
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 ziptyze
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_1x5(
+ KC_Z, KC_X, LT(1, KC_ESC), KC_C, KC_V
+ ),
+
+ [1] = LAYOUT_1x5(
+ RGB_TOG, RGB_MOD, KC_TRNS, RGB_VAD, RGB_VAI
+ )
+};
+
+#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_TRNS, KC_TRNS)}
+};
+#endif
diff --git a/keyboards/1upkeyboards/1upocarina/keymaps/via/rules.mk b/keyboards/1upkeyboards/1upocarina/keymaps/via/rules.mk
new file mode 100644
index 00000000000..bf70b1f3e09
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/keymaps/via/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/1upocarina/readme.md b/keyboards/1upkeyboards/1upocarina/readme.md
new file mode 100644
index 00000000000..280c9f01d6d
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/readme.md
@@ -0,0 +1,22 @@
+# 1upocarina
+
+This keyboard is the Ocarina from 1upkeyboards. It is a five button keypad designed for osu. There is an option to add an encoder to the center position, and the keypad features in-switch per-key addressable RGB leds, as well as 27 right angle underglow RGB leds for very bright and smooth lighting effects.
+
+* Keyboard Maintainer: [ziptyze](https://github.com/ziptyze)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 1upkeyboards/1upocarina:default
+
+Flashing example for this keyboard:
+
+ make 1upkeyboards/1upocarina:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Hold the button on the back of the PCB and plug in the keyboard
diff --git a/keyboards/1upkeyboards/1upocarina/rules.mk b/keyboards/1upkeyboards/1upocarina/rules.mk
new file mode 100644
index 00000000000..8e853e0af70
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/rules.mk
@@ -0,0 +1 @@
+WS2812_DRIVER = vendor
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/config.h b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/config.h
new file mode 100644
index 00000000000..834b7ee0ab2
--- /dev/null
+++ b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+
+# define TAPPING_TERM 160
+# define TAPPING_TERM_PER_KEY
+# define HOLD_ON_OTHER_KEY_PRESS
+# define QUICK_TAP_TERM TAPPING_TERM / 2
+# define QUICK_TAP_TERM_PER_KEY
+
+
+
diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/keymap.c b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/keymap.c
new file mode 100644
index 00000000000..636aad675bc
--- /dev/null
+++ b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/keymap.c
@@ -0,0 +1,290 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+
+
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Workman
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ TAB │ Q │ D │ R │ W │ B │ │ J │ F │ U │ P │ BSPC│ BSPC│
+ * │ ESC │ ESC │ │ │ │ SYM │ │ SYM │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │ TAB │ A │ S │ H ┃ T ┃ G │ │ Y ┃ N ┃ E │ O │ I │ │
+ * │SHIFT│ │ │ ┃ EX ┃ │ │ ┃ ┃ │ │ENTER│ENTER│
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │SHIFT| Z │ X │ M │ C │ V │ │ K │ L │ SPC │ SPC │ / │ UP |
+ * │ │ │ │ │ │ │ │ │ │ , │ . │ │RIGHT|
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ FN │CTRL │ OS │ ALT │LOWER│ │ │ │RAISE│ SS │CLIP │COPY │ DN │
+ * │ │ │ │ │ │ │ │ │ │ │ │PASTE│LEFT │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [_WM] = LAYOUT_ortho_4x12_wrapper (
+ RGB_TOG,
+ _____________WORKMAN_412_001_L_____________, _____________WORKMAN_412_001_R_____________,
+ _____________WORKMAN_412_002_L_____________, _____________WORKMAN_412_002_R_____________,
+ _____________WORKMAN_412_003_L_____________, _____________WORKMAN_412_003_R_____________,
+ _____________WORKMAN_412_004_L_____________, _____________WORKMAN_412_004_R_____________
+ ),
+
+ [_QW] = LAYOUT_ortho_4x12_wrapper (
+ RGB_TOG,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
+ KC_ESC, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_ENT,
+ _____________WORKMAN_412_004_L_____________, _____________WORKMAN_412_004_R_____________
+ ),
+
+
+
+
+ /* Lower
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ │ () │ [] │ /\ │ │ │ │ │ 7 │ 8 │ 9 │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │ │ @ # │ & % │ ┃ ┃ │ │ ┃ 4 ┃ 5 │ 6 │ │ │
+ * │ │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │ │
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ 0 │ 1 │ 2 │ 3 │ │ UP │
+ * │ │ │ │ │ │ │ │ │ │ 0 │ │ │RIGHT│
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │LOWER│ │ │ │BPSC │ SPC │ . │ │ DN │
+ * │ │ │ │ │ │ │ │ │ │ │ ENT │ │LEFT │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [_LOWER] = LAYOUT_ortho_4x12_wrapper (
+ KC_MUTE,
+ _______________LOWER_412_L1________________, _______________LOWER_412_R1________________,
+ _______________LOWER_412_L2________________, _______________LOWER_412_R2________________,
+ _______________LOWER_412_L3________________, _______________LOWER_412_R3________________,
+ _______________LOWER_412_L4________________, _______________LOWER_412_R4________________
+ ),
+
+
+ /* RAISE
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │BOOT │DEBUG│ │ │ │MAKE │ │ │ │ F7 │ F8 │ F9 │ F10 │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │ │ RGB | RGB | RGB ┃ RGB ┃ WM │ │ ┃ / \ ┃ F4 │ F5 │ F6 │ F11 │
+ * │ │ TOG │ MOD │ HUI ┃ HUD ┃ │ │ ┃ ┃ │ │ │ │
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ │ RGB │ RGB │ RGB │ RGB │ QW │ │ │ _ │ F1 | F2 | F3 │ F12 │
+ * │ │ SAI │ SAD │ VAI │ VAD │ │ │ │ - │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │RAISE│ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [_RAISE] = LAYOUT_ortho_4x12_wrapper (
+ KC_MUTE,
+ _______________RAISE_412_L1________________, _______________RAISE_412_R1________________,
+ _______________RAISE_412_L2________________, _______________RAISE_412_R2________________,
+ _______________RAISE_412_L3________________, _______________RAISE_412_R3________________,
+ _________________BLANK_6___________________, _________________BLANK_6___________________
+ ),
+
+
+ /* EXTRAS
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ │ ! │ │ │ │ │ │ │ /\ | [ | ] | ; │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │SHIFT│ | |EXTRA┃ ┃ │ │ ┃ @ # ┃ & % | | ' | │
+ * │ │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │ │
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ , | . | ? │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [_EX] = LAYOUT_ortho_4x12_wrapper (
+ KC_MUTE,
+ ______________EXTRAS_412_L1________________, ______________EXTRAS_412_R1________________,
+ ______________EXTRAS_412_L2________________, ______________EXTRAS_412_R2________________,
+ ______________EXTRAS_412_L3________________, ______________EXTRAS_412_R3________________,
+ ______________EXTRAS_412_L4________________, ______________EXTRAS_412_R4________________
+ ),
+
+
+
+ /* FUNCTION
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │COPY │CLIP │ SS │ │ │ │ │ │ /\ │ UP │ │ │ DEL │
+ * │PASTE│ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │TAB │ M05 | M06 | M07 ┃ M08 ┃ │ │ ┃LEFT ┃DOWN │RIGHT│ │UP │
+ * │SHIFT│ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │RIGHT│
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ │ M01 │ M02 │ M03 │ M04 │ │ │ │ │ , | . | ? │DOWN │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │LEFT │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │RGB1 │RGB2 │RGB3 │RGB4 │ │ │ │ │ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [_FN] = LAYOUT_ortho_4x12_wrapper (
+ KC_MUTE,
+ _____________FUNCTION_412_L1_______________, _____________FUNCTION_412_R1_______________,
+ _____________FUNCTION_412_L2_______________, _____________FUNCTION_412_R2_______________,
+ _____________FUNCTION_412_L3_______________, _____________FUNCTION_412_R3_______________,
+ _____________FUNCTION_412_L4_______________, _____________FUNCTION_412_R4_______________
+ ),
+
+
+ /* SYMBOLS
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ | $ | ^ | < | > │ SYMB│ │ SYMB│ | | [ | ] | - | |
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │ | % | : | ; ┃ + ┃ = │ │ ┃ ┃ ( | ) | _ | |
+ * │ │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │ │
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * | | & | ' | " | * | # │ │ ! | ? | / | \ | @ | |
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [_SYMB] = LAYOUT_ortho_4x12_wrapper (
+ KC_MUTE,
+ _______, _____________SYMBOLS_310_L1________________, _____________SYMBOLS_310_R1________________, _______,
+ _______, _____________SYMBOLS_310_L2________________, _____________SYMBOLS_310_R2________________, _______,
+ _______, _____________SYMBOLS_310_L3________________, _____________SYMBOLS_310_R3________________, _______,
+ _________________BLANK_6___________________, _________________BLANK_6___________________
+ )
+
+};
+
+#ifndef NUM_DIRECTIONS
+# define NUM_DIRECTIONS 2
+#endif
+
+#if defined(ENCODER_MAP_ENABLE) && defined(KEYBOARD_1upkeyboards_pi40_mit_v1_0)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_WM] = { ENCODER_CCW_CW(LCTL(KC_V), LCTL(KC_C)) },
+ [_QW] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_LOWER] = { ENCODER_CCW_CW(____, ____) },
+ [_RAISE] = { ENCODER_CCW_CW(____, ____) },
+ [_EX] = { ENCODER_CCW_CW(____, ____) },
+ [_FN] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD) },
+ [_SYMB] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
+
+
+#ifdef OLED_ENABLE
+bool oled_task_user(void) {
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("Layer: "), false);
+
+ switch (get_highest_layer(layer_state)) {
+ case _LOWER:
+ oled_write_P(PSTR("LOWER"), false);
+ break;
+ case _RAISE:
+ oled_write_P(PSTR("RAISE"), false);
+ break;
+ case _EX:
+ oled_write_P(PSTR("EXTRA"), false);
+ break;
+ case _FN:
+ oled_write_P(PSTR("FUNCTION"), false);
+ break;
+ case _WM:
+ oled_write_P(PSTR("WORKMAN"), false);
+ break;
+ case _SYMB:
+ oled_write_P(PSTR("SYMBOLS"), false);
+ break;
+ default:
+ // Or use the write_ln shortcut over adding '\n' to the end of your string
+ oled_write_ln_P(PSTR("HOME"), false);
+ }
+
+// Host Keyboard LED Status
+ // led_t led_state = host_keyboard_led_state();
+ // oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
+ // oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
+ // oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
+
+ return false;
+}
+#endif
+
+
+bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_A):
+ // Do not force the mod-tap key press to be handled as a modifier
+ // if any other key was pressed while the mod-tap key is held down.
+ return false;
+ case TEX:
+ return false;
+ case CTRLX:
+ return false;
+ case FNZ:
+ return false;
+ case MGUI:
+ return false;
+ case VLOWER:
+ return false;
+ case KRAISE:
+ return false;
+ default:
+ // Force the dual-role key press to be handled as a modifier if any
+ // other key was pressed while the mod-tap key is held down.
+ return true;
+ }
+}
+
+#ifdef AUDIO_ENABLE
+float leader_start_song[][2] = SONG(ONE_UP_SOUND);
+float leader_succeed_song[][2] = SONG(ALL_STAR);
+float leader_fail_song[][2] = SONG(RICK_ROLL);
+#endif
+
+void matrix_scan_user(void);
+
+void leader_start_user(void) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(leader_start_song);
+#endif
+}
+
+bool did_leader_succeed;
+
+void leader_end_user(void) {
+ did_leader_succeed = false;
+
+ if (leader_sequence_one_key(KC_E)) {
+ SEND_STRING(SS_LCTL(SS_LSFT("t")));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_E, KC_D)) {
+ SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_A, KC_T)) {
+ SEND_STRING("@guidehouse.com");
+ did_leader_succeed = true;
+ }
+
+
+#ifdef AUDIO_ENABLE
+ if (did_leader_succeed) {
+ PLAY_SONG(leader_succeed_song);
+ } else {
+ PLAY_SONG(leader_fail_song);
+ }
+#endif
+}
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk
new file mode 100644
index 00000000000..96f930ffa10
--- /dev/null
+++ b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk
@@ -0,0 +1,25 @@
+# Common feature for all keyboards
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+EXTRAKEY_ENABLE = yes # Audio control and System control
+TAP_DANCE_ENABLE = yes # Tap Dance keys
+NKRO_ENABLE = yes # Enable N-Key Rollover
+MACROS_ENABLED = yes
+
+
+# Keyboard specific
+AUTO_SHIFT_ENABLE = no
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+MOUSEKEY_ENABLE = no # Mouse keys
+
+LEADER_ENABLE = yes
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = WS2812
+WS2812_DRIVER = vendor
+ENCODER_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+OLED_ENABLE = yes
+OLED_DRIVER = SSD1306
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/pi60/info.json b/keyboards/1upkeyboards/pi60/info.json
index 00d32ec973b..f599446e20e 100644
--- a/keyboards/1upkeyboards/pi60/info.json
+++ b/keyboards/1upkeyboards/pi60/info.json
@@ -112,7 +112,7 @@
{"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
{"label": "ISO'", "matrix": [2, 12], "x": 12.75, "y": 2},
{"label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2},
- {"label": "LShift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3},
+ {"label": "LShift", "matrix": [3, 15], "w": 1.25, "x": 0, "y": 3},
{"label": "ISO<>", "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},
diff --git a/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c b/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c
index 15b593362d0..acf9ce1adb3 100644
--- a/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c
+++ b/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c
@@ -17,12 +17,12 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
+
[0] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_TRNS, KC_ENT,
- KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, MO(1),
+ KC_LSFT, KC_TRNS, 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, MO(1), KC_TRNS, KC_APP, KC_RCTL
),
diff --git a/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c b/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c
index f9187727eb3..80f9d3a9f6b 100644
--- a/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c
+++ b/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c
@@ -17,12 +17,12 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
+
[0] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_TRNS, KC_ENT,
- KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, MO(1),
+ KC_LSFT, KC_TRNS, 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, MO(1), KC_TRNS, KC_APP, KC_RCTL
),
diff --git a/keyboards/4pplet/eagle_viper_rep/rev_b/info.json b/keyboards/4pplet/eagle_viper_rep/rev_b/info.json
index 82d6349dc72..73a2053979e 100644
--- a/keyboards/4pplet/eagle_viper_rep/rev_b/info.json
+++ b/keyboards/4pplet/eagle_viper_rep/rev_b/info.json
@@ -114,7 +114,7 @@
{"label": "Alt", "matrix": [9, 4], "x": 10, "y": 4, "w": 1.25},
{"label": "Alt", "matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
{"label": "GUI", "matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
- {"label": "Fn", "matrix": [8, 6], "x": 13.75, "y": 9, "w": 1.25}
+ {"label": "Fn", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi": {
diff --git a/keyboards/abko/ak84bt/ak84bt.c b/keyboards/abko/ak84bt/ak84bt.c
new file mode 100644
index 00000000000..0ecd06b177e
--- /dev/null
+++ b/keyboards/abko/ak84bt/ak84bt.c
@@ -0,0 +1,110 @@
+/* Copyright 2023 temp4gh
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+ {0, G_1, I_1, H_1},
+ {0, G_3, I_3, H_3},
+ {0, G_4, I_4, H_4},
+ {0, G_5, I_5, H_5},
+ {0, G_6, I_6, H_6},
+ {0, G_7, I_7, H_7},
+ {0, G_8, I_8, H_8},
+ {0, G_9, I_9, H_9},
+ {0, G_10, I_10, H_10},
+ {0, G_11, I_11, H_11},
+ {0, G_12, I_12, H_12},
+ {0, G_13, I_13, H_13},
+ {0, G_14, I_14, H_14},
+ {0, G_15, I_15, H_15},
+ {0, D_1, F_1, E_1},
+ {0, D_2, F_2, E_2},
+ {0, D_3, F_3, E_3},
+ {0, D_4, F_4, E_4},
+ {0, D_5, F_5, E_5},
+ {0, D_6, F_6, E_6},
+ {0, D_7, F_7, E_7},
+ {0, D_8, F_8, E_8},
+ {0, D_9, F_9, E_9},
+ {0, D_10, F_10, E_10},
+ {0, D_11, F_11, E_11},
+ {0, D_12, F_12, E_12},
+ {0, D_13, F_13, E_13},
+ {0, D_14, F_14, E_14},
+ {0, D_15, F_15, E_15},
+ {0, A_1, C_1, B_1},
+ {0, A_2, C_2, B_2},
+ {0, A_3, C_3, B_3},
+ {0, A_4, C_4, B_4},
+ {0, A_5, C_5, B_5},
+ {0, A_6, C_6, B_6},
+ {0, A_7, C_7, B_7},
+ {0, A_8, C_8, B_8},
+ {0, A_9, C_9, B_9},
+ {0, A_10, C_10, B_10},
+ {0, A_11, C_11, B_11},
+ {0, A_12, C_12, B_12},
+ {0, A_13, C_13, B_13},
+ {0, A_14, C_14, B_14},
+ {0, A_15, C_15, B_15},
+ {1, G_1, I_1, H_1},
+ {1, G_2, I_2, H_2},
+ {1, G_3, I_3, H_3},
+ {1, G_4, I_4, H_4},
+ {1, G_5, I_5, H_5},
+ {1, G_6, I_6, H_6},
+ {1, G_7, I_7, H_7},
+ {1, G_8, I_8, H_8},
+ {1, G_9, I_9, H_9},
+ {1, G_10, I_10, H_10},
+ {1, G_11, I_11, H_11},
+ {1, G_12, I_12, H_12},
+ {1, G_13, I_13, H_13},
+ {1, G_14, I_14, H_14},
+ {1, G_15, I_15, H_15},
+ {1, D_1, F_1, E_1},
+ {1, D_2, F_2, E_2},
+ {1, D_3, F_3, E_3},
+ {1, D_4, F_4, E_4},
+ {1, D_5, F_5, E_5},
+ {1, D_6, F_6, E_6},
+ {1, D_7, F_7, E_7},
+ {1, D_8, F_8, E_8},
+ {1, D_9, F_9, E_9},
+ {1, D_10, F_10, E_10},
+ {1, D_11, F_11, E_11},
+ {1, D_12, F_12, E_12},
+ {1, D_13, F_13, E_13},
+ {1, D_14, F_14, E_14},
+ {1, D_15, F_15, E_15},
+ {1, A_1, C_1, B_1},
+ {1, A_2, C_2, B_2},
+ {1, A_3, C_3, B_3},
+ {1, A_5, C_5, B_5},
+ {1, A_6, C_6, B_6},
+ {1, A_7, C_7, B_7},
+ {1, A_8, C_8, B_8},
+ {1, A_9, C_9, B_9},
+ {1, A_10, C_10, B_10},
+ {1, A_11, C_11, B_11},
+ {1, A_12, C_12, B_12},
+ {1, A_13, C_13, B_13},
+ {1, A_14, C_14, B_14},
+ {1, A_15, C_15, B_15},
+ {0, G_2, I_2, H_2},
+ {1, A_4, C_4, B_4}
+};
diff --git a/keyboards/abko/ak84bt/config.h b/keyboards/abko/ak84bt/config.h
new file mode 100644
index 00000000000..f6a3b55851f
--- /dev/null
+++ b/keyboards/abko/ak84bt/config.h
@@ -0,0 +1,41 @@
+/* Copyright 2023 temp4gh
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+
+#define DRIVER_ADDR_1 0b1010000
+#define DRIVER_ADDR_2 0b1010011
+
+#define DRIVER_COUNT 2
+#define DRIVER_1_LED_TOTAL 45
+#define DRIVER_2_LED_TOTAL 45
+
+#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL+DRIVER_2_LED_TOTAL)
+
+#define ENABLE_RGB_MATRIX_SOLID_COLOR
+#define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+#define ENABLE_RGB_MATRIX_BAND_SAT
+#define ENABLE_RGB_MATRIX_BAND_VAL
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_FLOW
diff --git a/keyboards/abko/ak84bt/halconf.h b/keyboards/abko/ak84bt/halconf.h
new file mode 100644
index 00000000000..f1dae7232ed
--- /dev/null
+++ b/keyboards/abko/ak84bt/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 temp4gh
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef HAL_USE_I2C
+#define HAL_USE_I2C TRUE
diff --git a/keyboards/abko/ak84bt/info.json b/keyboards/abko/ak84bt/info.json
new file mode 100644
index 00000000000..30dd823575d
--- /dev/null
+++ b/keyboards/abko/ak84bt/info.json
@@ -0,0 +1,217 @@
+{
+ "manufacturer": "abko",
+ "keyboard_name": "ak84bt",
+ "bootloader": "stm32duino",
+ "bootmagic": {
+ "matrix": [1, 0]
+ },
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 2
+ },
+ "features": {
+ "bootmagic": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "indicators": {
+ "caps_lock": "B8",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["A6", "A7", "C4", "C5", "B0", "B1", "C6", "C7", "C8", "C9", "A8", "A9", "A10", "A13", "A14", "A15"],
+ "rows": ["A0", "A1", "A2", "A3", "A4", "A5"]
+ },
+ "processor": "STM32F103",
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "layout": [
+ {"matrix": [0, 0], "x": 7, "y": 2, "flags": 4},
+ {"matrix": [0, 2], "x": 34, "y": 2, "flags": 4},
+ {"matrix": [0, 3], "x": 48, "y": 2, "flags": 4},
+ {"matrix": [0, 4], "x": 61, "y": 2, "flags": 4},
+ {"matrix": [0, 5], "x": 75, "y": 2, "flags": 4},
+ {"matrix": [0, 6], "x": 95, "y": 2, "flags": 4},
+ {"matrix": [0, 7], "x": 109, "y": 2, "flags": 4},
+ {"matrix": [0, 8], "x": 122, "y": 2, "flags": 4},
+ {"matrix": [0, 9], "x": 136, "y": 2, "flags": 4},
+ {"matrix": [0, 10], "x": 157, "y": 2, "flags": 4},
+ {"matrix": [0, 11], "x": 170, "y": 2, "flags": 4},
+ {"matrix": [0, 12], "x": 184, "y": 2, "flags": 4},
+ {"matrix": [0, 13], "x": 198, "y": 2, "flags": 4},
+ {"matrix": [0, 14], "x": 217, "y": 2, "flags": 4},
+ {"matrix": [1, 0], "x": 7, "y": 14, "flags": 4},
+ {"matrix": [1, 1], "x": 20, "y": 14, "flags": 4},
+ {"matrix": [1, 2], "x": 34, "y": 14, "flags": 4},
+ {"matrix": [1, 3], "x": 48, "y": 14, "flags": 4},
+ {"matrix": [1, 4], "x": 61, "y": 14, "flags": 4},
+ {"matrix": [1, 5], "x": 75, "y": 14, "flags": 4},
+ {"matrix": [1, 6], "x": 89, "y": 14, "flags": 4},
+ {"matrix": [1, 7], "x": 102, "y": 14, "flags": 4},
+ {"matrix": [1, 8], "x": 116, "y": 14, "flags": 4},
+ {"matrix": [1, 9], "x": 129, "y": 14, "flags": 4},
+ {"matrix": [1, 10], "x": 143, "y": 14, "flags": 4},
+ {"matrix": [1, 11], "x": 157, "y": 14, "flags": 4},
+ {"matrix": [1, 12], "x": 170, "y": 14, "flags": 4},
+ {"matrix": [1, 13], "x": 190, "y": 14, "flags": 4},
+ {"matrix": [1, 14], "x": 217, "y": 14, "flags": 4},
+ {"matrix": [2, 0], "x": 10, "y": 24, "flags": 4},
+ {"matrix": [2, 1], "x": 27, "y": 24, "flags": 4},
+ {"matrix": [2, 2], "x": 40, "y": 24, "flags": 4},
+ {"matrix": [2, 3], "x": 54, "y": 24, "flags": 4},
+ {"matrix": [2, 4], "x": 68, "y": 24, "flags": 4},
+ {"matrix": [2, 5], "x": 81, "y": 24, "flags": 4},
+ {"matrix": [2, 6], "x": 95, "y": 24, "flags": 4},
+ {"matrix": [2, 7], "x": 109, "y": 24, "flags": 4},
+ {"matrix": [2, 8], "x": 122, "y": 24, "flags": 4},
+ {"matrix": [2, 9], "x": 136, "y": 24, "flags": 4},
+ {"matrix": [2, 10], "x": 150, "y": 24, "flags": 4},
+ {"matrix": [2, 11], "x": 163, "y": 24, "flags": 4},
+ {"matrix": [2, 12], "x": 177, "y": 24, "flags": 4},
+ {"matrix": [2, 13], "x": 194, "y": 24, "flags": 4},
+ {"matrix": [2, 14], "x": 217, "y": 24, "flags": 4},
+ {"matrix": [3, 0], "x": 12, "y": 34, "flags": 4},
+ {"matrix": [3, 1], "x": 30, "y": 34, "flags": 4},
+ {"matrix": [3, 2], "x": 44, "y": 34, "flags": 4},
+ {"matrix": [3, 3], "x": 58, "y": 34, "flags": 4},
+ {"matrix": [3, 4], "x": 71, "y": 34, "flags": 4},
+ {"matrix": [3, 5], "x": 85, "y": 34, "flags": 4},
+ {"matrix": [3, 6], "x": 99, "y": 34, "flags": 4},
+ {"matrix": [3, 7], "x": 112, "y": 34, "flags": 4},
+ {"matrix": [3, 8], "x": 126, "y": 34, "flags": 4},
+ {"matrix": [3, 9], "x": 140, "y": 34, "flags": 4},
+ {"matrix": [3, 10], "x": 153, "y": 34, "flags": 4},
+ {"matrix": [3, 11], "x": 167, "y": 34, "flags": 4},
+ {"x": 180, "y": 34, "flags": 4},
+ {"matrix": [3, 13], "x": 189, "y": 34, "flags": 4},
+ {"matrix": [3, 14], "x": 217, "y": 34, "flags": 4},
+ {"matrix": [4, 0], "x": 8, "y": 44, "flags": 4},
+ {"x": 24, "y": 44, "flags": 4},
+ {"matrix": [4, 2], "x": 38, "y": 44, "flags": 4},
+ {"matrix": [4, 3], "x": 51, "y": 44, "flags": 4},
+ {"matrix": [4, 4], "x": 65, "y": 44, "flags": 4},
+ {"matrix": [4, 5], "x": 78, "y": 44, "flags": 4},
+ {"matrix": [4, 6], "x": 92, "y": 44, "flags": 4},
+ {"matrix": [4, 7], "x": 106, "y": 44, "flags": 4},
+ {"matrix": [4, 8], "x": 119, "y": 44, "flags": 4},
+ {"matrix": [4, 9], "x": 133, "y": 44, "flags": 4},
+ {"matrix": [4, 10], "x": 147, "y": 44, "flags": 4},
+ {"matrix": [4, 11], "x": 160, "y": 44, "flags": 4},
+ {"matrix": [4, 12], "x": 179, "y": 44, "flags": 4},
+ {"matrix": [4, 13], "x": 201, "y": 46, "flags": 4},
+ {"matrix": [4, 14], "x": 217, "y": 44, "flags": 4},
+ {"matrix": [5, 0], "x": 8, "y": 54, "flags": 4},
+ {"matrix": [5, 1], "x": 25, "y": 54, "flags": 4},
+ {"matrix": [5, 2], "x": 43, "y": 54, "flags": 4},
+ {"x": 67, "y": 57, "flags": 4},
+ {"x": 80, "y": 57, "flags": 4},
+ {"x": 94, "y": 54, "flags": 4},
+ {"matrix": [5, 6], "x": 107, "y": 57, "flags": 4},
+ {"x": 120, "y": 57, "flags": 4},
+ {"matrix": [5, 9], "x": 143, "y": 54, "flags": 4},
+ {"matrix": [5, 10], "x": 157, "y": 54, "flags": 4},
+ {"matrix": [5, 11], "x": 170, "y": 54, "flags": 4},
+ {"matrix": [5, 12], "x": 187, "y": 56, "flags": 4},
+ {"matrix": [5, 13], "x": 201, "y": 56, "flags": 4},
+ {"matrix": [5, 14], "x": 214, "y": 56, "flags": 4},
+ {"x": 207, "y": 23, "flags": 8},
+ {"x": 207, "y": 27, "flags": 8}
+ ]
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x4321",
+ "vid": "0x7654"
+ },
+ "layouts": {
+ "LAYOUT_75_ansi": {
+ "layout": [
+ {"label": "ESC", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "F2", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "F3", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "F4", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "F5", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F6", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F7", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F8", "matrix": [0, 9], "x": 9.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 11, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 12, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 13, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 14, "y": 0},
+ {"label": "END", "matrix": [0, 15], "x": 16.5, "y": 0},
+ {"label": "GRV", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "MINS", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "EQL", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "BSPC", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"label": "HOME", "matrix": [1, 14], "x": 16.5, "y": 1.25},
+ {"label": "TAB", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "LBRC", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "RBRC", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "BSLS", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"label": "DEL", "matrix": [2, 14], "x": 16.5, "y": 2.25},
+ {"label": "CAPS", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": "SCLN", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "QUOT", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "ENT", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+ {"label": "PGUP", "matrix": [3, 14], "x": 16.5, "y": 3.25},
+ {"label": "LSFT", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "COMM", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": "DOT", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "SLSH", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "RSFT", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "UP", "matrix": [4, 13], "x": 15.25, "y": 4.25},
+ {"label": "PGDN", "matrix": [4, 14], "x": 16.5, "y": 4.25},
+ {"label": "LCTL", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "LGUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "LALT", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "SPC", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "RALT", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "MO(1)", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "RCTL", "matrix": [5, 11], "x": 13, "y": 5.25, "w": 1.25},
+ {"label": "LEFT", "matrix": [5, 12], "x": 14.25, "y": 5.25},
+ {"label": "DOWN", "matrix": [5, 13], "x": 15.25, "y": 5.25},
+ {"label": "RGHT", "matrix": [5, 14], "x": 16.5, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/abko/ak84bt/keymaps/default/keymap.c b/keyboards/abko/ak84bt/keymaps/default/keymap.c
new file mode 100644
index 00000000000..6a57c4422a7
--- /dev/null
+++ b/keyboards/abko/ak84bt/keymaps/default/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2023 temp4gh
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layer_names
+{
+ _BASE,
+ _FnLay,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_75_ansi(
+ 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_END,
+ 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_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_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_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FnLay), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [_FnLay] = LAYOUT_75_ansi(
+ QK_BOOT, KC_MY_COMPUTER, KC_WWW_HOME, KC_CALCULATOR, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, KC_MAIL, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAI, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, XXXXXXX, _______, XXXXXXX, RGB_SPD, RGB_VAD, RGB_SPI
+ )
+};
diff --git a/keyboards/abko/ak84bt/mcuconf.h b/keyboards/abko/ak84bt/mcuconf.h
new file mode 100644
index 00000000000..9187c76aad0
--- /dev/null
+++ b/keyboards/abko/ak84bt/mcuconf.h
@@ -0,0 +1,22 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#pragma once
+
+#include_next
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/abko/ak84bt/readme.md b/keyboards/abko/ak84bt/readme.md
new file mode 100644
index 00000000000..68269604cc2
--- /dev/null
+++ b/keyboards/abko/ak84bt/readme.md
@@ -0,0 +1,21 @@
+# AK84BT
+
+
+
+A customizable 80% keyboard.
+
+- Keyboard Maintainer: [temp4gh](https://github.com/temp4gh)
+- Hardware Supported: AK84BT PCB
+- Hardware Availability: www.abko.co.kr
+
+Make example for this keyboard (after setting up your build environment):
+
+ make abko/ak84bt:default
+
+Flashing example for this keyboard:
+
+ make abko/ak84bt:default:flash
+
+**Reset Key**: Hold down the key located at *K10*, commonly programmed as *Grave* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/abko/ak84bt/rules.mk b/keyboards/abko/ak84bt/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/abko/ak84bt/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/config.h b/keyboards/adpenrose/mine/config.h
new file mode 100644
index 00000000000..cc05ddf8f17
--- /dev/null
+++ b/keyboards/adpenrose/mine/config.h
@@ -0,0 +1,9 @@
+// Copyright 2022 Arturo Avila (@Arturo Avila)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Solenoid pin */
+#define SOLENOID_PIN A7
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 2
diff --git a/keyboards/adpenrose/mine/info.json b/keyboards/adpenrose/mine/info.json
new file mode 100644
index 00000000000..5010485602d
--- /dev/null
+++ b/keyboards/adpenrose/mine/info.json
@@ -0,0 +1,357 @@
+{
+ "manufacturer": "ADPenrose",
+ "keyboard_name": "Mine",
+ "maintainer": "Arturo Avila",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0006",
+ "vid": "0x4450"
+ },
+ "features": {
+ "encoder": true,
+ "bootmagic": true,
+ "extrakey": true
+ },
+ "build": {
+ "lto": true
+ },
+ "encoder": {
+ "rotary": [{ "pin_a": "C4", "pin_b": "C3" }]
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "rows": ["A0", "A1", "A4", "A3", "C7", "B4", "B5", "B6", "A6", "A2", "A5"],
+ "cols": ["B0", "B1", "B2", "B3", "D0", "D1", "D5", "D6", "C6", "C5"]
+ },
+ "processor": "atmega32a",
+ "bootloader": "usbasploader",
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "label": "Enc", "matrix": [0, 9], "x": 20.75, "y": 0 },
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [1, 1], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 2], "x": 3.5, "y": 0 },
+ { "label": "F4", "matrix": [1, 2], "x": 4.5, "y": 0 },
+ { "label": "F5", "matrix": [0, 3], "x": 5.75, "y": 0 },
+ { "label": "F6", "matrix": [1, 3], "x": 6.75, "y": 0 },
+ { "label": "F7", "matrix": [9, 3], "x": 9.25, "y": 0 },
+ { "label": "F8", "matrix": [10, 3], "x": 10.25, "y": 0 },
+ { "label": "F9", "matrix": [0, 4], "x": 11.5, "y": 0 },
+ { "label": "F10", "matrix": [0, 5], "x": 12.5, "y": 0 },
+ { "label": "F11", "matrix": [0, 6], "x": 13.75, "y": 0 },
+ { "label": "F12", "matrix": [1, 6], "x": 14.75, "y": 0 },
+ { "label": "M1", "matrix": [10, 6], "x": 16, "y": 0 },
+ { "label": "M2", "matrix": [0, 7], "x": 17, "y": 0 },
+ { "label": "Num Lock", "matrix": [1, 7], "x": 17.75, "y": 1.25 },
+ { "label": "/", "matrix": [0, 8], "x": 18.75, "y": 1.25 },
+ { "label": "*", "matrix": [10, 8], "x": 19.75, "y": 1.25 },
+ { "label": "-", "matrix": [1, 9], "x": 20.75, "y": 1.25 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [10, 0], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [2, 1], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [10, 1], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [2, 2], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [10, 2], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [2, 3], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [8, 3], "x": 9.25, "y": 1.25 },
+ { "label": "*", "matrix": [1, 4], "x": 10.25, "y": 1.25 },
+ { "label": "(", "matrix": [10, 4], "x": 11.25, "y": 1.25 },
+ { "label": ")", "matrix": [1, 5], "x": 12.25, "y": 1.25 },
+ { "label": "_", "matrix": [10, 5], "x": 13.25, "y": 1.25 },
+ { "label": "+", "matrix": [2, 6], "x": 14.25, "y": 1.25 },
+ { "label": "Backspace", "matrix": [9, 6], "w": 2, "x": 15.25, "y": 1.25 },
+ { "label": "7", "matrix": [2, 7], "x": 17.75, "y": 2.25 },
+ { "label": "8", "matrix": [1, 8], "x": 18.75, "y": 2.25 },
+ { "label": "9", "matrix": [9, 8], "x": 19.75, "y": 2.25 },
+ { "h": 2, "label": "+", "matrix": [8, 8], "x": 20.75, "y": 2.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [9, 0], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [3, 1], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [9, 1], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [3, 2], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [9, 2], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [7, 3], "x": 8.75, "y": 2.25 },
+ { "label": "U", "matrix": [2, 4], "x": 9.75, "y": 2.25 },
+ { "label": "I", "matrix": [9, 4], "x": 10.75, "y": 2.25 },
+ { "label": "O", "matrix": [2, 5], "x": 11.75, "y": 2.25 },
+ { "label": "P", "matrix": [9, 5], "x": 12.75, "y": 2.25 },
+ { "label": "{", "matrix": [3, 6], "x": 13.75, "y": 2.25 },
+ { "label": "}", "matrix": [8, 6], "x": 14.75, "y": 2.25 },
+ { "label": "|", "matrix": [7, 7], "w": 1.5, "x": 15.75, "y": 2.25 },
+ { "label": "4", "matrix": [3, 7], "x": 17.75, "y": 3.25 },
+ { "label": "5", "matrix": [2, 8], "x": 18.75, "y": 3.25 },
+ { "label": "6", "matrix": [7, 8], "x": 19.75, "y": 3.25 },
+
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [8, 0], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [4, 1], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [8, 1], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [4, 2], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [8, 2], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [6, 3], "x": 9, "y": 3.25 },
+ { "label": "J", "matrix": [3, 4], "x": 10, "y": 3.25 },
+ { "label": "K", "matrix": [8, 4], "x": 11, "y": 3.25 },
+ { "label": "L", "matrix": [3, 5], "x": 12, "y": 3.25 },
+ { "label": ":", "matrix": [8, 5], "x": 13, "y": 3.25 },
+ { "label": "\\", "matrix": [4, 6], "x": 14, "y": 3.25 },
+ { "label": "#", "matrix": [6, 6], "x": 15, "y": 3.25 },
+ { "label": "Enter", "matrix": [7, 6], "w": 2.25, "x": 15, "y": 3.25 },
+ { "label": "1", "matrix": [4, 7], "x": 17.75, "y": 4.25 },
+ { "label": "2", "matrix": [3, 8], "x": 18.75, "y": 4.25 },
+ { "label": "3", "matrix": [6, 8], "x": 19.75, "y": 4.25 },
+ { "h": 2, "label": "Enter", "matrix": [5, 8], "x": 20.75, "y": 4.25 },
+
+ { "label": "Shift", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "label": "~", "matrix": [7, 0], "x": 1.25, "y": 4.25 },
+ { "label": "Z", "matrix": [5, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [7, 1], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [5, 2], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [7, 2], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [3, 3], "x": 6.25, "y": 4.25 },
+ { "label": "B", "matrix": [5, 3], "x": 8.5, "y": 4.25 },
+ { "label": "N", "matrix": [4, 4], "x": 9.5, "y": 4.25 },
+ { "label": "M", "matrix": [5, 4], "x": 10.5, "y": 4.25 },
+ { "label": "<", "matrix": [7, 4], "x": 11.5, "y": 4.25 },
+ { "label": ">", "matrix": [4, 5], "x": 12.5, "y": 4.25 },
+ { "label": "?", "matrix": [7, 5], "x": 13.5, "y": 4.25 },
+ { "label": "Shift", "matrix": [5, 6], "w": 2.75, "x": 14.5, "y": 4.25 },
+ { "label": "Up", "matrix": [5, 7], "x": 17.5, "y": 5.5 },
+ { "label": "0", "matrix": [10, 7], "x": 18.75, "y": 5.25 },
+ { "label": ".", "matrix": [4, 8], "x": 19.75, "y": 5.25 },
+
+ { "label": "LCtrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "LWin", "matrix": [6, 0], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "LAlt", "matrix": [6, 1], "w": 1.25, "x": 3.25, "y": 5.25 },
+ { "label": "LSpacebar", "matrix": [6, 2], "w": 2.75, "x": 4.5, "y": 5.25 },
+ { "label": "RSpacebar", "matrix": [4, 3], "w": 2.25, "x": 8.5, "y": 5.25 },
+ { "label": "RAlt", "matrix": [6, 4], "w": 1.25, "x": 10.75, "y": 5.25 },
+ { "label": "RWin", "matrix": [5, 5], "w": 1.25, "x": 14.75, "y": 5.25 },
+ { "label": "RCtrl", "matrix": [6, 5], "w": 1.25, "x": 16, "y": 5.25 },
+ { "label": "Left", "matrix": [6, 7], "x": 16.5, "y": 6.5 },
+ { "label": "Down", "matrix": [8, 7], "x": 17.5, "y": 6.5 },
+ { "label": "Right", "matrix": [9, 7], "x": 18.5, "y": 6.5 }
+ ]
+ },
+ "LAYOUT_1800_alice_ansi": {
+ "layout": [
+ { "label": "Enc", "matrix": [0, 9], "x": 20.75, "y": 0 },
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [1, 1], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 2], "x": 3.5, "y": 0 },
+ { "label": "F4", "matrix": [1, 2], "x": 4.5, "y": 0 },
+ { "label": "F5", "matrix": [0, 3], "x": 5.75, "y": 0 },
+ { "label": "F6", "matrix": [1, 3], "x": 6.75, "y": 0 },
+ { "label": "F7", "matrix": [9, 3], "x": 9.25, "y": 0 },
+ { "label": "F8", "matrix": [10, 3], "x": 10.25, "y": 0 },
+ { "label": "F9", "matrix": [0, 4], "x": 11.5, "y": 0 },
+ { "label": "F10", "matrix": [0, 5], "x": 12.5, "y": 0 },
+ { "label": "F11", "matrix": [0, 6], "x": 13.75, "y": 0 },
+ { "label": "F12", "matrix": [1, 6], "x": 14.75, "y": 0 },
+ { "label": "M1", "matrix": [10, 6], "x": 16, "y": 0 },
+ { "label": "M2", "matrix": [0, 7], "x": 17, "y": 0 },
+ { "label": "Num Lock", "matrix": [1, 7], "x": 17.75, "y": 1.25 },
+ { "label": "/", "matrix": [0, 8], "x": 18.75, "y": 1.25 },
+ { "label": "*", "matrix": [10, 8], "x": 19.75, "y": 1.25 },
+ { "label": "-", "matrix": [1, 9], "x": 20.75, "y": 1.25 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [10, 0], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [2, 1], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [10, 1], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [2, 2], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [10, 2], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [2, 3], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [8, 3], "x": 9.25, "y": 1.25 },
+ { "label": "*", "matrix": [1, 4], "x": 10.25, "y": 1.25 },
+ { "label": "(", "matrix": [10, 4], "x": 11.25, "y": 1.25 },
+ { "label": ")", "matrix": [1, 5], "x": 12.25, "y": 1.25 },
+ { "label": "_", "matrix": [10, 5], "x": 13.25, "y": 1.25 },
+ { "label": "+", "matrix": [2, 6], "x": 14.25, "y": 1.25 },
+ { "label": "Backspace", "matrix": [9, 6], "w": 2, "x": 15.25, "y": 1.25 },
+ { "label": "7", "matrix": [2, 7], "x": 17.75, "y": 2.25 },
+ { "label": "8", "matrix": [1, 8], "x": 18.75, "y": 2.25 },
+ { "label": "9", "matrix": [9, 8], "x": 19.75, "y": 2.25 },
+ { "h": 2, "label": "+", "matrix": [8, 8], "x": 20.75, "y": 2.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [9, 0], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [3, 1], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [9, 1], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [3, 2], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [9, 2], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [7, 3], "x": 8.75, "y": 2.25 },
+ { "label": "U", "matrix": [2, 4], "x": 9.75, "y": 2.25 },
+ { "label": "I", "matrix": [9, 4], "x": 10.75, "y": 2.25 },
+ { "label": "O", "matrix": [2, 5], "x": 11.75, "y": 2.25 },
+ { "label": "P", "matrix": [9, 5], "x": 12.75, "y": 2.25 },
+ { "label": "{", "matrix": [3, 6], "x": 13.75, "y": 2.25 },
+ { "label": "}", "matrix": [8, 6], "x": 14.75, "y": 2.25 },
+ { "label": "|", "matrix": [7, 7], "w": 1.5, "x": 15.75, "y": 2.25 },
+ { "label": "4", "matrix": [3, 7], "x": 17.75, "y": 3.25 },
+ { "label": "5", "matrix": [2, 8], "x": 18.75, "y": 3.25 },
+ { "label": "6", "matrix": [7, 8], "x": 19.75, "y": 3.25 },
+
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [8, 0], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [4, 1], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [8, 1], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [4, 2], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [8, 2], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [6, 3], "x": 9, "y": 3.25 },
+ { "label": "J", "matrix": [3, 4], "x": 10, "y": 3.25 },
+ { "label": "K", "matrix": [8, 4], "x": 11, "y": 3.25 },
+ { "label": "L", "matrix": [3, 5], "x": 12, "y": 3.25 },
+ { "label": ":", "matrix": [8, 5], "x": 13, "y": 3.25 },
+ { "label": "\\", "matrix": [4, 6], "x": 14, "y": 3.25 },
+ { "label": "Enter", "matrix": [7, 6], "w": 2.25, "x": 15, "y": 3.25 },
+ { "label": "1", "matrix": [4, 7], "x": 17.75, "y": 4.25 },
+ { "label": "2", "matrix": [3, 8], "x": 18.75, "y": 4.25 },
+ { "label": "3", "matrix": [6, 8], "x": 19.75, "y": 4.25 },
+ { "h": 2, "label": "Enter", "matrix": [5, 8], "x": 20.75, "y": 4.25 },
+
+ { "label": "Shift", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "Z", "matrix": [5, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [7, 1], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [5, 2], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [7, 2], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [3, 3], "x": 6.25, "y": 4.25 },
+ { "label": "B", "matrix": [5, 3], "x": 8.5, "y": 4.25 },
+ { "label": "N", "matrix": [4, 4], "x": 9.5, "y": 4.25 },
+ { "label": "M", "matrix": [5, 4], "x": 10.5, "y": 4.25 },
+ { "label": "<", "matrix": [7, 4], "x": 11.5, "y": 4.25 },
+ { "label": ">", "matrix": [4, 5], "x": 12.5, "y": 4.25 },
+ { "label": "?", "matrix": [7, 5], "x": 13.5, "y": 4.25 },
+ { "label": "Shift", "matrix": [5, 6], "w": 2.75, "x": 14.5, "y": 4.25 },
+ { "label": "Up", "matrix": [5, 7], "x": 17.5, "y": 5.5 },
+ { "label": "0", "matrix": [10, 7], "x": 18.75, "y": 5.25 },
+ { "label": ".", "matrix": [4, 8], "x": 19.75, "y": 5.25 },
+
+ { "label": "LCtrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "LWin", "matrix": [6, 0], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "LAlt", "matrix": [6, 1], "w": 1.25, "x": 3.25, "y": 5.25 },
+ { "label": "LSpacebar", "matrix": [6, 2], "w": 2.75, "x": 4.5, "y": 5.25 },
+ { "label": "RSpacebar", "matrix": [4, 3], "w": 2.25, "x": 8.5, "y": 5.25 },
+ { "label": "RAlt", "matrix": [6, 4], "w": 1.25, "x": 10.75, "y": 5.25 },
+ { "label": "RWin", "matrix": [5, 5], "w": 1.25, "x": 14.75, "y": 5.25 },
+ { "label": "RCtrl", "matrix": [6, 5], "w": 1.25, "x": 16, "y": 5.25 },
+ { "label": "Left", "matrix": [6, 7], "x": 16.5, "y": 6.5 },
+ { "label": "Down", "matrix": [8, 7], "x": 17.5, "y": 6.5 },
+ { "label": "Right", "matrix": [9, 7], "x": 18.5, "y": 6.5 }
+ ]
+ },
+ "LAYOUT_1800_alice_iso": {
+ "layout": [
+ { "label": "Enc", "matrix": [0, 9], "x": 20.75, "y": 0 },
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [1, 1], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 2], "x": 3.5, "y": 0 },
+ { "label": "F4", "matrix": [1, 2], "x": 4.5, "y": 0 },
+ { "label": "F5", "matrix": [0, 3], "x": 5.75, "y": 0 },
+ { "label": "F6", "matrix": [1, 3], "x": 6.75, "y": 0 },
+ { "label": "F7", "matrix": [9, 3], "x": 9.25, "y": 0 },
+ { "label": "F8", "matrix": [10, 3], "x": 10.25, "y": 0 },
+ { "label": "F9", "matrix": [0, 4], "x": 11.5, "y": 0 },
+ { "label": "F10", "matrix": [0, 5], "x": 12.5, "y": 0 },
+ { "label": "F11", "matrix": [0, 6], "x": 13.75, "y": 0 },
+ { "label": "F12", "matrix": [1, 6], "x": 14.75, "y": 0 },
+ { "label": "M1", "matrix": [10, 6], "x": 16, "y": 0 },
+ { "label": "M2", "matrix": [0, 7], "x": 17, "y": 0 },
+ { "label": "Num Lock", "matrix": [1, 7], "x": 17.75, "y": 1.25 },
+ { "label": "/", "matrix": [0, 8], "x": 18.75, "y": 1.25 },
+ { "label": "*", "matrix": [10, 8], "x": 19.75, "y": 1.25 },
+ { "label": "-", "matrix": [1, 9], "x": 20.75, "y": 1.25 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [10, 0], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [2, 1], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [10, 1], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [2, 2], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [10, 2], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [2, 3], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [8, 3], "x": 9.25, "y": 1.25 },
+ { "label": "*", "matrix": [1, 4], "x": 10.25, "y": 1.25 },
+ { "label": "(", "matrix": [10, 4], "x": 11.25, "y": 1.25 },
+ { "label": ")", "matrix": [1, 5], "x": 12.25, "y": 1.25 },
+ { "label": "_", "matrix": [10, 5], "x": 13.25, "y": 1.25 },
+ { "label": "+", "matrix": [2, 6], "x": 14.25, "y": 1.25 },
+ { "label": "Backspace", "matrix": [9, 6], "w": 2, "x": 15.25, "y": 1.25 },
+ { "label": "7", "matrix": [2, 7], "x": 17.75, "y": 2.25 },
+ { "label": "8", "matrix": [1, 8], "x": 18.75, "y": 2.25 },
+ { "label": "9", "matrix": [9, 8], "x": 19.75, "y": 2.25 },
+ { "h": 2, "label": "+", "matrix": [8, 8], "x": 20.75, "y": 2.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [9, 0], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [3, 1], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [9, 1], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [3, 2], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [9, 2], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [7, 3], "x": 8.75, "y": 2.25 },
+ { "label": "U", "matrix": [2, 4], "x": 9.75, "y": 2.25 },
+ { "label": "I", "matrix": [9, 4], "x": 10.75, "y": 2.25 },
+ { "label": "O", "matrix": [2, 5], "x": 11.75, "y": 2.25 },
+ { "label": "P", "matrix": [9, 5], "x": 12.75, "y": 2.25 },
+ { "label": "{", "matrix": [3, 6], "x": 13.75, "y": 2.25 },
+ { "label": "}", "matrix": [8, 6], "x": 14.75, "y": 2.25 },
+ { "label": "4", "matrix": [3, 7], "x": 17.75, "y": 3.25 },
+ { "label": "5", "matrix": [2, 8], "x": 18.75, "y": 3.25 },
+ { "label": "6", "matrix": [7, 8], "x": 19.75, "y": 3.25 },
+
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [8, 0], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [4, 1], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [8, 1], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [4, 2], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [8, 2], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [6, 3], "x": 9, "y": 3.25 },
+ { "label": "J", "matrix": [3, 4], "x": 10, "y": 3.25 },
+ { "label": "K", "matrix": [8, 4], "x": 11, "y": 3.25 },
+ { "label": "L", "matrix": [3, 5], "x": 12, "y": 3.25 },
+ { "label": ":", "matrix": [8, 5], "x": 13, "y": 3.25 },
+ { "label": "\\", "matrix": [4, 6], "x": 14, "y": 3.25 },
+ { "label": "#", "matrix": [6, 6], "x": 15, "y": 3.25 },
+ { "h": 2, "label": "Enter", "matrix": [7, 6], "w": 1.25, "x": 16, "y": 2.25 },
+ { "label": "1", "matrix": [4, 7], "x": 17.75, "y": 4.25 },
+ { "label": "2", "matrix": [3, 8], "x": 18.75, "y": 4.25 },
+ { "label": "3", "matrix": [6, 8], "x": 19.75, "y": 4.25 },
+ { "h": 2, "label": "Enter", "matrix": [5, 8], "x": 20.75, "y": 4.25 },
+
+ { "label": "Shift", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "label": "~", "matrix": [7, 0], "x": 1.25, "y": 4.25 },
+ { "label": "Z", "matrix": [5, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [7, 1], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [5, 2], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [7, 2], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [3, 3], "x": 6.25, "y": 4.25 },
+ { "label": "B", "matrix": [5, 3], "x": 8.5, "y": 4.25 },
+ { "label": "N", "matrix": [4, 4], "x": 9.5, "y": 4.25 },
+ { "label": "M", "matrix": [5, 4], "x": 10.5, "y": 4.25 },
+ { "label": "<", "matrix": [7, 4], "x": 11.5, "y": 4.25 },
+ { "label": ">", "matrix": [4, 5], "x": 12.5, "y": 4.25 },
+ { "label": "?", "matrix": [7, 5], "x": 13.5, "y": 4.25 },
+ { "label": "Shift", "matrix": [5, 6], "w": 2.75, "x": 14.5, "y": 4.25 },
+ { "label": "Up", "matrix": [5, 7], "x": 17.5, "y": 5.5 },
+ { "label": "0", "matrix": [10, 7], "x": 18.75, "y": 5.25 },
+ { "label": ".", "matrix": [4, 8], "x": 19.75, "y": 5.25 },
+
+ { "label": "LCtrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "LWin", "matrix": [6, 0], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "LAlt", "matrix": [6, 1], "w": 1.25, "x": 3.25, "y": 5.25 },
+ { "label": "LSpacebar", "matrix": [6, 2], "w": 2.75, "x": 4.5, "y": 5.25 },
+ { "label": "RSpacebar", "matrix": [4, 3], "w": 2.25, "x": 8.5, "y": 5.25 },
+ { "label": "RAlt", "matrix": [6, 4], "w": 1.25, "x": 10.75, "y": 5.25 },
+ { "label": "RWin", "matrix": [5, 5], "w": 1.25, "x": 14.75, "y": 5.25 },
+ { "label": "RCtrl", "matrix": [6, 5], "w": 1.25, "x": 16, "y": 5.25 },
+ { "label": "Left", "matrix": [6, 7], "x": 16.5, "y": 6.5 },
+ { "label": "Down", "matrix": [8, 7], "x": 17.5, "y": 6.5 },
+ { "label": "Right", "matrix": [9, 7], "x": 18.5, "y": 6.5 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/adpenrose/mine/keymaps/default/keymap.c b/keyboards/adpenrose/mine/keymaps/default/keymap.c
new file mode 100644
index 00000000000..3d6cf31bd86
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+// Copyright 2022 Arturo Avila (@Arturo Avila)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_1800_alice_ansi(
+ KC_MUTE,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_P4, KC_P5, KC_P6,
+ 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_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P0, KC_PDOT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [1] = LAYOUT_1800_alice_ansi(
+ KC_TRNS,
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, KC_TRNS) }
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/keymaps/default/rules.mk b/keyboards/adpenrose/mine/keymaps/default/rules.mk
new file mode 100644
index 00000000000..4769500eb06
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes # Encoder mapping functionality
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/keymaps/iso/keymap.c b/keyboards/adpenrose/mine/keymaps/iso/keymap.c
new file mode 100644
index 00000000000..988330c979f
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/iso/keymap.c
@@ -0,0 +1,33 @@
+// Copyright 2022 Arturo Avila (@Arturo Avila)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_1800_alice_iso(
+ KC_MUTE,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_P4, KC_P5, KC_P6,
+ 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_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LSFT, MO(1), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P0, KC_PDOT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [1] = LAYOUT_1800_alice_iso(
+ KC_TRNS,
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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_TRNS, KC_TRNS) }
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/keymaps/iso/rules.mk b/keyboards/adpenrose/mine/keymaps/iso/rules.mk
new file mode 100644
index 00000000000..4769500eb06
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/iso/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes # Encoder mapping functionality
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/keymaps/solenoid/keymap.c b/keyboards/adpenrose/mine/keymaps/solenoid/keymap.c
new file mode 100644
index 00000000000..cd9e1768eb6
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/solenoid/keymap.c
@@ -0,0 +1,43 @@
+// Copyright 2022 Arturo Avila (@Arturo Avila)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ HF_TOGG,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_P4, KC_P5, KC_P6,
+ 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_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LSFT, MO(1), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P0, KC_PDOT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [1] = LAYOUT_all(
+ KC_TRNS,
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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_TRNS, KC_TRNS) }
+};
+#endif
+
+#ifdef HAPTIC_ENABLE
+bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_VOLU ... KC_VOLD:
+ return false;
+ }
+ return true;
+}
+#endif
diff --git a/keyboards/adpenrose/mine/keymaps/solenoid/rules.mk b/keyboards/adpenrose/mine/keymaps/solenoid/rules.mk
new file mode 100644
index 00000000000..2a1e874d82f
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/solenoid/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+HAPTIC_ENABLE = yes
+HAPTIC_DRIVER += SOLENOID
+ENCODER_MAP_ENABLE = yes # Encoder mapping functionality
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/keymaps/via/keymap.c b/keyboards/adpenrose/mine/keymaps/via/keymap.c
new file mode 100644
index 00000000000..776ed893d54
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+// Copyright 2022 Arturo Avila (@Arturo Avila)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_MUTE,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_P4, KC_P5, KC_P6,
+ 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_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P0, KC_PDOT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [1] = LAYOUT_all(
+ KC_TRNS,
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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_TRNS, KC_TRNS) }
+};
+#endif
diff --git a/keyboards/adpenrose/mine/keymaps/via/rules.mk b/keyboards/adpenrose/mine/keymaps/via/rules.mk
new file mode 100644
index 00000000000..4253f570f0b
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/matrix_diagram.md b/keyboards/adpenrose/mine/matrix_diagram.md
new file mode 100644
index 00000000000..05d34fb066e
--- /dev/null
+++ b/keyboards/adpenrose/mine/matrix_diagram.md
@@ -0,0 +1,78 @@
+# Matrix Diagram for the Mine Keyboard
+## Matrix for "LAYOUT_all":
+```
+┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐
+│0A│ │0B││1B│ │0C││1C│ │0D││1D│ │9D││AD│ │0E││0F│ │0G││1G│ │AG││0H│ │0J│
+└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘
+┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──────┐ ┌──┐┌──┐┌──┐┌──┐
+│1A││AA││2B││AB││2C││AC││2D│ │8D││1E││AE││1F││AF││2G││9G │ │1H││0I││AI││1J│
+└──┘└──┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──────┘ └──┘└──┘└──┘└──┘
+┌────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌────┐ ┌──┐┌──┐┌──┐┌──┐
+│2A ││9A││3B││9B││3C││9C│ │7D││2E││9E││2F││9F││3G││8G││7H │ │2H││1I││9I││8I│
+└────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──┘└────┘ └──┘└──┘└──┘│ │
+┌─────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌───────┐ ┌──┐┌──┐┌──┐│ │
+│3A ││8A││4B││8B││4C││8C│ │6D││3E││8E││3F││8F││4G││7G │ │3H││2I││7I││ │
+└─────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└───────┘ └──┘└──┘└──┘└──┘
+┌───┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─────────┐ ┌──┐┌──┐┌──┐┌──┐
+│4A ││7A││5B││7B││5C││7C││3D│ │5D││4E││5E││7E││4F││7F││5G │ │4H││3I││6I││5I│
+└───┘└──┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└─────────┘ └──┘└──┘└──┘│ │
+┌───┐┌───┐ ┌───┐┌─────────┐ ┌───────┐┌───┐ ┌───┐┌───┐ ┌──┐┌──┐│ │
+│5A ││6A │ │6B ││6C │ │4D ││6E │ │5F ││6F │ ┌──┐ │AH││4I││ │
+└───┘└───┘ └───┘└─────────┘ └───────┘└───┘ └───┘└───┘ │5H│ └──┘└──┘└──┘
+ └──┘
+ ┌──┐┌──┐┌──┐
+ │6H││8H││9H│
+ └──┘└──┘└──┘
+```
+
+## Matrix for "LAYOUT_1800_alice_ansi":
+```
+┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐
+│0A│ │0B││1B│ │0C││1C│ │0D││1D│ │9D││AD│ │0E││0F│ │0G││1G│ │AG││0H│ │0J│
+└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘
+┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──────┐ ┌──┐┌──┐┌──┐┌──┐
+│1A││AA││2B││AB││2C││AC││2D│ │8D││1E││AE││1F││AF││2G││9G │ │1H││0I││AI││1J│
+└──┘└──┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──────┘ └──┘└──┘└──┘└──┘
+┌────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌────┐ ┌──┐┌──┐┌──┐┌──┐
+│2A ││9A││3B││9B││3C││9C│ │7D││2E││9E││2F││9F││3G││8G││7H │ │2H││1I││9I││8I│
+└────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──┘└────┘ └──┘└──┘└──┘│ │
+┌─────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌───────┐ ┌──┐┌──┐┌──┐│ │
+│3A ││8A││4B││8B││4C││8C│ │6D││3E││8E││3F││8F││4G││7G │ │3H││2I││7I││ │
+└─────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└───────┘ └──┘└──┘└──┘└──┘
+┌───────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─────────┐ ┌──┐┌──┐┌──┐┌──┐
+│4A ││5B││7B││5C││7C││3D│ │5D││4E││5E││7E││4F││7F││5G │ │4H││3I││6I││5I│
+└───────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└─────────┘ └──┘└──┘└──┘│ │
+┌───┐┌───┐ ┌───┐┌─────────┐ ┌───────┐┌───┐ ┌───┐┌───┐ ┌──┐┌──┐│ │
+│5A ││6A │ │6B ││6C │ │4D ││6E │ │5F ││6F │ ┌──┐ │AH││4I││ │
+└───┘└───┘ └───┘└─────────┘ └───────┘└───┘ └───┘└───┘ │5H│ └──┘└──┘└──┘
+ └──┘
+ ┌──┐┌──┐┌──┐
+ │6H││8H││9H│
+ └──┘└──┘└──┘
+```
+
+## Matrix for "LAYOUT_1800_alice_iso":
+```
+┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐
+│0A│ │0B││1B│ │0C││1C│ │0D││1D│ │9D││AD│ │0E││0F│ │0G││1G│ │AG││0H│ │0J│
+└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘
+┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──────┐ ┌──┐┌──┐┌──┐┌──┐
+│1A││AA││2B││AB││2C││AC││2D│ │8D││1E││AE││1F││AF││2G││9G │ │1H││0I││AI││1J│
+└──┘└──┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──────┘ └──┘└──┘└──┘└──┘
+┌────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌────┐ ┌──┐┌──┐┌──┐┌──┐
+│2A ││9A││3B││9B││3C││9C│ │7D││2E││9E││2F││9F││3G││8G││7G │ │2H││1I││9I││8I│
+└────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──┘└┐ │ └──┘└──┘└──┘│ │
+┌─────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐│ │ ┌──┐┌──┐┌──┐│ │
+│3A ││8A││4B││8B││4C││8C│ │6D││3E││8E││3F││8F││4G││6G││ │ │3H││2I││7I││ │
+└─────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──┘└───┘ └──┘└──┘└──┘└──┘
+┌───┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─────────┐ ┌──┐┌──┐┌──┐┌──┐
+│4A ││7A││5B││7B││5C││7C││3D│ │5D││4E││5E││7E││4F││7F││5G │ │4H││3I││6I││5I│
+└───┘└──┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└─────────┘ └──┘└──┘└──┘│ │
+┌───┐┌───┐ ┌───┐┌─────────┐ ┌───────┐┌───┐ ┌───┐┌───┐ ┌──┐┌──┐│ │
+│5A ││6A │ │6B ││6C │ │4D ││6E │ │5F ││6F │ ┌──┐ │AH││4I││ │
+└───┘└───┘ └───┘└─────────┘ └───────┘└───┘ └───┘└───┘ │5H│ └──┘└──┘└──┘
+ └──┘
+ ┌──┐┌──┐┌──┐
+ │6H││8H││9H│
+ └──┘└──┘└──┘
+```
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/readme.md b/keyboards/adpenrose/mine/readme.md
new file mode 100644
index 00000000000..266fe1ddd5b
--- /dev/null
+++ b/keyboards/adpenrose/mine/readme.md
@@ -0,0 +1,27 @@
+# Mine
+
+
+
+A hotswap ISO/ANSI-compatible 1800 alice, assembled only with THT components, including a solenoid and a chunky encoder.
+
+* Keyboard Maintainer: [Arturo Avila](https://github.com/ADPenrose)
+* Hardware Supported: Mine v1 PCB
+* Hardware Availability: [Arturo Avila](https://github.com/ADPenrose)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make adpenrose/mine:default
+
+Flashing example for this keyboard:
+
+ make adpenrose/mine: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**: Hold down the button labeled "BOOT" and briefly press the button labeled "RESET" on the front of the PCB. To exit the bootloader mode, briefly press the button labeled "RESET" once more.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/adpenrose/mine/rules.mk b/keyboards/adpenrose/mine/rules.mk
new file mode 100644
index 00000000000..93ae8d898f2
--- /dev/null
+++ b/keyboards/adpenrose/mine/rules.mk
@@ -0,0 +1,2 @@
+# Processor frequency
+F_CPU = 16000000
\ No newline at end of file
diff --git a/keyboards/ah/haven65/haven65.c b/keyboards/ah/haven65/haven65.c
new file mode 100644
index 00000000000..b4077b1a63a
--- /dev/null
+++ b/keyboards/ah/haven65/haven65.c
@@ -0,0 +1,29 @@
+/* Copyright 2023 CMM.S Freather
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res) {
+ if (led_state.caps_lock) {
+ rgblight_sethsv_at(0, 0, 255, 0);
+ } else {
+ rgblight_sethsv_at(0, 0, 0, 0);
+ }
+ }
+ return res;
+}
diff --git a/keyboards/ah/haven65/info.json b/keyboards/ah/haven65/info.json
new file mode 100644
index 00000000000..43214e50089
--- /dev/null
+++ b/keyboards/ah/haven65/info.json
@@ -0,0 +1,124 @@
+{
+ "keyboard_name": "HAVEN65",
+ "manufacturer": "Atelier_Haven",
+ "url": "https://keyspensory.store/products/gb-haven65-by-atelier-haven",
+ "maintainer": "Freather",
+ "usb": {
+ "vid": "0x4446",
+ "pid": "0x4665",
+ "device_version": "1.0.0"
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "matrix_pins": {
+ "rows": ["B5", "B6", "C6", "F1", "D6"],
+ "cols": ["F7", "F6", "F5", "F4", "F0", "B4", "D0", "D1", "D2", "D3", "D5", "B0", "B1", "B2", "B3"]
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "command": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "ws2812": {
+ "pin": "C7",
+ },
+ "rgblight": {
+ "led_count": 1,
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix":[0,0],"x": 0, "y": 0 },
+ { "label": "1", "matrix":[0,1],"x": 1, "y": 0 },
+ { "label": "2", "matrix":[0,2],"x": 2, "y": 0 },
+ { "label": "3", "matrix":[0,3],"x": 3, "y": 0 },
+ { "label": "4", "matrix":[0,4],"x": 4, "y": 0 },
+ { "label": "5", "matrix":[0,5],"x": 5, "y": 0 },
+ { "label": "6", "matrix":[0,6],"x": 6, "y": 0 },
+ { "label": "7", "matrix":[0,7],"x": 7, "y": 0 },
+ { "label": "8", "matrix":[0,8],"x": 8, "y": 0 },
+ { "label": "9", "matrix":[0,9],"x": 9, "y": 0 },
+ { "label": "0", "matrix":[0,10],"x": 10, "y": 0 },
+ { "label": "-", "matrix":[0,11],"x": 11, "y": 0 },
+ { "label": "=", "matrix":[0,12],"x": 12, "y": 0 },
+ { "label": "backspace", "matrix":[0,13],"x": 13, "y": 0, "w": 2 },
+ { "label": "home", "matrix":[0,14],"x": 15, "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,13],"x": 13.5, "y": 1, "w": 1.5 },
+ { "label": "insert", "matrix":[1,14],"x": 15, "y": 1 },
+
+ { "label": "capslock", "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,12],"x": 12.75, "y": 2, "w": 2.25 },
+ { "label": "delete", "matrix":[2,14],"x": 15, "y": 2 },
+
+ { "label": "leftshift", "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": "rightshift", "matrix":[3,12],"x": 12.25, "y": 3, "w": 1.75 },
+ { "label": "up", "matrix":[3,13],"x": 14, "y": 3 },
+ { "label": "end", "matrix":[3,14],"x": 15, "y": 3 },
+
+ { "label": "lctrl", "matrix":[4,0],"x": 0, "y": 4, "w": 1.25 },
+ { "label": "lwin", "matrix":[4,1],"x": 1.25, "y": 4, "w": 1.25 },
+ { "label": "lalt", "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": "ralt", "matrix":[4,9],"x": 10, "y": 4, "w": 1.25 },
+ { "label": "MO(1)", "matrix":[4,10],"x": 11.25, "y": 4, "w": 1.25 },
+ { "label": "left", "matrix":[4,11],"x": 13, "y": 4 },
+ { "label": "down", "matrix":[4,12],"x": 14, "y": 4 },
+ { "label": "right", "matrix":[4,13],"x": 15, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/ah/haven65/keymaps/default/keymap.c b/keyboards/ah/haven65/keymaps/default/keymap.c
new file mode 100644
index 00000000000..1d3e67b78bb
--- /dev/null
+++ b/keyboards/ah/haven65/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Freather
+// 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_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BACKSPACE, KC_HOME,
+ 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_INS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/ah/haven65/keymaps/via/keymap.c b/keyboards/ah/haven65/keymaps/via/keymap.c
new file mode 100644
index 00000000000..c42231995fb
--- /dev/null
+++ b/keyboards/ah/haven65/keymaps/via/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 Freather
+// 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_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BACKSPACE, KC_HOME,
+ 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_INS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS , KC_TRNS , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+
+ )
+};
diff --git a/keyboards/ah/haven65/keymaps/via/rules.mk b/keyboards/ah/haven65/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/ah/haven65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/ah/haven65/readme.md b/keyboards/ah/haven65/readme.md
new file mode 100644
index 00000000000..bf29ca0810b
--- /dev/null
+++ b/keyboards/ah/haven65/readme.md
@@ -0,0 +1,21 @@
+#Haven65
+
+
+
+
+* Keyboard Maintainer: [Freather](https://github.com/CMMS-Freather)
+* Hardware Supported: PCB, Atmega32u4
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ah/haven65:default
+
+Flashing example for this keyboard:
+
+ make ah/haven65:default:flash
+
+##Bootloader Atmel-DFU
+
+For reset instruction, use the physical reset button on the back of the keyboard to enter bootloader mode
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ah/haven65/rules.mk b/keyboards/ah/haven65/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/ah/haven65/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/ah/haven80/haven80.c b/keyboards/ah/haven80/haven80.c
new file mode 100644
index 00000000000..d02130cfe9e
--- /dev/null
+++ b/keyboards/ah/haven80/haven80.c
@@ -0,0 +1,29 @@
+/* Copyright 2023 CMM.S Freather
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res) {
+ if (led_state.caps_lock) {
+ rgblight_sethsv_range(0, 0, 255, 0,20);
+ } else {
+ rgblight_sethsv_range(0, 0, 0, 0, 20);
+ }
+ }
+ return res;
+}
diff --git a/keyboards/ah/haven80/hotswap/info.json b/keyboards/ah/haven80/hotswap/info.json
new file mode 100644
index 00000000000..4ec292ef965
--- /dev/null
+++ b/keyboards/ah/haven80/hotswap/info.json
@@ -0,0 +1,110 @@
+{
+ "keyboard_name": "haven80_hotswap",
+ "usb": {
+ "vid": "0x4446",
+ "pid": "0x4680",
+ "device_version": "1.0.0"
+ },
+ "matrix_pins": {
+ "rows": ["F0", "F1", "F4", "F5", "F6", "B1", "B2", "B3", "D3", "D5", "F7"],
+ "cols": ["D0", "D1", "D2", "B0", "D4", "B4", "D6", "D7", "B5"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix":[0,0],"x": 0, "y": 0 },
+ { "label": "F1", "matrix":[0,1],"x": 1.25, "y": 0 },
+ { "label": "F2", "matrix":[0,2],"x": 2.25, "y": 0 },
+ { "label": "F3", "matrix":[0,3],"x": 3.25, "y": 0 },
+ { "label": "F4", "matrix":[0,4],"x": 4.25, "y": 0 },
+ { "label": "F5", "matrix":[0,5],"x": 5.5, "y": 0 },
+ { "label": "F6", "matrix":[0,6],"x": 6.5, "y": 0 },
+ { "label": "F7", "matrix":[0,7],"x": 7.5, "y": 0 },
+ { "label": "F8", "matrix":[5,8],"x": 8.5, "y": 0 },
+ { "label": "F9", "matrix":[5,7],"x": 9.5, "y": 0 },
+ { "label": "F10", "matrix":[5,6],"x": 10.75, "y": 0 },
+ { "label": "F11", "matrix":[5,5],"x": 11.75, "y": 0 },
+ { "label": "F12", "matrix":[5,4],"x": 12.75, "y": 0 },
+ { "label": "F13", "matrix":[5,3],"x": 13.75, "y": 0 },
+ { "label": "Prtsc", "matrix":[5,2],"x": 15.25, "y": 0 },
+ { "label": "Scrlk", "matrix":[5,1],"x": 16.25, "y": 0 },
+ { "label": "Pause", "matrix":[5,0],"x": 17.25, "y": 0 },
+
+ { "label": "~", "matrix":[1,0],"x": 0, "y": 1.5 },
+ { "label": "1", "matrix":[1,1],"x": 1, "y": 1.5 },
+ { "label": "2", "matrix":[1,2],"x": 2, "y": 1.5 },
+ { "label": "3", "matrix":[1,3],"x": 3, "y": 1.5 },
+ { "label": "4", "matrix":[1,4],"x": 4, "y": 1.5 },
+ { "label": "5", "matrix":[1,5],"x": 5, "y": 1.5 },
+ { "label": "6", "matrix":[1,6],"x": 6, "y": 1.5 },
+ { "label": "7", "matrix":[1,7],"x": 7, "y": 1.5 },
+ { "label": "8", "matrix":[1,8],"x": 8, "y": 1.5 },
+ { "label": "9", "matrix":[6,8],"x": 9, "y": 1.5 },
+ { "label": "0", "matrix":[6,7],"x": 10, "y": 1.5 },
+ { "label": "-", "matrix":[6,6],"x": 11, "y": 1.5 },
+ { "label": "=", "matrix":[6,5],"x": 12, "y": 1.5 },
+ { "label": "backspace", "matrix":[6,4],"x": 13, "y": 1.5, "w": 2 },
+ { "label": "insert", "matrix":[6,2],"x": 15.25, "y": 1.5 },
+ { "label": "home", "matrix":[6,1],"x": 16.25, "y": 1.5 },
+ { "label": "pg up", "matrix":[6,0],"x": 17.25, "y": 1.5 },
+
+ { "label": "tab", "matrix":[2,0],"x": 0, "y": 2.5, "w": 1.5 },
+ { "label": "q", "matrix":[2,1],"x": 1.5, "y": 2.5 },
+ { "label": "w", "matrix":[2,2],"x": 2.5, "y": 2.5 },
+ { "label": "e", "matrix":[2,3],"x": 3.5, "y": 2.5 },
+ { "label": "r", "matrix":[2,4],"x": 4.5, "y": 2.5 },
+ { "label": "t", "matrix":[2,5],"x": 5.5, "y": 2.5 },
+ { "label": "y", "matrix":[2,6],"x": 6.5, "y": 2.5 },
+ { "label": "u", "matrix":[2,7],"x": 7.5, "y": 2.5 },
+ { "label": "i", "matrix":[2,8],"x": 8.5, "y": 2.5 },
+ { "label": "o", "matrix":[7,8],"x": 9.5, "y": 2.5 },
+ { "label": "p", "matrix":[7,7],"x": 10.5, "y": 2.5 },
+ { "label": "{", "matrix":[7,6],"x": 11.5, "y": 2.5 },
+ { "label": "}", "matrix":[7,5],"x": 12.5, "y": 2.5 },
+ { "label": "|", "matrix":[7,4],"x": 13.5, "y": 2.5, "w": 1.5 },
+ { "label": "delete", "matrix":[7,2],"x": 15.25, "y": 2.5 },
+ { "label": "end", "matrix":[7,1],"x": 16.25, "y": 2.5 },
+ { "label": "pg dn", "matrix":[7,0],"x": 17.25, "y": 2.5 },
+
+ { "label": "capslock", "matrix":[3,0],"x": 0, "y": 3.5, "w": 1.75 },
+ { "label": "a", "matrix":[3,1],"x": 1.75, "y": 3.5 },
+ { "label": "s", "matrix":[3,2],"x": 2.75, "y": 3.5 },
+ { "label": "d", "matrix":[3,3],"x": 3.75, "y": 3.5 },
+ { "label": "f", "matrix":[3,4],"x": 4.75, "y": 3.5 },
+ { "label": "g", "matrix":[3,5],"x": 5.75, "y": 3.5 },
+ { "label": "h", "matrix":[3,6],"x": 6.75, "y": 3.5 },
+ { "label": "j", "matrix":[3,7],"x": 7.75, "y": 3.5 },
+ { "label": "k", "matrix":[3,8],"x": 8.75, "y": 3.5 },
+ { "label": "l", "matrix":[8,8],"x": 9.75, "y": 3.5 },
+ { "label": ";", "matrix":[8,7],"x": 10.75, "y": 3.5 },
+ { "label": "'", "matrix":[8,6],"x": 11.75, "y": 3.5 },
+ { "label": "enter", "matrix":[8,5],"x": 12.75, "y": 3.5, "w": 2.25 },
+
+ { "label": "leftshift", "matrix":[4,0],"x": 0, "y": 4.5, "w": 2.25 },
+ { "label": "z", "matrix":[4,1],"x": 2.25, "y": 4.5 },
+ { "label": "x", "matrix":[4,2],"x": 3.25, "y": 4.5 },
+ { "label": "c", "matrix":[4,3],"x": 4.25, "y": 4.5 },
+ { "label": "v", "matrix":[4,4],"x": 5.25, "y": 4.5 },
+ { "label": "b", "matrix":[4,5],"x": 6.25, "y": 4.5 },
+ { "label": "n", "matrix":[4,6],"x": 7.25, "y": 4.5 },
+ { "label": "m", "matrix":[4,7],"x": 8.25, "y": 4.5 },
+ { "label": ",", "matrix":[4,8],"x": 9.25, "y": 4.5 },
+ { "label": ".", "matrix":[9,8],"x": 10.25, "y": 4.5 },
+ { "label": "/", "matrix":[9,7],"x": 11.25, "y": 4.5 },
+ { "label": "rightshift", "matrix":[9,6],"x": 12.25, "y": 4.5, "w": 2.75 },
+ { "label": "up", "matrix":[8,1],"x": 16.25, "y": 4.5 },
+
+ { "label": "lctrl", "matrix":[10,0],"x": 0, "y": 5.5, "w": 1.5 },
+ { "label": "lwin", "matrix":[10,1],"x": 1.5, "y": 5.5 },
+ { "label": "lalt", "matrix":[10,2],"x": 2.5, "y": 5.5, "w": 1.5 },
+ { "label": "space", "matrix":[10,3],"x": 4, "y": 5.5, "w": 7 },
+ { "label": "ralt", "matrix":[10,5],"x": 11, "y": 5.5, "w": 1.5 },
+ { "label": "rwin", "matrix":[10,6],"x": 12.5, "y": 5.5, "w": 1 },
+ { "label": "rctrl", "matrix":[10,7],"x": 13.5, "y": 5.5, "w":1.5},
+ { "label": "left", "matrix":[9,2],"x": 15.25, "y": 5.5 },
+ { "label": "down", "matrix":[9,1],"x": 16.25, "y": 5.5 },
+ { "label": "right", "matrix":[9,0],"x": 17.25, "y": 5.5 }
+ ]
+ }
+ },
+}
diff --git a/keyboards/ah/haven80/hotswap/readme.md b/keyboards/ah/haven80/hotswap/readme.md
new file mode 100644
index 00000000000..a43054863c3
--- /dev/null
+++ b/keyboards/ah/haven80/hotswap/readme.md
@@ -0,0 +1,21 @@
+#Haven80 Hotswap
+
+
+
+
+* Keyboard Maintainer: [Freather](https://github.com/CMMS-Freather)
+* Hardware Supported: PCB, Atmega32u4
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ah/haven80/hotswap:default
+
+Flashing example for this keyboard:
+
+ make ah/haven80/hotswap:default:flash
+
+##Bootloader Atmel-DFU
+
+For reset instruction, use the physical reset button on the back of the keyboard to enter bootloader mode
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ah/haven80/hotswap/rules.mk b/keyboards/ah/haven80/hotswap/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/ah/haven80/hotswap/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/ah/haven80/info.json b/keyboards/ah/haven80/info.json
new file mode 100644
index 00000000000..bd878151549
--- /dev/null
+++ b/keyboards/ah/haven80/info.json
@@ -0,0 +1,34 @@
+{
+ "manufacturer": "Atelier_Haven",
+ "url": "",
+ "maintainer": "Freather",
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "ws2812": {
+ "pin": "E6",
+ },
+ "rgblight": {
+ "led_count": 21,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ }
+}
diff --git a/keyboards/ah/haven80/keymaps/default/keymap.c b/keyboards/ah/haven80/keymaps/default/keymap.c
new file mode 100644
index 00000000000..cbcc6bef38e
--- /dev/null
+++ b/keyboards/ah/haven80/keymaps/default/keymap.c
@@ -0,0 +1,15 @@
+// Copyright 2023 Freather
+// 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/ah/haven80/keymaps/via/keymap.c b/keyboards/ah/haven80/keymaps/via/keymap.c
new file mode 100644
index 00000000000..03b98293fcd
--- /dev/null
+++ b/keyboards/ah/haven80/keymaps/via/keymap.c
@@ -0,0 +1,16 @@
+// Copyright 2023 Freather
+// 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+};
diff --git a/keyboards/ah/haven80/keymaps/via/rules.mk b/keyboards/ah/haven80/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/ah/haven80/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/ah/haven80/solder/info.json b/keyboards/ah/haven80/solder/info.json
new file mode 100644
index 00000000000..db9eb015de1
--- /dev/null
+++ b/keyboards/ah/haven80/solder/info.json
@@ -0,0 +1,110 @@
+{
+ "keyboard_name": "haven80_solder",
+ "usb": {
+ "vid": "0x4446",
+ "pid": "0x4681",
+ "device_version": "1.0.0"
+ },
+ "matrix_pins": {
+ "rows": ["F0", "F1", "F4", "F5", "C6", "B1", "B2", "B3", "D3", "D5", "D6"],
+ "cols": ["D0", "D1", "D2", "B0", "C7", "B5", "D7", "B4", "B6"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix":[0,0],"x": 0, "y": 0 },
+ { "label": "F1", "matrix":[0,1],"x": 1.25, "y": 0 },
+ { "label": "F2", "matrix":[0,2],"x": 2.25, "y": 0 },
+ { "label": "F3", "matrix":[0,3],"x": 3.25, "y": 0 },
+ { "label": "F4", "matrix":[0,4],"x": 4.25, "y": 0 },
+ { "label": "F5", "matrix":[0,5],"x": 5.5, "y": 0 },
+ { "label": "F6", "matrix":[0,6],"x": 6.5, "y": 0 },
+ { "label": "F7", "matrix":[0,7],"x": 7.5, "y": 0 },
+ { "label": "F8", "matrix":[5,8],"x": 8.5, "y": 0 },
+ { "label": "F9", "matrix":[5,7],"x": 9.5, "y": 0 },
+ { "label": "F10", "matrix":[5,6],"x": 10.75, "y": 0 },
+ { "label": "F11", "matrix":[5,5],"x": 11.75, "y": 0 },
+ { "label": "F12", "matrix":[5,4],"x": 12.75, "y": 0 },
+ { "label": "F13", "matrix":[5,3],"x": 13.75, "y": 0 },
+ { "label": "Prtsc", "matrix":[5,2],"x": 15.25, "y": 0 },
+ { "label": "Scrlk", "matrix":[5,1],"x": 16.25, "y": 0 },
+ { "label": "Pause", "matrix":[5,0],"x": 17.25, "y": 0 },
+
+ { "label": "~", "matrix":[1,0],"x": 0, "y": 1.5 },
+ { "label": "1", "matrix":[1,1],"x": 1, "y": 1.5 },
+ { "label": "2", "matrix":[1,2],"x": 2, "y": 1.5 },
+ { "label": "3", "matrix":[1,3],"x": 3, "y": 1.5 },
+ { "label": "4", "matrix":[1,4],"x": 4, "y": 1.5 },
+ { "label": "5", "matrix":[1,5],"x": 5, "y": 1.5 },
+ { "label": "6", "matrix":[1,6],"x": 6, "y": 1.5 },
+ { "label": "7", "matrix":[1,7],"x": 7, "y": 1.5 },
+ { "label": "8", "matrix":[1,8],"x": 8, "y": 1.5 },
+ { "label": "9", "matrix":[6,8],"x": 9, "y": 1.5 },
+ { "label": "0", "matrix":[6,7],"x": 10, "y": 1.5 },
+ { "label": "-", "matrix":[6,6],"x": 11, "y": 1.5 },
+ { "label": "=", "matrix":[6,5],"x": 12, "y": 1.5 },
+ { "label": "backspace", "matrix":[6,4],"x": 13, "y": 1.5, "w": 2 },
+ { "label": "insert", "matrix":[6,2],"x": 15.25, "y": 1.5 },
+ { "label": "home", "matrix":[6,1],"x": 16.25, "y": 1.5 },
+ { "label": "pg up", "matrix":[6,0],"x": 17.25, "y": 1.5 },
+
+ { "label": "tab", "matrix":[2,0],"x": 0, "y": 2.5, "w": 1.5 },
+ { "label": "q", "matrix":[2,1],"x": 1.5, "y": 2.5 },
+ { "label": "w", "matrix":[2,2],"x": 2.5, "y": 2.5 },
+ { "label": "e", "matrix":[2,3],"x": 3.5, "y": 2.5 },
+ { "label": "r", "matrix":[2,4],"x": 4.5, "y": 2.5 },
+ { "label": "t", "matrix":[2,5],"x": 5.5, "y": 2.5 },
+ { "label": "y", "matrix":[2,6],"x": 6.5, "y": 2.5 },
+ { "label": "u", "matrix":[2,7],"x": 7.5, "y": 2.5 },
+ { "label": "i", "matrix":[2,8],"x": 8.5, "y": 2.5 },
+ { "label": "o", "matrix":[7,8],"x": 9.5, "y": 2.5 },
+ { "label": "p", "matrix":[7,7],"x": 10.5, "y": 2.5 },
+ { "label": "{", "matrix":[7,6],"x": 11.5, "y": 2.5 },
+ { "label": "}", "matrix":[7,5],"x": 12.5, "y": 2.5 },
+ { "label": "|", "matrix":[7,4],"x": 13.5, "y": 2.5, "w": 1.5 },
+ { "label": "delete", "matrix":[7,2],"x": 15.25, "y": 2.5 },
+ { "label": "end", "matrix":[7,1],"x": 16.25, "y": 2.5 },
+ { "label": "pg dn", "matrix":[7,0],"x": 17.25, "y": 2.5 },
+
+ { "label": "capslock", "matrix":[3,0],"x": 0, "y": 3.5, "w": 1.75 },
+ { "label": "a", "matrix":[3,1],"x": 1.75, "y": 3.5 },
+ { "label": "s", "matrix":[3,2],"x": 2.75, "y": 3.5 },
+ { "label": "d", "matrix":[3,3],"x": 3.75, "y": 3.5 },
+ { "label": "f", "matrix":[3,4],"x": 4.75, "y": 3.5 },
+ { "label": "g", "matrix":[3,5],"x": 5.75, "y": 3.5 },
+ { "label": "h", "matrix":[3,6],"x": 6.75, "y": 3.5 },
+ { "label": "j", "matrix":[3,7],"x": 7.75, "y": 3.5 },
+ { "label": "k", "matrix":[3,8],"x": 8.75, "y": 3.5 },
+ { "label": "l", "matrix":[8,8],"x": 9.75, "y": 3.5 },
+ { "label": ";", "matrix":[8,7],"x": 10.75, "y": 3.5 },
+ { "label": "'", "matrix":[8,6],"x": 11.75, "y": 3.5 },
+ { "label": "enter", "matrix":[8,5],"x": 12.75, "y": 3.5, "w": 2.25 },
+
+ { "label": "leftshift", "matrix":[4,0],"x": 0, "y": 4.5, "w": 2.25 },
+ { "label": "z", "matrix":[4,1],"x": 2.25, "y": 4.5 },
+ { "label": "x", "matrix":[4,2],"x": 3.25, "y": 4.5 },
+ { "label": "c", "matrix":[4,3],"x": 4.25, "y": 4.5 },
+ { "label": "v", "matrix":[4,4],"x": 5.25, "y": 4.5 },
+ { "label": "b", "matrix":[4,5],"x": 6.25, "y": 4.5 },
+ { "label": "n", "matrix":[4,6],"x": 7.25, "y": 4.5 },
+ { "label": "m", "matrix":[4,7],"x": 8.25, "y": 4.5 },
+ { "label": ",", "matrix":[4,8],"x": 9.25, "y": 4.5 },
+ { "label": ".", "matrix":[9,8],"x": 10.25, "y": 4.5 },
+ { "label": "/", "matrix":[9,7],"x": 11.25, "y": 4.5 },
+ { "label": "rightshift", "matrix":[9,6],"x": 12.25, "y": 4.5, "w": 2.75 },
+ { "label": "up", "matrix":[8,1],"x": 16.25, "y": 4.5 },
+
+ { "label": "lctrl", "matrix":[10,0],"x": 0, "y": 5.5, "w": 1.5 },
+ { "label": "lwin", "matrix":[10,1],"x": 1.5, "y": 5.5 },
+ { "label": "lalt", "matrix":[10,2],"x": 2.5, "y": 5.5, "w": 1.5 },
+ { "label": "space", "matrix":[10,3],"x": 4, "y": 5.5, "w": 7 },
+ { "label": "ralt", "matrix":[10,5],"x": 11, "y": 5.5, "w": 1.5 },
+ { "label": "rwin", "matrix":[10,6],"x": 12.5, "y": 5.5, "w": 1 },
+ { "label": "rctrl", "matrix":[10,7],"x": 13.5, "y": 5.5, "w":1.5},
+ { "label": "left", "matrix":[9,2],"x": 15.25, "y": 5.5 },
+ { "label": "down", "matrix":[9,1],"x": 16.25, "y": 5.5 },
+ { "label": "right", "matrix":[9,0],"x": 17.25, "y": 5.5 }
+ ]
+ }
+ },
+}
diff --git a/keyboards/ah/haven80/solder/readme.md b/keyboards/ah/haven80/solder/readme.md
new file mode 100644
index 00000000000..670e760682c
--- /dev/null
+++ b/keyboards/ah/haven80/solder/readme.md
@@ -0,0 +1,21 @@
+# Haven80 Solder
+
+
+
+
+* Keyboard Maintainer: [Freather](https://github.com/CMMS-Freather)
+* Hardware Supported: PCB, Atmega32u4
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ah/haven80/solder:default
+
+Flashing example for this keyboard:
+
+ make ah/haven80/solder:default:flash
+
+## Bootloader
+
+For reset instruction, use the physical reset button on the back of the keyboard to enter bootloader mode
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ah/haven80/solder/rules.mk b/keyboards/ah/haven80/solder/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/ah/haven80/solder/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/aliceh66/pianoforte/info.json b/keyboards/aliceh66/pianoforte/info.json
index d645ddf5f6b..6cc2546794c 100644
--- a/keyboards/aliceh66/pianoforte/info.json
+++ b/keyboards/aliceh66/pianoforte/info.json
@@ -15,7 +15,11 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["tkl_f13_ansi", "tkl_f13_iso"],
+ "community_layouts": ["tkl_f13_ansi", "tkl_f13_ansi_split_bs_rshift", "tkl_f13_iso", "tkl_f13_iso_split_bs_rshift", "tkl_f13_ansi_tsangan", "tkl_f13_ansi_tsangan_split_bs_rshift", "tkl_f13_iso_tsangan", "tkl_f13_iso_tsangan_split_bs_rshift"],
+ "layout_aliases": {
+ "LAYOUT_tkl_ansi_7u": "LAYOUT_tkl_f13_ansi_tsangan",
+ "LAYOUT_tkl_iso_7u": "LAYOUT_tkl_f13_iso_tsangan"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -56,72 +60,72 @@
{"matrix": [3, 5], "x": 11, "y": 1.25},
{"matrix": [2, 6], "x": 12, "y": 1.25},
{"matrix": [3, 6], "x": 13, "y": 1.25},
- {"matrix": [2, 7], "x": 14, "y": 1.25},
+ {"matrix": [6, 7], "x": 14, "y": 1.25},
- {"matrix": [3, 7], "x": 15.25, "y": 1.25},
- {"matrix": [2, 8], "x": 16.25, "y": 1.25},
- {"matrix": [4, 0], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [3, 7], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 17.25, "y": 1.25},
- {"matrix": [5, 0], "x": 0, "y": 2.25, "w": 1.5},
- {"matrix": [4, 1], "x": 1.5, "y": 2.25},
- {"matrix": [5, 1], "x": 2.5, "y": 2.25},
- {"matrix": [4, 2], "x": 3.5, "y": 2.25},
- {"matrix": [5, 2], "x": 4.5, "y": 2.25},
- {"matrix": [4, 3], "x": 5.5, "y": 2.25},
- {"matrix": [5, 3], "x": 6.5, "y": 2.25},
- {"matrix": [4, 4], "x": 7.5, "y": 2.25},
- {"matrix": [5, 4], "x": 8.5, "y": 2.25},
- {"matrix": [4, 5], "x": 9.5, "y": 2.25},
- {"matrix": [5, 5], "x": 10.5, "y": 2.25},
- {"matrix": [4, 6], "x": 11.5, "y": 2.25},
- {"matrix": [5, 6], "x": 12.5, "y": 2.25},
- {"matrix": [4, 7], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+ {"matrix": [5, 6], "x": 13.5, "y": 2.25, "w": 1.5},
- {"matrix": [5, 7], "x": 15.25, "y": 2.25},
- {"matrix": [4, 8], "x": 16.25, "y": 2.25},
- {"matrix": [6, 0], "x": 17.25, "y": 2.25},
+ {"matrix": [4, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 17.25, "y": 2.25},
- {"matrix": [7, 0], "x": 0, "y": 3.25, "w": 1.75},
- {"matrix": [6, 1], "x": 1.75, "y": 3.25},
- {"matrix": [7, 1], "x": 2.75, "y": 3.25},
- {"matrix": [6, 2], "x": 3.75, "y": 3.25},
- {"matrix": [7, 2], "x": 4.75, "y": 3.25},
- {"matrix": [6, 3], "x": 5.75, "y": 3.25},
- {"matrix": [7, 3], "x": 6.75, "y": 3.25},
- {"matrix": [6, 4], "x": 7.75, "y": 3.25},
- {"matrix": [7, 4], "x": 8.75, "y": 3.25},
- {"matrix": [6, 5], "x": 9.75, "y": 3.25},
- {"matrix": [7, 5], "x": 10.75, "y": 3.25},
- {"matrix": [6, 6], "x": 11.75, "y": 3.25},
- {"matrix": [7, 6], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 13.75, "y": 3.25, "w": 1.25},
- {"matrix": [6, 7], "x": 0, "y": 4.25, "w": 1.25},
- {"matrix": [8, 0], "x": 1.25, "y": 4.25},
- {"matrix": [9, 0], "x": 2.25, "y": 4.25},
- {"matrix": [8, 1], "x": 3.25, "y": 4.25},
- {"matrix": [9, 1], "x": 4.25, "y": 4.25},
- {"matrix": [8, 2], "x": 5.25, "y": 4.25},
- {"matrix": [9, 2], "x": 6.25, "y": 4.25},
- {"matrix": [8, 3], "x": 7.25, "y": 4.25},
- {"matrix": [9, 3], "x": 8.25, "y": 4.25},
- {"matrix": [8, 4], "x": 9.25, "y": 4.25},
- {"matrix": [9, 4], "x": 10.25, "y": 4.25},
- {"matrix": [8, 5], "x": 11.25, "y": 4.25},
- {"matrix": [9, 5], "x": 12.25, "y": 4.25, "w": 1.75},
- {"matrix": [8, 6], "x": 12.24, "y": 4.25, "w": 1.75},
- {"matrix": [9, 6], "x": 14, "y": 4.25},
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.75, "w": 1.75, "h": 0.5},
+ {"matrix": [9, 6], "x": 12.25, "y": 4.25, "w": 2.75, "h": 0.5},
+ {"matrix": [8, 7], "x": 14, "y": 4.75, "h": 0.5},
- {"matrix": [8, 7], "x": 16.25, "y": 4.25},
+ {"matrix": [9, 7], "x": 16.25, "y": 4.25},
- {"matrix": [9, 7], "x": 0, "y": 5.25, "w": 1.25},
- {"matrix": [10, 0], "x": 1.25, "y": 5.25, "w": 1.25},
- {"matrix": [11, 0], "x": 2.5, "y": 5.25, "w": 1.25},
- {"matrix": [10, 1], "x": 3.75, "y": 5.25, "w": 6.25},
- {"matrix": [11, 3], "x": 10, "y": 5.25},
- {"matrix": [10, 5], "x": 11, "y": 5.25},
- {"matrix": [11, 5], "x": 12, "y": 5.25},
- {"matrix": [10, 6], "x": 13, "y": 5.25},
- {"matrix": [11, 6], "x": 14, "y": 5.25},
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 3], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 6], "x": 13.75, "y": 5.25, "w": 1.25},
{"matrix": [10, 7], "x": 15.25, "y": 5.25},
{"matrix": [11, 7], "x": 16.25, "y": 5.25},
@@ -234,6 +238,114 @@
{"matrix": [10, 8], "x": 17.25, "y": 5.25}
]
},
+ "LAYOUT_tkl_f13_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [1, 1], "x": 3.25, "y": 0},
+ {"matrix": [0, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [1, 2], "x": 5.5, "y": 0},
+ {"matrix": [0, 3], "x": 6.5, "y": 0},
+ {"matrix": [1, 3], "x": 7.5, "y": 0},
+ {"matrix": [0, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [1, 4], "x": 9.75, "y": 0},
+ {"matrix": [0, 5], "x": 10.75, "y": 0},
+ {"matrix": [1, 5], "x": 11.75, "y": 0},
+ {"matrix": [0, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [1, 6], "x": 14, "y": 0},
+
+ {"matrix": [0, 7], "x": 15.25, "y": 0},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
+ {"matrix": [0, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25},
+ {"matrix": [6, 7], "x": 14, "y": 1.25},
+
+ {"matrix": [2, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [3, 7], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+ {"matrix": [5, 6], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [4, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [8, 7], "x": 14, "y": 4.25},
+
+ {"matrix": [9, 7], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 3], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 6], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 17.25, "y": 5.25}
+ ]
+ },
"LAYOUT_tkl_f13_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -341,7 +453,116 @@
{"matrix": [10, 8], "x": 17.25, "y": 5.25}
]
},
- "LAYOUT_tkl_ansi_7u": {
+ "LAYOUT_tkl_f13_iso_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [1, 1], "x": 3.25, "y": 0},
+ {"matrix": [0, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [1, 2], "x": 5.5, "y": 0},
+ {"matrix": [0, 3], "x": 6.5, "y": 0},
+ {"matrix": [1, 3], "x": 7.5, "y": 0},
+ {"matrix": [0, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [1, 4], "x": 9.75, "y": 0},
+ {"matrix": [0, 5], "x": 10.75, "y": 0},
+ {"matrix": [1, 5], "x": 11.75, "y": 0},
+ {"matrix": [0, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [1, 6], "x": 14, "y": 0},
+
+ {"matrix": [0, 7], "x": 15.25, "y": 0},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
+ {"matrix": [0, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25},
+ {"matrix": [6, 7], "x": 14, "y": 1.25},
+
+ {"matrix": [2, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [3, 7], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+
+ {"matrix": [4, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [8, 7], "x": 14, "y": 4.25},
+
+ {"matrix": [9, 7], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 3], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 6], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -446,7 +667,114 @@
{"matrix": [10, 8], "x": 17.25, "y": 5.25}
]
},
- "LAYOUT_tkl_iso_7u": {
+ "LAYOUT_tkl_f13_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [1, 1], "x": 3.25, "y": 0},
+ {"matrix": [0, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [1, 2], "x": 5.5, "y": 0},
+ {"matrix": [0, 3], "x": 6.5, "y": 0},
+ {"matrix": [1, 3], "x": 7.5, "y": 0},
+ {"matrix": [0, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [1, 4], "x": 9.75, "y": 0},
+ {"matrix": [0, 5], "x": 10.75, "y": 0},
+ {"matrix": [1, 5], "x": 11.75, "y": 0},
+ {"matrix": [0, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [1, 6], "x": 14, "y": 0},
+
+ {"matrix": [0, 7], "x": 15.25, "y": 0},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
+ {"matrix": [0, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25},
+ {"matrix": [6, 7], "x": 14, "y": 1.25},
+
+ {"matrix": [2, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [3, 7], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+ {"matrix": [5, 6], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [4, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [8, 7], "x": 14, "y": 4.25},
+
+ {"matrix": [9, 7], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 0], "x": 1.5, "y": 5.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 3], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [11, 5], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25},
+ {"matrix": [11, 6], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [10, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -547,6 +875,114 @@
{"matrix": [10, 6], "x": 12.5, "y": 5.25},
{"matrix": [11, 6], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [1, 1], "x": 3.25, "y": 0},
+ {"matrix": [0, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [1, 2], "x": 5.5, "y": 0},
+ {"matrix": [0, 3], "x": 6.5, "y": 0},
+ {"matrix": [1, 3], "x": 7.5, "y": 0},
+ {"matrix": [0, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [1, 4], "x": 9.75, "y": 0},
+ {"matrix": [0, 5], "x": 10.75, "y": 0},
+ {"matrix": [1, 5], "x": 11.75, "y": 0},
+ {"matrix": [0, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [1, 6], "x": 14, "y": 0},
+
+ {"matrix": [0, 7], "x": 15.25, "y": 0},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
+ {"matrix": [0, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25},
+ {"matrix": [6, 7], "x": 14, "y": 1.25},
+
+ {"matrix": [2, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [3, 7], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+
+ {"matrix": [4, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [8, 7], "x": 14, "y": 4.25},
+
+ {"matrix": [9, 7], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 0], "x": 1.5, "y": 5.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 3], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [11, 5], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25},
+ {"matrix": [11, 6], "x": 13.5, "y": 5.25, "w": 1.5},
+
{"matrix": [10, 7], "x": 15.25, "y": 5.25},
{"matrix": [11, 7], "x": 16.25, "y": 5.25},
{"matrix": [10, 8], "x": 17.25, "y": 5.25}
diff --git a/keyboards/aliceh66/pianoforte/keymaps/default/keymap.c b/keyboards/aliceh66/pianoforte/keymaps/default/keymap.c
index 8762ce72d00..a5e41c2e0f7 100644
--- a/keyboards/aliceh66/pianoforte/keymaps/default/keymap.c
+++ b/keyboards/aliceh66/pianoforte/keymaps/default/keymap.c
@@ -21,13 +21,13 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_all(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
-)
+ [_LAYER0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
};
diff --git a/keyboards/aliceh66/pianoforte/keymaps/iso/keymap.c b/keyboards/aliceh66/pianoforte/keymaps/iso/keymap.c
index c6db4637897..a4d4a512744 100644
--- a/keyboards/aliceh66/pianoforte/keymaps/iso/keymap.c
+++ b/keyboards/aliceh66/pianoforte/keymaps/iso/keymap.c
@@ -21,13 +21,13 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_tkl_f13_iso(
- 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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC , KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
-)
+ [_LAYER0] = LAYOUT_tkl_f13_iso(
+ 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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
};
diff --git a/keyboards/aliceh66/pianoforte/keymaps/via/keymap.c b/keyboards/aliceh66/pianoforte/keymaps/via/keymap.c
index 9c9dc9ffbd9..e0579044b9b 100644
--- a/keyboards/aliceh66/pianoforte/keymaps/via/keymap.c
+++ b/keyboards/aliceh66/pianoforte/keymaps/via/keymap.c
@@ -20,24 +20,24 @@ enum layer_names {
_LAYER1,
};
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_all(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
+ [_LAYER0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
- [_LAYER1] = LAYOUT_all(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
};
diff --git a/keyboards/aliceh66/pianoforte/matrix_diagram.md b/keyboards/aliceh66/pianoforte/matrix_diagram.md
new file mode 100644
index 00000000000..058f31322c7
--- /dev/null
+++ b/keyboards/aliceh66/pianoforte/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for AliceH Pianoforte Solder
+
+```
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+│00 ││10 │01 │11 │02 ││12 │03 │13 │04 ││14 │05 │15 │06 ││16 ││07 │17 │08 │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐ ┌───────┐
+│20 │30 │21 │31 │22 │32 │23 │33 │24 │34 │25 │35 │26 │36 │67 ││27 │37 │28 │ │36 │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ └─┬─────┤
+│40 │50 │41 │51 │42 │52 │43 │53 │44 │54 │45 │55 │46 │56 ││47 │57 │48 │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘ ┌──┴┐76 │ ISO Enter
+│60 │70 │61 │71 │62 │72 │63 │73 │64 │74 │65 │75 │76 │ │66 │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ └───┴────┘
+│80 │90 │81 │91 │82 │92 │83 │93 │84 │94 │85 │95 │86 │87 │ │97 │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
+│A0 │B0 │A1 │B3 │A5 │B5 │A6 │B6 ││A7 │B7 │A8 │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌────────┐ ┌──────────┐
+│80 │ 2.25u LShift 2.75u RShift │96 │
+└────────┘ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│A0 │B0 │A1 │B3 │B5 │A6 │B6 │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/aliceh66/pianoforte_hs/info.json b/keyboards/aliceh66/pianoforte_hs/info.json
index eea0bc06b53..7366e961c1f 100644
--- a/keyboards/aliceh66/pianoforte_hs/info.json
+++ b/keyboards/aliceh66/pianoforte_hs/info.json
@@ -15,8 +15,12 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT_tkl_ansi": "LAYOUT_tkl_f13_ansi"
+ },
+ "community_layouts": ["tkl_f13_ansi"],
"layouts": {
- "LAYOUT_tkl_ansi": {
+ "LAYOUT_tkl_f13_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -111,7 +115,7 @@
{"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
- {"matrix": [11, 2], "x": 4, "y": 5.25, "w": 6.25},
+ {"matrix": [11, 2], "x": 3.75, "y": 5.25, "w": 6.25},
{"matrix": [10, 4], "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
{"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
diff --git a/keyboards/aliceh66/pianoforte_hs/keymaps/default/keymap.c b/keyboards/aliceh66/pianoforte_hs/keymaps/default/keymap.c
index 17aa2ae0e89..279b0f1170c 100644
--- a/keyboards/aliceh66/pianoforte_hs/keymaps/default/keymap.c
+++ b/keyboards/aliceh66/pianoforte_hs/keymaps/default/keymap.c
@@ -21,7 +21,7 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_tkl_ansi(
+ [_LAYER0] = LAYOUT_tkl_f13_ansi(
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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
diff --git a/keyboards/aliceh66/pianoforte_hs/keymaps/via/keymap.c b/keyboards/aliceh66/pianoforte_hs/keymaps/via/keymap.c
index ddbaa3a8eff..6bcfa56fca9 100644
--- a/keyboards/aliceh66/pianoforte_hs/keymaps/via/keymap.c
+++ b/keyboards/aliceh66/pianoforte_hs/keymaps/via/keymap.c
@@ -23,7 +23,7 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_tkl_ansi(
+ [_LAYER0] = LAYOUT_tkl_f13_ansi(
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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [_LAYER1] = LAYOUT_tkl_ansi(
+ [_LAYER1] = LAYOUT_tkl_f13_ansi(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/amjkeyboard/amj84/info.json b/keyboards/amjkeyboard/amj84/info.json
index 98c4a7e4479..0b4d614c6eb 100644
--- a/keyboards/amjkeyboard/amj84/info.json
+++ b/keyboards/amjkeyboard/amj84/info.json
@@ -20,100 +20,288 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
"layout": [
- {"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
- {"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
- {"label": "K02", "matrix": [0, 2], "x": 2, "y": 0},
- {"label": "K03", "matrix": [0, 3], "x": 3, "y": 0},
- {"label": "K04", "matrix": [0, 4], "x": 4, "y": 0},
- {"label": "K05", "matrix": [0, 5], "x": 5, "y": 0},
- {"label": "K06", "matrix": [0, 6], "x": 6, "y": 0},
- {"label": "K07", "matrix": [0, 7], "x": 7, "y": 0},
- {"label": "K08", "matrix": [0, 8], "x": 8, "y": 0},
- {"label": "K09", "matrix": [0, 9], "x": 9, "y": 0},
- {"label": "K0A", "matrix": [0, 10], "x": 10, "y": 0},
- {"label": "K0B", "matrix": [0, 11], "x": 11, "y": 0},
- {"label": "K0C", "matrix": [0, 12], "x": 12, "y": 0},
- {"label": "K0D", "matrix": [0, 13], "x": 13, "y": 0},
- {"label": "K0E", "matrix": [0, 14], "x": 14, "y": 0},
- {"label": "K10", "matrix": [1, 0], "x": 15, "y": 0},
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 15, "y": 0},
- {"label": "K11", "matrix": [1, 1], "x": 0, "y": 1},
- {"label": "K12", "matrix": [1, 2], "x": 1, "y": 1},
- {"label": "K13", "matrix": [1, 3], "x": 2, "y": 1},
- {"label": "K14", "matrix": [1, 4], "x": 3, "y": 1},
- {"label": "K15", "matrix": [1, 5], "x": 4, "y": 1},
- {"label": "K16", "matrix": [1, 6], "x": 5, "y": 1},
- {"label": "K17", "matrix": [1, 7], "x": 6, "y": 1},
- {"label": "K18", "matrix": [1, 8], "x": 7, "y": 1},
- {"label": "K19", "matrix": [1, 9], "x": 8, "y": 1},
- {"label": "K1A", "matrix": [1, 10], "x": 9, "y": 1},
- {"label": "K1B", "matrix": [1, 11], "x": 10, "y": 1},
- {"label": "K1C", "matrix": [1, 12], "x": 11, "y": 1},
- {"label": "K1D", "matrix": [1, 13], "x": 12, "y": 1},
- {"label": "K1E", "matrix": [1, 14], "x": 13, "y": 1, "w": 2},
- {"label": "K20", "matrix": [2, 0], "x": 15, "y": 1},
+ {"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": [1, 14], "x": 15, "y": 1},
- {"label": "K21", "matrix": [2, 1], "x": 0, "y": 2, "w": 1.5},
- {"label": "K22", "matrix": [2, 2], "x": 1.5, "y": 2},
- {"label": "K23", "matrix": [2, 3], "x": 2.5, "y": 2},
- {"label": "K24", "matrix": [2, 4], "x": 3.5, "y": 2},
- {"label": "K25", "matrix": [2, 5], "x": 4.5, "y": 2},
- {"label": "K26", "matrix": [2, 6], "x": 5.5, "y": 2},
- {"label": "K27", "matrix": [2, 7], "x": 6.5, "y": 2},
- {"label": "K28", "matrix": [2, 8], "x": 7.5, "y": 2},
- {"label": "K29", "matrix": [2, 9], "x": 8.5, "y": 2},
- {"label": "K2A", "matrix": [2, 10], "x": 9.5, "y": 2},
- {"label": "K2B", "matrix": [2, 11], "x": 10.5, "y": 2},
- {"label": "K2C", "matrix": [2, 12], "x": 11.5, "y": 2},
- {"label": "K2D", "matrix": [2, 13], "x": 12.5, "y": 2},
- {"label": "K2E", "matrix": [2, 14], "x": 13.5, "y": 2, "w": 1.5},
- {"label": "K30", "matrix": [3, 0], "x": 15, "y": 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": [2, 14], "x": 15, "y": 2},
- {"label": "K31", "matrix": [3, 1], "x": 0, "y": 3, "w": 1.75},
- {"label": "K32", "matrix": [3, 2], "x": 1.75, "y": 3},
- {"label": "K33", "matrix": [3, 3], "x": 2.75, "y": 3},
- {"label": "K34", "matrix": [3, 4], "x": 3.75, "y": 3},
- {"label": "K35", "matrix": [3, 5], "x": 4.75, "y": 3},
- {"label": "K36", "matrix": [3, 6], "x": 5.75, "y": 3},
- {"label": "K37", "matrix": [3, 7], "x": 6.75, "y": 3},
- {"label": "K38", "matrix": [3, 8], "x": 7.75, "y": 3},
- {"label": "K39", "matrix": [3, 9], "x": 8.75, "y": 3},
- {"label": "K3A", "matrix": [3, 10], "x": 9.75, "y": 3},
- {"label": "K3B", "matrix": [3, 11], "x": 10.75, "y": 3},
- {"label": "K3C", "matrix": [3, 12], "x": 11.75, "y": 3},
- {"label": "K3D", "matrix": [3, 13], "x": 12.75, "y": 3},
- {"label": "K3E", "matrix": [3, 14], "x": 13.75, "y": 3, "w": 1.25},
- {"label": "K40", "matrix": [4, 0], "x": 15, "y": 3},
+ {"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},
+ {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25},
+ {"matrix": [3, 14], "x": 15, "y": 3},
- {"label": "K41", "matrix": [4, 1], "x": 0, "y": 4, "w": 2.25},
- {"label": "K42", "matrix": [4, 2], "x": 2.25, "y": 4},
- {"label": "K43", "matrix": [4, 3], "x": 3.25, "y": 4},
- {"label": "K44", "matrix": [4, 4], "x": 4.25, "y": 4},
- {"label": "K45", "matrix": [4, 5], "x": 5.25, "y": 4},
- {"label": "K46", "matrix": [4, 6], "x": 6.25, "y": 4},
- {"label": "K47", "matrix": [4, 7], "x": 7.25, "y": 4},
- {"label": "K48", "matrix": [4, 8], "x": 8.25, "y": 4},
- {"label": "K49", "matrix": [4, 9], "x": 9.25, "y": 4},
- {"label": "K4A", "matrix": [4, 10], "x": 10.25, "y": 4},
- {"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 4},
- {"label": "K4C", "matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
- {"label": "K4D", "matrix": [4, 13], "x": 14, "y": 4},
- {"label": "K4E", "matrix": [4, 14], "x": 15, "y": 4},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4},
- {"label": "K50", "matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
- {"label": "K51", "matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"label": "K52", "matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"label": "K55", "matrix": [5, 5], "x": 3.75, "y": 5, "w": 5.25},
- {"label": "K58", "matrix": [5, 8], "x": 9, "y": 5},
- {"label": "K59", "matrix": [5, 9], "x": 10, "y": 5},
- {"label": "K5A", "matrix": [5, 10], "x": 11, "y": 5},
- {"label": "K5B", "matrix": [5, 11], "x": 12, "y": 5},
- {"label": "K5C", "matrix": [5, 12], "x": 13, "y": 5},
- {"label": "K5D", "matrix": [5, 13], "x": 14, "y": 5},
- {"label": "K5E", "matrix": [5, 14], "x": 15, "y": 5}
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 8], "x": 14, "y": 0},
+ {"matrix": [5, 9], "x": 10, "y": 5},
+ {"matrix": [5, 10], "x": 11, "y": 5},
+ {"matrix": [5, 11], "x": 12, "y": 5},
+ {"matrix": [5, 12], "x": 13, "y": 5},
+ {"matrix": [5, 13], "x": 14, "y": 5},
+ {"matrix": [5, 14], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_ansi_rwkl": {
+ "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": [5, 8], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15, "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, "w": 2},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"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": [2, 14], "x": 15, "y": 2},
+
+ {"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, 13], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5},
+ {"matrix": [5, 13], "x": 14, "y": 5},
+ {"matrix": [5, 14], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_iso_rwkl": {
+ "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": [5, 8], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15, "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, "w": 2},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"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, 14], "x": 15, "y": 2},
+
+ {"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},
+ {"matrix": [3, 13], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5},
+ {"matrix": [5, 13], "x": 14, "y": 5},
+ {"matrix": [5, 14], "x": 15, "y": 5}
]
}
}
diff --git a/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c b/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
index bf5a8deb056..c6a4747a831 100644
--- a/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
+++ b/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl|Win |Alt | Space |END|Alt |Ctrl|Left |Down|Rig|
* `----------------------------------------------------------------'
*/
- [0] = LAYOUT(
+ [0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME,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_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,KC_PGDN,
@@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |
* `-----------------------------------------------------------'
*/
- [1] = LAYOUT(
+ [1] = LAYOUT_all(
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_UP, KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_TRNS,KC_INS, KC_TRNS,KC_PSCR,KC_SCRL,KC_PAUS,KC_TRNS,KC_TRNS,
diff --git a/keyboards/amjkeyboard/amj84/keymaps/default_ansi_rwkl/keymap.c b/keyboards/amjkeyboard/amj84/keymaps/default_ansi_rwkl/keymap.c
new file mode 100644
index 00000000000..973679d6f56
--- /dev/null
+++ b/keyboards/amjkeyboard/amj84/keymaps/default_ansi_rwkl/keymap.c
@@ -0,0 +1,57 @@
+// Copyright 2022 peepeetee (@peepeetee)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base */
+ /* Keymap 0: Default Layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Hm │End│Del│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bkspc │PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │Enter │Ins│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Up │Fn │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │Space │Alt │Ctrl │Lft│Dwn│Rig│
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+ */
+ [0] = LAYOUT_75_ansi_rwkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, 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_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_INS,
+ 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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap 1: Fn Layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │Up │ │ │ │Cal│ │Ins│ │PSc│SLk│Pau│ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │BL Brt│Lft│Dwn│Rgt│ │ │ │ │ │ │Hm │PUp│ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │BL Step │ │App│ │ │ │Vl-│Vl+│Mut│End│PDn│ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+ * │Slp │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+ */
+ [1] = LAYOUT_75_ansi_rwkl(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, _______,
+ BL_STEP, _______, KC_APP, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, _______, _______, _______,
+ KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/amjkeyboard/amj84/keymaps/default_iso_rwkl/keymap.c b/keyboards/amjkeyboard/amj84/keymaps/default_iso_rwkl/keymap.c
new file mode 100644
index 00000000000..d64dfffea09
--- /dev/null
+++ b/keyboards/amjkeyboard/amj84/keymaps/default_iso_rwkl/keymap.c
@@ -0,0 +1,57 @@
+// Copyright 2022 peepeetee (@peepeetee)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base */
+ /* Keymap 0: Default Layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Hm │End│Del│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bkspc │PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐Ent ├───┤
+ * │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │Ins│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Up │Fn │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │Space │Alt │Ctrl │Lft│Dwn│Rig│
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+ */
+ [0] = LAYOUT_75_iso_rwkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, 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_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_INS,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap 1: Fn Layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │Up │ │ │ │Cal│ │Ins│ │PSc│SLk│Pau│ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┤
+ * │BL Brt│Lft│Dwn│Rgt│ │ │ │ │ │ │Hm │PUp│ │ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │BL Step │ │App│ │ │ │Vl-│Vl+│Mut│End│PDn│ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+ * │Slp │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+ */
+ [1] = LAYOUT_75_iso_rwkl(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, _______, _______,
+ BL_STEP, _______, _______, KC_APP, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, _______, _______, _______,
+ KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/amjkeyboard/amj84/matrix_diagram.md b/keyboards/amjkeyboard/amj84/matrix_diagram.md
new file mode 100644
index 00000000000..c09506c3a52
--- /dev/null
+++ b/keyboards/amjkeyboard/amj84/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for AMJKeyboard AMJ84
+
+```
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │58 │0E │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ ┌─────┐
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │2E │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐3D │ ISO Enter
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3E │ │3C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4E │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+│50 │51 │52 │55 │59 │5A │5B │5C │5D │5E │
+└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+┌────────┐ └─────┬─────┘
+│40 │ 2.25u LShift │
+└────────┘ ┌─────┴─────┐
+┌─────┬───┬─────┬───────────────────────┬─────┬─────┐
+│50 │51 │52 │55 │5A │5B │ RWKL
+└─────┴───┴─────┴───────────────────────┴─────┴─────┘
+ 1.5u 1u 1.5u 6u
+```
diff --git a/keyboards/artemis/paragon/hotswap/info.json b/keyboards/artemis/paragon/hotswap/info.json
index c57b49a047d..d70625c1d6c 100644
--- a/keyboards/artemis/paragon/hotswap/info.json
+++ b/keyboards/artemis/paragon/hotswap/info.json
@@ -2,5 +2,363 @@
"matrix_pins": {
"cols": ["F7", "F6", "F5", "F4", "F1", "F0", "C7", "E6", "B0", "B3", "B6", "B5", "B4", "D7", "D4", "D6"],
"rows": ["D2", "D1", "D0", "B2", "B1", "C6"]
+ },
+ "layouts": {
+ "LAYOUT_ansi_rwkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_rwkl_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 2], "x": 1.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 6], "x": 3, "y": 5.5, "w": 7},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_wkl_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 2], "x": 1.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 6], "x": 3, "y": 5.5, "w": 7},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ }
}
}
diff --git a/keyboards/artemis/paragon/hotswap/matrix_diagram.md b/keyboards/artemis/paragon/hotswap/matrix_diagram.md
new file mode 100644
index 00000000000..215d44642a2
--- /dev/null
+++ b/keyboards/artemis/paragon/hotswap/matrix_diagram.md
@@ -0,0 +1,21 @@
+# Matrix Diagram for Artemis Paragon Hotswap
+
+```
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┐
+│00 │ │02 │03 │04 │05 │ │06 │07 │08 │09 │ │0A │0B │0C │0D │ │Rot│
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │1F │ │1E │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ └───────┘
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │2F │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3F │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+│40 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4F │
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+│50 │52 │53 │56 │5A │5B │5C │5D │5F │
+└────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+┌─────┬─────┬───────────────────────────┬─────┬─────┐
+│50 │52 │56 │5A │5B │ WKL
+└─────┴─────┴───────────────────────────┴─────┴─────┘
+```
diff --git a/keyboards/artemis/paragon/info.json b/keyboards/artemis/paragon/info.json
index 2a2cf046a85..b18b3b28db2 100644
--- a/keyboards/artemis/paragon/info.json
+++ b/keyboards/artemis/paragon/info.json
@@ -20,7 +20,7 @@
"url": "",
"encoder": {
"rotary": [
- { "pin_a": "D3", "pin_b": "D5" }
+ { "pin_a": "D3", "pin_b": "D5", "resolution": 2 }
]
},
"usb": {
@@ -28,8 +28,11 @@
"pid": "0x3449",
"vid": "0x8C27"
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 2], "x": 1.5, "y": 0 },
diff --git a/keyboards/artemis/paragon/keymaps/default/keymap.c b/keyboards/artemis/paragon/keymaps/default/keymap.c
index d980180a347..fc55fb1c85b 100644
--- a/keyboards/artemis/paragon/keymaps/default/keymap.c
+++ b/keyboards/artemis/paragon/keymaps/default/keymap.c
@@ -16,7 +16,7 @@ along with this program. If not, see .
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
diff --git a/keyboards/artemis/paragon/keymaps/via/keymap.c b/keyboards/artemis/paragon/keymaps/via/keymap.c
index 84f5735d97b..47e269c78ab 100644
--- a/keyboards/artemis/paragon/keymaps/via/keymap.c
+++ b/keyboards/artemis/paragon/keymaps/via/keymap.c
@@ -16,7 +16,7 @@ along with this program. If not, see .
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
diff --git a/keyboards/artemis/paragon/soldered/info.json b/keyboards/artemis/paragon/soldered/info.json
index 5158add71e2..b531b22f807 100644
--- a/keyboards/artemis/paragon/soldered/info.json
+++ b/keyboards/artemis/paragon/soldered/info.json
@@ -2,5 +2,735 @@
"matrix_pins": {
"cols": ["E6", "F0", "F1", "F4", "F5", "F6", "F7", "B0", "B1", "B3", "D0", "D1", "D2", "D3", "D7", "D5"],
"rows": ["B2", "C7", "C6", "B6", "B5", "B4"]
+ },
+ "layouts": {
+ "LAYOUT_ansi_rwkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_rwkl_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_rwkl_split_space": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 4], "x": 3.75, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 6], "x": 6, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 8], "x": 7.25, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_rwkl_split_space_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 4], "x": 3.75, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 6], "x": 6, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 8], "x": 7.25, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_iso_rwkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_iso_rwkl_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_iso_rwkl_split_space": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 4], "x": 3.75, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 6], "x": 6, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 8], "x": 7.25, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_iso_rwkl_split_space_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.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.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},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 4], "x": 3.75, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 6], "x": 6, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 8], "x": 7.25, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ }
}
}
diff --git a/keyboards/artemis/paragon/soldered/matrix_diagram.md b/keyboards/artemis/paragon/soldered/matrix_diagram.md
new file mode 100644
index 00000000000..6fa5ad6cf88
--- /dev/null
+++ b/keyboards/artemis/paragon/soldered/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Artemis Paragon Soldered
+
+```
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┐
+│00 │ │02 │03 │04 │05 │ │06 │07 │08 │09 │ │0A │0B │0C │0D │ │Rot│
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │1F │ │1E │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ └─┬─────┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │2F │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐3D │ ISO Enter
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3F │ │3C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4F │
+├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+│50 │52 │53 │54 │56 │58 │5A │5B │5C │5D │5F │
+└────┴────┴────┴────────┴────┴──────────┴─────┴─────┴───┴───┴───┘
+┌────────┐
+│40 │ 2.25u LShift
+└────────┘
+┌────┬────┬────┬────────────────────────┬─────┬─────┐
+│50 │52 │53 │56 │5A │5B │ RWKL
+└────┴────┴────┴────────────────────────┴─────┴─────┘
+```
diff --git a/keyboards/automata02/alisaie/info.json b/keyboards/automata02/alisaie/info.json
index 5c23e4ef1f6..6e4c007e00a 100644
--- a/keyboards/automata02/alisaie/info.json
+++ b/keyboards/automata02/alisaie/info.json
@@ -22,70 +22,74 @@
"layouts": {
"LAYOUT": {
"layout": [
- {"label": "~", "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": 8.5, "y": 0},
- {"label": "*", "matrix": [0, 8], "x": 9.5, "y": 0},
- {"label": "(", "matrix": [0, 9], "x": 10.5, "y": 0},
- {"label": ")", "matrix": [0, 10], "x": 11.5, "y": 0},
- {"label": "_", "matrix": [0, 11], "x": 12.5, "y": 0},
- {"label": "+", "matrix": [0, 12], "x": 13.5, "y": 0},
- {"label": "Del", "matrix": [0, 13], "x": 14.5, "y": 0},
- {"label": "Backspace", "matrix": [1, 0], "x": 15.5, "y": 0},
- {"label": "Tab", "matrix": [1, 1], "x": 0, "y": 1, "w": 1.5},
- {"label": "Q", "matrix": [1, 2], "x": 1.5, "y": 1},
- {"label": "W", "matrix": [1, 3], "x": 2.5, "y": 1},
- {"label": "E", "matrix": [1, 4], "x": 3.5, "y": 1},
- {"label": "R", "matrix": [1, 5], "x": 4.5, "y": 1},
- {"label": "T", "matrix": [1, 6], "x": 5.5, "y": 1},
- {"label": "Y", "matrix": [1, 7], "x": 8, "y": 1},
- {"label": "U", "matrix": [1, 8], "x": 9, "y": 1},
- {"label": "I", "matrix": [1, 9], "x": 10, "y": 1},
- {"label": "O", "matrix": [1, 10], "x": 11, "y": 1},
- {"label": "P", "matrix": [1, 11], "x": 12, "y": 1},
- {"label": "{", "matrix": [1, 12], "x": 13, "y": 1},
- {"label": "}", "matrix": [1, 13], "x": 14, "y": 1},
- {"label": "|", "matrix": [2, 0], "x": 15, "y": 1, "w": 1.5},
- {"label": "Caps Lock", "matrix": [2, 1], "x": 0, "y": 2, "w": 1.75},
- {"label": "A", "matrix": [2, 2], "x": 1.75, "y": 2},
- {"label": "S", "matrix": [2, 3], "x": 2.75, "y": 2},
- {"label": "D", "matrix": [2, 4], "x": 3.75, "y": 2},
- {"label": "F", "matrix": [2, 5], "x": 4.75, "y": 2},
- {"label": "G", "matrix": [2, 6], "x": 5.75, "y": 2},
- {"label": "H", "matrix": [2, 7], "x": 8.25, "y": 2},
- {"label": "J", "matrix": [2, 8], "x": 9.25, "y": 2},
- {"label": "K", "matrix": [2, 9], "x": 10.25, "y": 2},
- {"label": "L", "matrix": [2, 10], "x": 11.25, "y": 2},
- {"label": ":", "matrix": [2, 11], "x": 12.25, "y": 2},
- {"label": "\"", "matrix": [2, 12], "x": 13.25, "y": 2},
- {"label": "Enter", "matrix": [3, 0], "x": 14.25, "y": 2, "w": 2.25},
- {"label": "Shift", "matrix": [3, 1], "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": "B", "matrix": [3, 7], "x": 7.75, "y": 3},
- {"label": "N", "matrix": [3, 8], "x": 8.75, "y": 3},
- {"label": "M", "matrix": [3, 9], "x": 9.75, "y": 3},
- {"label": "<", "matrix": [3, 10], "x": 10.75, "y": 3},
- {"label": ">", "matrix": [3, 11], "x": 11.75, "y": 3},
- {"label": "?", "matrix": [3, 12], "x": 12.75, "y": 3},
- {"label": "Shift", "matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.75},
- {"label": "Fn", "matrix": [4, 0], "x": 15.5, "y": 3},
- {"label": "Ctrl", "matrix": [4, 1], "x": 0, "y": 4, "w": 1.25},
- {"label": "Win", "matrix": [4, 2], "x": 1.25, "y": 4, "w": 1.25},
- {"label": "Alt", "matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.25},
- {"label": "K408", "matrix": [4, 8], "x": 5, "y": 4, "w": 2.25},
- {"label": "K409", "matrix": [4, 9], "x": 7.75, "y": 4, "w": 2.75},
- {"label": "Alt", "matrix": [4, 11], "x": 10.5, "y": 4, "w": 1.25},
- {"label": "Win", "matrix": [4, 12], "x": 12.75, "y": 4, "w": 1.25},
- {"label": "Ctrl", "matrix": [4, 13], "x": 15.25, "y": 4, "w": 1.25}
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 8.5, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 9.5, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 10.5, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 11.5, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 12.5, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 13.5, "y": 0},
+ {"label": "\\", "matrix": [0, 13], "x": 14.5, "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": 8, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 9, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 10, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 11, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 12, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 13, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 14, "y": 1},
+ {"label": "Backspace", "matrix": [1, 13], "x": 15, "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": 8.25, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 9.25, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 10.25, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 11.25, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 12.25, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 13.25, "y": 2},
+ {"label": "Enter", "matrix": [2, 12], "x": 14.25, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 1], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 2], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 3], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 4], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 5], "x": 6.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 7.75, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 8.75, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 9.75, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 10.75, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 11.75, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 12.75, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Alt", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "GUI", "matrix": [4, 2], "x": 3.25, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 3], "x": 4.75, "y": 4, "w": 2.75},
+ {"label": "Space", "matrix": [4, 8], "x": 7.75, "y": 4, "w": 2.25},
+ {"label": "GUI", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.5},
+ {"label": "`", "matrix": [4, 11], "x": 15.5, "y": 0},
+ {"label": "Alt", "matrix": [4, 12], "x": 14, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 15, "y": 4, "w": 1.5}
]
}
}
diff --git a/keyboards/b_sides/rev41lp/info.json b/keyboards/b_sides/rev41lp/info.json
index 8a1c538a719..9d121083bd4 100644
--- a/keyboards/b_sides/rev41lp/info.json
+++ b/keyboards/b_sides/rev41lp/info.json
@@ -4,7 +4,7 @@
"url": "https://github.com/cyril279/keyboards/tree/main/revlp/41_1350",
"maintainer": "cyril279",
"usb": {
- "vid": "0xFEED",
+ "vid": "0xFA9D",
"pid": "0x5F10",
"device_version": "0.0.1"
},
diff --git a/keyboards/b_sides/rev41lp/keymaps/via/keymap.c b/keyboards/b_sides/rev41lp/keymaps/via/keymap.c
new file mode 100644
index 00000000000..a873433953c
--- /dev/null
+++ b/keyboards/b_sides/rev41lp/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+/*
+Copyright 2021 @cyril279
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT),
+ KC_LALT, MO(1), KC_SPC, MO(2), KC_LGUI
+ ),
+
+ [1] = LAYOUT(
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_GRV, KC_TILD,
+ _______, KC_ESC, KC_LGUI, KC_LALT, KC_CAPS, KC_DQUO, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_PSCR, RSFT_T(KC_SPC),
+ _______, _______, KC_ENT, MO(3), _______
+ ),
+
+ [2] = LAYOUT(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ _______, KC_ESC, KC_RGUI, KC_RALT, KC_CAPS, KC_QUOT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, MO(3), KC_BSPC, _______, _______
+ ),
+
+ [3] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, BL_TOGG, BL_BRTG, BL_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, _______, _______, _______, _______
+ )
+};
+
diff --git a/keyboards/b_sides/rev41lp/keymaps/via/rules.mk b/keyboards/b_sides/rev41lp/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/b_sides/rev41lp/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/boardsource/unicorne/config.h b/keyboards/boardsource/unicorne/config.h
new file mode 100644
index 00000000000..d0d466bb54a
--- /dev/null
+++ b/keyboards/boardsource/unicorne/config.h
@@ -0,0 +1,26 @@
+// Copyright 2023 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define RGB_MATRIX_LED_COUNT 54
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_ALPHAS_MODS
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+
+#define SPLIT_LAYER_STATE_ENABLE
+
+#define I2C_DRIVER I2CD1
+#define I2C1_SDA_PIN GP22
+#define I2C1_SCL_PIN GP23
+
+#define AUDIO_PIN GP28
+#define AUDIO_PWM_DRIVER PWMD6
+#define AUDIO_INIT_DELAY
+#define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_A
+#define STARTUP_SONG SONG(ODE_TO_JOY)
+
+#define ANALOG_JOYSTICK_Y_AXIS_PIN GP26
+#define ANALOG_JOYSTICK_X_AXIS_PIN GP27
+#define POINTING_DEVICE_INVERT_Y
+#define POINTING_DEVICE_INVERT_X
diff --git a/keyboards/boardsource/unicorne/halconf.h b/keyboards/boardsource/unicorne/halconf.h
new file mode 100644
index 00000000000..21ed454e506
--- /dev/null
+++ b/keyboards/boardsource/unicorne/halconf.h
@@ -0,0 +1,9 @@
+// Copyright 2022 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_PWM TRUE
+#define HAL_USE_ADC TRUE
+
+#include_next
diff --git a/keyboards/boardsource/unicorne/info.json b/keyboards/boardsource/unicorne/info.json
new file mode 100644
index 00000000000..fe46ec13a69
--- /dev/null
+++ b/keyboards/boardsource/unicorne/info.json
@@ -0,0 +1,161 @@
+{
+ "manufacturer": "Boardsource",
+ "maintainer": "waffle87",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "audio": true,
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true,
+ "pointing_device": true,
+ "rgb_matrix": true
+ },
+ "indicators": {
+ "caps": "GP24"
+ },
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "GP0"
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x7563",
+ "vid": "0x4273"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP29"
+ },
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7"],
+ "rows": ["GP14", "GP15", "GP16", "GP17"]
+ },
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP8", "pin_b": "GP9"}
+ ]
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_sat": true,
+ "band_val": true,
+ "breathing": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true
+ },
+ "max_brightness": 150,
+ "split_count": [27, 27],
+ "driver": "WS2812",
+ "layout": [
+ {"x": 85, "y": 16, "flags": 2},
+ {"x": 50, "y": 13, "flags": 2},
+ {"x": 16, "y": 20, "flags": 2},
+ {"x": 16, "y": 38, "flags": 2},
+ {"x": 50, "y": 48, "flags": 2},
+ {"x": 85, "y": 52, "flags": 2},
+ {"matrix": [3, 5], "x": 95, "y": 63, "flags": 1},
+ {"matrix": [2, 5], "x": 85, "y": 39, "flags": 4},
+ {"matrix": [1, 5], "x": 85, "y": 21, "flags": 4},
+ {"matrix": [0, 5], "x": 85, "y": 4, "flags": 4},
+ {"matrix": [0, 4], "x": 68, "y": 2, "flags": 4},
+ {"matrix": [1, 4], "x": 68, "y": 19, "flags": 4},
+ {"matrix": [2, 4], "x": 68, "y": 37, "flags": 4},
+ {"matrix": [3, 4], "x": 80, "y": 58, "flags": 1},
+ {"matrix": [3, 3], "x": 60, "y": 55, "flags": 1},
+ {"matrix": [2, 3], "x": 50, "y": 35, "flags": 4},
+ {"matrix": [1, 3], "x": 50, "y": 13, "flags": 4},
+ {"matrix": [0, 3], "x": 50, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 33, "y": 3, "flags": 4},
+ {"matrix": [1, 2], "x": 33, "y": 20, "flags": 4},
+ {"matrix": [2, 2], "x": 33, "y": 37, "flags": 4},
+ {"matrix": [2, 1], "x": 16, "y": 42, "flags": 4},
+ {"matrix": [1, 1], "x": 16, "y": 24, "flags": 4},
+ {"matrix": [0, 1], "x": 16, "y": 7, "flags": 4},
+ {"matrix": [0, 0], "x": 0, "y": 7, "flags": 1},
+ {"matrix": [1, 0], "x": 0, "y": 24, "flags": 1},
+ {"matrix": [2, 0], "x": 0, "y": 41, "flags": 1},
+ {"x": 139, "y": 16, "flags": 2},
+ {"x": 174, "y": 13, "flags": 2},
+ {"x": 208, "y": 20, "flags": 2},
+ {"x": 208, "y": 38, "flags": 2},
+ {"x": 174, "y": 48, "flags": 2},
+ {"x": 139, "y": 52, "flags": 2},
+ {"matrix": [7, 5], "x": 129, "y": 63, "flags": 1},
+ {"matrix": [6, 5], "x": 139, "y": 39, "flags": 4},
+ {"matrix": [5, 5], "x": 139, "y": 21, "flags": 4},
+ {"matrix": [4, 5], "x": 139, "y": 4, "flags": 4},
+ {"matrix": [4, 4], "x": 156, "y": 2, "flags": 4},
+ {"matrix": [5, 4], "x": 156, "y": 19, "flags": 4},
+ {"matrix": [6, 4], "x": 156, "y": 37, "flags": 4},
+ {"matrix": [7, 4], "x": 144, "y": 58, "flags": 1},
+ {"matrix": [7, 3], "x": 164, "y": 55, "flags": 1},
+ {"matrix": [6, 3], "x": 174, "y": 35, "flags": 4},
+ {"matrix": [5, 3], "x": 174, "y": 13, "flags": 4},
+ {"matrix": [4, 3], "x": 174, "y": 0, "flags": 4},
+ {"matrix": [4, 2], "x": 191, "y": 3, "flags": 4},
+ {"matrix": [5, 2], "x": 191, "y": 20, "flags": 4},
+ {"matrix": [6, 2], "x": 191, "y": 37, "flags": 4},
+ {"matrix": [6, 1], "x": 208, "y": 42, "flags": 4},
+ {"matrix": [5, 1], "x": 208, "y": 24, "flags": 4},
+ {"matrix": [4, 1], "x": 208, "y": 7, "flags": 4},
+ {"matrix": [4, 0], "x": 0, "y": 7, "flags": 1},
+ {"matrix": [5, 0], "x": 0, "y": 24, "flags": 1},
+ {"matrix": [6, 0], "x": 0, "y": 41, "flags": 1}
+ ]
+ },
+ "community_layouts": ["split_3x6_3"],
+ "layouts": {
+ "LAYOUT_split_3x6_3": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.3},
+ {"matrix": [0, 1], "x": 1, "y": 0.3},
+ {"matrix": [0, 2], "x": 2, "y": 0.1},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.1},
+ {"matrix": [0, 5], "x": 5, "y": 0.2},
+ {"matrix": [4, 5], "x": 9, "y": 0.2},
+ {"matrix": [4, 4], "x": 10, "y": 0.1},
+ {"matrix": [4, 3], "x": 11, "y": 0},
+ {"matrix": [4, 2], "x": 12, "y": 0.1},
+ {"matrix": [4, 1], "x": 13, "y": 0.3},
+ {"matrix": [4, 0], "x": 14, "y": 0.3},
+ {"matrix": [1, 0], "x": 0, "y": 1.3},
+ {"matrix": [1, 1], "x": 1, "y": 1.3},
+ {"matrix": [1, 2], "x": 2, "y": 1.1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.1},
+ {"matrix": [1, 5], "x": 5, "y": 1.2},
+ {"matrix": [5, 5], "x": 9, "y": 1.2},
+ {"matrix": [5, 4], "x": 10, "y": 1.1},
+ {"matrix": [5, 3], "x": 11, "y": 1},
+ {"matrix": [5, 2], "x": 12, "y": 1.1},
+ {"matrix": [5, 1], "x": 13, "y": 1.3},
+ {"matrix": [5, 0], "x": 14, "y": 1.3},
+ {"matrix": [2, 0], "x": 0, "y": 2.3},
+ {"matrix": [2, 1], "x": 1, "y": 2.3},
+ {"matrix": [2, 2], "x": 2, "y": 2.1},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.1},
+ {"matrix": [2, 5], "x": 5, "y": 2.2},
+ {"matrix": [6, 5], "x": 9, "y": 2.2},
+ {"matrix": [6, 4], "x": 10, "y": 2.1},
+ {"matrix": [6, 3], "x": 11, "y": 2},
+ {"matrix": [6, 2], "x": 12, "y": 2.1},
+ {"matrix": [6, 1], "x": 13, "y": 2.3},
+ {"matrix": [6, 0], "x": 14, "y": 2.3},
+ {"matrix": [3, 3], "x": 4, "y": 3.7},
+ {"matrix": [3, 4], "x": 5, "y": 3.7},
+ {"matrix": [3, 5], "x": 6, "y": 3.2, "h": 1.5},
+ {"matrix": [7, 5], "x": 8, "y": 3.2, "h": 1.5},
+ {"matrix": [7, 4], "x": 9, "y": 3.7},
+ {"matrix": [7, 3], "x": 10, "y": 3.7}
+ ]
+ }
+ }
+}
diff --git a/keyboards/boardsource/unicorne/keymaps/default/keymap.json b/keyboards/boardsource/unicorne/keymaps/default/keymap.json
new file mode 100644
index 00000000000..1980bc3c873
--- /dev/null
+++ b/keyboards/boardsource/unicorne/keymaps/default/keymap.json
@@ -0,0 +1,25 @@
+{
+ "keyboard": "boardsource/unicorne",
+ "keymap": "default",
+ "layout": "LAYOUT_split_3x6_3",
+ "layers": [
+ [
+ "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSPC",
+ "KC_LCTL", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
+ "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_ESC",
+ "KC_LGUI", "MO(1)", "KC_SPC", "KC_ENT", "MO(2)", "KC_RALT"
+ ],
+ [
+ "_______", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "_______",
+ "_______", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_LPRN", "KC_RPRN", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______"
+ ],
+ [
+ "QK_BOOT", "_______", "_______", "_______", "_______", "_______", "RGB_VAI", "RGB_HUI", "RGB_SAI", "RGB_MOD", "RGB_TOG", "_______",
+ "EE_CLR", "_______", "_______", "_______", "_______", "_______", "RGB_VAD", "RGB_HUD", "RGB_SAD", "RGB_RMOD", "CK_TOGG", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______"
+ ]
+ ]
+}
diff --git a/keyboards/boardsource/unicorne/keymaps/via/keymap.json b/keyboards/boardsource/unicorne/keymaps/via/keymap.json
new file mode 100644
index 00000000000..230fc6e3620
--- /dev/null
+++ b/keyboards/boardsource/unicorne/keymaps/via/keymap.json
@@ -0,0 +1,30 @@
+{
+ "keyboard": "boardsource/unicorne",
+ "keymap": "via",
+ "layout": "LAYOUT_split_3x6_3",
+ "config": {
+ "features": {
+ "via": true
+ }
+ },
+ "layers": [
+ [
+ "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSPC",
+ "KC_LCTL", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
+ "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_ESC",
+ "KC_LGUI", "MO(1)", "KC_SPC", "KC_ENT", "MO(2)", "KC_RALT"
+ ],
+ [
+ "_______", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "_______",
+ "_______", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_LPRN", "KC_RPRN", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______"
+ ],
+ [
+ "QK_BOOT", "_______", "_______", "_______", "_______", "_______", "RGB_VAI", "RGB_HUI", "RGB_SAI", "RGB_MOD", "RGB_TOG", "_______",
+ "EE_CLR", "_______", "_______", "_______", "_______", "_______", "RGB_VAD", "RGB_HUD", "RGB_SAD", "RGB_RMOD", "CK_TOGG", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______"
+ ]
+ ]
+}
diff --git a/keyboards/boardsource/unicorne/mcuconf.h b/keyboards/boardsource/unicorne/mcuconf.h
new file mode 100644
index 00000000000..60e7b5812f8
--- /dev/null
+++ b/keyboards/boardsource/unicorne/mcuconf.h
@@ -0,0 +1,13 @@
+// Copyright 2022 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#include_next
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
+
+#undef RP_PWM_USE_PWM6
+#define RP_PWM_USE_PWM6 TRUE
+
+#undef RP_ADC_USE_ADC1
+#define RP_ADC_USE_ADC1 TRUE
diff --git a/keyboards/boardsource/unicorne/readme.md b/keyboards/boardsource/unicorne/readme.md
new file mode 100644
index 00000000000..3f4472b882c
--- /dev/null
+++ b/keyboards/boardsource/unicorne/readme.md
@@ -0,0 +1,25 @@
+# Unicorne
+
+
+
+* Keyboard Maintainer: [waffle87](https://github.com/waffle87)
+* Hardware Supported: Unicorne PCBs w/ integrated RP2040 microcontroller
+* Hardware Availability: [boardsource.xyz](https://boardsource.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make boardsource/unicorne:default
+
+Flashing example for this keyboard:
+
+ make boardsource/unicorne: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 (the top left key) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/boardsource/unicorne/rules.mk b/keyboards/boardsource/unicorne/rules.mk
new file mode 100644
index 00000000000..d123b2a2fa8
--- /dev/null
+++ b/keyboards/boardsource/unicorne/rules.mk
@@ -0,0 +1,3 @@
+SERIAL_DRIVER = vendor
+AUDIO_DRIVER = pwm_hardware
+POINTING_DEVICE_DRIVER = analog_joystick
diff --git a/keyboards/boardsource/unicorne/unicorne.c b/keyboards/boardsource/unicorne/unicorne.c
new file mode 100644
index 00000000000..0c443722e02
--- /dev/null
+++ b/keyboards/boardsource/unicorne/unicorne.c
@@ -0,0 +1,37 @@
+// Copyright 2023 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "unicorne.h"
+
+#ifdef OLED_ENABLE
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ if (!is_keyboard_master()) {
+ return OLED_ROTATION_180;
+ }
+ return rotation;
+}
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ if (is_keyboard_master()) {
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write_raw(layer_zero, sizeof(layer_zero));
+ break;
+ case 1:
+ oled_write_raw(layer_zero, sizeof(layer_zero));
+ break;
+ case 2:
+ oled_write_raw(layer_zero, sizeof(layer_zero));
+ break;
+ case 3:
+ oled_write_raw(layer_zero, sizeof(layer_zero));
+ break;
+ }
+ } else {
+ oled_write_raw(logo, sizeof(logo));
+ }
+ return false;
+}
+#endif
diff --git a/keyboards/boardsource/unicorne/unicorne.h b/keyboards/boardsource/unicorne/unicorne.h
new file mode 100644
index 00000000000..68bbeeb18ab
--- /dev/null
+++ b/keyboards/boardsource/unicorne/unicorne.h
@@ -0,0 +1,194 @@
+// Copyright 2023 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+// clang-format off
+static const char PROGMEM logo[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
+ 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x01, 0xe3, 0xe7, 0xe7, 0xe3,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00,
+ 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0xe0,
+ 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0,
+ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x7e, 0xff, 0xff, 0xff, 0xe7, 0xc1, 0x81, 0x81, 0x81, 0xc1, 0x00, 0x00, 0x7f,
+ 0xff, 0xff, 0xff, 0xe3, 0xc1, 0x81, 0x81, 0xc1, 0xe3, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x03, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff,
+ 0xcd, 0x8c, 0x8c, 0x8c, 0x8d, 0xcf, 0xcf, 0xcf, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const char PROGMEM layer_zero[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x18, 0x30, 0x60, 0xe0, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc8, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x0f, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03,
+ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0xfc, 0x0e, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x80, 0x00,
+ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf0, 0x60,
+ 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x01, 0x03, 0x07,
+ 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00,
+ 0x00, 0x01, 0x03, 0x07, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+
+static const char PROGMEM layer_one[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x18, 0x30, 0x60, 0xe0, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc8, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x0f, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03,
+ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x80, 0x00,
+ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
+ 0x3f, 0x70, 0xe0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf0, 0x60,
+ 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x01, 0x03, 0x07,
+ 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00,
+ 0x00, 0x01, 0x03, 0x07, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+
+static const char PROGMEM layer_two[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x18, 0x30, 0x60, 0xe0, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc8, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x0f, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03,
+ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x80, 0x00,
+ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0x70, 0x38, 0x1f, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf0, 0x60,
+ 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x01, 0x03, 0x07,
+ 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00,
+ 0x00, 0x01, 0x03, 0x07, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+
+static const char PROGMEM layer_three[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x18, 0x30, 0x60, 0xe0, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc8, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x0f, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03,
+ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x07, 0x0e, 0xfc, 0xf0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x80, 0x00,
+ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf0, 0x60,
+ 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x01, 0x03, 0x07,
+ 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00,
+ 0x00, 0x01, 0x03, 0x07, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+// clang-format on
+#endif
diff --git a/keyboards/bpiphany/pegasushoof/2013/info.json b/keyboards/bpiphany/pegasushoof/2013/info.json
index 585d417688b..abbeeb0f364 100644
--- a/keyboards/bpiphany/pegasushoof/2013/info.json
+++ b/keyboards/bpiphany/pegasushoof/2013/info.json
@@ -6,7 +6,7 @@
"scroll_lock": "C5",
"on_state": 0
},
- "community_layouts": ["tkl_ansi"],
+ "community_layouts": ["tkl_ansi", "tkl_jis"],
"layouts": {
"LAYOUT": {
"layout": [
diff --git a/keyboards/bpiphany/pegasushoof/2015/info.json b/keyboards/bpiphany/pegasushoof/2015/info.json
index bed39668e8c..a3b5f667844 100644
--- a/keyboards/bpiphany/pegasushoof/2015/info.json
+++ b/keyboards/bpiphany/pegasushoof/2015/info.json
@@ -6,7 +6,7 @@
"scroll_lock": "C5",
"on_state": 0
},
- "community_layouts": ["tkl_ansi"],
+ "community_layouts": ["tkl_ansi", "tkl_jis"],
"layouts": {
"LAYOUT": {
"layout": [
diff --git a/keyboards/bschwind/key_ripper/info.json b/keyboards/bschwind/key_ripper/info.json
new file mode 100644
index 00000000000..ee30687d4f1
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/info.json
@@ -0,0 +1,112 @@
+{
+ "manufacturer": "bschwind",
+ "keyboard_name": "key-ripper",
+ "maintainer": "bschwind",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP16", "GP17", "GP18", "GP9", "GP10", "GP19", "GP11", "GP12", "GP13", "GP14", "GP20", "GP22", "GP23"],
+ "rows": ["GP26", "GP25", "GP27", "GP28", "GP15", "GP24"]
+ },
+ "processor": "RP2040",
+ "url": "https://github.com/bschwind/key-ripper",
+ "usb": {
+ "device_version": "0.2.0",
+ "pid": "0x0001",
+ "vid": "0xB501"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "ESC", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.875, "y": 0 },
+ { "label": "F2", "matrix": [0, 2], "x": 2.875, "y": 0 },
+ { "label": "F3", "matrix": [0, 3], "x": 3.875, "y": 0 },
+ { "label": "F4", "matrix": [0, 4], "x": 4.875, "y": 0 },
+ { "label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "F6", "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "label": "F7", "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "label": "F8", "matrix": [0, 9], "x": 9.5, "y": 0 },
+ { "label": "F9", "matrix": [0, 10], "x": 11, "y": 0 },
+ { "label": "F10", "matrix": [0, 11], "x": 12, "y": 0 },
+ { "label": "F11", "matrix": [0, 12], "x": 13, "y": 0 },
+ { "label": "F12", "matrix": [0, 13], "x": 14, "y": 0 },
+
+ { "label": "`", "matrix": [1, 0], "x": 0, "y": 1 },
+ { "label": "1", "matrix": [1, 1], "x": 1, "y": 1 },
+ { "label": "2", "matrix": [1, 2], "x": 2, "y": 1 },
+ { "label": "3", "matrix": [1, 3], "x": 3, "y": 1 },
+ { "label": "4", "matrix": [1, 4], "x": 4, "y": 1 },
+ { "label": "5", "matrix": [1, 5], "x": 5, "y": 1 },
+ { "label": "6", "matrix": [1, 6], "x": 6, "y": 1 },
+ { "label": "7", "matrix": [1, 7], "x": 7, "y": 1 },
+ { "label": "8", "matrix": [1, 8], "x": 8, "y": 1 },
+ { "label": "9", "matrix": [1, 9], "x": 9, "y": 1 },
+ { "label": "0", "matrix": [1, 10], "x": 10, "y": 1 },
+ { "label": "-", "matrix": [1, 11], "x": 11, "y": 1 },
+ { "label": "=", "matrix": [1, 12], "x": 12, "y": 1 },
+ { "label": "BACKSPACE", "matrix": [1, 13], "x": 13, "y": 1, "w": 2.00 },
+
+ { "label": "TAB", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.5 },
+ { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2 },
+ { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2 },
+ { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2 },
+ { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2 },
+ { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2 },
+ { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2 },
+ { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2 },
+ { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2 },
+ { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2 },
+ { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2 },
+ { "label": "[", "matrix": [2, 11], "x": 11.5, "y": 2 },
+ { "label": "]", "matrix": [2, 12], "x": 12.5, "y": 2 },
+ { "label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5 },
+
+ { "label": "CAPS", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.75 },
+ { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3 },
+ { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3 },
+ { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3 },
+ { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3 },
+ { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3 },
+ { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3 },
+ { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3 },
+ { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3 },
+ { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3 },
+ { "label": ";", "matrix": [3, 10], "x": 10.75, "y": 3 },
+ { "label": "'", "matrix": [3, 11], "x": 11.75, "y": 3 },
+ { "label": "RETURN", "matrix": [3, 12], "x": 12.75, "y": 3, "w": 2.25 },
+
+ { "label": "SHIFT", "matrix": [4, 0], "x": 0, "y": 4, "w": 2.25 },
+ { "label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4 },
+ { "label": "X", "matrix": [4, 3], "x": 3.25, "y": 4 },
+ { "label": "C", "matrix": [4, 4], "x": 4.25, "y": 4 },
+ { "label": "V", "matrix": [4, 5], "x": 5.25, "y": 4 },
+ { "label": "B", "matrix": [4, 6], "x": 6.25, "y": 4 },
+ { "label": "N", "matrix": [4, 7], "x": 7.25, "y": 4 },
+ { "label": "M", "matrix": [4, 8], "x": 8.25, "y": 4 },
+ { "label": ",", "matrix": [4, 9], "x": 9.25, "y": 4 },
+ { "label": ".", "matrix": [4, 10], "x": 10.25, "y": 4 },
+ { "label": "/", "matrix": [4, 11], "x": 11.25, "y": 4 },
+ { "label": "UP", "matrix": [4, 12], "x": 13, "y": 4 },
+
+ { "label": "FN", "matrix": [5, 0], "x": 0, "y": 5 },
+ { "label": "CTRL", "matrix": [5, 1], "x": 1, "y": 5 },
+ { "label": "ALT", "matrix": [5, 2], "x": 2, "y": 5 },
+ { "label": "GUI", "matrix": [5, 3], "x": 3, "y": 5, "w": 1.25 },
+ { "label": "SPACE", "matrix": [5, 6], "x": 4.25, "y": 5, "w": 6.25 },
+ { "label": "GUI", "matrix": [5, 10], "x": 10.5, "y": 5, "w": 1.25 },
+ { "label": "LEFT", "matrix": [5, 11], "x": 12, "y": 5 },
+ { "label": "DOWN", "matrix": [5, 12], "x": 13, "y": 5 },
+ { "label": "RIGHT", "matrix": [5, 13], "x": 14, "y": 5 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/bschwind/key_ripper/keymaps/default/keymap.c b/keyboards/bschwind/key_ripper/keymaps/default/keymap.c
new file mode 100644
index 00000000000..3a8107ad67a
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2023 bschwind
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP,
+ MO(1), KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/bschwind/key_ripper/keymaps/via/keymap.c b/keyboards/bschwind/key_ripper/keymaps/via/keymap.c
new file mode 100644
index 00000000000..3a8107ad67a
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2023 bschwind
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP,
+ MO(1), KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/bschwind/key_ripper/keymaps/via/rules.mk b/keyboards/bschwind/key_ripper/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/bschwind/key_ripper/readme.md b/keyboards/bschwind/key_ripper/readme.md
new file mode 100644
index 00000000000..84306af968a
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/readme.md
@@ -0,0 +1,29 @@
+# key_ripper
+
+A 75-key keyboard which has a similar layout to a MacBook keyboard, and sacrifices
+the right shift key to keep a compact size. Based on the RP2040 microcontroller.
+
+
+
+
+
+* Keyboard Maintainer: [Brian Schwind](https://github.com/bschwind)
+* Hardware Supported: The key-ripper PCB
+* Hardware Availability: You can find production files in the [releases](https://github.com/bschwind/key-ripper/releases) page used for ordering from JLCPCB.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bschwind/key_ripper:default
+
+Flashing example for this keyboard:
+
+ make bschwind/key_ripper:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the Escape key and plug in the keyboard
+* **Physical reset button**: Hold down the USB BOOT button on the PCB, and briefly press the RESET button on the PCB.
diff --git a/keyboards/bschwind/key_ripper/rules.mk b/keyboards/bschwind/key_ripper/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/cannonkeys/bastion75/config.h b/keyboards/cannonkeys/bastion75/config.h
new file mode 100644
index 00000000000..0b93d1434be
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/config.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2015 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
+
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A
+
+#define WS2812_PIO_USE_PIO1
diff --git a/keyboards/cannonkeys/bastion75/halconf.h b/keyboards/cannonkeys/bastion75/halconf.h
new file mode 100644
index 00000000000..8c1197b84c6
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/cannonkeys/bastion75/info.json b/keyboards/cannonkeys/bastion75/info.json
new file mode 100644
index 00000000000..64243257aec
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/info.json
@@ -0,0 +1,143 @@
+{
+ "keyboard_name": "Bastion75",
+ "maintainer": "awkannan",
+ "manufacturer": "CannonKeys",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "vid": "0xCA04",
+ "pid": "0x0022",
+ "device_version": "0.0.1"
+ },
+ "url": "https://cannonkeys.com",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP28", "GP8", "GP14", "GP13", "GP12", "GP11", "GP10", "GP9", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0"],
+ "rows": ["GP25", "GP26", "GP27", "GP15", "GP16", "GP17"]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true
+ },
+ "indicators": {
+ "caps_lock": "GP29",
+ "on_state": 0
+ },
+ "backlight": {
+ "breathing": true,
+ "breathing_period": 5,
+ "levels": 15,
+ "pin": "GP22"
+ },
+ "ws2812": {
+ "pin": "GP7",
+ "driver": "vendor"
+ },
+ "rgblight": {
+ "led_count": 20,
+ "hue_steps": 17,
+ "animations": {
+ "static_gradient": true,
+ "twinkle": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "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, 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.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 },
+ { "matrix": [0, 14], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [1, 13], "x": 13, "y": 1.25 },
+ { "matrix": [3, 12], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [3, 14], "x": 15, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 14], "x": 15, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 5], "w": 2.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 6], "w": 1.25, "x": 6, "y": 5.25 },
+ { "matrix": [5, 9], "w": 2.75, "x": 7.25, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "x": 13, "y": 5.25 },
+ { "matrix": [5, 13], "x": 14, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15, "y": 5.25 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/cannonkeys/bastion75/keymaps/default/keymap.c b/keyboards/cannonkeys/bastion75/keymaps/default/keymap.c
new file mode 100644
index 00000000000..9b3d00ade25
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/keymaps/default/keymap.c
@@ -0,0 +1,47 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_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_MPLY,
+ 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_DEL, KC_HOME,
+ 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_END,
+ 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_PGUP,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(_FN1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [_FN1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, _______, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/cannonkeys/bastion75/keymaps/via/keymap.c b/keyboards/cannonkeys/bastion75/keymaps/via/keymap.c
new file mode 100644
index 00000000000..a4c9bf120c4
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_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_MPLY,
+ 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_DEL, KC_HOME,
+ 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_END,
+ 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_PGUP,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(_FN1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [_FN1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, _______, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+
+};
diff --git a/keyboards/cannonkeys/bastion75/keymaps/via/rules.mk b/keyboards/cannonkeys/bastion75/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/bastion75/mcuconf.h b/keyboards/cannonkeys/bastion75/mcuconf.h
new file mode 100644
index 00000000000..49015d4dbf5
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2022 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_PWM_USE_PWM3
+#define RP_PWM_USE_PWM3 TRUE
diff --git a/keyboards/cannonkeys/bastion75/readme.md b/keyboards/cannonkeys/bastion75/readme.md
new file mode 100644
index 00000000000..06674d847bb
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/readme.md
@@ -0,0 +1,26 @@
+# Bastion75 PCB
+
+Bastion75 PCB from CannonKeys
+
+* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
+* Hardware Supported: RP2040
+* Hardware Availability: [CannonKeys](https://cannonkeys.com)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cannonkeys/bastion75:default
+
+Flashing example for this keyboard:
+
+ make cannonkeys/bastion75: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**: Hold the "BOOTMODE" button on the back of the PCB and briefly press the "RESET" button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cannonkeys/bastion75/rules.mk b/keyboards/cannonkeys/bastion75/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/chosfox/cf81/cf81.c b/keyboards/chosfox/cf81/cf81.c
new file mode 100644
index 00000000000..ab8afd0c636
--- /dev/null
+++ b/keyboards/chosfox/cf81/cf81.c
@@ -0,0 +1,188 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {1, A_1, B_1, C_1},
+ {1, A_2, B_2, C_2},
+ {1, A_3, B_3, C_3},
+ {1, A_4, B_4, C_4},
+ {1, A_5, B_5, C_5},
+ {1, A_6, B_6, C_6},
+ {1, A_7, B_7, C_7},
+ {1, A_8, B_8, C_8},
+ {1, A_9, B_9, C_9},
+ {1, A_10, B_10, C_10},
+ {1, A_11, B_11, C_11},
+ {1, A_12, B_12, C_12},
+ {1, A_13, B_13, C_13},
+ {1, A_14, B_14, C_14},
+
+ {0, A_1, B_1, C_1},
+ {0, A_2, B_2, C_2},
+ {0, A_3, B_3, C_3},
+ {0, A_4, B_4, C_4},
+ {0, A_5, B_5, C_5},
+ {0, A_6, B_6, C_6},
+ {0, A_7, B_7, C_7},
+ {0, A_8, B_8, C_8},
+ {0, A_9, B_9, C_9},
+ {0, A_10, B_10, C_10},
+ {0, A_11, B_11, C_11},
+ {0, A_12, B_12, C_12},
+ {0, A_13, B_13, C_13},
+ {0, A_14, B_14, C_14},
+ {1, D_1, E_1, F_1},
+
+ {0, D_1, E_1, F_1},
+ {0, D_2, E_2, F_2},
+ {0, D_3, E_3, F_3},
+ {0, D_4, E_4, F_4},
+ {0, D_5, E_5, F_5},
+ {0, D_6, E_6, F_6},
+ {0, D_7, E_7, F_7},
+ {0, D_8, E_8, F_8},
+ {0, D_9, E_9, F_9},
+ {0, D_10, E_10, F_10},
+ {0, D_11, E_11, F_11},
+ {0, D_12, E_12, F_12},
+ {0, D_13, E_13, F_13},
+ {0, D_14, E_14, F_14},
+ {1, D_2, E_2, F_2},
+
+ {0, G_1, H_1, I_1},
+ {0, G_2, H_2, I_2},
+ {0, G_3, H_3, I_3},
+ {0, G_4, H_4, I_4},
+ {0, G_5, H_5, I_5},
+ {0, G_6, H_6, I_6},
+ {0, G_7, H_7, I_7},
+ {0, G_8, H_8, I_8},
+ {0, G_9, H_9, I_9},
+ {0, G_10, H_10, I_10},
+ {0, G_11, H_11, I_11},
+ {0, G_12, H_12, I_12},
+ {0, A_15, B_15, C_15},
+ {0, G_13, H_13, I_13},
+ {1, D_3, E_3, F_3},
+
+ {0, J_1, K_1, L_1},
+ {0, A_16, B_16, C_16},
+ {0, J_2, K_2, L_2},
+ {0, J_3, K_3, L_3},
+ {0, J_4, K_4, L_4},
+ {0, J_5, K_5, L_5},
+ {0, J_6, K_6, L_6},
+ {0, J_7, K_7, L_7},
+ {0, J_8, K_8, L_8},
+ {0, J_9, K_9, L_9},
+ {0, J_10, K_10, L_10},
+ {0, J_11, K_11, L_11},
+ {0, J_12, K_12, L_12},
+ {1, D_7, E_7, F_7},
+
+
+ {0, J_13, K_13, L_13},
+ {0, J_14, K_14, L_14},
+ {0, J_15, K_15, L_15},
+ {0, J_16, K_16, L_16},
+
+ {0, G_14, H_14, I_14},
+ {0, G_15, H_15, I_15},
+ {0, G_16, H_16, I_16},
+
+ {0, D_15, E_15, F_15},
+ {1, D_6, E_6, F_6},
+ {1, D_5, E_5, F_5},
+
+
+ {1, G_1, H_1, I_1},
+ {1, G_2, H_2, I_2},
+ {1, G_3, H_3, I_3},
+ {1, G_4, H_4, I_4},
+ {1, G_5, H_5, I_5},
+ {1, G_6, H_6, I_6},
+ {1, G_7, H_7, I_7},
+ {1, G_8, H_8, I_8},
+ {1, G_9, H_9, I_9},
+ {1, G_10, H_10, I_10},
+ {1, G_11, H_11, I_11},
+
+ {1, J_1, K_1, L_1},
+ {1, J_2, K_2, L_2},
+ {1, J_3, K_3, L_3},
+ {1, J_4, K_4, L_4},
+ {1, J_5, K_5, L_5},
+ {1, J_6, K_6, L_6},
+ {1, J_7, K_7, L_7},
+ {1, J_8, K_8, L_8},
+ {1, J_9, K_9, L_9},
+ {1, J_10, K_10, L_10},
+ {1, J_11, K_11, L_11},
+};
+// clang-format on
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
+ return false;
+ }
+ if (host_keyboard_led_state().caps_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(44, 255, 255, 255);
+ }
+ if (keymap_config.no_gui) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(74, 255, 255, 255);
+ }
+ return true;
+}
+
+#endif
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+ switch (keycode) {
+#ifdef RGB_MATRIX_ENABLE
+ case RGB_TOG:
+ if (record->event.pressed) {
+ switch (rgb_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ rgb_matrix_set_color_all(0, 0, 0);
+ } break;
+ default: {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ } break;
+ }
+ }
+ if (!rgb_matrix_is_enabled()) {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ rgb_matrix_enable();
+ }
+ return false;
+#endif
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/chosfox/cf81/config.h b/keyboards/chosfox/cf81/config.h
new file mode 100644
index 00000000000..b1ea8bba200
--- /dev/null
+++ b/keyboards/chosfox/cf81/config.h
@@ -0,0 +1,52 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Use 4 dynamic keymap layers */
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
+#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
+
+/* I2C Config for LED Driver */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000 /* 400000 */
+
+#define DRIVER_1_LED_TOTAL 63
+#define DRIVER_2_LED_TOTAL 20
+#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL + 22)
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_TRIGGER_ON_KEYDOWN
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
diff --git a/keyboards/chosfox/cf81/halconf.h b/keyboards/chosfox/cf81/halconf.h
new file mode 100644
index 00000000000..2f64e65393a
--- /dev/null
+++ b/keyboards/chosfox/cf81/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/chosfox/cf81/info.json b/keyboards/chosfox/cf81/info.json
new file mode 100644
index 00000000000..8b09d5daf61
--- /dev/null
+++ b/keyboards/chosfox/cf81/info.json
@@ -0,0 +1,270 @@
+{
+ "keyboard_name": "CHOSFOX CF81",
+ "manufacturer": "CHOSFOX",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "force_nkro": true,
+ "vid": "0xFFFE",
+ "pid": "0x0012",
+ "device_version": "1.0.0",
+ "suspend_wakeup_delay": 400
+ },
+ "eeprom": {
+ "driver": "wear_leveling"
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "encoder": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C1","C2","C3","A0","A1","A2","A3","A4","A5","A6","A7","C4","C5","B0","B1","B2"],
+ "rows": ["B15", "C6", "C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "encoder": {
+ "rotary": [
+ { "pin_a": "B14", "pin_b": "B13" }
+ ]
+ },
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "animations": {
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "raindrops": true,
+ "typing_heatmap": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "multisplash": true
+ },
+ "max_brightness": 200,
+ "val_steps": 20,
+ "layout":[
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 0 },
+ { "flags": 4, "matrix": [0, 1], "x": 14, "y": 0 },
+ { "flags": 4, "matrix": [0, 2], "x": 29, "y": 0 },
+ { "flags": 4, "matrix": [0, 3], "x": 44, "y": 0 },
+ { "flags": 4, "matrix": [0, 4], "x": 59, "y": 0 },
+ { "flags": 4, "matrix": [0, 5], "x": 74, "y": 0 },
+ { "flags": 4, "matrix": [0, 6], "x": 89, "y": 0 },
+ { "flags": 4, "matrix": [0, 7], "x":104, "y": 0 },
+ { "flags": 4, "matrix": [0, 8], "x":119, "y": 0 },
+ { "flags": 4, "matrix": [0, 9], "x":134, "y": 0 },
+ { "flags": 4, "matrix": [0, 10], "x":149, "y": 0 },
+ { "flags": 4, "matrix": [0, 11], "x":164, "y": 0 },
+ { "flags": 4, "matrix": [0, 12], "x":179, "y": 0 },
+ { "flags": 4, "matrix": [0, 13], "x":196, "y": 0 },
+
+ { "flags": 4, "matrix": [1, 0], "x": 0, "y": 12},
+ { "flags": 4, "matrix": [1, 1], "x": 14, "y": 12},
+ { "flags": 4, "matrix": [1, 2], "x": 28, "y": 12},
+ { "flags": 4, "matrix": [1, 3], "x": 42, "y": 12},
+ { "flags": 4, "matrix": [1, 4], "x": 56, "y": 12},
+ { "flags": 4, "matrix": [1, 5], "x": 70, "y": 12},
+ { "flags": 4, "matrix": [1, 6], "x": 84, "y": 12},
+ { "flags": 4, "matrix": [1, 7], "x": 98, "y": 12},
+ { "flags": 4, "matrix": [1, 8], "x":112, "y": 12},
+ { "flags": 4, "matrix": [1, 9], "x":126, "y": 12},
+ { "flags": 4, "matrix": [1, 10], "x":140, "y": 12},
+ { "flags": 4, "matrix": [1, 11], "x":154, "y": 12},
+ { "flags": 4, "matrix": [1, 12], "x":168, "y": 12},
+ { "flags": 4, "matrix": [1, 13], "x":182, "y": 12},
+ { "flags": 4, "matrix": [1, 15], "x":224, "y": 12},
+
+ { "flags": 4, "matrix": [2, 0], "x": 0, "y": 25},
+ { "flags": 4, "matrix": [2, 1], "x": 14, "y": 25},
+ { "flags": 4, "matrix": [2, 2], "x": 28, "y": 25},
+ { "flags": 4, "matrix": [2, 3], "x": 42, "y": 25},
+ { "flags": 4, "matrix": [2, 4], "x": 56, "y": 25},
+ { "flags": 4, "matrix": [2, 5], "x": 70, "y": 25},
+ { "flags": 4, "matrix": [2, 6], "x": 84, "y": 25},
+ { "flags": 4, "matrix": [2, 7], "x": 98, "y": 25},
+ { "flags": 4, "matrix": [2, 8], "x":112, "y": 25},
+ { "flags": 4, "matrix": [2, 9], "x":126, "y": 25},
+ { "flags": 4, "matrix": [2, 10], "x":140, "y": 25},
+ { "flags": 4, "matrix": [2, 11], "x":154, "y": 25},
+ { "flags": 4, "matrix": [2, 12], "x":168, "y": 25},
+ { "flags": 4, "matrix": [2, 13], "x":182, "y": 25},
+ { "flags": 4, "matrix": [2, 15], "x":224, "y": 25},
+
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 38},
+ { "flags": 4, "matrix": [3, 1], "x": 28, "y": 38},
+ { "flags": 4, "matrix": [3, 2], "x": 42, "y": 38},
+ { "flags": 4, "matrix": [3, 3], "x": 56, "y": 38},
+ { "flags": 4, "matrix": [3, 4], "x": 70, "y": 38},
+ { "flags": 4, "matrix": [3, 5], "x": 84, "y": 38},
+ { "flags": 4, "matrix": [3, 6], "x": 98, "y": 38},
+ { "flags": 4, "matrix": [3, 7], "x":112, "y": 38},
+ { "flags": 4, "matrix": [3, 8], "x":126, "y": 38},
+ { "flags": 4, "matrix": [3, 9], "x":140, "y": 38},
+ { "flags": 4, "matrix": [3, 10], "x":154, "y": 38},
+ { "flags": 4, "matrix": [3, 11], "x":168, "y": 38},
+ { "flags": 4, "matrix": [3, 12], "x":182, "y": 38},
+ { "flags": 4, "matrix": [3, 13], "x":196, "y": 38},
+ { "flags": 4, "matrix": [3, 15], "x":224, "y": 38},
+
+ { "flags": 4, "matrix": [4, 0], "x": 0, "y": 51},
+ { "flags": 4, "matrix": [4, 11], "x": 14, "y": 51},
+ { "flags": 4, "matrix": [4, 1], "x": 28, "y": 51},
+ { "flags": 4, "matrix": [4, 2], "x": 37, "y": 51},
+ { "flags": 4, "matrix": [4, 3], "x": 56, "y": 51},
+ { "flags": 4, "matrix": [4, 4], "x": 74, "y": 51},
+ { "flags": 4, "matrix": [4, 5], "x": 93, "y": 51},
+ { "flags": 4, "matrix": [4, 6], "x":112, "y": 51},
+ { "flags": 4, "matrix": [4, 7], "x":130, "y": 51},
+ { "flags": 4, "matrix": [4, 8], "x":149, "y": 51},
+ { "flags": 4, "matrix": [4, 9], "x":168, "y": 51},
+ { "flags": 4, "matrix": [4, 10], "x":186, "y": 51},
+ { "flags": 4, "matrix": [4, 13], "x":200, "y": 51},
+ { "flags": 4, "matrix": [4, 14], "x":214, "y": 51},
+
+ { "flags": 4, "matrix": [5, 0], "x": 0, "y": 64},
+ { "flags": 4, "matrix": [5, 1], "x": 18, "y": 64},
+ { "flags": 4, "matrix": [5, 2], "x": 37, "y": 64},
+ { "flags": 4, "matrix": [5, 5], "x": 92, "y": 64},
+ { "flags": 4, "matrix": [5, 9], "x":140, "y": 64},
+ { "flags": 4, "matrix": [5, 10], "x":154, "y": 64},
+ { "flags": 4, "matrix": [5, 11], "x":168, "y": 64},
+ { "flags": 4, "matrix": [5, 13], "x":196, "y": 64},
+ { "flags": 4, "matrix": [5, 14], "x":210, "y": 64},
+ { "flags": 4, "matrix": [5, 15], "x":224, "y": 64},
+
+ { "flags": 2, "x":0, "y":0},
+ { "flags": 2, "x":0, "y":6},
+ { "flags": 2, "x":0, "y":13},
+ { "flags": 2, "x":0, "y":19},
+ { "flags": 2, "x":0, "y":25},
+ { "flags": 2, "x":0, "y":32},
+ { "flags": 2, "x":0, "y":38},
+ { "flags": 2, "x":0, "y":45},
+ { "flags": 2, "x":0, "y":51},
+ { "flags": 2, "x":0, "y":57},
+ { "flags": 2, "x":0, "y":64},
+
+ { "flags": 2, "x":224, "y":0},
+ { "flags": 2, "x":224, "y":6},
+ { "flags": 2, "x":224, "y":13},
+ { "flags": 2, "x":224, "y":19},
+ { "flags": 2, "x":224, "y":25},
+ { "flags": 2, "x":224, "y":32},
+ { "flags": 2, "x":224, "y":38},
+ { "flags": 2, "x":224, "y":45},
+ { "flags": 2, "x":224, "y":51},
+ { "flags": 2, "x":224, "y":57},
+ { "flags": 2, "x":224, "y":64}
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "label": "Del", "matrix": [0, 13], "x": 14, "y": 0 },
+ { "label": "Mute", "matrix": [0, 15], "x": 15.5, "y": 0 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "*", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "(", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": ")", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "_", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "+", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "Bksp", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "Home", "matrix": [1, 15], "x": 15.5, "y": 1.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "{", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "}", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "|", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "PageUp", "matrix": [2, 15], "x": 15.5, "y": 2.25 },
+
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": ":", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "\"", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": ":", "matrix": [3, 12], "x": 12.75, "y": 3.25 },
+ { "label": "Enter", "matrix": [3, 13], "w": 1.25, "x": 13.75, "y": 3.25 },
+ { "label": "PageDn", "matrix": [3, 15], "x": 15.5, "y": 3.25 },
+
+ { "label": "Shift", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "label": ":", "matrix": [4, 11], "x": 1.25, "y": 4.25 },
+ { "label": "Z", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "N", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "M", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "<", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": ">", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "?", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "Shift", "matrix": [4, 13], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "label": "Up", "matrix": [4, 14], "x": 14.25, "y": 4.25 },
+
+ { "label": "Ctrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "Win", "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "Alt", "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "label": "Space", "matrix": [5, 5], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25 },
+ { "label": "Fn", "matrix": [5, 10], "x": 11, "y": 5.25 },
+ { "label": "Ctrl", "matrix": [5, 11], "x": 12, "y": 5.25 },
+ { "label": "Left", "matrix": [5, 13], "x": 13.25, "y": 5.25 },
+ { "label": "Down", "matrix": [5, 14], "x": 14.25, "y": 5.25 },
+ { "label": "Right", "matrix": [5, 15], "x": 15.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/chosfox/cf81/keymaps/default/keymap.c b/keyboards/chosfox/cf81/keymaps/default/keymap.c
new file mode 100644
index 00000000000..753bdebc0a4
--- /dev/null
+++ b/keyboards/chosfox/cf81/keymaps/default/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_FN,
+ MAC_B,
+ MAC_FN
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT( /* Base */
+ 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_MUTE,
+ 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_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+
+ [WIN_FN] = LAYOUT( /* FN */
+ _______, KC_MSEL, KC_VOLD, KC_VOLU, KC_MUTE, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MAIL, KC_WHOM, KC_CALC, KC_WSCH, KC_INS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, RGB_TOG, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, RGB_MOD, _______,
+ _______, _______,DF(MAC_B),_______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, GU_TOGG, _______, EE_CLR, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUD),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, KC_DEL, KC_MUTE,
+ 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_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT( /* FN */
+ _______, 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_INS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, RGB_TOG, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, RGB_MOD, _______,
+ _______,DF(WIN_B),_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, _______, _______, EE_CLR, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUD)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [WIN_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [WIN_FN] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_FN] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }
+};
+#endif
+
diff --git a/keyboards/chosfox/cf81/keymaps/default/rules.mk b/keyboards/chosfox/cf81/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/chosfox/cf81/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/chosfox/cf81/keymaps/via/keymap.c b/keyboards/chosfox/cf81/keymaps/via/keymap.c
new file mode 100644
index 00000000000..753bdebc0a4
--- /dev/null
+++ b/keyboards/chosfox/cf81/keymaps/via/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_FN,
+ MAC_B,
+ MAC_FN
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT( /* Base */
+ 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_MUTE,
+ 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_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+
+ [WIN_FN] = LAYOUT( /* FN */
+ _______, KC_MSEL, KC_VOLD, KC_VOLU, KC_MUTE, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MAIL, KC_WHOM, KC_CALC, KC_WSCH, KC_INS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, RGB_TOG, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, RGB_MOD, _______,
+ _______, _______,DF(MAC_B),_______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, GU_TOGG, _______, EE_CLR, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUD),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, KC_DEL, KC_MUTE,
+ 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_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT( /* FN */
+ _______, 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_INS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, RGB_TOG, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, RGB_MOD, _______,
+ _______,DF(WIN_B),_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, _______, _______, EE_CLR, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUD)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [WIN_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [WIN_FN] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_FN] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }
+};
+#endif
+
diff --git a/keyboards/chosfox/cf81/keymaps/via/rules.mk b/keyboards/chosfox/cf81/keymaps/via/rules.mk
new file mode 100644
index 00000000000..f1adcab005e
--- /dev/null
+++ b/keyboards/chosfox/cf81/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/chosfox/cf81/mcuconf.h b/keyboards/chosfox/cf81/mcuconf.h
new file mode 100644
index 00000000000..e2884f3828f
--- /dev/null
+++ b/keyboards/chosfox/cf81/mcuconf.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include_next
+
+#undef WB32_SPI_USE_QSPI
+#define WB32_SPI_USE_QSPI TRUE
+
+#undef WB32_I2C_USE_I2C1
+#define WB32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/chosfox/cf81/readme.md b/keyboards/chosfox/cf81/readme.md
new file mode 100644
index 00000000000..06522836fd8
--- /dev/null
+++ b/keyboards/chosfox/cf81/readme.md
@@ -0,0 +1,19 @@
+# CHOSFOX CF81 keyboard
+
+A customizable 75% encoder keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: CF81
+* Hardware Availability: [CHOSFOX](https://chosfox.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make chosfox/cf81:default
+
+Flashing example for this keyboard:
+
+ make chosfox/cf81:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, which programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chosfox/cf81/rules.mk b/keyboards/chosfox/cf81/rules.mk
new file mode 100644
index 00000000000..002458405ee
--- /dev/null
+++ b/keyboards/chosfox/cf81/rules.mk
@@ -0,0 +1 @@
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/cipulot/common/via_apc.c b/keyboards/cipulot/common/via_apc.c
new file mode 100644
index 00000000000..2a92052d883
--- /dev/null
+++ b/keyboards/cipulot/common/via_apc.c
@@ -0,0 +1,158 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "ec_switch_matrix.h"
+#include "action.h"
+#include "via.h"
+
+#ifdef VIA_ENABLE
+
+void apc_init_thresholds(void);
+void apc_set_threshold(bool is_for_actuation);
+
+// Declaring an _apc_config_t struct that will store our data
+typedef struct _apc_config_t {
+ uint16_t actuation_threshold;
+ uint16_t release_threshold;
+} apc_config;
+
+// Check if the size of the reserved persistent memory is the same as the size of struct apc_config
+_Static_assert(sizeof(apc_config) == EECONFIG_USER_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data");
+
+// Declaring a new variable apc of type apc_config
+apc_config apc;
+
+// Declaring enums for VIA config menu
+enum via_apc_enums {
+ // clang-format off
+ id_apc_actuation_threshold = 1,
+ id_apc_release_threshold = 2
+ // clang-format on
+};
+
+// Initializing persistent memory configuration: default values are declared and stored in PMEM
+void eeconfig_init_user(void) {
+ // Default values
+ apc.actuation_threshold = DEFAULT_ACTUATION_LEVEL;
+ apc.release_threshold = DEFAULT_RELEASE_LEVEL;
+ // Write default value to EEPROM now
+ eeconfig_update_user_datablock(&apc);
+}
+
+// On Keyboard startup
+void keyboard_post_init_user(void) {
+ // Read custom menu variables from memory
+ eeconfig_read_user_datablock(&apc);
+ apc_init_thresholds();
+}
+
+// Handle the data received by the keyboard from the VIA menus
+void apc_config_set_value(uint8_t *data) {
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch (*value_id) {
+ case id_apc_actuation_threshold: {
+ apc.actuation_threshold = value_data[1] | (value_data[0] << 8);
+ apc_set_threshold(true);
+ break;
+ }
+ case id_apc_release_threshold: {
+ apc.release_threshold = value_data[1] | (value_data[0] << 8);
+ apc_set_threshold(false);
+ break;
+ }
+ }
+}
+
+// Handle the data sent by the keyboard to the VIA menus
+void apc_config_get_value(uint8_t *data) {
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch (*value_id) {
+ case id_apc_actuation_threshold: {
+ value_data[0] = apc.actuation_threshold >> 8;
+ value_data[1] = apc.actuation_threshold & 0xFF;
+ break;
+ }
+ case id_apc_release_threshold: {
+ value_data[0] = apc.release_threshold >> 8;
+ value_data[1] = apc.release_threshold & 0xFF;
+ break;
+ }
+ }
+}
+
+// Save the data to persistent memory after changes are made
+void apc_config_save(void) {
+ eeconfig_update_user_datablock(&apc);
+}
+
+void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
+ // data = [ command_id, channel_id, value_id, value_data ]
+ uint8_t *command_id = &(data[0]);
+ uint8_t *channel_id = &(data[1]);
+ uint8_t *value_id_and_data = &(data[2]);
+
+ if (*channel_id == id_custom_channel) {
+ switch (*command_id) {
+ case id_custom_set_value: {
+ apc_config_set_value(value_id_and_data);
+ break;
+ }
+ case id_custom_get_value: {
+ apc_config_get_value(value_id_and_data);
+ break;
+ }
+ case id_custom_save: {
+ apc_config_save();
+ break;
+ }
+ default: {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+ return;
+ }
+
+ *command_id = id_unhandled;
+}
+
+// Initialize the thresholds
+void apc_init_thresholds(void) {
+ ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold;
+ ecsm_config.ecsm_release_threshold = apc.release_threshold;
+
+ // Update the ecsm_config
+ ecsm_update(&ecsm_config);
+}
+
+// Set the thresholds
+void apc_set_threshold(bool is_for_actuation) {
+ if (is_for_actuation) {
+ ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold;
+
+ } else {
+ ecsm_config.ecsm_release_threshold = apc.release_threshold;
+ }
+ // Update the ecsm_config
+ ecsm_update(&ecsm_config);
+}
+#endif // VIA_ENABLE
diff --git a/keyboards/cipulot/ec_theca/config.h b/keyboards/cipulot/ec_theca/config.h
new file mode 100644
index 00000000000..481183b80c1
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/config.h
@@ -0,0 +1,45 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 16
+
+/* Custom matrix pins and port select array */
+#define MATRIX_ROW_PINS \
+ { B4, A14, B3, A15, B6, B5 }
+#define MATRIX_COL_CHANNELS \
+ { 3, 0, 1, 2, 6, 5, 7, 4 }
+#define MUX_SEL_PINS \
+ { B7, B8, B9 }
+
+/* Hardware peripherals pins */
+#define APLEX_EN_PIN_0 C13
+#define APLEX_EN_PIN_1 C14
+#define DISCHARGE_PIN B1
+#define ANALOG_PORT A3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#define DEFAULT_ACTUATION_LEVEL 550
+#define DEFAULT_RELEASE_LEVEL 500
+
+#define DISCHARGE_TIME 10
diff --git a/keyboards/cipulot/ec_theca/ec_switch_matrix.c b/keyboards/cipulot/ec_theca/ec_switch_matrix.c
new file mode 100644
index 00000000000..fdf4479423f
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/ec_switch_matrix.c
@@ -0,0 +1,191 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "ec_switch_matrix.h"
+#include "analog.h"
+#include "atomic_util.h"
+#include "print.h"
+#include "wait.h"
+
+/* Pin and port array */
+const uint32_t row_pins[] = MATRIX_ROW_PINS;
+const uint8_t col_channels[] = MATRIX_COL_CHANNELS;
+const uint32_t mux_sel_pins[] = MUX_SEL_PINS;
+
+static ecsm_config_t config;
+static uint16_t ecsm_sw_value[MATRIX_ROWS][MATRIX_COLS];
+
+static adc_mux adcMux;
+
+static inline void discharge_capacitor(void) {
+ writePinLow(DISCHARGE_PIN);
+}
+static inline void charge_capacitor(uint8_t row) {
+ writePinHigh(DISCHARGE_PIN);
+ writePinHigh(row_pins[row]);
+}
+
+static inline void init_mux_sel(void) {
+ for (int idx = 0; idx < 3; idx++) {
+ setPinOutput(mux_sel_pins[idx]);
+ }
+}
+
+static inline void select_mux(uint8_t col) {
+ uint8_t ch = col_channels[col];
+ writePin(mux_sel_pins[0], ch & 1);
+ writePin(mux_sel_pins[1], ch & 2);
+ writePin(mux_sel_pins[2], ch & 4);
+}
+
+static inline void init_row(void) {
+ for (int idx = 0; idx < MATRIX_ROWS; idx++) {
+ setPinOutput(row_pins[idx]);
+ writePinLow(row_pins[idx]);
+ }
+}
+
+static inline void clear_row(void) {
+ for (int idx = 0; idx < MATRIX_ROWS; idx++) {
+ setPinOutput(row_pins[idx]);
+ writePinLow(row_pins[idx]);
+ }
+}
+
+/* Initialize the peripherals pins */
+int ecsm_init(ecsm_config_t const* const ecsm_config) {
+ // Initialize config
+ config = *ecsm_config;
+
+ palSetLineMode(ANALOG_PORT, PAL_MODE_INPUT_ANALOG);
+ adcMux = pinToMux(ANALOG_PORT);
+
+ // Dummy call to make sure that adcStart() has been called in the appropriate state
+ adc_read(adcMux);
+
+ // Initialize discharge pin as discharge mode
+ writePinLow(DISCHARGE_PIN);
+ setPinOutputOpenDrain(DISCHARGE_PIN);
+
+ // Initialize drive lines
+ init_row();
+
+ // Initialize multiplexer select pin
+ init_mux_sel();
+
+ // Enable AMUX
+ setPinOutput(APLEX_EN_PIN_0);
+ writePinLow(APLEX_EN_PIN_0);
+ setPinOutput(APLEX_EN_PIN_1);
+ writePinLow(APLEX_EN_PIN_1);
+
+ return 0;
+}
+
+int ecsm_update(ecsm_config_t const* const ecsm_config) {
+ // Save config
+ config = *ecsm_config;
+ return 0;
+}
+
+// Read the capacitive sensor value
+uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col) {
+ uint16_t sw_value = 0;
+
+ // Select the multiplexer
+ if (channel == 0) {
+ writePinHigh(APLEX_EN_PIN_0);
+ select_mux(col);
+ writePinLow(APLEX_EN_PIN_0);
+ } else {
+ writePinHigh(APLEX_EN_PIN_1);
+ select_mux(col);
+ writePinLow(APLEX_EN_PIN_1);
+ }
+
+ // Set strobe pins to low state
+ //writePinLow(row_pins[row]);
+ clear_row();
+ ATOMIC_BLOCK_FORCEON {
+ // Set the row pin to high state and have capacitor charge
+ charge_capacitor(row);
+ // Read the ADC value
+ sw_value = adc_read(adcMux);
+ }
+ // Discharge peak hold capacitor
+ discharge_capacitor();
+ // Waiting for the ghost capacitor to discharge fully
+ wait_us(DISCHARGE_TIME);
+
+ return sw_value;
+}
+
+// Update press/release state of key
+bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value) {
+ bool current_state = (*current_row >> col) & 1;
+
+ // Press to release
+ if (current_state && sw_value < config.ecsm_actuation_threshold) {
+ *current_row &= ~(1 << col);
+ return true;
+ }
+
+ // Release to press
+ if ((!current_state) && sw_value > config.ecsm_release_threshold) {
+ *current_row |= (1 << col);
+ return true;
+ }
+
+ return false;
+}
+
+// Scan key values and update matrix state
+bool ecsm_matrix_scan(matrix_row_t current_matrix[]) {
+ bool updated = false;
+
+ // Disable AMUX of channel 1
+ writePinHigh(APLEX_EN_PIN_1);
+ for (int col = 0; col < sizeof(col_channels); col++) {
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ ecsm_sw_value[row][col] = ecsm_readkey_raw(0, row, col);
+ updated |= ecsm_update_key(¤t_matrix[row], row, col, ecsm_sw_value[row][col]);
+ }
+ }
+
+ // Disable AMUX of channel 1
+ writePinHigh(APLEX_EN_PIN_0);
+ for (int col = 0; col < sizeof(col_channels); col++) {
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ ecsm_sw_value[row][col + 8] = ecsm_readkey_raw(1, row, col);
+ updated |= ecsm_update_key(¤t_matrix[row], row, col + 8, ecsm_sw_value[row][col + 8]);
+ }
+ }
+ return updated;
+}
+
+// Debug print key values
+void ecsm_print_matrix(void) {
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ uprintf("%4d", ecsm_sw_value[row][col]);
+ if (col < (MATRIX_COLS - 1)) {
+ print(",");
+ }
+ }
+ print("\n");
+ }
+ print("\n");
+}
diff --git a/keyboards/cipulot/ec_theca/ec_switch_matrix.h b/keyboards/cipulot/ec_theca/ec_switch_matrix.h
new file mode 100644
index 00000000000..9dcb216caa3
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/ec_switch_matrix.h
@@ -0,0 +1,36 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include
+#include
+
+#include "matrix.h"
+
+typedef struct {
+ uint16_t ecsm_actuation_threshold; // threshold for key release
+ uint16_t ecsm_release_threshold; // threshold for key press
+} ecsm_config_t;
+
+ecsm_config_t ecsm_config;
+
+int ecsm_init(ecsm_config_t const* const ecsm_config);
+int ecsm_update(ecsm_config_t const* const ecsm_config);
+bool ecsm_matrix_scan(matrix_row_t current_matrix[]);
+uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col);
+bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value);
+void ecsm_print_matrix(void);
diff --git a/keyboards/cipulot/ec_theca/halconf.h b/keyboards/cipulot/ec_theca/halconf.h
new file mode 100644
index 00000000000..5b71acecbbc
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+
+#include_next
diff --git a/keyboards/cipulot/ec_theca/info.json b/keyboards/cipulot/ec_theca/info.json
new file mode 100644
index 00000000000..8aa2933892f
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/info.json
@@ -0,0 +1,388 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "EC Theca",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "processor": "STM32F401",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6B7E",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 2, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 3, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 4, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 5, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 11, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 12, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 13, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 14, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "1,13", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "label": "1,15", "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1.25 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "2,14", "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 2.25 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 },
+ { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "label": "4,0", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "4,1", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "4,2", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "4,3", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "4,4", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "4,5", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "4,6", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "4,7", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "4,8", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": "4,9", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "4,10", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4.25 },
+ { "label": "5,0", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "5,1", "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "5,2", "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "label": "5,5", "matrix": [5, 5], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "label": "5,10", "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "label": "5,11", "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "label": "5,12", "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "label": "5,13", "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "label": "5,14", "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "label": "5,15", "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "label": "4,15", "matrix": [4, 15], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 2, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 3, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 4, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 5, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 11, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 12, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 13, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 14, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "1,13", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "label": "1,15", "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1.25 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "2,14", "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 2.25 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 },
+ { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "label": "4,0", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "4,1", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "4,2", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "4,3", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "4,4", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "4,5", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "4,6", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "4,7", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "4,8", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": "4,9", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "4,10", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4.25 },
+ { "label": "5,0", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "5,1", "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "5,2", "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "label": "5,5", "matrix": [5, 5], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "label": "5,10", "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "label": "5,11", "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "label": "5,12", "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "label": "5,13", "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "label": "5,14", "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "label": "5,15", "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "label": "4,15", "matrix": [4, 15], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 2, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 3, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 4, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 5, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 11, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 12, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 13, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 14, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "1,13", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "label": "1,15", "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1.25 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "2,14", "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 2.25 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 },
+ { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "label": "4,0", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "4,1", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "4,2", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "4,3", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "4,4", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "4,5", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "4,6", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "4,7", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "4,8", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": "4,9", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "4,10", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4.25 },
+ { "label": "5,0", "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "label": "5,1", "matrix": [5, 1], "x": 1.5, "y": 5.25 },
+ { "label": "5,2", "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "label": "5,5", "matrix": [5, 5], "w": 7, "x": 4, "y": 5.25 },
+ { "label": "5,11", "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "label": "5,12", "matrix": [5, 12], "x": 12.5, "y": 5.25 },
+ { "label": "5,13", "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "label": "5,14", "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "label": "5,15", "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "label": "4,15", "matrix": [4, 15], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_wkl": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 2, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 3, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 4, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 5, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 11, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 12, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 13, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 14, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "1,13", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "label": "1,15", "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1.25 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "2,14", "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 2.25 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 },
+ { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "label": "4,0", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "4,1", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "4,2", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "4,3", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "4,4", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "4,5", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "4,6", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "4,7", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "4,8", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": "4,9", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "4,10", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4.25 },
+ { "label": "5,0", "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "label": "5,2", "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "label": "5,5", "matrix": [5, 5], "w": 7, "x": 4, "y": 5.25 },
+ { "label": "5,11", "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "label": "5,13", "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "label": "5,14", "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "label": "5,15", "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "label": "4,15", "matrix": [4, 15], "x": 17.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_theca/keymaps/default/keymap.c b/keyboards/cipulot/ec_theca/keymaps/default/keymap.c
new file mode 100644
index 00000000000..2ad75a0f3e4
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan/keymap.c b/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan/keymap.c
new file mode 100644
index 00000000000..a8f569b189d
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_tkl_ansi_tsangan(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_ansi_tsangan(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan_wkl/keymap.c b/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan_wkl/keymap.c
new file mode 100644
index 00000000000..f5b25db2281
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan_wkl/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_tkl_ansi_tsangan_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_ansi_tsangan_wkl(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_theca/keymaps/via/config.h b/keyboards/cipulot/ec_theca/keymaps/via/config.h
new file mode 100644
index 00000000000..ebf954d07ac
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/via/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// This is the size of the EEPROM for the custom VIA-specific data
+#define EECONFIG_USER_DATA_SIZE 4
diff --git a/keyboards/cipulot/ec_theca/keymaps/via/keymap.c b/keyboards/cipulot/ec_theca/keymaps/via/keymap.c
new file mode 100644
index 00000000000..a8fc1b961a6
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_theca/keymaps/via/rules.mk b/keyboards/cipulot/ec_theca/keymaps/via/rules.mk
new file mode 100644
index 00000000000..72e314e6946
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+
+SRC += keyboards/cipulot/common/via_apc.c
diff --git a/keyboards/cipulot/ec_theca/matrix.c b/keyboards/cipulot/ec_theca/matrix.c
new file mode 100644
index 00000000000..1850acf2641
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/matrix.c
@@ -0,0 +1,44 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "ec_switch_matrix.h"
+#include "matrix.h"
+
+/* matrix state(1:on, 0:off) */
+extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
+extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values
+
+void matrix_init_custom(void) {
+ // Default values, overwritten by VIA if enabled later
+ ecsm_config.ecsm_actuation_threshold = DEFAULT_ACTUATION_LEVEL;
+ ecsm_config.ecsm_release_threshold = DEFAULT_RELEASE_LEVEL;
+
+ ecsm_init(&ecsm_config);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool updated = ecsm_matrix_scan(current_matrix);
+
+// RAW matrix values on console
+#ifdef CONSOLE_ENABLE
+ static int cnt = 0;
+ if (cnt++ == 350) {
+ cnt = 0;
+ ecsm_print_matrix();
+ }
+#endif
+ return updated;
+}
diff --git a/keyboards/cipulot/ec_theca/mcuconf.h b/keyboards/cipulot/ec_theca/mcuconf.h
new file mode 100644
index 00000000000..d91f576bd48
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_ADC_USE_ADC1
+#define STM32_ADC_USE_ADC1 TRUE
diff --git a/keyboards/cipulot/ec_theca/readme.md b/keyboards/cipulot/ec_theca/readme.md
new file mode 100644
index 00000000000..c25e498434c
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/readme.md
@@ -0,0 +1,25 @@
+# EC Theca
+
+
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: EC Theca
+* Hardware Availability: [KLC](https://klc-playground.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_theca:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_theca: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**: Long short the exposed pads on the top of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cipulot/ec_theca/rules.mk b/keyboards/cipulot/ec_theca/rules.mk
new file mode 100644
index 00000000000..b8929fa590d
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/rules.mk
@@ -0,0 +1,3 @@
+CUSTOM_MATRIX = lite
+QUANTUM_LIB_SRC += analog.c
+SRC += matrix.c ec_switch_matrix.c
diff --git a/keyboards/cipulot/rf_r1_8_9xu/info.json b/keyboards/cipulot/rf_r1_8_9xu/info.json
index badf092c87e..eb0220f6779 100644
--- a/keyboards/cipulot/rf_r1_8_9xu/info.json
+++ b/keyboards/cipulot/rf_r1_8_9xu/info.json
@@ -53,6 +53,7 @@
},
"vid": "0x6369"
},
+ "community_layouts": ["tkl_jis", "tkl_iso_tsangan", "tkl_ansi_tsangan"],
"layouts": {
"LAYOUT_all": {
"layout": [
diff --git a/keyboards/cmm_studio/fuji65/info.json b/keyboards/cmm_studio/fuji65/info.json
index 2225bedad3d..cf5a137b34b 100644
--- a/keyboards/cmm_studio/fuji65/info.json
+++ b/keyboards/cmm_studio/fuji65/info.json
@@ -18,8 +18,86 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_ansi_blocker_split_bs"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_ansi_blocker": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_split_bs": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -90,6 +168,459 @@
{"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+
{"matrix": [4, 11], "x": 13, "y": 4},
{"matrix": [4, 12], "x": 14, "y": 4},
{"matrix": [4, 13], "x": 15, "y": 4}
diff --git a/keyboards/cmm_studio/fuji65/keymaps/default/keymap.c b/keyboards/cmm_studio/fuji65/keymaps/default/keymap.c
index da0538c82e9..ba93e7ae1e0 100644
--- a/keyboards/cmm_studio/fuji65/keymaps/default/keymap.c
+++ b/keyboards/cmm_studio/fuji65/keymaps/default/keymap.c
@@ -17,7 +17,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_ansi_blocker_split_bs(
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_GRV, KC_BSLS,
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_TRNS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_TRNS,
@@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_ansi_blocker_split_bs(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/cmm_studio/fuji65/keymaps/via/keymap.c b/keyboards/cmm_studio/fuji65/keymaps/via/keymap.c
index 6b37798c9d5..88b3fa1f57f 100644
--- a/keyboards/cmm_studio/fuji65/keymaps/via/keymap.c
+++ b/keyboards/cmm_studio/fuji65/keymaps/via/keymap.c
@@ -18,7 +18,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_ansi_blocker_split_bs(
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_GRV, KC_BSLS,
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_TRNS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_TRNS,
@@ -26,21 +26,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_ansi_blocker_split_bs(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [2] = LAYOUT(
+ [2] = LAYOUT_ansi_blocker_split_bs(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [3] = LAYOUT(
+ [3] = LAYOUT_ansi_blocker_split_bs(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/cmm_studio/fuji65/matrix_diagram.md b/keyboards/cmm_studio/fuji65/matrix_diagram.md
new file mode 100644
index 00000000000..b98ef38fa5f
--- /dev/null
+++ b/keyboards/cmm_studio/fuji65/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for CMM.Studio Fuji65
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┐ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐2C │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2E │ │1D │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+│40 │41 │42 │46 │49 │4A │ │4B │4C │4D │
+└────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+┌────────┐
+│30 │ 2.25u LShift
+└────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┐
+│40 │41 │42 │46 │4A │ Blocker Tsangan
+└─────┴───┴─────┴───────────────────────────┴─────┘
+```
diff --git a/keyboards/converter/usb_usb/info.json b/keyboards/converter/usb_usb/info.json
index 2f3e8913c5a..63c02322a2e 100644
--- a/keyboards/converter/usb_usb/info.json
+++ b/keyboards/converter/usb_usb/info.json
@@ -9,7 +9,7 @@
"device_version": "0.0.1"
},
"processor": "atmega32u4",
- "community_layouts": ["fullsize_ansi", "fullsize_iso"],
+ "community_layouts": ["fullsize_ansi", "fullsize_iso", "fullsize_jis"],
"layouts": {
"LAYOUT_all": {
"layout": [
diff --git a/keyboards/custommk/evo70_r2/config.h b/keyboards/custommk/evo70_r2/config.h
new file mode 100644
index 00000000000..25ab789d75f
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/config.h
@@ -0,0 +1,90 @@
+/* Copyright 2023 David Hoelscher (@customMK)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// No VBUS sense needed
+#define BOARD_OTG_NOVBUSSENS 1
+
+#define STM32_LSECLK 32768
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+#define MATRIX_ROW_PINS { A8, A1, A2, B1, A7 }
+
+// FRAM configuration
+#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A0
+#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 4 // 48MHz / 4 = 12MHz; max supported by MB85R64 is 20MHz
+
+// External flash configuration
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B12
+#define EXTERNAL_FLASH_SPI_CLOCK_DIVISOR 1 // 48MHz; max supported by W25Q128JV is 133MHz
+#define EXTERNAL_FLASH_SIZE (16 * 1024 * 1024) //128Mbit or 16MByte
+#define EXTERNAL_FLASH_SPI_TIMEOUT 200000 //datasheet max is 200seconds for flash chip erase
+
+// SPI Configuration
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN B3
+#define SPI_SCK_PAL_MODE 5
+#define SPI_MOSI_PIN B5
+#define SPI_MOSI_PAL_MODE 5
+#define SPI_MISO_PIN B4
+#define SPI_MISO_PAL_MODE 5
+
+
+// SPI LCD Configuration
+#define LCD_RST_PIN B2
+#define LCD_CS_PIN A9
+#define LCD_DC_PIN B0
+#ifndef LCD_ACTIVITY_TIMEOUT
+ #define LCD_ACTIVITY_TIMEOUT 30000
+#endif
+
+// I2C OLED Configuration
+#define I2C1_SCL_PIN B6
+#define I2C1_SDA_PIN B9
+
+#define I2C1_CLOCK_SPEED 400000
+#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
+
+#define OLED_DISABLE_TIMEOUT
+
+#define COL_SHIFT_IN_PIN B14
+#define COL_SHIFT_CLK_PIN B15
+
+#define QUANTUM_PAINTER_SUPPORTS_256_PALETTE TRUE
+#define QUANTUM_PAINTER_SUPPORTS_NATIVE_COLORS TRUE
+
+#define OLED_UPDATE_INTERVAL 66
+
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL 1
+#define BACKLIGHT_PAL_MODE 2
+
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
+#define WS2812_DMA_CHANNEL 6
+
+#define TAP_CODE_DELAY 10
+
+#define AUDIO_PIN B8
+#define AUDIO_PWM_DRIVER PWMD4
+#define AUDIO_PWM_CHANNEL 3
+#define AUDIO_PWM_PAL_MODE 2
+#define AUDIO_STATE_TIMER GPTD5
+#define AUDIO_INIT_DELAY
diff --git a/keyboards/custommk/evo70_r2/halconf.h b/keyboards/custommk/evo70_r2/halconf.h
new file mode 100644
index 00000000000..5268fe5de6f
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/halconf.h
@@ -0,0 +1,36 @@
+/* Copyright 2023 David Hoelscher (@customMK)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#define HAL_USE_PWM TRUE
+
+#define HAL_USE_RTC TRUE
+
+#define HAL_USE_SPI TRUE
+
+#define HAL_USE_GPT TRUE
+
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#define SERIAL_BUFFERS_SIZE 256
+
+// This enables interrupt-driven mode
+#define SPI_USE_WAIT TRUE
+
+#include_next
diff --git a/keyboards/custommk/evo70_r2/info.json b/keyboards/custommk/evo70_r2/info.json
new file mode 100644
index 00000000000..772325e7f82
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/info.json
@@ -0,0 +1,152 @@
+{
+ "keyboard_name": "EVO70 R2",
+ "url": "https://shop.custommk.com/collections/evo70/products/evo70",
+ "maintainer": "customMK",
+ "manufacturer": "customMK",
+ "tags": ["70%", "encoder", "underglow", "backlight"],
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "encoder": true,
+ "quantum_painter": true,
+ "oled": true,
+ "rgblight": true,
+ "backlight": true,
+ "audio": true
+ },
+ "usb": {
+ "vid": "0xF35B",
+ "pid": "0xFAB6",
+ "device_version": "1.0.0"
+ },
+ "diode_direction": "ROW2COL",
+ "processor": "STM32F411",
+ "bootloader": "stm32-dfu",
+ "rgblight": {
+ "led_count": 48,
+ "hue_steps": 4,
+ "saturation_steps": 8,
+ "brightness_steps": 4,
+ "max_brightness": 128,
+ "layers": {
+ "enabled": true
+ },
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbo_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "A10"
+ },
+ "backlight": {
+ "driver": "pwm",
+ "breathing": true,
+ "breathing_period": 6,
+ "levels": 17,
+ "pin": "A6"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Encoder", "matrix": [1, 0], "x":0.5, "y":0},
+ {"label":"Esc", "matrix": [0, 0], "x":2.5, "y":0},
+ {"label":"1", "matrix": [0, 2], "x":3.5, "y":0},
+ {"label":"2", "matrix": [0, 3], "x":4.5, "y":0},
+ {"label":"3", "matrix": [0, 4], "x":5.5, "y":0},
+ {"label":"4", "matrix": [0, 5], "x":6.5, "y":0},
+ {"label":"5", "matrix": [0, 6], "x":7.5, "y":0},
+ {"label":"6", "matrix": [0, 7], "x":8.5, "y":0},
+ {"label":"7", "matrix": [0, 8], "x":9.5, "y":0},
+ {"label":"8", "matrix": [0, 9], "x":10.5, "y":0},
+ {"label":"9", "matrix": [0, 10], "x":11.5, "y":0},
+ {"label":"0", "matrix": [0, 11], "x":12.5, "y":0},
+ {"label":"-", "matrix": [0, 12], "x":13.5, "y":0},
+ {"label":"=", "matrix": [0, 13], "x":14.5, "y":0},
+ {"label":"Backspace", "matrix": [0, 14], "x":15.5, "y":0, "w":2},
+ {"label":"Delete", "matrix": [0, 15], "x":17.5, "y":0},
+
+ {"label":"Tab", "matrix": [1, 1], "x":2.5, "y":1, "w":1.5},
+ {"label":"Q", "matrix": [1, 2], "x":4, "y":1},
+ {"label":"W", "matrix": [1, 3], "x":5, "y":1},
+ {"label":"E", "matrix": [1, 4], "x":6, "y":1},
+ {"label":"R", "matrix": [1, 5], "x":7, "y":1},
+ {"label":"T", "matrix": [1, 6], "x":8, "y":1},
+ {"label":"Y", "matrix": [1, 7], "x":9, "y":1},
+ {"label":"U", "matrix": [1, 8], "x":10, "y":1},
+ {"label":"I", "matrix": [1, 9], "x":11, "y":1},
+ {"label":"O", "matrix": [1, 10], "x":12, "y":1},
+ {"label":"P", "matrix": [1, 11], "x":13, "y":1},
+ {"label":"[", "matrix": [1, 12], "x":14, "y":1},
+ {"label":"]", "matrix": [1, 13], "x":15, "y":1},
+ {"label":"\\", "matrix": [1, 14], "x":16, "y":1, "w":1.5},
+ {"label":"PgUp", "matrix": [1, 15], "x":17.5, "y":1},
+
+ {"label":"F1", "matrix": [2, 2], "x":0, "y":2},
+ {"label":"F2", "matrix": [2, 0], "x":1, "y":2},
+ {"label":"Caps Lock", "matrix": [2, 1], "x":2.5, "y":2, "w":1.75},
+ {"label":"A", "matrix": [2, 3], "x":4.25, "y":2},
+ {"label":"S", "matrix": [2, 4], "x":5.25, "y":2},
+ {"label":"D", "matrix": [2, 5], "x":6.25, "y":2},
+ {"label":"F", "matrix": [2, 6], "x":7.25, "y":2},
+ {"label":"G", "matrix": [2, 7], "x":8.25, "y":2},
+ {"label":"H", "matrix": [2, 8], "x":9.25, "y":2},
+ {"label":"J", "matrix": [2, 9], "x":10.25, "y":2},
+ {"label":"K", "matrix": [2, 10], "x":11.25, "y":2},
+ {"label":"L", "matrix": [2, 11], "x":12.25, "y":2},
+ {"label":";", "matrix": [2, 12], "x":13.25, "y":2},
+ {"label":"'", "matrix": [2, 13], "x":14.25, "y":2},
+ {"label":"Enter", "matrix": [2, 14], "x":15.25, "y":2, "w":2.25},
+ {"label":"PgDn", "matrix": [2, 15], "x":17.5, "y":2},
+
+ {"label":"F3", "matrix": [3, 1], "x":0, "y":3},
+ {"label":"F4", "matrix": [3, 0], "x":1, "y":3},
+ {"label":"Shift", "matrix": [3, 2], "x":2.5, "y":3, "w":1.25},
+ {"label":"\u2298", "matrix": [0, 1], "x":3.75, "y":3, "w":1},
+ {"label":"Z", "matrix": [3, 3], "x":4.75, "y":3},
+ {"label":"X", "matrix": [3, 4], "x":5.75, "y":3},
+ {"label":"C", "matrix": [3, 5], "x":6.75, "y":3},
+ {"label":"V", "matrix": [3, 6], "x":7.75, "y":3},
+ {"label":"B", "matrix": [3, 7], "x":8.75, "y":3},
+ {"label":"N", "matrix": [3, 8], "x":9.75, "y":3},
+ {"label":"M", "matrix": [3, 9], "x":10.75, "y":3},
+ {"label":",", "matrix": [3, 10], "x":11.75, "y":3},
+ {"label":".", "matrix": [3, 11], "x":12.75, "y":3},
+ {"label":"/", "matrix": [3, 12], "x":13.75, "y":3},
+ {"label":"Shift", "matrix": [3, 13], "x":14.75, "y":3, "w":1.75},
+ {"label":"Up", "matrix": [3, 14], "x":16.5, "y":3},
+ {"label":"End", "matrix": [3, 15], "x":17.5, "y":3},
+
+ {"label":"F5", "matrix": [4, 3], "x":0, "y":4},
+ {"label":"F6", "matrix": [4, 0], "x":1, "y":4},
+ {"label":"Ctrl", "matrix": [4, 1], "x":2.5, "y":4, "w":1.25},
+ {"label":"GUI", "matrix": [4, 2], "x":3.75, "y":4, "w":1.25},
+ {"label":"Alt", "matrix": [4, 4], "x":5, "y":4, "w":1.25},
+ {"label":"Space", "matrix": [4, 7], "x":6.25, "y":4, "w":6.25},
+ {"label":"Alt", "matrix": [4, 10], "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "matrix": [4, 11], "x":13.75, "y":4, "w":1.25},
+ {"label":"Left", "matrix": [4, 13], "x":15.5, "y":4},
+ {"label":"Down", "matrix": [4, 14], "x":16.5, "y":4},
+ {"label":"Right", "matrix": [4, 15], "x":17.5, "y":4}
+ ]
+ }
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "B7", "pin_b": "A4", "resolution": 2}
+ ]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/keymaps/default/keymap.c b/keyboards/custommk/evo70_r2/keymaps/default/keymap.c
new file mode 100644
index 00000000000..9dc7beabdda
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2023 David Hoelscher (@customMK)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F1, KC_F2, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F3, KC_F4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F5, KC_F6, KC_LCTL, KC_LWIN, KC_LALT, KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU),
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/keymaps/via/config.h b/keyboards/custommk/evo70_r2/keymaps/via/config.h
new file mode 100644
index 00000000000..52e3afa69f3
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/via/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 David Hoelscher (@customMK)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// With 8k FRAM, max out dynamic keymap layers and macros
+// 5x16 matrix (160 bytes) and one encoder (4 bytes) consume 164 bytes per layer
+// 32 layers consumes 5248 bytes
+#define DYNAMIC_KEYMAP_LAYER_COUNT 32
+
+// Most of the remaining space can be used for macros
+// QMK Macro keycode range allows up to 128 macros
+#define DYNAMIC_KEYMAP_MACRO_COUNT 128
diff --git a/keyboards/custommk/evo70_r2/keymaps/via/keymap.c b/keyboards/custommk/evo70_r2/keymaps/via/keymap.c
new file mode 100644
index 00000000000..a971aa4e28b
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2023 David Hoelscher (@customMK)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F1, KC_F2, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F3, KC_F4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F5, KC_F6, KC_LCTL, KC_LWIN, KC_LALT, KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/keymaps/via/rules.mk b/keyboards/custommk/evo70_r2/keymaps/via/rules.mk
new file mode 100644
index 00000000000..4253f570f0b
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/matrix.c b/keyboards/custommk/evo70_r2/matrix.c
new file mode 100644
index 00000000000..99a23a4542e
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/matrix.c
@@ -0,0 +1,117 @@
+// Copyright 2023 David Hoelscher (@customMK)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "quantum.h"
+
+// Pin definitions
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+
+void matrix_wait_for_pin(pin_t pin, uint8_t target_state) {
+ rtcnt_t start = chSysGetRealtimeCounterX();
+ rtcnt_t end = start + 5000;
+ while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
+ if (readPin(pin) == target_state) {
+ break;
+ }
+ }
+}
+
+void matrix_wait_for_port(stm32_gpio_t *port, uint32_t target_bitmask) {
+ rtcnt_t start = chSysGetRealtimeCounterX();
+ rtcnt_t end = start + 5000;
+ while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
+ if ((palReadPort(port) & target_bitmask) == target_bitmask) {
+ break;
+ }
+ }
+}
+
+void shift_pulse_clock(void) {
+ writePinHigh(COL_SHIFT_CLK_PIN);
+ matrix_wait_for_pin(COL_SHIFT_CLK_PIN, 1);
+ writePinLow(COL_SHIFT_CLK_PIN);
+}
+
+void matrix_init_custom(void) {
+ //set all row pins as input with pullups
+ for (int i = 0; i < MATRIX_ROWS; ++i) {
+ writePinHigh(row_pins[i]);
+ setPinInputHigh(row_pins[i]);
+ }
+
+ //set all column pins high in ROW2COL matrix
+ setPinOutput(COL_SHIFT_IN_PIN);
+ setPinOutput(COL_SHIFT_CLK_PIN);
+ writePinHigh(COL_SHIFT_IN_PIN);
+ matrix_wait_for_pin(COL_SHIFT_IN_PIN, 1);
+
+ for (int i = 0; i < MATRIX_COLS; ++i) {
+ shift_pulse_clock();
+ }
+
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ static matrix_row_t temp_matrix[MATRIX_ROWS] = {0};
+
+ writePinLow(COL_SHIFT_IN_PIN);
+ matrix_wait_for_pin(COL_SHIFT_IN_PIN, 0);
+
+ // Setup the output column pin
+ shift_pulse_clock();
+
+ writePinHigh(COL_SHIFT_IN_PIN);
+ for (int current_col = 0; current_col < MATRIX_COLS; ++current_col) {
+
+ // Read the column ports
+ uint32_t gpio_a = palReadPort(GPIOA);
+ uint32_t gpio_b = palReadPort(GPIOB);
+
+ // row 0, pin A8
+ int current_row = 0;
+ if ((gpio_a & (1 << 8)) >> 8) {
+ temp_matrix[current_row] &= ~(1ul << current_col);
+ } else {
+ temp_matrix[current_row] |= (1ul << current_col);
+ }
+ // row 1, pin A1
+ current_row = 1;
+ if ((gpio_a & (1 << 1)) >> 1) {
+ temp_matrix[current_row] &= ~(1ul << current_col);
+ } else {
+ temp_matrix[current_row] |= (1ul << current_col);
+ }
+ // row 2, pin A2
+ current_row = 2;
+ if ((gpio_a & (1 << 2)) >> 2) {
+ temp_matrix[current_row] &= ~(1ul << current_col);
+ } else {
+ temp_matrix[current_row] |= (1ul << current_col);
+ }
+ // row 3, pin B3
+ current_row = 3;
+ if ((gpio_b & (1 << 1)) >> 1) {
+ temp_matrix[current_row] &= ~(1ul << current_col);
+ } else {
+ temp_matrix[current_row] |= (1ul << current_col);
+ }
+ // row 4, pin A7
+ current_row = 4;
+ if ((gpio_a & (1 << 7)) >> 7) {
+ temp_matrix[current_row] &= ~(1ul << current_col);
+ } else {
+ temp_matrix[current_row] |= (1ul << current_col);
+ }
+
+ // Setup the output column pin
+ shift_pulse_clock();
+
+ }
+
+ // Check if matrix has changed, return the last-read data
+ bool changed = memcmp(current_matrix, temp_matrix, sizeof(temp_matrix)) != 0;
+ if (changed) {
+ memcpy(current_matrix, temp_matrix, sizeof(temp_matrix));
+ }
+ shift_pulse_clock();
+ return changed;
+}
diff --git a/keyboards/custommk/evo70_r2/mcuconf.h b/keyboards/custommk/evo70_r2/mcuconf.h
new file mode 100644
index 00000000000..afaa692ab85
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/mcuconf.h
@@ -0,0 +1,58 @@
+/* Copyright 2023 David Hoelscher (@customMK)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_LSE_ENABLED
+#define STM32_LSE_ENABLED TRUE
+
+#undef STM32_RTCSEL
+#define STM32_RTCSEL STM32_RTCSEL_LSE
+
+// Used for underglow
+#undef STM32_PWM_USE_TIM1 //timer 1 channel 3
+#define STM32_PWM_USE_TIM1 TRUE
+
+// Used for backlight
+//#undef STM32_PWM_USE_TIM2 //timer 2 channel ?
+//#define STM32_PWM_USE_TIM2 TRUE
+
+// Used for backlight
+#undef STM32_PWM_USE_TIM3 //timer 3 channel 1
+#define STM32_PWM_USE_TIM3 TRUE
+
+// Used for backlight
+//#undef STM32_GPT_USE_TIM3 //timer 3 channel 1
+//#define STM32_GPT_USE_TIM3 TRUE
+
+// Used for backlight
+#undef STM32_PWM_USE_TIM4 //timer 4 channel ?
+#define STM32_PWM_USE_TIM4 TRUE
+
+// Used for backlight
+#undef STM32_GPT_USE_TIM5 //timer 5 channel ?
+#define STM32_GPT_USE_TIM5 TRUE
+
+// Used for FRAM and flash in example code
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
+
+// Used for OLED
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
+
diff --git a/keyboards/custommk/evo70_r2/readme.md b/keyboards/custommk/evo70_r2/readme.md
new file mode 100644
index 00000000000..ac2f638cb26
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/readme.md
@@ -0,0 +1,21 @@
+# EVO70 R2
+
+EVO70 R2 is a 70% keyboard (65% w/left side function cluster) designed and produced by customMK.
+
+
+
+* Keyboard Maintainer: [customMK](https://github.com/customMK)
+* Hardware Supported: EVO70 R2
+* Hardware Availability: [customMK](https://shop.custommk.com/collections/evo70/products/evo70)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make custommk/evo70_r2:default
+
+Flashing example for this keyboard:
+
+ make custommk/evo70_r2:default:flash
+
+To enter the bootloader, run the flashing command above, and then either plug in the USB connection while holding the top-left key, or alternatively, plug in the USB connection and then press the reset button on the PCB located under the space bar.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/custommk/evo70_r2/rules.mk b/keyboards/custommk/evo70_r2/rules.mk
new file mode 100644
index 00000000000..b79d08c6b75
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/rules.mk
@@ -0,0 +1,11 @@
+AUDIO_DRIVER = pwm_hardware
+
+# project specific files
+SRC += matrix.c
+
+EEPROM_DRIVER = spi
+
+QUANTUM_PAINTER_DRIVERS = st7735_spi
+
+CUSTOM_MATRIX = lite
+CIE1931_CURVE = yes
\ No newline at end of file
diff --git a/keyboards/cutie_club/fidelity/config.h b/keyboards/cutie_club/fidelity/config.h
new file mode 100644
index 00000000000..6615bd2ab72
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2023 Cutie Club
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cutie_club/fidelity/info.json b/keyboards/cutie_club/fidelity/info.json
new file mode 100644
index 00000000000..0b06e1e5672
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/info.json
@@ -0,0 +1,102 @@
+{
+ "keyboard_name": "Fidelity",
+ "manufacturer": "HAND x KOEN",
+ "maintainer": "Cutie Club",
+ "url": "",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "command": false,
+ "console": false
+ },
+ "usb": {
+ "vid": "0xFB9C",
+ "pid": "0x4D1B",
+ "device_version": "0.0.1"
+ },
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": [ "A7", "A6", "A5", "A4", "A3", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B2", "B1", "B0" ],
+ "rows": [ "A15", "B3", "B5", "B6", "B7" ]
+ },
+ "indicators": {
+ "caps_lock": "B4"
+ },
+ "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": [0, 14], "x": 14, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2, "w": 1.25 },
+ { "matrix": [1, 14], "x": 14, "y": 2 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75 },
+ { "matrix": [3, 14], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5 },
+ { "matrix": [4, 7], "x": 3.75, "y": 4, "w": 7 },
+ { "matrix": [4, 11], "x": 10.75, "y": 4, "w": 1.5 },
+ { "matrix": [4, 13], "x": 13, "y": 4 },
+ { "matrix": [4, 14], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/cutie_club/fidelity/keymaps/default/keymap.c b/keyboards/cutie_club/fidelity/keymaps/default/keymap.c
new file mode 100644
index 00000000000..1f076a0e7d1
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 Cutie Club
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [1] = 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, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/cutie_club/fidelity/keymaps/via/keymap.c b/keyboards/cutie_club/fidelity/keymaps/via/keymap.c
new file mode 100644
index 00000000000..1f076a0e7d1
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 Cutie Club
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [1] = 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, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/cutie_club/fidelity/keymaps/via/rules.mk b/keyboards/cutie_club/fidelity/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cutie_club/fidelity/readme.md b/keyboards/cutie_club/fidelity/readme.md
new file mode 100644
index 00000000000..9cec49d2cf2
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/readme.md
@@ -0,0 +1,26 @@
+# Fidelity
+
+
+
+The Fidelity is a custom 65% keyboard, a collaboration between HAND Engineering and Koen.
+
+* Keyboard Maintainer: [Cutie Club](https://github.com/cutie-club/)
+* Hardware Supported: STM32F072 based PCB for the Fidelity keyboard
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cutie_club/fidelity:default
+
+Flashing example for this keyboard:
+
+ make cutie_club/fidelity: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 (the top left key) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the front of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cutie_club/fidelity/rules.mk b/keyboards/cutie_club/fidelity/rules.mk
new file mode 100644
index 00000000000..79986c3cede
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/rules.mk
@@ -0,0 +1 @@
+# Intentionally left blank, please see info.json
diff --git a/keyboards/dnworks/frltkl/config.h b/keyboards/dnworks/frltkl/config.h
new file mode 100644
index 00000000000..77970ce4d34
--- /dev/null
+++ b/keyboards/dnworks/frltkl/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2023 zeix (@itsme-zeix)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
diff --git a/keyboards/dnworks/frltkl/info.json b/keyboards/dnworks/frltkl/info.json
new file mode 100644
index 00000000000..dda394649b2
--- /dev/null
+++ b/keyboards/dnworks/frltkl/info.json
@@ -0,0 +1,113 @@
+{
+ "keyboard_name": "DN FRLTKL",
+ "maintainer": "itsme-zeix",
+ "manufacturer": "dnworks",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "vid": "0x4C23",
+ "pid": "0x2935",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "GP27",
+ "on_state": 1
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "rows": ["GP4","GP3","GP2","GP1","GP29","GP28","GP19","GP20","GP10","GP11"],
+ "cols": ["GP26","GP25","GP24","GP23","GP22","GP21","GP6","GP5","GP0"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [1, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 0], "x": 1, "y": 0 },
+ { "matrix": [1, 1], "x": 2, "y": 0 },
+ { "matrix": [0, 1], "x": 3, "y": 0 },
+ { "matrix": [1, 2], "x": 4, "y": 0 },
+ { "matrix": [0, 2], "x": 5, "y": 0 },
+ { "matrix": [1, 3], "x": 6, "y": 0 },
+ { "matrix": [0, 3], "x": 7, "y": 0 },
+ { "matrix": [1, 4], "x": 8, "y": 0 },
+ { "matrix": [0, 4], "x": 9, "y": 0 },
+ { "matrix": [1, 5], "x": 10, "y": 0 },
+ { "matrix": [0, 5], "x": 11, "y": 0 },
+ { "matrix": [1, 6], "x": 12, "y": 0 },
+ { "matrix": [0, 6], "x": 13, "y": 0 },
+ { "matrix": [1, 7], "x": 14, "y": 0 },
+ { "matrix": [0, 7], "x": 15.25, "y": 0 },
+ { "matrix": [1, 8], "x": 16.25, "y": 0 },
+ { "matrix": [0, 8], "x": 17.25, "y": 0 },
+
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [3, 0], "x": 1.5, "y": 1 },
+ { "matrix": [2, 1], "x": 2.5, "y": 1 },
+ { "matrix": [3, 1], "x": 3.5, "y": 1 },
+ { "matrix": [2, 2], "x": 4.5, "y": 1 },
+ { "matrix": [3, 2], "x": 5.5, "y": 1 },
+ { "matrix": [2, 3], "x": 6.5, "y": 1 },
+ { "matrix": [3, 3], "x": 7.5, "y": 1 },
+ { "matrix": [2, 4], "x": 8.5, "y": 1 },
+ { "matrix": [3, 4], "x": 9.5, "y": 1 },
+ { "matrix": [2, 5], "x": 10.5, "y": 1 },
+ { "matrix": [3, 5], "x": 11.5, "y": 1 },
+ { "matrix": [2, 6], "x": 12.5, "y": 1 },
+ { "matrix": [3, 7], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 7], "x": 15.25, "y": 1 },
+ { "matrix": [3, 8], "x": 16.25, "y": 1 },
+ { "matrix": [2, 8], "x": 17.25, "y": 1 },
+
+ { "matrix": [4, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [5, 0], "x": 1.75, "y": 2 },
+ { "matrix": [4, 1], "x": 2.75, "y": 2 },
+ { "matrix": [5, 1], "x": 3.75, "y": 2 },
+ { "matrix": [4, 2], "x": 4.75, "y": 2 },
+ { "matrix": [5, 2], "x": 5.75, "y": 2 },
+ { "matrix": [4, 3], "x": 6.75, "y": 2 },
+ { "matrix": [5, 3], "x": 7.75, "y": 2 },
+ { "matrix": [4, 4], "x": 8.75, "y": 2 },
+ { "matrix": [5, 4], "x": 9.75, "y": 2 },
+ { "matrix": [4, 5], "x": 10.75, "y": 2 },
+ { "matrix": [5, 5], "x": 11.75, "y": 2 },
+ { "matrix": [4, 6], "w": 2.25, "x": 12.75, "y": 2 },
+
+ { "matrix": [6, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [7, 0], "x": 1.25, "y": 3 },
+ { "matrix": [6, 1], "x": 2.25, "y": 3 },
+ { "matrix": [7, 1], "x": 3.25, "y": 3 },
+ { "matrix": [6, 2], "x": 4.25, "y": 3 },
+ { "matrix": [7, 2], "x": 5.25, "y": 3 },
+ { "matrix": [6, 3], "x": 6.25, "y": 3 },
+ { "matrix": [7, 3], "x": 7.25, "y": 3 },
+ { "matrix": [6, 4], "x": 8.25, "y": 3 },
+ { "matrix": [7, 4], "x": 9.25, "y": 3 },
+ { "matrix": [6, 5], "x": 10.25, "y": 3 },
+ { "matrix": [7, 5], "x": 11.25, "y": 3 },
+ { "matrix": [6, 6], "w": 1.75, "x": 12.25, "y": 3 },
+
+ { "matrix": [7, 7], "x": 14, "y": 3 },
+ { "matrix": [6, 8], "x": 16.25, "y": 3 },
+ { "matrix": [8, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [9, 0], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [8, 1], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [9, 3], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [8, 5], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [9, 5], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [8, 6], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [9, 7], "w": 1.25, "x": 13.75, "y": 4 },
+ { "matrix": [8, 7], "x": 15.25, "y": 4 },
+ { "matrix": [9, 8], "x": 16.25, "y": 4 },
+ { "matrix": [8, 8], "x": 17.25, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/dnworks/frltkl/keymaps/default/keymap.c b/keyboards/dnworks/frltkl/keymaps/default/keymap.c
new file mode 100644
index 00000000000..295066696d4
--- /dev/null
+++ b/keyboards/dnworks/frltkl/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/*
+Copyright 2023 zeix (@itsme-zeix)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT(
+ KC_ESC, KC_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_BSLS, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+[1] = LAYOUT(
+ KC_TRNS, 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, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/dnworks/frltkl/keymaps/via/keymap.c b/keyboards/dnworks/frltkl/keymaps/via/keymap.c
new file mode 100644
index 00000000000..295066696d4
--- /dev/null
+++ b/keyboards/dnworks/frltkl/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/*
+Copyright 2023 zeix (@itsme-zeix)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT(
+ KC_ESC, KC_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_BSLS, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+[1] = LAYOUT(
+ KC_TRNS, 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, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/dnworks/frltkl/keymaps/via/rules.mk b/keyboards/dnworks/frltkl/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/dnworks/frltkl/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/dnworks/frltkl/readme.md b/keyboards/dnworks/frltkl/readme.md
new file mode 100644
index 00000000000..cc9946284a7
--- /dev/null
+++ b/keyboards/dnworks/frltkl/readme.md
@@ -0,0 +1,25 @@
+# FRLTKL
+
+PCB that supports FRLTKLs designed by dnworks, such as DNDD and HITC.
+
+* Keyboard Maintainer: [Zeix](https://github.com/itsme-zeix)
+* Hardware Supported: DNDD Solder PCB rev1 & HITC Solder PCB rev1
+* Hardware Availability: [dnworks.co](https://dnworks.co/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dnworks/frltkl:default
+
+Flashing example for this keyboard:
+
+ make dnworks/frltkl: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 `RESET` button twice or short the `USB_BOOT` and `GND` pads 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/dnworks/frltkl/rules.mk b/keyboards/dnworks/frltkl/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/dnworks/frltkl/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/dp3000/config.h b/keyboards/dp3000/config.h
new file mode 100644
index 00000000000..26e9f037f58
--- /dev/null
+++ b/keyboards/dp3000/config.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2023 deddia permana (@depermana12)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define RGB_MATRIX_LED_COUNT 8
+#define RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
diff --git a/keyboards/dp3000/dp3000.c b/keyboards/dp3000/dp3000.c
new file mode 100644
index 00000000000..3d99670fe36
--- /dev/null
+++ b/keyboards/dp3000/dp3000.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 deddia permana (@depermana12)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "quantum.h"
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ oled_write_P(PSTR("LAYER: "), false);
+ oled_write_char('0' + get_highest_layer(layer_state), false);
+
+ led_t led_state = host_keyboard_led_state();
+ oled_set_cursor(0, 1);
+ oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
+ oled_set_cursor(0, 2);
+ oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
+ oled_set_cursor(0, 3);
+ oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
+
+ return false;
+}
diff --git a/keyboards/dp3000/info.json b/keyboards/dp3000/info.json
new file mode 100644
index 00000000000..c7348c81a89
--- /dev/null
+++ b/keyboards/dp3000/info.json
@@ -0,0 +1,98 @@
+{
+ "manufacturer": "depermana12",
+ "keyboard_name": "dp3000",
+ "maintainer": "depermana12",
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "encoder": true,
+ "rgb_matrix": true,
+ "oled": true,
+ "mousekey": false,
+ "nkro": false
+ },
+ "build": {
+ "lto": true
+ },
+ "url": "https://github.com/depermana12",
+ "usb": {
+ "device_version": "1.0.1",
+ "vid": "0x4450",
+ "pid": "0x6470"
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "B2", "pin_b": "B1"},
+ { "pin_a": "F4", "pin_b": "F5"}
+ ]
+ },
+ "ws2812": {
+ "pin": "B5"
+ },
+ "rgb_matrix":{
+ "driver":"WS2812",
+ "max_brightness": 180,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron":true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "typing_heatmap": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true
+ },
+ "layout":[
+ { "matrix": [1, 0], "x": 0, "y": 32, "flags":4 },
+ { "matrix": [1, 1], "x": 25, "y": 32, "flags":4 },
+ { "matrix": [1, 2], "x": 37, "y": 32, "flags":4 },
+ { "matrix": [1, 3], "x": 75, "y": 32, "flags":4 },
+ { "matrix": [2, 0], "x": 75, "y": 16, "flags":4 },
+ { "matrix": [2, 1], "x": 37, "y": 16, "flags":4 },
+ { "matrix": [2, 2], "x": 25, "y": 16, "flags":4 },
+ { "matrix": [2, 3], "x": 0, "y": 16, "flags":4 }
+ ]
+ },
+ "matrix_pins": {
+ "cols": ["D4", "D7", "B4", "C6"],
+ "rows": ["F6", "F7", "B3"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [1, 3], "x": 3, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [2, 3], "x": 3, "y": 2 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/dp3000/keymaps/default/keymap.c b/keyboards/dp3000/keymaps/default/keymap.c
new file mode 100644
index 00000000000..6d3561edbc5
--- /dev/null
+++ b/keyboards/dp3000/keymaps/default/keymap.c
@@ -0,0 +1,58 @@
+/*
+Copyright 2023 deddia permana (@depermana12)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌─────────┐ ┌─────────┐
+ * │ mute │ │ MO(1) │
+ * ├─────────┼─────────┬─────────┼─────────┤
+ * │ 1 │ 2 │ 3 │ 4 │
+ * ├─────────┼─────────┼─────────┼─────────┤
+ * │ 5 │ 6 │ 7 │ 8 │
+ * └─────────┴─────────┴─────────┴─────────┘
+ */
+ [0] = LAYOUT(
+ KC_MUTE, MO(1),
+ KC_1, KC_2, KC_3, KC_4,
+ KC_5, KC_6, KC_7, KC_8
+ ),
+ [1] = LAYOUT(
+ QK_BOOT, _______,
+ KC_1, KC_2, KC_3, KC_4,
+ TO(0), TO(2), TO(3), RGB_TOG
+ ),
+ [2] = LAYOUT(
+ _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ ),
+ [3] = LAYOUT(
+ _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ )
+ };
+#if defined (ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_HUD, RGB_HUI) },
+ [1] = { ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
+ [2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
+ [3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT)},
+};
+#endif
diff --git a/keyboards/dp3000/keymaps/default/rules.mk b/keyboards/dp3000/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/dp3000/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/dp3000/keymaps/via/keymap.c b/keyboards/dp3000/keymaps/via/keymap.c
new file mode 100644
index 00000000000..6d3561edbc5
--- /dev/null
+++ b/keyboards/dp3000/keymaps/via/keymap.c
@@ -0,0 +1,58 @@
+/*
+Copyright 2023 deddia permana (@depermana12)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌─────────┐ ┌─────────┐
+ * │ mute │ │ MO(1) │
+ * ├─────────┼─────────┬─────────┼─────────┤
+ * │ 1 │ 2 │ 3 │ 4 │
+ * ├─────────┼─────────┼─────────┼─────────┤
+ * │ 5 │ 6 │ 7 │ 8 │
+ * └─────────┴─────────┴─────────┴─────────┘
+ */
+ [0] = LAYOUT(
+ KC_MUTE, MO(1),
+ KC_1, KC_2, KC_3, KC_4,
+ KC_5, KC_6, KC_7, KC_8
+ ),
+ [1] = LAYOUT(
+ QK_BOOT, _______,
+ KC_1, KC_2, KC_3, KC_4,
+ TO(0), TO(2), TO(3), RGB_TOG
+ ),
+ [2] = LAYOUT(
+ _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ ),
+ [3] = LAYOUT(
+ _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ )
+ };
+#if defined (ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_HUD, RGB_HUI) },
+ [1] = { ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
+ [2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
+ [3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT)},
+};
+#endif
diff --git a/keyboards/dp3000/keymaps/via/rules.mk b/keyboards/dp3000/keymaps/via/rules.mk
new file mode 100644
index 00000000000..f1adcab005e
--- /dev/null
+++ b/keyboards/dp3000/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/dp3000/readme.md b/keyboards/dp3000/readme.md
new file mode 100644
index 00000000000..3844a66757d
--- /dev/null
+++ b/keyboards/dp3000/readme.md
@@ -0,0 +1,27 @@
+# DP3000
+
+
+
+dp3000 is a simple yet elegant macropad, 2x4 (8 keys), dual encoder, embedded with an Atmel 32u4 chip, powered by QMK.
+
+* Keyboard Maintainer: [Deddia Permana](https://github.com/depermana12)
+* Hardware Supported: DP3000 PCB, ATmega32u4
+* Hardware Availability: [tokopedia.com/gundamtricks](https://www.tokopedia.com/gundamtricks)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dp3000:default
+
+Flashing example for this keyboard:
+
+ make dp3000: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 reset button twice, located in front of the first rotary encoder (left rotary encoder)
+* Keycode in layout: Press the key mapped to QK_BOOT if it is available
diff --git a/keyboards/dp3000/rules.mk b/keyboards/dp3000/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/dp3000/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/drewkeys/mercury65/info.json b/keyboards/drewkeys/mercury65/info.json
new file mode 100644
index 00000000000..93f7b2ec3bc
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/info.json
@@ -0,0 +1,99 @@
+{
+ "keyboard_name": "mercury65",
+ "maintainer": "Drewkeys",
+ "manufacturer": "RocketKeyboards",
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "url": "https://www.rocketkeyboards.com/collections/mercury65/products/gb-mercury65-keyboard",
+ "usb": {
+ "vid": "0xDE43",
+ "pid": "0x1034",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B0", "B1", "B2", "B3", "B7", "D1", "D2", "D3", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5"],
+ "rows": ["D5", "D4", "D6", "D0", "E6"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "label":"`", "x":0, "y":0},
+ {"matrix": [0, 1], "label":"!", "x":1, "y":0},
+ {"matrix": [0, 2], "label":"@", "x":2, "y":0},
+ {"matrix": [0, 3], "label":"#", "x":3, "y":0},
+ {"matrix": [0, 4], "label":"$", "x":4, "y":0},
+ {"matrix": [0, 5], "label":"%", "x":5, "y":0},
+ {"matrix": [0, 6], "label":"^", "x":6, "y":0},
+ {"matrix": [0, 7], "label":"&", "x":7, "y":0},
+ {"matrix": [0, 8], "label":"*", "x":8, "y":0},
+ {"matrix": [0, 9], "label":"(", "x":9, "y":0},
+ {"matrix": [0, 10], "label":")", "x":10, "y":0},
+ {"matrix": [0, 11], "label":"_", "x":11, "y":0},
+ {"matrix": [0, 12], "label":"+", "x":12, "y":0},
+ {"matrix": [0, 13], "label":"Del", "x":13, "y":0},
+ {"matrix": [0, 14], "label":"Bsp", "x":14, "y":0},
+ {"matrix": [1, 0], "label":"Tab", "x":0, "y":1, "w":1.5},
+ {"matrix": [1, 2], "label":"Q", "x":1.5, "y":1},
+ {"matrix": [1, 3], "label":"W", "x":2.5, "y":1},
+ {"matrix": [1, 4], "label":"E", "x":3.5, "y":1},
+ {"matrix": [1, 5], "label":"R", "x":4.5, "y":1},
+ {"matrix": [1, 6], "label":"T", "x":5.5, "y":1},
+ {"matrix": [1, 7], "label":"Y", "x":6.5, "y":1},
+ {"matrix": [1, 8], "label":"U", "x":7.5, "y":1},
+ {"matrix": [1, 9], "label":"I", "x":8.5, "y":1},
+ {"matrix": [1, 10], "label":"O", "x":9.5, "y":1},
+ {"matrix": [1, 11], "label":"P", "x":10.5, "y":1},
+ {"matrix": [1, 12], "label":"{", "x":11.5, "y":1},
+ {"matrix": [1, 13], "label":"}", "x":12.5, "y":1},
+ {"matrix": [1, 14], "label":"|", "x":13.5, "y":1, "w":1.5},
+ {"matrix": [1, 16], "label":"PgUp", "x":15.5, "y":1},
+ {"matrix": [2, 0], "label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"matrix": [2, 2], "label":"A", "x":1.75, "y":2},
+ {"matrix": [2, 3], "label":"S", "x":2.75, "y":2},
+ {"matrix": [2, 4], "label":"D", "x":3.75, "y":2},
+ {"matrix": [2, 5], "label":"F", "x":4.75, "y":2},
+ {"matrix": [2, 6], "label":"G", "x":5.75, "y":2},
+ {"matrix": [2, 7], "label":"H", "x":6.75, "y":2},
+ {"matrix": [2, 8], "label":"J", "x":7.75, "y":2},
+ {"matrix": [2, 9], "label":"K", "x":8.75, "y":2},
+ {"matrix": [2, 10], "label":"L", "x":9.75, "y":2},
+ {"matrix": [2, 11], "label":":", "x":10.75, "y":2},
+ {"matrix": [2, 12], "label":"@", "x":11.75, "y":2},
+ {"matrix": [2, 13], "label":"ISO", "x":12.75, "y":2},
+ {"matrix": [2, 14], "label":"Enter", "x":13.75, "y":2, "w":1.25},
+ {"matrix": [2, 16], "label":"Home", "x":15.5, "y":2},
+ {"matrix": [3, 0], "label":"Shift", "x":0, "y":3, "w":1.25},
+ {"matrix": [3, 1], "label":"\\", "x":1.25, "y":3},
+ {"matrix": [3, 2], "label":"Z", "x":2.25, "y":3},
+ {"matrix": [3, 3], "label":"X", "x":3.25, "y":3},
+ {"matrix": [3, 4], "label":"C", "x":4.25, "y":3},
+ {"matrix": [3, 5], "label":"V", "x":5.25, "y":3},
+ {"matrix": [3, 6], "label":"B", "x":6.25, "y":3},
+ {"matrix": [3, 7], "label":"N", "x":7.25, "y":3},
+ {"matrix": [3, 8], "label":"M", "x":8.25, "y":3},
+ {"matrix": [3, 9], "label":"<", "x":9.25, "y":3},
+ {"matrix": [3, 10], "label":">", "x":10.25, "y":3},
+ {"matrix": [3, 11], "label":"?", "x":11.25, "y":3},
+ {"matrix": [3, 13], "label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"matrix": [3, 14], "label":"End", "x":15.5, "y":3},
+ {"matrix": [3, 16], "label":"\u2191", "x":14.25, "y":3.25},
+ {"matrix": [4, 0], "label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"matrix": [4, 1], "label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"matrix": [4, 2], "label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"matrix": [4, 6], "x":3.75, "y":4, "w":6.25},
+ {"matrix": [4, 10], "label":"AltGr", "x":10, "y":4, "w":1.25},
+ {"matrix": [4, 11], "label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"matrix": [4, 13], "label":"\u2190", "x":13.25, "y":4.25},
+ {"matrix": [4, 14], "label":"\u2193", "x":14.25, "y":4.25},
+ {"matrix": [4, 15], "label":"\u2192", "x":15.25, "y":4.25}]
+ }
+ }
+
+}
diff --git a/keyboards/drewkeys/mercury65/keymaps/default/keymap.c b/keyboards/drewkeys/mercury65/keymaps/default/keymap.c
new file mode 100644
index 00000000000..2f9cc945c9d
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2023 Drewkeys
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base https://i.imgur.com/viQdtbB.png */
+ [_BASE] = LAYOUT(
+ 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_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FN] = LAYOUT(
+ 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_BSLS, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/drewkeys/mercury65/keymaps/via/keymap.c b/keyboards/drewkeys/mercury65/keymaps/via/keymap.c
new file mode 100644
index 00000000000..2af6a064f29
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/keymaps/via/keymap.c
@@ -0,0 +1,44 @@
+/* Copyright 2023 Drewkeys
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base https://i.imgur.com/viQdtbB.png */
+ [_BASE] = LAYOUT(
+ 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_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FN1] = LAYOUT(
+ 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_BSLS, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/drewkeys/mercury65/keymaps/via/rules.mk b/keyboards/drewkeys/mercury65/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/drewkeys/mercury65/readme.md b/keyboards/drewkeys/mercury65/readme.md
new file mode 100644
index 00000000000..be8f4c17843
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/readme.md
@@ -0,0 +1,23 @@
+# Mercury65
+
+
+
+*65% Form Factor with a Separated Arrow Cluster used for Mercury65*
+
+
+* Keyboard Maintainer: [Drewkeys](https://github.com/drewpyun)
+* Hardware Supported: Made specifically for Mercury65, 65% hotswap supported
+* Hardware Availability: https://www.rocketkeyboards.com/collections/mercury65/products/gb-mercury65-keyboard
+
+Make example for this keyboard (after setting up your build environment):
+
+ make drewkeys/mercury65:default
+
+Flashing example for this keyboard:
+
+ make drewkeys/mercury65:default:flash
+## Bootloader
+
+Resetting Board: Press the button on the PCB next to the spacebar to soft reset the board to reflash (bootloader mode).
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/drewkeys/mercury65/rules.mk b/keyboards/drewkeys/mercury65/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/dtisaac/dtisaac01/info.json b/keyboards/dtisaac/dtisaac01/info.json
index 68f7221d31e..3d16da6d222 100644
--- a/keyboards/dtisaac/dtisaac01/info.json
+++ b/keyboards/dtisaac/dtisaac01/info.json
@@ -24,8 +24,15 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_tkl_ansi"
+ },
+ "community_layouts": [
+ "tkl_ansi",
+ "tkl_ansi_tsangan"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -48,85 +55,394 @@
{"matrix": [6, 5], "x": 16.25, "y": 0},
{"matrix": [6, 6], "x": 17.25, "y": 0},
- {"matrix": [1, 0], "x": 0, "y": 1.5},
- {"matrix": [1, 1], "x": 1, "y": 1.5},
- {"matrix": [1, 2], "x": 2, "y": 1.5},
- {"matrix": [1, 3], "x": 3, "y": 1.5},
- {"matrix": [1, 4], "x": 4, "y": 1.5},
- {"matrix": [1, 5], "x": 5, "y": 1.5},
- {"matrix": [1, 6], "x": 6, "y": 1.5},
- {"matrix": [1, 7], "x": 7, "y": 1.5},
- {"matrix": [1, 8], "x": 8, "y": 1.5},
- {"matrix": [6, 8], "x": 9, "y": 1.5},
- {"matrix": [6, 0], "x": 10, "y": 1.5},
- {"matrix": [7, 1], "x": 11, "y": 1.5},
- {"matrix": [7, 2], "x": 12, "y": 1.5},
- {"matrix": [7, 3], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [6, 8], "x": 9, "y": 1.25},
+ {"matrix": [6, 0], "x": 10, "y": 1.25},
+ {"matrix": [7, 1], "x": 11, "y": 1.25},
+ {"matrix": [7, 2], "x": 12, "y": 1.25},
+ {"matrix": [7, 3], "x": 13, "y": 1.25, "w": 2},
- {"matrix": [7, 4], "x": 15.25, "y": 1.5},
- {"matrix": [7, 5], "x": 16.25, "y": 1.5},
- {"matrix": [7, 6], "x": 17.25, "y": 1.5},
+ {"matrix": [7, 4], "x": 15.25, "y": 1.25},
+ {"matrix": [7, 5], "x": 16.25, "y": 1.25},
+ {"matrix": [7, 6], "x": 17.25, "y": 1.25},
- {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
- {"matrix": [2, 1], "x": 1.5, "y": 2.5},
- {"matrix": [2, 2], "x": 2.5, "y": 2.5},
- {"matrix": [2, 3], "x": 3.5, "y": 2.5},
- {"matrix": [2, 4], "x": 4.5, "y": 2.5},
- {"matrix": [2, 5], "x": 5.5, "y": 2.5},
- {"matrix": [2, 6], "x": 6.5, "y": 2.5},
- {"matrix": [2, 7], "x": 7.5, "y": 2.5},
- {"matrix": [2, 8], "x": 8.5, "y": 2.5},
- {"matrix": [7, 8], "x": 9.5, "y": 2.5},
- {"matrix": [7, 0], "x": 10.5, "y": 2.5},
- {"matrix": [8, 1], "x": 11.5, "y": 2.5},
- {"matrix": [8, 2], "x": 12.5, "y": 2.5},
- {"matrix": [8, 3], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 8], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 0], "x": 10.5, "y": 2.25},
+ {"matrix": [8, 1], "x": 11.5, "y": 2.25},
+ {"matrix": [8, 2], "x": 12.5, "y": 2.25},
+ {"matrix": [8, 3], "x": 13.5, "y": 2.25, "w": 1.5},
- {"matrix": [8, 4], "x": 15.25, "y": 2.5},
- {"matrix": [8, 5], "x": 16.25, "y": 2.5},
- {"matrix": [8, 6], "x": 17.25, "y": 2.5},
+ {"matrix": [8, 4], "x": 15.25, "y": 2.25},
+ {"matrix": [8, 5], "x": 16.25, "y": 2.25},
+ {"matrix": [8, 6], "x": 17.25, "y": 2.25},
- {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
- {"matrix": [3, 1], "x": 1.75, "y": 3.5},
- {"matrix": [3, 2], "x": 2.75, "y": 3.5},
- {"matrix": [3, 3], "x": 3.75, "y": 3.5},
- {"matrix": [3, 4], "x": 4.75, "y": 3.5},
- {"matrix": [3, 5], "x": 5.75, "y": 3.5},
- {"matrix": [3, 6], "x": 6.75, "y": 3.5},
- {"matrix": [3, 7], "x": 7.75, "y": 3.5},
- {"matrix": [3, 8], "x": 8.75, "y": 3.5},
- {"matrix": [8, 8], "x": 9.75, "y": 3.5},
- {"matrix": [8, 0], "x": 10.75, "y": 3.5},
- {"matrix": [9, 1], "x": 11.75, "y": 3.5},
- {"matrix": [9, 3], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 8], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 0], "x": 10.75, "y": 3.25},
+ {"matrix": [9, 1], "x": 11.75, "y": 3.25},
+ {"matrix": [9, 3], "x": 12.75, "y": 3.25, "w": 2.25},
- {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
- {"matrix": [4, 2], "x": 2.25, "y": 4.5},
- {"matrix": [4, 3], "x": 3.25, "y": 4.5},
- {"matrix": [4, 4], "x": 4.25, "y": 4.5},
- {"matrix": [4, 5], "x": 5.25, "y": 4.5},
- {"matrix": [4, 6], "x": 6.25, "y": 4.5},
- {"matrix": [4, 7], "x": 7.25, "y": 4.5},
- {"matrix": [4, 8], "x": 8.25, "y": 4.5},
- {"matrix": [9, 8], "x": 9.25, "y": 4.5},
- {"matrix": [9, 0], "x": 10.25, "y": 4.5},
- {"matrix": [10, 1], "x": 11.25, "y": 4.5},
- {"matrix": [10, 3], "x": 12.25, "y": 4.5, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 0], "x": 10.25, "y": 4.25},
+ {"matrix": [10, 1], "x": 11.25, "y": 4.25},
+ {"matrix": [10, 3], "x": 12.25, "y": 4.25, "w": 2.75},
- {"matrix": [10, 5], "x": 16.25, "y": 4.5},
+ {"matrix": [10, 5], "x": 16.25, "y": 4.25},
- {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
- {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
- {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
- {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
- {"matrix": [10, 0], "x": 10, "y": 5.5, "w": 1.25},
- {"matrix": [11, 1], "x": 11.25, "y": 5.5, "w": 1.25},
- {"matrix": [11, 2], "x": 12.5, "y": 5.5, "w": 1.25},
- {"matrix": [11, 3], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 0], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 1], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 2], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 3], "x": 13.75, "y": 5.25, "w": 1.25},
- {"matrix": [11, 4], "x": 15.25, "y": 5.5},
- {"matrix": [11, 5], "x": 16.25, "y": 5.5},
- {"matrix": [11, 6], "x": 17.25, "y": 5.5}
+ {"matrix": [11, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 5], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 6], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+
+ {"matrix": [5, 8], "x": 11, "y": 0},
+ {"matrix": [6, 1], "x": 12, "y": 0},
+ {"matrix": [6, 2], "x": 13, "y": 0},
+ {"matrix": [6, 3], "x": 14, "y": 0},
+
+ {"matrix": [6, 4], "x": 15.25, "y": 0},
+ {"matrix": [6, 5], "x": 16.25, "y": 0},
+ {"matrix": [6, 6], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [6, 8], "x": 9, "y": 1.25},
+ {"matrix": [6, 0], "x": 10, "y": 1.25},
+ {"matrix": [7, 1], "x": 11, "y": 1.25},
+ {"matrix": [7, 2], "x": 12, "y": 1.25},
+ {"matrix": [7, 3], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [7, 4], "x": 15.25, "y": 1.25},
+ {"matrix": [7, 5], "x": 16.25, "y": 1.25},
+ {"matrix": [7, 6], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 8], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 0], "x": 10.5, "y": 2.25},
+ {"matrix": [8, 1], "x": 11.5, "y": 2.25},
+ {"matrix": [8, 2], "x": 12.5, "y": 2.25},
+ {"matrix": [8, 3], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [8, 4], "x": 15.25, "y": 2.25},
+ {"matrix": [8, 5], "x": 16.25, "y": 2.25},
+ {"matrix": [8, 6], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 8], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 0], "x": 10.75, "y": 3.25},
+ {"matrix": [9, 1], "x": 11.75, "y": 3.25},
+ {"matrix": [9, 3], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 0], "x": 10.25, "y": 4.25},
+ {"matrix": [10, 1], "x": 11.25, "y": 4.25},
+ {"matrix": [10, 3], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [10, 5], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 0], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 1], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 2], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 3], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"matrix": [11, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 5], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 6], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+
+ {"matrix": [5, 8], "x": 11, "y": 0},
+ {"matrix": [6, 1], "x": 12, "y": 0},
+ {"matrix": [6, 2], "x": 13, "y": 0},
+ {"matrix": [6, 3], "x": 14, "y": 0},
+
+ {"matrix": [6, 4], "x": 15.25, "y": 0},
+ {"matrix": [6, 5], "x": 16.25, "y": 0},
+ {"matrix": [6, 6], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [6, 8], "x": 9, "y": 1.25},
+ {"matrix": [6, 0], "x": 10, "y": 1.25},
+ {"matrix": [7, 1], "x": 11, "y": 1.25},
+ {"matrix": [7, 2], "x": 12, "y": 1.25},
+ {"matrix": [7, 3], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [7, 4], "x": 15.25, "y": 1.25},
+ {"matrix": [7, 5], "x": 16.25, "y": 1.25},
+ {"matrix": [7, 6], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 8], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 0], "x": 10.5, "y": 2.25},
+ {"matrix": [8, 1], "x": 11.5, "y": 2.25},
+ {"matrix": [8, 2], "x": 12.5, "y": 2.25},
+ {"matrix": [8, 3], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [8, 4], "x": 15.25, "y": 2.25},
+ {"matrix": [8, 5], "x": 16.25, "y": 2.25},
+ {"matrix": [8, 6], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 8], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 0], "x": 10.75, "y": 3.25},
+ {"matrix": [9, 1], "x": 11.75, "y": 3.25},
+ {"matrix": [9, 3], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 0], "x": 10.25, "y": 4.25},
+ {"matrix": [10, 1], "x": 11.25, "y": 4.25},
+ {"matrix": [10, 3], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [10, 5], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [11, 1], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 2], "x": 12.5, "y": 5.25},
+ {"matrix": [11, 3], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [11, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 5], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 6], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+
+ {"matrix": [5, 8], "x": 11, "y": 0},
+ {"matrix": [6, 1], "x": 12, "y": 0},
+ {"matrix": [6, 2], "x": 13, "y": 0},
+ {"matrix": [6, 3], "x": 14, "y": 0},
+
+ {"matrix": [6, 4], "x": 15.25, "y": 0},
+ {"matrix": [6, 5], "x": 16.25, "y": 0},
+ {"matrix": [6, 6], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [6, 8], "x": 9, "y": 1.25},
+ {"matrix": [6, 0], "x": 10, "y": 1.25},
+ {"matrix": [7, 1], "x": 11, "y": 1.25},
+ {"matrix": [7, 2], "x": 12, "y": 1.25},
+ {"matrix": [7, 3], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [7, 4], "x": 15.25, "y": 1.25},
+ {"matrix": [7, 5], "x": 16.25, "y": 1.25},
+ {"matrix": [7, 6], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 8], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 0], "x": 10.5, "y": 2.25},
+ {"matrix": [8, 1], "x": 11.5, "y": 2.25},
+ {"matrix": [8, 2], "x": 12.5, "y": 2.25},
+ {"matrix": [8, 3], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [8, 4], "x": 15.25, "y": 2.25},
+ {"matrix": [8, 5], "x": 16.25, "y": 2.25},
+ {"matrix": [8, 6], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 8], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 0], "x": 10.75, "y": 3.25},
+ {"matrix": [9, 1], "x": 11.75, "y": 3.25},
+ {"matrix": [9, 3], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 0], "x": 10.25, "y": 4.25},
+ {"matrix": [10, 1], "x": 11.25, "y": 4.25},
+ {"matrix": [10, 3], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [10, 5], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [11, 1], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 3], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [11, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 5], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 6], "x": 17.25, "y": 5.25}
]
}
}
diff --git a/keyboards/dtisaac/dtisaac01/keymaps/default/keymap.c b/keyboards/dtisaac/dtisaac01/keymaps/default/keymap.c
index 52cf6ef97cf..3e87ebb2b35 100644
--- a/keyboards/dtisaac/dtisaac01/keymaps/default/keymap.c
+++ b/keyboards/dtisaac/dtisaac01/keymaps/default/keymap.c
@@ -22,26 +22,20 @@ enum layer_names {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_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_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(1, KC_NO), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ [_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(1,KC_NO), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [_FN] = LAYOUT(
- QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_FN] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
-};
\ No newline at end of file
+};
diff --git a/keyboards/dtisaac/dtisaac01/keymaps/via/keymap.c b/keyboards/dtisaac/dtisaac01/keymaps/via/keymap.c
index b976dd03ad4..e22205e0bd0 100644
--- a/keyboards/dtisaac/dtisaac01/keymaps/via/keymap.c
+++ b/keyboards/dtisaac/dtisaac01/keymaps/via/keymap.c
@@ -19,41 +19,41 @@
enum layers {
_LAYER0,
_LAYER1,
- _LAYER2,
- _LAYER3,
+ _LAYER2,
+ _LAYER3,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = 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_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(1, KC_NO), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ [_LAYER0] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(1,KC_NO), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [_LAYER1] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLEP, KC_WAKE, KC_PWR,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, BL_ON, BL_UP,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_BRTG, BL_OFF, BL_DOWN,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ [_LAYER1] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLEP, KC_WAKE, KC_PWR,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, BL_ON, BL_UP,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_BRTG, BL_OFF, BL_DOWN,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
),
- [_LAYER2] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ [_LAYER2] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
- [_LAYER3] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ [_LAYER3] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-};
\ No newline at end of file
+};
diff --git a/keyboards/dtisaac/dtisaac01/keymaps/via/readme.md b/keyboards/dtisaac/dtisaac01/keymaps/via/readme.md
index 0407ae2339f..aa2ec3fa225 100644
--- a/keyboards/dtisaac/dtisaac01/keymaps/via/readme.md
+++ b/keyboards/dtisaac/dtisaac01/keymaps/via/readme.md
@@ -1 +1 @@
-# The default keymap for dtisaac01
+# The via keymap for dtisaac01
diff --git a/keyboards/dtisaac/dtisaac01/matrix_diagram.md b/keyboards/dtisaac/dtisaac01/matrix_diagram.md
new file mode 100644
index 00000000000..e1034cb589b
--- /dev/null
+++ b/keyboards/dtisaac/dtisaac01/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for DTIsaac dtisaac01
+
+```
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
+│00 │ │01 │02 │03 │04 │ │05 │06 │07 │08 │ │58 │61 │62 │63 ││64 │65 │66 │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │68 │60 │71 │72 │73 ││74 │75 │76 │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │78 │70 │81 │82 │83 ││84 │85 │86 │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │88 │80 │91 │93 │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │98 │90 │A1 │A3 │ │A5 │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
+│50 │51 │52 │56 │A0 │B1 │B2 │B3 ││B4 │B5 │B6 │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌────────┐
+│40 │ 2.25u LShift
+└────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│50 │51 │52 │56 │B1 │B2 │B3 │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/feker/ik75/keymaps/bkzshen/keymap.c b/keyboards/feker/ik75/keymaps/bkzshen/keymap.c
index f59617ddced..53d8145b7ac 100644
--- a/keyboards/feker/ik75/keymaps/bkzshen/keymap.c
+++ b/keyboards/feker/ik75/keymaps/bkzshen/keymap.c
@@ -195,8 +195,8 @@ bool rgb_matrix_indicators_user(void) {
rgb_matrix_set_color(104, 0, 0, 0);
uint8_t red = host_keyboard_led_state().caps_lock ? 255 : 0;
- uint8_t green = host_keyboard_led_state().scroll_lock ? 255 : 0;
- uint8_t blue = keymap_config.no_gui ? 255 : 0;
+ uint8_t blue = host_keyboard_led_state().scroll_lock ? 255 : 0;
+ uint8_t green = keymap_config.no_gui ? 255 : 0;
if ((rgb_matrix_get_flags() & LED_FLAG_KEYLIGHT)) {
diff --git a/keyboards/feker/ik75/keymaps/default/keymap.c b/keyboards/feker/ik75/keymaps/default/keymap.c
index fe4676b7f79..f6ca00552ec 100644
--- a/keyboards/feker/ik75/keymaps/default/keymap.c
+++ b/keyboards/feker/ik75/keymaps/default/keymap.c
@@ -139,8 +139,8 @@ bool rgb_matrix_indicators_user(void) {
rgb_matrix_set_color(104, 0, 0, 0);
uint8_t red = host_keyboard_led_state().caps_lock ? 255 : 0;
- uint8_t green = host_keyboard_led_state().scroll_lock ? 255 : 0;
- uint8_t blue = keymap_config.no_gui ? 255 : 0;
+ uint8_t blue = host_keyboard_led_state().scroll_lock ? 255 : 0;
+ uint8_t green = keymap_config.no_gui ? 255 : 0;
if ((rgb_matrix_get_flags() & LED_FLAG_KEYLIGHT)) {
diff --git a/keyboards/feker/ik75/keymaps/via/keymap.c b/keyboards/feker/ik75/keymaps/via/keymap.c
index da87725d190..e9a221cb3f9 100644
--- a/keyboards/feker/ik75/keymaps/via/keymap.c
+++ b/keyboards/feker/ik75/keymaps/via/keymap.c
@@ -195,8 +195,8 @@ bool rgb_matrix_indicators_user(void) {
rgb_matrix_set_color(104, 0, 0, 0);
uint8_t red = host_keyboard_led_state().caps_lock ? 255 : 0;
- uint8_t green = host_keyboard_led_state().scroll_lock ? 255 : 0;
- uint8_t blue = keymap_config.no_gui ? 255 : 0;
+ uint8_t blue = host_keyboard_led_state().scroll_lock ? 255 : 0;
+ uint8_t green = keymap_config.no_gui ? 255 : 0;
if ((rgb_matrix_get_flags() & LED_FLAG_KEYLIGHT)) {
diff --git a/keyboards/gmmk/gmmk2/p65/ansi/info.json b/keyboards/gmmk/gmmk2/p65/ansi/info.json
index c22fe89f589..fbf5d78b554 100644
--- a/keyboards/gmmk/gmmk2/p65/ansi/info.json
+++ b/keyboards/gmmk/gmmk2/p65/ansi/info.json
@@ -21,8 +21,12 @@
},
"processor": "WB32F3G71",
"bootloader": "wb32-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_65_ansi_blocker"
+ },
+ "community_layouts": ["65_ansi_blocker"],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_65_ansi_blocker": {
"layout": [
{"matrix": [1, 3], "x": 0, "y": 0},
{"matrix": [1, 7], "x": 1, "y": 0},
@@ -37,8 +41,8 @@
{"matrix": [8, 7], "x": 10, "y": 0},
{"matrix": [8, 6], "x": 11, "y": 0},
{"matrix": [6, 6], "x": 12, "y": 0},
- {"matrix": [7, 1], "x": 13, "y": 0, "w": 2.25},
- {"matrix": [2, 5], "x": 15.25, "y": 0},
+ {"matrix": [7, 1], "x": 13, "y": 0, "w": 2},
+ {"matrix": [2, 5], "x": 15, "y": 0},
{"matrix": [1, 1], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 0], "x": 1.5, "y": 1},
@@ -53,8 +57,8 @@
{"matrix": [8, 0], "x": 10.5, "y": 1},
{"matrix": [8, 1], "x": 11.5, "y": 1},
{"matrix": [6, 1], "x": 12.5, "y": 1},
- {"matrix": [7, 6], "x": 13.5, "y": 1, "w": 1.75},
- {"matrix": [2, 6], "x": 15.25, "y": 1},
+ {"matrix": [7, 6], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 6], "x": 15, "y": 1},
{"matrix": [2, 1], "x": 0, "y": 2, "w": 1.75},
{"matrix": [1, 2], "x": 1.75, "y": 2},
@@ -69,7 +73,7 @@
{"matrix": [8, 2], "x": 10.75, "y": 2},
{"matrix": [8, 3], "x": 11.75, "y": 2},
{"matrix": [8, 4], "x": 12.75, "y": 2, "w": 2.25},
- {"matrix": [6, 5], "x": 15.25, "y": 2},
+ {"matrix": [6, 5], "x": 15, "y": 2},
{"matrix": [0, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [1, 4], "x": 2.25, "y": 3},
@@ -83,8 +87,8 @@
{"matrix": [7, 4], "x": 10.25, "y": 3},
{"matrix": [8, 5], "x": 11.25, "y": 3},
{"matrix": [0, 7], "x": 12.25, "y": 3, "w": 1.75},
- {"matrix": [3, 5], "x": 14.25, "y": 3},
- {"matrix": [0, 1], "x": 15.25, "y": 3},
+ {"matrix": [3, 5], "x": 14, "y": 3},
+ {"matrix": [0, 1], "x": 15, "y": 3},
{"matrix": [0, 6], "x": 0, "y": 4, "w": 1.25},
{"matrix": [1, 5], "x": 1.25, "y": 4, "w": 1.25},
@@ -93,9 +97,9 @@
{"matrix": [3, 6], "x": 10, "y": 4, "w": 1.25},
{"matrix": [3, 3], "x": 11.25, "y": 4, "w": 1.25},
- {"matrix": [0, 3], "x": 13.25, "y": 4},
- {"matrix": [7, 3], "x": 14.25, "y": 4},
- {"matrix": [0, 5], "x": 15.25, "y": 4}
+ {"matrix": [0, 3], "x": 13, "y": 4},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [0, 5], "x": 15, "y": 4}
]
}
}
diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/default/keymap.c b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/default/keymap.c
index 471bc69b8ec..42affd3de62 100644
--- a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/default/keymap.c
+++ b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/default/keymap.c
@@ -26,7 +26,7 @@ enum custom_layers {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: Base Layer (Default Layer)
*/
-[_BL] = LAYOUT(
+[_BL] = LAYOUT_65_ansi_blocker(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
@@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _FL: Function Layer
*/
-[_FL] = LAYOUT(
+[_FL] = LAYOUT_65_ansi_blocker(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_INS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/via/keymap.c b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/via/keymap.c
index 10653ae4638..567ea686f84 100644
--- a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/via/keymap.c
+++ b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/via/keymap.c
@@ -20,7 +20,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: Base Layer (Default Layer)
*/
-[0] = LAYOUT(
+[0] = LAYOUT_65_ansi_blocker(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
@@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _FL: Function Layer
*/
-[1] = LAYOUT(
+[1] = LAYOUT_65_ansi_blocker(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_INS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -38,14 +38,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, QK_BOOT, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD
),
-[2] = LAYOUT(
+[2] = LAYOUT_65_ansi_blocker(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
-[3] = LAYOUT(
+[3] = LAYOUT_65_ansi_blocker(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h
index 5dda6f15bc5..08eade43c87 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h
@@ -20,3 +20,61 @@
#define RGB_MATRIX_TIMEOUT 1200000 // 20 minutes (20 * 60 * 1000ms)
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#endif
+
+// Setting DEBOUNCE to 8 to be a little conservative due to issues with Glorious' proprietary hot-swap sockets
+#ifdef DEBOUNCE
+ #undef DEBOUNCE
+#endif
+#define DEBOUNCE 8
+
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+// #define ENABLE_RGB_MATRIX_ALPHAS_MODS
+// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+// #define ENABLE_RGB_MATRIX_BAND_SAT
+// #define ENABLE_RGB_MATRIX_BAND_VAL
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#define ENABLE_RGB_MATRIX_DUAL_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// #define ENABLE_RGB_MATRIX_RAINDROPS
+#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+// #define ENABLE_RGB_MATRIX_HUE_BREATHING
+// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
+// #define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+// #define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c
index f803b44abbd..6c467ff6365 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c
@@ -24,16 +24,22 @@ enum layers {
MAC_FN
};
-#define KC_TASK LGUI(KC_TAB)
-#define KC_FLXP LGUI(KC_E)
-#define TO_WINB TO(WIN_BASE)
-#define TO_MACB TO(MAC_BASE)
-#define MO_WINF MO(WIN_FN)
-#define MO_MACF MO(MAC_FN)
+enum custom_keycodes {
+ CMDQ_TOG = QK_KB_2 // TECH DEBT: Starts at QK_KB_2 to maintain ordering with VIA definitions. See #19884. Revert to QK_KB_0 when VIA catches up with QMK.
+};
+
+#define KC_TASK LWIN(KC_TAB) // Open Task Manager
+#define KC_FLXP LWIN(KC_E) // Open File Explorer
+#define DF_WINB DF(WIN_BASE) // Switch to WIN_BASE layer
+#define MO_WINF MO(WIN_FN) // Toggle to WIN_FN layer
+#define DF_MACB DF(MAC_BASE) // Switch to MAX_BASE layer
+#define MO_MACF MO(MAC_FN) // Toggle to MAC_FN layer
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// The GMMK Pro default layout is:
+//
// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Del Rotary(Play/Pause)
// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Home
// Tab Q W E R T Y U I O P [ ] \ PgUp
@@ -55,133 +61,249 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts.
//
// RGB and function keys are inspired by the Keychron Q1 layouts instead of using the default keys.
- //
- // KC_PAUS/KC_BRMU and KC_SCRL/KC_BRMD are aliases for the same keys, but their names reflect better the function in each layout.
+ // To clean the EEPROM, hold the ESC key while connecting the keyboard.
+
[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_MUTE,
- 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_HOME,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_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_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO_WINF, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO_WINF, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[WIN_FN] = LAYOUT(
- _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, KC_INS, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, KC_PAUS,
- TO_MACB, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCRL,
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, _______, _______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
+ EE_CLR, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, KC_SCRL,
+ DF_MACB, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_SPD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
[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_MUTE,
- 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_HOME,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_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_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO_MACF, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO_MACF, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[MAC_FN] = LAYOUT(
- _______, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, KC_INS, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, KC_BRMU,
- TO_WINB, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRMD,
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, _______, _______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
+ EE_CLR, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRMU,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, KC_BRMD,
+ DF_WINB, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_SPD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN,
+ XXXXXXX, XXXXXXX, CMDQ_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
};
// clang-format on
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [WIN_FN] = { ENCODER_CCW_CW(XXXXXXX, XXXXXXX) },
+ [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [MAC_FN] = { ENCODER_CCW_CW(XXXXXXX, XXXXXXX) },
+};
+#endif
+
+/* To record user preferences */
+typedef union {
+ uint32_t raw; // set to 32-bit of size
+ struct {
+ bool rgb_enabled :1; // Artificial RGB ON/OFF flag (1 bit)
+ bool cmd_q_delay_enabled :1; // Toggle CMD+Q delay (1 bit)
+ };
+} user_config_t;
+user_config_t user_config;
+
+/* Delayed keypresses variables and functions */
+static uint16_t delayed_press_delay = 0;
+static uint16_t delayed_press_keycode = KC_NO;
+static uint16_t delayed_press_start_time = 0;
+static uint16_t delayed_press_sent_keycode = KC_NO;
+static void start_delayed_press(const uint16_t delay, const uint16_t keycode);
+static bool is_any_delayed_press_pending(void);
+static bool is_delayed_press_pending(const uint16_t keycode);
+static bool is_delayed_press_sent(const uint16_t keycode);
+static void mark_delayed_press_sent(void);
+static void mark_delayed_release_sent(void);
+static void cancel_delayed_press(void);
+
+/* CMD+Q delay */
+#ifndef CMD_Q_DELAY
+ #define CMD_Q_DELAY 1000
+#endif
+#if CMD_Q_DELAY <= 0 || CMD_Q_DELAY >= UINT16_MAX / 2
+ #error "CMD_Q_DELAY must be a positive integer smaller than UINT16_MAX / 2"
+#endif
+
+#define MIN(x, y) (((x) < (y)) ? (x) : (y))
+#define MAX(x, y) (((x) > (y)) ? (x) : (y))
+
#ifdef RGB_MATRIX_ENABLE
-/* Renaming those to make the purpose on this keymap clearer */
-#define LED_FLAG_CAPS LED_FLAG_NONE
-#define LED_FLAG_EFFECTS LED_FLAG_INDICATOR
+#define CAPS_LOCK_COLOR RGB_RED
+#define WIN_BASE_COLOR RGB_BLUE
+#define WIN_FN_COLOR RGB_BLUE
+#define MAC_BASE_COLOR RGB_WHITE
+#define MAC_FN_COLOR RGB_WHITE
+#define UNKNOWN_LAYER_COLOR RGB_PINK
-static void set_rgb_caps_leds(void);
+/* The maximum effects duration */
+#ifndef EFFECTS_DURATION
+ #define EFFECTS_DURATION 2000
+#endif
+#if EFFECTS_DURATION <= 0 || EFFECTS_DURATION >= UINT16_MAX / 2
+ #error "EFFECTS_DURATION must be a positive integer smaller than UINT16_MAX / 2"
+#endif
+/* The interval for the flashing effect */
+#ifndef FLASHING_EFFECT_INTERVAL
+ #define FLASHING_EFFECT_INTERVAL 250
+#endif
+#if FLASHING_EFFECT_INTERVAL <= 0 || FLASHING_EFFECT_INTERVAL >= UINT16_MAX / 2
+ #error "FLASHING_EFFECT_INTERVAL must be a positive integer smaller than UINT16_MAX / 2"
+#endif
+static void set_rgb_layer_winfn(void);
+static void set_rgb_layer_macfn(void);
+
+/* Effects functions */
+static float flashing_effect(const uint16_t delta_time);
+static float static_effect(const uint16_t delta_time);
+static float increasing_effect(const uint16_t delta_time);
+
+/* Effect variables and functions */
static uint16_t effect_started_time = 0;
-static uint8_t r_effect = 0x0, g_effect = 0x0, b_effect = 0x0;
-static void start_effects(void);
+static uint16_t effect_max_duration = EFFECTS_DURATION;
+static uint8_t effect_r = 0x0, effect_g = 0x0, effect_b = 0x0;
+static float (*effect_multiplier)(const uint16_t) = static_effect;
+static void start_effects(
+ const uint16_t max_duration,
+ const uint8_t r_color,
+ const uint8_t g_color,
+ const uint8_t b_color,
+ const float (*multiplier)(const uint16_t));
+static void stop_effects(void);
-/* The interval time in ms */
-#ifndef EFFECTS_TIME
- #define EFFECTS_TIME 2000
-#endif
-#ifndef EFFECTS_INTERVAL
- #define EFFECTS_INTERVAL 250
-#endif
-#if EFFECTS_TIME <= 0 || EFFECTS_TIME >= 32767
- #error "EFFECTS_TIME must be a positive integer smaller than 32767"
-#endif
-#if EFFECTS_INTERVAL <= 0 || EFFECTS_INTERVAL >= 32767
- #error "EFFECTS_INTERVAL must be a positive integer smaller than 32767"
-#endif
-#define effect_red() r_effect = 0xFF, g_effect = 0x0, b_effect = 0x0
-#define effect_green() r_effect = 0x0, g_effect = 0xFF, b_effect = 0x0
-#define effect_blue() r_effect = 0x0, g_effect = 0x0, b_effect = 0xFF
-#define effect_white() r_effect = 0xFF, g_effect = 0xFF, b_effect = 0xFF
-
-static uint8_t previous_effect_layer = 255;
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- uint8_t current_layer = get_highest_layer(state);
- switch (current_layer) {
- case WIN_BASE:
- if (previous_effect_layer != current_layer) {
- previous_effect_layer = current_layer;
- effect_blue();
- start_effects();
- }
- break;
- case MAC_BASE:
- if (previous_effect_layer != current_layer) {
- previous_effect_layer = current_layer;
- effect_white();
- start_effects();
- }
- break;
- }
- return state;
-}
-
-bool led_update_user(led_t led_state) {
- if (led_state.caps_lock) {
- if (!rgb_matrix_is_enabled()) {
- /* Turn ON the RGB Matrix for CAPS LOCK */
- rgb_matrix_set_flags(LED_FLAG_CAPS);
- rgb_matrix_enable();
- }
- } else if (rgb_matrix_get_flags() == LED_FLAG_CAPS) {
- /* RGB Matrix was only ON because of CAPS LOCK. Turn it OFF. */
- rgb_matrix_set_flags(LED_FLAG_ALL);
- rgb_matrix_disable();
- }
- return true;
-}
+/* Delayed keypresses variables with RGB variant */
+static void start_delayed_press_with_effects(
+ const uint16_t delay,
+ const uint16_t keycode,
+ const uint8_t r_color,
+ const uint8_t g_color,
+ const uint8_t b_color);
#endif // RGB_MATRIX_ENABLE
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
+void eeconfig_init_user(void) { // EEPROM is getting reset!
+ user_config.raw = 0;
+ user_config.rgb_enabled = true; // We want this enabled by default
+ user_config.cmd_q_delay_enabled = true; // We want this enabled by default
+ eeconfig_update_user(user_config.raw); // Write default value to EEPROM now
+}
+
+void keyboard_post_init_user(void) {
#ifdef RGB_MATRIX_ENABLE
- #ifdef NKRO_ENABLE
+ // Enable the RGB matrix, if not enabled
+ if (!rgb_matrix_is_enabled()) {
+ rgb_matrix_enable();
+ }
+ // Set the flags to ALL, if not already set
+ if (rgb_matrix_get_flags() != LED_FLAG_ALL) {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ }
+ #endif
+
+ // Read the user config from EEPROM
+ user_config.raw = eeconfig_read_user();
+}
+
+void matrix_scan_user(void) {
+ if (is_any_delayed_press_pending()) {
+ if (sync_timer_elapsed(delayed_press_start_time) > delayed_press_delay) {
+ register_code(delayed_press_keycode);
+ mark_delayed_press_sent();
+ }
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (is_delayed_press_sent(keycode)) {
+ if (!record->event.pressed) {
+ /* Send key-up event and clear the keycode and stop processing */
+ unregister_code(keycode);
+ mark_delayed_release_sent();
+ return false;
+ }
+ } else if (is_delayed_press_pending(keycode)) {
+ if (!record->event.pressed) {
+ /* Cancel the pending press and stop processing */
+ cancel_delayed_press();
+ return false;
+ }
+ } else if (is_any_delayed_press_pending()) {
+ /* Cancel the pending press and resume processing */
+ cancel_delayed_press();
+ }
+ switch (keycode) {
+ case QK_DEF_LAYER ... QK_DEF_LAYER_MAX:
+ if (record->event.pressed) {
+ /* Set the default layout on the EEPROM, let the default layer change callback handle the rest */
+ set_single_persistent_default_layer(QK_DEF_LAYER_GET_LAYER(keycode));
+ }
+ return false;
+ case CMDQ_TOG:
+ if (record->event.pressed) {
+ if (user_config.cmd_q_delay_enabled) {
+ /* Turning delay OFF */
+ #ifdef RGB_MATRIX_ENABLE
+ start_effects(EFFECTS_DURATION, RGB_RED, flashing_effect);
+ #endif
+ } else {
+ /* Turning delay ON */
+ #ifdef RGB_MATRIX_ENABLE
+ start_effects(EFFECTS_DURATION, RGB_GREEN, flashing_effect);
+ #endif
+ }
+ user_config.cmd_q_delay_enabled = !user_config.cmd_q_delay_enabled;
+ eeconfig_update_user(user_config.raw);
+ }
+ return false;
+ case KC_Q:
+ if (user_config.cmd_q_delay_enabled) {
+ if (layer_state_is(MAC_BASE)) {
+ const uint8_t mods = get_mods();
+ if (mods == MOD_BIT(KC_LCMD) || mods == MOD_BIT(KC_RCMD)) {
+ if (record->event.pressed) {
+ #ifdef RGB_MATRIX_ENABLE
+ start_delayed_press_with_effects(CMD_Q_DELAY, KC_Q, RGB_ORANGE);
+ #else
+ start_delayed_press(CMD_Q_DELAY, KC_Q);
+ #endif
+ }
+ return false;
+ }
+ }
+ }
+ break;
+ #ifdef RGB_MATRIX_ENABLE
+ #ifdef NKRO_ENABLE
case NK_TOGG:
if (record->event.pressed) {
if (keymap_config.nkro) {
/* Turning NKRO OFF */
- effect_red();
+ start_effects(EFFECTS_DURATION, RGB_RED, flashing_effect);
} else {
/* Turning NKRO ON */
- effect_green();
+ start_effects(EFFECTS_DURATION, RGB_GREEN, flashing_effect);
}
- start_effects();
}
break;
- #endif // NKRO_ENABLE
+ #endif // NKRO_ENABLE
case RGB_MOD:
case RGB_RMOD:
case RGB_HUI:
@@ -192,99 +314,171 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case RGB_VAD:
case RGB_SPI:
case RGB_SPD:
- if (record->event.pressed) {
- if (rgb_matrix_get_flags() != LED_FLAG_ALL) {
- /* Ignore changes to RGB settings while only it's supposed to be OFF */
- return false; // Skip all further processing of this key
- }
+ if (!user_config.rgb_enabled) {
+ /* Ignore changes to RGB settings while only it's supposed to be OFF */
+ return false; // Skip all further processing of this key
}
break;
case RGB_TOG:
if (record->event.pressed) {
- if (rgb_matrix_is_enabled()) {
- switch (rgb_matrix_get_flags()) {
- case LED_FLAG_EFFECTS:
- case LED_FLAG_CAPS:
- /* Turned ON because of EFFECTS or CAPS, is actually OFF */
- /* Change to LED_FLAG_ALL to signal it's really ON */
- rgb_matrix_set_flags(LED_FLAG_ALL);
- /* Will be re-enabled by the processing of the toggle */
- rgb_matrix_disable_noeeprom();
- break;
- case LED_FLAG_ALL:
- /* Is actually ON */
- if (effect_started_time > 0) {
- /* Signal EFFECTS */
- rgb_matrix_set_flags(LED_FLAG_EFFECTS);
- /* Will be re-enabled by the processing of the toggle */
- rgb_matrix_disable_noeeprom();
- } else
- if (host_keyboard_led_state().caps_lock) {
- /* Signal CAPS */
- rgb_matrix_set_flags(LED_FLAG_CAPS);
- /* Will be re-enabled by the processing of the toggle */
- rgb_matrix_disable_noeeprom();
- }
- break;
- }
- }
+ user_config.rgb_enabled = !user_config.rgb_enabled;
+ eeconfig_update_user(user_config.raw);
}
- break;
- #endif // RGB_MATRIX_ENABLE
+ return false;
+ #endif // RGB_MATRIX_ENABLE
}
return true;
}
-#ifdef RGB_MATRIX_ENABLE
-bool rgb_matrix_indicators_user(void) {
- if (effect_started_time > 0) {
- /* Render blinking EFFECTS */
- const uint16_t deltaTime = sync_timer_elapsed(effect_started_time);
- if (deltaTime <= EFFECTS_TIME) {
- const uint8_t led_state = ((deltaTime / EFFECTS_INTERVAL) + 1) & 0x01;
- const uint8_t val_r = led_state * r_effect;
- const uint8_t val_g = led_state * g_effect;
- const uint8_t val_b = led_state * b_effect;
- rgb_matrix_set_color_all(val_r, val_g, val_b);
- if (host_keyboard_led_state().caps_lock) {
- set_rgb_caps_leds();
- }
- return false;
- } else {
- /* EFFECTS duration is finished */
- effect_started_time = 0;
- if (rgb_matrix_get_flags() == LED_FLAG_EFFECTS) {
- /* It was turned ON because of EFFECTS */
- if (host_keyboard_led_state().caps_lock) {
- /* CAPS is still ON. Demote to CAPS */
- rgb_matrix_set_flags(LED_FLAG_CAPS);
- } else {
- /* There is nothing else keeping RGB enabled. Reset flags and turn if off. */
- rgb_matrix_set_flags(LED_FLAG_ALL);
- rgb_matrix_disable_noeeprom();
- }
- }
- }
- }
- if (rgb_matrix_get_flags() == LED_FLAG_CAPS) {
- rgb_matrix_set_color_all(0x0, 0x0, 0x0);
- }
- if (host_keyboard_led_state().caps_lock) {
- set_rgb_caps_leds();
- }
- return false;
+static void start_delayed_press(const uint16_t delay, const uint16_t keycode) {
+ delayed_press_delay = delay;
+ delayed_press_keycode = keycode;
+ delayed_press_start_time = sync_timer_read();
+ delayed_press_sent_keycode = KC_NO;
}
-static void start_effects(void) {
- effect_started_time = sync_timer_read();
- if (!rgb_matrix_is_enabled()) {
- /* Turn it ON, signal the cause (EFFECTS) */
- rgb_matrix_set_flags(LED_FLAG_EFFECTS);
- rgb_matrix_enable_noeeprom();
- } else if (rgb_matrix_get_flags() == LED_FLAG_CAPS) {
- /* It's already ON, promote the cause from CAPS to EFFECTS */
- rgb_matrix_set_flags(LED_FLAG_EFFECTS);
+static bool is_any_delayed_press_pending(void) {
+ return delayed_press_start_time > 0 && delayed_press_keycode != KC_NO;
+}
+
+static bool is_delayed_press_pending(const uint16_t keycode) {
+ return delayed_press_start_time > 0 && delayed_press_keycode == keycode;
+}
+
+static bool is_delayed_press_sent(const uint16_t keycode) {
+ return delayed_press_sent_keycode != KC_NO && delayed_press_sent_keycode == keycode;
+}
+
+static void mark_delayed_press_sent(void) {
+ delayed_press_sent_keycode = delayed_press_keycode;
+ cancel_delayed_press();
+}
+
+static void mark_delayed_release_sent(void) {
+ delayed_press_sent_keycode = KC_NO;
+}
+
+static void cancel_delayed_press(void) {
+ delayed_press_delay = 0;
+ delayed_press_keycode = KC_NO;
+ delayed_press_start_time = 0;
+ #ifdef RGB_MATRIX_ENABLE
+ stop_effects();
+ #endif
+}
+
+#ifdef RGB_MATRIX_ENABLE
+
+static void start_delayed_press_with_effects(
+ const uint16_t delay,
+ const uint16_t keycode,
+ const uint8_t r_color,
+ const uint8_t g_color,
+ const uint8_t b_color) {
+ start_delayed_press(delay, keycode);
+ start_effects(delay, r_color, g_color, b_color, increasing_effect);
+}
+
+/*
+Effects when switching layers
+*/
+
+static uint8_t previous_layer = UINT8_MAX;
+
+layer_state_t default_layer_state_set_user(layer_state_t state) {
+ const uint8_t current_layer = get_highest_layer(state);
+ if (previous_layer != current_layer) {
+ // For some reason, setting the default layer alone doesn't change it fully
+ layer_move(current_layer);
+ switch (current_layer) {
+ case WIN_BASE:
+ start_effects(EFFECTS_DURATION, WIN_BASE_COLOR, flashing_effect);
+ break;
+ case MAC_BASE:
+ start_effects(EFFECTS_DURATION, MAC_BASE_COLOR, flashing_effect);
+ break;
+ default:
+ // This should not ever happen, but let's display something if it does!
+ start_effects(EFFECTS_DURATION, UNKNOWN_LAYER_COLOR, static_effect);
+ break;
+ }
+ previous_layer = current_layer;
}
+ return state;
+}
+
+static void start_effects(
+ const uint16_t max_duration,
+ const uint8_t r_color,
+ const uint8_t g_color,
+ const uint8_t b_color,
+ const float (*multiplier)(const uint16_t)) {
+ effect_r = r_color;
+ effect_g = g_color;
+ effect_b = b_color;
+ effect_multiplier = multiplier;
+ effect_max_duration = max_duration;
+ effect_started_time = sync_timer_read();
+}
+
+static void stop_effects(void) {
+ effect_r = 0x0;
+ effect_g = 0x0;
+ effect_b = 0x0;
+ effect_multiplier = static_effect;
+ effect_max_duration = EFFECTS_DURATION;
+ effect_started_time = 0;
+}
+
+static float flashing_effect(const uint16_t delta_time) {
+ return ((delta_time / FLASHING_EFFECT_INTERVAL) + 1) & 0x01;
+}
+
+static float static_effect(const uint16_t delta_time) {
+ return 1.0;
+}
+
+static float increasing_effect(const uint16_t delta_time) {
+ return MAX(0.0, MIN(1.0, ((float) delta_time) / effect_max_duration));
+}
+
+bool rgb_matrix_indicators_user(void) {
+ if (effect_started_time > 0) {
+ const uint16_t delta_time = sync_timer_elapsed(effect_started_time);
+ if (delta_time <= effect_max_duration) {
+ /* Render effect */
+ const float multiplier = effect_multiplier(delta_time);
+ const uint8_t val_r = multiplier * effect_r;
+ const uint8_t val_g = multiplier * effect_g;
+ const uint8_t val_b = multiplier * effect_b;
+ rgb_matrix_set_color_all(val_r, val_g, val_b);
+ return false;
+ } else {
+ /* Effect duration is finished */
+ stop_effects();
+ }
+ }
+ if (host_keyboard_led_state().caps_lock) {
+ rgb_matrix_set_color_all(CAPS_LOCK_COLOR);
+ } else if (!user_config.rgb_enabled) {
+ rgb_matrix_set_color_all(RGB_OFF);
+ }
+ switch (get_highest_layer(layer_state)) {
+ case WIN_BASE:
+ case MAC_BASE:
+ break;
+ case WIN_FN:
+ set_rgb_layer_winfn();
+ return false;
+ case MAC_FN:
+ set_rgb_layer_macfn();
+ return false;
+ default:
+ // This should never happen, but if it does, let's display something!
+ rgb_matrix_set_color_all(UNKNOWN_LAYER_COLOR);
+ return false;
+ }
+ return true;
}
// RGB led number layout, function of the key
@@ -298,38 +492,69 @@ static void start_effects(void) {
// 87, led 07 88, led 18
// 91, led 08 92, led 19
-static void set_rgb_caps_leds(void) {
- rgb_matrix_set_color(0, 0xFF, 0x0, 0x0); // ESC
- rgb_matrix_set_color(6, 0xFF, 0x0, 0x0); // F1
- rgb_matrix_set_color(12, 0xFF, 0x0, 0x0); // F2
- rgb_matrix_set_color(18, 0xFF, 0x0, 0x0); // F3
- rgb_matrix_set_color(23, 0xFF, 0x0, 0x0); // F4
- rgb_matrix_set_color(28, 0xFF, 0x0, 0x0); // F5
- rgb_matrix_set_color(34, 0xFF, 0x0, 0x0); // F6
- rgb_matrix_set_color(39, 0xFF, 0x0, 0x0); // F7
- rgb_matrix_set_color(44, 0xFF, 0x0, 0x0); // F8
- rgb_matrix_set_color(50, 0xFF, 0x0, 0x0); // F9
- rgb_matrix_set_color(56, 0xFF, 0x0, 0x0); // F10
- rgb_matrix_set_color(61, 0xFF, 0x0, 0x0); // F11
- rgb_matrix_set_color(66, 0xFF, 0x0, 0x0); // F12
- rgb_matrix_set_color(69, 0xFF, 0x0, 0x0); // Prt
- rgb_matrix_set_color(67, 0xFF, 0x0, 0x0); // Left side LED 1
- rgb_matrix_set_color(68, 0xFF, 0x0, 0x0); // Right side LED 1
- rgb_matrix_set_color(70, 0xFF, 0x0, 0x0); // Left side LED 2
- rgb_matrix_set_color(71, 0xFF, 0x0, 0x0); // Right side LED 2
- rgb_matrix_set_color(73, 0xFF, 0x0, 0x0); // Left side LED 3
- rgb_matrix_set_color(74, 0xFF, 0x0, 0x0); // Right side LED 3
- rgb_matrix_set_color(76, 0xFF, 0x0, 0x0); // Left side LED 4
- rgb_matrix_set_color(77, 0xFF, 0x0, 0x0); // Right side LED 4
- rgb_matrix_set_color(80, 0xFF, 0x0, 0x0); // Left side LED 5
- rgb_matrix_set_color(81, 0xFF, 0x0, 0x0); // Right side LED 5
- rgb_matrix_set_color(83, 0xFF, 0x0, 0x0); // Left side LED 6
- rgb_matrix_set_color(84, 0xFF, 0x0, 0x0); // Right side LED 6
- rgb_matrix_set_color(87, 0xFF, 0x0, 0x0); // Left side LED 7
- rgb_matrix_set_color(88, 0xFF, 0x0, 0x0); // Right side LED 7
- rgb_matrix_set_color(91, 0xFF, 0x0, 0x0); // Left side LED 8
- rgb_matrix_set_color(92, 0xFF, 0x0, 0x0); // Right side LED 8
- rgb_matrix_set_color(3, 0xFF, 0x0, 0x0); // CAPS LED
+static void set_rgb_layer_winfn(void) {
+ rgb_matrix_set_color(0, WIN_FN_COLOR);
+ rgb_matrix_set_color(6, WIN_FN_COLOR);
+ rgb_matrix_set_color(12, WIN_FN_COLOR);
+ rgb_matrix_set_color(18, WIN_FN_COLOR);
+ rgb_matrix_set_color(23, WIN_FN_COLOR);
+ rgb_matrix_set_color(28, WIN_FN_COLOR);
+ rgb_matrix_set_color(34, WIN_FN_COLOR);
+ rgb_matrix_set_color(39, WIN_FN_COLOR);
+ rgb_matrix_set_color(44, WIN_FN_COLOR);
+ rgb_matrix_set_color(50, WIN_FN_COLOR);
+ rgb_matrix_set_color(56, WIN_FN_COLOR);
+ rgb_matrix_set_color(61, WIN_FN_COLOR);
+ rgb_matrix_set_color(66, WIN_FN_COLOR);
+ rgb_matrix_set_color(2, WIN_FN_COLOR);
+ rgb_matrix_set_color(3, WIN_FN_COLOR);
+ rgb_matrix_set_color(8, WIN_FN_COLOR);
+ rgb_matrix_set_color(9, WIN_FN_COLOR);
+ rgb_matrix_set_color(14, WIN_FN_COLOR);
+ rgb_matrix_set_color(15, WIN_FN_COLOR);
+ rgb_matrix_set_color(20, WIN_FN_COLOR);
+ rgb_matrix_set_color(21, WIN_FN_COLOR);
+ rgb_matrix_set_color(25, WIN_FN_COLOR);
+ rgb_matrix_set_color(26, WIN_FN_COLOR);
+ rgb_matrix_set_color(38, WIN_FN_COLOR);
+ rgb_matrix_set_color(93, WIN_FN_COLOR);
+ rgb_matrix_set_color(72, WIN_FN_COLOR);
+ rgb_matrix_set_color(75, WIN_FN_COLOR);
+ rgb_matrix_set_color(86, WIN_FN_COLOR);
+ rgb_matrix_set_color(82, WIN_FN_COLOR);
+}
+
+static void set_rgb_layer_macfn(void) {
+ rgb_matrix_set_color(0, MAC_FN_COLOR);
+ rgb_matrix_set_color(6, MAC_FN_COLOR);
+ rgb_matrix_set_color(12, MAC_FN_COLOR);
+ rgb_matrix_set_color(18, MAC_FN_COLOR);
+ rgb_matrix_set_color(23, MAC_FN_COLOR);
+ rgb_matrix_set_color(28, MAC_FN_COLOR);
+ rgb_matrix_set_color(34, MAC_FN_COLOR);
+ rgb_matrix_set_color(39, MAC_FN_COLOR);
+ rgb_matrix_set_color(44, MAC_FN_COLOR);
+ rgb_matrix_set_color(50, MAC_FN_COLOR);
+ rgb_matrix_set_color(56, MAC_FN_COLOR);
+ rgb_matrix_set_color(61, MAC_FN_COLOR);
+ rgb_matrix_set_color(66, MAC_FN_COLOR);
+ rgb_matrix_set_color(2, MAC_FN_COLOR);
+ rgb_matrix_set_color(3, MAC_FN_COLOR);
+ rgb_matrix_set_color(8, MAC_FN_COLOR);
+ rgb_matrix_set_color(9, MAC_FN_COLOR);
+ rgb_matrix_set_color(14, MAC_FN_COLOR);
+ rgb_matrix_set_color(15, MAC_FN_COLOR);
+ rgb_matrix_set_color(20, MAC_FN_COLOR);
+ rgb_matrix_set_color(21, MAC_FN_COLOR);
+ rgb_matrix_set_color(25, MAC_FN_COLOR);
+ rgb_matrix_set_color(26, MAC_FN_COLOR);
+ rgb_matrix_set_color(38, MAC_FN_COLOR);
+ rgb_matrix_set_color(93, MAC_FN_COLOR);
+ rgb_matrix_set_color(72, MAC_FN_COLOR);
+ rgb_matrix_set_color(75, MAC_FN_COLOR);
+ rgb_matrix_set_color(86, MAC_FN_COLOR);
+ rgb_matrix_set_color(82, MAC_FN_COLOR);
+ rgb_matrix_set_color(17, MAC_FN_COLOR);
}
#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/readme.md
index b080f02c6b3..2b21bd2821f 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/readme.md
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/readme.md
@@ -7,15 +7,23 @@ The differences are as follows:
- Dedicated MacOS and Windows/Linux layers
- Switching between them by pressing Fn + CAPS LOCK
+- VIA support
- Disabled Mouse Keys (to fix issues with KVM switches and also because they're not used here anyway)
- RGB turns off after 20 minutes of inactivity
- RGB turns off when USB is suspended
- Layer 0:
- - Print Screen (default) -> Delete
- - Delete (default) -> Home
+ - Delete -> Insert
+ - Page Up -> Delete
+ - Page Down -> Home
- Layer 1 (accessed by pressing Fn):
- - Fn + Delete -> Insert
- - Fn + Home -> Print Screen
+ - Fn + Insert -> Pause
+ - Fn + Delete -> Scroll Lock
+ - Fn + Esc -> Clear EEPROM
+ - Fn + (Left) CMD (macOS layout) -> Toggle the CMD + Q delay
+
+On the Mac layer, pressing CMD + Q will not immediately send the combination.\
+There's a configurable delay (defaults to 1 second) to send it.\
+This is done mainly to prevent hitting CMD + Q by mistake when alternating between applications with CMD + Tab.
This keymap also includes CAPS LOCK ON indicator.\
All left and right side LEDs, and the Caps key LED will turn solid red while CAPS LOCK is ON.
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk
index d5942a2e904..d095a601548 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk
@@ -3,21 +3,17 @@
# Disabling MouseKey because it breaks my KVM switch
MOUSEKEY_ENABLE = no
-# Cherry MX-style switches and diodes are not susceptible to noise, no need for noise-resistant algorithms.
-# This significantly reduces latency.
-#
-# The matrix scan frequency seems to be around 1820 Hz, so even sym_defer_g would perform ok,
-# but the "defer" part would mean we would wait DEBOUNCE ms before sending any events.
-# Using "asym_eager_defer_pk" does not seem to benefit us in anything.
-# The GMMK Pro has more then enough system resources for a per-key algorithm.
-# Using an "eager" algorithm leads to extremely low latency while also reducing the chances of chattering
-# due to it's "post-event" debouncing (of sorts).
-#
-# I have observed zero chattering or double-keypress issues on my Gateron Yellow switches.
-# Most chattering issues on the GMMK Pro seem to be related to its proprietary hot-swap sockets anyway.
-DEBOUNCE_TYPE = sym_eager_pk
+# Ensure sym_defer_g is used.
+# It seems sym_defer_pk results in significant chattering, even with an 8ms debounce time.
+DEBOUNCE_TYPE = sym_defer_g
# Useful for debugging
# CONSOLE_ENABLE = yes
# DEBUG_MATRIX_SCAN_RATE_ENABLE = yes
# DEBUG_MATRIX_SCAN_RATE = yes
+
+# Encoder Map support
+ENCODER_MAP_ENABLE = yes
+
+# Enables VIA
+VIA_ENABLE = yes
diff --git a/keyboards/gvalchca/spaccboard/info.json b/keyboards/gvalchca/spaccboard/info.json
index 71c88a0db04..1ce128b5966 100644
--- a/keyboards/gvalchca/spaccboard/info.json
+++ b/keyboards/gvalchca/spaccboard/info.json
@@ -201,7 +201,7 @@
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
- {"matrix": [2, 13], "x": 12.75, "y": 1, "w": 2.25, "h": 2},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
diff --git a/keyboards/handwired/dactyl_lightcycle/info.json b/keyboards/handwired/dactyl_lightcycle/info.json
new file mode 100644
index 00000000000..c8bf0b85fcb
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/info.json
@@ -0,0 +1,209 @@
+{
+ "keyboard_name": "Dactyl Lightcycle",
+ "manufacturer": "Adereth",
+ "url": "https://github.com/adereth/dactyl-keyboard",
+ "maintainer": "Matt Adereth",
+ "usb": {
+ "vid": "0xFEED",
+ "pid": "0x3060",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "mousekey": true,
+ "extrakey": true,
+ "audio": false,
+ "rgblight": false,
+ "backlight": false,
+ "nkro": false
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "matrix_pins": {
+ "cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
+ "rows": ["F7", "B1", "B3", "B2", "B6"]
+ },
+ "diode_direction": "COL2ROW",
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "D0"
+ },
+ "development_board": "promicro",
+ "community_layouts": ["split_3x6_3", "split_3x5_3"],
+ "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": [5, 0], "x": 11, "y": 0},
+ {"matrix": [5, 1], "x": 12, "y": 0},
+ {"matrix": [5, 2], "x": 13, "y": 0},
+ {"matrix": [5, 3], "x": 14, "y": 0},
+ {"matrix": [5, 4], "x": 15, "y": 0},
+ {"matrix": [5, 5], "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": [6, 0], "x": 11, "y": 1},
+ {"matrix": [6, 1], "x": 12, "y": 1},
+ {"matrix": [6, 2], "x": 13, "y": 1},
+ {"matrix": [6, 3], "x": 14, "y": 1},
+ {"matrix": [6, 4], "x": 15, "y": 1},
+ {"matrix": [6, 5], "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": [3, 5], "x": 6, "y": 2, "h": 1.25},
+ {"matrix": [4, 5], "x": 7, "y": 2, "h": 1.5},
+
+ {"matrix": [9, 0], "x": 9, "y": 2, "h": 1.5},
+ {"matrix": [8, 0], "x": 10, "y": 2, "h": 1.25},
+
+ {"matrix": [7, 0], "x": 11, "y": 2},
+ {"matrix": [7, 1], "x": 12, "y": 2},
+ {"matrix": [7, 2], "x": 13, "y": 2},
+ {"matrix": [7, 3], "x": 14, "y": 2},
+ {"matrix": [7, 4], "x": 15, "y": 2},
+ {"matrix": [7, 5], "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": [4, 2], "x": 5, "y": 3, "h": 2},
+ {"matrix": [4, 3], "x": 6, "y": 3.25, "h": 1.75},
+ {"matrix": [4, 4], "x": 7, "y": 3.5, "h": 1.5},
+
+ {"matrix": [9, 1], "x": 9, "y": 3.5, "h": 1.5},
+ {"matrix": [9, 2], "x": 10, "y": 3.25, "h": 1.75},
+ {"matrix": [9, 3], "x": 11, "y": 3, "h": 2},
+
+ {"matrix": [8, 1], "x": 12, "y": 3},
+ {"matrix": [8, 2], "x": 13, "y": 3},
+ {"matrix": [8, 3], "x": 14, "y": 3},
+ {"matrix": [8, 4], "x": 15, "y": 3},
+ {"matrix": [8, 5], "x": 16, "y": 3}
+ ]
+ },
+ "LAYOUT_split_3x6_3": {
+ "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": [5, 0], "x": 11, "y": 0},
+ {"matrix": [5, 1], "x": 12, "y": 0},
+ {"matrix": [5, 2], "x": 13, "y": 0},
+ {"matrix": [5, 3], "x": 14, "y": 0},
+ {"matrix": [5, 4], "x": 15, "y": 0},
+ {"matrix": [5, 5], "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": [6, 0], "x": 11, "y": 1},
+ {"matrix": [6, 1], "x": 12, "y": 1},
+ {"matrix": [6, 2], "x": 13, "y": 1},
+ {"matrix": [6, 3], "x": 14, "y": 1},
+ {"matrix": [6, 4], "x": 15, "y": 1},
+ {"matrix": [6, 5], "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": [7, 0], "x": 11, "y": 2},
+ {"matrix": [7, 1], "x": 12, "y": 2},
+ {"matrix": [7, 2], "x": 13, "y": 2},
+ {"matrix": [7, 3], "x": 14, "y": 2},
+ {"matrix": [7, 4], "x": 15, "y": 2},
+ {"matrix": [7, 5], "x": 16, "y": 2},
+
+ {"matrix": [4, 2], "x": 5, "y": 3, "h": 2},
+ {"matrix": [4, 3], "x": 6, "y": 3.25, "h": 1.75},
+ {"matrix": [4, 4], "x": 7, "y": 3.5, "h": 1.5},
+
+ {"matrix": [9, 1], "x": 9, "y": 3.5, "h": 1.5},
+ {"matrix": [9, 2], "x": 10, "y": 3.25, "h": 1.75},
+ {"matrix": [9, 3], "x": 11, "y": 3, "h": 2}
+ ]
+ },
+ "LAYOUT_split_3x5_3": {
+ "layout": [
+ {"matrix": [0, 1], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1, "y": 0},
+ {"matrix": [0, 3], "x": 2, "y": 0},
+ {"matrix": [0, 4], "x": 3, "y": 0},
+ {"matrix": [0, 5], "x": 4, "y": 0},
+
+ {"matrix": [5, 0], "x": 10, "y": 0},
+ {"matrix": [5, 1], "x": 11, "y": 0},
+ {"matrix": [5, 2], "x": 12, "y": 0},
+ {"matrix": [5, 3], "x": 13, "y": 0},
+ {"matrix": [5, 4], "x": 14, "y": 0},
+
+ {"matrix": [1, 1], "x": 0, "y": 1},
+ {"matrix": [1, 2], "x": 1, "y": 1},
+ {"matrix": [1, 3], "x": 2, "y": 1},
+ {"matrix": [1, 4], "x": 3, "y": 1},
+ {"matrix": [1, 5], "x": 4, "y": 1},
+
+ {"matrix": [6, 0], "x": 10, "y": 1},
+ {"matrix": [6, 1], "x": 11, "y": 1},
+ {"matrix": [6, 2], "x": 12, "y": 1},
+ {"matrix": [6, 3], "x": 13, "y": 1},
+ {"matrix": [6, 4], "x": 14, "y": 1},
+
+ {"matrix": [2, 1], "x": 0, "y": 2},
+ {"matrix": [2, 2], "x": 1, "y": 2},
+ {"matrix": [2, 3], "x": 2, "y": 2},
+ {"matrix": [2, 4], "x": 3, "y": 2},
+ {"matrix": [2, 5], "x": 4, "y": 2},
+
+ {"matrix": [7, 0], "x": 10, "y": 2},
+ {"matrix": [7, 1], "x": 11, "y": 2},
+ {"matrix": [7, 2], "x": 12, "y": 2},
+ {"matrix": [7, 3], "x": 13, "y": 2},
+ {"matrix": [7, 4], "x": 14, "y": 2},
+
+ {"matrix": [4, 2], "x": 4, "y": 3, "h": 2},
+ {"matrix": [4, 3], "x": 5, "y": 3.25, "h": 1.75},
+ {"matrix": [4, 4], "x": 6, "y": 3.5, "h": 1.5},
+
+ {"matrix": [9, 1], "x": 8, "y": 3.5, "h": 1.5},
+ {"matrix": [9, 2], "x": 9, "y": 3.25, "h": 1.75},
+ {"matrix": [9, 3], "x": 10, "y": 3, "h": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_lightcycle/keymaps/default/config.h b/keyboards/handwired/dactyl_lightcycle/keymaps/default/config.h
new file mode 100644
index 00000000000..49b067cc586
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/keymaps/default/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2020 Ralph Azucena
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* Enables This makes it easier for fast typists to use dual-function keys */
+#define PERMISSIVE_HOLD
+
+/* mouse config */
+#define MOUSEKEY_DELAY 0
+// Lowering MOUSEKEY_INTERVAL raises the cursor speed significantly, you may want to lower MOUSEKEY_MAX_SPEED (default: 10)
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+
+/* layer config */
+#define TAPPING_TOGGLE 1
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/handwired/dactyl_lightcycle/keymaps/default/keymap.json b/keyboards/handwired/dactyl_lightcycle/keymaps/default/keymap.json
new file mode 100644
index 00000000000..a9cc3e2741c
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/keymaps/default/keymap.json
@@ -0,0 +1,34 @@
+{
+ "keyboard": "handwired/dactyl_lightcycle",
+ "version": 1,
+ "author": "dunk2k",
+ "notes": "This file is a keymap(.json) file for handwired/dactyl_lightcycle",
+ "keymap": "default",
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_ESC", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSLS",
+ "KC_TAB", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
+ "KC_LALT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_DEL", "KC_LGUI", "KC_RGUI", "KC_BSPC", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_LALT",
+ "KC_LCTL", "KC_MINS", "KC_EQL", "KC_LEFT", "KC_RGHT", "LT(1,KC_HOME)", "KC_SPC", "KC_LSFT", "KC_RCTL", "KC_ENT", "LT(2,KC_END)", "KC_UP", "KC_DOWN", "KC_LBRC", "KC_RBRC", "KC_RSFT"
+ ],
+ [
+ "RCS(KC_ESC)", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NUM", "KC_P7", "KC_P8", "KC_P9", "KC_PMNS", "KC_TRNS",
+ "KC_CAPS", "KC_SCRL", "KC_INS", "KC_PAUS", "KC_PSCR", "KC_NO", "KC_PAST", "KC_P4", "KC_P5", "KC_P6", "KC_PPLS", "KC_TRNS",
+ "KC_TRNS", "KC_NO", "KC_NO", "S(KC_HOME)", "S(KC_END)", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "C(KC_BSPC)", "KC_PSLS", "KC_P1", "KC_P2", "KC_P3", "KC_PENT", "KC_TRNS",
+ "KC_TRNS", "KC_NO", "KC_NO", "LSG(KC_TAB)", "G(KC_TAB)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_RSFT", "MO(3)", "KC_PCMM", "KC_P0", "KC_PDOT", "KC_PEQL", "KC_TRNS"
+ ],
+ [
+ "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_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_TILD",
+ "KC_TRNS", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_LPRN", "C(KC_DEL)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_RPRN", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_TRNS",
+ "KC_TRNS", "KC_UNDS", "KC_PLUS", "KC_NO", "A(KC_TAB)", "MO(3)", "KC_LCTL", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGUP", "KC_PGDN", "KC_LCBR", "KC_RCBR", "KC_TRNS"
+ ],
+ [
+ "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_VOLU", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
+ "KC_NO", "QK_BOOT", "KC_SLEP", "KC_MSTP", "KC_MPLY", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "AG_TOGG", "KC_NO",
+ "KC_NO", "KC_NO", "KC_NO", "KC_MRWD", "KC_MFFD", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_VOLD", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
+ "KC_NO", "KC_NO", "KC_NO", "KC_MNXT", "KC_MNXT", "KC_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_TRNS", "KC_BRIU", "KC_BRID", "KC_NO", "KC_NO", "KC_NO"
+ ]
+ ]
+}
diff --git a/keyboards/handwired/dactyl_lightcycle/keymaps/via/config.h b/keyboards/handwired/dactyl_lightcycle/keymaps/via/config.h
new file mode 100644
index 00000000000..49b067cc586
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/keymaps/via/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2020 Ralph Azucena
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* Enables This makes it easier for fast typists to use dual-function keys */
+#define PERMISSIVE_HOLD
+
+/* mouse config */
+#define MOUSEKEY_DELAY 0
+// Lowering MOUSEKEY_INTERVAL raises the cursor speed significantly, you may want to lower MOUSEKEY_MAX_SPEED (default: 10)
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+
+/* layer config */
+#define TAPPING_TOGGLE 1
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/handwired/dactyl_lightcycle/keymaps/via/keymap.json b/keyboards/handwired/dactyl_lightcycle/keymaps/via/keymap.json
new file mode 100644
index 00000000000..c1089e77110
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/keymaps/via/keymap.json
@@ -0,0 +1,39 @@
+{
+ "keyboard": "handwired/dactyl_lightcycle",
+ "version": 1,
+ "author": "dunk2k",
+ "notes": "This file is a keymap(.json) file for handwired/dactyl_lightcycle",
+ "config": {
+ "features": {
+ "via": true
+ }
+ },
+ "keymap": "via",
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_ESC", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSLS",
+ "KC_TAB", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
+ "KC_LALT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_DEL", "KC_LGUI", "KC_RGUI", "KC_BSPC", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_LALT",
+ "KC_LCTL", "KC_MINS", "KC_EQL", "KC_LEFT", "KC_RGHT", "LT(1,KC_HOME)", "KC_SPC", "KC_LSFT", "KC_RCTL", "KC_ENT", "LT(2,KC_END)", "KC_UP", "KC_DOWN", "KC_LBRC", "KC_RBRC", "KC_RSFT"
+ ],
+ [
+ "RCS(KC_ESC)", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NUM", "KC_P7", "KC_P8", "KC_P9", "KC_PMNS", "KC_TRNS",
+ "KC_CAPS", "KC_SCRL", "KC_INS", "KC_PAUS", "KC_PSCR", "KC_NO", "KC_PAST", "KC_P4", "KC_P5", "KC_P6", "KC_PPLS", "KC_TRNS",
+ "KC_TRNS", "KC_NO", "KC_NO", "S(KC_HOME)", "S(KC_END)", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "C(KC_BSPC)", "KC_PSLS", "KC_P1", "KC_P2", "KC_P3", "KC_PENT", "KC_TRNS",
+ "KC_TRNS", "KC_NO", "KC_NO", "LSG(KC_TAB)", "G(KC_TAB)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_RSFT", "MO(3)", "KC_PCMM", "KC_P0", "KC_PDOT", "KC_PEQL", "KC_TRNS"
+ ],
+ [
+ "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_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_TILD",
+ "KC_TRNS", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_LPRN", "C(KC_DEL)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_RPRN", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_TRNS",
+ "KC_TRNS", "KC_UNDS", "KC_PLUS", "KC_NO", "A(KC_TAB)", "MO(3)", "KC_LCTL", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGUP", "KC_PGDN", "KC_LCBR", "KC_RCBR", "KC_TRNS"
+ ],
+ [
+ "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_VOLU", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
+ "KC_NO", "QK_BOOT", "KC_SLEP", "KC_MSTP", "KC_MPLY", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "AG_TOGG", "KC_NO",
+ "KC_NO", "KC_NO", "KC_NO", "KC_MRWD", "KC_MFFD", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_VOLD", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
+ "KC_NO", "KC_NO", "KC_NO", "KC_MNXT", "KC_MNXT", "KC_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_TRNS", "KC_BRIU", "KC_BRID", "KC_NO", "KC_NO", "KC_NO"
+ ]
+ ]
+}
diff --git a/keyboards/handwired/dactyl_lightcycle/readme.md b/keyboards/handwired/dactyl_lightcycle/readme.md
new file mode 100644
index 00000000000..b351942f443
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/readme.md
@@ -0,0 +1,40 @@
+# Dactyl Lightcycle
+
+
+
+A handwired, split bodied, concave key-well, columnar keyboard.
+The *Dactyl Lightcycle* is a variation of the [Dactyl](/keyboards/handwired/dactyl/) keyboard, its differences are:
+1. Top (number) row removed
+2. Five key thumb cluster; one less than the *Dactyl's* six
+
+This modernised rendition of the *Dactyl Lightcycle* requires two Pro Micro controllers, rather than the *Dactyl's* original implementation of a micro controller and I/O expander.
+
+* Keyboard Maintainer: [Matt Adereth](https://github.com/adereth/)
+* Hardware Supported: 2x Pro Micro micro controller, or clone of
+* Hardware Availability: Case files available on [GitHub](https://github.com/adereth/dactyl-keyboard), file names beginning "lightcycle" apply
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/dactyl_lightcycle:default
+
+Flashing example for this keyboard:
+
+ make handwired/dactyl_lightcycle: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 keymap**: Press the key mapped to `QK_BOOT` if it is available
+
+## QMK Layouts
+
+The following [community layouts](/layouts/) are supported:
+| Layout | Diagram |
+| :---: | :---: |
+| Split_3x6_3 |  |
+| Split_3x5_3 |  |
diff --git a/keyboards/handwired/dactyl_lightcycle/rules.mk b/keyboards/handwired/dactyl_lightcycle/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/handwired/dactyl_maximus/info.json b/keyboards/handwired/dactyl_maximus/info.json
new file mode 100644
index 00000000000..424fde95622
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/info.json
@@ -0,0 +1,137 @@
+{
+ "keyboard_name": "Dactyl Maximus",
+ "manufacturer": "handwired",
+ "url": "",
+ "maintainer": "dunk2k",
+ "usb": {
+ "vid": "0x444D",
+ "pid": "0x3536",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "build": {
+ "lto": true
+ },
+ "matrix_pins": {
+ "cols": ["D0", "D4", "C6", "D7", "E6", "B4", "B5"],
+ "rows": ["F6", "F7", "B1", "B3", "B2", "B6"]
+ },
+ "diode_direction": "COL2ROW",
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "D1"
+ },
+ "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": [6, 0], "x": 12, "y": 0},
+ {"matrix": [6, 1], "x": 13, "y": 0},
+ {"matrix": [6, 2], "x": 14, "y": 0},
+ {"matrix": [6, 3], "x": 15, "y": 0},
+ {"matrix": [6, 4], "x": 16, "y": 0},
+ {"matrix": [6, 5], "x": 17, "y": 0},
+ {"matrix": [6, 6], "x": 18, "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": [7, 0], "x": 12, "y": 1},
+ {"matrix": [7, 1], "x": 13, "y": 1},
+ {"matrix": [7, 2], "x": 14, "y": 1},
+ {"matrix": [7, 3], "x": 15, "y": 1},
+ {"matrix": [7, 4], "x": 16, "y": 1},
+ {"matrix": [7, 5], "x": 17, "y": 1},
+ {"matrix": [7, 6], "x": 18, "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": [8, 0], "x": 12, "y": 2},
+ {"matrix": [8, 1], "x": 13, "y": 2},
+ {"matrix": [8, 2], "x": 14, "y": 2},
+ {"matrix": [8, 3], "x": 15, "y": 2},
+ {"matrix": [8, 4], "x": 16, "y": 2},
+ {"matrix": [8, 5], "x": 17, "y": 2},
+ {"matrix": [8, 6], "x": 18, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+
+ {"matrix": [9, 0], "x": 12, "y": 3},
+ {"matrix": [9, 1], "x": 13, "y": 3},
+ {"matrix": [9, 2], "x": 14, "y": 3},
+ {"matrix": [9, 3], "x": 15, "y": 3},
+ {"matrix": [9, 4], "x": 16, "y": 3},
+ {"matrix": [9, 5], "x": 17, "y": 3},
+ {"matrix": [9, 6], "x": 18, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+
+ {"matrix": [10, 1], "x": 13, "y": 4},
+ {"matrix": [10, 2], "x": 14, "y": 4},
+ {"matrix": [10, 3], "x": 15, "y": 4},
+ {"matrix": [10, 4], "x": 16, "y": 4},
+ {"matrix": [10, 5], "x": 17, "y": 4},
+ {"matrix": [10, 6], "x": 18, "y": 4},
+
+ {"matrix": [4, 6], "x": 7, "y": 5},
+ {"matrix": [5, 6], "x": 8, "y": 5},
+
+ {"matrix": [11, 0], "x": 10, "y": 5},
+ {"matrix": [10, 0], "x": 11, "y": 5},
+
+ {"matrix": [5, 3], "x": 6, "y": 6},
+ {"matrix": [5, 4], "x": 7, "y": 6},
+ {"matrix": [5, 5], "x": 8, "y": 6},
+
+ {"matrix": [11, 1], "x": 10, "y": 6},
+ {"matrix": [11, 2], "x": 11, "y": 6},
+ {"matrix": [11, 3], "x": 12, "y": 6},
+
+ {"matrix": [5, 0], "x": 6, "y": 7},
+ {"matrix": [5, 1], "x": 7, "y": 7},
+ {"matrix": [5, 2], "x": 8, "y": 7},
+
+ {"matrix": [11, 4], "x": 10, "y": 7},
+ {"matrix": [11, 5], "x": 11, "y": 7},
+ {"matrix": [11, 6], "x": 12, "y": 7}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_maximus/keymaps/default/keymap.c b/keyboards/handwired/dactyl_maximus/keymaps/default/keymap.c
new file mode 100644
index 00000000000..cfd95db563e
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/keymaps/default/keymap.c
@@ -0,0 +1,52 @@
+// Copyright 2021 Duncan Sutherland (https://github.com/dunk2k)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#define CUT C(KC_X)
+#define COPY C(KC_C)
+#define PSTE C(KC_V)
+#define UNDO C(KC_Z)
+#define REDO C(KC_Y)
+#define SALL C(KC_A)
+#define APP_N A(KC_TAB)
+#define APP_P LSA(KC_TAB)
+#define SLFT S(KC_HOME)
+#define SRGHT S(KC_END)
+#define APP_X A(KC_F4)
+#define TSKMG RCS(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ APP_P, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PSCR, APP_N,
+ SLFT, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, SRGHT,
+ COPY, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, PSTE,
+ CUT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, SALL,
+ UNDO, KC_LCTL, KC_LALT, KC_LGUI, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_RGUI, KC_RALT, KC_RCTL, REDO,
+ KC_HOME, KC_PGUP, KC_VOLU, KC_END,
+ MO(1), KC_SPC, KC_DEL, KC_BSPC, KC_ENT, MO(2),
+ KC_UP, KC_DOWN, KC_PGDN, KC_VOLD, KC_LEFT, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, TSKMG, APP_X, KC_SCRL, KC_INS, KC_PAUS, KC_NO, KC_NO, KC_P7, KC_P8, KC_P9, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_NUM, KC_TRNS,
+ KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_P0, KC_PDOT, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_RCTL,
+ KC_TRNS, KC_NO, KC_NO, KC_RSFT, KC_PENT, KC_LALT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_RGUI, KC_NO
+ ),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_ACL2, KC_ACL1, KC_ACL0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO, KC_SLEP, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_BTN1, KC_BTN2, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/handwired/dactyl_maximus/keymaps/via/keymap.c b/keyboards/handwired/dactyl_maximus/keymaps/via/keymap.c
new file mode 100644
index 00000000000..cfd95db563e
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/keymaps/via/keymap.c
@@ -0,0 +1,52 @@
+// Copyright 2021 Duncan Sutherland (https://github.com/dunk2k)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#define CUT C(KC_X)
+#define COPY C(KC_C)
+#define PSTE C(KC_V)
+#define UNDO C(KC_Z)
+#define REDO C(KC_Y)
+#define SALL C(KC_A)
+#define APP_N A(KC_TAB)
+#define APP_P LSA(KC_TAB)
+#define SLFT S(KC_HOME)
+#define SRGHT S(KC_END)
+#define APP_X A(KC_F4)
+#define TSKMG RCS(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ APP_P, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PSCR, APP_N,
+ SLFT, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, SRGHT,
+ COPY, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, PSTE,
+ CUT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, SALL,
+ UNDO, KC_LCTL, KC_LALT, KC_LGUI, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_RGUI, KC_RALT, KC_RCTL, REDO,
+ KC_HOME, KC_PGUP, KC_VOLU, KC_END,
+ MO(1), KC_SPC, KC_DEL, KC_BSPC, KC_ENT, MO(2),
+ KC_UP, KC_DOWN, KC_PGDN, KC_VOLD, KC_LEFT, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, TSKMG, APP_X, KC_SCRL, KC_INS, KC_PAUS, KC_NO, KC_NO, KC_P7, KC_P8, KC_P9, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_NUM, KC_TRNS,
+ KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_P0, KC_PDOT, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_RCTL,
+ KC_TRNS, KC_NO, KC_NO, KC_RSFT, KC_PENT, KC_LALT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_RGUI, KC_NO
+ ),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_ACL2, KC_ACL1, KC_ACL0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO, KC_SLEP, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_BTN1, KC_BTN2, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/handwired/dactyl_maximus/keymaps/via/rules.mk b/keyboards/handwired/dactyl_maximus/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/handwired/dactyl_maximus/readme.md b/keyboards/handwired/dactyl_maximus/readme.md
new file mode 100644
index 00000000000..d4c2d44def6
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/readme.md
@@ -0,0 +1,34 @@
+# Dactyl Maximus
+
+
+*Thanks to [unit-5370](https://github.com/unit-5370) for image*
+
+The largest [Dactyl](/keyboards/handwired/dactyl/) variation available from a Dactyl generator. This variation is electronically more similar to the [Dactyl (Pro Micro)](/keyboards/handwired/dactyl_promicro/) as it requires two micro controllers, one per half, instead of the *Dactyl's* original implementation of one microcontroller and an I/O expander.
+
+* Keyboard Maintainer: [Duncan Sutherland](https://github.com/dunk2k)
+* Hardware Supported: Pro Micro controller, of clone of
+* Case Files: [Dactyl Generator](https://ryanis.cool/dactyl/#original)
+
+'Keys' settings for *Dactyl Generator* link:
+* Number of Columns: 7
+* Use Number Row: true
+* Use Bottom Row: true
+* Thumb Key Count: 8
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/dactyl_maximus:default
+
+Flashing example for this keyboard:
+
+ make handwired/dactyl_maximus:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/handwired/dactyl_maximus/rules.mk b/keyboards/handwired/dactyl_maximus/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/frenchdev/info.json b/keyboards/handwired/frenchdev/info.json
index d5981aebd47..a22b06d4171 100644
--- a/keyboards/handwired/frenchdev/info.json
+++ b/keyboards/handwired/frenchdev/info.json
@@ -116,15 +116,15 @@
{"matrix": [1, 0], "x": 18, "y": 5.9},
{"matrix": [0, 0], "x": 19, "y": 5.9},
- {"matrix": [8, 3], "x": 2.25, "y": 7.5, "w": 1.5, "h": 2},
- {"matrix": [8, 4], "x": 3.75, "y": 7.5, "w": 1.5, "h": 2},
+ {"matrix": [8, 3], "x": 2.25, "y": 7.5, "w": 1.75, "h": 2},
+ {"matrix": [8, 4], "x": 4, "y": 7.5, "w": 1.75, "h": 2},
- {"matrix": [8, 5], "x": 5.25, "y": 7.5, "w": 1.5, "h": 2},
+ {"matrix": [8, 5], "x": 5.75, "y": 7.5, "w": 1.75, "h": 2},
- {"matrix": [7, 3], "x": 13.25, "y": 7.5, "w": 1.5, "h": 2},
- {"matrix": [7, 4], "x": 14.75, "y": 7.5, "w": 1.5, "h": 2},
+ {"matrix": [7, 3], "x": 12.5, "y": 7.5, "w": 1.75, "h": 2},
+ {"matrix": [7, 4], "x": 14.25, "y": 7.5, "w": 1.75, "h": 2},
- {"matrix": [7, 5], "x": 16.25, "y": 7.5, "w": 1.5, "h": 2}
+ {"matrix": [7, 5], "x": 16, "y": 7.5, "w": 1.75, "h": 2}
]
}
}
diff --git a/keyboards/handwired/itstleo9/info.json b/keyboards/handwired/itstleo9/info.json
new file mode 100644
index 00000000000..ba9de4d774f
--- /dev/null
+++ b/keyboards/handwired/itstleo9/info.json
@@ -0,0 +1,36 @@
+{
+ "manufacturer": "Its TLeo",
+ "keyboard_name": "ItsTleo9",
+ "maintainer": "Its TLeo",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0001",
+ "vid": "0x4954"
+ },
+ "community_layouts": ["ortho_3x3"],
+ "layouts": {
+ "LAYOUT_ortho_3x3": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/itstleo9/keymaps/default/keymap.c b/keyboards/handwired/itstleo9/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ea111ba6fea
--- /dev/null
+++ b/keyboards/handwired/itstleo9/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] = {
+ /*
+ * ┌───┬───┬───┐
+ * │ A │ B │ C │
+ * ├───┼───┼───┤
+ * │ D │ E │ F │
+ * ├───┼───┼───┤
+ * │ G │ H │ I │
+ * └───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_3x3(
+ KC_A, KC_B, KC_C,
+ KC_D, KC_E, KC_F,
+ KC_G, KC_H, KC_I
+ )
+};
diff --git a/keyboards/handwired/itstleo9/keymaps/via/keymap.c b/keyboards/handwired/itstleo9/keymaps/via/keymap.c
new file mode 100644
index 00000000000..ea111ba6fea
--- /dev/null
+++ b/keyboards/handwired/itstleo9/keymaps/via/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] = {
+ /*
+ * ┌───┬───┬───┐
+ * │ A │ B │ C │
+ * ├───┼───┼───┤
+ * │ D │ E │ F │
+ * ├───┼───┼───┤
+ * │ G │ H │ I │
+ * └───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_3x3(
+ KC_A, KC_B, KC_C,
+ KC_D, KC_E, KC_F,
+ KC_G, KC_H, KC_I
+ )
+};
diff --git a/keyboards/handwired/itstleo9/keymaps/via/rules.mk b/keyboards/handwired/itstleo9/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/handwired/itstleo9/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/handwired/itstleo9/promicro/info.json b/keyboards/handwired/itstleo9/promicro/info.json
new file mode 100644
index 00000000000..4cbc1050c0c
--- /dev/null
+++ b/keyboards/handwired/itstleo9/promicro/info.json
@@ -0,0 +1,7 @@
+{
+ "development_board": "promicro",
+ "matrix_pins": {
+ "cols": ["D1", "D0", "D4"],
+ "rows": ["F4", "F5", "F6"]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/itstleo9/promicro/rules.mk b/keyboards/handwired/itstleo9/promicro/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/itstleo9/promicro/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/itstleo9/readme.md b/keyboards/handwired/itstleo9/readme.md
new file mode 100644
index 00000000000..233407b3931
--- /dev/null
+++ b/keyboards/handwired/itstleo9/readme.md
@@ -0,0 +1,37 @@
+# itstleo9
+
+Handwired 3x3 macropad built with Pro Micro compatible microcontrollers
+
+* Keyboard Maintainer: [ItsTLeo](https://github.com/ItsTLeo)
+* Hardware Supported: RP2040/ATmega32U4 Pro Micro
+* Hardware Availability: [RP2040](https://aliexpress.com/item/1005005616524430.html), [ATmega32U4](https://aliexpress.com/item/32888212119.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/itstleo9/promicro:default
+ make handwired/itstleo9/rp2040:default
+
+Flashing example for this keyboard:
+
+ make handwired/itstleo9/promicro:default:flash
+ make handwired/itstleo9/rp2040: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). Dont know how to make a handwire keyboard, check it out [SkottoKeebs handwire tutorial](https://www.youtube.com/watch?v=hjml-K-pV4E&pp=ygUTaGFuZHdpcmUgYSBtYWNyb3BhZA%3D%3D)
+
+## Matrix pin (RP2040 ver)
+
+* **cols** : GP10 , GP11 , GP12
+* **rows** : GP21 , GP20 , GP19
+
+## Matrix pin (Promicro ver)
+
+* **cols** : D1 , D0 , D4
+* **rows** : F4 , F5 , F6
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (top left key) and plug in the keyboard
+* **Physical reset button**: Double-press reset button
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/handwired/itstleo9/rp2040/info.json b/keyboards/handwired/itstleo9/rp2040/info.json
new file mode 100644
index 00000000000..0272150df12
--- /dev/null
+++ b/keyboards/handwired/itstleo9/rp2040/info.json
@@ -0,0 +1,9 @@
+{
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+
+ "matrix_pins": {
+ "cols": ["GP10", "GP11", "GP12"],
+ "rows": ["GP21", "GP20", "GP19"]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/itstleo9/rp2040/rules.mk b/keyboards/handwired/itstleo9/rp2040/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/itstleo9/rp2040/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scottoalp/info.json b/keyboards/handwired/scottokeebs/scottoalp/info.json
new file mode 100644
index 00000000000..d6262e11e64
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/info.json
@@ -0,0 +1,76 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoAlp",
+ "maintainer": "joe-scotto",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ // 4, 5, 6, 7, 8, 9, A3, A2, A1, A0
+ "cols": ["D4", "C6", "D7", "E6", "B4", "B5", "F4", "F5", "F6", "F7"],
+
+ // 15, 14, 16, 10
+ "rows": ["B1", "B3", "B2", "B6"]
+ },
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0007",
+ "vid": "0x534B"
+ },
+ "layouts": {
+ "LAYOUT_ortho_3x10_5": {
+ "layout": [
+ // Row 1
+ { "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 },
+
+ // Row 2
+ { "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 },
+
+ // Row 3
+ { "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 },
+
+ // Row 4
+ { "matrix": [3, 1], "x": 1, "y": 3 },
+ { "matrix": [3, 2], "x": 2, "y": 3 },
+ { "matrix": [3, 4], "x": 4, "y": 3 },
+ { "matrix": [3, 6], "x": 6, "y": 3 },
+ { "matrix": [3, 7], "x": 7, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/keymap.c
new file mode 100644
index 00000000000..88b4a4b0b43
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x10_5(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LGUI, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_ortho_3x10_5(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_ortho_3x10_5(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_ortho_3x10_5(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/keymap.c
new file mode 100644
index 00000000000..dfe688267e3
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/keymap.c
@@ -0,0 +1,174 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Tap dance declarations
+enum {
+ TD_LCTL_ESC_SPOTLIGHT_EMOJI,
+ TD_LALT_ESC_WINDOWS_EMOJI
+};
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI) :
+ case TD(TD_LALT_ESC_WINDOWS_EMOJI) :
+ case LGUI_T(KC_SPC) :
+ case LT(1, KC_TAB) :
+ case LT(2, KC_ENT) :
+ return 200;
+ default:
+ return TAPPING_TERM;
+ }
+};
+
+// Begin quad TD
+typedef enum {
+ TD_NONE,
+ TD_UNKNOWN,
+ TD_SINGLE_HOLD,
+ TD_SINGLE_TAP,
+ TD_DOUBLE_TAP,
+ TD_TRIPLE_TAP
+} td_state_t;
+
+typedef struct {
+ bool is_press_action;
+ td_state_t state;
+} td_tap_t;
+
+// Create an instance of 'td_tap_t' for the 'x' tap dance.
+static td_tap_t xtap_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+td_state_t cur_dance(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ return TD_SINGLE_TAP;
+ } else {
+ return TD_SINGLE_HOLD;
+ }
+ } else if (state->count == 2) {
+ return TD_DOUBLE_TAP;
+ } else if (state->count == 3) {
+ return TD_TRIPLE_TAP;
+ }
+
+ return TD_UNKNOWN;
+}
+
+void td_lctl_esc_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
+ case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
+ default: break;
+ }
+}
+
+void td_lctl_esc_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_lalt_esc_windowr_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
+ case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
+ default: break;
+ }
+}
+
+void td_lalt_esc_windowr_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+ // Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ [TD_LCTL_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lctl_esc_spotlight_emoji_finished, td_lctl_esc_spotlight_emoji_reset),
+ [TD_LALT_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lalt_esc_windowr_emoji_finished, td_lalt_esc_windowr_emoji_reset),
+};
+// For the x tap dance. Put it here so it can be used in any keymap
+void x_finished(tap_dance_state_t *state, void *user_data);
+void x_reset(tap_dance_state_t *state, void *user_data);
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x10_5(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_ortho_3x10_5(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_ortho_3x10_5(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_ortho_3x10_5(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [4] = LAYOUT_ortho_3x10_5(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
+ ),
+ [5] = LAYOUT_ortho_3x10_5(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
+ ),
+ [6] = LAYOUT_ortho_3x10_5(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(7), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
+ ),
+ [7] = LAYOUT_ortho_3x10_5(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(0),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/rules.mk
new file mode 100644
index 00000000000..e5ddcae8d92
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scottoalp/readme.md b/keyboards/handwired/scottokeebs/scottoalp/readme.md
new file mode 100644
index 00000000000..07c7d889de7
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/readme.md
@@ -0,0 +1,27 @@
+# ScottoAlp
+
+
+
+A 35-key ortholinear keyboard with a 3u spacebar and is compatible with both MX or Alps. Case files available [here](https://github.com/joe-scotto/scottokeebs).
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: ATmega32U4
+* Hardware Availability: [Amazon](https://amazon.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/jscotto/scottoalp:default
+
+Flashing example for this keyboard:
+
+ make handwired/jscotto/scottoalp:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoalp/rules.mk b/keyboards/handwired/scottokeebs/scottoalp/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scottocmd/config.h b/keyboards/handwired/scottokeebs/scottocmd/config.h
new file mode 100644
index 00000000000..a168f0ef218
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// OLED
+#define OLED_DISPLAY_128X64
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottocmd/info.json b/keyboards/handwired/scottokeebs/scottocmd/info.json
new file mode 100644
index 00000000000..d945b70ce9c
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/info.json
@@ -0,0 +1,89 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoCMD",
+ "maintainer": "joe-scotto",
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true
+ },
+ "build": {
+ "lto": true
+ },
+ "matrix_pins": {
+ // TX0, RX1, 4, 5, 6, 7, 8, 9, A3, A2, A1
+ "cols": ["D3", "D2", "D4", "C6", "D7", "E6", "B4", "B5", "F4", "F5", "F6"],
+ // A0, 15, 14, 16, 10
+ "rows": ["F7", "B1", "B3", "B2", "B6"]
+ },
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0005",
+ "vid": "0x534B"
+ },
+ "bootmagic": {
+ "matrix": [1, 0]
+ },
+ "layouts": {
+ "LAYOUT_ortho_4_3x10_4": {
+ "layout": [
+ // Row 1 (Macros)
+ {"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},
+
+ // Row 2
+ {"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},
+
+ // Row 3
+ {"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},
+
+ // Row 4
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3},
+ {"matrix": [3, 10], "x": 10, "y": 3},
+
+ // Row 5
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+ {"matrix": [4, 9], "x": 9, "y": 4},
+ {"matrix": [4, 10], "x": 10, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/keymap.c
new file mode 100644
index 00000000000..dbb5cbc4a97
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4_3x10_4(
+ KC_LCTL, KC_2, KC_3, 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_ENT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_ortho_4_3x10_4(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TAB, KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_ENT, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_ortho_4_3x10_4(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_ENT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_ortho_4_3x10_4(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_ENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/keymap.c
new file mode 100644
index 00000000000..c196c3b1e90
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/keymap.c
@@ -0,0 +1,511 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+#include
+char wpm_str[10];
+
+// Tap Dance declarations
+enum {
+ TD_ESC_SPOTLIGHT_EMOJI,
+ TD_ESC_WINDOWS_EMOJI
+};
+
+void td_esc_spotlight_emoji (tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ tap_code(KC_ESC);
+ } else if (state->count == 2) {
+ tap_code16(G(KC_SPC));
+ } else if (state->count == 3) {
+ tap_code16(C(G(KC_SPC)));
+ }
+}
+
+void td_esc_windows_emoji (tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ tap_code(KC_ESC);
+ } else if (state->count == 2) {
+ tap_code(KC_LGUI);
+ } else if (state->count == 3) {
+ tap_code16(G(KC_DOT));
+ }
+};
+
+ // Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ [TD_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN(td_esc_spotlight_emoji),
+ [TD_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN(td_esc_windows_emoji)
+};
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TD(TD_ESC_SPOTLIGHT_EMOJI) :
+ case TD(TD_ESC_WINDOWS_EMOJI) :
+ case LGUI_T(KC_SPC) :
+ case LT(1, KC_TAB) :
+ case LT(2, KC_ENT) :
+ return 200;
+ default:
+ return TAPPING_TERM;
+ }
+};
+
+// Layer Names
+enum layer_names {
+ _MAC_DEFAULT,
+ _MAC_CODE,
+ _MAC_NUM,
+ _MAC_FUNC,
+ _WIN_DEFAULT,
+ _WIN_CODE,
+ _WIN_NUM,
+ _WIN_FUNC
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4_3x10_4(
+ KC_LCTL, KC_2, KC_3, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_ENT, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_ortho_4_3x10_4(
+ KC_LCTL, KC_2, KC_3, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ KC_TAB, KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_ENT, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_ortho_4_3x10_4(
+ KC_LCTL, KC_2, KC_3, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_ENT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_ortho_4_3x10_4(
+ KC_LCTL, KC_2, KC_3, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4),
+ KC_ENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [4] = LAYOUT_ortho_4_3x10_4(
+ KC_1, KC_2, KC_3, TD(TD_ESC_WINDOWS_EMOJI),
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_ENT, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
+ ),
+ [5] = LAYOUT_ortho_4_3x10_4(
+ KC_1, KC_2, KC_3, TD(TD_ESC_WINDOWS_EMOJI),
+ KC_TAB, KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_ENT, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS
+ ),
+ [6] = LAYOUT_ortho_4_3x10_4(
+ KC_1, KC_2, KC_3, TD(TD_ESC_WINDOWS_EMOJI),
+ KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_ENT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(7), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS
+ ),
+ [7] = LAYOUT_ortho_4_3x10_4(
+ KC_1, KC_2, KC_3, TD(TD_ESC_WINDOWS_EMOJI),
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(0),
+ KC_ENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS
+ )
+};
+
+// OLED
+#ifdef OLED_ENABLE
+// WPM responsiveness
+#define IDLE_FRAMES 5 // How many idle frames in animation
+#define IDLE_SPEED 20 // Speed at which animation idles
+#define TAP_FRAMES 2 // How many tapping frames
+#define TAP_SPEED 40 // WPM to trigger Bongo
+#define ANIMATION_FRAME_DURATION 200 // MS duration of each frame
+#define ANIMATION_SIZE 256 // Number of bytes per animation frame
+
+uint32_t anim_timer = 0;
+uint32_t anim_sleep = 0;
+uint8_t current_idle_frame = 0;
+uint8_t current_tap_frame = 0;
+
+static void render_animation(void) {
+ static const char PROGMEM idle[IDLE_FRAMES][ANIMATION_SIZE] = {
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02,
+ 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04,
+ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04,
+ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08,
+ 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22,
+ 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04,
+ 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22,
+ 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04,
+ 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04,
+ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ };
+ static const char PROGMEM prep[][ANIMATION_SIZE] = {
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04,
+ 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64,
+ 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03,
+ 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02,
+ 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02,
+ 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ };
+ static const char PROGMEM tap[TAP_FRAMES][ANIMATION_SIZE] = {
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04,
+ 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64,
+ 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02,
+ 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c,
+ 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04,
+ 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04,
+ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03,
+ 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02,
+ 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61,
+ 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00
+ }
+ };
+
+ void animation_phase(void) {
+ // Set cursor to draw from the bottom up
+ oled_set_cursor(128, 0);
+
+ if (get_current_wpm() <= IDLE_SPEED) {
+ current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
+ oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIMATION_SIZE);
+ }
+
+ // Start prep image
+ if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) {
+ oled_write_raw_P(prep[0], ANIMATION_SIZE);
+ }
+
+ // Start tap animation
+ if (get_current_wpm() >= TAP_SPEED) {
+ current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
+ oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIMATION_SIZE);
+ }
+ }
+ if (get_current_wpm() != 000) {
+ oled_on(); // Enables OLED on any alpha keypress
+
+ if (timer_elapsed32(anim_timer) > ANIMATION_FRAME_DURATION) {
+ anim_timer = timer_read32();
+ animation_phase();
+ }
+
+ anim_sleep = timer_read32();
+ } else {
+ if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) {
+ oled_off();
+ } else {
+ if (timer_elapsed32(anim_timer) > ANIMATION_FRAME_DURATION) {
+ anim_timer = timer_read32();
+ animation_phase();
+ }
+ }
+ }
+}
+
+// Draw to OLED
+bool oled_task_user(void) {
+ // Caps lock text
+ led_t led_state = host_keyboard_led_state();
+ oled_set_cursor(0,1);
+ oled_write_P(led_state.caps_lock ? PSTR(" Caps Lock "): PSTR(" ScottoCMD "), false);
+
+ //WPM text
+ oled_set_cursor(0, 9);
+ oled_write(get_u8_str(get_current_wpm(), '0'), false);
+ oled_write_P(PSTR(" WPM"), false);
+
+ static const char PROGMEM logos[][256] = {
+ // Apple
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x78, 0x7c, 0x3e, 0x1f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe,
+ 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0x0e, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x1f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f,
+ 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ },
+
+ // Windows
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
+ 0xf8, 0xf8, 0x00, 0x80, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xb8, 0x9f, 0x9f, 0x9f, 0x9f, 0x8f, 0x9f, 0x9f, 0x9f, 0x1f, 0x3f, 0x3f,
+ 0x07, 0xc0, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x03, 0xe0,
+ 0xfc, 0xfc, 0xf9, 0xf9, 0xf9, 0xf3, 0xf3, 0xf3, 0xfb, 0xfb, 0xf9, 0x19, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x07, 0x01, 0x00, 0x1e, 0x1f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ },
+
+ // Code
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xc0, 0xe0, 0xf0, 0x78, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0,
+ 0xf8, 0xfc, 0x3f, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x3c, 0x78, 0xf0, 0xe0, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x07, 0x0f, 0x3e, 0x3c, 0x38, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xfc, 0x7e, 0x1f, 0x07,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x3e, 0x0f, 0x07, 0x03, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+
+ // Number
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x1f,
+ 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x1e,
+ 0x1e, 0x1e, 0xbe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x1e, 0x1e, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x78, 0x78,
+ 0x78, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00,
+ 0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ },
+
+ // Function
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0,
+ 0xf8, 0xfc, 0xfe, 0xfe, 0xff, 0x9f, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0x8f, 0x3f,
+ 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf8, 0xfc, 0xfe, 0x7f, 0x3f, 0x0f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3e,
+ 0x1e, 0x0c, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+
+ // Caps Lock
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
+ 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f, 0x3f, 0x3f, 0x7f, 0x7f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0xf8, 0xf0, 0xe0, 0xe0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ };
+
+ // Layer images
+ oled_set_cursor(32, 0);
+ switch (get_highest_layer(layer_state)) {
+ case _MAC_DEFAULT :
+ oled_write_raw_P(logos[0], sizeof(logos[0]));
+ break;
+ case _WIN_DEFAULT :
+ oled_write_raw_P(logos[1], sizeof(logos[1]));
+ break;
+ case _MAC_CODE :
+ case _WIN_CODE :
+ oled_write_raw_P(logos[2], sizeof(logos[2]));
+ break;
+ case _MAC_NUM :
+ case _WIN_NUM :
+ oled_write_raw_P(logos[3], sizeof(logos[3]));
+ break;
+ case _MAC_FUNC :
+ case _WIN_FUNC :
+ oled_write_raw_P(logos[4], sizeof(logos[4]));
+ break;
+ }
+
+ // Render Bongo Cat
+ render_animation();
+
+ return false;
+}
+#endif
diff --git a/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/rules.mk
new file mode 100644
index 00000000000..bcee933e75e
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/rules.mk
@@ -0,0 +1,2 @@
+WPM_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scottocmd/readme.md b/keyboards/handwired/scottokeebs/scottocmd/readme.md
new file mode 100644
index 00000000000..f5c5f3306c3
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/readme.md
@@ -0,0 +1,27 @@
+# ScottoCMD
+
+
+
+A 40-key ortholinear keyboard with a 6.25u spacebar, 4 dedicated function keys and 0.96" 128x64 OLED display. Case files available [here](https://github.com/joe-scotto/scottokeebs).
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: ATmega32U4, 0.96" 128x64 I2C OLED
+* Hardware Availability: [Amazon](https://amazon.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/scottokeebs/scottocmd:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scottocmd: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 (1,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/handwired/scottokeebs/scottocmd/rules.mk b/keyboards/handwired/scottokeebs/scottocmd/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scottocmd/scottocmd.c b/keyboards/handwired/scottokeebs/scottocmd/scottocmd.c
new file mode 100644
index 00000000000..9027b500288
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/scottocmd.c
@@ -0,0 +1,39 @@
+/*
+Copyright 2023 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ return OLED_ROTATION_90; // flips the display 180 degrees if offhand
+}
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+
+ // Default OLED code
+ led_t led_state = host_keyboard_led_state();
+ oled_set_cursor(0,7);
+ oled_write_P(led_state.caps_lock ? PSTR(" Caps Lock "): PSTR(" ScottoCMD "), false);
+
+ return false;
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/handwired/t111/info.json b/keyboards/handwired/t111/info.json
index f4ecf44eabc..f25b0790988 100644
--- a/keyboards/handwired/t111/info.json
+++ b/keyboards/handwired/t111/info.json
@@ -96,7 +96,7 @@
{"matrix": [2, 10], "x": 10.75, "y": 3.5},
{"matrix": [3, 10], "x": 11.75, "y": 3.5},
{"matrix": [4, 10], "x": 12.75, "y": 3.5},
- {"matrix": [5, 10], "x": 13.75, "y": 2.5, "w": 1.5, "h": 2},
+ {"matrix": [5, 10], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
{"matrix": [6, 10], "x": 15.5, "y": 3.5},
{"matrix": [7, 10], "x": 16.5, "y": 3.5},
diff --git a/keyboards/hazel/bad_wings/keymaps/miketronic/config.h b/keyboards/hazel/bad_wings/keymaps/miketronic/config.h
new file mode 100644
index 00000000000..1f5c059c004
--- /dev/null
+++ b/keyboards/hazel/bad_wings/keymaps/miketronic/config.h
@@ -0,0 +1,16 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+
+# define TAPPING_TERM 160
+# define TAPPING_TERM_PER_KEY
+# define HOLD_ON_OTHER_KEY_PRESS
+# define QUICK_TAP_TERM TAPPING_TERM / 2
+# define QUICK_TAP_TERM_PER_KEY
+
+# define CIRQUE_PINNACLE_TAP_ENABLE
+# define CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE
+# define CIRQUE_PINNACLE_ATTENUATION_4X
+# define CIRQUE_PINNACLE_POSITION_MODE CIRQUE_PINNACLE_RELATIVE_MODE
+//# define CIRQUE_DEVICE_GESTURES_SCROLL_ENABLE
diff --git a/keyboards/hazel/bad_wings/keymaps/miketronic/keymap.c b/keyboards/hazel/bad_wings/keymaps/miketronic/keymap.c
new file mode 100644
index 00000000000..3ebcc79fded
--- /dev/null
+++ b/keyboards/hazel/bad_wings/keymaps/miketronic/keymap.c
@@ -0,0 +1,258 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+
+
+/*
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, 1, 2, 3);
+}
+
+
+ [0] = LAYOUT_split_3x5_3(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, \
+ KC_Z, LGUI_T(KC_X), LALT_T(KC_C), KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \
+ KC_LCTL, OSL(1), OSM(MOD_LSFT), KC_SPC, LT(2, KC_BSPC), KC_ENT
+ ),
+ [1] = LAYOUT_split_3x5_3(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RBRC, KC_RCBR, KC_RPRN, KC_RABK, KC_NO, \
+ KC_GRV, KC_TILD, KC_UNDS, KC_EQL, KC_NO, KC_LBRC, KC_LCBR, KC_LPRN, KC_LABK, KC_BACKSLASH, \
+ KC_NO, KC_NO, KC_PLUS, KC_MINS, KC_NO, KC_NO, KC_NO, KC_COLN, KC_DOT, KC_SCLN, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_split_3x5_3(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_PIPE, KC_NO, \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DOT, KC_NO, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_split_3x5_3(
+ KC_ESC, KC_F1, KC_F4, KC_F7, KC_F10, KC_NO, KC_HOME, KC_UP, KC_END, KC_BSPC, \
+ KC_TAB, KC_F2, KC_F5, KC_F8, KC_F11, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT, \
+ KC_NO, KC_F3, KC_F6, KC_F9, KC_F12, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+*/
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* WORKMAN
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ Q │ D │ R │ W │ B │ │ J │ F │ U │ P │ BSPC│
+ * │ ESC │ │ │ │ SYM │ │ SYM │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ A │ S │ H ┃ T ┃ G │ │ Y ┃ N ┃ E │ O │ I │
+ * │SHIFT│ │ ┃ EX ┃ │ │ ┃ ┃ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ Z │ X │ M │ C │ V │ │ K │ L │ SPC │ SPC │ENTER│
+ * │ FN │ CTRL│ OS │ ALT │LOWER│ │RAISE│ │ , │ . │ │
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_WM] = LAYOUT_split_3x5_3_wrapper (
+ _____________WORKMAN_310_001_L_____________, _____________WORKMAN_310_001_R_____________,
+ _____________WORKMAN_310_002_L_____________, _____________WORKMAN_310_002_R_____________,
+ _____________WORKMAN_310_003_L_____________, _____________WORKMAN_310_003_R_____________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+ [_QW] = LAYOUT_split_3x5_3_wrapper (
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+
+
+ /* LOWER
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ () │ [] │ /\ │ │ │ │ │ 7 │ 8 │ 9 │ │
+ * │ │ <> │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ @ # │ & % │ ┃ ┃ │ │ . ┃ 4 ┃ 5 │ 6 │ UP │
+ * │ │ │ ┃ ┃ │ │ENTER┃ ┃ │ │RIGHT│
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ 0 │ 1 │ 2 │ 3 │ DOWN│
+ * │ │ │ │ │LOWER│ │ │ │ 0 │ │ LEFT│
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_LOWER] = LAYOUT_split_3x5_3_wrapper (
+ _______________LOWER_310_L1________________, _______________LOWER_310_R1________________,
+ _______________LOWER_310_L2________________, _______________LOWER_310_R2________________,
+ _______________LOWER_310_L3________________, _______________LOWER_310_R3________________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+
+
+ /* RAISE
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ BOOT│DEBUG│ │ │ MAKE│ │ │ F7 │ F8 │ F9 │ F10 │
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ │ RGB │ RGB ┃ RGB ┃ RGB │ │ _ ┃ F4 ┃ F5 │ F6 │ F11 │
+ * │ │ TOG │ MOD ┃ HUI ┃ HUD │ │ - ┃ ┃ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ │ RGB │ RGB │ RGB │ RGB │ │ │ F1 │ F2 │ F3 │ F12 │
+ * │ │ SAI │ SAD │ VAI │ VAD │ │RAISE│ │ │ │ │
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_RAISE] = LAYOUT_split_3x5_3_wrapper (
+ _______________RAISE_310_L1________________, _______________RAISE_310_R1________________,
+ _______________RAISE_310_L2________________, _______________RAISE_310_R2________________,
+ _______________RAISE_310_L3________________, _______________RAISE_310_R3________________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+
+
+ /* EXTRAS
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ ! │ │ │ │ │ │ │ /\ | () | [] | ; │
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ │ │ ┃EXTRA┃ │ │ ┃ @ # ┃ & % | │ ' │
+ * │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ , │ . │ ? │
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_EX] = LAYOUT_split_3x5_3_wrapper (
+ ______________EXTRAS_310_L1________________, ______________EXTRAS_310_R1________________,
+ ______________EXTRAS_310_L2________________, ______________EXTRAS_310_R2________________,
+ ______________EXTRAS_310_L3________________, ______________EXTRAS_310_R3________________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+
+
+ /* FUNCTION
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │COPY │CLIP │ SS │ │ │ │ │ /\ │ UP │ │ DEL │
+ * │PASTE│ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ TAB │ M05 │ M06 ┃ M07 ┃ M08 │ │ ┃ LEFT┃ DOWN│RIGHT│ UP │
+ * │ │ │ ┃ ┃ │ │ ┃ ┃ │ │RIGHT│
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ │ M01 │ M02 │ M03 │ M04 │ │ │ │ , │ . │DOWN │
+ * │ FN │ │ │ │ │ │ │ │ │ │LEFT │
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_FN] = LAYOUT_split_3x5_3_wrapper (
+ _____________FUNCTION_310_L1_______________, _____________FUNCTION_310_R1_______________,
+ _____________FUNCTION_310_L2_______________, _____________FUNCTION_310_R2_______________,
+ _____________FUNCTION_310_L3_______________, _____________FUNCTION_310_R3_______________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+
+
+ /* SYMBOLS
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ $ │ ^ │ < │ > │ │ │ │ | │ [ │ ] │ - │
+ * │ │ │ │ │ SYMB│ │ SYMB│ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ % │ : │ ; ┃ + ┃ = │ │ ┃ ┃ ( │ ) │ _ │
+ * │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ & │ ' │ " │ * │ # │ │ ! │ ? │ / │ \ │ @ │
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_SYMB] = LAYOUT_split_3x5_3_wrapper (
+ KC_DLR, KC_CIRC, KC_LABK, KC_RABK, XXXX, XXXX, KC_PIPE, KC_LBRC, KC_RBRC, KC_MINS,
+ KC_PERC, KC_COLN, KC_SCLN, KC_PLUS, KC_EQL, XXXX, XXXX, KC_LPRN, KC_RPRN, KC_UNDS,
+ KC_AMPR, KC_QUOT, KC_DQUO, KC_ASTR, KC_HASH, KC_EXLM, KC_QUES, KC_SLSH, KC_BSLS, KC_AT,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+};
+
+
+bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_A):
+ // Do not force the mod-tap key press to be handled as a modifier
+ // if any other key was pressed while the mod-tap key is held down.
+ return false;
+ case TEX:
+ return false;
+ case CTRLX:
+ return false;
+ case FNZ:
+ return false;
+ case MGUI:
+ return false;
+ case VLOWER:
+ return false;
+ case KRAISE:
+ return false;
+ default:
+ // Force the dual-role key press to be handled as a modifier if any
+ // other key was pressed while the mod-tap key is held down.
+ return true;
+ }
+}
+
+
+#ifdef AUDIO_ENABLE
+float leader_start_song[][2] = SONG(ONE_UP_SOUND);
+float leader_succeed_song[][2] = SONG(ALL_STAR);
+float leader_fail_song[][2] = SONG(RICK_ROLL);
+#endif
+
+void matrix_scan_user(void);
+
+void leader_start_user(void) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(leader_start_song);
+#endif
+}
+
+bool did_leader_succeed;
+
+void leader_end_user(void) {
+ did_leader_succeed = false;
+
+ if (leader_sequence_one_key(KC_E)) {
+ SEND_STRING(SS_LCTL(SS_LSFT("t")));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_E, KC_D)) {
+ SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_A, KC_T)) {
+ SEND_STRING("@guidehouse.com");
+ did_leader_succeed = true;
+ }
+
+
+#ifdef AUDIO_ENABLE
+ if (did_leader_succeed) {
+ PLAY_SONG(leader_succeed_song);
+ } else {
+ PLAY_SONG(leader_fail_song);
+ }
+#endif
+}
+
diff --git a/keyboards/hazel/bad_wings/keymaps/miketronic/rules.mk b/keyboards/hazel/bad_wings/keymaps/miketronic/rules.mk
new file mode 100644
index 00000000000..72c338c1574
--- /dev/null
+++ b/keyboards/hazel/bad_wings/keymaps/miketronic/rules.mk
@@ -0,0 +1,31 @@
+# Common feature for all keyboards
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+EXTRAKEY_ENABLE = yes # Audio control and System control
+TAP_DANCE_ENABLE = yes # Tap Dance keys
+NKRO_ENABLE = yes # Enable N-Key Rollover
+MACROS_ENABLED = yes
+
+# Keyboard specific
+MOUSEKEY_ENABLE = yes # Mouse keys
+CAPS_WORD_ENABLE = yes
+KEY_OVERRIDE_ENABLE = yes
+LEADER_ENABLE = yes
+
+
+ LTO_ENABLE = no # Enabled this causes longer build time, but smaller file.
+ AUTO_SHIFT_ENABLE = no
+ UNICODE_ENABLE = no # Unicode
+ CONSOLE_ENABLE = no # Console for debug
+ COMMAND_ENABLE = no # Commands for debug and configuration
+ RGBLIGHT_ENABLE = no
+ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend (it uses the same timer as BACKLIGHT_ENABLE)
+ AUDIO_ENABLE = no # Audio output on port C6
+ MIDI_ENABLE = no # MIDI support
+ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+ GRAVE_ESC_ENABLE = no
+ SPACE_CADET_ENABLE = no
+ COMBO_ENABLE = no
+ OLED_ENABLE = no
+ ENCODER_ENABLE = no
+ ENCODER_MAP_ENABLE = no
diff --git a/keyboards/holyswitch/lightweight65/info.json b/keyboards/holyswitch/lightweight65/info.json
index 438fb5fe897..a6252d27b5e 100644
--- a/keyboards/holyswitch/lightweight65/info.json
+++ b/keyboards/holyswitch/lightweight65/info.json
@@ -23,8 +23,14 @@
"command": false,
"nkro": true,
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_65_ansi_blocker"
+ },
+ "community_layouts": [
+ "65_ansi_blocker"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_65_ansi_blocker": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c b/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c
index bac1c8d4bca..a5e4a91ea81 100644
--- a/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c
+++ b/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c
@@ -17,14 +17,14 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_65_ansi_blocker(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
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_END,
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_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_65_ansi_blocker(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c b/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c
index bac1c8d4bca..a5e4a91ea81 100644
--- a/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c
+++ b/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c
@@ -17,14 +17,14 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_65_ansi_blocker(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
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_END,
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_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_65_ansi_blocker(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/jaykeeb/kamigakushi/info.json b/keyboards/jaykeeb/kamigakushi/info.json
index 21f0be63fa5..a421019a4a5 100644
--- a/keyboards/jaykeeb/kamigakushi/info.json
+++ b/keyboards/jaykeeb/kamigakushi/info.json
@@ -15,7 +15,7 @@
},
"indicators": {
"caps_lock": "GP17",
- "on_state": 1
+ "on_state": 0
},
"rgblight": {
"led_count": 2,
diff --git a/keyboards/jaykeeb/sebelas/info.json b/keyboards/jaykeeb/sebelas/info.json
new file mode 100644
index 00000000000..ac4202d820a
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/info.json
@@ -0,0 +1,424 @@
+{
+ "manufacturer": "Alabahuy",
+ "keyboard_name": "Sebelas",
+ "maintainer": "Alabahuy",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP25", "GP0", "GP15", "GP10", "GP9", "GP8", "GP7", "GP6", "GP5", "GP4", "GP2"],
+ "rows": ["GP11", "GP12", "GP13", "GP1", "GP16"]
+ },
+ "indicators": {
+ "caps_lock": "GP14",
+ "on_state": 0
+ },
+ "ws2812": {
+ "pin": "GP3",
+ "driver": "vendor"
+ },
+ "rgblight": {
+ "led_count": 1,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0767",
+ "vid": "0x414C"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Delete", "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, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+ {"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, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "\\", "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": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 7], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "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, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+ {"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, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 7], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_split_bs": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Delete", "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, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+ {"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, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 7], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "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, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+ {"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, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "\u2190", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_tsangan_split_bs": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Delete", "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, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+ {"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, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "\u2190", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/jaykeeb/sebelas/keymaps/default/keymap.c b/keyboards/jaykeeb/sebelas/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4a525e7bd39
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Alabahuy
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_65_ansi_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/jaykeeb/sebelas/keymaps/via/keymap.c b/keyboards/jaykeeb/sebelas/keymaps/via/keymap.c
new file mode 100644
index 00000000000..4a525e7bd39
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/keymaps/via/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Alabahuy
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_65_ansi_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/jaykeeb/sebelas/keymaps/via/rules.mk b/keyboards/jaykeeb/sebelas/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/jaykeeb/sebelas/matrix_diagram.md b/keyboards/jaykeeb/sebelas/matrix_diagram.md
new file mode 100644
index 00000000000..24cf49725b2
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Jaykeeb Sebelas
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│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 │2D │1E │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2E │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+│40 │41 │42 │47 │4A │4B │ │4C │4D │4E │
+└────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+┌────────┐
+│30 │ 2.25u LShift
+└────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┐
+│40 │41 │42 │47 │4B │ Blocker Tsangan
+└─────┴───┴─────┴───────────────────────────┴─────┘
+```
diff --git a/keyboards/jaykeeb/sebelas/readme.md b/keyboards/jaykeeb/sebelas/readme.md
new file mode 100644
index 00000000000..e44042b8640
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/readme.md
@@ -0,0 +1,27 @@
+# SEBELAS
+
+
+
+PCB Replacement for TGR910
+
+* Keyboard Maintainer: [Alabahuy](https://github.com/Alabahuy)
+* Hardware Supported: Sebelas PCB, RP2040
+* Hardware Availability: Private GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jaykeeb/sebelas:default
+
+Flashing example for this keyboard:
+
+ make jaykeeb/sebelas: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/jaykeeb/sebelas/rules.mk b/keyboards/jaykeeb/sebelas/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.c b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.c
new file mode 100644
index 00000000000..e217adcf09e
--- /dev/null
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.c
@@ -0,0 +1,72 @@
+// Copyright 2021-2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/**
+ * @file custom_shift_keys.c
+ * @brief Custom Shift Keys implementation
+ *
+ * For full documentation, see
+ *
+ */
+
+#include "custom_shift_keys.h"
+
+bool process_custom_shift_keys(uint16_t keycode, keyrecord_t *record) {
+ static uint16_t registered_keycode = KC_NO;
+
+ // If a custom shift key is registered, then this event is either releasing
+ // it or manipulating another key at the same time. Either way, we release
+ // the currently registered key.
+ if (registered_keycode != KC_NO) {
+ unregister_code16(registered_keycode);
+ registered_keycode = KC_NO;
+ }
+
+ if (record->event.pressed) { // Press event.
+ const uint8_t mods = get_mods();
+#ifndef NO_ACTION_ONESHOT
+ if ((mods | get_weak_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT) {
+#else
+ if ((mods | get_weak_mods()) & MOD_MASK_SHIFT) { // Shift is held.
+#endif // NO_ACTION_ONESHOT
+ // Continue default handling if this is a tap-hold key being held.
+ if ((IS_QK_MOD_TAP(keycode) || IS_QK_LAYER_TAP(keycode)) && record->tap.count == 0) {
+ return true;
+ }
+
+ // Search for a custom shift key whose keycode is `keycode`.
+ for (int i = 0; i < NUM_CUSTOM_SHIFT_KEYS; ++i) {
+ if (keycode == custom_shift_keys[i].keycode) {
+ registered_keycode = custom_shift_keys[i].shifted_keycode;
+ if (IS_QK_MODS(registered_keycode) && // Should keycode be shifted?
+ (QK_MODS_GET_MODS(registered_keycode) & MOD_LSFT) != 0) {
+ register_code16(registered_keycode); // If so, press it directly.
+ } else {
+ // Otherwise cancel shift mods, press the key, and restore mods.
+ del_weak_mods(MOD_MASK_SHIFT);
+#ifndef NO_ACTION_ONESHOT
+ del_oneshot_mods(MOD_MASK_SHIFT);
+#endif // NO_ACTION_ONESHOT
+ unregister_mods(MOD_MASK_SHIFT);
+ register_code16(registered_keycode);
+ set_mods(mods);
+ }
+ return false;
+ }
+ }
+ }
+ }
+
+ return true; // Continue with default handling.
+}
\ No newline at end of file
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.h b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.h
new file mode 100644
index 00000000000..7d1ee13a459
--- /dev/null
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.h
@@ -0,0 +1,99 @@
+// Copyright 2021-2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/**
+ * @file custom_shift_keys.h
+ * @brief Custom shift keys: customize what keycode is produced when shifted.
+ *
+ * Overview
+ * --------
+ *
+ * This library implements custom shift keys, keys where you can customize
+ * what keycode is produced when shifted.
+ *
+ * Step 1: In your keymap.c, define a table of custom shift keys like
+ *
+ * #include "features/custom_shift_keys.h"
+ *
+ * const custom_shift_key_t custom_shift_keys[] = {
+ * {KC_DOT , KC_QUES}, // Shift . is ?
+ * {KC_COMM, KC_EXLM}, // Shift , is !
+ * {KC_MINS, KC_EQL }, // Shift - is =
+ * {KC_COLN, KC_SCLN}, // Shift : is ;
+ * };
+ *
+ * Each row defines one key. The first field is the keycode as it appears in
+ * your layout and determines what is typed normally. The second entry is what
+ * you want the key to type when shifted.
+ *
+ * Step 2: Handle custom shift keys from your `process_record_user` function as
+ *
+ * bool process_record_user(uint16_t keycode, keyrecord_t* record) {
+ * if (!process_custom_shift_keys(keycode, record)) { return false; }
+ * // Your macros ...
+ *
+ * return true;
+ * }
+ *
+ * Step 3: add `features/custom_shift_keys.c` to your rules.mk as
+ *
+ * SRC += features/custom_shift_keys.c
+ *
+ *
+ * For full documentation, see
+ *
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Custom shift key entry. The `keycode` field is the keycode as it appears in
+ * your layout and determines what is typed normally. The `shifted_keycode` is
+ * what you want the key to type when shifted.
+ */
+typedef struct {
+ uint16_t keycode;
+ uint16_t shifted_keycode;
+} custom_shift_key_t;
+
+/** Table of custom shift keys. */
+extern const custom_shift_key_t custom_shift_keys[];
+/** Number of entries in the `custom_shift_keys` table. */
+extern uint8_t NUM_CUSTOM_SHIFT_KEYS;
+
+/**
+ * Handler function for custom shift keys.
+ *
+ * In keymap.c, call this function from your `process_record_user` function as
+ *
+ * #include "features/custom_shift_keys.h"
+ *
+ * bool process_record_user(uint16_t keycode, keyrecord_t* record) {
+ * if (!process_custom_shift_keys(keycode, record)) { return false; }
+ * // Your macros ...
+ *
+ * return true;
+ * }
+ */
+bool process_custom_shift_keys(uint16_t keycode, keyrecord_t *record);
+
+#ifdef __cplusplus
+}
+#endif
\ No newline at end of file
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
index 619231a6ab2..cb6fff1a0fd 100644
--- a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
@@ -14,6 +14,7 @@
* along with this program. If not, see .
*/
#include QMK_KEYBOARD_H
+#include "features/custom_shift_keys.h"
#define FN_ESC LT(_FUNC, KC_ESC)
@@ -29,6 +30,10 @@ enum gentleman_keycodes {
FUNC,
};
+const custom_shift_key_t custom_shift_keys[] = {{KC_ESC, KC_TILD}};
+
+uint8_t NUM_CUSTOM_SHIFT_KEYS = sizeof(custom_shift_keys) / sizeof(custom_shift_key_t);
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_65_ansi_rwkl_split_bs(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_TRNS,
@@ -78,6 +83,9 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_custom_shift_keys(keycode, record)) {
+ return false;
+ }
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
@@ -90,7 +98,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
}
-
+
return true;
}
-
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
index b7c0fb5c5d4..feebedc544e 100644
--- a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
@@ -10,5 +10,5 @@
## Building and flashing
```
-make gentleman65:briianpowell:flash
+make jkeys_design/gentleman65:briianpowell:flash
```
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/rules.mk b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/rules.mk
new file mode 100644
index 00000000000..ac89d139028
--- /dev/null
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/rules.mk
@@ -0,0 +1 @@
+SRC += features/custom_shift_keys.c
diff --git a/keyboards/jkeys_design/gentleman65/rules.mk b/keyboards/jkeys_design/gentleman65/rules.mk
index f81996d7021..bb89340fbf1 100644
--- a/keyboards/jkeys_design/gentleman65/rules.mk
+++ b/keyboards/jkeys_design/gentleman65/rules.mk
@@ -11,4 +11,4 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
RGB_MATRIX_ENABLE = no
-ENCODER_ENABLE = yes
\ No newline at end of file
+ENCODER_ENABLE = yes
diff --git a/keyboards/keebio/chocopad/config.h b/keyboards/keebio/chocopad/config.h
deleted file mode 100644
index 14c93278a61..00000000000
--- a/keyboards/keebio/chocopad/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#pragma once
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-#define RGBLIGHT_EFFECT_BREATHING
-#define RGBLIGHT_EFFECT_RAINBOW_MOOD
-#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#define RGBLIGHT_EFFECT_SNAKE
-#define RGBLIGHT_EFFECT_KNIGHT
-#define RGBLIGHT_EFFECT_CHRISTMAS
-#define RGBLIGHT_EFFECT_STATIC_GRADIENT
-#define RGBLIGHT_EFFECT_RGB_TEST
-#define RGBLIGHT_EFFECT_ALTERNATING
-#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#define RGBLED_NUM 4
diff --git a/keyboards/keebio/chocopad/info.json b/keyboards/keebio/chocopad/info.json
index 44d846da74a..f9d48d6422e 100644
--- a/keyboards/keebio/chocopad/info.json
+++ b/keyboards/keebio/chocopad/info.json
@@ -1,27 +1,10 @@
{
- "keyboard_name": "Chocopad",
"manufacturer": "Keebio",
- "url": "",
- "maintainer": "qmk",
+ "url": "https://keeb.io",
+ "maintainer": "nooges",
"usb": {
- "vid": "0xCB10",
- "pid": "0x1144",
- "device_version": "1.0.0"
+ "vid": "0xCB10"
},
- "matrix_pins": {
- "cols": ["D2", "D4", "F6", "F5"],
- "rows": ["D7", "E6", "B3", "B2"]
- },
- "diode_direction": "COL2ROW",
- "backlight": {
- "pin": "B5",
- "levels": 6
- },
- "ws2812": {
- "pin": "D3"
- },
- "processor": "atmega32u4",
- "bootloader": "caterina",
"community_layouts": ["ortho_4x4"],
"layouts": {
"LAYOUT_ortho_4x4": {
diff --git a/keyboards/keebio/chocopad/keymaps/default/keymap.c b/keyboards/keebio/chocopad/keymaps/default/keymap.c
index b89246adf03..8c83d72cfe6 100644
--- a/keyboards/keebio/chocopad/keymaps/default/keymap.c
+++ b/keyboards/keebio/chocopad/keymaps/default/keymap.c
@@ -1,3 +1,6 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#include QMK_KEYBOARD_H
#define _BASE 0
diff --git a/keyboards/keebio/chocopad/keymaps/khord/rules.mk b/keyboards/keebio/chocopad/keymaps/khord/rules.mk
deleted file mode 100644
index a81250cdf6d..00000000000
--- a/keyboards/keebio/chocopad/keymaps/khord/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-RGBLIGHT_ENABLE = yes
-
diff --git a/keyboards/keebio/chocopad/keymaps/via/config.h b/keyboards/keebio/chocopad/keymaps/via/config.h
new file mode 100644
index 00000000000..1dcf49c979a
--- /dev/null
+++ b/keyboards/keebio/chocopad/keymaps/via/config.h
@@ -0,0 +1,7 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_PINWHEEL
+#define RGB_MATRIX_DEFAULT_SPD 48
diff --git a/keyboards/keebio/chocopad/keymaps/via/keymap.c b/keyboards/keebio/chocopad/keymaps/via/keymap.c
new file mode 100644
index 00000000000..18de1ad43d5
--- /dev/null
+++ b/keyboards/keebio/chocopad/keymaps/via/keymap.c
@@ -0,0 +1,20 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ortho_4x4(
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PERC,
+ KC_P1, KC_P2, KC_P3, KC_EQL,
+ KC_P0, MO(1), KC_PDOT, KC_PENT
+ ),
+ [1] = LAYOUT_ortho_4x4(
+ RGB_TOG, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_PGUP, KC_HOME, KC_UP, KC_END,
+ KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT,
+ RGB_MOD, _______, KC_VOLD, KC_VOLU
+ )
+};
diff --git a/keyboards/keebio/chocopad/keymaps/via/rules.mk b/keyboards/keebio/chocopad/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/keebio/chocopad/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/keebio/chocopad/readme.md b/keyboards/keebio/chocopad/readme.md
index 3cdb3b3b9c8..67c875d923b 100644
--- a/keyboards/keebio/chocopad/readme.md
+++ b/keyboards/keebio/chocopad/readme.md
@@ -9,6 +9,6 @@ Hardware Availability: [Keebio](https://keeb.io)
Make example for this keyboard (after setting up your build environment):
- make keebio/chocopad:default
+ make keebio/chocopad/rev1:default
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/keebio/chocopad/rev1/info.json b/keyboards/keebio/chocopad/rev1/info.json
new file mode 100644
index 00000000000..fafea9dce06
--- /dev/null
+++ b/keyboards/keebio/chocopad/rev1/info.json
@@ -0,0 +1,41 @@
+{
+ "keyboard_name": "Chocopad Rev. 1",
+ "usb": {
+ "pid": "0x1144",
+ "device_version": "1.0.0"
+ },
+ "development_board": "promicro",
+ "matrix_pins": {
+ "cols": ["D2", "D4", "F6", "F5"],
+ "rows": ["D7", "E6", "B3", "B2"]
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "mousekey": true,
+ "backlight": true,
+ "rgblight": true
+ },
+ "backlight": {
+ "pin": "B5",
+ "levels": 6
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "rgblight": {
+ "led_count": 4,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ }
+}
diff --git a/keyboards/keebio/chocopad/chocopad.c b/keyboards/keebio/chocopad/rev1/rev1.c
similarity index 84%
rename from keyboards/keebio/chocopad/chocopad.c
rename to keyboards/keebio/chocopad/rev1/rev1.c
index b52c8608ca2..e362bb3483c 100644
--- a/keyboards/keebio/chocopad/chocopad.c
+++ b/keyboards/keebio/chocopad/rev1/rev1.c
@@ -1,3 +1,6 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#include "quantum.h"
void eeconfig_init_kb(void) {
diff --git a/keyboards/keebio/chocopad/rev1/rules.mk b/keyboards/keebio/chocopad/rev1/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/keebio/chocopad/rev1/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/keebio/chocopad/rev2/config.h b/keyboards/keebio/chocopad/rev2/config.h
new file mode 100644
index 00000000000..366d639bf0b
--- /dev/null
+++ b/keyboards/keebio/chocopad/rev2/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+
+// RGB Matrix
+#define RGB_MATRIX_LED_COUNT 20
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/keebio/chocopad/rev2/info.json b/keyboards/keebio/chocopad/rev2/info.json
new file mode 100644
index 00000000000..cb29d0e83cb
--- /dev/null
+++ b/keyboards/keebio/chocopad/rev2/info.json
@@ -0,0 +1,93 @@
+{
+ "keyboard_name": "Chocopad Rev. 2",
+ "usb": {
+ "pid": "0x2144",
+ "device_version": "2.0.0"
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP20", "GP19", "GP29", "GP0"],
+ "rows": ["GP28", "GP18", "GP17", "GP16"]
+ },
+ "ws2812": {
+ "pin": "GP15",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ {"matrix": [0, 0], "flags": 4, "x": 0, "y": 0},
+ {"flags": 2, "x": 37, "y": 0},
+ {"matrix": [0, 1], "flags": 4, "x": 75, "y": 0},
+ {"matrix": [0, 2], "flags": 4, "x": 149, "y": 0},
+ {"flags": 2, "x": 187, "y": 0},
+ {"matrix": [0, 3], "flags": 4, "x": 224, "y": 0},
+ {"matrix": [1, 3], "flags": 4, "x": 224, "y": 21},
+ {"matrix": [1, 2], "flags": 4, "x": 149, "y": 21},
+ {"matrix": [1, 1], "flags": 4, "x": 75, "y": 21},
+ {"matrix": [1, 0], "flags": 4, "x": 0, "y": 21},
+ {"matrix": [2, 0], "flags": 4, "x": 0, "y": 43},
+ {"matrix": [2, 1], "flags": 4, "x": 75, "y": 43},
+ {"matrix": [2, 2], "flags": 4, "x": 149, "y": 43},
+ {"matrix": [2, 3], "flags": 4, "x": 224, "y": 43},
+ {"matrix": [3, 3], "flags": 4, "x": 224, "y": 64},
+ {"flags": 2, "x": 187, "y": 64},
+ {"matrix": [3, 2], "flags": 4, "x": 149, "y": 64},
+ {"matrix": [3, 1], "flags": 4, "x": 75, "y": 64},
+ {"flags": 2, "x": 37, "y": 64},
+ {"matrix": [3, 0], "flags": 4, "x": 0, "y": 64}
+ ]
+ }
+}
diff --git a/keyboards/keebio/chocopad/rev2/rules.mk b/keyboards/keebio/chocopad/rev2/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/keebio/chocopad/rev2/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/keebio/chocopad/rules.mk b/keyboards/keebio/chocopad/rules.mk
deleted file mode 100644
index ce70b7c8f23..00000000000
--- a/keyboards/keebio/chocopad/rules.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/keebio/iris/keymaps/mattly/config.h b/keyboards/keebio/iris/keymaps/mattly/config.h
index 1680f3d8f8a..a3ee1ec898e 100644
--- a/keyboards/keebio/iris/keymaps/mattly/config.h
+++ b/keyboards/keebio/iris/keymaps/mattly/config.h
@@ -22,15 +22,16 @@ along with this program. If not, see .
#undef RGBLED_NUM
#define RGBLIGHT_EFFECT_BREATHING
-#define RGBLIGHT_EFFECT_RAINBOW_MOOD
-#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#define RGBLIGHT_EFFECT_SNAKE
-#define RGBLIGHT_EFFECT_KNIGHT
-#define RGBLIGHT_EFFECT_CHRISTMAS
-#define RGBLIGHT_EFFECT_STATIC_GRADIENT
-#define RGBLIGHT_EFFECT_RGB_TEST
-#define RGBLIGHT_EFFECT_ALTERNATING
-#define RGBLIGHT_EFFECT_TWINKLE
+#undef RGBLIGHT_EFFECT_RAINBOW_MOOD
+#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#undef RGBLIGHT_EFFECT_KNIGHT
+#undef RGBLIGHT_EFFECT_CHRISTMAS
+#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
+#undef RGBLIGHT_EFFECT_RGB_TEST
+#undef RGBLIGHT_EFFECT_ALTERNATING
+#undef RGBLIGHT_EFFECT_TWINKLE
+#undef RGBLIGHT_DEFAULT_MODE
+#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_BREATHING + 2)
#define RGBLED_NUM 12
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
diff --git a/keyboards/keebio/iris/keymaps/mattly/keymap.c b/keyboards/keebio/iris/keymaps/mattly/keymap.c
index f592b4f25ad..0f7121b7be2 100644
--- a/keyboards/keebio/iris/keymaps/mattly/keymap.c
+++ b/keyboards/keebio/iris/keymaps/mattly/keymap.c
@@ -11,7 +11,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_CAPS, A_CTL, S_ALT, D_GUI, F_SFT, KC_G, KC_H, J_SFT, K_GUI, L_ALT, MINSCTL, KC_QUOT,
NAVLOCK, KC_Z, KC_X, KC_C, KC_V, KC_B, ENT_SYM, TAB_NUM, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
ESC_HYP, TAB_NUM, SPC_SFT, SPC_SFT, BSP_SYM, DEL_WRP
- ),
+),
[_OVER_WIN] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -30,31 +30,39 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[_NAVNUM] = LAYOUT(
- XXXXXXX, XXXXXXX, XXXXXXX, M_NXWIN, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLSH, KC_ASTR, KC_MINS, KC_PLUS, XXXXXXX,
- XXXXXXX, M_NAVFW, M_BWORD, KC_UP, M_FWORD, KC_PGUP, KC_DLR, KC_P7, KC_P8, KC_P9, KC_DOT, XXXXXXX,
+ M_PVWIN, M_NXWIN, XXXXXXX, M_BPARA, XXXXXXX, KC_HOME, XXXXXXX, KC_SLSH, KC_ASTR, KC_MINS, KC_PLUS, XXXXXXX,
+ M_PVTAB, M_NAVFW, M_BWORD, KC_UP, M_FWORD, KC_PGUP, KC_DLR, KC_P7, KC_P8, KC_P9, KC_DOT, XXXXXXX,
XXXXXXX, M_NAVBK, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_PERC, KC_P4, KC_P5, KC_P6, KC_EQL, XXXXXXX,
- _______, M_PVTAB, KC_HOME, M_PVWIN, KC_END, M_NXTAB, _______, _______, KC_P0, KC_P1, KC_P2, KC_P3, KC_COMM, _______,
+ _______, M_NAVFW, M_BLINE, M_NPARA, M_ELINE, KC_END, _______, _______, KC_P0, KC_P1, KC_P2, KC_P3, KC_COMM, _______,
_______, _______, _______, _______, _______, KC_P0
),
[_NAVNUM_WIN] = LAYOUT(
- _______, _______, _______, W_NXWIN, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, W_NAVFW, W_BWORD, _______, W_FWORD, _______, _______, _______, _______, _______, _______, _______,
_______, W_NAVBK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, W_PVTAB, _______, W_PVWIN, _______, W_NXTAB, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
+ [_GAME] = LAYOUT(
+ KC_BSPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SCLN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_MINS, KC_QUOT,
+ KC_ESC, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_NAVNUM), MO(_SYMBOL), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_SPC, KC_LGUI, KC_LSFT
+ ),
+
[_FUNCT] = LAYOUT(
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- QK_BOOT, XXXXXXX, XXXXXXX, M_NXWIN, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_K, QK_BOOT,
- DB_TOGG, XXXXXXX, M_PVTAB, M_PVWIN, M_NXTAB, XXXXXXX, XXXXXXX, TOG_WIN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- KC_MUTE, KC_VOLD, KC_VOLU, KC_MRWD, KC_MFFD, KC_MPLY, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ QK_BOOT, M_NAVFW, XXXXXXX, M_NXWIN, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_M_P, RGB_M_B, XXXXXXX, QK_BOOT,
+ DB_TOGG, M_NAVBK, M_PVTAB, M_PVWIN, M_NXTAB, XXXXXXX, XXXXXXX, TOG_WIN, TOG_GAM, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_MUTE, KC_VOLD, KC_VOLU, KC_MRWD, KC_MFFD, KC_MPLY, _______, _______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD,
_______, _______, _______, _______, _______, _______
),
[_FUNCT_WIN] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, W_NXWIN, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, W_PVTAB, W_PVWIN, W_NXTAB, _______, _______, _______, _______, _______, _______, _______,
+ _______, W_NAVFW, _______, W_NXWIN, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, W_NAVBK, W_PVTAB, W_PVWIN, W_NXTAB, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
diff --git a/keyboards/keebio/iris/keymaps/via/keymap.c b/keyboards/keebio/iris/keymaps/via/keymap.c
index 7f793333cc5..c2753da2a45 100644
--- a/keyboards/keebio/iris/keymaps/via/keymap.c
+++ b/keyboards/keebio/iris/keymaps/via/keymap.c
@@ -71,8 +71,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
-# if defined(KEYBOARD_keebio_iris_rev7)
- [_MAIN] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_PGDN, KC_PGUP) },
+# if defined(KEYBOARD_keebio_iris_rev7) || defined(KEYBOARD_keebio_iris_rev8)
+ [_MAIN] = { ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGDN, KC_PGUP) },
[_FN1] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_HOME, KC_END), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_HOME, KC_END) },
[_FN2] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
[_FN3] = { ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(KC_UP, KC_DOWN), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT), ENCODER_CCW_CW(KC_UP, KC_DOWN) },
diff --git a/keyboards/keebio/iris/rev8/config.h b/keyboards/keebio/iris/rev8/config.h
new file mode 100644
index 00000000000..a49b48d14ba
--- /dev/null
+++ b/keyboards/keebio/iris/rev8/config.h
@@ -0,0 +1,23 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define SPLIT_HAND_PIN GP4
+#define USB_VBUS_PIN GP8
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP12
+#define SERIAL_USART_RX_PIN GP13
+#define SERIAL_USART_PIN_SWAP
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+#define I2C_DRIVER I2CD2
+#define I2C1_SDA_PIN GP10
+#define I2C1_SCL_PIN GP11
+
+// RGB Matrix
+#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+#define RGB_MATRIX_LED_COUNT 68
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/keebio/iris/rev8/info.json b/keyboards/keebio/iris/rev8/info.json
new file mode 100644
index 00000000000..198e4fd56f5
--- /dev/null
+++ b/keyboards/keebio/iris/rev8/info.json
@@ -0,0 +1,242 @@
+{
+ "keyboard_name": "Iris Rev. 8",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {"pin_a": "GP14", "pin_b": "GP15"},
+ {"pin_a": "GP26", "pin_b": "GP25"}
+ ]
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP9"
+ },
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP29", "GP27", "GP6", "GP5"],
+ "rows": ["GP0", "GP1", "GP7", "GP16", "GP28"]
+ },
+ "split": {
+ "enabled": true,
+ "matrix_pins": {
+ "right": {
+ "cols": ["GP27", "GP28", "GP3", "GP6", "GP29", "GP16"],
+ "rows": ["GP22", "GP19", "GP18", "GP17", "GP7"]
+ }
+ },
+ "transport": {
+ "sync_matrix_state": true
+ }
+ },
+ "processor": "RP2040",
+ "usb": {
+ "device_version": "8.0.0",
+ "pid": "0x8256"
+ },
+ "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": [5, 5], "x": 9, "y": 0.25},
+ {"matrix": [5, 4], "x": 10, "y": 0.125},
+ {"matrix": [5, 3], "x": 11, "y": 0},
+ {"matrix": [5, 2], "x": 12, "y": 0.125},
+ {"matrix": [5, 1], "x": 13, "y": 0.375},
+ {"matrix": [5, 0], "x": 14, "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": [6, 5], "x": 9, "y": 1.25},
+ {"matrix": [6, 4], "x": 10, "y": 1.125},
+ {"matrix": [6, 3], "x": 11, "y": 1},
+ {"matrix": [6, 2], "x": 12, "y": 1.125},
+ {"matrix": [6, 1], "x": 13, "y": 1.375},
+ {"matrix": [6, 0], "x": 14, "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": [7, 5], "x": 9, "y": 2.25},
+ {"matrix": [7, 4], "x": 10, "y": 2.125},
+ {"matrix": [7, 3], "x": 11, "y": 2},
+ {"matrix": [7, 2], "x": 12, "y": 2.125},
+ {"matrix": [7, 1], "x": 13, "y": 2.375},
+ {"matrix": [7, 0], "x": 14, "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": [4, 5], "x": 6.15, "y": 3.75},
+
+ {"matrix": [9, 5], "x": 7.85, "y": 3.75},
+ {"matrix": [8, 5], "x": 9, "y": 3.25},
+ {"matrix": [8, 4], "x": 10, "y": 3.125},
+ {"matrix": [8, 3], "x": 11, "y": 3},
+ {"matrix": [8, 2], "x": 12, "y": 3.125},
+ {"matrix": [8, 1], "x": 13, "y": 3.375},
+ {"matrix": [8, 0], "x": 14, "y": 3.375},
+
+ {"matrix": [4, 2], "x": 3.5, "y": 4.25},
+ {"matrix": [4, 3], "x": 4.5, "y": 4.375},
+ {"matrix": [4, 4], "x": 5.6, "y": 4.75},
+
+ {"matrix": [9, 4], "x": 8.4, "y": 4.75},
+ {"matrix": [9, 3], "x": 9.5, "y": 4.375},
+ {"matrix": [9, 2], "x": 10.5, "y": 4.25}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "WS2812",
+ "split_count": [34, 34],
+ "max_brightness": 120,
+ "layout": [
+ {"matrix": [0,0], "flags":4, "x":0, "y":5},
+ {"flags":2, "x":8, "y":5},
+ {"matrix": [0,1], "flags":4, "x":16, "y":5},
+ {"matrix": [0,2], "flags":4, "x":32, "y":2},
+ {"flags":2, "x":40, "y":1},
+ {"matrix": [0,3], "flags":4, "x":48, "y":0},
+ {"matrix": [0,4], "flags":4, "x":64, "y":5},
+ {"flags":2, "x":72, "y":3},
+ {"matrix": [0,5], "flags":4, "x":80, "y":3},
+
+ {"matrix": [1,5], "flags":4, "x":80, "y":17},
+ {"matrix": [1,4], "flags":4, "x":64, "y":15},
+ {"matrix": [1,3], "flags":4, "x":48, "y":13},
+ {"matrix": [1,2], "flags":4, "x":32, "y":15},
+ {"matrix": [1,1], "flags":4, "x":16, "y":18},
+ {"matrix": [1,0], "flags":4, "x":0, "y":18},
+
+ {"matrix": [2,0], "flags":4, "x":0, "y":32},
+ {"matrix": [2,1], "flags":4, "x":16, "y":32},
+ {"matrix": [2,2], "flags":4, "x":32, "y":28},
+ {"matrix": [2,3], "flags":4, "x":48, "y":27},
+ {"matrix": [2,4], "flags":4, "x":64, "y":28},
+ {"matrix": [2,5], "flags":4, "x":80, "y":30},
+
+ {"matrix": [3,5], "flags":4, "x":80, "y":43},
+ {"matrix": [3,4], "flags":4, "x":64, "y":42},
+ {"matrix": [3,3], "flags":4, "x":48, "y":40},
+ {"flags":2, "x":40, "y":50},
+ {"matrix": [3,2], "flags":4, "x":32, "y":42},
+ {"matrix": [3,1], "flags":4, "x":16, "y":45},
+ {"flags":2, "x":8, "y":43},
+ {"matrix": [3,0], "flags":4, "x":0, "y":45},
+
+ {"matrix": [4,5], "flags":4, "x":98, "y":52},
+ {"matrix": [4,4], "flags":4, "x":90, "y":64},
+ {"flags":2, "x":80, "y":58},
+ {"matrix": [4,3], "flags":4, "x":72, "y":58},
+ {"matrix": [4,2], "flags":4, "x":56, "y":47},
+
+ {"matrix": [5,0], "flags":4, "x":224, "y":5},
+ {"flags":2, "x":216, "y":5},
+ {"matrix": [5,1], "flags":4, "x":208, "y":5},
+ {"matrix": [5,2], "flags":4, "x":192, "y":2},
+ {"flags":2, "x":184, "y":1},
+ {"matrix": [5,3], "flags":4, "x":176, "y":0},
+ {"matrix": [5,4], "flags":4, "x":160, "y":5},
+ {"flags":2, "x":152, "y":3},
+ {"matrix": [5,5], "flags":4, "x":144, "y":3},
+
+ {"matrix": [6,5], "flags":4, "x":144, "y":17},
+ {"matrix": [6,4], "flags":4, "x":160, "y":15},
+ {"matrix": [6,3], "flags":4, "x":176, "y":13},
+ {"matrix": [6,2], "flags":4, "x":192, "y":15},
+ {"matrix": [6,1], "flags":4, "x":208, "y":18},
+ {"matrix": [6,0], "flags":4, "x":224, "y":18},
+
+ {"matrix": [7,0], "flags":4, "x":224, "y":32},
+ {"matrix": [7,1], "flags":4, "x":208, "y":32},
+ {"matrix": [7,2], "flags":4, "x":192, "y":28},
+ {"matrix": [7,3], "flags":4, "x":176, "y":27},
+ {"matrix": [7,4], "flags":4, "x":160, "y":28},
+ {"matrix": [7,5], "flags":4, "x":144, "y":30},
+
+ {"matrix": [8,5], "flags":4, "x":144, "y":43},
+ {"matrix": [8,4], "flags":4, "x":160, "y":42},
+ {"matrix": [8,3], "flags":4, "x":176, "y":40},
+ {"flags":2, "x":184, "y":50},
+ {"matrix": [8,2], "flags":4, "x":192, "y":42},
+ {"matrix": [8,1], "flags":4, "x":208, "y":45},
+ {"flags":2, "x":216, "y":43},
+ {"matrix": [8,0], "flags":4, "x":224, "y":45},
+
+ {"matrix": [9,2], "flags":4, "x":168, "y":47},
+ {"matrix": [9,3], "flags":4, "x":152, "y":58},
+ {"flags":2, "x":144, "y":58},
+ {"matrix": [9,4], "flags":4, "x":134, "y":64},
+ {"matrix": [9,5], "flags":4, "x":126, "y":52},
+ ]
+ }
+}
diff --git a/keyboards/keebio/iris/rev8/rev8.c b/keyboards/keebio/iris/rev8/rev8.c
new file mode 100644
index 00000000000..a6f0ac00a0f
--- /dev/null
+++ b/keyboards/keebio/iris/rev8/rev8.c
@@ -0,0 +1,36 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// 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) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ } else if (index == 2) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 3) {
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+ return false;
+}
+#endif
diff --git a/keyboards/keebio/iris/rev8/rules.mk b/keyboards/keebio/iris/rev8/rules.mk
new file mode 100644
index 00000000000..161ec22b16e
--- /dev/null
+++ b/keyboards/keebio/iris/rev8/rules.mk
@@ -0,0 +1 @@
+SERIAL_DRIVER = vendor
diff --git a/keyboards/keebio/nyquist/keymaps/default/keymap.c b/keyboards/keebio/nyquist/keymaps/default/keymap.c
index a06cde95553..8bf16240fb1 100644
--- a/keyboards/keebio/nyquist/keymaps/default/keymap.c
+++ b/keyboards/keebio/nyquist/keymaps/default/keymap.c
@@ -1,5 +1,7 @@
-#include QMK_KEYBOARD_H
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -38,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT(
+[_QWERTY] = LAYOUT_ortho_5x12(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
@@ -59,7 +61,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_COLEMAK] = LAYOUT(
+[_COLEMAK] = LAYOUT_ortho_5x12(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
@@ -80,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_DVORAK] = LAYOUT(
+[_DVORAK] = LAYOUT_ortho_5x12(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL,
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
@@ -101,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = LAYOUT(
+[_LOWER] = LAYOUT_ortho_5x12(
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
@@ -122,7 +124,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = LAYOUT(
+[_RAISE] = LAYOUT_ortho_5x12(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
@@ -143,9 +145,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_ADJUST] = LAYOUT(
+[_ADJUST] = LAYOUT_ortho_5x12(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- _______, QK_BOOT , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, KC_DEL,
+ _______, QK_BOOT, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, KC_DEL,
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
@@ -225,3 +227,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return true;
}
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
+ [_COLEMAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
+ [_DVORAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
+ [_LOWER] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD), ENCODER_CCW_CW(KC_MNXT, KC_MPRV) },
+ [_RAISE] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
+ [_ADJUST] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }
+};
+#endif
diff --git a/keyboards/keebio/nyquist/keymaps/default/rules.mk b/keyboards/keebio/nyquist/keymaps/default/rules.mk
index 1e3cebb1451..ee325681483 100644
--- a/keyboards/keebio/nyquist/keymaps/default/rules.mk
+++ b/keyboards/keebio/nyquist/keymaps/default/rules.mk
@@ -1 +1 @@
-RGBLIGHT_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keebio/nyquist/keymaps/default_4x12/keymap.c b/keyboards/keebio/nyquist/keymaps/default_4x12/keymap.c
index ac270cdc50b..5d284d97871 100644
--- a/keyboards/keebio/nyquist/keymaps/default_4x12/keymap.c
+++ b/keyboards/keebio/nyquist/keymaps/default_4x12/keymap.c
@@ -1,3 +1,6 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#include QMK_KEYBOARD_H
enum layer_names {
diff --git a/keyboards/keebio/nyquist/keymaps/via/keymap.c b/keyboards/keebio/nyquist/keymaps/via/keymap.c
index 5d986e69a0a..6d37f4f9b5c 100644
--- a/keyboards/keebio/nyquist/keymaps/via/keymap.c
+++ b/keyboards/keebio/nyquist/keymaps/via/keymap.c
@@ -44,3 +44,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
+ [1] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD), ENCODER_CCW_CW(KC_MNXT, KC_MPRV) },
+ [2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
+ [3] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }
+};
+#endif
diff --git a/keyboards/keebio/nyquist/keymaps/via/rules.mk b/keyboards/keebio/nyquist/keymaps/via/rules.mk
index 43061db1dd4..1189f4ad192 100644
--- a/keyboards/keebio/nyquist/keymaps/via/rules.mk
+++ b/keyboards/keebio/nyquist/keymaps/via/rules.mk
@@ -1,2 +1,3 @@
VIA_ENABLE = yes
-LTO_ENABLE = yes
\ No newline at end of file
+LTO_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keebio/nyquist/rev4/config.h b/keyboards/keebio/nyquist/rev4/config.h
new file mode 100644
index 00000000000..a1dc02997f6
--- /dev/null
+++ b/keyboards/keebio/nyquist/rev4/config.h
@@ -0,0 +1,23 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define SPLIT_HAND_PIN GP23
+#define USB_VBUS_PIN GP18
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP8
+#define SERIAL_USART_RX_PIN GP9
+#define SERIAL_USART_PIN_SWAP
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+#define I2C_DRIVER I2CD0
+#define I2C0_SDA_PIN GP4
+#define I2C0_SCL_PIN GP5
+
+// RGB Matrix
+#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+#define RGB_MATRIX_LED_COUNT 72
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/keebio/nyquist/rev4/info.json b/keyboards/keebio/nyquist/rev4/info.json
new file mode 100644
index 00000000000..1788f3427f4
--- /dev/null
+++ b/keyboards/keebio/nyquist/rev4/info.json
@@ -0,0 +1,315 @@
+{
+ "keyboard_name": "Nyquist Rev. 4",
+ "usb": {
+ "pid": "0x4156",
+ "device_version": "4.0.0"
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "mousekey": true,
+ "extrakey": true,
+ "rgb_matrix": true
+ },
+ "split": {
+ "enabled": true,
+ "encoder": {
+ "right": {
+ "rotary": [
+ {"pin_a": "GP1", "pin_b": "GP0" }
+ ]
+ }
+ },
+ "matrix_pins": {
+ "right":{
+ "cols": ["GP25", "GP29", "GP20", "GP11", "GP3", "GP2"],
+ "rows": ["GP24", "GP17", "GP15", "GP14", "GP12"]
+ }
+ },
+ "transport": {
+ "sync_matrix_state": true
+ }
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP22", "GP0", "GP3", "GP11", "GP6"],
+ "rows": ["GP2", "GP1", "GP17", "GP25", "GP24"]
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {"pin_a": "GP26", "pin_b": "GP27" }
+ ]
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP28"
+ },
+ "layouts": {
+ "LAYOUT_ortho_5x12": {
+ "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": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+
+ {"matrix": [9, 0], "x": 7, "y": 4},
+ {"matrix": [9, 1], "x": 8, "y": 4},
+ {"matrix": [9, 2], "x": 9, "y": 4},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_ortho_4x12": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "split_count": [36, 36],
+ "max_brightness": 120,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ { "flags": 4, "matrix": [0, 0], "x": 9, "y": 6 },
+ { "flags": 4, "matrix": [0, 1], "x": 28, "y": 6 },
+ { "flags": 4, "matrix": [0, 2], "x": 46, "y": 6 },
+ { "flags": 2, "x": 56, "y": 6 },
+ { "flags": 4, "matrix": [0, 3], "x": 65, "y": 6 },
+ { "flags": 4, "matrix": [0, 4], "x": 84, "y": 6 },
+ { "flags": 4, "matrix": [0, 5], "x": 102, "y": 6 },
+
+ { "flags": 4, "matrix": [1, 5], "x": 102, "y": 19 },
+ { "flags": 2, "x": 93, "y": 12 },
+ { "flags": 4, "matrix": [1, 4], "x": 84, "y": 19 },
+ { "flags": 4, "matrix": [1, 3], "x": 65, "y": 19 },
+ { "flags": 4, "matrix": [1, 2], "x": 46, "y": 19 },
+ { "flags": 4, "matrix": [1, 1], "x": 28, "y": 19 },
+ { "flags": 2, "x": 18, "y": 12 },
+ { "flags": 4, "matrix": [1, 0], "x": 9, "y": 19 },
+
+ { "flags": 4, "matrix": [2, 0], "x": 9, "y": 32 },
+ { "flags": 4, "matrix": [2, 1], "x": 28, "y": 32 },
+ { "flags": 4, "matrix": [2, 2], "x": 46, "y": 32 },
+ { "flags": 4, "matrix": [2, 3], "x": 65, "y": 32 },
+ { "flags": 4, "matrix": [2, 4], "x": 84, "y": 32 },
+ { "flags": 4, "matrix": [2, 5], "x": 102, "y": 32 },
+
+ { "flags": 4, "matrix": [3, 5], "x": 102, "y": 44 },
+ { "flags": 2, "x": 93, "y": 44 },
+ { "flags": 4, "matrix": [3, 4], "x": 84, "y": 44 },
+ { "flags": 4, "matrix": [3, 3], "x": 65, "y": 44 },
+ { "flags": 2, "x": 56, "y": 44 },
+ { "flags": 4, "matrix": [3, 2], "x": 46, "y": 44 },
+ { "flags": 4, "matrix": [3, 1], "x": 28, "y": 44 },
+ { "flags": 2, "x": 18, "y": 44 },
+ { "flags": 4, "matrix": [3, 0], "x": 9, "y": 44 },
+
+ { "flags": 4, "matrix": [4, 0], "x": 9, "y": 57 },
+ { "flags": 4, "matrix": [4, 1], "x": 28, "y": 57 },
+ { "flags": 4, "matrix": [4, 2], "x": 46, "y": 57 },
+ { "flags": 4, "matrix": [4, 3], "x": 65, "y": 57 },
+ { "flags": 4, "matrix": [4, 4], "x": 81, "y": 57 },
+ { "flags": 4, "matrix": [4, 5], "x": 105, "y": 57 },
+
+ { "flags": 4, "matrix": [5, 0], "x": 121, "y": 6 },
+ { "flags": 4, "matrix": [5, 1], "x": 140, "y": 6 },
+ { "flags": 4, "matrix": [5, 2], "x": 158, "y": 6 },
+ { "flags": 2, "x": 168, "y": 6 },
+ { "flags": 4, "matrix": [5, 3], "x": 177, "y": 6 },
+ { "flags": 4, "matrix": [5, 4], "x": 196, "y": 6 },
+ { "flags": 4, "matrix": [5, 5], "x": 214, "y": 6 },
+
+ { "flags": 4, "matrix": [6, 5], "x": 214, "y": 19 },
+ { "flags": 2, "x": 205, "y": 12 },
+ { "flags": 4, "matrix": [6, 4], "x": 196, "y": 19 },
+ { "flags": 4, "matrix": [6, 3], "x": 177, "y": 19 },
+ { "flags": 4, "matrix": [6, 2], "x": 158, "y": 19 },
+ { "flags": 4, "matrix": [6, 1], "x": 140, "y": 19 },
+ { "flags": 2, "x": 130, "y": 12 },
+ { "flags": 4, "matrix": [6, 0], "x": 121, "y": 19 },
+
+ { "flags": 4, "matrix": [7, 0], "x": 121, "y": 32 },
+ { "flags": 4, "matrix": [7, 1], "x": 140, "y": 32 },
+ { "flags": 4, "matrix": [7, 2], "x": 158, "y": 32 },
+ { "flags": 4, "matrix": [7, 3], "x": 177, "y": 32 },
+ { "flags": 4, "matrix": [7, 4], "x": 196, "y": 32 },
+ { "flags": 4, "matrix": [7, 5], "x": 214, "y": 32 },
+
+ { "flags": 4, "matrix": [8, 5], "x": 214, "y": 44 },
+ { "flags": 2, "x": 205, "y": 44 },
+ { "flags": 4, "matrix": [8, 4], "x": 196, "y": 44 },
+ { "flags": 4, "matrix": [8, 3], "x": 177, "y": 44 },
+ { "flags": 2, "x": 168, "y": 44 },
+ { "flags": 4, "matrix": [8, 2], "x": 158, "y": 44 },
+ { "flags": 4, "matrix": [8, 1], "x": 140, "y": 44 },
+ { "flags": 2, "x": 130, "y": 44 },
+ { "flags": 4, "matrix": [8, 0], "x": 121, "y": 44 },
+
+ { "flags": 4, "matrix": [9, 0], "x": 121, "y": 57 },
+ { "flags": 4, "matrix": [9, 1], "x": 140, "y": 57 },
+ { "flags": 4, "matrix": [9, 2], "x": 158, "y": 57 },
+ { "flags": 4, "matrix": [9, 3], "x": 177, "y": 57 },
+ { "flags": 4, "matrix": [9, 4], "x": 196, "y": 57 },
+ { "flags": 4, "matrix": [9, 5], "x": 214, "y": 57 }
+ ]
+ }
+}
diff --git a/keyboards/keebio/nyquist/rev4/rules.mk b/keyboards/keebio/nyquist/rev4/rules.mk
new file mode 100644
index 00000000000..161ec22b16e
--- /dev/null
+++ b/keyboards/keebio/nyquist/rev4/rules.mk
@@ -0,0 +1 @@
+SERIAL_DRIVER = vendor
diff --git a/keyboards/keebio/nyquistpad/config.h b/keyboards/keebio/nyquistpad/config.h
new file mode 100644
index 00000000000..82a64e39bff
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+
+// RGB Matrix
+#define RGB_MATRIX_LED_COUNT 36
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/keebio/nyquistpad/info.json b/keyboards/keebio/nyquistpad/info.json
new file mode 100644
index 00000000000..2e077caed34
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/info.json
@@ -0,0 +1,161 @@
+{
+ "manufacturer": "Keebio",
+ "url": "https://keeb.io",
+ "maintainer": "nooges",
+ "keyboard_name": "Nyquistpad",
+ "usb": {
+ "vid": "0xCB10",
+ "pid": "0x1356",
+ "device_version": "1.0.0"
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP22", "GP0", "GP3", "GP11", "GP6"],
+ "rows": ["GP2", "GP1", "GP17", "GP25", "GP24"]
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {"pin_a": "GP26", "pin_b": "GP27" }
+ ]
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP28"
+ },
+
+ "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": [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": [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": [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": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ { "flags": 4, "matrix": [0, 0], "x": 18, "y": 6 },
+ { "flags": 4, "matrix": [0, 1], "x": 56, "y": 6 },
+ { "flags": 4, "matrix": [0, 2], "x": 92, "y": 6 },
+ { "flags": 2, "x": 112, "y": 6 },
+ { "flags": 4, "matrix": [0, 3], "x": 130, "y": 6 },
+ { "flags": 4, "matrix": [0, 4], "x": 168, "y": 6 },
+ { "flags": 4, "matrix": [0, 5], "x": 204, "y": 6 },
+
+ { "flags": 4, "matrix": [1, 5], "x": 204, "y": 19 },
+ { "flags": 2, "x": 186, "y": 12 },
+ { "flags": 4, "matrix": [1, 4], "x": 168, "y": 19 },
+ { "flags": 4, "matrix": [1, 3], "x": 130, "y": 19 },
+ { "flags": 4, "matrix": [1, 2], "x": 92, "y": 19 },
+ { "flags": 4, "matrix": [1, 1], "x": 56, "y": 19 },
+ { "flags": 2, "x": 36, "y": 12 },
+ { "flags": 4, "matrix": [1, 0], "x": 18, "y": 19 },
+
+ { "flags": 4, "matrix": [2, 0], "x": 18, "y": 32 },
+ { "flags": 4, "matrix": [2, 1], "x": 56, "y": 32 },
+ { "flags": 4, "matrix": [2, 2], "x": 92, "y": 32 },
+ { "flags": 4, "matrix": [2, 3], "x": 130, "y": 32 },
+ { "flags": 4, "matrix": [2, 4], "x": 168, "y": 32 },
+ { "flags": 4, "matrix": [2, 5], "x": 204, "y": 32 },
+
+ { "flags": 4, "matrix": [3, 5], "x": 204, "y": 44 },
+ { "flags": 2, "x": 186, "y": 44 },
+ { "flags": 4, "matrix": [3, 4], "x": 168, "y": 44 },
+ { "flags": 4, "matrix": [3, 3], "x": 130, "y": 44 },
+ { "flags": 2, "x": 112, "y": 44 },
+ { "flags": 4, "matrix": [3, 2], "x": 92, "y": 44 },
+ { "flags": 4, "matrix": [3, 1], "x": 56, "y": 44 },
+ { "flags": 2, "x": 36, "y": 44 },
+ { "flags": 4, "matrix": [3, 0], "x": 18, "y": 44 },
+
+ { "flags": 4, "matrix": [4, 0], "x": 18, "y": 57 },
+ { "flags": 4, "matrix": [4, 1], "x": 56, "y": 57 },
+ { "flags": 4, "matrix": [4, 2], "x": 92, "y": 57 },
+ { "flags": 4, "matrix": [4, 3], "x": 130, "y": 57 },
+ { "flags": 4, "matrix": [4, 4], "x": 192, "y": 57 },
+ { "flags": 4, "matrix": [4, 5], "x": 210, "y": 57 }
+ ]
+ }
+}
diff --git a/keyboards/keebio/nyquistpad/keymaps/default/keymap.c b/keyboards/keebio/nyquistpad/keymaps/default/keymap.c
new file mode 100644
index 00000000000..42b049facda
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/keymaps/default/keymap.c
@@ -0,0 +1,30 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
+ MO(2), KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC
+ ),
+ [1] = LAYOUT(
+ RGB_MOD, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, KC_VOLU, KC_PGUP,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_PGDN,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT(
+ KC_F6, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/keebio/nyquistpad/keymaps/via/keymap.c b/keyboards/keebio/nyquistpad/keymaps/via/keymap.c
new file mode 100644
index 00000000000..42b049facda
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/keymaps/via/keymap.c
@@ -0,0 +1,30 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
+ MO(2), KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC
+ ),
+ [1] = LAYOUT(
+ RGB_MOD, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, KC_VOLU, KC_PGUP,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_PGDN,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT(
+ KC_F6, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/keebio/nyquistpad/keymaps/via/rules.mk b/keyboards/keebio/nyquistpad/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/keebio/nyquistpad/readme.md b/keyboards/keebio/nyquistpad/readme.md
new file mode 100644
index 00000000000..39c9a678c8b
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/readme.md
@@ -0,0 +1,25 @@
+# Nyquistpad
+
+A 5x6 macropad keyboard based off of a prototype Nyquist PCB.
+
+* Keyboard Maintainer: Keebio
+* Hardware Supported: Nyquistpad PCB
+* Hardware Availability: [Keebio](https://keeb.io/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keebio/nyquistpad:default
+
+Flashing example for this keyboard:
+
+ make keebio/nyquistpad: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**: Press and hold the button on the back of the PCB for at least 2 seconds and let go, or double-press the button
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/keebio/nyquistpad/rules.mk b/keyboards/keebio/nyquistpad/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/autocorrect_data.h b/keyboards/keyboardio/atreus/keymaps/slotthe/autocorrect_data.h
new file mode 100644
index 00000000000..155b1fbc540
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/autocorrect_data.h
@@ -0,0 +1,44 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ 88888888888 888 d8b .d888 d8b 888 d8b
+ 888 888 Y8P d88P" Y8P 888 Y8P
+ 888 888 888 888
+ 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
+ 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
+ 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
+ 888 888 888 888 X88 888 888 888 Y8b. 888 X88
+ 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
+ 888 888
+ 888 888
+ 888 888
+ .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
+ d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
+ 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
+ Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
+ "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
+ 888
+ Y8b d88P
+ "Y88P"
+*******************************************************************************/
+
+#pragma once
+
+// Autocorrection dictionary (4 entries):
+// :alot -> a lot
+// accesories -> accessories
+// accomodate -> accommodate
+// alledge -> allege
+
+#define AUTOCORRECT_MIN_LENGTH 5 // ":alot"
+#define AUTOCORRECT_MAX_LENGTH 10 // "accesories"
+#define DICTIONARY_SIZE 73
+
+static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
+ 0x48, 0x0A, 0x00, 0x16, 0x2C, 0x00, 0x17, 0x3E, 0x00, 0x00, 0x4A, 0x11, 0x00, 0x17, 0x1B, 0x00,
+ 0x00, 0x07, 0x08, 0x0F, 0x0F, 0x04, 0x00, 0x82, 0x67, 0x65, 0x00, 0x04, 0x07, 0x12, 0x10, 0x12,
+ 0x06, 0x06, 0x04, 0x00, 0x84, 0x6D, 0x6F, 0x64, 0x61, 0x74, 0x65, 0x00, 0x08, 0x0C, 0x15, 0x12,
+ 0x16, 0x08, 0x06, 0x06, 0x04, 0x00, 0x84, 0x73, 0x6F, 0x72, 0x69, 0x65, 0x73, 0x00, 0x12, 0x0F,
+ 0x04, 0x2C, 0x00, 0x82, 0x20, 0x6C, 0x6F, 0x74, 0x00
+};
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/config.h b/keyboards/keyboardio/atreus/keymaps/slotthe/config.h
new file mode 100644
index 00000000000..26235c9d916
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/config.h
@@ -0,0 +1,19 @@
+/* © 2023 Tony Zorman (@slotThe)
+ *
+ * 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 .
+ */
+
+#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
+#define TAPPING_TERM 175
+#define HOLD_ON_OTHER_KEY_PRESS
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/keymap.c b/keyboards/keyboardio/atreus/keymaps/slotthe/keymap.c
new file mode 100644
index 00000000000..6188f14ab97
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/keymap.c
@@ -0,0 +1,328 @@
+/* © 2023 Tony Zorman (@slotThe)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+// NOTE: `M-x occur RET /// RET' gives a good overview.
+
+/// General macros
+
+#define LSPR_SC LGUI_T(KC_SCLN)
+#define LALT_BR LALT_T(KC_LBRC)
+#define LSFT_INS LSFT(KC_INS)
+#define OSMSFT OSM(MOD_LSFT)
+#define Z_SFT LSFT_T(KC_Z)
+#define ZE_SFT LSFT_T(KC_0)
+#define SL_SFT RSFT_T(KC_SLSH)
+#define RETSPR LGUI_T(KC_ENT)
+
+/// Tap dance declarations
+
+// So far, tap dances do different things on
+//
+// - a single press,
+// - a double press,
+// - when held,
+//
+// so expect this many keys as comments.
+enum tap_dances {
+ ALT_BR, // [ ] lalt (also works shifted, which gets us { and } for free)
+ CTL_PR, // ( ) lctl
+ SFT_CI, // ^ ^ lsft (working around LSFT_T not being able to output shifted keys)
+ SFT_EX, // ! ! lsft (ditto)
+};
+
+#define CTLPAR TD(CTL_PR)
+#define ALTBRC TD(ALT_BR)
+#define SFTCRC TD(SFT_CI)
+#define SFTEXL TD(SFT_EX)
+
+/// Macro declarations
+
+enum custom_keycodes {
+ // -> <- =<< >>= <*> <* *> <$> <&> <|> => ::
+ RARR = SAFE_RANGE, LARR, LBND, RBND, APP, RAPP, LAPP, FMAP, PAMF, AALT, IMPLS, DCOL,
+};
+
+/// Key overrides
+
+const key_override_t **key_overrides = (const key_override_t *[]){
+ &ko_make_basic(MOD_MASK_SHIFT, KC_BSPC, KC_DEL), // S-BSP ≡ DEL
+ // Emacs got me used to these, so let's convince other programs that
+ // we are in fact sending the correct keys.
+ &ko_make_basic(MOD_MASK_CTRL, KC_I, KC_TAB), // C-i ≡ Tab
+ &ko_make_basic(MOD_MASK_CTRL, KC_M, KC_ENT), // C-m ≡ Return
+ NULL // Null terminate the array of overrides
+};
+
+/// Layers
+
+enum layer_names { _COLEMAK_DH, _LOWER, _RAISE, _ADJUST };
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define ADJUST MO(_ADJUST)
+#define D_RAISE LT(_RAISE, KC_DOT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Colemak base layer
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | Q | W | F | P | B | | J | L | U | Y | ;+S |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | A | R | S | T | G | | M | N | E | I | O |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | S+Z | X | C | D | V | ARP | REP | K | H | , | . | S+/ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | ESC | TAB | SPR | L1 | SPC | A[] | BSC | C() | L2 | - | ' | RET |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ */
+ [_COLEMAK_DH] = LAYOUT(
+ KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, LSPR_SC,
+ KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O,
+ Z_SFT, KC_X, KC_C, KC_D, KC_V, QK_AREP, QK_REP, KC_K, KC_H, KC_COMM, D_RAISE, SL_SFT,
+ KC_ESC, KC_TAB, KC_LGUI, LOWER, KC_SPC, ALTBRC, KC_BSPC, CTLPAR, RAISE, KC_MINS, KC_QUOT, KC_ENT),
+
+ /* Layer 1 (LOWER)
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
+ | & | *> | >>= | <&> | | | = | + | * | - | RET+M |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
+ | :: | => | =<< | <|> | @ | | LFT | UP | DWN | RGT | \ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+ | !+S | <* | <*> | <$> | <- | | MEN | -> | $ | # | % | ^+S |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+ | | | | | | | | | L3 | ALT | | S-I |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+ */
+ [_LOWER] = LAYOUT(
+ KC_AMPR, RAPP, RBND, PAMF, _______, KC_EQL, KC_PLUS, KC_ASTR, KC_MINS, RETSPR,
+ DCOL, IMPLS, LBND, AALT, KC_AT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSLS,
+ SFTEXL, LAPP, APP, FMAP, LARR, _______, KC_APP, RARR, KC_DLR, KC_HASH, KC_PERC, SFTCRC,
+ _______, _______, _______, _______, _______, _______, _______, _______, ADJUST, KC_LALT, _______, LSFT_INS),
+
+ /* Layer 2 (RAISE)
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | 7 | 8 | 9 | | | | + | * | - | |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | : | 4 | 5 | 6 | = | | & | ` | _ | ' | " |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | 0+S | 1 | 2 | 3 | | | | | ! | # | % | ^+S |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | L3 | | | | | | | | |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ */
+ [_RAISE] = LAYOUT(
+ KC_DOT, KC_7, KC_8, KC_9, _______, _______, KC_PLUS, KC_ASTR, KC_MINS, _______,
+ KC_COLN, KC_4, KC_5, KC_6, KC_EQL, KC_AMPR, KC_GRV, KC_UNDS, KC_QUOT, KC_DQT,
+ ZE_SFT, KC_1, KC_2, KC_3, _______, _______, _______, _______, KC_EXLM, KC_HASH, KC_PERC, SFTCRC,
+ _______, _______, _______, ADJUST, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ /* Layer 3 (ADJUST)
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | | | | | | | F7 | F8 | F9 | F10 |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | | | | | | | F4 | F5 | F6 | F11 |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | | | | | | F1 | F2 | F3 | F12 |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | | | | | | | | | |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ */
+ [_ADJUST] = LAYOUT(
+ _______, _______, _______, _______, AC_TOGG, _______, KC_F7, KC_F8, KC_F9, KC_F10,
+ _______, _______, _______, _______, _______, _______, KC_F4, KC_F5, KC_F6, KC_F11,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
+/// Macro definitions
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RARR:
+ if (record->event.pressed) SEND_STRING("->"); break;
+ case LARR:
+ if (record->event.pressed) SEND_STRING("<-"); break;
+ case LBND:
+ if (record->event.pressed) SEND_STRING("=<<"); break;
+ case RBND:
+ if (record->event.pressed) SEND_STRING(">>="); break;
+ case APP:
+ if (record->event.pressed) SEND_STRING("<*>"); break;
+ case RAPP:
+ if (record->event.pressed) SEND_STRING("*>"); break;
+ case LAPP:
+ if (record->event.pressed) SEND_STRING("<*"); break;
+ case FMAP:
+ if (record->event.pressed) SEND_STRING("<$>"); break;
+ case PAMF:
+ if (record->event.pressed) SEND_STRING("<&>"); break;
+ case AALT:
+ if (record->event.pressed) SEND_STRING("<|>"); break;
+ case IMPLS:
+ if (record->event.pressed) SEND_STRING("=>"); break;
+ case DCOL:
+ if (record->event.pressed) SEND_STRING("::"); break;
+ }
+ return true;
+};
+
+//// Tap dance definitions
+
+// Heavily inspired by:
+//
+// https://docs.qmk.fm/?ref=blog.splitkb.com#/feature_tap_dance?id=example-4
+
+typedef enum {
+ TD_NONE,
+ TD_UNKNOWN,
+ TD_SINGLE_TAP,
+ TD_SINGLE_HOLD,
+ TD_DOUBLE_TAP,
+} td_state_t;
+
+typedef struct {
+ bool is_press_action;
+ td_state_t state;
+} td_tap_t;
+
+// Return an integer that corresponds to what kind of tap dance should
+// be executed.
+//
+// Interrupted: If the state of a dance is "interrupted", that means
+// that another key has been hit under the tapping term.
+//
+// Pressed: Whether or not the key is still being pressed. If this value
+// is true, that means the tapping term has ended, but the key is still
+// being pressed down. This generally means the key is being "held".
+td_state_t cur_dance(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->pressed) return TD_SINGLE_HOLD;
+ else return TD_SINGLE_TAP;
+ } else if (state->count == 2) return TD_DOUBLE_TAP;
+ else return TD_UNKNOWN;
+}
+
+//// ALT_BR
+
+static td_tap_t alt_br_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+void lalt_br_finished(tap_dance_state_t *state, void *user_data) {
+ alt_br_state.state = cur_dance(state);
+ switch (alt_br_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_LBRC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: register_code(KC_RBRC); break;
+ default: break;
+ }
+}
+
+void lalt_br_reset(tap_dance_state_t *state, void *user_data) {
+ switch (alt_br_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_LBRC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: unregister_code(KC_RBRC); break;
+ default: break;
+ }
+ alt_br_state.state = TD_NONE;
+}
+
+//// LCTL_PR
+
+static td_tap_t lctl_pr_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+void lctl_pr_finished(tap_dance_state_t *state, void *user_data) {
+ lctl_pr_state.state = cur_dance(state);
+ switch (lctl_pr_state.state) {
+ case TD_SINGLE_TAP: register_code16(KC_LPRN); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: register_code16(KC_RPRN); break;
+ default: break;
+ }
+}
+
+void lctl_pr_reset(tap_dance_state_t *state, void *user_data) {
+ switch (lctl_pr_state.state) {
+ case TD_SINGLE_TAP: unregister_code16(KC_LPRN); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: unregister_code16(KC_RPRN); break;
+ default: break;
+ }
+ lctl_pr_state.state = TD_NONE;
+}
+
+//// SFT_CI
+
+static td_tap_t lsft_ci_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+void lsft_ci_finished(tap_dance_state_t *state, void *user_data) {
+ lsft_ci_state.state = cur_dance(state);
+ switch (lsft_ci_state.state) {
+ case TD_SINGLE_TAP: register_code16(KC_CIRC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LSFT); break;
+ default: break;
+ }
+}
+
+void lsft_ci_reset(tap_dance_state_t *state, void *user_data) {
+ switch (lsft_ci_state.state) {
+ case TD_SINGLE_TAP: unregister_code16(KC_CIRC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LSFT); break;
+ default: break;
+ }
+ lsft_ci_state.state = TD_NONE;
+}
+
+//// SFT_EX
+
+static td_tap_t lsft_ex_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+void lsft_ex_finished(tap_dance_state_t *state, void *user_data) {
+ lsft_ex_state.state = cur_dance(state);
+ switch (lsft_ex_state.state) {
+ case TD_SINGLE_TAP: register_code16(KC_EXLM); break;
+ case TD_SINGLE_HOLD: register_code(KC_LSFT); break;
+ default: break;
+ }
+}
+
+void lsft_ex_reset(tap_dance_state_t *state, void *user_data) {
+ switch (lsft_ex_state.state) {
+ case TD_SINGLE_TAP: unregister_code16(KC_EXLM); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LSFT); break;
+ default: break;
+ }
+ lsft_ex_state.state = TD_NONE;
+}
+
+//// Actually define the tap-dance actions
+
+tap_dance_action_t tap_dance_actions[] = {
+ [ALT_BR] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lalt_br_finished, lalt_br_reset),
+ [CTL_PR] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lctl_pr_finished, lctl_pr_reset),
+ [SFT_CI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lsft_ci_finished, lsft_ci_reset),
+ [SFT_EX] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lsft_ex_finished, lsft_ex_reset),
+};
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/readme.md b/keyboards/keyboardio/atreus/keymaps/slotthe/readme.md
new file mode 100644
index 00000000000..d83bce1d2f2
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/readme.md
@@ -0,0 +1,251 @@
+# SlotThe's Keyboardio Atreus Keymap
+
+Note: the following is (a relevant and shortened) excerpt from [this
+rewiev](https://tony-zorman.com/posts/atreus-review.html) of the
+keyboard itself. See there for, e.g., some thoughts about modifier
+placement.
+
+## Base layer
+
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.------.
+ | Q | W | F | P | B | | J | L | U | Y | M4+; |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.------.
+ | A | R | S | T | G | | M | N | E | I | O |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.------.
+ | S+Z | X | C | D | V | ARP | REP | K | H | , | . | S+/ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.------.
+ | ESC | TAB | M4 | L1 | SPC | A[] | BSC | C() | L2 | - | ' | RET |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.------.
+
+I use [Colemak Mod-DH][colemak-dh] as my layout, so this takes up most of the base of the keyboard.
+
+Perhaps strikingly, I opted for not putting Shift on the thumb,
+but recreating the "ordinary" one-on-each-side setup from the good old typewriter days.
+While I already have a key to access the `LOWER` (L1) layer with my left thumb,
+I had to sacrifice Shift so I could fit a key to the `RAISE` (L2) layer on the right thumb.
+This also jumps to the `ADJUST` (L3) layer when both `LOWER` and `RAISE` are held at the same time.
+I will gladly trade two layers for one Shift key.
+
+One of the most basic things—besides having layers—that one can do with QMK is [mod-taps][qmk:mod-tap].
+These are keys that act as modifiers when held, and as "ordinary" keys when pressed.
+For example, all of the `S+«key»` keys emit Shift when held and `«key»` when pressed.
+There is a slight delay between pressing the key and the press registering,
+since we have to wait for a possible tap,
+which keeps me from using modifiers on the home-row, as some people like to do.
+Likewise, the `M4+;` key acts as Super when held and as `;` when pressed.
+At this point, it is actually my main way to press the Super key,
+even though I don't find the real `M4` key particularly hard to hit with my thumb.
+Sometimes these things just happen,
+I suppose,
+though it may help that I press both outer keys of the top row (that is, `q` and `;`) with my ring finger
+instead of my pinky.
+
+The `A[]` and `C()` keys are utilising [tap dances][qmk:tap-dance],
+in order to do even more.
+Tap dances are very similar to mod-taps,
+only in addition to just differentiating between a "pressed" and a "held" state,
+QMK now also keeps track of *how often* a key has been tapped.
+So far, [my setup][qmk:slotthe:tapdances] here is quite basic;
+I only check whether a key was pressed once, twice, or is being held.
+This allows me to not need extra keys for parentheses,
+as they can fit on the modifier keys:
+
+ - `A[]`: Alt when held, `[` when pressed once, and `]` when pressed twice.
+ This one is especially neat, since tap dances play well with other modifiers,
+ so pressing `S-M1` once will result in `{` and pressing it twice gives `}`.
+
+ - `C()`: Control when held, `(` when pressed once, and `)` when pressed twice.
+
+I don't mind having the extra indirection for the respective closed delimiter,
+as [paredit][emacs:paredit],
+[puni][emacs:puni],
+`electric-pair-mode`,
+or a different package of choice usually takes care of inserting it.
+
+The `REP` and `AREP` keys make use of the [Repeat Key][qmk:repeat-key] functionality;
+basically, `REP` executes the key chord that was last pressed.
+On the other hand,
+`AREP` is an alternative, configurable, of "repeating" things;
+by default, it turns some directional movements
+around—e.g., `M-f` becomes `M-b`—but
+it can be made to pretty much input anything one wants.
+
+## Layer 1
+
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
+ | & | *> | >>= | <&> | | | = | + | * | - | M4+RT |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
+ | :: | => | =<< | <|> | @ | | LFT | UP | DWN | RGT | \ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+ | S+! | <* | <*> | <$> | <- | | MEN | -> | $ | # | % | S+^ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+ | | | | | | | | | L3 | ALT | | S-Ins |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+
+Guess which programming language I like based on this layer's [macros][qmk:macros] :).
+
+Crucially, keys that were "Shift when held,
+*something* when pressed" on the base layer retain the Shift part of that functionality.
+This is used for the commutativity of the modifier
+keys—i.e., it does not matter whether I press `S-L1-«key»` or `L1-S-«key»`—which
+would otherwise drive me insane.
+The same goes for all fall-through keys:
+keys that appear blank in the above layout.
+These aren't blocked or anything,
+just no new functionality is added
+so the key falls back to what's on the next lowest layer.
+In plain terms,
+the key to the left of `L3` will still be Control,
+as I can comfortably press that while holding down something with my left hand.
+The same can't be said for the Alt key,
+which is on the left hand by default,
+so a separate binding for it has to be created on the right hand.
+Thus,
+as the two don't commute,
+key chords involving the LOWER layer and Alt are to be avoided if possible.
+
+The `S-Ins` key is not some sort of tap,
+but actually just emits a Shift-Insert,
+which can be used to paste stuff from the [X11 primary selection][x11:clipboard].
+
+## Layer 2
+
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | 7 | 8 | 9 | | | | + | * | - | |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | : | 4 | 5 | 6 | = | | | ` | _ | ' | " |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | S+0 | 1 | 2 | 3 | | | | | | # | % | S+^ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | L3 | | | | | | | | |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+
+A relatively unspectacular layer,
+RAISE is mainly used for numbers,
+and number adjacent things.
+Some symbols related to this,
+like `=`, `+`, `*`, and `-`,
+are replicated from the LOWER layer.
+This is due to the above mentioned issues of inserting arithmetic.
+This layer also features \` and `'` quite prominently,
+as these are important for [CDLaTeX].
+Plus, putting `'` and `"` on this layer circumvents the difficult to hit key on the base layer.
+
+## Layer 3
+
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | | | | | | | F7 | F8 | F9 | F10 |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | | | | | | | F4 | F5 | F6 | F11 |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | | | | | | F1 | F2 | F3 | F12 |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | | | | | | | | | |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+
+So far, only the seldom used F-keys are present here.
+As should be obvious, this is the least developed layer,
+and also the one that'll probably change the most in the future.
+Currently, I'm thinking of putting some XMonad specific bindings on here,
+which could even to free up the Super key to be used inside of Emacs
+for certain things—that would certainly be a worthwhile experiment.
+Other thoughts include things like volume and brightness controls,
+although this is less critical since my laptop keyboard is never far away.
+
+## Other features
+
+There are some features that aren't necessarily reflected in the keys themselves,
+yet are quite essential for day-to-day use.
+The TL;DR can be found in [rules.mk][./rules.mk].
+
+### [Key overrides][qmk:key-overrides]
+
+Quoting from the documentation
+
+> Key overrides allow you to override modifier-key combinations to send a different modifier-key combination
+> or perform completely custom actions.
+
+Some keys on the keyboard are quite hard to hit.
+On the default layout,
+one of these turns out to be the Tab key,
+which is nonetheless important in a lot of situations.
+Conveniently, Emacs interprets `C-i` as Tab, so there is less need to actually hit the "real" key.
+However, not all programs are quite so understanding—or old, I guess.
+With key overrides, one can send a real `TAB` whenever `C-i` is pressed;
+no special convention on how to interpret certain key chords required!
+I also rebound `C-m` to `RET` (with the same justification), and `S-BSP` to `DEL`.
+
+This is one of those features that I didn't know I needed,
+yet now couldn't live without anymore.
+I'm definitely looking forward to discovering new and interesting ways of using this!
+
+### [Autocorrect][qmk:autocorrect]
+
+This is a quaint little feature: auto-correct inside of your keyboard's firmware!
+I promise that it's not as bad as it sounds.
+It does not work automatically, thankfully, but is based off a given list of replacements.
+For example,
+
+ widht -> width
+
+would fire anytime one writes `widht`, which then gets replaced by `width`.
+This is based on (a trie of) the most recently pressed keys,
+so whenever one actually wants to write `widht`
+all that's needed is pressing, for example, any modifier during the insertion.
+
+As I've really just been trying this out for a laugh, my current word list is quite short:
+
+ :alot -> a lot
+ accesories -> accessories
+ accomodate -> accommodate
+ alledge -> allege
+
+In general,
+I think the solution to stop misspelling a word is not to remap key sequences on the firmware level,
+but to—you know—learn how to spell that word.
+Still,
+I can imagine at least one or two use-cases where something like this could be useful,
+so I figured it might be nice to make people aware of this features' existence.
+
+In addition—as I've found out on three separate occasions so far—using the words "auto-correct, but in firmware"
+makes people stare in utter disbelief and/or disgust at your keyboard.
+That alone makes this feature worth it.
+
+### [Caps Word][qmk:caps-word]
+
+Caps Word is a clever alternative to Caps Lock,
+which I enable by pressing both Shift keys together.
+After that,
+all of the letter keys are shifted,
+and `-` becomes `_`
+until a different key (excluding common sense ones like backspace) is pressed.
+This is very useful for, e.g.,
+writing long constants,
+as these tend to have capital names separated with underscores:
+writing `BOTH_SHIFTS_TURNS_ON_CAPS_WORD` has never been easier!
+
+One thing to note is that,
+while layer switching works just fine in "Caps Word mode",
+the [Tri Layer][qmk:tri-layer] feature does not seem to play nicely with it;
+i.e., the mode gets disabled when switching to these layers.
+This is also the reason why I have an explicit LOWER, RAISE, and ADJUST setup,
+instead of just using Tri Layer.
+One could fiddle with the `caps_word_press_user` callback,
+but it seemed much easier to just create one additional layer toggle instead.
+I haven't looked at how hard it would be to hack this into Caps Word,
+so maybe this is a future pull request.
+
+[CDLaTeX]: https://github.com/cdominik/cdlatex
+[colemak-dh]: https://colemakmods.github.io/mod-dh/
+[emacs:paredit]: https://paredit.org/
+[emacs:puni]: https://github.com/AmaiKinono/puni
+[qmk:autocorrect]: https://docs.qmk.fm/#/feature_autocorrect
+[qmk:caps-word]: https://docs.qmk.fm/#/feature_caps_word
+[qmk:key-overrides]: https://docs.qmk.fm/#/feature_key_overrides
+[qmk:macros]: https://docs.qmk.fm/#/feature_macros
+[qmk:mod-tap]: https://docs.qmk.fm/#/mod_tap
+[qmk:repeat-key]: https://docs.qmk.fm/#/feature_repeat_key
+[qmk:slotthe:tapdances]: https://github.com/slotThe/qmk_firmware/blob/keyboardio/atreus/slotThe/keyboards/keyboardio/atreus/keymaps/slotThe/keymap.c#L187
+[qmk:tap-dance]: https://docs.qmk.fm/#/feature_tap_dance
+[qmk:tri-layer]: https://docs.qmk.fm/#/feature_tri_layer
+[x11:clipboard]: https://www.uninformativ.de/blog/postings/2017-04-02/0/POSTING-en.html
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/rules.mk b/keyboards/keyboardio/atreus/keymaps/slotthe/rules.mk
new file mode 100644
index 00000000000..b603193f858
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/rules.mk
@@ -0,0 +1,9 @@
+TAP_DANCE_ENABLE = yes
+KEY_OVERRIDE_ENABLE = yes
+AUTOCORRECT_ENABLE = yes
+CAPS_WORD_ENABLE = yes
+REPEAT_KEY_ENABLE = yes
+
+LTO_ENABLE = yes
+COMMAND_ENABLE = no
+MOUSEKEY_ENABLE = no
diff --git a/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c
index 0d4fd2cd98a..0585ae9c96d 100755
--- a/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c
+++ b/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c
@@ -17,9 +17,6 @@
#include "quantum.h"
#ifdef RGB_MATRIX_ENABLE
-
-// clang-format off
-
const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
@@ -128,117 +125,4 @@ const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
{0, G_1, I_1, H_1}, // Down
{0, G_7, I_7, H_7}, // Right
};
-
-#define __ NO_LED
-
-led_config_t g_led_config = {
- {
- // Key Matrix to LED Index
- { __, 0, 1, 2, 3, 4, 5, 6, __ },
- { 7, 8, 9, 10, 11, 12, 13, 14, __ },
- { 15, 16, 17, 18, 19, __, 20, 21, __ },
- { 22, 23, 24, 25, 26, 27, 28, __, __ },
- { 29, __, 30, 31, 32, 33, 34, 35, __ },
- { 36, 37, 38, 39, 40, __, 41, __, __ },
- { 42, 43, 44, 45, 46, 47, 48, 49, __ },
- { 50, 51, 52, 53, 54, 55, 56, __, 57 },
- { 58, 59, 60, 61, 62, 63, 64, 65, 66 },
- { 67, 68, 69, 70, 71, 72, __, 73, 74 },
- { 75, 76, 77, 78, 79, 80, __, 81, __ },
- { __, 82, 83, 84, 85, __, 86, 87, 88 },
- },
- {
- // LED Index to Physical Position
- {17,0}, {31,0}, {45,0}, {59,0}, {72,0}, {86,0}, {100,0},
- {0,15}, {17,15}, {31,15}, {45,15}, {59,15}, {72,15}, {86,15}, {100,15},
- {0,27}, {21,27}, {38,27}, {52,27}, {66,27}, {79,27}, {93,27},
- {0,40}, {22,40}, {41,40}, {55,40}, {69,40}, {83,40}, {97,40},
- {0,52}, {26,52}, {48,52}, {61,52}, {76,52}, {90,52}, {102,52},
- {0,64}, {19,64}, {36,64}, {53,64}, {70,64}, {94,64},
- {110,0}, {124,0}, {138,0}, {152,0}, {165,0}, {179,0}, {193,0}, {207,0},
- {110,15}, {124,15}, {138,15}, {152,15}, {165,15}, {179,15}, {200,15}, {224,15},
- {104,27}, {117,27}, {131,27}, {145,27}, {158,27}, {172,27}, {186,27}, {203,27}, {224,27},
- {107,40}, {121,40}, {134,40}, {148,40}, {162,40}, {176,40}, {198,40}, {224,40},
- {114,52}, {127,52}, {141,52}, {155,52}, {169,52}, {188,52}, {210,52},
- {126,64}, {152,64}, {166,64}, {180,64}, {196,64}, {210,64}, {224,64},
- },
- {
- // RGB LED Index to Flag
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 4, 4, 4, 4, 4, 4,
- 1, 1, 4, 4, 4, 4, 4,
- 1, 8, 4, 4, 4, 4, 4,
- 1, 1, 4, 4, 4, 4, 4,
- 1, 1, 1, 1, 1, 4,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 4, 4, 4, 4, 4, 4, 1, 1,
- 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 4, 4, 4, 4, 4, 4, 1, 1,
- 4, 4, 4, 4, 4, 1, 1,
- 4, 1, 1, 1, 1, 1, 1,
- }
-};
-
-// clang-format on
-
#endif
-
-#define ADC_BUFFER_DEPTH 1
-#define ADC_NUM_CHANNELS 1
-#define ADC_SAMPLING_RATE ADC_SMPR_SMP_12P5
-#define ADC_RESOLUTION ADC_CFGR_RES_10BITS
-
-static int16_t analogReadPin_my(pin_t pin) {
- ADCConfig adcCfg = {};
- adcsample_t sampleBuffer[ADC_NUM_CHANNELS*ADC_BUFFER_DEPTH];
- ADCDriver* targetDriver = &ADCD1;
- ADCConversionGroup adcConversionGroup = {
- .circular = FALSE,
- .num_channels = (uint16_t)(ADC_NUM_CHANNELS),
- .cfgr = ADC_RESOLUTION,
- };
-
- palSetLineMode(pin, PAL_MODE_INPUT_ANALOG);
- switch (pin) {
- case B0:
- adcConversionGroup.smpr[2] = ADC_SMPR2_SMP_AN15(ADC_SAMPLING_RATE);
- adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(ADC_CHANNEL_IN15);
- sampleBuffer[0] = 0;
- break;
- case B1:
- adcConversionGroup.smpr[2] = ADC_SMPR2_SMP_AN16(ADC_SAMPLING_RATE);
- adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(ADC_CHANNEL_IN16);
- sampleBuffer[0] = 0;
- break;
- default:
- return 0;
- }
- adcStart(targetDriver, &adcCfg);
- if (adcConvert(targetDriver, &adcConversionGroup, &sampleBuffer[0], ADC_BUFFER_DEPTH) != MSG_OK) {
- return 0;
- }
-
- return *sampleBuffer;
-}
-
-void keyboard_post_init_kb(void) {
- // 1. The pin A5/B5 of the USB C interface in the left hand is connected to the pin A0 of MCU,
- // A0 will be set to output and write high when keyboard initial.
- // 2. The same pin in the right hand is connected to the pin B0 and B1 of MCU respectively,
- // and the ADC function of B0 and B1 will be enabled when keyboard initial.
- // 3. because the serial usart RXD and TXD is multiplexed on USB's D+ and D- in the right hand.
- // So detect the voltage on the pin A5/B5 of the USB C interface by ADC,
- // and disable USB connectivity when the ADC value exceeds 1000,
- // to avoid affecting the serial usart communication between the left hand and the right hand.
- if (is_keyboard_left()) {
- setPinOutput(A0);
- writePinHigh(A0);
- } else {
- if ((analogReadPin_my(B0) > 1000) || (analogReadPin_my(B1) > 1000)) {
- setPinInput(A11);
- setPinInput(A12);
- }
- }
-
- keyboard_post_init_user();
-}
diff --git a/keyboards/keychron/q11/ansi_encoder/config.h b/keyboards/keychron/q11/ansi_encoder/config.h
index 08632f0ce72..60bdc493de5 100755
--- a/keyboards/keychron/q11/ansi_encoder/config.h
+++ b/keyboards/keychron/q11/ansi_encoder/config.h
@@ -16,5 +16,8 @@
#pragma once
+/* RGB Matrix Configuration */
+#define RGB_MATRIX_LED_COUNT 89
+
/* Enable caps-lock LED */
#define CAPS_LOCK_LED_INDEX 23
diff --git a/keyboards/keychron/q11/ansi_encoder/info.json b/keyboards/keychron/q11/ansi_encoder/info.json
index da10fe5166c..01a81619baa 100755
--- a/keyboards/keychron/q11/ansi_encoder/info.json
+++ b/keyboards/keychron/q11/ansi_encoder/info.json
@@ -1,166 +1,105 @@
{
- "keyboard_name": "Keychron Q11",
- "manufacturer": "Keychron",
- "url": "https://github.com/Keychron",
- "maintainer": "lalalademaxiya1",
- "bootloader": "stm32-dfu",
- "bootmagic": {
- "matrix": [0, 1]
- },
- "features": {
- "audio": false,
- "backlight": false,
- "bootmagic": true,
- "command": false,
- "console": false,
- "dip_switch": true,
- "encoder": true,
- "extrakey": true,
- "mousekey": true,
- "nkro": true,
- "rgb_matrix": true,
- "rgblight": false
- },
- "diode_direction": "ROW2COL",
- "encoder": {
- "rotary": [
- {"pin_a": "B0", "pin_b": "B1"}
- ]
- },
- "matrix_pins": {
- "cols": ["A7", "A6", "A5", "A4", "A3", "A2", "A1", "C15", null],
- "rows": ["A13", "A14", "A15", "B3", "B4", "B5"]
- },
- "processor": "STM32L432",
- "rgb_matrix": {
- "driver": "CKLED2001",
- "split_count": [42, 47]
- },
- "split": {
- "enabled": true,
- "encoder": {
- "right": {
- "rotary": [
- {"pin_a": "C14", "pin_b": "C15"}
- ]
- }
- },
- "matrix_pins": {
- "right": {
- "cols": ["A8", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0"],
- "rows": ["B5", "B4", "B3", "A15", "A14", "A13"]
- }
- },
- "transport": {
- "protocol": "serial_usart",
- "sync_matrix_state": false
- }
- },
"usb": {
- "vid": "0x3434",
"pid": "0x01E0",
"device_version": "1.0.0"
},
- "layouts": {
- "LAYOUT_ansi_91": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1.25, "y": 0},
- {"matrix": [0, 2], "x": 2.25, "y": 0},
- {"matrix": [0, 3], "x": 3.25, "y": 0},
- {"matrix": [0, 4], "x": 4.25, "y": 0},
- {"matrix": [0, 5], "x": 5.25, "y": 0},
- {"matrix": [0, 6], "x": 6.25, "y": 0},
- {"matrix": [0, 7], "x": 7.25, "y": 0},
- {"matrix": [6, 0], "x": 8.25, "y": 0},
- {"matrix": [6, 1], "x": 9.25, "y": 0},
- {"matrix": [6, 2], "x": 10.25, "y": 0},
- {"matrix": [6, 3], "x": 11.25, "y": 0},
- {"matrix": [6, 4], "x": 12.25, "y": 0},
- {"matrix": [6, 5], "x": 13.25, "y": 0},
- {"matrix": [6, 6], "x": 14.25, "y": 0},
- {"matrix": [6, 7], "x": 15.25, "y": 0},
- {"matrix": [6, 8], "x": 16.5, "y": 0},
+ "rgb_matrix": {
+ "split_count": [42, 47],
+ "layout": [
+ {"matrix":[0, 1], "flags":1, "x":17, "y":0},
+ {"matrix":[0, 2], "flags":1, "x":31, "y":0},
+ {"matrix":[0, 3], "flags":1, "x":45, "y":0},
+ {"matrix":[0, 4], "flags":1, "x":59, "y":0},
+ {"matrix":[0, 5], "flags":1, "x":72, "y":0},
+ {"matrix":[0, 6], "flags":1, "x":86, "y":0},
+ {"matrix":[0, 7], "flags":1, "x":100, "y":0},
+ {"matrix":[1, 0], "flags":1, "x":0, "y":15},
+ {"matrix":[1, 1], "flags":1, "x":17, "y":15},
+ {"matrix":[1, 2], "flags":4, "x":31, "y":15},
+ {"matrix":[1, 3], "flags":4, "x":45, "y":15},
+ {"matrix":[1, 4], "flags":4, "x":59, "y":15},
+ {"matrix":[1, 5], "flags":4, "x":72, "y":15},
+ {"matrix":[1, 6], "flags":4, "x":86, "y":15},
+ {"matrix":[1, 7], "flags":4, "x":100, "y":15},
- {"matrix": [1, 0], "x": 0, "y": 1.25},
- {"matrix": [1, 1], "x": 1.25, "y": 1.25},
- {"matrix": [1, 2], "x": 2.25, "y": 1.25},
- {"matrix": [1, 3], "x": 3.25, "y": 1.25},
- {"matrix": [1, 4], "x": 4.25, "y": 1.25},
- {"matrix": [1, 5], "x": 5.25, "y": 1.25},
- {"matrix": [1, 6], "x": 6.25, "y": 1.25},
- {"matrix": [1, 7], "x": 7.25, "y": 1.25},
- {"matrix": [7, 0], "x": 8.25, "y": 1.25},
- {"matrix": [7, 1], "x": 9.25, "y": 1.25},
- {"matrix": [7, 2], "x": 10.25, "y": 1.25},
- {"matrix": [7, 3], "x": 11.25, "y": 1.25},
- {"matrix": [7, 4], "x": 12.25, "y": 1.25},
- {"matrix": [7, 5], "x": 13.25, "y": 1.25},
- {"matrix": [7, 6], "x": 14.25, "y": 1.25, "w": 2},
- {"matrix": [7, 8], "x": 16.5, "y": 1.25},
+ {"matrix":[2, 0], "flags":1, "x":0, "y":27},
+ {"matrix":[2, 1], "flags":1, "x":21, "y":27},
+ {"matrix":[2, 2], "flags":4, "x":38, "y":27},
+ {"matrix":[2, 3], "flags":4, "x":52, "y":27},
+ {"matrix":[2, 4], "flags":4, "x":66, "y":27},
+ {"matrix":[2, 6], "flags":4, "x":79, "y":27},
+ {"matrix":[2, 7], "flags":4, "x":93, "y":27},
+ {"matrix":[3, 0], "flags":1, "x":0, "y":40},
+ {"matrix":[3, 1], "flags":8, "x":22, "y":40},
+ {"matrix":[3, 2], "flags":4, "x":41, "y":40},
+ {"matrix":[3, 3], "flags":4, "x":55, "y":40},
+ {"matrix":[3, 4], "flags":4, "x":69, "y":40},
+ {"matrix":[3, 5], "flags":4, "x":83, "y":40},
+ {"matrix":[3, 6], "flags":4, "x":97, "y":40},
- {"matrix": [2, 0], "x": 0, "y": 2.25},
- {"matrix": [2, 1], "x": 1.25, "y": 2.25, "w": 1.5},
- {"matrix": [2, 2], "x": 2.75, "y": 2.25},
- {"matrix": [2, 3], "x": 3.75, "y": 2.25},
- {"matrix": [2, 4], "x": 4.75, "y": 2.25},
- {"matrix": [2, 6], "x": 5.75, "y": 2.25},
- {"matrix": [2, 7], "x": 6.75, "y": 2.25},
- {"matrix": [8, 0], "x": 7.75, "y": 2.25},
- {"matrix": [8, 1], "x": 8.75, "y": 2.25},
- {"matrix": [8, 2], "x": 9.75, "y": 2.25},
- {"matrix": [8, 3], "x": 10.75, "y": 2.25},
- {"matrix": [8, 4], "x": 11.75, "y": 2.25},
- {"matrix": [8, 5], "x": 12.75, "y": 2.25},
- {"matrix": [8, 6], "x": 13.75, "y": 2.25},
- {"matrix": [8, 7], "x": 14.75, "y": 2.25, "w": 1.5},
- {"matrix": [8, 8], "x": 16.5, "y": 2.25},
+ {"matrix":[4, 0], "flags":1, "x":0, "y":52},
+ {"matrix":[4, 2], "flags":1, "x":34, "y":52},
+ {"matrix":[4, 3], "flags":4, "x":48, "y":52},
+ {"matrix":[4, 4], "flags":4, "x":61, "y":52},
+ {"matrix":[4, 5], "flags":4, "x":76, "y":52},
+ {"matrix":[4, 6], "flags":4, "x":90, "y":52},
+ {"matrix":[4, 7], "flags":4, "x":102, "y":52},
+ {"matrix":[5, 0], "flags":1, "x":0, "y":64},
+ {"matrix":[5, 1], "flags":1, "x":19, "y":64},
+ {"matrix":[5, 2], "flags":1, "x":36, "y":64},
+ {"matrix":[5, 3], "flags":1, "x":53, "y":64},
+ {"matrix":[5, 4], "flags":1, "x":70, "y":64},
+ {"matrix":[5, 6], "flags":4, "x":94, "y":64},
- {"matrix": [3, 0], "x": 0, "y": 3.25},
- {"matrix": [3, 1], "x": 1.25, "y": 3.25, "w": 1.75},
- {"matrix": [3, 2], "x": 3, "y": 3.25},
- {"matrix": [3, 3], "x": 4, "y": 3.25},
- {"matrix": [3, 4], "x": 5, "y": 3.25},
- {"matrix": [3, 5], "x": 6, "y": 3.25},
- {"matrix": [3, 6], "x": 7, "y": 3.25},
- {"matrix": [9, 0], "x": 8, "y": 3.25},
- {"matrix": [9, 1], "x": 9, "y": 3.25},
- {"matrix": [9, 2], "x": 10, "y": 3.25},
- {"matrix": [9, 3], "x": 11, "y": 3.25},
- {"matrix": [9, 4], "x": 12, "y": 3.25},
- {"matrix": [9, 5], "x": 13, "y": 3.25},
- {"matrix": [9, 7], "x": 14, "y": 3.25, "w": 2.25},
- {"matrix": [9, 8], "x": 16.5, "y": 3.25},
+ {"matrix":[6, 0], "flags":1, "x":110, "y":0},
+ {"matrix":[6, 1], "flags":1, "x":124, "y":0},
+ {"matrix":[6, 2], "flags":1, "x":138, "y":0},
+ {"matrix":[6, 3], "flags":1, "x":152, "y":0},
+ {"matrix":[6, 4], "flags":1, "x":165, "y":0},
+ {"matrix":[6, 5], "flags":1, "x":179, "y":0},
+ {"matrix":[6, 6], "flags":1, "x":193, "y":0},
+ {"matrix":[6, 7], "flags":1, "x":207, "y":0},
+ {"matrix":[7, 0], "flags":4, "x":110, "y":15},
+ {"matrix":[7, 1], "flags":4, "x":124, "y":15},
+ {"matrix":[7, 2], "flags":4, "x":138, "y":15},
+ {"matrix":[7, 3], "flags":4, "x":152, "y":15},
+ {"matrix":[7, 4], "flags":4, "x":165, "y":15},
+ {"matrix":[7, 5], "flags":4, "x":179, "y":15},
+ {"matrix":[7, 6], "flags":1, "x":200, "y":15},
+ {"matrix":[7, 8], "flags":1, "x":224, "y":15},
- {"matrix": [4, 0], "x": 0, "y": 4.25},
- {"matrix": [4, 2], "x": 1.25, "y": 4.25, "w": 2.25},
- {"matrix": [4, 3], "x": 3.5, "y": 4.25},
- {"matrix": [4, 4], "x": 4.5, "y": 4.25},
- {"matrix": [4, 5], "x": 5.5, "y": 4.25},
- {"matrix": [4, 6], "x": 6.5, "y": 4.25},
- {"matrix": [4, 7], "x": 7.5, "y": 4.25},
- {"matrix": [10, 0], "x": 8.5, "y": 4.25},
- {"matrix": [10, 1], "x": 9.5, "y": 4.25},
- {"matrix": [10, 2], "x": 10.5, "y": 4.25},
- {"matrix": [10, 3], "x": 11.5, "y": 4.25},
- {"matrix": [10, 4], "x": 12.5, "y": 4.25},
- {"matrix": [10, 5], "x": 13.5, "y": 4.25, "w": 1.75},
- {"matrix": [10, 7], "x": 15.5, "y": 4.25},
+ {"matrix":[8, 0], "flags":4, "x":104, "y":27},
+ {"matrix":[8, 1], "flags":4, "x":117, "y":27},
+ {"matrix":[8, 2], "flags":4, "x":131, "y":27},
+ {"matrix":[8, 3], "flags":4, "x":145, "y":27},
+ {"matrix":[8, 4], "flags":4, "x":158, "y":27},
+ {"matrix":[8, 5], "flags":4, "x":172, "y":27},
+ {"matrix":[8, 6], "flags":4, "x":186, "y":27},
+ {"matrix":[8, 7], "flags":4, "x":203, "y":27},
+ {"matrix":[8, 8], "flags":1, "x":224, "y":27},
+ {"matrix":[9, 0], "flags":4, "x":107, "y":40},
+ {"matrix":[9, 1], "flags":4, "x":121, "y":40},
+ {"matrix":[9, 2], "flags":4, "x":134, "y":40},
+ {"matrix":[9, 3], "flags":4, "x":148, "y":40},
+ {"matrix":[9, 4], "flags":4, "x":162, "y":40},
+ {"matrix":[9, 5], "flags":4, "x":176, "y":40},
+ {"matrix":[9, 7], "flags":1, "x":198, "y":40},
+ {"matrix":[9, 8], "flags":1, "x":224, "y":40},
- {"matrix": [5, 0], "x": 0, "y": 5.25},
- {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
- {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
- {"matrix": [5, 3], "x": 3.75, "y": 5.25, "w": 1.25},
- {"matrix": [5, 4], "x": 5, "y": 5.25, "w": 1.25},
- {"matrix": [5, 6], "x": 6.25, "y": 5.25, "w": 2.25},
- {"matrix": [11, 1], "x": 8.5, "y": 5.25, "w": 2.75},
- {"matrix": [11, 2], "x": 11.25, "y": 5.25},
- {"matrix": [11, 3], "x": 12.25, "y": 5.25},
- {"matrix": [11, 4], "x": 13.25, "y": 5.25},
- {"matrix": [11, 6], "x": 14.5, "y": 5.25},
- {"matrix": [11, 7], "x": 15.5, "y": 5.25},
- {"matrix": [11, 8], "x": 16.5, "y": 5.25}
- ]
- }
+ {"matrix":[10, 0], "flags":4, "x":114, "y":52},
+ {"matrix":[10, 1], "flags":4, "x":127, "y":52},
+ {"matrix":[10, 2], "flags":4, "x":141, "y":52},
+ {"matrix":[10, 3], "flags":4, "x":155, "y":52},
+ {"matrix":[10, 4], "flags":4, "x":169, "y":52},
+ {"matrix":[10, 5], "flags":1, "x":188, "y":52},
+ {"matrix":[10, 7], "flags":1, "x":210, "y":52},
+ {"matrix":[11, 1], "flags":4, "x":126, "y":64},
+ {"matrix":[11, 2], "flags":1, "x":152, "y":64},
+ {"matrix":[11, 3], "flags":1, "x":166, "y":64},
+ {"matrix":[11, 4], "flags":1, "x":180, "y":64},
+ {"matrix":[11, 6], "flags":1, "x":196, "y":64},
+ {"matrix":[11, 7], "flags":1, "x":210, "y":64},
+ {"matrix":[11, 8], "flags":1, "x":224, "y":64}
+ ]
}
}
diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c b/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c
index 3378ce7df9f..7334ad85203 100755
--- a/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c
+++ b/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c
@@ -15,20 +15,18 @@
*/
#include QMK_KEYBOARD_H
-// clang-format off
-
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
- WIN_FN
+ WIN_FN,
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_91(
+ [MAC_BASE] = LAYOUT_91_ansi(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
_______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
_______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -36,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
_______, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [MAC_FN] = LAYOUT_ansi_91(
+ [MAC_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -44,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
- [WIN_BASE] = LAYOUT_ansi_91(
+ [WIN_BASE] = LAYOUT_91_ansi(
KC_MUTE, 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_INS, KC_DEL, KC_MUTE,
_______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
_______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -52,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
_______, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [WIN_FN] = LAYOUT_ansi_91(
+ [WIN_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c b/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c
index 852f34def99..d5f87b7a398 100755
--- a/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c
+++ b/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c
@@ -17,17 +17,15 @@
#include QMK_KEYBOARD_H
#include "keychron_common.h"
-// clang-format off
-
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
- WIN_FN
+ WIN_FN,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_91(
+ [MAC_BASE] = LAYOUT_91_ansi(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -35,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MC_4, 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,
MC_5, KC_LCTL, KC_LOPTN, KC_LCMMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [MAC_FN] = LAYOUT_ansi_91(
+ [MAC_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -43,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
- [WIN_BASE] = LAYOUT_ansi_91(
+ [WIN_BASE] = LAYOUT_91_ansi(
KC_MUTE, 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_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -51,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MC_4, 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,
MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [WIN_FN] = LAYOUT_ansi_91(
+ [WIN_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c b/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c
index 0452eccec20..29fe3d488d1 100755
--- a/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c
+++ b/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c
@@ -16,8 +16,6 @@
#include QMK_KEYBOARD_H
-// clang-format off
-
enum layers{
MAC_BASE,
MAC_FN,
@@ -29,7 +27,7 @@ enum layers{
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_91(
+ [MAC_BASE] = LAYOUT_91_ansi(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -37,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MC_4, 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,
MC_5, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [MAC_FN] = LAYOUT_ansi_91(
+ [MAC_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -45,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
- [WIN_BASE] = LAYOUT_ansi_91(
+ [WIN_BASE] = LAYOUT_91_ansi(
KC_MUTE, 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_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -53,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MC_4, 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,
MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [WIN_FN] = LAYOUT_ansi_91(
+ [WIN_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/q11/ansi_encoder/rules.mk b/keyboards/keychron/q11/ansi_encoder/rules.mk
index 567ea30a2a8..ac78b227d60 100755
--- a/keyboards/keychron/q11/ansi_encoder/rules.mk
+++ b/keyboards/keychron/q11/ansi_encoder/rules.mk
@@ -1,9 +1,4 @@
-# Build Options
-# change yes to no to disable
-#
-EEPROM_DRIVER = wear_leveling
-WEAR_LEVELING_DRIVER = embedded_flash
-SERIAL_DRIVER = usart
-
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+SERIAL_DRIVER = usart
diff --git a/keyboards/keychron/q11/config.h b/keyboards/keychron/q11/config.h
index 604ec142b86..d2c7ad4a968 100755
--- a/keyboards/keychron/q11/config.h
+++ b/keyboards/keychron/q11/config.h
@@ -26,12 +26,9 @@
#define MATRIX_MASKED // actual mask is defined by `matrix_mask` in `q11.c`
-/* RGB Matrix Configuration */
+/* RGB Matrix Driver Configuration */
#define DRIVER_COUNT 1
#define DRIVER_ADDR_1 0b1110100
-#define DRIVER_1_LED_TOTAL 89
-#define RGB_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
-#define SPLIT_TRANSPORT_MIRROR
/* Increase I2C speed to 1000 KHz */
#define I2C1_TIMINGR_PRESC 0U
@@ -59,52 +56,5 @@
// RGB Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
-// #define ENABLE_RGB_MATRIX_ALPHAS_MODS
-// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-#define ENABLE_RGB_MATRIX_BREATHING
-// #define ENABLE_RGB_MATRIX_BAND_SAT
-// #define ENABLE_RGB_MATRIX_BAND_VAL
-// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-#define ENABLE_RGB_MATRIX_CYCLE_ALL
-#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-#define ENABLE_RGB_MATRIX_DUAL_BEACON
-#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
-// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-// #define ENABLE_RGB_MATRIX_RAINDROPS
-#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-// #define ENABLE_RGB_MATRIX_HUE_BREATHING
-// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
-// #define ENABLE_RGB_MATRIX_HUE_WAVE
-#define ENABLE_RGB_MATRIX_PIXEL_RAIN
-// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
-// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
-
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
-#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-
#define RGB_MATRIX_KEYPRESSES
-// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
-#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-#define ENABLE_RGB_MATRIX_SPLASH
-// #define ENABLE_RGB_MATRIX_MULTISPLASH
-#define ENABLE_RGB_MATRIX_SOLID_SPLASH
-// #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/keychron/q11/info.json b/keyboards/keychron/q11/info.json
new file mode 100755
index 00000000000..43029ebbc37
--- /dev/null
+++ b/keyboards/keychron/q11/info.json
@@ -0,0 +1,290 @@
+{
+ "keyboard_name": "Keychron Q11",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lalalademaxiya1",
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "usb": {
+ "vid": "0x3434"
+ },
+ "bootmagic": {
+ "matrix": [0, 1]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "dip_switch": true,
+ "extrakey": true,
+ "mousekey": true,
+ "encoder": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["A7", "A6", "A5", "A4", "A3", "A2", "A1", "C15", null],
+ "rows": ["A13", "A14", "A15", "B3", "B4", "B5"]
+ },
+ "diode_direction": "ROW2COL",
+ "split": {
+ "enabled": true,
+ "encoder": {
+ "right": {
+ "rotary": [
+ {"pin_a": "C14", "pin_b": "C15"}
+ ]
+ }
+ },
+ "matrix_pins": {
+ "right": {
+ "cols": ["A8", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0"],
+ "rows": ["B5", "B4", "B3", "A15", "A14", "A13"]
+ }
+ },
+ "transport": {
+ "protocol": "serial_usart",
+ "sync_matrix_state": true
+ },
+ "bootmagic": {
+ "matrix": [6, 7]
+ }
+ },
+ "encoder": {
+ "rotary": [
+ {
+ "pin_a": "B0",
+ "pin_b": "B1"
+ }
+ ]
+ },
+ "rgb_matrix": {
+ "driver": "CKLED2001",
+ "animations": {
+ "breathing": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "jellybean_raindrops": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true
+ }
+ },
+ "layouts": {
+ "LAYOUT_91_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 7.25, "y": 0},
+ {"matrix": [6, 0], "x": 8.25, "y": 0},
+ {"matrix": [6, 1], "x": 9.25, "y": 0},
+ {"matrix": [6, 2], "x": 10.25, "y": 0},
+ {"matrix": [6, 3], "x": 11.25, "y": 0},
+ {"matrix": [6, 4], "x": 12.25, "y": 0},
+ {"matrix": [6, 5], "x": 13.25, "y": 0},
+ {"matrix": [6, 6], "x": 14.25, "y": 0},
+ {"matrix": [6, 7], "x": 15.25, "y": 0},
+ {"matrix": [6, 8], "x": 16.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 1.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 1.25},
+ {"matrix": [1, 3], "x": 3.25, "y": 1.25},
+ {"matrix": [1, 4], "x": 4.25, "y": 1.25},
+ {"matrix": [1, 5], "x": 5.25, "y": 1.25},
+ {"matrix": [1, 6], "x": 6.25, "y": 1.25},
+ {"matrix": [1, 7], "x": 7.25, "y": 1.25},
+ {"matrix": [7, 0], "x": 8.25, "y": 1.25},
+ {"matrix": [7, 1], "x": 9.25, "y": 1.25},
+ {"matrix": [7, 2], "x": 10.25, "y": 1.25},
+ {"matrix": [7, 3], "x": 11.25, "y": 1.25},
+ {"matrix": [7, 4], "x": 12.25, "y": 1.25},
+ {"matrix": [7, 5], "x": 13.25, "y": 1.25},
+ {"matrix": [7, 6], "x": 14.25, "y": 1.25, "w": 2},
+ {"matrix": [7, 8], "x": 16.5, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25},
+ {"matrix": [2, 1], "x": 1.25, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 2], "x": 2.75, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.75, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.75, "y": 2.25},
+ {"matrix": [2, 6], "x": 5.75, "y": 2.25},
+ {"matrix": [2, 7], "x": 6.75, "y": 2.25},
+ {"matrix": [8, 0], "x": 7.75, "y": 2.25},
+ {"matrix": [8, 1], "x": 8.75, "y": 2.25},
+ {"matrix": [8, 2], "x": 9.75, "y": 2.25},
+ {"matrix": [8, 3], "x": 10.75, "y": 2.25},
+ {"matrix": [8, 4], "x": 11.75, "y": 2.25},
+ {"matrix": [8, 5], "x": 12.75, "y": 2.25},
+ {"matrix": [8, 6], "x": 13.75, "y": 2.25},
+ {"matrix": [8, 7], "x": 14.75, "y": 2.25, "w": 1.5},
+ {"matrix": [8, 8], "x": 16.5, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 2], "x": 3, "y": 3.25},
+ {"matrix": [3, 3], "x": 4, "y": 3.25},
+ {"matrix": [3, 4], "x": 5, "y": 3.25},
+ {"matrix": [3, 5], "x": 6, "y": 3.25},
+ {"matrix": [3, 6], "x": 7, "y": 3.25},
+ {"matrix": [9, 0], "x": 8, "y": 3.25},
+ {"matrix": [9, 1], "x": 9, "y": 3.25},
+ {"matrix": [9, 2], "x": 10, "y": 3.25},
+ {"matrix": [9, 3], "x": 11, "y": 3.25},
+ {"matrix": [9, 4], "x": 12, "y": 3.25},
+ {"matrix": [9, 5], "x": 13, "y": 3.25},
+ {"matrix": [9, 7], "x": 14, "y": 3.25, "w": 2.25},
+ {"matrix": [9, 8], "x": 16.5, "y": 3.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25},
+ {"matrix": [4, 2], "x": 1.25, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 3], "x": 3.5, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.5, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.5, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.5, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.5, "y": 4.25},
+ {"matrix": [10, 0], "x": 8.5, "y": 4.25},
+ {"matrix": [10, 1], "x": 9.5, "y": 4.25},
+ {"matrix": [10, 2], "x": 10.5, "y": 4.25},
+ {"matrix": [10, 3], "x": 11.5, "y": 4.25},
+ {"matrix": [10, 4], "x": 12.5, "y": 4.25},
+ {"matrix": [10, 5], "x": 13.5, "y": 4.25, "w": 1.75},
+ {"matrix": [10, 7], "x": 15.5, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 3], "x": 3.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 4], "x": 5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 6.25, "y": 5.25, "w": 2.25},
+ {"matrix": [11, 1], "x": 8.5, "y": 5.25, "w": 2.75},
+ {"matrix": [11, 2], "x": 11.25, "y": 5.25},
+ {"matrix": [11, 3], "x": 12.25, "y": 5.25},
+ {"matrix": [11, 4], "x": 13.25, "y": 5.25},
+ {"matrix": [11, 6], "x": 14.5, "y": 5.25},
+ {"matrix": [11, 7], "x": 15.5, "y": 5.25},
+ {"matrix": [11, 8], "x": 16.5, "y": 5.25}
+ ]
+ },
+ "LAYOUT_92_iso": {
+ "layout": [
+ {"matrix":[0,0], "x":0, "y":0 },
+ {"matrix":[0,1], "x":1.25, "y":0 },
+ {"matrix":[0,2], "x":2.25, "y":0 },
+ {"matrix":[0,3], "x":3.25, "y":0 },
+ {"matrix":[0,4], "x":4.25, "y":0 },
+ {"matrix":[0,5], "x":5.25, "y":0 },
+ {"matrix":[0,6], "x":6.25, "y":0 },
+ {"matrix":[0,7], "x":7.25, "y":0 },
+ {"matrix":[6,0], "x":9, "y":0 },
+ {"matrix":[6,1], "x":10, "y":0 },
+ {"matrix":[6,2], "x":11, "y":0 },
+ {"matrix":[6,3], "x":12, "y":0 },
+ {"matrix":[6,4], "x":13, "y":0 },
+ {"matrix":[6,5], "x":14, "y":0 },
+ {"matrix":[6,6], "x":15, "y":0 },
+ {"matrix":[6,7], "x":16, "y":0 },
+ {"matrix":[6,8], "x":17.25, "y":0 },
+
+ {"matrix":[1,0], "x":0, "y":1.25 },
+ {"matrix":[1,1], "x":1.25, "y":1.25 },
+ {"matrix":[1,2], "x":2.25, "y":1.25 },
+ {"matrix":[1,3], "x":3.25, "y":1.25 },
+ {"matrix":[1,4], "x":4.25, "y":1.25 },
+ {"matrix":[1,5], "x":5.25, "y":1.25 },
+ {"matrix":[1,6], "x":6.25, "y":1.25 },
+ {"matrix":[1,7], "x":7.25, "y":1.25 },
+ {"matrix":[7,0], "x":9, "y":1.25 },
+ {"matrix":[7,1], "x":10, "y":1.25 },
+ {"matrix":[7,2], "x":11, "y":1.25 },
+ {"matrix":[7,3], "x":12, "y":1.25 },
+ {"matrix":[7,4], "x":13, "y":1.25 },
+ {"matrix":[7,5], "x":14, "y":1.25 },
+ {"matrix":[7,6], "x":15, "y":1.25, "w":2 },
+ {"matrix":[7,8], "x":17.25, "y":1.25 },
+
+ {"matrix":[2,0], "x":0, "y":2.25 },
+ {"matrix":[2,1], "x":1.25, "y":2.25, "w":1.5 },
+ {"matrix":[2,2], "x":2.75, "y":2.25 },
+ {"matrix":[2,3], "x":3.75, "y":2.25 },
+ {"matrix":[2,4], "x":4.75, "y":2.25 },
+ {"matrix":[2,6], "x":5.75, "y":2.25 },
+ {"matrix":[2,7], "x":6.75, "y":2.25 },
+ {"matrix":[8,0], "x":8.5, "y":2.25 },
+ {"matrix":[8,1], "x":9.5, "y":2.25 },
+ {"matrix":[8,2], "x":10.5, "y":2.25 },
+ {"matrix":[8,3], "x":11.5, "y":2.25 },
+ {"matrix":[8,4], "x":12.5, "y":2.25 },
+ {"matrix":[8,5], "x":13.5, "y":2.25 },
+ {"matrix":[8,6], "x":14.5, "y":2.25 },
+ {"matrix":[8,8], "x":17.25, "y":2.25 },
+
+ {"matrix":[3,0], "x":0, "y":3.25 },
+ {"matrix":[3,1], "x":1.25, "y":3.25, "w":1.75 },
+ {"matrix":[3,2], "x":3, "y":3.25 },
+ {"matrix":[3,3], "x":4, "y":3.25 },
+ {"matrix":[3,4], "x":5, "y":3.25 },
+ {"matrix":[3,5], "x":6, "y":3.25 },
+ {"matrix":[3,6], "x":7, "y":3.25 },
+ {"matrix":[9,0], "x":8.75, "y":3.25 },
+ {"matrix":[9,1], "x":9.75, "y":3.25 },
+ {"matrix":[9,2], "x":10.75, "y":3.25 },
+ {"matrix":[9,3], "x":11.75, "y":3.25 },
+ {"matrix":[9,4], "x":12.75, "y":3.25 },
+ {"matrix":[9,5], "x":13.75, "y":3.25 },
+ {"matrix":[9,7], "x":14.75, "y":3.25 },
+ {"matrix":[8,7], "x":15.75, "y":2.25, "w":1.25, "h":2 },
+ {"matrix":[9,8], "x":17.25, "y":3.25 },
+
+ {"matrix":[4,0], "x":0, "y":4.25 },
+ {"matrix":[4,1], "x":1.25, "y":4.25, "w":1.25 },
+ {"matrix":[4,2], "x":2.5, "y":4.25 },
+ {"matrix":[4,3], "x":3.5, "y":4.25 },
+ {"matrix":[4,4], "x":4.5, "y":4.25 },
+ {"matrix":[4,5], "x":5.5, "y":4.25 },
+ {"matrix":[4,6], "x":6.5, "y":4.25 },
+ {"matrix":[4,7], "x":7.5, "y":4.25 },
+ {"matrix":[10,0], "x":9.25, "y":4.25 },
+ {"matrix":[10,1], "x":10.25, "y":4.25 },
+ {"matrix":[10,2], "x":11.25, "y":4.25 },
+ {"matrix":[10,3], "x":12.25, "y":4.25 },
+ {"matrix":[10,4], "x":13.25, "y":4.25 },
+ {"matrix":[10,5], "x":14.25, "y":4.25, "w":1.75 },
+ {"matrix":[10,7], "x":16.25, "y":4.25 },
+
+ {"matrix":[5,0], "x":0, "y":5.25 },
+ {"matrix":[5,1], "x":1.25, "y":5.25, "w":1.25 },
+ {"matrix":[5,2], "x":2.5, "y":5.25, "w":1.25 },
+ {"matrix":[5,3], "x":3.75, "y":5.25, "w":1.25 },
+ {"matrix":[5,4], "x":5, "y":5.25, "w":1.25 },
+ {"matrix":[5,6], "x":6.25, "y":5.25, "w":2.25 },
+ {"matrix":[11,1], "x":9.25, "y":5.25, "w":2.75 },
+ {"matrix":[11,2], "x":12, "y":5.25 },
+ {"matrix":[11,3], "x":13, "y":5.25 },
+ {"matrix":[11,4], "x":14, "y":5.25 },
+ {"matrix":[11,6], "x":15.25, "y":5.25 },
+ {"matrix":[11,7], "x":16.25, "y":5.25 },
+ {"matrix":[11,8], "x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/q11/iso_encoder/config.h b/keyboards/keychron/q11/iso_encoder/config.h
new file mode 100755
index 00000000000..57baea4c694
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/config.h
@@ -0,0 +1,23 @@
+/* Copyright 2023 @ Keychron(https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* RGB Matrix Configuration */
+#define RGB_MATRIX_LED_COUNT 90
+
+/* Enable caps-lock LED */
+#define CAPS_LOCK_LED_INDEX 23
diff --git a/keyboards/keychron/q11/iso_encoder/info.json b/keyboards/keychron/q11/iso_encoder/info.json
new file mode 100755
index 00000000000..0529ccb2916
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/info.json
@@ -0,0 +1,106 @@
+{
+ "usb": {
+ "pid": "0x01E1",
+ "device_version": "1.0.0"
+ },
+ "rgb_matrix": {
+ "split_count": [43, 47],
+ "layout": [
+ {"matrix":[0, 1], "flags":1, "x":17, "y":0},
+ {"matrix":[0, 2], "flags":1, "x":31, "y":0},
+ {"matrix":[0, 3], "flags":1, "x":45, "y":0},
+ {"matrix":[0, 4], "flags":1, "x":59, "y":0},
+ {"matrix":[0, 5], "flags":1, "x":72, "y":0},
+ {"matrix":[0, 6], "flags":1, "x":86, "y":0},
+ {"matrix":[0, 7], "flags":1, "x":100, "y":0},
+ {"matrix":[1, 0], "flags":1, "x":0, "y":15},
+ {"matrix":[1, 1], "flags":1, "x":17, "y":15},
+ {"matrix":[1, 2], "flags":4, "x":31, "y":15},
+ {"matrix":[1, 3], "flags":4, "x":45, "y":15},
+ {"matrix":[1, 4], "flags":4, "x":59, "y":15},
+ {"matrix":[1, 5], "flags":4, "x":72, "y":15},
+ {"matrix":[1, 6], "flags":4, "x":86, "y":15},
+ {"matrix":[1, 7], "flags":4, "x":100, "y":15},
+
+ {"matrix":[2, 0], "flags":1, "x":0, "y":27},
+ {"matrix":[2, 1], "flags":1, "x":21, "y":27},
+ {"matrix":[2, 2], "flags":4, "x":38, "y":27},
+ {"matrix":[2, 3], "flags":4, "x":52, "y":27},
+ {"matrix":[2, 4], "flags":4, "x":66, "y":27},
+ {"matrix":[2, 6], "flags":4, "x":79, "y":27},
+ {"matrix":[2, 7], "flags":4, "x":93, "y":27},
+ {"matrix":[3, 0], "flags":1, "x":0, "y":40},
+ {"matrix":[3, 1], "flags":8, "x":22, "y":40},
+ {"matrix":[3, 2], "flags":4, "x":41, "y":40},
+ {"matrix":[3, 3], "flags":4, "x":55, "y":40},
+ {"matrix":[3, 4], "flags":4, "x":69, "y":40},
+ {"matrix":[3, 5], "flags":4, "x":83, "y":40},
+ {"matrix":[3, 6], "flags":4, "x":97, "y":40},
+
+ {"matrix":[4, 0], "flags":1, "x":0, "y":52},
+ {"matrix":[4, 1], "flags":1, "x":19, "y":52},
+ {"matrix":[4, 2], "flags":1, "x":34, "y":52},
+ {"matrix":[4, 3], "flags":4, "x":48, "y":52},
+ {"matrix":[4, 4], "flags":4, "x":62, "y":52},
+ {"matrix":[4, 5], "flags":4, "x":76, "y":52},
+ {"matrix":[4, 6], "flags":4, "x":90, "y":52},
+ {"matrix":[4, 7], "flags":4, "x":103, "y":52},
+ {"matrix":[5, 0], "flags":1, "x":0, "y":64},
+ {"matrix":[5, 1], "flags":1, "x":19, "y":64},
+ {"matrix":[5, 2], "flags":1, "x":36, "y":64},
+ {"matrix":[5, 3], "flags":1, "x":53, "y":64},
+ {"matrix":[5, 4], "flags":1, "x":71, "y":64},
+ {"matrix":[5, 6], "flags":4, "x":95, "y":64},
+
+ {"matrix":[6, 0], "flags":1, "x":110, "y":0},
+ {"matrix":[6, 1], "flags":1, "x":124, "y":0},
+ {"matrix":[6, 2], "flags":1, "x":138, "y":0},
+ {"matrix":[6, 3], "flags":1, "x":152, "y":0},
+ {"matrix":[6, 4], "flags":1, "x":165, "y":0},
+ {"matrix":[6, 5], "flags":1, "x":179, "y":0},
+ {"matrix":[6, 6], "flags":1, "x":193, "y":0},
+ {"matrix":[6, 7], "flags":1, "x":207, "y":0},
+ {"matrix":[7, 0], "flags":4, "x":110, "y":15},
+ {"matrix":[7, 1], "flags":4, "x":124, "y":15},
+ {"matrix":[7, 2], "flags":4, "x":138, "y":15},
+ {"matrix":[7, 3], "flags":4, "x":152, "y":15},
+ {"matrix":[7, 4], "flags":4, "x":165, "y":15},
+ {"matrix":[7, 5], "flags":4, "x":179, "y":15},
+ {"matrix":[7, 6], "flags":1, "x":200, "y":15},
+ {"matrix":[7, 8], "flags":1, "x":224, "y":15},
+
+ {"matrix":[8, 0], "flags":4, "x":103, "y":27},
+ {"matrix":[8, 1], "flags":4, "x":117, "y":27},
+ {"matrix":[8, 2], "flags":4, "x":131, "y":27},
+ {"matrix":[8, 3], "flags":4, "x":145, "y":27},
+ {"matrix":[8, 4], "flags":4, "x":158, "y":27},
+ {"matrix":[8, 5], "flags":4, "x":172, "y":27},
+ {"matrix":[8, 6], "flags":4, "x":186, "y":27},
+ {"matrix":[8, 8], "flags":1, "x":224, "y":27},
+ {"matrix":[9, 0], "flags":4, "x":107, "y":40},
+ {"matrix":[9, 1], "flags":4, "x":121, "y":40},
+ {"matrix":[9, 2], "flags":4, "x":134, "y":40},
+ {"matrix":[9, 3], "flags":4, "x":148, "y":40},
+ {"matrix":[9, 4], "flags":4, "x":162, "y":40},
+ {"matrix":[9, 5], "flags":4, "x":176, "y":40},
+ {"matrix":[9, 7], "flags":1, "x":190, "y":40},
+ {"matrix":[8, 7], "flags":1, "x":208, "y":36},
+ {"matrix":[9, 8], "flags":1, "x":224, "y":40},
+
+ {"matrix":[10, 0], "flags":4, "x":114, "y":52},
+ {"matrix":[10, 1], "flags":4, "x":127, "y":52},
+ {"matrix":[10, 2], "flags":4, "x":141, "y":52},
+ {"matrix":[10, 3], "flags":4, "x":155, "y":52},
+ {"matrix":[10, 4], "flags":4, "x":169, "y":52},
+ {"matrix":[10, 5], "flags":1, "x":188, "y":52},
+ {"matrix":[10, 7], "flags":1, "x":210, "y":52},
+ {"matrix":[11, 1], "flags":4, "x":126, "y":64},
+ {"matrix":[11, 2], "flags":1, "x":152, "y":64},
+ {"matrix":[11, 3], "flags":1, "x":166, "y":64},
+ {"matrix":[11, 4], "flags":1, "x":180, "y":64},
+ {"matrix":[11, 6], "flags":1, "x":196, "y":64},
+ {"matrix":[11, 7], "flags":1, "x":210, "y":64},
+ {"matrix":[11, 8], "flags":1, "x":224, "y":64}
+ ]
+ }
+}
diff --git a/keyboards/keychron/q11/iso_encoder/iso_encoder.c b/keyboards/keychron/q11/iso_encoder/iso_encoder.c
new file mode 100755
index 00000000000..08858d9b792
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/iso_encoder.c
@@ -0,0 +1,129 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, A_2, C_2, B_2}, // ESC
+ {0, A_3, C_3, B_3}, // F1
+ {0, A_4, C_4, B_4}, // F2
+ {0, A_5, C_5, B_5}, // F3
+ {0, A_6, C_6, B_6}, // F4
+ {0, A_7, C_7, B_7}, // F5
+ {0, A_8, C_8, B_8}, // F6
+
+ {0, D_1, F_1, E_1}, // M1
+ {0, D_2, F_2, E_2}, // `~
+ {0, D_3, F_3, E_3}, // 1!
+ {0, D_4, F_4, E_4}, // 2@
+ {0, D_5, F_5, E_5}, // 3#
+ {0, D_6, F_6, E_6}, // 4$
+ {0, D_7, F_7, E_7}, // 5%
+ {0, D_8, F_8, E_8}, // 6^
+
+ {0, G_1, I_1, H_1}, // M2
+ {0, G_2, I_2, H_2}, // TAB
+ {0, G_3, I_3, H_3}, // Q
+ {0, G_4, I_4, H_4}, // W
+ {0, G_5, I_5, H_5}, // E
+ {0, G_6, I_6, H_6}, // R
+ {0, G_7, I_7, H_7}, // T
+
+ {0, J_1, L_1, K_1}, // M3
+ {0, J_2, L_2, K_2}, // CapsJock
+ {0, J_3, L_3, K_3}, // A
+ {0, J_4, L_4, K_4}, // S
+ {0, J_5, L_5, K_5}, // D
+ {0, J_6, L_6, K_6}, // F
+ {0, J_7, L_7, K_7}, // G
+
+ {0, J_9, L_9, K_9}, // M4
+ {0, J_10, L_10, K_10}, // Shift_L
+ {0, J_11, L_11, K_11}, // NUBS
+ {0, J_12, L_12, K_12}, // Z
+ {0, J_13, L_13, K_13}, // X
+ {0, J_14, L_14, K_14}, // C
+ {0, J_15, L_15, K_15}, // V
+ {0, J_16, L_16, K_16}, // B
+
+ {0, G_9, I_9, H_9}, // M5
+ {0, G_10, I_10, H_10}, // Ctrl_L
+ {0, G_11, I_11, H_11}, // WGn_L
+ {0, G_12, I_12, H_12}, // Alt_L
+ {0, G_13, I_13, H_13}, // Fn
+ {0, G_15, I_15, H_15}, // Space
+
+ {0, A_16, C_16, B_16}, // F7
+ {0, A_15, C_15, B_15}, // F8
+ {0, A_14, C_14, B_14}, // F9
+ {0, A_13, C_13, B_13}, // F11
+ {0, A_12, C_12, B_12}, // F11
+ {0, A_11, C_11, B_11}, // F12
+ {0, A_10, C_10, B_10}, // INS
+ {0, A_9, C_9, B_9}, // DEL
+
+ {0, D_16, F_16, E_16}, // 7&
+ {0, D_15, F_15, E_15}, // 8*
+ {0, D_14, F_14, E_14}, // 9(
+ {0, D_13, F_13, E_13}, // 1)
+ {0, D_12, F_12, E_12}, // -_
+ {0, D_11, F_11, E_11}, // =+
+ {0, D_10, F_10, E_10}, // BackSpace
+ {0, D_8, F_8, E_8}, // PgUp
+
+ {0, G_16, I_16, H_16}, // Y
+ {0, G_15, I_15, H_15}, // U
+ {0, G_14, I_14, H_14}, // G
+ {0, G_13, I_13, H_13}, // O
+ {0, G_12, I_12, H_12}, // P
+ {0, G_11, I_11, H_11}, // [
+ {0, G_10, I_10, H_10}, // ]
+ {0, G_8, I_8, H_8}, // PgDn
+
+ {0, J_16, L_16, K_16}, // H
+ {0, J_15, L_15, K_15}, // J
+ {0, J_14, L_14, K_14}, // KKEY_PRESS_HOME
+ {0, J_13, L_13, K_13}, // J
+ {0, J_12, L_12, K_12}, // ;:
+ {0, J_11, L_11, K_11}, // '"
+ {0, J_9, L_9, K_9}, // NUHS
+ {0, G_9, I_9, H_9}, // Enter
+ {0, J_8, L_8, K_8}, // Home
+
+ {0, J_7, L_7, K_7}, // N
+ {0, J_6, L_6, K_6}, // M
+ {0, J_5, L_5, K_5}, // ,<
+ {0, J_4, L_4, K_4}, // .>
+ {0, J_3, L_3, K_3}, // ?/
+ {0, J_2, L_2, K_2}, // Shift_R
+ {0, J_1, L_1, K_1}, // Up
+
+ {0, G_6, I_6, H_6}, // Space
+ {0, G_5, I_5, H_5}, // Win_R
+ {0, G_4, I_4, H_4}, // Fn
+ {0, G_3, I_3, H_3}, // Ctrl_R
+ {0, G_2, I_2, H_2}, // Left
+ {0, G_1, I_1, H_1}, // Down
+ {0, G_7, I_7, H_7}, // Right
+};
+#endif
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/default/keymap.c b/keyboards/keychron/q11/iso_encoder/keymaps/default/keymap.c
new file mode 100755
index 00000000000..2c494c08d52
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN,
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_92_iso(
+ KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
+ _______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ _______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ _______, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ _______, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ _______, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_92_iso(
+ KC_MUTE, 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_INS, KC_DEL, KC_MUTE,
+ _______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ _______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ _______, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ _______, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ _______, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+ [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
+};
+#endif // ENCODER_MAP_ENABLE
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/default/rules.mk b/keyboards/keychron/q11/iso_encoder/keymaps/default/rules.mk
new file mode 100755
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/keychron/keymap.c b/keyboards/keychron/q11/iso_encoder/keymaps/keychron/keymap.c
new file mode 100755
index 00000000000..8269bf1a880
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/keychron/keymap.c
@@ -0,0 +1,82 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_92_iso(
+ KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
+ MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ MC_2, 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_PGDN,
+ MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ MC_5, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_92_iso(
+ KC_MUTE, 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_INS, KC_DEL, KC_MUTE,
+ MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ MC_2, 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_PGDN,
+ MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_DIRECTIONS][NUM_DIRECTIONS] = {
+ [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+ [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}
+};
+#endif // ENCODER_MAP_ENABLE
+
+// clang-format on
+
+void housekeeping_task_user(void) {
+ housekeeping_task_keychron();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_keychron(keycode, record)) {
+ return false;
+ }
+
+ return true;
+}
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/keychron/rules.mk b/keyboards/keychron/q11/iso_encoder/keymaps/keychron/rules.mk
new file mode 100755
index 00000000000..9cf1a9b56cb
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/keychron/rules.mk
@@ -0,0 +1,5 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/via/keymap.c b/keyboards/keychron/q11/iso_encoder/keymaps/via/keymap.c
new file mode 100755
index 00000000000..8e969a8f815
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/via/keymap.c
@@ -0,0 +1,70 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN,
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_92_iso(
+ KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
+ MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ MC_2, 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_PGDN,
+ MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ MC_5, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_92_iso(
+ KC_MUTE, 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_INS, KC_DEL, KC_MUTE,
+ MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ MC_2, 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_PGDN,
+ MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+ [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
+};
+#endif // ENCODER_MAP_ENABLE
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/via/rules.mk b/keyboards/keychron/q11/iso_encoder/keymaps/via/rules.mk
new file mode 100755
index 00000000000..f1adcab005e
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keychron/q11/iso_encoder/rules.mk b/keyboards/keychron/q11/iso_encoder/rules.mk
new file mode 100755
index 00000000000..ac78b227d60
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/rules.mk
@@ -0,0 +1,4 @@
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+SERIAL_DRIVER = usart
diff --git a/keyboards/keychron/q11/q11.c b/keyboards/keychron/q11/q11.c
index 8cfbb38fff0..eccb5473e15 100755
--- a/keyboards/keychron/q11/q11.c
+++ b/keyboards/keychron/q11/q11.c
@@ -47,7 +47,7 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
}
#endif
-#if defined(RGB_MATRIX_ENABLE) && (defined(CAPS_LOCK_LED_INDEX) || defined(NUM_LOCK_LED_INDEX))
+#if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX)
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
@@ -100,3 +100,63 @@ bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
return true;
}
#endif
+
+#define ADC_BUFFER_DEPTH 1
+#define ADC_NUM_CHANNELS 1
+#define ADC_SAMPLING_RATE ADC_SMPR_SMP_12P5
+#define ADC_RESOLUTION ADC_CFGR_RES_10BITS
+
+static int16_t analogReadPin_my(pin_t pin) {
+ ADCConfig adcCfg = {};
+ adcsample_t sampleBuffer[ADC_NUM_CHANNELS * ADC_BUFFER_DEPTH];
+ ADCDriver *targetDriver = &ADCD1;
+ ADCConversionGroup adcConversionGroup = {
+ .circular = FALSE,
+ .num_channels = (uint16_t)(ADC_NUM_CHANNELS),
+ .cfgr = ADC_RESOLUTION,
+ };
+
+ palSetLineMode(pin, PAL_MODE_INPUT_ANALOG);
+ switch (pin) {
+ case B0:
+ adcConversionGroup.smpr[2] = ADC_SMPR2_SMP_AN15(ADC_SAMPLING_RATE);
+ adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(ADC_CHANNEL_IN15);
+ sampleBuffer[0] = 0;
+ break;
+ case B1:
+ adcConversionGroup.smpr[2] = ADC_SMPR2_SMP_AN16(ADC_SAMPLING_RATE);
+ adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(ADC_CHANNEL_IN16);
+ sampleBuffer[0] = 0;
+ break;
+ default:
+ return 0;
+ }
+ adcStart(targetDriver, &adcCfg);
+ if (adcConvert(targetDriver, &adcConversionGroup, &sampleBuffer[0], ADC_BUFFER_DEPTH) != MSG_OK) {
+ return 0;
+ }
+
+ return *sampleBuffer;
+}
+
+void keyboard_post_init_kb(void) {
+ // 1. The pin A5/B5 of the USB C interface in the left hand is connected to the pin A0 of MCU,
+ // A0 will be set to output and write high when keyboard initial.
+ // 2. The same pin in the right hand is connected to the pin B0 and B1 of MCU respectively,
+ // and the ADC function of B0 and B1 will be enabled when keyboard initial.
+ // 3. because the serial usart RXD and TXD is multiplexed on USB's D+ and D- in the right hand.
+ // So detect the voltage on the pin A5/B5 of the USB C interface by ADC,
+ // and disable USB connectivity when the ADC value exceeds 1000,
+ // to avoid affecting the serial usart communication between the left hand and the right hand.
+ if (is_keyboard_left()) {
+ setPinOutput(A0);
+ writePinHigh(A0);
+ } else {
+ if ((analogReadPin_my(B0) > 1000) || (analogReadPin_my(B1) > 1000)) {
+ setPinInput(A11);
+ setPinInput(A12);
+ }
+ }
+
+ keyboard_post_init_user();
+}
diff --git a/keyboards/keychron/q11/readme.md b/keyboards/keychron/q11/readme.md
index 3dad920e04e..e6ed2afb750 100644
--- a/keyboards/keychron/q11/readme.md
+++ b/keyboards/keychron/q11/readme.md
@@ -11,11 +11,13 @@ A customizable 75% split keyboard.
Make example for this keyboard (after setting up your build environment):
make keychron/q11/ansi_encoder:default
+ make keychron/q11/iso_encoder:default
Flashing example for this keyboard:
make keychron/q11/ansi_encoder:default:flash
+ make keychron/q11/iso_encoder:default:flash
-**Reset Key**: Hold down the key located at *K01*, which programmed as *Esc* while plugging in the keyboard.
+**Reset Key**: The master and slave side should be flashed individually, to enter flashing mode, hold down the key located at *K01*, which programmed as *Esc* while plugging in the keyboard for the master side and hold down the key located at *K67*, which programmed as *Del* while plugging in the keyboard for the slave side.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keychron/s1/ansi/white/config.h b/keyboards/keychron/s1/ansi/white/config.h
index ee09c95266c..65a79726ca7 100644
--- a/keyboards/keychron/s1/ansi/white/config.h
+++ b/keyboards/keychron/s1/ansi/white/config.h
@@ -31,6 +31,9 @@
/* Disable LED lighting when PC is in suspend */
#define LED_DISABLE_WHEN_USB_SUSPENDED
+/* Enable caps-lock LED */
+#define CAPS_LOCK_LED_INDEX 46
+
// LED Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
// https://docs.qmk.fm/#/feature_led_matrix?id=led-matrix-effects
diff --git a/keyboards/keychron/s1/s1.c b/keyboards/keychron/s1/s1.c
index 50f54b65478..d8488dd6ea6 100644
--- a/keyboards/keychron/s1/s1.c
+++ b/keyboards/keychron/s1/s1.c
@@ -28,7 +28,7 @@ const matrix_row_t matrix_mask[] = {
#ifdef DIP_SWITCH_ENABLE
bool dip_switch_update_kb(uint8_t index, bool active) {
- if (!dip_switch_update_user(index, active)) { return false;}
+ if (!dip_switch_update_user(index, active)) { return false; }
if (index == 0) {
default_layer_set(1UL << (active ? 2 : 0));
}
@@ -73,10 +73,54 @@ bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 255, 255, 255);
} else {
if (!rgb_matrix_get_flags()) {
- RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0);
+ RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0);
}
}
return true;
}
-#endif // CAPS_LOCK_LED_INDEX
+#endif // RGB_MATRIX_ENABLE && CAPS_LOCK_LED_INDEX
+
+#if defined(LED_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX)
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) { return false; }
+ switch (keycode) {
+#ifdef LED_MATRIX_ENABLE
+ case BL_TOGG:
+ if (record->event.pressed) {
+ switch (led_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ led_matrix_set_flags(LED_FLAG_NONE);
+ led_matrix_set_value_all(0);
+ } break;
+ default: {
+ led_matrix_set_flags(LED_FLAG_ALL);
+ } break;
+ }
+ }
+ if (!led_matrix_is_enabled()) {
+ led_matrix_set_flags(LED_FLAG_ALL);
+ led_matrix_enable();
+ }
+ return false;
+#endif
+ }
+ return true;
+}
+
+bool led_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!led_matrix_indicators_advanced_user(led_min, led_max)) { return false; }
+
+ if (host_keyboard_led_state().caps_lock) {
+ led_matrix_set_value(CAPS_LOCK_LED_INDEX, 255);
+
+ } else {
+ if (!led_matrix_get_flags()) {
+ led_matrix_set_value(CAPS_LOCK_LED_INDEX, 0);
+ }
+ }
+ return true;
+}
+
+#endif // LED_MATRIX_ENABLE && CAPS_LOCK_LED_INDEX
diff --git a/keyboards/keychron/v4/ansi/info.json b/keyboards/keychron/v4/ansi/info.json
index e45a9c18d52..b55717243e1 100644
--- a/keyboards/keychron/v4/ansi/info.json
+++ b/keyboards/keychron/v4/ansi/info.json
@@ -18,8 +18,12 @@
"diode_direction": "ROW2COL",
"processor": "STM32L432",
"bootloader": "stm32-dfu",
+ "layout_aliases": {
+ "LAYOUT_ansi_61": "LAYOUT_60_ansi"
+ },
+ "community_layouts": ["60_ansi"],
"layouts": {
- "LAYOUT_ansi_61": {
+ "LAYOUT_60_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/keychron/v4/ansi/keymaps/default/keymap.c b/keyboards/keychron/v4/ansi/keymaps/default/keymap.c
index 76c2f1b006c..b23029bee48 100644
--- a/keyboards/keychron/v4/ansi/keymaps/default/keymap.c
+++ b/keyboards/keychron/v4/ansi/keymaps/default/keymap.c
@@ -30,35 +30,35 @@ enum layers {
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_61(
+ [MAC_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_ansi_61(
+ [WIN_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_ansi_61(
+ [_FN1] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, _______, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_ansi_61(
+ [_FN2] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_ansi_61(
+ [_FN3] = LAYOUT_60_ansi(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/v4/ansi/keymaps/keychron/keymap.c b/keyboards/keychron/v4/ansi/keymaps/keychron/keymap.c
index 2f09fd42d8c..50a5fd4267e 100644
--- a/keyboards/keychron/v4/ansi/keymaps/keychron/keymap.c
+++ b/keyboards/keychron/v4/ansi/keymaps/keychron/keymap.c
@@ -28,35 +28,35 @@ enum layers {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_61(
+ [MAC_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_ansi_61(
+ [WIN_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_ansi_61(
+ [_FN1] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_SNAP, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_ansi_61(
+ [_FN2] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_ansi_61(
+ [_FN3] = LAYOUT_60_ansi(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/v4/ansi/keymaps/via/keymap.c b/keyboards/keychron/v4/ansi/keymaps/via/keymap.c
index 76c2f1b006c..b23029bee48 100644
--- a/keyboards/keychron/v4/ansi/keymaps/via/keymap.c
+++ b/keyboards/keychron/v4/ansi/keymaps/via/keymap.c
@@ -30,35 +30,35 @@ enum layers {
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_61(
+ [MAC_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_ansi_61(
+ [WIN_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_ansi_61(
+ [_FN1] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, _______, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_ansi_61(
+ [_FN2] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_ansi_61(
+ [_FN3] = LAYOUT_60_ansi(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/v4/iso/info.json b/keyboards/keychron/v4/iso/info.json
index fd9a9a81df5..6c481ed18f7 100644
--- a/keyboards/keychron/v4/iso/info.json
+++ b/keyboards/keychron/v4/iso/info.json
@@ -18,8 +18,12 @@
"diode_direction": "ROW2COL",
"processor": "STM32L432",
"bootloader": "stm32-dfu",
+ "layout_aliases": {
+ "LAYOUT_iso_62": "LAYOUT_60_iso"
+ },
+ "community_layouts": ["60_iso"],
"layouts": {
- "LAYOUT_iso_62": {
+ "LAYOUT_60_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -66,7 +70,7 @@
{"matrix": [1, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
- {"matrix": [3, 1], "x": 1.25, "y": 3.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
diff --git a/keyboards/keychron/v4/iso/keymaps/default/keymap.c b/keyboards/keychron/v4/iso/keymaps/default/keymap.c
index 41fba1cda32..1569e513cf8 100644
--- a/keyboards/keychron/v4/iso/keymaps/default/keymap.c
+++ b/keyboards/keychron/v4/iso/keymaps/default/keymap.c
@@ -30,35 +30,35 @@ enum layers {
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_iso_62(
+ [MAC_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_iso_62(
+ [WIN_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_iso_62(
+ [_FN1] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, _______, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_iso_62(
+ [_FN2] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_iso_62(
+ [_FN3] = LAYOUT_60_iso(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/v4/iso/keymaps/keychron/keymap.c b/keyboards/keychron/v4/iso/keymaps/keychron/keymap.c
index a91a2ae36d0..0bc8e995dc6 100644
--- a/keyboards/keychron/v4/iso/keymaps/keychron/keymap.c
+++ b/keyboards/keychron/v4/iso/keymaps/keychron/keymap.c
@@ -28,35 +28,35 @@ enum layers {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_iso_62(
+ [MAC_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_iso_62(
+ [WIN_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_iso_62(
+ [_FN1] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_SNAP, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_iso_62(
+ [_FN2] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_iso_62(
+ [_FN3] = LAYOUT_60_iso(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/v4/iso/keymaps/via/keymap.c b/keyboards/keychron/v4/iso/keymaps/via/keymap.c
index 41fba1cda32..1569e513cf8 100644
--- a/keyboards/keychron/v4/iso/keymaps/via/keymap.c
+++ b/keyboards/keychron/v4/iso/keymaps/via/keymap.c
@@ -30,35 +30,35 @@ enum layers {
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_iso_62(
+ [MAC_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_iso_62(
+ [WIN_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_iso_62(
+ [_FN1] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, _______, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_iso_62(
+ [_FN2] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_iso_62(
+ [_FN3] = LAYOUT_60_iso(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/kibou/suisei/info.json b/keyboards/kibou/suisei/info.json
new file mode 100644
index 00000000000..a33bb12abd0
--- /dev/null
+++ b/keyboards/kibou/suisei/info.json
@@ -0,0 +1,101 @@
+{
+ "manufacturer": "kibou",
+ "keyboard_name": "suisei",
+ "maintainer": "kibou",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "ROW2COL",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B2", "A10", "A9", "A8", "B15", "B14", "B13", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "C13", "B9"],
+ "rows": ["B11", "B10", "B0", "A1", "A0"]
+ },
+ "processor": "STM32F072",
+ "url": "https://kibou.store/",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0065",
+ "vid": "0x586A"
+ },
+ "indicators": {
+ "caps_lock": "B1"
+ },
+ "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": [0,14], "x":14, "y":0},
+ {"matrix": [0,15], "x":15, "y":0},
+ {"matrix": [1,0], "x":0, "y":1, "w":1.5},
+ {"matrix": [1,1], "x":1.5, "y":1},
+ {"matrix": [1,2], "x":2.5, "y":1},
+ {"matrix": [1,3], "x":3.5, "y":1},
+ {"matrix": [1,4], "x":4.5, "y":1},
+ {"matrix": [1,5], "x":5.5, "y":1},
+ {"matrix": [1,6], "x":6.5, "y":1},
+ {"matrix": [1,7], "x":7.5, "y":1},
+ {"matrix": [1,8], "x":8.5, "y":1},
+ {"matrix": [1,9], "x":9.5, "y":1},
+ {"matrix": [1,10], "x":10.5, "y":1},
+ {"matrix": [1,11], "x":11.5, "y":1},
+ {"matrix": [1,12], "x":12.5, "y":1},
+ {"matrix": [1,13], "x":13.5, "y":1, "w":1.5},
+ {"matrix": [1,15], "x":15, "y":1},
+ {"matrix": [2,0], "x":0, "y":2, "w":1.75},
+ {"matrix": [2,1], "x":1.75, "y":2},
+ {"matrix": [2,2], "x":2.75, "y":2},
+ {"matrix": [2,3], "x":3.75, "y":2},
+ {"matrix": [2,4], "x":4.75, "y":2},
+ {"matrix": [2,5], "x":5.75, "y":2},
+ {"matrix": [2,6], "x":6.75, "y":2},
+ {"matrix": [2,7], "x":7.75, "y":2},
+ {"matrix": [2,8], "x":8.75, "y":2},
+ {"matrix": [2,9], "x":9.75, "y":2},
+ {"matrix": [2,10], "x":10.75, "y":2},
+ {"matrix": [2,11], "x":11.75, "y":2},
+ {"matrix": [2,12], "x":12.75, "y":2, "w":2.25},
+ {"matrix": [2,15], "x":15, "y":2},
+ {"matrix": [3,0], "x":0, "y":3, "w":2.25},
+ {"matrix": [3,1], "x":2.25, "y":3},
+ {"matrix": [3,2], "x":3.25, "y":3},
+ {"matrix": [3,3], "x":4.25, "y":3},
+ {"matrix": [3,4], "x":5.25, "y":3},
+ {"matrix": [3,5], "x":6.25, "y":3},
+ {"matrix": [3,6], "x":7.25, "y":3},
+ {"matrix": [3,7], "x":8.25, "y":3},
+ {"matrix": [3,8], "x":9.25, "y":3},
+ {"matrix": [3,9], "x":10.25, "y":3},
+ {"matrix": [3,10], "x":11.25, "y":3},
+ {"matrix": [3,11], "x":12.25, "y":3, "w":1.75},
+ {"matrix": [3,14], "x":14.0, "y":3},
+ {"matrix": [3,15], "x":15.0, "y":3},
+ {"matrix": [4,0], "x":0, "y":4, "w":1.5},
+ {"matrix": [4,2], "x":2.25, "y":4, "w":1.5},
+ {"matrix": [4,5], "x":3.75, "y":4, "w":7},
+ {"matrix": [4,10], "x":10.75, "y":4, "w":1.5},
+ {"matrix": [4,13], "x":13, "y":4},
+ {"matrix": [4,14], "x":14, "y":4},
+ {"matrix": [4,15], "x":15, "y":4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kibou/suisei/keymaps/default/keymap.c b/keyboards/kibou/suisei/keymaps/default/keymap.c
new file mode 100644
index 00000000000..2c9d04c6c1c
--- /dev/null
+++ b/keyboards/kibou/suisei/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_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_SPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_NO, 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_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/kibou/suisei/keymaps/via/keymap.c b/keyboards/kibou/suisei/keymaps/via/keymap.c
new file mode 100644
index 00000000000..2c9d04c6c1c
--- /dev/null
+++ b/keyboards/kibou/suisei/keymaps/via/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_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_SPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_NO, 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_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/kibou/suisei/keymaps/via/rules.mk b/keyboards/kibou/suisei/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/kibou/suisei/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/kibou/suisei/readme.md b/keyboards/kibou/suisei/readme.md
new file mode 100644
index 00000000000..6c3d135caf0
--- /dev/null
+++ b/keyboards/kibou/suisei/readme.md
@@ -0,0 +1,23 @@
+# suisei
+
+* Keyboard Maintainer: [kibou](https://kibou.store/)
+* Hardware Supported: suisei PCBs, STM32F072
+* Hardware Availability: https://kibou.store/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kibou/suisei:default
+
+Flashing example for this keyboard:
+
+ make kibou/suisei: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/kibou/suisei/rules.mk b/keyboards/kibou/suisei/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/kibou/suisei/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/kibou/wendy/info.json b/keyboards/kibou/wendy/info.json
index 4277cc03bd2..1ab0ca8e7fd 100644
--- a/keyboards/kibou/wendy/info.json
+++ b/keyboards/kibou/wendy/info.json
@@ -26,101 +26,310 @@
"indicators": {
"caps_lock": "B12"
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
+ "community_layouts": [
+ "tkl_ansi_split_bs_rshift",
+ "tkl_iso_split_bs_rshift"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
"layout": [
- {"matrix": [0,0], "x":0, "y":0},
- {"matrix": [0,1], "x":1.25, "y":0},
- {"matrix": [0,2], "x":2.25, "y":0},
- {"matrix": [0,3], "x":3.25, "y":0},
- {"matrix": [0,4], "x":4.25, "y":0},
- {"matrix": [0,5], "x":5.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,10], "x":9.75, "y":0},
- {"matrix": [0,11], "x":10.75, "y":0},
- {"matrix": [0,12], "x":11.75, "y":0},
- {"matrix": [0,13], "x":12.75, "y":0},
- {"matrix": [0,15], "x":15.25, "y":0},
- {"matrix": [0,16], "x":16.25, "y":0},
- {"matrix": [0,17], "x":17.25, "y":0},
- {"matrix": [1,0], "x":0, "y":1.25},
- {"matrix": [1,1], "x":1, "y":1.25},
- {"matrix": [1,2], "x":2, "y":1.25},
- {"matrix": [1,3], "x":3, "y":1.25},
- {"matrix": [1,4], "x":4, "y":1.25},
- {"matrix": [1,5], "x":5, "y":1.25},
- {"matrix": [1,6], "x":6, "y":1.25},
- {"matrix": [1,7], "x":7, "y":1.25},
- {"matrix": [1,8], "x":8, "y":1.25},
- {"matrix": [1,9], "x":9, "y":1.25},
- {"matrix": [1,10], "x":10, "y":1.25},
- {"matrix": [1,11], "x":11, "y":1.25},
- {"matrix": [1,12], "x":12, "y":1.25},
- {"matrix": [1,13], "x":13, "y":1.25},
- {"matrix": [1,14], "x":14, "y":1.25},
- {"matrix": [1,15], "x":15.25, "y":1.25},
- {"matrix": [1,16], "x":16.25, "y":1.25},
- {"matrix": [1,17], "x":17.25, "y":1.25},
- {"matrix": [2,0], "x":0, "y":2.25, "w":1.5},
- {"matrix": [2,1], "x":1.5, "y":2.25},
- {"matrix": [2,2], "x":2.5, "y":2.25},
- {"matrix": [2,3], "x":3.5, "y":2.25},
- {"matrix": [2,4], "x":4.5, "y":2.25},
- {"matrix": [2,5], "x":5.5, "y":2.25},
- {"matrix": [2,6], "x":6.5, "y":2.25},
- {"matrix": [2,7], "x":7.5, "y":2.25},
- {"matrix": [2,8], "x":8.5, "y":2.25},
- {"matrix": [2,9], "x":9.5, "y":2.25},
- {"matrix": [2,10], "x":10.5, "y":2.25},
- {"matrix": [2,11], "x":11.5, "y":2.25},
- {"matrix": [2,12], "x":12.5, "y":2.25},
- {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
- {"matrix": [3,14], "x":13.75, "y":2.25, "w":1.25, "h":2},
- {"matrix": [2,15], "x":15.25, "y":2.25},
- {"matrix": [2,16], "x":16.25, "y":2.25},
- {"matrix": [2,17], "x":17.25, "y":2.25},
- {"matrix": [3,0], "x":0, "y":3.25, "w":1.75},
- {"matrix": [3,1], "x":1.75, "y":3.25},
- {"matrix": [3,2], "x":2.75, "y":3.25},
- {"matrix": [3,3], "x":3.75, "y":3.25},
- {"matrix": [3,4], "x":4.75, "y":3.25},
- {"matrix": [3,5], "x":5.75, "y":3.25},
- {"matrix": [3,6], "x":6.75, "y":3.25},
- {"matrix": [3,7], "x":7.75, "y":3.25},
- {"matrix": [3,8], "x":8.75, "y":3.25},
- {"matrix": [3,9], "x":9.75, "y":3.25},
- {"matrix": [3,10], "x":10.75, "y":3.25},
- {"matrix": [3,11], "x":11.75, "y":3.25},
- {"matrix": [3,13], "x":12.75, "y":3.25},
- {"matrix": [4,0], "x":0, "y":4.25, "w":1.25},
- {"matrix": [4,1], "x":1.25, "y":4.25},
- {"matrix": [4,2], "x":2.25, "y":4.25},
- {"matrix": [4,3], "x":3.25, "y":4.25},
- {"matrix": [4,4], "x":4.25, "y":4.25},
- {"matrix": [4,5], "x":5.25, "y":4.25},
- {"matrix": [4,6], "x":6.25, "y":4.25},
- {"matrix": [4,7], "x":7.25, "y":4.25},
- {"matrix": [4,8], "x":8.25, "y":4.25},
- {"matrix": [4,9], "x":9.25, "y":4.25},
- {"matrix": [4,10], "x":10.25, "y":4.25},
- {"matrix": [4,11], "x":11.25, "y":4.25},
- {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
- {"matrix": [4,14], "x":14, "y":4.25},
- {"matrix": [4,16], "x":16.25, "y":4.25},
- {"matrix": [5,0], "x":0, "y":5.25, "w":1.25},
- {"matrix": [5,1], "x":1.25, "y":5.25, "w":1.25},
- {"matrix": [5,2], "x":2.5, "y":5.25, "w":1.25},
- {"matrix": [5,6], "x":3.75, "y":5.25, "w":6.25},
- {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
- {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
- {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
- {"matrix": [5,14], "x":13.75, "y":5.25, "w":1.25},
- {"matrix": [5,15], "x":15.25, "y":5.25},
- {"matrix": [5,16], "x":16.25, "y":5.25},
- {"matrix": [5,17], "x":17.25, "y":5.25}
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 12.75, "y": 0},
+ {"label": "Print Screen", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 17], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "\\", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Delete", "matrix": [1, 14], "x": 14, "y": 1.25},
+ {"label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [1, 17], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"label": "Delete", "matrix": [2, 15], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [2, 16], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [2, 17], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "ANSI Enter", "matrix": [3, 13], "x": 12.75, "y": 3.25},
+ {"label": "ISO Enter", "matrix": [3, 14], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Left Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "ISO \\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Right Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "\u2298", "matrix": [4, 14], "x": 14, "y": 4.25},
+ {"label": "\u2191", "matrix": [4, 16], "x": 16.25, "y": 4.25},
+
+ {"label": "Left Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "Left GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Left Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Right Alt", "matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "Right GUI", "matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Menu", "matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Right Ctrl", "matrix": [5, 14], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"label": "\u2190", "matrix": [5, 15], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 16], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 17], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 12.75, "y": 0},
+ {"label": "Print Screen", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 17], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "\\", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Delete", "matrix": [1, 14], "x": 14, "y": 1.25},
+ {"label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [1, 17], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"label": "Delete", "matrix": [2, 15], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [2, 16], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [2, 17], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "\u2298", "matrix": [4, 14], "x": 14, "y": 4.25},
+ {"label": "\u2191", "matrix": [4, 16], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Menu", "matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 14], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"label": "\u2190", "matrix": [5, 15], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 16], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 17], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 12.75, "y": 0},
+ {"label": "Print Screen", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 17], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "\\", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Delete", "matrix": [1, 14], "x": 14, "y": 1.25},
+ {"label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [1, 17], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "Delete", "matrix": [2, 15], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [2, 16], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [2, 17], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "#", "matrix": [3, 13], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 14], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "\u2298", "matrix": [4, 14], "x": 14, "y": 4.25},
+ {"label": "\u2191", "matrix": [4, 16], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Menu", "matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 14], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"label": "\u2190", "matrix": [5, 15], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 16], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 17], "x": 17.25, "y": 5.25}
]
}
}
-}
\ No newline at end of file
+}
diff --git a/keyboards/kibou/wendy/keymaps/default/keymap.c b/keyboards/kibou/wendy/keymaps/default/keymap.c
index f7618e9a086..a5f630a2cd1 100644
--- a/keyboards/kibou/wendy/keymaps/default/keymap.c
+++ b/keyboards/kibou/wendy/keymaps/default/keymap.c
@@ -4,11 +4,12 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, KC_NO,
- KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_NO, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RIGHT)
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_NO,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_NO, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
};
diff --git a/keyboards/kibou/wendy/keymaps/via/keymap.c b/keyboards/kibou/wendy/keymaps/via/keymap.c
index f7618e9a086..a5f630a2cd1 100644
--- a/keyboards/kibou/wendy/keymaps/via/keymap.c
+++ b/keyboards/kibou/wendy/keymaps/via/keymap.c
@@ -4,11 +4,12 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, KC_NO,
- KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_NO, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RIGHT)
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_NO,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_NO, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
};
diff --git a/keyboards/kibou/wendy/matrix_diagram.md b/keyboards/kibou/wendy/matrix_diagram.md
new file mode 100644
index 00000000000..042d1bff95c
--- /dev/null
+++ b/keyboards/kibou/wendy/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Kibou Wendy
+
+```
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│00 ││01 │02 │03 │04 ││05 │06 │07 │08 ││0A │0B │0C │0D │ │0F │0G │0H │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E ││1F │1G │1H │ │?? │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ └─┬─────┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D ││2F │2G │2H │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘ ┌──┴┐3E │ ISO Enter
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │ │3D │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ └───┴────┘
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4E │ │4G │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
+│50 │51 │52 │56 │5A │5B │5C │5E ││5F │5G │5H │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌────────┐ ┌──────────┐
+│40 │ 2.25u LShift 2.75u RShift │4C │
+└────────┘ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│50 │51 │52 │56 │5B │5C │5E │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/kopibeng/mnk60/info.json b/keyboards/kopibeng/mnk60/info.json
new file mode 100644
index 00000000000..430fc66c1bc
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/info.json
@@ -0,0 +1,928 @@
+{
+ "keyboard_name": "MNK60",
+ "manufacturer": "kopibeng",
+ "url": "https://monokei.co",
+ "maintainer": "kopibeng",
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0602",
+ "vid": "0x4B50"
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["C7", "F5", "F1", "F0", "C6", "B6", "B5", "B4", "D7", "D6", "D5", "D3", "D2", "D1"],
+ "rows": ["F7", "F4", "D0", "B3", "B7"]
+ },
+ "indicators": {
+ "caps_lock": "D4"
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "brightness_steps": 8,
+ "led_count": 14,
+ "max_brightness": 200,
+ "saturation_steps": 8,
+ "sleep": true
+ },
+ "ws2812": {
+ "pin": "F6"
+ },
+ "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "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, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_split_spacebar": {
+ "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": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 2.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 1.25, "x": 6, "y": 4 },
+ { "matrix": [4, 8], "w": 2.75, "x": 7.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_split_spacebar_bs_rshift": {
+ "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, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 2.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 1.25, "x": 6, "y": 4 },
+ { "matrix": [4, 8], "w": 2.75, "x": 7.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "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": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "w": 1, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
+ "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, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "w": 1, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "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": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "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, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_split_spacebar": {
+ "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": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 2.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 1.25, "x": 6, "y": 4 },
+ { "matrix": [4, 8], "w": 2.75, "x": 7.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_split_spacebar_bs_rshift": {
+ "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, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 2.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 1.25, "x": 6, "y": 4 },
+ { "matrix": [4, 8], "w": 2.75, "x": 7.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "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": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "w": 1, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "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, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "w": 1, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [1, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 2.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 1.25, "x": 6, "y": 4 },
+ { "matrix": [4, 8], "w": 2.75, "x": 7.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/kopibeng/mnk60/keymaps/default/keymap.c b/keyboards/kopibeng/mnk60/keymaps/default/keymap.c
new file mode 100644
index 00000000000..844f338d193
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2023 Samuel Lu
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [0] = LAYOUT_all(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, MO(2), KC_RALT, MO(1), KC_RCTL
+ ),
+
+ // Fn1 Layer
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
diff --git a/keyboards/kopibeng/mnk60/keymaps/via/keymap.c b/keyboards/kopibeng/mnk60/keymaps/via/keymap.c
new file mode 100644
index 00000000000..844f338d193
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/keymaps/via/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2023 Samuel Lu
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [0] = LAYOUT_all(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, MO(2), KC_RALT, MO(1), KC_RCTL
+ ),
+
+ // Fn1 Layer
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
diff --git a/keyboards/kopibeng/mnk60/keymaps/via/rules.mk b/keyboards/kopibeng/mnk60/keymaps/via/rules.mk
new file mode 100644
index 00000000000..43061db1dd4
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/kopibeng/mnk60/readme.md b/keyboards/kopibeng/mnk60/readme.md
new file mode 100644
index 00000000000..70a382f5de2
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/readme.md
@@ -0,0 +1,26 @@
+# MNK60
+
+
+
+A QMK-powered, VIA-enabled universal 60% PCB with support for ANSI/ISO layouts, split Backspace, split Right Shift, stepped Caps Lock, 6.25U/7U bottom row, split Spacebar and RGB underglow.
+
+* Keyboard Maintainer: [kopibeng](https://github.com/kopibeng)
+* Hardware Supported: KEI
+* Hardware Availability: [MONOKEI](https://monokei.co)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kopibeng/mnk60:default
+
+Flashing example for this keyboard:
+
+ make kopibeng/mnk60:default:flash
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+* Physical reset button: Press the RESET switch on top side of PCB.
+* Bootmagic reset: Unplug keyboard, hold down ESC key and plug in the keyboard.
+* Keycode reset: Press the `QK_BOOT` keycode (default: MO(1) + R keys) in layout if available.
\ No newline at end of file
diff --git a/keyboards/kopibeng/mnk60/rules.mk b/keyboards/kopibeng/mnk60/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/kopibeng/xt87/chconf.h b/keyboards/kopibeng/xt87/chconf.h
new file mode 100644
index 00000000000..4cb041153f1
--- /dev/null
+++ b/keyboards/kopibeng/xt87/chconf.h
@@ -0,0 +1,31 @@
+/* Copyright 2023 QMK
+ *
+ * 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 .
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/kopibeng/xt8x/chconf.h -r platforms/chibios/common/configs/chconf.h`
+ */
+
+#pragma once
+
+#define CH_CFG_ST_FREQUENCY 10000
+
+#define CH_CFG_OPTIMIZE_SPEED FALSE
+
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+
+#include_next
+
diff --git a/keyboards/kopibeng/xt87/info.json b/keyboards/kopibeng/xt87/info.json
new file mode 100644
index 00000000000..8447d40815c
--- /dev/null
+++ b/keyboards/kopibeng/xt87/info.json
@@ -0,0 +1,886 @@
+{
+ "keyboard_name": "XT87",
+ "manufacturer": "kopibeng",
+ "url": "https://monokei.co/",
+ "maintainer": "kopibeng",
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x8700",
+ "vid": "0x4B50"
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["A2", "A1", "A0", "B11", "B10", "B2", "F1", "B1", "B0", "A7", "A6", "A5", "F0", "A4", "C15", "C14", "C13"],
+ "rows": ["A8", "B15", "A9", "B12", "A3", "B14"]
+ },
+ "indicators": {
+ "caps_lock": "B3",
+ "scroll_lock": "A15"
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "brightness_steps": 8,
+ "led_count": 19,
+ "max_brightness": 200,
+ "saturation_steps": 8,
+ "sleep": true
+ },
+ "ws2812": {
+ "pin": "A10"
+ },
+ "community_layouts": ["tkl_ansi", "tkl_ansi_split_bs_rshift", "tkl_ansi_tsangan", "tkl_ansi_tsangan_split_bs_rshift", "tkl_iso", "tkl_iso_split_bs_rshift", "tkl_iso_tsangan", "tkl_iso_tsangan_split_bs_rshift"],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.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.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [2, 12], "x": 13, "y": 1.25 },
+ { "matrix": [1, 13], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.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.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.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.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [2, 12], "x": 13, "y": 1.25 },
+ { "matrix": [1, 13], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.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.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1, "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.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.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [2, 12], "x": 13, "y": 1.25 },
+ { "matrix": [1, 13], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1, "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.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.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_iso_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.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.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [2, 12], "x": 13, "y": 1.25 },
+ { "matrix": [1, 13], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_iso_tsangan": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.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.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1, "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.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.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [2, 12], "x": 13, "y": 1.25 },
+ { "matrix": [1, 13], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1, "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/kopibeng/xt87/keymaps/default/keymap.c b/keyboards/kopibeng/xt87/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d963941d808
--- /dev/null
+++ b/keyboards/kopibeng/xt87/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2023 Samuel Lu
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ // Fn1 Layer
+ [1] = LAYOUT_all(
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
diff --git a/keyboards/kopibeng/xt87/keymaps/via/keymap.c b/keyboards/kopibeng/xt87/keymaps/via/keymap.c
new file mode 100644
index 00000000000..d963941d808
--- /dev/null
+++ b/keyboards/kopibeng/xt87/keymaps/via/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2023 Samuel Lu
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ // Fn1 Layer
+ [1] = LAYOUT_all(
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
diff --git a/keyboards/kopibeng/xt87/keymaps/via/rules.mk b/keyboards/kopibeng/xt87/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/kopibeng/xt87/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/kopibeng/xt87/readme.md b/keyboards/kopibeng/xt87/readme.md
new file mode 100644
index 00000000000..4e6db529b5d
--- /dev/null
+++ b/keyboards/kopibeng/xt87/readme.md
@@ -0,0 +1,25 @@
+# XT87
+
+
+
+A QMK-powered, VIA-enabled F12 TKL PCB with support for ANSI/ISO layout, split Backspace, split Right Shift and 6.25U/7U bottom row.
+
+* Keyboard Maintainer: [kopibeng](https://github.com/kopibeng)
+* Hardware Supported: A TKL keyboard with STM32F072
+* Hardware Availability: [MONOKEI](https://monokei.co)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kopibeng/xt87:default
+
+Flashing example for this keyboard:
+
+ make kopibeng/xt87:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+* Physical reset button: Press the RESET switch on top side of PCB.
+* Bootmagic reset: Unplug keyboard, hold down ESC key and plug in the keyboard.
+* Keycode reset: Press the `QK_BOOT` keycode (default: MO(1) + R keys) in layout if available.
diff --git a/keyboards/kopibeng/xt87/rules.mk b/keyboards/kopibeng/xt87/rules.mk
new file mode 100644
index 00000000000..a92b0993283
--- /dev/null
+++ b/keyboards/kopibeng/xt87/rules.mk
@@ -0,0 +1,2 @@
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
index e8f6fac1201..ca8a4c6ab4e 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
@@ -5,6 +5,9 @@
#define LAYER_STATE_8BIT
+#define TURBO_ENABLE
+#define HOLD_ON_OTHER_KEY_PRESS
+
// RGB Matrix effects disable
#ifdef RGB_MATRIX_ENABLE
# define UNDERGLOW_DISABLE
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
index ef7cfab5fe2..3d5bcade20f 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
@@ -50,6 +50,26 @@ void dynamic_macro_record_end_user(int8_t direction) {
#define MCR_SWT KC_NO
#endif // DYNAMIC_MACRO_ENABLE
+#ifdef TURBO_ENABLE
+static bool turbo_active = false; // Only changed by TRBO_ST
+static uint16_t turbo_keycode = KC_NO; // turbo_active can't be true if this is KC_NO
+static bool turbo_key_pressed = false;
+static bool turbo_keycode_selecting = false; // Determine new keycode or delay mode switch
+static bool turbo_ms_delay_direction = true; // True is raise the delay, false is lower it
+static uint16_t turbo_ms_delay_direction_indicator = 0;
+static uint16_t turbo_ms_delay = 100; // Start at sending keycodes 10 times a second
+static uint16_t turbo_timer; // Changed semi automatically
+/*
+ * Because the KC's are wrapped in `LT()` they won't be interpreted as KC_NO or KC_TRNS
+ * Instead they'll just be like any other custom KC which will let me use them how I want
+*/
+#define TRBO_ST LT(_CTR, KC_NO )
+#define TRBO_TI LT(_CTR, KC_TRNS)
+#else
+#define TRBO_ST KC_NO
+#define TRBO_TI KC_NO
+#endif
+
const uint16_t PROGMEM keymaps[_END][MATRIX_ROWS][MATRIX_COLS] = {
[_MAIN] = LAYOUT_planck_mit(
KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC,
@@ -67,7 +87,7 @@ const uint16_t PROGMEM keymaps[_END][MATRIX_ROWS][MATRIX_COLS] = {
XXXXXXX, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, XXXXXXX, XXXXXXX, KC_VOLU, XXXXXXX, XXXXXXX, MCR_REC,
XXXXXXX, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, MCR_PLY,
XXXXXXX, XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, XXXXXXX, XXXXXXX, MCR_SWT,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TOG_MSE, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ XXXXXXX, XXXXXXX, XXXXXXX, TRBO_TI, TRBO_ST, TOG_MSE, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
#ifdef MOUSEKEY_ENABLE
,[_MSE] = LAYOUT_planck_mit(
@@ -117,12 +137,68 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
if (RECORDING) { RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, 0, 0); }
break;
#endif // DYNAMIC_MACRO_ENABLE
+
+ #ifdef TURBO_ENABLE
+ case TRBO_ST:
+ if (turbo_keycode_selecting) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
+ } else {
+ if (turbo_active) {
+ if (turbo_key_pressed) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
+ } else {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, 0, 0);
+ }
+ }
+ }
+ break;
+
+ case TRBO_TI:
+ if (turbo_ms_delay_direction_indicator != 0) {
+ uint8_t time = timer_elapsed(turbo_ms_delay_direction_indicator) / 200;
+ if (time > 0) {
+ if ((time % 2) == 1) {
+ if (turbo_ms_delay_direction) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, BRIGHTNESS, 0);
+ } else {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, 0, 0);
+ }
+ } else {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, 0, 0);
+ }
+ if (time >= 6) {
+ turbo_ms_delay_direction_indicator = 0;
+ }
+ }
+ }
+ break;
+ #endif
+
}
}
return false;
}
#endif
+#ifdef TURBO_ENABLE
+void housekeeping_task_user(void) {
+ if (turbo_active) {
+ if (turbo_key_pressed) {
+ if (timer_elapsed(turbo_timer) > turbo_ms_delay) {
+ unregister_code(turbo_keycode);
+ turbo_key_pressed = false;
+ turbo_timer = timer_read();
+ }
+ } else {
+ if (timer_elapsed(turbo_timer) > (turbo_ms_delay / 2)) {
+ register_code(turbo_keycode);
+ turbo_key_pressed = true;
+ }
+ }
+ }
+}
+#endif
+
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef DYNAMIC_MACRO_ENABLE
if (keycode == MCR_REC) {keycode = REC;}
@@ -145,6 +221,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
#endif // MOUSEKEY_ENABLE
+ #ifdef TURBO_ENABLE
+ if (record->event.pressed) {
+ if (turbo_keycode_selecting) {
+ if (IS_BASIC_KEYCODE(keycode) ||
+ IS_MODIFIER_KEYCODE(keycode) ||
+ IS_JOYSTICK_KEYCODE(keycode) ||
+ IS_MOUSE_KEYCODE(keycode))
+ {
+ unregister_code(turbo_keycode);
+ turbo_key_pressed = false;
+ turbo_keycode = keycode;
+ turbo_keycode_selecting = false;
+ }
+ }
+ }
+ #endif
+
switch (keycode) {
#ifdef DYNAMIC_MACRO_ENABLE
case MCR_SWT:
@@ -162,6 +255,46 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return false;
#endif // DYNAMIC_MACRO_ENABLE
+ #ifdef TURBO_ENABLE
+ case TRBO_ST:
+ if (record->event.pressed) {
+ if (!record->tap.count) {
+ turbo_keycode_selecting = !turbo_keycode_selecting;
+ } else {
+ if (turbo_keycode != KC_NO) {
+ if (!turbo_active) {
+ turbo_keycode_selecting = false;
+ turbo_active = true;
+ } else {
+ unregister_code(turbo_keycode);
+ turbo_key_pressed = false;
+ turbo_active = false;
+ }
+ }
+ }
+ }
+ return false;
+
+ case TRBO_TI:
+ if (record->event.pressed) {
+ if (!record->tap.count) {
+ turbo_ms_delay_direction = !turbo_ms_delay_direction;
+ turbo_ms_delay_direction_indicator = timer_read();
+ } else {
+ if (turbo_ms_delay_direction)
+ turbo_ms_delay += 20;
+ else
+ turbo_ms_delay -= 20;
+
+ if (turbo_ms_delay > 500) // half a second
+ turbo_ms_delay = 500;
+ if (turbo_ms_delay < 60) // Around 16 times a second
+ turbo_ms_delay = 60;
+ }
+ }
+ return false;
+ #endif
+
default:
return true; //Process all other keycodes normally
}
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md
index 2798567b5ec..980f559d71f 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md
@@ -21,12 +21,12 @@ The secondary layer ( `_SUB` ) is for syntax, F keys, and number keys
| 4 | _ | _ | | _ | _ | _ | <- | _ | | | | |
The control layer ( `_CTR` ) is for lighting, media, and macros
-| row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
-|-----|---|-------|------|-------|------|---------|-----|------|------|------|----|---------|
-| 1 | | SPD- | BRI+ | SPD+ | HUE+ | SAT+ | | | VOL+ | | | MCR_REC |
-| 2 | | EFCT- | BRI- | EFCT+ | HUE- | SAT- | | PREV | PLAY | NEXT | | MCR_PLY |
-| 3 | | | TOG | | | | | | VOL- | | | MCR_SWT |
-| 4 | | | | | | MSE_TOG | <- | | | | | |
+| row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
+|-----|---|-------|------|---------|---------|---------|-----|------|------|------|----|---------|
+| 1 | | SPD- | BRI+ | SPD+ | HUE+ | SAT+ | | | VOL+ | | | MCR_REC |
+| 2 | | EFCT- | BRI- | EFCT+ | HUE- | SAT- | | PREV | PLAY | NEXT | | MCR_PLY |
+| 3 | | | TOG | | | | | | VOL- | | | MCR_SWT |
+| 4 | | | | TRBO_TI | TRBO_ST | MSE_TOG | <- | | | | | |
The mouse layer ( `_MSE` ) is for making the keyboard function as a mouse as well
| row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
@@ -67,6 +67,8 @@ The mouse layer ( `_MSE` ) is for making the keyboard function as a mouse as wel
| SCR_D | Mouse scroll down |
| ACL_U | Raise mouse/scroll speed |
| ACL_D | Lower mouse/scroll speed |
+| TRBO_ST | Set turbo key (Hold), start/stop turbo (Tap) |
+| TRBO_TI | Turbo speed +/- (Hold to switch direction) |
## Compiling
diff --git a/keyboards/kradoindustries/kousa/config.h b/keyboards/kradoindustries/kousa/config.h
new file mode 100644
index 00000000000..49c8b479863
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2023 Matt F
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
diff --git a/keyboards/kradoindustries/kousa/info.json b/keyboards/kradoindustries/kousa/info.json
new file mode 100644
index 00000000000..196e863bf5c
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/info.json
@@ -0,0 +1,158 @@
+{
+ "keyboard_name": "Kousa-TKL",
+ "manufacturer": "Krado Industries",
+ "url": "https://www.kradoindustries.com/",
+ "maintainer": "Krado Industries",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "vid": "0x4B72",
+ "pid": "0x4B4F",
+ "device_version": "1.0.0"
+ },
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "encoder": true,
+ "rgblight": true
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "GP10", "pin_b": "GP9" }
+ ]
+ },
+ "ws2812": {
+ "pin": "GP4",
+ "driver": "vendor"
+ },
+ "rgblight": {
+ "led_count": 18,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+
+
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP20", "GP21", "GP14", "GP15", "GP16", "GP17", "GP18", "GP13", "GP0", "GP1", "GP3"],
+ "rows": [ "GP2", "GP29", "GP28", "GP19", "GP12", "GP11"]
+ },
+
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 1], "x":1.25, "y":0},
+ {"matrix": [0, 2], "x":2.25, "y":0},
+ {"matrix": [0, 3], "x":3.25, "y":0},
+ {"matrix": [0, 4], "x":4.25, "y":0},
+ {"matrix": [0, 5], "x":5.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.75, "y":0},
+ {"matrix": [0, 10], "x":10.75, "y":0},
+ {"matrix": [0, 11], "x":11.75, "y":0},
+ {"matrix": [0, 12], "x":12.75, "y":0},
+ {"matrix": [0, 13], "x":14, "y":0},
+ {"matrix": [0, 14], "x":15.25, "y":0},
+ {"matrix": [0, 15], "x":16.25, "y":0},
+ {"matrix": [0, 16], "x":17.25, "y":0},
+ {"matrix": [1, 0], "x":0, "y":1.25, "w":1.5},
+ {"matrix": [1, 1], "x":1.5, "y":1.25},
+ {"matrix": [1, 2], "x":2.5, "y":1.25},
+ {"matrix": [1, 3], "x":3.5, "y":1.25},
+ {"matrix": [1, 4], "x":4.5, "y":1.25},
+ {"matrix": [1, 5], "x":5.5, "y":1.25},
+ {"matrix": [1, 6], "x":6.5, "y":1.25},
+ {"matrix": [1, 7], "x":7.5, "y":1.25},
+ {"matrix": [1, 8], "x":8.5, "y":1.25},
+ {"matrix": [1, 9], "x":9.5, "y":1.25},
+ {"matrix": [1, 10], "x":10.5, "y":1.25},
+ {"matrix": [1, 11], "x":11.5, "y":1.25},
+ {"matrix": [1, 12], "x":12.5, "y":1.25},
+ {"matrix": [1, 13], "x":13.5, "y":1.25, "w":1.5},
+ {"matrix": [1, 14], "x":15.25, "y":1.25},
+ {"matrix": [1, 15], "x":16.25, "y":1.25},
+ {"matrix": [1, 16], "x":17.25, "y":1.25},
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2, 10], "x":10.5, "y":2.25},
+ {"matrix": [2, 11], "x":11.5, "y":2.25},
+ {"matrix": [2, 12], "x":12.5, "y":2.25},
+ {"matrix": [2, 13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2, 14], "x":15.25, "y":2.25},
+ {"matrix": [2, 15], "x":16.25, "y":2.25},
+ {"matrix": [2, 16], "x":17.25, "y":2.25},
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.5},
+ {"matrix": [3, 1], "x":1.5, "y":3.25},
+ {"matrix": [3, 2], "x":2.5, "y":3.25},
+ {"matrix": [3, 3], "x":3.5, "y":3.25},
+ {"matrix": [3, 4], "x":4.5, "y":3.25},
+ {"matrix": [3, 5], "x":5.5, "y":3.25},
+ {"matrix": [3, 6], "x":6.5, "y":3.25},
+ {"matrix": [3, 7], "x":7.5, "y":3.25},
+ {"matrix": [3, 8], "x":8.5, "y":3.25},
+ {"matrix": [3, 9], "x":9.5, "y":3.25},
+ {"matrix": [3, 10], "x":10.5, "y":3.25},
+ {"matrix": [3, 11], "x":11.5, "y":3.25},
+ {"matrix": [3, 12], "x":12.5, "y":3.25},
+ {"matrix": [3, 13], "x":13.5, "y":3.25, "w":1.5},
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.5},
+ {"matrix": [4, 1], "x":1.5, "y":4.25},
+ {"matrix": [4, 2], "x":2.5, "y":4.25},
+ {"matrix": [4, 3], "x":3.5, "y":4.25},
+ {"matrix": [4, 4], "x":4.5, "y":4.25},
+ {"matrix": [4, 5], "x":5.5, "y":4.25},
+ {"matrix": [4, 6], "x":6.5, "y":4.25},
+ {"matrix": [4, 7], "x":7.5, "y":4.25},
+ {"matrix": [4, 8], "x":8.5, "y":4.25},
+ {"matrix": [4, 9], "x":9.5, "y":4.25},
+ {"matrix": [4, 10], "x":10.5, "y":4.25},
+ {"matrix": [4, 11], "x":11.5, "y":4.25},
+ {"matrix": [4, 12], "x":12.5, "y":4.25},
+ {"matrix": [4, 13], "x":13.5, "y":4.25, "w":1.5},
+ {"matrix": [4, 15], "x":16.25, "y":4.25},
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25},
+ {"matrix": [5, 3], "x":3.5, "y":5.25},
+ {"matrix": [5, 4], "x":4.5, "y":5.25},
+ {"matrix": [5, 5], "x":5.5, "y":5.25},
+ {"matrix": [5, 6], "x":6.5, "y":5.25, "w":2},
+ {"matrix": [5, 8], "x":8.5, "y":5.25},
+ {"matrix": [5, 9], "x":9.5, "y":5.25},
+ {"matrix": [5, 10], "x":10.5, "y":5.25},
+ {"matrix": [5, 11], "x":11.5, "y":5.25},
+ {"matrix": [5, 12], "x":12.5, "y":5.25},
+ {"matrix": [5, 13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 14], "x":15.25, "y":5.25},
+ {"matrix": [5, 15], "x":16.25, "y":5.25},
+ {"matrix": [5, 16], "x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/kradoindustries/kousa/keymaps/default/keymap.c b/keyboards/kradoindustries/kousa/keymaps/default/keymap.c
new file mode 100644
index 00000000000..48978b2a2ba
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/keymaps/default/keymap.c
@@ -0,0 +1,111 @@
+/*
+Copyright 2023 Matt F
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+
+#define _FN MO(3)
+#define FN_BACK LT(3, KC_BSPC)
+#define ZOOMIN C(KC_EQL)
+#define ZOOMOUT C(KC_MINS)
+#define NTAB C(KC_TAB)
+#define BTAB C(S(KC_TAB))
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+
+ /* Base Layer
+
+
+* --------- .-----------------------------------. .-----------------------------------. .-----------------------------------. --------. .--------------------------.
+ * | ESC | | F1 | F2 | F3 | F4 | | F5 | F6 | F7 | F8 | | F9 | F10 | F11 | F12 | | F13 | | PrintSC| ScrlLk | Pause |
+ * | | | | | | | | | | | | | | | | | | | | | | |
+ * '-------+ '--------+--------+--------+--------' '--------+--------+--------+--------' '--------+--------+--------+--------' '-------+ '--------+--------+--------'
+
+ * .-----------------------------------------------------------------------------------------------------------------------------------. .--------------------------.
+ * | Grave | 1 | 2 | 3 | 4 | 5 | - | = | 6 | 7 | 8 | 9 | 0 | Backspace | | Ins | Home | PageUp |
+ * | | | | | | | | | | | | | | | | | | |
+ * |-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------| |--------+--------+--------|
+ * | Tab | Q | W | E | R | T | | | Y | U | I | O | P | Del | | Del | End |PageDown|
+ * | | | | | | | | | | | | | | | | | | |
+ * |-----------+--------+--------+--------+--------+--------| [ | ] |--------+--------+--------+-----------------+-----------| '--------+--------+--------'
+ * | FN_BACK | A | S | D | F | G |--------+--------| H | J | K | L | " | Enter |
+ * | | | | | | | | | | | | | ' | |
+ * |-----------+--------+--------+--------+--------+--------| Prev | Next |--------+--------+--------------------------+-----------| .--------.
+ * | LShift | Z | X | C | V | B | Tab | Tab | N | M | < | > | ? | RShift | | Up |
+ * | | | | | | | | | | | , | . | / | | | |
+ * |-----------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+-----------| .--------+--------+--------.
+ * | LCtrl | LGUI | LALT | FN | Space | Space | Space | Space | Space | Space | RALT | RGUI | RCTRL | | Left | Down | Right |
+ * | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------------------------------' '--------+--------+--------'
+ */
+
+ 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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, 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_INS, KC_HOME, KC_PGUP,
+ 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_DEL, KC_DEL, KC_END, KC_PGDN,
+ FN_BACK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, BTAB, NTAB, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT( /* Layer One */
+
+ 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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, 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_INS, KC_HOME, KC_PGUP,
+ 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_DEL, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGUP, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+
+ [2] = LAYOUT( /* Layer Two */
+
+ 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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, 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_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, ZOOMIN, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_DEL, KC_END, KC_PGDN,
+ FN_BACK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ZOOMOUT, KC_LBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [3] = LAYOUT( /* Layer Three */
+
+ KC_ESC, DF(0), DF(1), DF(2), KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, QK_BOOT,
+
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(0), RGB_MOD,
+ KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(1), RGB_RMOD,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SCLN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLU, KC_VOLD, KC_BSLS, KC_CAPS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, 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_MS_WH_UP, KC_MS_WH_DOWN) },
+ [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [3] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }
+};
+#endif
diff --git a/keyboards/kradoindustries/kousa/keymaps/default/rules.mk b/keyboards/kradoindustries/kousa/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/kradoindustries/kousa/keymaps/via/keymap.c b/keyboards/kradoindustries/kousa/keymaps/via/keymap.c
new file mode 100644
index 00000000000..48978b2a2ba
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/keymaps/via/keymap.c
@@ -0,0 +1,111 @@
+/*
+Copyright 2023 Matt F
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+
+#define _FN MO(3)
+#define FN_BACK LT(3, KC_BSPC)
+#define ZOOMIN C(KC_EQL)
+#define ZOOMOUT C(KC_MINS)
+#define NTAB C(KC_TAB)
+#define BTAB C(S(KC_TAB))
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+
+ /* Base Layer
+
+
+* --------- .-----------------------------------. .-----------------------------------. .-----------------------------------. --------. .--------------------------.
+ * | ESC | | F1 | F2 | F3 | F4 | | F5 | F6 | F7 | F8 | | F9 | F10 | F11 | F12 | | F13 | | PrintSC| ScrlLk | Pause |
+ * | | | | | | | | | | | | | | | | | | | | | | |
+ * '-------+ '--------+--------+--------+--------' '--------+--------+--------+--------' '--------+--------+--------+--------' '-------+ '--------+--------+--------'
+
+ * .-----------------------------------------------------------------------------------------------------------------------------------. .--------------------------.
+ * | Grave | 1 | 2 | 3 | 4 | 5 | - | = | 6 | 7 | 8 | 9 | 0 | Backspace | | Ins | Home | PageUp |
+ * | | | | | | | | | | | | | | | | | | |
+ * |-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------| |--------+--------+--------|
+ * | Tab | Q | W | E | R | T | | | Y | U | I | O | P | Del | | Del | End |PageDown|
+ * | | | | | | | | | | | | | | | | | | |
+ * |-----------+--------+--------+--------+--------+--------| [ | ] |--------+--------+--------+-----------------+-----------| '--------+--------+--------'
+ * | FN_BACK | A | S | D | F | G |--------+--------| H | J | K | L | " | Enter |
+ * | | | | | | | | | | | | | ' | |
+ * |-----------+--------+--------+--------+--------+--------| Prev | Next |--------+--------+--------------------------+-----------| .--------.
+ * | LShift | Z | X | C | V | B | Tab | Tab | N | M | < | > | ? | RShift | | Up |
+ * | | | | | | | | | | | , | . | / | | | |
+ * |-----------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+-----------| .--------+--------+--------.
+ * | LCtrl | LGUI | LALT | FN | Space | Space | Space | Space | Space | Space | RALT | RGUI | RCTRL | | Left | Down | Right |
+ * | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------------------------------' '--------+--------+--------'
+ */
+
+ 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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, 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_INS, KC_HOME, KC_PGUP,
+ 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_DEL, KC_DEL, KC_END, KC_PGDN,
+ FN_BACK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, BTAB, NTAB, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT( /* Layer One */
+
+ 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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, 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_INS, KC_HOME, KC_PGUP,
+ 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_DEL, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGUP, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+
+ [2] = LAYOUT( /* Layer Two */
+
+ 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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, 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_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, ZOOMIN, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_DEL, KC_END, KC_PGDN,
+ FN_BACK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ZOOMOUT, KC_LBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [3] = LAYOUT( /* Layer Three */
+
+ KC_ESC, DF(0), DF(1), DF(2), KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, QK_BOOT,
+
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(0), RGB_MOD,
+ KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(1), RGB_RMOD,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SCLN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLU, KC_VOLD, KC_BSLS, KC_CAPS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, 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_MS_WH_UP, KC_MS_WH_DOWN) },
+ [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [3] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }
+};
+#endif
diff --git a/keyboards/kradoindustries/kousa/keymaps/via/rules.mk b/keyboards/kradoindustries/kousa/keymaps/via/rules.mk
new file mode 100644
index 00000000000..aaf0497be13
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/kradoindustries/kousa/readme.md b/keyboards/kradoindustries/kousa/readme.md
new file mode 100644
index 00000000000..b9a50a93c93
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/readme.md
@@ -0,0 +1,32 @@
+# Kousa TKL
+
+
+
+A hotswap H88-Compact Type-C compatible ortholinear TKL PCB that uses ergodox modifiers. Based on the [Boardwalk](https://github.com/qmk/qmk_firmware/tree/master/keyboards/boardwalk)'s split hand layout, with the addtion of 6u and split 3u spacebar stabilizer support. F13 and F12 layouts are supported. The F13 location also supports a rotary encoder. The default layout will have 1.5u vertical inner modifiers, but it is possible to convert the center keys to 1u by soldering hotswap sockets. The board is designed to be compatible with H88-C type C boards and the outline of the board was based on zykrah's [slime88 pcb](https://github.com/zykrah/slime88). The usb C port can be broken off and used with a JST connector and daughterboard.
+
+The name is meant to be read "Kousa Tenkeyless". "Kousaten" (交差点) means intersection or crossing in Japanese. I wanted the name to be a nod to the Boardwalk without using u/shensmobile's naming conventions and Crosswalk seemed pretty close, but then I realized "crossing" in Japanese is "kousaten" and I thought it would call it the Kousa Tenkeyless!
+
+* Keyboard Maintainer: [Feags](https://github.com/Feags) / [Krado Industries](https://kradoindustries.com/)
+* Hardware Supported: H88-C type C cases. Confirmed working in KFA Freebird TKL. Also confirmed working in KBDFans Tiger80 Lite. *Please note that you will need a custom plate for any case.*
+* Hardware Availabilitiy: [Krado Industries](https://kradoindustries.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kradoindustries/kousa:default
+
+Flashing example for this keyboard:
+
+ make kradoindustries/kousa:default:flash
+
+
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/kradoindustries/kousa/rules.mk b/keyboards/kradoindustries/kousa/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/kradoindustries/krado66/info.json b/keyboards/kradoindustries/krado66/info.json
new file mode 100644
index 00000000000..aefadf12de1
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/info.json
@@ -0,0 +1,130 @@
+{
+ "keyboard_name": "Krado66",
+ "manufacturer": "Krado Industries",
+ "url": "https://www.kradoindustries.com/",
+ "maintainer": "Krado Industries",
+ "usb": {
+ "vid": "0x4B72",
+ "pid": "0x6664",
+ "device_version": "2.0.0"
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "encoder": true,
+ "rgblight": true
+ },
+ "ws2812": {
+ "pin": "B2"
+ },
+ "rgblight": {
+ "led_count": 14,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "B1", "pin_b": "B0" },
+ { "pin_a": "D7", "pin_b": "D6" },
+ { "pin_a": "F7", "pin_b": "F6" }
+ ]
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": [ "C7", "B3", "D0", "D1", "D2", "D3", "D5", "D4"],
+ "rows": [ "F5", "F4", "F1", "F0", "B7", "E6", "B4", "B5", "C6", "B6" ]
+ },
+
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x":0.25, "y":0},
+ {"matrix": [1, 0], "x":1.25, "y":0},
+ {"matrix": [0, 1], "x":2.25, "y":0},
+ {"matrix": [1, 1], "x":3.25, "y":0},
+ {"matrix": [0, 2], "x":4.25, "y":0},
+ {"matrix": [1, 2], "x":5.25, "y":0},
+ {"matrix": [0, 3], "x":6.25, "y":0},
+ {"matrix": [1, 3], "x":7.25, "y":0},
+ {"matrix": [0, 4], "x":8.25, "y":0},
+ {"matrix": [1, 4], "x":9.25, "y":0},
+ {"matrix": [0, 5], "x":10.25, "y":0},
+ {"matrix": [1, 5], "x":11.25, "y":0},
+ {"matrix": [0, 6], "x":12.25, "y":0},
+ {"matrix": [1, 6], "x":13.25, "y":0},
+ {"matrix": [0, 7], "x":14.25, "y":0},
+ {"matrix": [1, 7], "x":15.25, "y":0},
+ {"matrix": [3, 0], "x":0.75, "y":1, "w":1.5},
+ {"matrix": [2, 1], "x":2.25, "y":1},
+ {"matrix": [3, 1], "x":3.25, "y":1},
+ {"matrix": [2, 2], "x":4.25, "y":1},
+ {"matrix": [3, 2], "x":5.25, "y":1},
+ {"matrix": [2, 3], "x":6.25, "y":1},
+ {"matrix": [3, 3], "x":7.25, "y":1},
+ {"matrix": [2, 4], "x":8.25, "y":1},
+ {"matrix": [3, 4], "x":9.25, "y":1},
+ {"matrix": [2, 5], "x":10.25, "y":1},
+ {"matrix": [3, 5], "x":11.25, "y":1},
+ {"matrix": [2, 6], "x":12.25, "y":1},
+ {"matrix": [3, 6], "x":13.25, "y":1},
+ {"matrix": [2, 7], "x":14.25, "y":1, "w":1.5},
+ {"matrix": [5, 0], "x":0.5, "y":2, "w":1.75},
+ {"matrix": [4, 1], "x":2.25, "y":2},
+ {"matrix": [5, 1], "x":3.25, "y":2},
+ {"matrix": [4, 2], "x":4.25, "y":2},
+ {"matrix": [5, 2], "x":5.25, "y":2},
+ {"matrix": [4, 3], "x":6.25, "y":2},
+ {"matrix": [5, 3], "x":7.25, "y":2},
+ {"matrix": [4, 4], "x":8.25, "y":2},
+ {"matrix": [5, 4], "x":9.25, "y":2},
+ {"matrix": [4, 5], "x":10.25, "y":2},
+ {"matrix": [5, 5], "x":11.25, "y":2},
+ {"matrix": [4, 6], "x":12.25, "y":2},
+ {"matrix": [5, 6], "x":13.25, "y":2, "w":2.25},
+ {"matrix": [7, 0], "x":0, "y":3, "w":2.25},
+ {"matrix": [6, 1], "x":2.25, "y":3},
+ {"matrix": [7, 1], "x":3.25, "y":3},
+ {"matrix": [6, 2], "x":4.25, "y":3},
+ {"matrix": [7, 2], "x":5.25, "y":3},
+ {"matrix": [6, 3], "x":6.25, "y":3},
+ {"matrix": [7, 3], "x":7.25, "y":3},
+ {"matrix": [6, 4], "x":8.25, "y":3},
+ {"matrix": [7, 4], "x":9.25, "y":3},
+ {"matrix": [6, 5], "x":10.25, "y":3},
+ {"matrix": [7, 5], "x":11.25, "y":3},
+ {"matrix": [6, 6], "x":12.25, "y":3, "w":1.75},
+ {"matrix": [6, 7], "x":14, "y":3},
+ {"matrix": [7, 7], "x":15, "y":3},
+ {"matrix": [8, 0], "x":0, "y":4, "w":1.25},
+ {"matrix": [9, 0], "x":1.25, "y":4, "w":1.25},
+ {"matrix": [8, 1], "x":2.5, "y":4, "w":1.25},
+ {"matrix": [9, 2], "x":3.75, "y":4, "w":1.25},
+ {"matrix": [8, 3], "x":5, "y":4, "w":2.25},
+ {"matrix": [9, 4], "x":7.25, "y":4, "w":2.75},
+ {"matrix": [8, 5], "x":10, "y":4},
+ {"matrix": [9, 5], "x":11, "y":4},
+ {"matrix": [8, 6], "x":12, "y":4},
+ {"matrix": [9, 6], "x":13, "y":4},
+ {"matrix": [8, 7], "x":14, "y":4},
+ {"matrix": [9, 7], "x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/kradoindustries/krado66/keymaps/default/keymap.c b/keyboards/kradoindustries/krado66/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ca18457196d
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/keymaps/default/keymap.c
@@ -0,0 +1,177 @@
+/*
+Copyright 2022 Matt F
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layer {
+ _QWERTY,
+ _QWERTYX,
+ _FUNCTION,
+ _EXTRA,
+};
+
+
+#define QWERTY DF(_QWERTY)
+#define QWERTYX DF(_QWERTYX)
+#define FN MO(_FUNCTION)
+#define BACKFN LT(_FUNCTION, KC_BSPC)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = 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, KC_BSPC, 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_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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, FN, \
+ KC_LCTL, KC_LGUI, KC_LALT, FN, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+/* Default
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | ESC | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspc| Back |
+ * | | ` | | | | | | | | | | | _ | = | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | DELETE |
+ * | | | | | | | | | | | | { | } | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | CAPS LOCK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
+ * | | | | | | | | | | | : | " | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+-----------+-----+
+ * | SHIFT | Z | X | C | V | B | N | M | < | > | / | RSHIFT | UP | Fn |
+ * | | | | | | | | | , | . | ? | | | |
+ * |----------+----------+----------+--------------------------------------------------------+--------+--------+--------+--------+--------+--------+
+ * | LCTRL | LGUI | LALT | Fn | SPACE | Space | RALT | RCTRL | GUI | LEFT | DOWN | RIGHT |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+
+
+
+ [_QWERTYX] = 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, KC_BSPC, 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_DEL, \
+ BACKFN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_UP, FN, \
+ KC_LCTL, KC_LGUI, KC_LALT, FN, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+/* Default
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | ESC | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspc| Back |
+ * | | ` | | | | | | | | | | | _ | = | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | DELETE |
+ * | | | | | | | | | | | | { | } | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | BACKSPACE (FN)| A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
+ * | | | | | | | | | | | : | " | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+-----------+-----+
+ * | CADET SHIFT ( | Z | X | C | V | B | N | M | < | > | / | CADET SHIFT ) | UP | Fn |
+ * | | | | | | | | | , | . | ? | | | |
+ * |----------+----------+----------+--------------------------------------------------------+--------+--------+--------+--------+--------|--------+
+ * | LCTRL | LGUI | LALT | Fn | SPACE | Space | RALT | GUI | RCTRL | LEFT | DOWN | RIGHT |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+*/
+
+
+ [_FUNCTION] = LAYOUT(
+ QK_BOOT, QWERTYX, 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, QK_BOOT, \
+ QWERTY, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_DEL, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, RGB_TOG, \
+ KC_TRNS, RGB_M_R, RGB_M_X, RGB_M_SW,RGB_M_K, RGB_M_B, RGB_M_G, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, KC_CAPS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_PDOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+/* Fn
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | |QWERTYEX| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | RESET |
+ * | | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | QWERTY | HOME | UP | END | PGUP | | | | INS | | Print | | | DELETE |
+ * | | | | | | | | | | | Screen | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | LEFT | DOWN | RIGHT | PGDN | | | PREV | PLAY | NEXT | | | RGB TOG |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | Rainbow| Xmas | Swirl | Knight |Breathe |GradieNt| MUTE | VOL DN | VOL UP | PIPE \ | CAPS LOCK | PAGEUP | Fn |
+ * | | | | | | | | | | | | | | |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | Fn | ENTER | NUM.Dot | | | | HOME | PAGEDN | END |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+
+ [_EXTRA] = LAYOUT(
+ QK_BOOT, QWERTYX, 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, QK_BOOT, \
+ QWERTY, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_DEL, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, RGB_TOG, \
+ KC_TRNS, RGB_M_R, RGB_M_X, RGB_M_SW,RGB_M_K, RGB_M_B, RGB_M_G, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, KC_CAPS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_PDOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+/* Fn
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | |QWERTYX | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | RESET |
+ * | | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | QWERTY | HOME | UP | END | PGUP | | | | INS | | Print | | | DELETE |
+ * | | | | | | | | | | | Screen | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | LEFT | DOWN | RIGHT | PGDN | | | PREV | PLAY | NEXT | | | RGB TOG |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | Rainbow| Xmas | Swirl | Knight |Breathe |GradieNt| MUTE | VOL DN | VOL UP | PIPE \ | CAPS LOCK | PAGEUP | Fn |
+ * | | | | | | | | | | | | | | E2 |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | Fn | ENTER | NUM.Dot | | | | HOME | PAGEDN | END |
+ * | E3 | | | | E3 | | | | E2 | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+};
+
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_QWERTYX] = { ENCODER_CCW_CW(C(KC_TAB), C(S(KC_TAB))), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
+ [_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
+ [_EXTRA] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT) },
+};
+#endif
+
+
+
+ /* Encoder Positions
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | | | | |
+ * | E1 | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | E2 |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | | | | | | | | | |
+ * | E3 | | | | E3 | | | | E2 | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
\ No newline at end of file
diff --git a/keyboards/kradoindustries/krado66/keymaps/default/rules.mk b/keyboards/kradoindustries/krado66/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/kradoindustries/krado66/keymaps/via/keymap.c b/keyboards/kradoindustries/krado66/keymaps/via/keymap.c
new file mode 100644
index 00000000000..192bd377bdf
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/keymaps/via/keymap.c
@@ -0,0 +1,177 @@
+/*
+Copyright 2022 Matt F
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layer {
+ _QWERTY,
+ _QWERTYX,
+ _FUNCTION,
+ _EXTRA,
+};
+
+
+#define QWERTY DF(_QWERTY)
+#define QWERTYX DF(_QWERTYX)
+#define FN MO(_FUNCTION)
+#define BACKFN LT(_FUNCTION, KC_BSPC)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = 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, KC_BSPC, 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_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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, FN, \
+ KC_LCTL, KC_LGUI, KC_LALT, FN, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+/* Default
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | ESC | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspc| Back |
+ * | | ` | | | | | | | | | | | _ | = | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | DELETE |
+ * | | | | | | | | | | | | { | } | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | CAPS LOCK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
+ * | | | | | | | | | | | : | " | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+-----------+-----+
+ * | SHIFT | Z | X | C | V | B | N | M | < | > | / | RSHIFT | UP | Fn |
+ * | | | | | | | | | , | . | ? | | | |
+ * |----------+----------+----------+--------------------------------------------------------+--------+--------+--------+--------+--------+--------+
+ * | LCTRL | LGUI | LALT | Fn | SPACE | Space | RALT | RCTRL | GUI | LEFT | DOWN | RIGHT |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+
+
+
+ [_QWERTYX] = 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, KC_BSPC, 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_DEL, \
+ BACKFN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_UP, FN, \
+ KC_LCTL, KC_LGUI, KC_LALT, FN, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+/* Default
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | ESC | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspc| Back |
+ * | | ` | | | | | | | | | | | _ | = | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | DELETE |
+ * | | | | | | | | | | | | { | } | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | BACKSPACE (FN)| A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
+ * | | | | | | | | | | | : | " | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+-----------+-----+
+ * | CADET SHIFT ( | Z | X | C | V | B | N | M | < | > | / | CADET SHIFT ) | UP | Fn |
+ * | | | | | | | | | , | . | ? | | | |
+ * |----------+----------+----------+--------------------------------------------------------+--------+--------+--------+--------+--------|--------+
+ * | LCTRL | LGUI | LALT | Fn | SPACE | Space | RALT | GUI | RCTRL | LEFT | DOWN | RIGHT |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+*/
+
+
+ [_FUNCTION] = LAYOUT(
+ QK_BOOT, QWERTYX, 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, QK_BOOT, \
+ QWERTY, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_DEL, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, RGB_TOG, \
+ KC_TRNS, RGB_M_R, RGB_M_X, RGB_M_SW,RGB_M_K, RGB_M_B, RGB_M_G, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, KC_CAPS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_PDOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+/* Fn
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | |QWERTYEX| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | RESET |
+ * | | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | QWERTY | HOME | UP | END | PGUP | | | | INS | | Print | | | DELETE |
+ * | | | | | | | | | | | Screen | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | LEFT | DOWN | RIGHT | PGDN | | | PREV | PLAY | NEXT | | | RGB TOG |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | Rainbow| Xmas | Swirl | Knight |Breathe |GradieNt| MUTE | VOL DN | VOL UP | PIPE \ | CAPS LOCK | PAGEUP | Fn |
+ * | | | | | | | | | | | | | | |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | Fn | ENTER | NUM.Dot | | | | HOME | PAGEDN | END |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+
+ [_EXTRA] = LAYOUT(
+ QK_BOOT, QWERTYX, 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, QK_BOOT, \
+ QWERTY, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_DEL, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, RGB_TOG, \
+ KC_TRNS, RGB_M_R, RGB_M_X, RGB_M_SW,RGB_M_K, RGB_M_B, RGB_M_G, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, KC_CAPS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_PDOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+/* Fn
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | |QWERTYX | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | RESET |
+ * | | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | QWERTY | HOME | UP | END | PGUP | | | | INS | | Print | | | DELETE |
+ * | | | | | | | | | | | Screen | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | LEFT | DOWN | RIGHT | PGDN | | | PREV | PLAY | NEXT | | | RGB TOG |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | Rainbow| Xmas | Swirl | Knight |Breathe |GradieNt| MUTE | VOL DN | VOL UP | PIPE \ | CAPS LOCK | PAGEUP | Fn |
+ * | | | | | | | | | | | | | | E2 |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | Fn | ENTER | NUM.Dot | | | | HOME | PAGEDN | END |
+ * | E3 | | | | E3 | | | | E2 | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+};
+
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_QWERTYX] = { ENCODER_CCW_CW(C(KC_TAB), C(S(KC_TAB))), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
+ [_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
+ [_EXTRA] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT) },
+};
+#endif
+
+
+
+ /* Encoder Positions
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | | | | |
+ * | E1 | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | E2 |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | | | | | | | | | |
+ * | E3 | | | | E3 | | | | E2 | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
\ No newline at end of file
diff --git a/keyboards/kradoindustries/krado66/keymaps/via/rules.mk b/keyboards/kradoindustries/krado66/keymaps/via/rules.mk
new file mode 100644
index 00000000000..8111cb54a73
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/keymaps/via/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+
diff --git a/keyboards/kradoindustries/krado66/readme.md b/keyboards/kradoindustries/krado66/readme.md
new file mode 100644
index 00000000000..7b8a275ee40
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/readme.md
@@ -0,0 +1,30 @@
+# Krado66
+
+
+
+The Krado66 is a 65%ish ortholinear keyboard the uses standard 65% layout keycaps. It can also be configured to accept standard ANSI keycaps (Full 2.75u Right Shift and 1.25u bottom modifiers.)
+
+For those that are wondering, "Krado" means "grid" in Esperanto. The board has 66 keys in its default layout.
+
+* Keyboard Maintainer: [Feags](https://github.com/Feags) / [Krado Industries](https://kradoindustries.com/)
+* Hardware Supported: Only Krado66 acrylic case and skeleton cases are supported.
+* Hardware Availabilitiy: [Krado Industries](https://kradoindustries.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kradoindustries/krado66:default
+
+Flashing example for this keyboard:
+
+ make kradoindustries/krado66:default:flash
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/kradoindustries/krado66/rules.mk b/keyboards/kradoindustries/krado66/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/kradoindustries/promenade/info.json b/keyboards/kradoindustries/promenade/info.json
new file mode 100644
index 00000000000..a4d47b34f35
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/info.json
@@ -0,0 +1,123 @@
+{
+ "keyboard_name": "Promenade",
+ "manufacturer": "krado industries",
+ "url": "https://www.kradoindustries.com/",
+ "maintainer": "Krado Industries",
+ "usb": {
+ "vid": "0x4B72",
+ "pid": "0x706D",
+ "device_version": "1.0.0"
+ },
+
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgblight": true
+ },
+ "ws2812": {
+ "pin": "B7"
+ },
+ "rgblight": {
+ "led_count": 14,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": [ "F4", "C7", "D7", "B4", "B5", "B6", "C6", "D6", "D4", "D5", "D3", "D2", "D1", "D0"],
+ "rows": [ "F1", "F5", "E6", "F7", "F6"]
+ },
+
+
+ "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, "w":1.5},
+ {"matrix": [1, 1], "x":1.5, "y":1},
+ {"matrix": [1, 2], "x":2.5, "y":1},
+ {"matrix": [1, 3], "x":3.5, "y":1},
+ {"matrix": [1, 4], "x":4.5, "y":1},
+ {"matrix": [1, 5], "x":5.5, "y":1},
+ {"matrix": [1, 6], "x":6.5, "y":1, "h":1.5},
+ {"matrix": [1, 7], "x":7.5, "y":1, "h":1.5},
+ {"matrix": [1, 8], "x":8.5, "y":1},
+ {"matrix": [1, 9], "x":9.5, "y":1},
+ {"matrix": [1, 10], "x":10.5, "y":1},
+ {"matrix": [1, 11], "x":11.5, "y":1},
+ {"matrix": [1, 12], "x":12.5, "y":1},
+ {"matrix": [1, 13], "x":13.5, "y":1, "w":1.5},
+ {"matrix": [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, 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, 6], "x":6.5, "y":2.5, "h":1.5},
+ {"matrix": [3, 7], "x":7.5, "y":2.5, "h":1.5},
+ {"matrix": [3, 0], "x":0, "y":3, "w":1.5},
+ {"matrix": [3, 1], "x":1.5, "y":3},
+ {"matrix": [3, 2], "x":2.5, "y":3},
+ {"matrix": [3, 3], "x":3.5, "y":3},
+ {"matrix": [3, 4], "x":4.5, "y":3},
+ {"matrix": [3, 5], "x":5.5, "y":3},
+ {"matrix": [3, 8], "x":8.5, "y":3},
+ {"matrix": [3, 9], "x":9.5, "y":3},
+ {"matrix": [3, 10], "x":10.5, "y":3},
+ {"matrix": [3, 11], "x":11.5, "y":3},
+ {"matrix": [3, 12], "x":12.5, "y":3},
+ {"matrix": [3, 13], "x":13.5, "y":3, "w":1.5},
+ {"matrix": [4, 0], "x":0, "y":4, "w":1.5},
+ {"matrix": [4, 1], "x":1.5, "y":4},
+ {"matrix": [4, 2], "x":2.5, "y":4},
+ {"matrix": [4, 3], "x":3.5, "y":4},
+ {"matrix": [4, 4], "x":4.5, "y":4},
+ {"matrix": [4, 5], "x":5.5, "y":4},
+ {"matrix": [4, 6], "x":6.5, "y":4, "w":2},
+ {"matrix": [4, 8], "x":8.5, "y":4},
+ {"matrix": [4, 9], "x":9.5, "y":4},
+ {"matrix": [4, 10], "x":10.5, "y":4},
+ {"matrix": [4, 11], "x":11.5, "y":4},
+ {"matrix": [4, 12], "x":12.5, "y":4},
+ {"matrix": [4, 13], "x":13.5, "y":4, "w":1.5}
+
+ ]
+ }
+ }
+}
diff --git a/keyboards/kradoindustries/promenade/keymaps/default/keymap.c b/keyboards/kradoindustries/promenade/keymaps/default/keymap.c
new file mode 100644
index 00000000000..42e606c149e
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/keymaps/default/keymap.c
@@ -0,0 +1,66 @@
+/*
+Copyright 2023 Matt F
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Layer shorthand
+enum layer_names {
+ _BASE,
+ _FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | - | = | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | [ | ] | Y | U | I | O | P | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | | | H | J | K | L | ; | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | END | PG DN | N | M | , | . | / | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL | LGUI | FN | LALT | SPACE | SPACE | SPACE | SPACE | SPACE | LEFT | DOWN | UP | RIGHT | RCTRL |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+ [_BASE] = 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_QUOT,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(_FN), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL
+ ),
+
+ /* Function Layer
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | | Home | Up | End | PgUp | | | | | | | | PRT SC | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | | Left | Down | Right | PgDn | | | | | | | | | Reset |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | | | | | | | | | | MUTE | VOL DN | VOL UP | \ | |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | | | | | | | | | | | | | | Reset |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+ [_FN] = 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, KC_F12, KC_DEL,
+ _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/kradoindustries/promenade/keymaps/via/keymap.c b/keyboards/kradoindustries/promenade/keymaps/via/keymap.c
new file mode 100644
index 00000000000..8797471b4ca
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/keymaps/via/keymap.c
@@ -0,0 +1,66 @@
+/*
+Copyright 2023 Matt F
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Layer shorthand
+enum layer_names {
+ _BASE,
+ _FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | - | = | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | [ | ] | Y | U | I | O | P | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | | | H | J | K | L | ; | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | END | PG DN | N | M | , | . | / | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL | LGUI | FN | LALT | SPACE | SPACE | SPACE | SPACE | SPACE | LEFT | DOWN | UP | RIGHT | RCTRL |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+ [_BASE] = 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_QUOT,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(_FN), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL
+ ),
+
+ /* Function Layer
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | | Home | Up | End | PgUp | | | | | | | | PRT SC | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | | Left | Down | Right | PgDn | | | | | | | | | Reset |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | | | | | | | | | | MUTE | VOL DN | VOL UP | \ | |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | | | | | | | | | | | | | | Reset |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+ [_FN] = 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, KC_F12, KC_DEL,
+ _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/kradoindustries/promenade/keymaps/via/rules.mk b/keyboards/kradoindustries/promenade/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/kradoindustries/promenade/readme.md b/keyboards/kradoindustries/promenade/readme.md
new file mode 100644
index 00000000000..179563995cf
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/readme.md
@@ -0,0 +1,30 @@
+# Promenade
+
+
+
+The Promenade is a 60% ortholinear hotswap keyboard based on the split hand layout of the [Boardwalk](https://github.com/qmk/qmk_firmware/tree/master/keyboards/boardwalk). While similar to the Professional 2 hotswap version of the Boardwalk, it uses 1.5u verticle inner mods instead of 1u keys, includes a JST connector, adds stabilizer mounting positions for 6u and split 3u spacebards, and in addition to 60% tray mounting points the pcb has edge cuts for for use in gummy o-ring mount boards like the Bakeneko60.
+
+The 1.5u vertical inner mods are the default configuration, but the board can be configured to use 3x2 1u keys either by removing the existing hotswap sockets and soldering 6 hotswap sockets to the 1u pads. *Note that the some of the 1u keys may require the plastic legs of 5-pin switches to be trimmed.*
+
+* Keyboard Maintainer: [Feags](https://github.com/Feags) / [Krado Industries](https://kradoindustries.com/)
+* Hardware Supported: Promenade pcb. Many 60% cases.
+* Hardware Availability: [Krado Industries](https://kradoindustries.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kradoindustries/promenade:default
+
+Flashing example for this keyboard:
+
+ make kradoindustries/promenade:default:flash
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/kradoindustries/promenade/rules.mk b/keyboards/kradoindustries/promenade/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/lily58/keymaps/gaston/config.h b/keyboards/lily58/keymaps/gaston/config.h
index 988e3eb6f83..f4f3140d513 100644
--- a/keyboards/lily58/keymaps/gaston/config.h
+++ b/keyboards/lily58/keymaps/gaston/config.h
@@ -24,3 +24,4 @@
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 150 /* ms */
+#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY
diff --git a/keyboards/lily58/keymaps/gaston/keymap.c b/keyboards/lily58/keymaps/gaston/keymap.c
index 4f8654b41bd..c98ec4254bd 100644
--- a/keyboards/lily58/keymaps/gaston/keymap.c
+++ b/keyboards/lily58/keymaps/gaston/keymap.c
@@ -57,3 +57,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
+
+bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case MT_CESC:
+ // Immediately select the hold action when another key is pressed.
+ return true;
+ default:
+ // Do not select the hold action when another key is pressed.
+ return false;
+ }
+}
diff --git a/keyboards/keebio/nyquist/keymaps/default/config.h b/keyboards/lily58/keymaps/pomodoro/config.h
similarity index 68%
rename from keyboards/keebio/nyquist/keymaps/default/config.h
rename to keyboards/lily58/keymaps/pomodoro/config.h
index 81fc2cf5fe4..ce2b0e4bcde 100644
--- a/keyboards/keebio/nyquist/keymaps/default/config.h
+++ b/keyboards/lily58/keymaps/pomodoro/config.h
@@ -1,5 +1,8 @@
/*
-Copyright 2017 Danny Nguyen
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
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
@@ -17,12 +20,15 @@ along with this program. If not, see .
#pragma once
-// #define USE_I2C
-
/* Select hand configuration */
+
+#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
+#define QUICK_TAP_TERM 0
+#define TAPPING_TERM 100
+
#undef RGBLED_NUM
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
@@ -34,7 +40,17 @@ along with this program. If not, see .
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 12
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#define SPLIT_TRANSACTION_IDS_USER SYNC_POMODORO_RUNNING
+
+// Underglow
+/*
+#undef RGBLED_NUM
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_SLEEP
+*/
diff --git a/keyboards/lily58/keymaps/pomodoro/keymap.c b/keyboards/lily58/keymaps/pomodoro/keymap.c
new file mode 100644
index 00000000000..7689a391f2d
--- /dev/null
+++ b/keyboards/lily58/keymaps/pomodoro/keymap.c
@@ -0,0 +1,154 @@
+/*
+Copyright 2023 Casey Borders
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+enum layer_number {
+ _QWERTY = 0,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |Backsp|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
+ * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_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_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_MPLY, MO(_LOWER), KC_LGUI, KC_ENT, KC_SPC, KC_RGUI, MO(_RAISE), KC_MUTE
+ ),
+ /* LOWER
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | Up | | \ | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | |-------. ,-------| | Left | Down |Right | = | |
+ * |------+------+------+------+------+------| < | | > |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | | | | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_LOWER] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LT, KC_GT, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+
+ ),
+ /* RAISE
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | Vol+ | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Prev | Vol- | Next | | |-------. ,-------| | | | | | |
+ * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | | | | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_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_F12,
+ _______, _______, KC_VOLU, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
+ _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LT, KC_GT, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+
+ ),
+ /* ADJUST
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | Oper | Out |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | |-------. ,-------| | | | | | |
+ * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | | | | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_ADJUST] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_OPER, KC_OUT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+// SSD1306 OLED update loop, make sure to enable OLED_ENABLE=yes in rules.mk
+#ifdef OLED_ENABLE
+
+// When you add source files to SRC in rules.mk, you can use functions.
+const char *read_layer_state(void);
+const char *read_logo(void);
+const char *read_timelog(void);
+
+void toggle_pomodoro(void);
+const char* read_pomodoro_running(void);
+void update_pomodoro_display(void);
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (!is_keyboard_master())
+ return OLED_ROTATION_90;
+ return rotation;
+}
+
+bool oled_task_user(void) {
+ if (is_keyboard_master()) {
+ oled_write_ln(read_layer_state(), false);
+ oled_write_ln(read_pomodoro_running(), false);
+ } else {
+ update_pomodoro_display();
+ }
+ return false;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed && keycode == KC_OPER) {
+ toggle_pomodoro();
+ }
+ return true;
+}
+
+#endif // OLED_ENABLE
diff --git a/keyboards/lily58/keymaps/pomodoro/pomodoro.c b/keyboards/lily58/keymaps/pomodoro/pomodoro.c
new file mode 100644
index 00000000000..1c0641978dc
--- /dev/null
+++ b/keyboards/lily58/keymaps/pomodoro/pomodoro.c
@@ -0,0 +1,249 @@
+/*
+Copyright 2023 Casey Borders
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+#include
+
+#include "transactions.h"
+
+#ifdef OLED_ENABLE
+
+#define HEADER_SIZE 32
+const char headerBase[] PROGMEM = {
+ 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
+ 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
+ 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
+ 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF
+};
+char header[HEADER_SIZE];
+
+#define STATUS_WIDTH 15
+#define STATUS_HEIGHT 32
+#define STATUS_PIXELS (STATUS_WIDTH * 8)
+#define STATUS_SIZE (STATUS_WIDTH * STATUS_HEIGHT)
+const char logoBase[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x61, 0x61, 0x81, 0x81, 0x01, 0x01, 0xC1, 0xC1, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xC0, 0xFF, 0xFF, 0xC3, 0xC3, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF0, 0xF0, 0x00, 0x00, 0xF0, 0xF0, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF0, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0F, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x06, 0x9E, 0x9E, 0x66, 0x66, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0xF8, 0xF8, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xF8, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x86, 0x86, 0x67, 0x67, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x86, 0x86, 0x00, 0x00, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x31, 0x31, 0xC1, 0xC1, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x30, 0x30, 0x3F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xF3, 0x7F, 0x3F, 0x7F, 0xFF, 0xFF, 0x3B, 0xF1, 0xF7, 0xFF, 0x3F, 0x39, 0x30, 0x00, 0x01, 0x01, 0x01, 0x83, 0x86, 0x0C, 0xF8, 0xF0, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xCF, 0x07, 0x1F, 0x3F, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xDF, 0xFC, 0x7F, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0E, 0x1C, 0x18, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00
+};
+
+const char workBase[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3E, 0x3E, 0x3E, 0x3E, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x3E, 0x3E, 0x3E, 0x3E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7C, 0x7C, 0x7C, 0x7C, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFC, 0xFC, 0xFC, 0xFC, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x83, 0x83, 0x83, 0x83, 0x83, 0x7F, 0x7F, 0x7F, 0x7F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00
+};
+
+const char restBase[] PROGMEM = {
+ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFC, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7C, 0x7C, 0x7C, 0x7C, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00
+};
+char displayBuffer[STATUS_SIZE];
+
+#define WORK_TIME ((uint32_t)25 * 60 * 1000)
+#define REST_TIME ((uint32_t)5 * 60 * 1000)
+
+typedef enum pomo_state {
+ _STOPPED,
+ _WORK,
+ _REST,
+} pomo_state;
+
+/* The master only needs to know if the timer is running or not */
+bool isRunning = false;
+
+/* The slave needs more info about the state and what's going on */
+pomo_state state = _STOPPED;
+uint8_t pomoCount = 0;
+uint32_t pomoTimer;
+uint32_t totalTime = 0;
+uint32_t currTime = 0;
+uint32_t lastTime = 0;
+uint16_t lastProgress = 0;
+
+const char* read_pomodoro_state(void) {
+ switch (state) {
+ case _STOPPED: return "STOPPED";
+ case _REST: return "REST";
+ case _WORK: return "WORK";
+ default: return "UNKNOWN";
+ }
+}
+
+const char* read_pomodoro_running(void) {
+ if (isRunning) { return "RUNNING"; }
+ else { return "STOPPED"; }
+}
+
+void update_display_base(void) {
+ switch (state) {
+ case _STOPPED: {
+ memcpy_P(displayBuffer, logoBase, STATUS_SIZE);
+ memset(header, 0, HEADER_SIZE);
+ } break;
+ case _WORK: {
+ memcpy_P(displayBuffer, workBase, STATUS_SIZE);
+ memcpy_P(header, headerBase, HEADER_SIZE);
+ } break;
+ case _REST: {
+ memcpy_P(displayBuffer, restBase, STATUS_SIZE);
+ memcpy_P(header, headerBase, HEADER_SIZE);
+ } break;
+ }
+}
+
+void update_cycle_display(void) {
+ if (state == _STOPPED) { return; }
+ uint8_t start = (HEADER_SIZE / 4) * (4 - pomoCount);
+ for (uint8_t i = start; i < HEADER_SIZE; i++) {
+ header[i] = ~header[i];
+ }
+}
+
+bool syncRunning = false;
+void toggle_pomodoro(void) {
+ isRunning = !isRunning;
+ syncRunning = true;
+}
+
+void set_slave_pomodoro_running(uint8_t in_buflen, const void *in_data, uint8_t out_buflen, void *out_data) {
+ isRunning = *(bool*)in_data;
+ if (isRunning) {
+ /* Reset stuff and start the timer */
+ pomoTimer = timer_read32();
+ state = _WORK;
+ totalTime = WORK_TIME;
+ lastTime = 0;
+ lastProgress = 0;
+ currTime = 0;
+ pomoCount = 1;
+ update_display_base();
+ update_cycle_display();
+ } else {
+ state = _STOPPED;
+ update_display_base();
+ }
+}
+
+void keyboard_post_init_user(void) {
+ memcpy_P(displayBuffer, logoBase, STATUS_SIZE);
+ memset(header, 0, HEADER_SIZE);
+ transaction_register_rpc(SYNC_POMODORO_RUNNING, set_slave_pomodoro_running);
+}
+
+void update_pomodoro_display(void) {
+ oled_set_cursor(0, 0);
+ oled_write_raw(displayBuffer, STATUS_SIZE);
+ oled_set_cursor(0, STATUS_WIDTH);
+ oled_write_raw(header, HEADER_SIZE);
+}
+
+void update_time_display(void) {
+ if (currTime > lastTime) {
+ float ratio = (float)currTime / totalTime;
+ uint16_t progress = (uint16_t)(ratio * STATUS_PIXELS);
+
+ for (int i = lastProgress + 1; i <= progress; i++) {
+ uint16_t row = i / 8;
+ uint16_t bit = i % 8;
+ char mask = 1 << bit;
+ for (int j = 0; j < STATUS_HEIGHT; j++) {
+ uint16_t index = row * STATUS_HEIGHT + j;
+ if (index > STATUS_SIZE) break;
+ displayBuffer[index] = displayBuffer[index] ^ mask;
+ }
+ }
+
+ lastTime = currTime;
+ lastProgress = progress;
+ }
+}
+
+void housekeeping_task_user(void) {
+ if (is_keyboard_master()) {
+ if (syncRunning && transaction_rpc_send(SYNC_POMODORO_RUNNING, sizeof(bool), &isRunning)) {
+ syncRunning = false;
+ }
+ } else {
+ /* This is where the time will be updated */
+ if (isRunning) {
+ currTime = timer_elapsed32(pomoTimer);
+ if (currTime >= totalTime) {
+ if (state == _WORK) {
+ state = _REST;
+ totalTime = REST_TIME;
+ } else if (state == _REST) {
+ state = _WORK;
+ totalTime = WORK_TIME;
+ pomoCount++;
+ }
+
+ if (pomoCount > 4) {
+ isRunning = false;
+ state = _STOPPED;
+ }
+
+ pomoTimer = timer_read32();
+ currTime = 0;
+ lastTime = 0;
+ lastProgress = 0;
+ update_display_base();
+ update_cycle_display();
+ } else {
+ update_time_display();
+ }
+ }
+ }
+}
+
+#endif // OLED_ENABLE
diff --git a/keyboards/lily58/keymaps/pomodoro/rules.mk b/keyboards/lily58/keymaps/pomodoro/rules.mk
new file mode 100644
index 00000000000..a6666f7fc14
--- /dev/null
+++ b/keyboards/lily58/keymaps/pomodoro/rules.mk
@@ -0,0 +1,23 @@
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+OLED_ENABLE = yes # OLED display
+LTO_ENABLE = yes # Link time optimisations
+EXTRAKEY_ENABLE = yes # Audio control and System control
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/rgb_state_reader.c \
+ ./lib/layer_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c \
+ ./lib/mode_icon_reader.c \
+ ./lib/host_led_state_reader.c \
+ ./lib/timelogger.c \
+ ./lib/keylogger.c \
+ pomodoro.c \
diff --git a/keyboards/lily58/lib/rgb_state_reader.c b/keyboards/lily58/lib/rgb_state_reader.c
index 3d74fb45e4e..9bb86a11ad3 100644
--- a/keyboards/lily58/lib/rgb_state_reader.c
+++ b/keyboards/lily58/lib/rgb_state_reader.c
@@ -1,6 +1,6 @@
#ifdef RGBLIGHT_ENABLE
-
#include
+#include "rgblight.h"
extern rgblight_config_t rgblight_config;
char rbf_info_str[24];
diff --git a/keyboards/linworks/fave60a/config.h b/keyboards/linworks/fave60a/config.h
new file mode 100644
index 00000000000..fd70ee7c38f
--- /dev/null
+++ b/keyboards/linworks/fave60a/config.h
@@ -0,0 +1,67 @@
+// Copyright 2023 ziptyze (@ziptyze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Define RGB */
+#define RGB_MATRIX_LED_COUNT 91
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120
+
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL
+
+#define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+#define ENABLE_RGB_MATRIX_BAND_SAT
+#define ENABLE_RGB_MATRIX_BAND_VAL
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#define ENABLE_RGB_MATRIX_DUAL_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#define ENABLE_RGB_MATRIX_RAINDROPS
+#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#define ENABLE_RGB_MATRIX_HUE_BREATHING
+#define ENABLE_RGB_MATRIX_HUE_PENDULUM
+#define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// The PIXEL_FRACTAL effect does not work properly when the matrix layout is
+// different from the physical layout; it also has problems when underglow
+// LEDs are present, or when multiple LEDs are associated with the same key.
+#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+
+// Framebuffer effects; can be enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// is defined. Both of these effects currently don't work properly when the
+// key matrix does not match the physical layout, so they are disabled.
+#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+// Reactive effects; can be enabled only if at least one of
+// RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined.
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+#define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/linworks/fave60a/info.json b/keyboards/linworks/fave60a/info.json
new file mode 100644
index 00000000000..a0dd31e8c35
--- /dev/null
+++ b/keyboards/linworks/fave60a/info.json
@@ -0,0 +1,192 @@
+{
+ "manufacturer": "Lx3",
+ "keyboard_name": "fave60a",
+ "maintainer": "keydler",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "C15", "C14", "C13"],
+ "rows": ["A8", "B15", "B14", "B8", "B9"]
+ },
+ "processor": "STM32F072",
+ "ws2812": {
+ "pin": "A10"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "layout": [
+ { "flags": 4, "matrix": [4, 13], "x": 208, "y": 64 },
+ { "flags": 4, "matrix": [4, 12], "x": 192, "y": 64 },
+ { "flags": 4, "matrix": [4, 11], "x": 176, "y": 64 },
+ { "flags": 1, "matrix": [4, 6], "x": 96, "y": 64 },
+ { "flags": 4, "matrix": [4, 2], "x": 32, "y": 64 },
+ { "flags": 4, "matrix": [4, 1], "x": 16, "y": 64 },
+ { "flags": 4, "matrix": [4, 0], "x": 0, "y": 64 },
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 48 },
+ { "flags": 1, "matrix": [3, 2], "x": 32, "y": 48 },
+ { "flags": 1, "matrix": [3, 3], "x": 48, "y": 48 },
+ { "flags": 1, "matrix": [3, 4], "x": 64, "y": 48 },
+ { "flags": 1, "matrix": [3, 5], "x": 80, "y": 48 },
+ { "flags": 1, "matrix": [3, 6], "x": 96, "y": 48 },
+ { "flags": 1, "matrix": [3, 7], "x": 112, "y": 48 },
+ { "flags": 1, "matrix": [3, 8], "x": 128, "y": 48 },
+ { "flags": 1, "matrix": [3, 9], "x": 144, "y": 48 },
+ { "flags": 1, "matrix": [3, 10], "x": 160, "y": 48 },
+ { "flags": 1, "matrix": [3, 11], "x": 176, "y": 48 },
+ { "flags": 4, "matrix": [3, 13], "x": 208, "y": 48 },
+ { "flags": 1, "matrix": [2, 13], "x": 208, "y": 32 },
+ { "flags": 1, "matrix": [2, 11], "x": 176, "y": 32 },
+ { "flags": 1, "matrix": [2, 10], "x": 160, "y": 32 },
+ { "flags": 1, "matrix": [2, 9], "x": 144, "y": 32 },
+ { "flags": 1, "matrix": [2, 8], "x": 128, "y": 32 },
+ { "flags": 1, "matrix": [2, 7], "x": 112, "y": 32 },
+ { "flags": 1, "matrix": [2, 6], "x": 96, "y": 32 },
+ { "flags": 1, "matrix": [2, 5], "x": 80, "y": 32 },
+ { "flags": 1, "matrix": [2, 4], "x": 64, "y": 32 },
+ { "flags": 1, "matrix": [2, 3], "x": 48, "y": 32 },
+ { "flags": 1, "matrix": [2, 2], "x": 24, "y": 32 },
+ { "flags": 1, "matrix": [2, 1], "x": 12, "y": 32 },
+ { "flags": 9, "matrix": [2, 0], "x": 0, "y": 32 },
+ { "flags": 1, "matrix": [1, 0], "x": 0, "y": 16 },
+ { "flags": 1, "matrix": [1, 1], "x": 16, "y": 16 },
+ { "flags": 1, "matrix": [1, 2], "x": 32, "y": 16 },
+ { "flags": 1, "matrix": [1, 3], "x": 48, "y": 16 },
+ { "flags": 1, "matrix": [1, 4], "x": 64, "y": 16 },
+ { "flags": 1, "matrix": [1, 5], "x": 80, "y": 16 },
+ { "flags": 1, "matrix": [1, 6], "x": 96, "y": 16 },
+ { "flags": 1, "matrix": [1, 7], "x": 112, "y": 16 },
+ { "flags": 1, "matrix": [1, 8], "x": 128, "y": 16 },
+ { "flags": 1, "matrix": [1, 9], "x": 144, "y": 16 },
+ { "flags": 1, "matrix": [1, 10], "x": 160, "y": 16 },
+ { "flags": 1, "matrix": [1, 11], "x": 176, "y": 16 },
+ { "flags": 1, "matrix": [1, 12], "x": 192, "y": 16 },
+ { "flags": 1, "matrix": [1, 13], "x": 208, "y": 16 },
+ { "flags": 1, "matrix": [0, 13], "x": 208, "y": 0 },
+ { "flags": 1, "matrix": [0, 12], "x": 192, "y": 0 },
+ { "flags": 1, "matrix": [0, 11], "x": 176, "y": 0 },
+ { "flags": 1, "matrix": [0, 10], "x": 160, "y": 0 },
+ { "flags": 1, "matrix": [0, 9], "x": 144, "y": 0 },
+ { "flags": 1, "matrix": [0, 8], "x": 128, "y": 0 },
+ { "flags": 1, "matrix": [0, 7], "x": 112, "y": 0 },
+ { "flags": 1, "matrix": [0, 6], "x": 96, "y": 0 },
+ { "flags": 1, "matrix": [0, 5], "x": 80, "y": 0 },
+ { "flags": 1, "matrix": [0, 4], "x": 64, "y": 0 },
+ { "flags": 1, "matrix": [0, 3], "x": 48, "y": 0 },
+ { "flags": 1, "matrix": [0, 2], "x": 32, "y": 0 },
+ { "flags": 1, "matrix": [0, 1], "x": 16, "y": 0 },
+ { "flags": 1, "matrix": [0, 0], "x": 0, "y": 0 },
+ { "flags": 2, "x": 0, "y": 3 },
+ { "flags": 2, "x": 16, "y": 3 },
+ { "flags": 2, "x": 32, "y": 3 },
+ { "flags": 2, "x": 48, "y": 3 },
+ { "flags": 2, "x": 64, "y": 3 },
+ { "flags": 2, "x": 80, "y": 3 },
+ { "flags": 2, "x": 96, "y": 3 },
+ { "flags": 2, "x": 112, "y": 3 },
+ { "flags": 2, "x": 128, "y": 3 },
+ { "flags": 2, "x": 144, "y": 3 },
+ { "flags": 2, "x": 160, "y": 3 },
+ { "flags": 2, "x": 176, "y": 3 },
+ { "flags": 2, "x": 192, "y": 3 },
+ { "flags": 2, "x": 208, "y": 3 },
+ { "flags": 2, "x": 208, "y": 19 },
+ { "flags": 2, "x": 208, "y": 35 },
+ { "flags": 2, "x": 208, "y": 51 },
+ { "flags": 2, "x": 176, "y": 51 },
+ { "flags": 2, "x": 160, "y": 51 },
+ { "flags": 2, "x": 144, "y": 51 },
+ { "flags": 2, "x": 128, "y": 51 },
+ { "flags": 2, "x": 112, "y": 51 },
+ { "flags": 2, "x": 96, "y": 51 },
+ { "flags": 2, "x": 80, "y": 51 },
+ { "flags": 2, "x": 64, "y": 51 },
+ { "flags": 2, "x": 48, "y": 51 },
+ { "flags": 2, "x": 32, "y": 51 },
+ { "flags": 2, "x": 16, "y": 51 },
+ { "flags": 2, "x": 0, "y": 51 },
+ { "flags": 2, "x": 0, "y": 35 },
+ { "flags": 2, "x": 0, "y": 19 }
+ ]
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x000C",
+ "vid": "0x4C58"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "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": "Bksp", "matrix": [0, 13], "x": 13, "y": 0 },
+ { "label": "K14", "matrix": [0, 14], "x": 14, "y": 0 },
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "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": 3, "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, 13], "w": 1.75, "x": 12.25, "y": 3 },
+ { "label": "K54", "matrix": [3, 14], "x": 14, "y": 3 },
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 },
+ { "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "label": "K58", "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
+ { "label": "Alt", "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "label": "Fn", "matrix": [4, 12], "x": 12.5, "y": 4 },
+ { "label": "Ctrl", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/linworks/fave60a/keymaps/default/keymap.c b/keyboards/linworks/fave60a/keymaps/default/keymap.c
new file mode 100644
index 00000000000..22e9c5f7821
--- /dev/null
+++ b/keyboards/linworks/fave60a/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2020 noroadsleft
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_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_TRNS,
+ 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_TRNS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, 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_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/linworks/fave60a/keymaps/via/keymap.c b/keyboards/linworks/fave60a/keymaps/via/keymap.c
new file mode 100644
index 00000000000..22e9c5f7821
--- /dev/null
+++ b/keyboards/linworks/fave60a/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2020 noroadsleft
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_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_TRNS,
+ 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_TRNS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, 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_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/linworks/fave60a/keymaps/via/rules.mk b/keyboards/linworks/fave60a/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/linworks/fave60a/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/linworks/fave60a/readme.md b/keyboards/linworks/fave60a/readme.md
new file mode 100644
index 00000000000..645c5d257d6
--- /dev/null
+++ b/keyboards/linworks/fave60a/readme.md
@@ -0,0 +1,29 @@
+# linworks/fave60a
+
+
+
+
+The Fave60a PCB is a 60 keys keyboard designed by Lx3 (Linworks).
+Matrix and Under RGB supported.
+
+* Keyboard Maintainer: [keydler](https://github.com/duilchoi)
+* Hardware Supported: Fave 60 PCBs. linworks 60key keyboards.
+* Hardware Availability: Groupbuy.Check the ongoing ones on [the Linworks Discord](https://discord.gg/UC8gTdVnsj)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make linworks/fave60a:default
+
+Flashing example for this keyboard:
+
+ make linworks/fave60a: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/linworks/fave60a/rules.mk b/keyboards/linworks/fave60a/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/mazestudio/jocker/info.json b/keyboards/mazestudio/jocker/info.json
new file mode 100644
index 00000000000..5c5d4d6c087
--- /dev/null
+++ b/keyboards/mazestudio/jocker/info.json
@@ -0,0 +1,150 @@
+{
+ "manufacturer": "Maze Studio",
+ "keyboard_name": "Jocker 1800",
+ "maintainer": "mazestd",
+ "bootloader": "atmel-dfu",
+ "processor": "atmega32u4",
+ "url": "",
+ "usb": {
+ "vid": "0x70F5",
+ "pid": "0x4A01",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "dynamic_keymap": {
+ "layer_count": 3
+ },
+ "bootmagic":{
+ "matrix": [1, 0]
+ },
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7", "C6", "B2", "B3"],
+ "rows": ["B1", "B0", "D1", "D0", "D5", "D3", "B7", "D2", "D4", "D6", "B4", "D7"]
+ },
+
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "Esc", "matrix": [1,0], "x":0, "y":0},
+ {"label": "F1", "matrix": [0,0], "x":1.25, "y":0},
+ {"label": "F2", "matrix": [1,1], "x":2.25, "y":0},
+ {"label": "F3", "matrix": [0,1], "x":3.25, "y":0},
+ {"label": "F4", "matrix": [1,2], "x":4.25, "y":0},
+ {"label": "F5", "matrix": [0,2], "x":5.5, "y":0},
+ {"label": "F6", "matrix": [1,3], "x":6.5, "y":0},
+ {"label": "F7", "matrix": [0,3], "x":7.5, "y":0},
+ {"label": "F8", "matrix": [1,4], "x":8.5, "y":0},
+ {"label": "F9", "matrix": [1,5], "x":9.75, "y":0},
+ {"label": "F10", "matrix": [0,5], "x":10.75, "y":0},
+ {"label": "F11", "matrix": [1,6], "x":11.75, "y":0},
+ {"label": "F12", "matrix": [0,6], "x":12.75, "y":0},
+ {"label": "F13", "matrix": [1,7], "x":14, "y":0},
+ {"label": "Scroll Lock", "matrix": [0,7], "x":15.25, "y":0},
+ {"label": "Pause Break", "matrix": [1,8], "x":16.5, "y":0},
+ {"label": "Insert", "matrix": [0,8], "x":17.5, "y":0},
+ {"label": "Home", "matrix": [1,9], "x":18.5, "y":0},
+ {"label": "Print Screen", "matrix": [0,9], "x":19.5, "y":0},
+
+ {"label": "~", "matrix": [3,0], "x":0, "y":1.25},
+ {"label": "1", "matrix": [2,0], "x":1, "y":1.25},
+ {"label": "2", "matrix": [3,1], "x":2, "y":1.25},
+ {"label": "3", "matrix": [2,1], "x":3, "y":1.25},
+ {"label": "4", "matrix": [3,2], "x":4, "y":1.25},
+ {"label": "5", "matrix": [2,2], "x":5, "y":1.25},
+ {"label": "6", "matrix": [3,3], "x":6, "y":1.25},
+ {"label": "7", "matrix": [2,3], "x":7, "y":1.25},
+ {"label": "8", "matrix": [3,4], "x":8, "y":1.25},
+ {"label": "9", "matrix": [2,4], "x":9, "y":1.25},
+ {"label": "0", "matrix": [3,5], "x":10, "y":1.25},
+ {"label": "-", "matrix": [2,5], "x":11, "y":1.25},
+ {"label": "=", "matrix": [3,6], "x":12, "y":1.25},
+ {"label": "|", "matrix": [2,6], "x":13, "y":1.25},
+ {"label": "Delete", "matrix": [3,7], "x":14, "y":1.25},
+ {"label": "Page Up", "matrix": [2,7], "x":15.25, "y":1.25},
+ {"label": "Num Lock", "matrix": [3,8], "x":16.5, "y":1.25},
+ {"label": "/", "matrix": [2,8], "x":17.5, "y":1.25},
+ {"label": "*", "matrix": [3,9], "x":18.5, "y":1.25},
+ {"label": "-", "matrix": [2,9], "x":19.5, "y":1.25},
+
+ {"label": "Tab", "matrix": [5,0], "x":0, "y":2.25, "w":1.5},
+ {"label": "Q", "matrix": [4,0], "x":1.5, "y":2.25},
+ {"label": "W", "matrix": [5,1], "x":2.5, "y":2.25},
+ {"label": "E", "matrix": [4,1], "x":3.5, "y":2.25},
+ {"label": "R", "matrix": [5,2], "x":4.5, "y":2.25},
+ {"label": "T", "matrix": [4,2], "x":5.5, "y":2.25},
+ {"label": "Y", "matrix": [5,3], "x":6.5, "y":2.25},
+ {"label": "U", "matrix": [4,3], "x":7.5, "y":2.25},
+ {"label": "I", "matrix": [5,4], "x":8.5, "y":2.25},
+ {"label": "O", "matrix": [4,4], "x":9.5, "y":2.25},
+ {"label": "P", "matrix": [5,5], "x":10.5, "y":2.25},
+ {"label": "[", "matrix": [4,5], "x":11.5, "y":2.25},
+ {"label": "]", "matrix": [5,6], "x":12.5, "y":2.25},
+ {"label": "Backspace", "matrix": [5,7], "x":13.5, "y":2.25, "w":1.5},
+ {"label": "Page Down", "matrix": [4,7], "x":15.25, "y":2.25},
+ {"label": "Num 7", "matrix": [5,8], "x":16.5, "y":2.25},
+ {"label": "Num 8", "matrix": [4,8], "x":17.5, "y":2.25},
+ {"label": "Num 9", "matrix": [5,9], "x":18.5, "y":2.25},
+ {"label": "Num Plus", "matrix": [4,9], "x":19.5, "y":2.25, "h":2},
+
+ {"label": "Caps Lock", "matrix": [7,0], "x":0, "y":3.25, "w":1.75},
+ {"label": "A", "matrix": [6,0], "x":1.75, "y":3.25},
+ {"label": "S", "matrix": [7,1], "x":2.75, "y":3.25},
+ {"label": "D", "matrix": [6,1], "x":3.75, "y":3.25},
+ {"label": "F", "matrix": [7,2], "x":4.75, "y":3.25},
+ {"label": "G", "matrix": [6,2], "x":5.75, "y":3.25},
+ {"label": "H", "matrix": [7,3], "x":6.75, "y":3.25},
+ {"label": "J", "matrix": [6,3], "x":7.75, "y":3.25},
+ {"label": "K", "matrix": [7,4], "x":8.75, "y":3.25},
+ {"label": "L", "matrix": [6,4], "x":9.75, "y":3.25},
+ {"label": ";", "matrix": [7,5], "x":10.75, "y":3.25},
+ {"label": "'", "matrix": [6,5], "x":11.75, "y":3.25},
+ {"label": "Enter", "matrix": [6,6], "x":12.75, "y":3.25, "w":2.25},
+ {"label": "Delete", "matrix": [6,7], "x":15.25, "y":3.25},
+ {"label": "Num 4", "matrix": [7,8], "x":16.5, "y":3.25},
+ {"label": "Num 5", "matrix": [6,8], "x":17.5, "y":3.25},
+ {"label": "Num 6", "matrix": [7,9], "x":18.5, "y":3.25},
+
+ {"label": "Left Shift", "matrix": [9,0], "x":0, "y":4.25, "w":2.25},
+ {"label": "Z", "matrix": [8,0], "x":2.25, "y":4.25},
+ {"label": "X", "matrix": [9,1], "x":3.25, "y":4.25},
+ {"label": "C", "matrix": [8,1], "x":4.25, "y":4.25},
+ {"label": "V", "matrix": [9,2], "x":5.25, "y":4.25},
+ {"label": "B", "matrix": [8,2], "x":6.25, "y":4.25},
+ {"label": "N", "matrix": [9,3], "x":7.25, "y":4.25},
+ {"label": "M", "matrix": [8,3], "x":8.25, "y":4.25},
+ {"label": ",", "matrix": [9,4], "x":9.25, "y":4.25},
+ {"label": ".", "matrix": [8,4], "x":10.25, "y":4.25},
+ {"label": "/", "matrix": [9,5], "x":11.25, "y":4.25},
+ {"label": "Right Shift", "matrix": [9,6], "x":12.25, "y":4.25, "w":1.75},
+ {"label": "Up", "matrix": [9,7], "x":14.25, "y":4.5},
+ {"label": "Num 1", "matrix": [9,8], "x":16.5, "y":4.25},
+ {"label": "Num 2", "matrix": [8,8], "x":17.5, "y":4.25},
+ {"label": "Num 3", "matrix": [9,9], "x":18.5, "y":4.25},
+ {"label": "Enter", "matrix": [8,9], "x":19.5, "y":4.25, "h":2},
+
+ {"label": "Left Ctrl", "matrix": [11,0], "x":0, "y":5.25, "w":1.25},
+ {"label": "Left Win", "matrix": [10,0], "x":1.25, "y":5.25, "w":1.25},
+ {"label": "Left Alt", "matrix": [11,1], "x":2.5, "y":5.25, "w":1.25},
+ {"label": "Space", "matrix": [10,2], "x":3.75, "y":5.25, "w":6.25},
+ {"label": "Right Alt", "matrix": [10,4], "x":10, "y":5.25, "w":1.5},
+ {"label": "Right Ctrl", "matrix": [10,5], "x":11.5, "y":5.25, "w":1.5},
+ {"label": "Left", "matrix": [10,6], "x":13.25, "y":5.5},
+ {"label": "Down", "matrix": [11,7], "x":14.25, "y":5.5},
+ {"label": "Right", "matrix": [10,7], "x":15.25, "y":5.5},
+ {"label": "Num 0", "matrix": [10,8], "x":16.5, "y":5.25, "w":2},
+ {"label": "Num Del", "matrix": [11,9], "x":18.5, "y":5.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/mazestudio/jocker/keymaps/default/keymap.c b/keyboards/mazestudio/jocker/keymaps/default/keymap.c
new file mode 100644
index 00000000000..b64c4a299f0
--- /dev/null
+++ b/keyboards/mazestudio/jocker/keymaps/default/keymap.c
@@ -0,0 +1,16 @@
+// Copyright 2023 Maze Studio
+// 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_SCRL, KC_PAUS, KC_INS, KC_HOME, KC_PSCR,
+ 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_BSLS, KC_DEL, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+
+ )
+};
\ No newline at end of file
diff --git a/keyboards/mazestudio/jocker/keymaps/via/keymap.c b/keyboards/mazestudio/jocker/keymaps/via/keymap.c
new file mode 100644
index 00000000000..b64c4a299f0
--- /dev/null
+++ b/keyboards/mazestudio/jocker/keymaps/via/keymap.c
@@ -0,0 +1,16 @@
+// Copyright 2023 Maze Studio
+// 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_SCRL, KC_PAUS, KC_INS, KC_HOME, KC_PSCR,
+ 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_BSLS, KC_DEL, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+
+ )
+};
\ No newline at end of file
diff --git a/keyboards/mazestudio/jocker/keymaps/via/rules.mk b/keyboards/mazestudio/jocker/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/mazestudio/jocker/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/mazestudio/jocker/readme.md b/keyboards/mazestudio/jocker/readme.md
new file mode 100644
index 00000000000..8dcc6390b08
--- /dev/null
+++ b/keyboards/mazestudio/jocker/readme.md
@@ -0,0 +1,27 @@
+# Jocker 1800
+
+
+
+PCB Replacement for Austin 1800
+
+* Keyboard Maintainer: [Maze Studio](https://github.com/mazestd)
+* Hardware Supported: Jocker PCB, Atmega32u4
+* Hardware Availability: Local Group Buy
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mazestd/jocker:default
+
+Flashing example for this keyboard:
+
+ make mazestd/jocker: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 (1,0) in the matrix or Escape Key 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/mazestudio/jocker/rules.mk b/keyboards/mazestudio/jocker/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/mazestudio/jocker/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/mechlovin/zed65/910/config.h b/keyboards/mechlovin/zed65/910/config.h
new file mode 100644
index 00000000000..a5902fa9c1d
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2023 Mechlovin'
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define WS2812_SPI SPID1 // default: SPID1
+#define WS2812_SPI_MOSI_PAL_MODE 6 // MOSI pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 5
diff --git a/keyboards/mechlovin/zed65/910/halconf.h b/keyboards/mechlovin/zed65/910/halconf.h
new file mode 100644
index 00000000000..e4ef339ffb8
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next
+
diff --git a/keyboards/mechlovin/zed65/910/info.json b/keyboards/mechlovin/zed65/910/info.json
new file mode 100644
index 00000000000..7874c09e2dd
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/info.json
@@ -0,0 +1,350 @@
+{
+ "manufacturer": "Mechlovin Studio",
+ "url": "https://mechlovin.studio/",
+ "maintainer": "mechlovin",
+ "keyboard_name": "Zed65 910 Rev1",
+ "usb": {
+ "vid": "0x4D4C",
+ "pid": "0x6505",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "backlight": false,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "rows": ["B15", "B14", "B13", "B12", "A1"],
+ "cols": ["B11", "B10", "B2", "B1", "B0", "A6", "A5", "A4", "A3", "C13", "B7", "B6", "B5", "B4", "B3"]
+ },
+ "indicators": {
+ "caps_lock": "B9",
+ "on_state": 0
+ },
+ "diode_direction": "COL2ROW",
+ "rgblight": {
+ "led_count": 4,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "pin": "A7",
+ "driver": "spi"
+ },
+ "layouts": {
+ "LAYOUT_65_iso_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 12], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4},
+ {"matrix": [4, 10], "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12, "y": 4},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 12], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4},
+ {"matrix": [4, 10], "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12, "y": 4},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4},
+ {"matrix": [4, 10], "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12, "y": 4},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+
+ "LAYOUT_65_ansi_blocker_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mechlovin/zed65/910/keymaps/default/keymap.c b/keyboards/mechlovin/zed65/910/keymaps/default/keymap.c
new file mode 100644
index 00000000000..1c530e8420b
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/*
+Copyright 2023 Mechlovin'
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_tsangan_split_bs(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
\ No newline at end of file
diff --git a/keyboards/mechlovin/zed65/910/keymaps/via/keymap.c b/keyboards/mechlovin/zed65/910/keymaps/via/keymap.c
new file mode 100644
index 00000000000..d41ff034722
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/keymaps/via/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2023 Mechlovin'
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_tsangan_split_bs(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+
diff --git a/keyboards/mechlovin/zed65/910/keymaps/via/rules.mk b/keyboards/mechlovin/zed65/910/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/mechlovin/zed65/910/mcuconf.h b/keyboards/mechlovin/zed65/910/mcuconf.h
new file mode 100644
index 00000000000..ab20db61c30
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/mcuconf.h
@@ -0,0 +1,23 @@
+/* Copyright 2023 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
diff --git a/keyboards/mechlovin/zed65/910/readme.md b/keyboards/mechlovin/zed65/910/readme.md
new file mode 100644
index 00000000000..7a207e2b448
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/readme.md
@@ -0,0 +1,28 @@
+# zed65
+
+
+
+A 65% PCB, APM32F103.
+
+* Keyboard Maintainer: [Mechlovin](https://github.com/mechlovin)
+* Hardware Supported: TGRxGSK 910
+* Hardware Availability: [Mechlovin' Studio](https://mechlovin.studio/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechlovin/zed65/910:default
+
+Flashing example for this keyboard:
+
+ make mechlovin/zed65/910: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 4 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Bootloader reset**: Hold down the key at (0,13) in the matrix (usually the Back Space) 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/mechlovin/zed65/910/rules.mk b/keyboards/mechlovin/zed65/910/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/mechwild/bde/rev2/keymaps/miketronic/config.h b/keyboards/mechwild/bde/rev2/keymaps/miketronic/config.h
new file mode 100644
index 00000000000..658c829f048
--- /dev/null
+++ b/keyboards/mechwild/bde/rev2/keymaps/miketronic/config.h
@@ -0,0 +1,10 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+
+# define TAPPING_TERM 160
+# define TAPPING_TERM_PER_KEY
+# define HOLD_ON_OTHER_KEY_PRESS
+# define QUICK_TAP_TERM TAPPING_TERM / 2
+# define QUICK_TAP_TERM_PER_KEY
diff --git a/keyboards/mechwild/bde/rev2/keymaps/miketronic/keymap.c b/keyboards/mechwild/bde/rev2/keymaps/miketronic/keymap.c
new file mode 100644
index 00000000000..e8a26fd28a2
--- /dev/null
+++ b/keyboards/mechwild/bde/rev2/keymaps/miketronic/keymap.c
@@ -0,0 +1,221 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* WORKMAN
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ Q │ D │ R │ W │ B │ 7 │ 8 │ 9 │ J │ F │ U │ P │ BSPC│BSPC │
+ * │ ESC │ │ │ │ SYM │ │ │ │ SYM │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │ A │ S │ H ┃ T ┃ G │ 4 │ 5 │ 6 │ Y ┃ N ┃ E │ O │ I │UP │
+ * │SHIFT│ │ ┃ EX ┃ │ │ │ │ ┃ ┃ │ │ │RIGHT│
+ * ├─────┼─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ Z │ X │ M │ C │ V │ 1 │ 2 │ 3 │ K │ L │ SPC │ SPC │ENTER│DOWN │
+ * │ FN │ CTRL│ OS │ ALT │LOWER│ │ 0 │ │RAISE│RAISE│ │ │ │LEFT │
+ * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ *
+ */
+
+ [_WM] = LAYOUT_3x14_wrapper (
+ _____________WORKMAN_310_001_L_____________, _________NUMBER_01__________, _____________WORKMAN_310_001_R_____________, KC_BSPC,
+ _____________WORKMAN_310_002_L_____________, _________NUMBER_02__________, _____________WORKMAN_310_002_R_____________, TD_UR,
+ _____________WORKMAN_310_003_L_____________, _________NUMBER_03__________, _____________WORKMAN_310_003_R_____________, TD_DL
+ ),
+
+ [_QW] = LAYOUT_3x14_wrapper (
+ _________________QWERTY_L1_________________, _________NUMBER_01__________, _________________QWERTY_R1_________________, KC_MUTE,
+ _________________QWERTY_L2_________________, _________NUMBER_02__________, _________________QWERTY_R2_________________, TD_UR,
+ _________________QWERTY_L3_________________, _________NUMBER_03__________, _________________QWERTY_R3_________________, TD_DL
+ ),
+
+
+ /* LOWER
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ () │ [] │ /\ │ │ │ │ 7 │ 8 │ 9 │ 0 │ │ │ │LEAD │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ @ # │ & % │ ┃ ┃ │ ┃ 4 ┃ 5 │ 6 │ │ │ │ │ │
+ * │ │ │ ┃ ┃ │ ┃ ┃ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ 0 │ 1 │ 2 │ 3 │ . │ │ │ │ │
+ * │ │ │ │ │LOWER│ │ │ 0 │ │ ENT │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ *
+ */
+
+ [_LOWER] = LAYOUT_3x14_wrapper (
+ _______________LOWER_310_L1________________, _________NUMBER_01__________, _______________LOWER_310_R1________________, QK_LEAD,
+ _______________LOWER_310_L2________________, _________NUMBER_02__________, _______________LOWER_310_R2________________, TD_UR,
+ _______________LOWER_310_L3________________, _________NUMBER_03__________, _______________LOWER_310_R3________________, TD_DL
+ ),
+
+
+ /* RAISE
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ BOOT│DEBUG│ │ │ MAKE│ │ F7 │ F8 │ F9 │ F10 │ │ │ │LEAD │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ RGB │ RGB ┃ RGB ┃ RGB │ _ ┃ F4 ┃ F5 │ F6 │ F11 │ │ │ │ │
+ * │ │ TOG │ MOD ┃ HUI ┃ HUD │ - ┃ ┃ _ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ RGB │ RGB │ RGB │ RGB │RAISE│ F1 │ F2 │ F3 │ F12 │ │ │ │ │
+ * │ │ SAI │ SAD │ VAI │ VAD │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ *
+ */
+
+ [_RAISE] = LAYOUT_3x14_wrapper (
+ _______________RAISE_310_L1________________, _________NUMBER_01__________, _______________RAISE_310_R1________________, QK_LEAD,
+ _______________RAISE_310_L2________________, _________NUMBER_02__________, _______________RAISE_310_R2________________, TD_UR,
+ _______________RAISE_310_L3________________, _________NUMBER_03__________, _______________RAISE_310_R3________________, TD_DL
+ ),
+
+
+ /* EXTRAS
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ ! │ │ │ │ │ │ /\ | () | [] | ; │ │ │ │LEAD │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ ┃EXTRA┃ │ ┃ @ # ┃ & % | | ' | │ │ │ │
+ * │ │ │ ┃ ┃ │ ┃ ┃ _ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ , | . | ? │ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [_EX] = LAYOUT_3x14_wrapper (
+ ______________EXTRAS_310_L1________________, _________NUMBER_01__________, ______________EXTRAS_310_R1________________, QK_LEAD,
+ ______________EXTRAS_310_L2________________, _________NUMBER_02__________, ______________EXTRAS_310_R2________________, TD_UR,
+ ______________EXTRAS_310_L3________________, _________NUMBER_03__________, ______________EXTRAS_310_R3________________, TD_DL
+),
+
+
+ /* FUNCTION
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │COPY │CLIP │ SS │ │ │ │ │ │ | /\ │ UP │ │ DEL │LEAD │
+ * │PASTE│ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │SHIFT│ M05 │ M06 ┃ M07 ┃ M08 │ │ │ │ ┃ LEFT┃ DOWN│RIGHT│ │ UP │
+ * │ │ │ ┃ ┃ │ │ │ │ ┃ ┃ │ │ │RIGHT│
+ * ├─────┼─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ │ M01 │ M02 │ M03 │ M04 │ │ │ | | │ , │ . │ │DOWN │
+ * │ FN │ │ │ │ │ │ │ │ │ │ │ │ │LEFT │
+ * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [_FN] = LAYOUT_3x14_wrapper (
+ _____________FUNCTION_310_L1_______________, _________NUMBER_01__________, _____________FUNCTION_310_R1_______________, QK_LEAD,
+ _____________FUNCTION_310_L2_______________, _________NUMBER_02__________, _____________FUNCTION_310_R2_______________, TD_UR,
+ _____________FUNCTION_310_L3_______________, _________NUMBER_03__________, _____________FUNCTION_310_R3_______________, TD_DL
+ ),
+
+
+
+ /* SYMBOLS
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ $ │ ^ │ < │ > │ │ │ │ | │ [ │ ] │ - │
+ * │ │ │ │ │ SYMB│ │ SYMB│ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ % │ : │ ; ┃ + ┃ = │ │ ┃ ┃ ( │ ) │ _ │
+ * │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ & │ ' │ " │ * │ # │ │ ! │ ? │ / │ \ │ @ │
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [_SYMB] = LAYOUT_3x14_wrapper (
+ _____________SYMBOLS_310_L1________________, _________NUMBER_01__________, _____________SYMBOLS_310_R1________________, QK_LEAD,
+ _____________SYMBOLS_310_L2________________, _________NUMBER_02__________, _____________SYMBOLS_310_R2________________, TD_UR,
+ _____________SYMBOLS_310_L3________________, _________NUMBER_03__________, _____________SYMBOLS_310_R3________________, TD_DL
+ ),
+
+
+
+};
+
+
+#ifndef NUM_DIRECTIONS
+# define NUM_DIRECTIONS 2
+#endif
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_WM] = { ENCODER_CCW_CW(LCTL(KC_V), LCTL(KC_C)) },
+ [_QW] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_LOWER] = { ENCODER_CCW_CW(____, ____) },
+ [_RAISE] = { ENCODER_CCW_CW(____, ____) },
+ [_EX] = { ENCODER_CCW_CW(____, ____) },
+ [_FN] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD) },
+ [_SYMB] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
+
+bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_A):
+ // Do not force the mod-tap key press to be handled as a modifier
+ // if any other key was pressed while the mod-tap key is held down.
+ return false;
+ case TEX:
+ return false;
+ case CTRLX:
+ return false;
+ case FNZ:
+ return false;
+ case MGUI:
+ return false;
+ case VLOWER:
+ return false;
+ case KRAISE:
+ return false;
+ default:
+ // Force the dual-role key press to be handled as a modifier if any
+ // other key was pressed while the mod-tap key is held down.
+ return true;
+ }
+}
+
+#ifdef AUDIO_ENABLE
+float leader_start_song[][2] = SONG(ONE_UP_SOUND);
+float leader_succeed_song[][2] = SONG(ALL_STAR);
+float leader_fail_song[][2] = SONG(RICK_ROLL);
+#endif
+
+void matrix_scan_user(void);
+
+void leader_start_user(void) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(leader_start_song);
+#endif
+}
+
+bool did_leader_succeed;
+
+void leader_end_user(void) {
+ did_leader_succeed = false;
+
+ if (leader_sequence_one_key(KC_E)) {
+ SEND_STRING(SS_LCTL(SS_LSFT("t")));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_E, KC_D)) {
+ SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_A, KC_T)) {
+ SEND_STRING("@guidehouse.com");
+ did_leader_succeed = true;
+ }
+
+
+#ifdef AUDIO_ENABLE
+ if (did_leader_succeed) {
+ PLAY_SONG(leader_succeed_song);
+ } else {
+ PLAY_SONG(leader_fail_song);
+ }
+#endif
+}
\ No newline at end of file
diff --git a/keyboards/mechwild/bde/rev2/keymaps/miketronic/rules.mk b/keyboards/mechwild/bde/rev2/keymaps/miketronic/rules.mk
new file mode 100644
index 00000000000..540fbaecb22
--- /dev/null
+++ b/keyboards/mechwild/bde/rev2/keymaps/miketronic/rules.mk
@@ -0,0 +1,13 @@
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+EXTRAKEY_ENABLE = yes # Audio control and System control
+TAP_DANCE_ENABLE = yes # Tap Dance keys
+NKRO_ENABLE = yes # Enable N-Key Rollover
+MACROS_ENABLED = yes
+LEADER_ENABLE = yes
+
+ENCODER_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+OLED_ENABLE = yes # Enable OLED Screen
+OLED_DRIVER = SSD1306 # Set OLED Driver
+
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
\ No newline at end of file
diff --git a/keyboards/mode/m256wh/config.h b/keyboards/mode/m256wh/config.h
new file mode 100644
index 00000000000..c976b6bcc5b
--- /dev/null
+++ b/keyboards/mode/m256wh/config.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2022 Gondolindrim
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define WS2812_PWM_COMPLEMENTARY_OUTPUT
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
+#define WS2812_DMA_CHANNEL 6
+
+#define EECONFIG_KB_DATA_SIZE (1)
diff --git a/keyboards/mode/m256wh/halconf.h b/keyboards/mode/m256wh/halconf.h
new file mode 100644
index 00000000000..485d48ef306
--- /dev/null
+++ b/keyboards/mode/m256wh/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+#define HAL_USE_PAL TRUE
+
+#include_next
diff --git a/keyboards/mode/m256wh/info.json b/keyboards/mode/m256wh/info.json
new file mode 100644
index 00000000000..3e2d0eb2764
--- /dev/null
+++ b/keyboards/mode/m256wh/info.json
@@ -0,0 +1,116 @@
+{
+ "manufacturer": "Mode Designs",
+ "keyboard_name": "M256W-H",
+ "maintainer": "Gondolindrim",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "lto": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["C9", "B1", "B0", "A10", "A15", "C10", "C11", "D2", "B3", "B4", "B8", "B9", "C0", "C1", "C2", "C4"],
+ "rows": ["C6", "C7", "C8", "C12", "A7", "C5"]
+ },
+ "processor": "STM32F401",
+ "rgblight": {
+ "led_count": 30,
+ "animations": {
+ "breathing": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "knight": true,
+ "christmas": true,
+ "static_gradient": true,
+ "rgb_test": true,
+ "alternating": true,
+ "twinkle": true
+ }
+ },
+ "url": "https://modedesigns.com/pages/envoy",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x5754",
+ "vid": "0x00DE"
+ },
+ "ws2812": {
+ "pin": "B15"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0)", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"label": "Del", "matrix": [0, 14], "x": 15, "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": "Page Up", "matrix": [1, 14], "x": 15, "y": 1},
+ {"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": "Page Down", "matrix": [2, 14], "x": 15, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "End", "matrix": [3, 14], "x": 15, "y": 3},
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [5, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [5, 15], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 11], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 12], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mode/m256wh/keymaps/default/keymap.c b/keyboards/mode/m256wh/keymaps/default/keymap.c
new file mode 100644
index 00000000000..fcf35032304
--- /dev/null
+++ b/keyboards/mode/m256wh/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_DEL ,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_PGDN,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_END ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_LEFT, KC_DOWN, KC_RGHT
+),
+[1] = LAYOUT(
+ 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_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+)
+};
diff --git a/keyboards/mode/m256wh/keymaps/via/keymap.c b/keyboards/mode/m256wh/keymaps/via/keymap.c
new file mode 100644
index 00000000000..fcf35032304
--- /dev/null
+++ b/keyboards/mode/m256wh/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_DEL ,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_PGDN,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_END ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_LEFT, KC_DOWN, KC_RGHT
+),
+[1] = LAYOUT(
+ 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_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+)
+};
diff --git a/keyboards/mode/m256wh/keymaps/via/rules.mk b/keyboards/mode/m256wh/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/mode/m256wh/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/mode/m256wh/m256wh.c b/keyboards/mode/m256wh/m256wh.c
new file mode 100644
index 00000000000..cec427f329c
--- /dev/null
+++ b/keyboards/mode/m256wh/m256wh.c
@@ -0,0 +1,154 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifdef VIA_ENABLE
+bool is_second_rgb_row_active;
+enum via_secondrow_enable {
+ id_is_second_rgb_row_active = 0
+};
+
+// Sets the second RGB row on or off; done by setting effect range.
+void set_second_rgb_row(bool is_active) {
+ rgblight_disable_noeeprom();
+ switch (is_active)
+ {
+ case true:
+ {
+ rgblight_set_effect_range(0,30);
+ break;
+ }
+ case false:
+ {
+ rgblight_set_effect_range(0,15);
+ break;
+ }
+ }
+ rgblight_enable_noeeprom();
+}
+
+// At the keyboard start, retrieves PMEM stored configs
+void keyboard_post_init_kb(void) {
+ rgblight_disable_noeeprom();
+ wait_ms(20);
+ eeconfig_read_kb_datablock(&is_second_rgb_row_active);
+ set_second_rgb_row(is_second_rgb_row_active);
+ rgblight_reload_from_eeprom();
+ rgblight_set();
+}
+
+void eeconfig_init_kb(void) { // EEPROM is getting reset!
+ // rgblight_disable(); // Enable RGB by default
+ // Define the defualt value and write it to EEPROM
+ is_second_rgb_row_active = true;
+ set_second_rgb_row(is_second_rgb_row_active);
+ eeconfig_update_kb_datablock(&is_second_rgb_row_active);
+
+ // Disable rgblight by default on EEPROM initialization
+ rgblight_disable();
+
+ // Run user code if any
+ eeconfig_init_user();
+}
+
+void secondrow_config_set_value( uint8_t *data )
+{
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch ( *value_id )
+ {
+ case id_is_second_rgb_row_active:
+ {
+ is_second_rgb_row_active = (bool) *value_data;
+ break;
+ }
+ default:
+ {
+ is_second_rgb_row_active = true;
+ }
+ }
+ set_second_rgb_row(is_second_rgb_row_active);
+}
+
+void secondrow_config_get_value( uint8_t *data )
+{
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch ( *value_id )
+ {
+ case id_is_second_rgb_row_active:
+ {
+ *value_data = is_second_rgb_row_active;
+ break;
+ }
+ default:
+ {
+ *value_data = false;
+ }
+ }
+}
+
+void secondrow_config_save(void)
+{
+
+ eeconfig_update_kb_datablock(&is_second_rgb_row_active);
+}
+
+void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
+ // data = [ command_id, channel_id, value_id, value_data ]
+ uint8_t *command_id = &(data[0]);
+ uint8_t *channel_id = &(data[1]);
+ uint8_t *value_id_and_data = &(data[2]);
+
+ if ( *channel_id == id_custom_channel ) {
+ switch ( *command_id )
+ {
+ case id_custom_set_value:
+ {
+ secondrow_config_set_value(value_id_and_data);
+ break;
+ }
+ case id_custom_get_value:
+ {
+ secondrow_config_get_value(value_id_and_data);
+ break;
+ }
+ case id_custom_save:
+ {
+ secondrow_config_save();
+ break;
+ }
+ default:
+ {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+ return;
+ }
+
+ // Return the unhandled state
+ *command_id = id_unhandled;
+
+ // DO NOT call raw_hid_send(data,length) here, let caller do this
+}
+#endif
diff --git a/keyboards/mode/m256wh/mcuconf.h b/keyboards/mode/m256wh/mcuconf.h
new file mode 100644
index 00000000000..3d1d05c307c
--- /dev/null
+++ b/keyboards/mode/m256wh/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_ADVANCED
+#define STM32_PWM_USE_ADVANCED TRUE
+
+#undef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
diff --git a/keyboards/mode/m256wh/readme.md b/keyboards/mode/m256wh/readme.md
new file mode 100644
index 00000000000..8b253f427e1
--- /dev/null
+++ b/keyboards/mode/m256wh/readme.md
@@ -0,0 +1,25 @@
+# Mode M256-WH PCB QMK Firmware
+
+
+
+The M256-WH is the hotswap version PCB support for the Mode Envoy.
+
+* Keyboard Maintainer: [Gondolindrim](https://github.com/Gondolindrim)
+* Hardware Supported: proprietary PCBs using the STM32F401 microcontroller;
+* Hardware Availability: as of april 18, these PCBs are on the verge of being sold with the first kits of the Mode Envoy.
+
+## How to flash
+
+In order to flash this PCB, first build the default layout (after setting up your build environment):
+
+ make mode/m256wh:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+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**: press the button on the back of the PCB for at least five seconds
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available (escape key, layer 1 of the default keymap)
diff --git a/keyboards/mode/m256wh/rules.mk b/keyboards/mode/m256wh/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/mode/m256ws/config.h b/keyboards/mode/m256ws/config.h
new file mode 100644
index 00000000000..c976b6bcc5b
--- /dev/null
+++ b/keyboards/mode/m256ws/config.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2022 Gondolindrim
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define WS2812_PWM_COMPLEMENTARY_OUTPUT
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
+#define WS2812_DMA_CHANNEL 6
+
+#define EECONFIG_KB_DATA_SIZE (1)
diff --git a/keyboards/mode/m256ws/halconf.h b/keyboards/mode/m256ws/halconf.h
new file mode 100644
index 00000000000..485d48ef306
--- /dev/null
+++ b/keyboards/mode/m256ws/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+#define HAL_USE_PAL TRUE
+
+#include_next
diff --git a/keyboards/mode/m256ws/info.json b/keyboards/mode/m256ws/info.json
new file mode 100644
index 00000000000..8f837e316c2
--- /dev/null
+++ b/keyboards/mode/m256ws/info.json
@@ -0,0 +1,122 @@
+{
+ "manufacturer": "Mode Designs",
+ "keyboard_name": "M256W-S",
+ "maintainer": "Gondolindrim",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "lto": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["A4", "C6", "B8", "C7", "C8", "C9", "A8", "A10", "B4", "B3", "D2", "C12", "C11", "A15", "C10"],
+ "rows": ["B10", "B12", "B9", "C0", "C1", "A3"]
+ },
+ "processor": "STM32F401",
+ "rgblight": {
+ "led_count": 30,
+ "animations": {
+ "breathing": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "knight": true,
+ "christmas": true,
+ "static_gradient": true,
+ "rgb_test": true,
+ "alternating": true,
+ "twinkle": true
+ }
+ },
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x5753",
+ "vid": "0x00DE"
+ },
+ "ws2812": {
+ "pin": "B15"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0)", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Backspace", "matrix": [0, 14], "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": "Delete", "matrix": [1, 14], "x": 15, "y": 0},
+ {"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": "#~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
+ {"label": "Page Down", "matrix": [2, 14], "x": 15, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "\\|", "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": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "End", "matrix": [3, 14], "x": 15, "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": "Ctrl", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 11], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 12], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 13], "x": 15, "y": 4},
+ {"label": "Page Up", "matrix": [4, 14], "x": 15, "y": 1},
+ {"label": "Caps Lock", "matrix": [5, 0], "x": 0, "y": 2, "w": 1.75}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mode/m256ws/keymaps/default/keymap.c b/keyboards/mode/m256ws/keymaps/default/keymap.c
new file mode 100644
index 00000000000..03b49aac222
--- /dev/null
+++ b/keyboards/mode/m256ws/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_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_DEL ,
+ 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_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_END ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, KC_CAPS
+),
+[1] = LAYOUT(
+ 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_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS
+)
+};
diff --git a/keyboards/mode/m256ws/keymaps/via/keymap.c b/keyboards/mode/m256ws/keymaps/via/keymap.c
new file mode 100644
index 00000000000..03b49aac222
--- /dev/null
+++ b/keyboards/mode/m256ws/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_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_DEL ,
+ 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_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_END ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, KC_CAPS
+),
+[1] = LAYOUT(
+ 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_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS
+)
+};
diff --git a/keyboards/mode/m256ws/keymaps/via/rules.mk b/keyboards/mode/m256ws/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/mode/m256ws/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/mode/m256ws/m256ws.c b/keyboards/mode/m256ws/m256ws.c
new file mode 100644
index 00000000000..5603de7b01b
--- /dev/null
+++ b/keyboards/mode/m256ws/m256ws.c
@@ -0,0 +1,153 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifdef VIA_ENABLE
+bool is_second_rgb_row_active;
+enum via_secondrow_enable {
+ id_is_second_rgb_row_active = 0
+};
+
+// Sets the second RGB row on or off; done by setting effect range.
+void set_second_rgb_row(bool is_active) {
+ rgblight_disable_noeeprom();
+ switch (is_active)
+ {
+ case true:
+ {
+ rgblight_set_effect_range(0,30);
+ break;
+ }
+ case false:
+ {
+ rgblight_set_effect_range(0,15);
+ break;
+ }
+ }
+ rgblight_enable_noeeprom();
+}
+
+// At the keyboard start, retrieves PMEM stored configs
+void keyboard_post_init_kb(void) {
+ rgblight_disable_noeeprom();
+ wait_ms(20);
+ eeconfig_read_kb_datablock(&is_second_rgb_row_active);
+ set_second_rgb_row(is_second_rgb_row_active);
+ rgblight_reload_from_eeprom();
+ rgblight_set();
+}
+
+void eeconfig_init_kb(void) { // EEPROM is getting reset!
+ // rgblight_disable(); // Enable RGB by default
+ // Define the defualt value and write it to EEPROM
+ is_second_rgb_row_active = true;
+ set_second_rgb_row(is_second_rgb_row_active);
+ eeconfig_update_kb_datablock(&is_second_rgb_row_active);
+
+ // Disable rgblight by default on EEPROM initialization
+ rgblight_disable();
+
+ // Run user code, if any
+ eeconfig_init_user();
+}
+
+void secondrow_config_set_value( uint8_t *data )
+{
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch ( *value_id )
+ {
+ case id_is_second_rgb_row_active:
+ {
+ is_second_rgb_row_active = (bool) *value_data;
+ break;
+ }
+ default:
+ {
+ is_second_rgb_row_active = true;
+ }
+ }
+ set_second_rgb_row(is_second_rgb_row_active);
+}
+
+void secondrow_config_get_value( uint8_t *data )
+{
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch ( *value_id )
+ {
+ case id_is_second_rgb_row_active:
+ {
+ *value_data = is_second_rgb_row_active;
+ break;
+ }
+ default:
+ {
+ *value_data = false;
+ }
+ }
+}
+
+void secondrow_config_save(void)
+{
+
+ eeconfig_update_kb_datablock(&is_second_rgb_row_active);
+}
+
+void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
+ // data = [ command_id, channel_id, value_id, value_data ]
+ uint8_t *command_id = &(data[0]);
+ uint8_t *channel_id = &(data[1]);
+ uint8_t *value_id_and_data = &(data[2]);
+
+ if ( *channel_id == id_custom_channel ) {
+ switch ( *command_id )
+ {
+ case id_custom_set_value:
+ {
+ secondrow_config_set_value(value_id_and_data);
+ break;
+ }
+ case id_custom_get_value:
+ {
+ secondrow_config_get_value(value_id_and_data);
+ break;
+ }
+ case id_custom_save:
+ {
+ secondrow_config_save();
+ break;
+ }
+ default:
+ {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+ return;
+ }
+
+ // Return the unhandled state
+ *command_id = id_unhandled;
+
+}
+#endif // VIA ENABLE
diff --git a/keyboards/mode/m256ws/mcuconf.h b/keyboards/mode/m256ws/mcuconf.h
new file mode 100644
index 00000000000..3d1d05c307c
--- /dev/null
+++ b/keyboards/mode/m256ws/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_ADVANCED
+#define STM32_PWM_USE_ADVANCED TRUE
+
+#undef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
diff --git a/keyboards/mode/m256ws/readme.md b/keyboards/mode/m256ws/readme.md
new file mode 100644
index 00000000000..dee23c9a8ca
--- /dev/null
+++ b/keyboards/mode/m256ws/readme.md
@@ -0,0 +1,25 @@
+# Mode M256-WS PCB QMK Firmware
+
+
+
+The M256-WS is the hotswap version PCB support for the Mode Envoy.
+
+* Keyboard Maintainer: [Gondolindrim](https://github.com/Gondolindrim)
+* Hardware Supported: proprietary PCBs using the STM32F401 microcontroller
+* Hardware Availability: as of april 18, these PCBs are on the verge of being sold with the first kits of the Mode Envoy.
+
+## How to flash
+
+In order to flash this PCB, first build the default layout (after setting up your build environment):
+
+ make mode/m256ws:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+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**: press the button on the back of the PCB for at least five seconds
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available (escape key, layer 1 of the default keymap)
diff --git a/keyboards/mode/m256ws/rules.mk b/keyboards/mode/m256ws/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/modelh/config.h b/keyboards/modelh/config.h
new file mode 100644
index 00000000000..ac95ccfe662
--- /dev/null
+++ b/keyboards/modelh/config.h
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 John Hawthorn
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+
+/* Model H customizations */
+
+#define MODELH_STATUS_LED C13
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/modelh/info.json b/keyboards/modelh/info.json
new file mode 100644
index 00000000000..6d55d5c6bdd
--- /dev/null
+++ b/keyboards/modelh/info.json
@@ -0,0 +1,282 @@
+{
+ "manufacturer": "IBM",
+ "keyboard_name": "Model M",
+ "maintainer": "jhawthorn",
+ "bootloader": "stm32duino",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": false,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": false,
+ "nkro": false
+ },
+ "indicators": {
+ "caps_lock": "B8",
+ "num_lock": "B7",
+ "scroll_lock": "B9",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4", "A3"],
+ "rows": ["B6", "B5", "B4", "A15", "B3", "A0", "A2", "A1"]
+ },
+ "processor": "STM32F103",
+ "url": "modelh.club",
+ "usb": {
+ "device_version": "1.0.0",
+ "max_power": 100,
+ "pid": "0xB155",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT_fullsize_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 2], "x": 0, "y": 0},
+
+ {"matrix": [2, 3], "x": 2, "y": 0},
+ {"matrix": [2, 4], "x": 3, "y": 0},
+ {"matrix": [1, 4], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 8], "x": 7.5, "y": 0},
+ {"matrix": [1, 9], "x": 8.5, "y": 0},
+ {"matrix": [2, 9], "x": 9.5, "y": 0},
+
+ {"matrix": [2, 6], "x": 11, "y": 0},
+ {"matrix": [3, 6], "x": 12, "y": 0},
+ {"matrix": [3, 11], "x": 13, "y": 0},
+ {"matrix": [3, 12], "x": 14, "y": 0},
+
+ {"matrix": [3, 15], "x": 15.25, "y": 0},
+ {"matrix": [4, 15], "x": 16.25, "y": 0},
+ {"matrix": [6, 14], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 2], "x": 0, "y": 1.5},
+ {"matrix": [3, 2], "x": 1, "y": 1.5},
+ {"matrix": [3, 3], "x": 2, "y": 1.5},
+ {"matrix": [3, 4], "x": 3, "y": 1.5},
+ {"matrix": [3, 5], "x": 4, "y": 1.5},
+ {"matrix": [2, 5], "x": 5, "y": 1.5},
+ {"matrix": [2, 7], "x": 6, "y": 1.5},
+ {"matrix": [3, 7], "x": 7, "y": 1.5},
+ {"matrix": [3, 8], "x": 8, "y": 1.5},
+ {"matrix": [3, 9], "x": 9, "y": 1.5},
+ {"matrix": [3, 10], "x": 10, "y": 1.5},
+ {"matrix": [2, 10], "x": 11, "y": 1.5},
+ {"matrix": [2, 8], "x": 12, "y": 1.5},
+ {"matrix": [1, 6], "x": 13, "y": 1.5, "w": 2},
+
+ {"matrix": [2, 12], "x": 15.25, "y": 1.5},
+ {"matrix": [2, 14], "x": 16.25, "y": 1.5},
+ {"matrix": [2, 13], "x": 17.25, "y": 1.5},
+
+ {"matrix": [6, 11], "x": 18.5, "y": 1.5},
+ {"matrix": [6, 12], "x": 19.5, "y": 1.5},
+ {"matrix": [6, 13], "x": 20.5, "y": 1.5},
+ {"matrix": [7, 13], "x": 21.5, "y": 1.5},
+
+ {"matrix": [1, 2], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [4, 2], "x": 1.5, "y": 2.5},
+ {"matrix": [4, 3], "x": 2.5, "y": 2.5},
+ {"matrix": [4, 4], "x": 3.5, "y": 2.5},
+ {"matrix": [4, 5], "x": 4.5, "y": 2.5},
+ {"matrix": [1, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [1, 7], "x": 6.5, "y": 2.5},
+ {"matrix": [4, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [4, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [4, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [4, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [1, 10], "x": 11.5, "y": 2.5},
+ {"matrix": [1, 8], "x": 12.5, "y": 2.5},
+ {"matrix": [5, 6], "x": 13.5, "y": 2.5, "w": 1.5},
+
+ {"matrix": [2, 11], "x": 15.25, "y": 2.5},
+ {"matrix": [3, 14], "x": 16.25, "y": 2.5},
+ {"matrix": [3, 13], "x": 17.25, "y": 2.5},
+
+ {"matrix": [4, 11], "x": 18.5, "y": 2.5},
+ {"matrix": [4, 12], "x": 19.5, "y": 2.5},
+ {"matrix": [4, 13], "x": 20.5, "y": 2.5},
+ {"matrix": [4, 14], "x": 21.5, "y": 2.5, "h": 2},
+
+ {"matrix": [1, 3], "x": 0, "y": 3.5, "w": 1.5},
+ {"matrix": [5, 2], "x": 1.75, "y": 3.5},
+ {"matrix": [5, 3], "x": 2.75, "y": 3.5},
+ {"matrix": [5, 4], "x": 3.75, "y": 3.5},
+ {"matrix": [5, 5], "x": 4.75, "y": 3.5},
+ {"matrix": [0, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [0, 7], "x": 6.75, "y": 3.5},
+ {"matrix": [5, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [5, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [5, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [5, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [0, 10], "x": 11.75, "y": 3.5},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.5, "w": 2.25},
+
+ {"matrix": [1, 11], "x": 18.5, "y": 3.5},
+ {"matrix": [1, 12], "x": 19.5, "y": 3.5},
+ {"matrix": [1, 13], "x": 20.5, "y": 3.5},
+
+ {"matrix": [1, 1], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [6, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [6, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [6, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [6, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [7, 5], "x": 6.25, "y": 4.5},
+ {"matrix": [7, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [6, 7], "x": 8.25, "y": 4.5},
+ {"matrix": [6, 8], "x": 9.25, "y": 4.5},
+ {"matrix": [6, 9], "x": 10.25, "y": 4.5},
+ {"matrix": [7, 10], "x": 11.25, "y": 4.5},
+ {"matrix": [6, 1], "x": 12.25, "y": 4.5, "w": 2.75},
+
+ {"matrix": [0, 14], "x": 16.25, "y": 4.5},
+
+ {"matrix": [5, 11], "x": 18.5, "y": 4.5},
+ {"matrix": [5, 12], "x": 19.5, "y": 4.5},
+ {"matrix": [5, 13], "x": 20.5, "y": 4.5},
+ {"matrix": [5, 14], "x": 21.5, "y": 4.5, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [0, 15], "x": 2.5, "y": 5.5, "w": 1.5},
+ {"matrix": [7, 6], "x": 4, "y": 5.5, "w": 7},
+ {"matrix": [7, 15], "x": 11, "y": 5.5, "w": 1.5},
+ {"matrix": [6, 0], "x": 13.5, "y": 5.5, "w": 1.5},
+
+ {"matrix": [7, 14], "x": 15.25, "y": 5.5},
+ {"matrix": [7, 11], "x": 16.25, "y": 5.5},
+ {"matrix": [7, 12], "x": 17.25, "y": 5.5},
+
+ {"matrix": [0, 12], "x": 18.5, "y": 5.5, "w": 2},
+ {"matrix": [0, 13], "x": 20.5, "y": 5.5}
+ ]
+ },
+ "LAYOUT_fullsize_iso_wkl": {
+ "layout": [
+ {"matrix": [0, 2], "x": 0, "y": 0},
+
+ {"matrix": [2, 3], "x": 2, "y": 0},
+ {"matrix": [2, 4], "x": 3, "y": 0},
+ {"matrix": [1, 4], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 8], "x": 7.5, "y": 0},
+ {"matrix": [1, 9], "x": 8.5, "y": 0},
+ {"matrix": [2, 9], "x": 9.5, "y": 0},
+
+ {"matrix": [2, 6], "x": 11, "y": 0},
+ {"matrix": [3, 6], "x": 12, "y": 0},
+ {"matrix": [3, 11], "x": 13, "y": 0},
+ {"matrix": [3, 12], "x": 14, "y": 0},
+
+ {"matrix": [3, 15], "x": 15.25, "y": 0},
+ {"matrix": [4, 15], "x": 16.25, "y": 0},
+ {"matrix": [6, 14], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 2], "x": 0, "y": 1.5},
+ {"matrix": [3, 2], "x": 1, "y": 1.5},
+ {"matrix": [3, 3], "x": 2, "y": 1.5},
+ {"matrix": [3, 4], "x": 3, "y": 1.5},
+ {"matrix": [3, 5], "x": 4, "y": 1.5},
+ {"matrix": [2, 5], "x": 5, "y": 1.5},
+ {"matrix": [2, 7], "x": 6, "y": 1.5},
+ {"matrix": [3, 7], "x": 7, "y": 1.5},
+ {"matrix": [3, 8], "x": 8, "y": 1.5},
+ {"matrix": [3, 9], "x": 9, "y": 1.5},
+ {"matrix": [3, 10], "x": 10, "y": 1.5},
+ {"matrix": [2, 10], "x": 11, "y": 1.5},
+ {"matrix": [2, 8], "x": 12, "y": 1.5},
+ {"matrix": [1, 6], "x": 13, "y": 1.5, "w": 2},
+
+ {"matrix": [2, 12], "x": 15.25, "y": 1.5},
+ {"matrix": [2, 14], "x": 16.25, "y": 1.5},
+ {"matrix": [2, 13], "x": 17.25, "y": 1.5},
+
+ {"matrix": [6, 11], "x": 18.5, "y": 1.5},
+ {"matrix": [6, 12], "x": 19.5, "y": 1.5},
+ {"matrix": [6, 13], "x": 20.5, "y": 1.5},
+ {"matrix": [7, 13], "x": 21.5, "y": 1.5},
+
+ {"matrix": [1, 2], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [4, 2], "x": 1.5, "y": 2.5},
+ {"matrix": [4, 3], "x": 2.5, "y": 2.5},
+ {"matrix": [4, 4], "x": 3.5, "y": 2.5},
+ {"matrix": [4, 5], "x": 4.5, "y": 2.5},
+ {"matrix": [1, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [1, 7], "x": 6.5, "y": 2.5},
+ {"matrix": [4, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [4, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [4, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [4, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [1, 10], "x": 11.5, "y": 2.5},
+ {"matrix": [1, 8], "x": 12.5, "y": 2.5},
+
+ {"matrix": [2, 11], "x": 15.25, "y": 2.5},
+ {"matrix": [3, 14], "x": 16.25, "y": 2.5},
+ {"matrix": [3, 13], "x": 17.25, "y": 2.5},
+
+ {"matrix": [4, 11], "x": 18.5, "y": 2.5},
+ {"matrix": [4, 12], "x": 19.5, "y": 2.5},
+ {"matrix": [4, 13], "x": 20.5, "y": 2.5},
+ {"matrix": [4, 14], "x": 21.5, "y": 2.5, "h": 2},
+
+ {"matrix": [1, 3], "x": 0, "y": 3.5, "w": 1.5},
+ {"matrix": [5, 2], "x": 1.75, "y": 3.5},
+ {"matrix": [5, 3], "x": 2.75, "y": 3.5},
+ {"matrix": [5, 4], "x": 3.75, "y": 3.5},
+ {"matrix": [5, 5], "x": 4.75, "y": 3.5},
+ {"matrix": [0, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [0, 7], "x": 6.75, "y": 3.5},
+ {"matrix": [5, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [5, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [5, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [5, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [0, 10], "x": 11.75, "y": 3.5},
+ {"matrix": [6, 10], "x": 12.75, "y": 3.5},
+ {"matrix": [6, 6], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+
+ {"matrix": [1, 11], "x": 18.5, "y": 3.5},
+ {"matrix": [1, 12], "x": 19.5, "y": 3.5},
+ {"matrix": [1, 13], "x": 20.5, "y": 3.5},
+
+ {"matrix": [1, 1], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [0, 3], "x": 1.25, "y": 4.5},
+ {"matrix": [6, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [6, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [6, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [6, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [7, 5], "x": 6.25, "y": 4.5},
+ {"matrix": [7, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [6, 7], "x": 8.25, "y": 4.5},
+ {"matrix": [6, 8], "x": 9.25, "y": 4.5},
+ {"matrix": [6, 9], "x": 10.25, "y": 4.5},
+ {"matrix": [7, 10], "x": 11.25, "y": 4.5},
+ {"matrix": [6, 1], "x": 12.25, "y": 4.5, "w": 2.75},
+
+ {"matrix": [0, 14], "x": 16.25, "y": 4.5},
+
+ {"matrix": [5, 11], "x": 18.5, "y": 4.5},
+ {"matrix": [5, 12], "x": 19.5, "y": 4.5},
+ {"matrix": [5, 13], "x": 20.5, "y": 4.5},
+ {"matrix": [5, 14], "x": 21.5, "y": 4.5, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [0, 15], "x": 2.5, "y": 5.5, "w": 1.5},
+ {"matrix": [7, 6], "x": 4, "y": 5.5, "w": 7},
+ {"matrix": [7, 15], "x": 11, "y": 5.5, "w": 1.5},
+ {"matrix": [6, 0], "x": 13.5, "y": 5.5, "w": 1.5},
+
+ {"matrix": [7, 14], "x": 15.25, "y": 5.5},
+ {"matrix": [7, 11], "x": 16.25, "y": 5.5},
+ {"matrix": [7, 12], "x": 17.25, "y": 5.5},
+
+ {"matrix": [0, 12], "x": 18.5, "y": 5.5, "w": 2},
+ {"matrix": [0, 13], "x": 20.5, "y": 5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/modelh/keymaps/default/keymap.c b/keyboards/modelh/keymaps/default/keymap.c
new file mode 100644
index 00000000000..9098b869b30
--- /dev/null
+++ b/keyboards/modelh/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2020 John Hawthorn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_fullsize_ansi_wkl( /* Base layer */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+};
diff --git a/keyboards/modelh/modelh.c b/keyboards/modelh/modelh.c
new file mode 100644
index 00000000000..5384b373385
--- /dev/null
+++ b/keyboards/modelh/modelh.c
@@ -0,0 +1,25 @@
+/* Copyright 2020 John Hawthorn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+
+void keyboard_pre_init_kb(void) {
+ setPinOutput(MODELH_STATUS_LED);
+ writePin(MODELH_STATUS_LED, 0);
+
+ keyboard_pre_init_user();
+}
diff --git a/keyboards/modelh/readme.md b/keyboards/modelh/readme.md
new file mode 100644
index 00000000000..8cd68c111a8
--- /dev/null
+++ b/keyboards/modelh/readme.md
@@ -0,0 +1,19 @@
+# Model H - A USB capable PCB for the IBM Model M keyboard
+
+
+
+This conversion kit allows you to replace your IBM Model M's original internal controller board with a modern USB board. This aims to match the footprint of the original controller and plugs into the original keyboard matrix, but exposes a USB port through the original SDL connector.
+
+* Keyboard Maintainer: [John Hawthorn](https://github.com/jhawthorn)
+* Hardware Supported: IBM Model M
+* Hardware Availability: [www.modelh.club](www.modelh.club)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make modelh:default
+
+Flashing example for this keyboard:
+
+ make modelh:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/modelh/rules.mk b/keyboards/modelh/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/monsgeek/m6/config.h b/keyboards/monsgeek/m6/config.h
new file mode 100644
index 00000000000..5fcd897429a
--- /dev/null
+++ b/keyboards/monsgeek/m6/config.h
@@ -0,0 +1,51 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Use 6 dynamic keymap layers */
+#define DYNAMIC_KEYMAP_LAYER_COUNT 6
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
+#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
+
+/* I2C Config for LED Driver */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define I2C1_SCL_PAL_MODE 4
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000 /* 400000 */
+
+#define RGB_MATRIX_LED_COUNT 92
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_TRIGGER_ON_KEYDOWN
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
diff --git a/keyboards/monsgeek/m6/halconf.h b/keyboards/monsgeek/m6/halconf.h
new file mode 100644
index 00000000000..2f64e65393a
--- /dev/null
+++ b/keyboards/monsgeek/m6/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/monsgeek/m6/info.json b/keyboards/monsgeek/m6/info.json
new file mode 100644
index 00000000000..78d6c1bf943
--- /dev/null
+++ b/keyboards/monsgeek/m6/info.json
@@ -0,0 +1,232 @@
+{
+ "keyboard_name": "M6",
+ "manufacturer": "MonsGeek",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "force_nkro": true,
+ "vid": "0xFFFE",
+ "pid": "0x0011",
+ "device_version": "1.0.0",
+ "suspend_wakeup_delay": 400
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C1", "C2", "C3", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B2"],
+ "rows": ["C6", "C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "max_brightness": 200,
+ "val_steps": 20,
+ "animations": {
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "raindrops": true,
+ "typing_heatmap": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "multisplash": true
+ },
+ "layout":[
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 0},
+ { "flags": 4, "matrix": [0, 1], "x": 13, "y": 0},
+ { "flags": 4, "matrix": [0, 2], "x": 26, "y": 0},
+ { "flags": 4, "matrix": [0, 3], "x": 39, "y": 0},
+ { "flags": 4, "matrix": [0, 4], "x": 52, "y": 0},
+ { "flags": 4, "matrix": [0, 5], "x": 65, "y": 0},
+ { "flags": 4, "matrix": [0, 6], "x": 78, "y": 0},
+ { "flags": 4, "matrix": [0, 7], "x":115, "y": 0},
+ { "flags": 4, "matrix": [0, 8], "x":128, "y": 0},
+ { "flags": 4, "matrix": [0, 9], "x":141, "y": 0},
+ { "flags": 4, "matrix": [0, 10], "x":154, "y": 0},
+ { "flags": 4, "matrix": [0, 11], "x":167, "y": 0},
+ { "flags": 4, "matrix": [0, 12], "x":180, "y": 0},
+ { "flags": 4, "matrix": [0, 13], "x":193, "y": 0},
+ { "flags": 4, "matrix": [0, 15], "x":224, "y": 0},
+
+ { "flags": 4, "matrix": [1, 0], "x": 0, "y": 16},
+ { "flags": 4, "matrix": [1, 1], "x": 19, "y": 16},
+ { "flags": 4, "matrix": [1, 2], "x": 33, "y": 16},
+ { "flags": 4, "matrix": [1, 3], "x": 46, "y": 16},
+ { "flags": 4, "matrix": [1, 4], "x": 59, "y": 16},
+ { "flags": 4, "matrix": [1, 5], "x": 72, "y": 16},
+ { "flags": 4, "matrix": [1, 6], "x":108, "y": 16},
+ { "flags": 4, "matrix": [1, 7], "x":122, "y": 16},
+ { "flags": 4, "matrix": [1, 8], "x":135, "y": 16},
+ { "flags": 4, "matrix": [1, 9], "x":148, "y": 16},
+ { "flags": 4, "matrix": [1, 10], "x":161, "y": 16},
+ { "flags": 4, "matrix": [1, 11], "x":174, "y": 16},
+ { "flags": 4, "matrix": [1, 12], "x":187, "y": 16},
+ { "flags": 4, "matrix": [1, 13], "x":200, "y": 16},
+ { "flags": 4, "matrix": [1, 15], "x":224, "y": 16},
+
+ { "flags": 4, "matrix": [2, 0], "x": 0, "y": 32},
+ { "flags": 4, "matrix": [2, 1], "x": 23, "y": 32},
+ { "flags": 4, "matrix": [2, 2], "x": 36, "y": 32},
+ { "flags": 4, "matrix": [2, 3], "x": 49, "y": 32},
+ { "flags": 4, "matrix": [2, 4], "x": 62, "y": 32},
+ { "flags": 4, "matrix": [2, 5], "x": 75, "y": 32},
+ { "flags": 4, "matrix": [2, 6], "x":112, "y": 32},
+ { "flags": 4, "matrix": [2, 7], "x":125, "y": 32},
+ { "flags": 4, "matrix": [2, 8], "x":138, "y": 32},
+ { "flags": 4, "matrix": [2, 9], "x":151, "y": 32},
+ { "flags": 4, "matrix": [2, 10], "x":164, "y": 32},
+ { "flags": 4, "matrix": [2, 11], "x":177, "y": 32},
+ { "flags": 4, "matrix": [2, 12], "x":190, "y": 32},
+ { "flags": 4, "matrix": [2, 13], "x":203, "y": 32},
+ { "flags": 4, "matrix": [2, 15], "x":224, "y": 32},
+
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 48},
+ { "flags": 4, "matrix": [3, 11], "x": 16, "y": 48},
+ { "flags": 4, "matrix": [3, 1], "x": 29, "y": 48},
+ { "flags": 4, "matrix": [3, 2], "x": 42, "y": 48},
+ { "flags": 4, "matrix": [3, 3], "x": 65, "y": 48},
+ { "flags": 4, "matrix": [3, 4], "x": 78, "y": 48},
+ { "flags": 4, "matrix": [3, 5], "x": 91, "y": 48},
+ { "flags": 4, "matrix": [3, 6], "x":105, "y": 48},
+ { "flags": 4, "matrix": [3, 7], "x":118, "y": 48},
+ { "flags": 4, "matrix": [3, 8], "x":131, "y": 48},
+ { "flags": 4, "matrix": [3, 9], "x":144, "y": 48},
+ { "flags": 4, "matrix": [3, 10], "x":158, "y": 48},
+ { "flags": 4, "matrix": [3, 13], "x":171, "y": 48},
+ { "flags": 4, "matrix": [3, 14], "x":184, "y": 48},
+ { "flags": 4, "matrix": [3, 15], "x":210, "y": 48},
+
+ { "flags": 4, "matrix": [4, 0], "x": 0, "y": 64},
+ { "flags": 4, "matrix": [4, 1], "x": 37, "y": 64},
+ { "flags": 4, "matrix": [4, 2], "x": 59, "y": 64},
+ { "flags": 4, "matrix": [4, 5], "x": 85, "y": 64},
+ { "flags": 4, "matrix": [4, 9], "x":105, "y": 64},
+ { "flags": 4, "matrix": [4, 10], "x":138, "y": 64},
+ { "flags": 4, "matrix": [4, 11], "x":158, "y": 64},
+ { "flags": 4, "matrix": [4, 13], "x":196, "y": 64},
+ { "flags": 4, "matrix": [4, 14], "x":210, "y": 64},
+ { "flags": 4, "matrix": [4, 15], "x":224, "y": 64},
+
+ { "flags": 2, "x":0, "y":0},
+ { "flags": 2, "x":0, "y":6},
+ { "flags": 2, "x":0, "y":13},
+ { "flags": 2, "x":0, "y":19},
+ { "flags": 2, "x":0, "y":25},
+ { "flags": 2, "x":0, "y":32},
+ { "flags": 2, "x":0, "y":38},
+ { "flags": 2, "x":0, "y":45},
+ { "flags": 2, "x":0, "y":51},
+ { "flags": 2, "x":0, "y":57},
+ { "flags": 2, "x":0, "y":64},
+
+ { "flags": 2, "x":224, "y":0},
+ { "flags": 2, "x":224, "y":6},
+ { "flags": 2, "x":224, "y":13},
+ { "flags": 2, "x":224, "y":19},
+ { "flags": 2, "x":224, "y":25},
+ { "flags": 2, "x":224, "y":32},
+ { "flags": 2, "x":224, "y":38},
+ { "flags": 2, "x":224, "y":45},
+ { "flags": 2, "x":224, "y":51},
+ { "flags": 2, "x":224, "y":57},
+ { "flags": 2, "x":224, "y":64}
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "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": 8.75, "y": 0 },
+ { "label": "*", "matrix": [0, 8], "x": 9.75, "y": 0 },
+ { "label": "(", "matrix": [0, 9], "x": 10.75, "y": 0 },
+ { "label": ")", "matrix": [0, 10], "x": 11.75, "y": 0 },
+ { "label": "_", "matrix": [0, 11], "x": 12.75, "y": 0 },
+ { "label": "+", "matrix": [0, 12], "x": 13.75, "y": 0 },
+ { "label": "Bksp", "matrix": [0, 13], "w": 2, "x": 14.75, "y": 0 },
+ { "label": "Del", "matrix": [0, 15], "x": 17, "y": 0 },
+
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1.25 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1.25 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1.25 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1.25 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1.25 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1.25 },
+ { "label": "Y", "matrix": [1, 6], "x": 8.25, "y": 1.25 },
+ { "label": "U", "matrix": [1, 7], "x": 9.25, "y": 1.25 },
+ { "label": "I", "matrix": [1, 8], "x": 10.25, "y": 1.25 },
+ { "label": "O", "matrix": [1, 9], "x": 11.25, "y": 1.25 },
+ { "label": "P", "matrix": [1, 10], "x": 12.25, "y": 1.25 },
+ { "label": "{", "matrix": [1, 11], "x": 13.25, "y": 1.25 },
+ { "label": "}", "matrix": [1, 12], "x": 14.25, "y": 1.25 },
+ { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 15.25, "y": 1.25 },
+ { "label": "PageUp", "matrix": [1, 15], "x": 17, "y": 1.25 },
+
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2.25 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2.25 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2.25 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2.25 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2.25 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2.25 },
+ { "label": "H", "matrix": [2, 6], "x": 8.5, "y": 2.25 },
+ { "label": "J", "matrix": [2, 7], "x": 9.5, "y": 2.25 },
+ { "label": "K", "matrix": [2, 8], "x": 10.5, "y": 2.25 },
+ { "label": "L", "matrix": [2, 9], "x": 11.5, "y": 2.25 },
+ { "label": ":", "matrix": [2, 10], "x": 12.5, "y": 2.25 },
+ { "label": "'", "matrix": [2, 11], "x": 13.5, "y": 2.25 },
+ { "label": ":", "matrix": [2, 12], "x": 14.5, "y": 2.25 },
+ { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 14.5, "y": 2.25 },
+ { "label": "PageDn", "matrix": [2, 15], "x": 17, "y": 2.25 },
+
+ { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3.25 },
+ { "label": ":", "matrix": [3, 11], "x": 1.25, "y": 3.25 },
+ { "label": "Z", "matrix": [3, 1], "x": 2.25, "y": 3.25 },
+ { "label": "X", "matrix": [3, 2], "x": 3.25, "y": 3.25 },
+ { "label": "C", "matrix": [3, 3], "x": 4.25, "y": 3.25 },
+ { "label": "V", "matrix": [3, 4], "x": 5.25, "y": 3.25 },
+ { "label": "B", "matrix": [3, 5], "x": 6.25, "y": 3.25 },
+ { "label": "B", "matrix": [3, 6], "x": 8, "y": 3.25 },
+ { "label": "N", "matrix": [3, 7], "x": 9, "y": 3.25 },
+ { "label": "M", "matrix": [3, 8], "x": 10, "y": 3.25 },
+ { "label": "<", "matrix": [3, 9], "x": 11, "y": 3.25 },
+ { "label": ">", "matrix": [3, 10], "x": 12, "y": 3.25 },
+ { "label": "?", "matrix": [3, 13], "x": 13, "y": 3.25 },
+ { "label": "Shift", "matrix": [3, 14], "w": 1.75, "x": 14, "y": 3.25 },
+ { "label": "Up", "matrix": [3, 15], "x": 16, "y": 3.25 },
+
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4.25 },
+ { "label": "Alt", "matrix": [4, 1], "w": 1.5, "x": 3, "y": 4.25 },
+ { "label": "Space", "matrix": [4, 2], "w": 2, "x": 4.5, "y": 4.25 },
+ { "label": "Win", "matrix": [4, 5], "w": 1.25, "x": 6.5, "y": 4.25 },
+ { "label": "Space", "matrix": [4, 9], "w": 2.5, "x": 8, "y": 4.25 },
+ { "label": "Alt", "matrix": [4, 10], "w":1.5, "x": 10.5, "y": 4.25 },
+ { "label": "Fn", "matrix": [4, 11], "w":1.5, "x": 12, "y": 4.25 },
+ { "label": "Left", "matrix": [4, 13], "x": 15, "y": 4.25 },
+ { "label": "Down", "matrix": [4, 14], "x": 16, "y": 4.25 },
+ { "label": "Right", "matrix": [4, 15], "x": 17, "y": 4.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/monsgeek/m6/keymaps/default/keymap.c b/keyboards/monsgeek/m6/keymaps/default/keymap.c
new file mode 100644
index 00000000000..8a03db1790b
--- /dev/null
+++ b/keyboards/monsgeek/m6/keymaps/default/keymap.c
@@ -0,0 +1,76 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, MO(WIN_FN), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_W] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
+
+ [WIN_FN] = 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, KC_F12, _______, RGB_MOD,
+ _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, KC_INS, DF(MAC_B),KC_PSCR,_______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, GU_TOGG, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_SPC, KC_LALT, KC_SPC, KC_RGUI, MO(WIN_FN), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_W] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
+
+ [MAC_FN] = LAYOUT( /* FN */
+ KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, _______, RGB_MOD,
+ _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, KC_INS, DF(WIN_B),KC_PSCR,_______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+};
+
diff --git a/keyboards/monsgeek/m6/keymaps/via/keymap.c b/keyboards/monsgeek/m6/keymaps/via/keymap.c
new file mode 100644
index 00000000000..b7e8cecd71d
--- /dev/null
+++ b/keyboards/monsgeek/m6/keymaps/via/keymap.c
@@ -0,0 +1,76 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+#define KC_SIRI LCMD(KC_SPC)
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, MO(WIN_FN), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_W] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
+
+ [WIN_FN] = 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, KC_F12, _______, RGB_MOD,
+ _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, KC_INS, DF(MAC_B),KC_PSCR,_______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, GU_TOGG, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_SPC, KC_LALT, KC_SPC, KC_RGUI, MO(MAC_FN), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_W] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
+
+ [MAC_FN] = LAYOUT( /* FN */
+ KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_SIRI, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, _______, RGB_MOD,
+ _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, KC_INS, DF(WIN_B),KC_PSCR,_______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+};
+
diff --git a/keyboards/monsgeek/m6/keymaps/via/rules.mk b/keyboards/monsgeek/m6/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/monsgeek/m6/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/monsgeek/m6/m6.c b/keyboards/monsgeek/m6/m6.c
new file mode 100644
index 00000000000..1823d865cce
--- /dev/null
+++ b/keyboards/monsgeek/m6/m6.c
@@ -0,0 +1,197 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, A_1, B_1, C_1},
+ {0, A_2, B_2, C_2},
+ {0, A_3, B_3, C_3},
+ {0, A_4, B_4, C_4},
+ {0, A_5, B_5, C_5},
+ {0, A_6, B_6, C_6},
+ {0, A_7, B_7, C_7},
+ {0, A_8, B_8, C_8},
+ {0, A_9, B_9, C_9},
+ {0, A_10, B_10, C_10},
+ {0, A_11, B_11, C_11},
+ {0, A_12, B_12, C_12},
+ {0, A_13, B_13, C_13},
+ {0, A_14, B_14, C_14},
+ {1, D_1, E_1, F_1},
+
+ {0, D_1, E_1, F_1},
+ {0, D_2, E_2, F_2},
+ {0, D_3, E_3, F_3},
+ {0, D_4, E_4, F_4},
+ {0, D_5, E_5, F_5},
+ {0, D_6, E_6, F_6},
+ {0, D_7, E_7, F_7},
+ {0, D_8, E_8, F_8},
+ {0, D_9, E_9, F_9},
+ {0, D_10, E_10, F_10},
+ {0, D_11, E_11, F_11},
+ {0, D_12, E_12, F_12},
+ {0, D_13, E_13, F_13},
+ {0, D_14, E_14, F_14},
+ {1, D_2, E_2, F_2},
+
+ {0, G_1, H_1, I_1},
+ {0, G_2, H_2, I_2},
+ {0, G_3, H_3, I_3},
+ {0, G_4, H_4, I_4},
+ {0, G_5, H_5, I_5},
+ {0, G_6, H_6, I_6},
+ {0, G_7, H_7, I_7},
+ {0, G_8, H_8, I_8},
+ {0, G_9, H_9, I_9},
+ {0, G_10, H_10, I_10},
+ {0, G_11, H_11, I_11},
+ {0, G_12, H_12, I_12},
+ {0, A_15, B_15, C_15},
+ {0, G_13, H_13, I_13},
+ {1, D_3, E_3, F_3},
+
+ {0, J_1, K_1, L_1},
+ {0, A_16, B_16, C_16},
+ {0, J_2, K_2, L_2},
+ {0, J_3, K_3, L_3},
+ {0, J_4, K_4, L_4},
+ {0, J_5, K_5, L_5},
+ {0, J_6, K_6, L_6},
+ {0, J_7, K_7, L_7},
+ {0, J_8, K_8, L_8},
+ {0, J_9, K_9, L_9},
+ {0, J_10, K_10, L_10},
+ {0, J_11, K_11, L_11},
+ {0, J_12, K_12, L_12},
+ {1, D_7, E_7, F_7},
+ {1, D_4, E_4, F_4},
+
+ {0, J_13, K_13, L_13},
+ {0, J_14, K_14, L_14},
+ {0, J_15, K_15, L_15},
+ {0, J_16, K_16, L_16},
+ {0, G_14, H_14, I_14},
+ {0, G_15, H_15, I_15},
+ {0, G_16, H_16, I_16},
+ {0, D_15, E_15, F_15},
+ {1, D_6, E_6, F_6},
+ {1, D_5, E_5, F_5},
+
+
+ {1, G_1, H_1, I_1},
+ {1, G_2, H_2, I_2},
+ {1, G_3, H_3, I_3},
+ {1, G_4, H_4, I_4},
+ {1, G_5, H_5, I_5},
+ {1, G_6, H_6, I_6},
+ {1, G_7, H_7, I_7},
+ {1, G_8, H_8, I_8},
+ {1, G_9, H_9, I_9},
+ {1, G_10, H_10, I_10},
+ {1, G_11, H_11, I_11},
+
+ {1, J_1, K_1, L_1},
+ {1, J_2, K_2, L_2},
+ {1, J_3, K_3, L_3},
+ {1, J_4, K_4, L_4},
+ {1, J_5, K_5, L_5},
+ {1, J_6, K_6, L_6},
+ {1, J_7, K_7, L_7},
+ {1, J_8, K_8, L_8},
+ {1, J_9, K_9, L_9},
+ {1, J_10, K_10, L_10},
+ {1, J_11, K_11, L_11},
+};
+
+// clang-format on
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max)
+{
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max))
+ {
+ return false;
+ }
+
+ if (host_keyboard_led_state().caps_lock)
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(30, 255, 255, 255);
+ }
+ else
+ {
+ if (!rgb_matrix_get_flags())
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(30, 0, 0, 0);
+ }
+ }
+ if (keymap_config.no_gui)
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(63, 255, 255, 255);
+ }
+ else
+ {
+ if (!rgb_matrix_get_flags())
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(63, 0, 0, 0);
+ }
+ }
+ return true;
+}
+
+#endif
+bool process_record_kb(uint16_t keycode, keyrecord_t *record)
+{
+ if (!process_record_user(keycode, record))
+ {
+ return false;
+ }
+ switch (keycode)
+ {
+ case RGB_TOG:
+ if (record->event.pressed)
+ {
+ switch (rgb_matrix_get_flags())
+ {
+ case LED_FLAG_ALL:
+ {
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ break;
+ default:
+ {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ }
+ break;
+ }
+ }
+ if (!rgb_matrix_is_enabled())
+ {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ rgb_matrix_enable();
+ }
+ return false;
+ default:
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/keyboards/monsgeek/m6/mcuconf.h b/keyboards/monsgeek/m6/mcuconf.h
new file mode 100644
index 00000000000..e2884f3828f
--- /dev/null
+++ b/keyboards/monsgeek/m6/mcuconf.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include_next
+
+#undef WB32_SPI_USE_QSPI
+#define WB32_SPI_USE_QSPI TRUE
+
+#undef WB32_I2C_USE_I2C1
+#define WB32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/monsgeek/m6/readme.md b/keyboards/monsgeek/m6/readme.md
new file mode 100644
index 00000000000..ca30e5da204
--- /dev/null
+++ b/keyboards/monsgeek/m6/readme.md
@@ -0,0 +1,19 @@
+# monsgeek m6 keyboard
+
+A customizable 60% keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: m6
+* Hardware Availability: [monsgeek](https://www.monsgeek.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make monsgeek/m6:default
+
+Flashing example for this keyboard:
+
+ make monsgeek/m6:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, which programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/monsgeek/m6/rules.mk b/keyboards/monsgeek/m6/rules.mk
new file mode 100644
index 00000000000..24d5f6f52ec
--- /dev/null
+++ b/keyboards/monsgeek/m6/rules.mk
@@ -0,0 +1,2 @@
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/mothwing/info.json b/keyboards/mothwing/info.json
new file mode 100644
index 00000000000..350c52c72e4
--- /dev/null
+++ b/keyboards/mothwing/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "mothwing",
+ "manufacturer": "Luana co.ltd.",
+ "url": "",
+ "maintainer": "tan-t",
+ "usb": {
+ "vid": "0x4D77",
+ "pid": "0x0001",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["F4", "F5", "F6", "F7", "B1", "B3"],
+ "rows": ["D4", "C6", "D7", "E6"]
+ },
+ "diode_direction": "COL2ROW",
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "D2"
+ },
+ "development_board": "promicro",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 1.18},
+ {"matrix": [0, 1], "x": 1, "y": 1.03},
+ {"matrix": [0, 2], "x": 2, "y": 0.35},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.05},
+ {"matrix": [0, 5], "x": 5, "y": 0.1},
+
+ {"matrix": [4, 5], "x": 11.5, "y": 0.1},
+ {"matrix": [4, 4], "x": 12.5, "y": 0.05},
+ {"matrix": [4, 3], "x": 13.5, "y": 0},
+ {"matrix": [4, 2], "x": 14.5, "y": 0.35},
+ {"matrix": [4, 1], "x": 15.5, "y": 1.08},
+ {"matrix": [4, 0], "x": 16.5, "y": 1.18},
+
+ {"matrix": [1, 0], "x": 0, "y": 2.18},
+ {"matrix": [1, 1], "x": 1, "y": 2.03},
+ {"matrix": [1, 2], "x": 2, "y": 1.35},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.05},
+ {"matrix": [1, 5], "x": 5, "y": 1.1},
+
+ {"matrix": [5, 5], "x": 11.5, "y": 1.1},
+ {"matrix": [5, 4], "x": 12.5, "y": 1.05},
+ {"matrix": [5, 3], "x": 13.5, "y": 1},
+ {"matrix": [5, 2], "x": 14.5, "y": 1.35},
+ {"matrix": [5, 1], "x": 15.5, "y": 2.03},
+ {"matrix": [5, 0], "x": 16.5, "y": 2.18},
+
+ {"matrix": [2, 0], "x": 0, "y": 3.18},
+ {"matrix": [2, 1], "x": 1, "y": 3.03},
+ {"matrix": [2, 2], "x": 2, "y": 2.35},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.05},
+ {"matrix": [2, 5], "x": 5, "y": 2.1},
+
+ {"matrix": [6, 5], "x": 11.5, "y": 2.1},
+ {"matrix": [6, 4], "x": 12.5, "y": 2.05},
+ {"matrix": [6, 3], "x": 13.5, "y": 2},
+ {"matrix": [6, 2], "x": 14.5, "y": 2.35},
+ {"matrix": [6, 1], "x": 15.5, "y": 3.03},
+ {"matrix": [6, 0], "x": 16.5, "y": 3.18},
+
+ {"matrix": [3, 2], "x": 4, "y": 3.05},
+ {"matrix": [3, 3], "x": 5, "y": 3.1},
+ {"matrix": [3, 4], "x": 6, "y": 3.2, "w": 1.25},
+ {"matrix": [3, 5], "x": 7.25, "y": 3.5},
+
+ {"matrix": [7, 5], "x": 9.25, "y": 3.5},
+ {"matrix": [7, 4], "x": 10.25, "y": 3.2, "w": 1.25},
+ {"matrix": [7, 3], "x": 11.5, "y": 3.1},
+ {"matrix": [7, 2], "x": 12.5, "y": 3.05}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mothwing/keymaps/default/keymap.c b/keyboards/mothwing/keymaps/default/keymap.c
new file mode 100644
index 00000000000..0c6923403dd
--- /dev/null
+++ b/keyboards/mothwing/keymaps/default/keymap.c
@@ -0,0 +1,72 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+enum layer_number {
+ _QWERTY,
+ _RAISE,
+ _LOWER,
+};
+
+#define KC_L_SPC LT(_LOWER, KC_SPC) // lower
+#define KC_R_ENT LT(_RAISE, KC_ENT) // raise
+#define KC_G_JA LGUI_T(KC_LNG1) // cmd or win
+#define KC_G_EN LGUI_T(KC_LNG2) // cmd or win
+#define KC_C_BS LCTL_T(KC_BSPC) // ctrl
+#define KC_A_DEL ALT_T(KC_DEL) // alt
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //,--------+--------+---------+--------+---------+--------. ,--------+---------+--------+---------+--------+--------.
+ KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS,
+ //|--------+--------+---------+--------+---------+--------| |--------+---------+--------+---------+--------+--------|
+ KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
+ //|--------+--------+---------+--------+---------+--------| |--------+---------+--------+---------+--------+--------|
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
+ //`--------+--------+---------+--------+---------+--------/ \--------+---------+--------+---------+--------+--------'
+ KC_A_DEL, KC_G_EN, KC_L_SPC, KC_C_BS, KC_C_BS, KC_R_ENT, KC_G_JA, KC_A_DEL
+ // `----------+--------+---------+--------' `--------+---------+--------+---------'
+ ),
+
+ [_RAISE] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, KC_BSLS, KC_CIRC, KC_EXLM, KC_AMPR, KC_PIPE, KC_AT , KC_EQL , KC_PLUS, KC_ASTR, KC_PERC, KC_MINS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LPRN, KC_HASH, KC_DLR , KC_DQT , KC_QUOT, KC_TILD, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_GRV , KC_RPRN,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, KC_LCBR, KC_LBRC, KC_RBRC, KC_RCBR, _______, _______, _______, _______,
+ //`--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------'
+ _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ // `--------+--------+--------+--------' `--------+--------+--------+--------'
+ ),
+
+ [_LOWER] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , _______, KC_EQL , KC_PLUS, KC_ASTR, KC_PERC, KC_MINS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______, KC_COMM, KC_DOT , KC_SLSH, _______,
+ //`--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------'
+ QK_BOOT , _______, _______, _______, _______, _______, _______, _______
+ // `--------+--------+--------+--------' `--------+--------+--------+--------'
+ ),
+};
diff --git a/keyboards/mothwing/keymaps/via/keymap.c b/keyboards/mothwing/keymaps/via/keymap.c
new file mode 100644
index 00000000000..ba3f5353d97
--- /dev/null
+++ b/keyboards/mothwing/keymaps/via/keymap.c
@@ -0,0 +1,72 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+enum layer_number {
+ _QWERTY,
+ _RAISE,
+ _LOWER
+};
+
+#define KC_L_SPC LT(_LOWER, KC_SPC) // lower
+#define KC_R_ENT LT(_RAISE, KC_ENT) // raise
+#define KC_G_JA LGUI_T(KC_LNG1) // cmd or win
+#define KC_G_EN LGUI_T(KC_LNG2) // cmd or win
+#define KC_C_BS LCTL_T(KC_BSPC) // ctrl
+#define KC_A_DEL ALT_T(KC_DEL) // alt
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //,--------+--------+---------+--------+---------+--------. ,--------+---------+--------+---------+--------+--------.
+ KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS,
+ //|--------+--------+---------+--------+---------+--------| |--------+---------+--------+---------+--------+--------|
+ KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
+ //|--------+--------+---------+--------+---------+--------| |--------+---------+--------+---------+--------+--------|
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
+ //`--------+--------+---------+--------+---------+--------/ \--------+---------+--------+---------+--------+--------'
+ KC_A_DEL, KC_G_EN, KC_L_SPC, KC_C_BS, KC_C_BS, KC_R_ENT, KC_G_JA, KC_A_DEL
+ // `----------+--------+---------+--------' `--------+---------+--------+---------'
+ ),
+
+ [_RAISE] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, KC_BSLS, KC_CIRC, KC_EXLM, KC_AMPR, KC_PIPE, KC_AT , KC_EQL , KC_PLUS, KC_ASTR, KC_PERC, KC_MINS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LPRN, KC_HASH, KC_DLR , KC_DQT , KC_QUOT, KC_TILD, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_GRV , KC_RPRN,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, KC_LCBR, KC_LBRC, KC_RBRC, KC_RCBR, _______, _______, _______, _______,
+ //`--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------'
+ _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ // `--------+--------+--------+--------' `--------+--------+--------+--------'
+ ),
+
+ [_LOWER] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , _______, KC_EQL , KC_PLUS, KC_ASTR, KC_PERC, KC_MINS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______, KC_COMM, KC_DOT , KC_SLSH, _______,
+ //`--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------'
+ QK_BOOT , _______, _______, _______, _______, _______, _______, _______
+ // `--------+--------+--------+--------' `--------+--------+--------+--------'
+ )
+};
diff --git a/keyboards/mothwing/keymaps/via/rules.mk b/keyboards/mothwing/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/mothwing/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/mothwing/readme.md b/keyboards/mothwing/readme.md
new file mode 100644
index 00000000000..184f608c5d5
--- /dev/null
+++ b/keyboards/mothwing/readme.md
@@ -0,0 +1,23 @@
+# MOTHWING
+
+A split keyboard with 3x6 vertically staggered keys and 4 thumb keys.
+
+* Keyboard Maintainer: [tan-t](https://github.com/tan-t)
+* Hardware Supported: MOTHWING PCB
+* Hardware Availability: currently unavailable. merch will be open around August 2023.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mothwing:default
+
+Flashing example for this keyboard:
+
+ make mothwing: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 by:
+
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/mothwing/rules.mk b/keyboards/mothwing/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/neson_design/nico/info.json b/keyboards/neson_design/nico/info.json
new file mode 100644
index 00000000000..f21b644f569
--- /dev/null
+++ b/keyboards/neson_design/nico/info.json
@@ -0,0 +1,121 @@
+{
+ "manufacturer": "Neson Design",
+ "keyboard_name": "Nico",
+ "maintainer": "yulei",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "indicators": {
+ "caps_lock": "E2"
+ },
+ "matrix_pins": {
+ "cols": ["C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "B7", "B3", "B2", "B1", "F6", "F7"],
+ "rows": ["F0", "E6", "F5", "F4", "F1"]
+ },
+ "processor": "atmega32u4",
+ "ws2812": {
+ "pin": "B0"
+ },
+ "rgblight": {
+ "led_count": 5
+ },
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "no_startup_check": true,
+ "pid": "0x6E65",
+ "vid": "0x4E65"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "K017", "matrix": [0, 15], "x": 0, "y": 0 },
+ { "label": "K018", "matrix": [0, 16], "x": 1, "y": 0 },
+ { "label": "K00", "matrix": [0, 0], "x": 2.5, "y": 0 },
+ { "label": "K01", "matrix": [0, 1], "x": 3.5, "y": 0 },
+ { "label": "K02", "matrix": [0, 2], "x": 4.5, "y": 0 },
+ { "label": "K03", "matrix": [0, 3], "x": 5.5, "y": 0 },
+ { "label": "K04", "matrix": [0, 4], "x": 6.5, "y": 0 },
+ { "label": "K05", "matrix": [0, 5], "x": 7.5, "y": 0 },
+ { "label": "K06", "matrix": [0, 6], "x": 8.5, "y": 0 },
+ { "label": "K07", "matrix": [0, 7], "x": 9.5, "y": 0 },
+ { "label": "K08", "matrix": [0, 8], "x": 10.5, "y": 0 },
+ { "label": "K09", "matrix": [0, 9], "x": 11.5, "y": 0 },
+ { "label": "K0A", "matrix": [0, 10], "x": 12.5, "y": 0 },
+ { "label": "K0B", "matrix": [0, 11], "x": 13.5, "y": 0 },
+ { "label": "K0C", "matrix": [0, 12], "x": 14.5, "y": 0 },
+ { "label": "K0D", "matrix": [0, 13], "x": 15.5, "y": 0 },
+ { "label": "K0E", "matrix": [0, 14], "x": 16.5, "y": 0 },
+ { "label": "K4E", "matrix": [4, 14], "x": 17.5, "y": 0 },
+ { "label": "K116", "matrix": [1, 15], "x": 0, "y": 1 },
+ { "label": "K117", "matrix": [1, 16], "x": 1, "y": 1 },
+ { "label": "K10", "matrix": [1, 0], "w": 1.5, "x": 2.5, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "x": 4, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 5, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 6, "y": 1 },
+ { "label": "K14", "matrix": [1, 4], "x": 7, "y": 1 },
+ { "label": "K15", "matrix": [1, 5], "x": 8, "y": 1 },
+ { "label": "K16", "matrix": [1, 6], "x": 9, "y": 1 },
+ { "label": "K17", "matrix": [1, 7], "x": 10, "y": 1 },
+ { "label": "K18", "matrix": [1, 8], "x": 11, "y": 1 },
+ { "label": "K19", "matrix": [1, 9], "x": 12, "y": 1 },
+ { "label": "K1A", "matrix": [1, 10], "x": 13, "y": 1 },
+ { "label": "K1B", "matrix": [1, 11], "x": 14, "y": 1 },
+ { "label": "K1C", "matrix": [1, 12], "x": 15, "y": 1 },
+ { "label": "K1D", "matrix": [1, 13], "w": 1.5, "x": 16, "y": 1 },
+ { "label": "K1E", "matrix": [1, 14], "x": 17.5, "y": 1 },
+ { "label": "K216", "matrix": [2, 15], "x": 0, "y": 2 },
+ { "label": "K217", "matrix": [2, 16], "x": 1, "y": 2 },
+ { "label": "K20", "matrix": [2, 0], "w": 1.75, "x": 2.5, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "x": 4.25, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 5.25, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 6.25, "y": 2 },
+ { "label": "K24", "matrix": [2, 4], "x": 7.25, "y": 2 },
+ { "label": "K25", "matrix": [2, 5], "x": 8.25, "y": 2 },
+ { "label": "K26", "matrix": [2, 6], "x": 9.25, "y": 2 },
+ { "label": "K27", "matrix": [2, 7], "x": 10.25, "y": 2 },
+ { "label": "K28", "matrix": [2, 8], "x": 11.25, "y": 2 },
+ { "label": "K29", "matrix": [2, 9], "x": 12.25, "y": 2 },
+ { "label": "K2A", "matrix": [2, 10], "x": 13.25, "y": 2 },
+ { "label": "K2B", "matrix": [2, 11], "x": 14.25, "y": 2 },
+ { "label": "K2D", "matrix": [2, 13], "w": 2.25, "x": 15.25, "y": 2 },
+ { "label": "K2E", "matrix": [2, 14], "x": 17.5, "y": 2 },
+ { "label": "K316", "matrix": [3, 15], "x": 0, "y": 3 },
+ { "label": "K317", "matrix": [3, 16], "x": 1, "y": 3 },
+ { "label": "K30", "matrix": [3, 0], "w": 2.25, "x": 2.5, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 4.75, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 5.75, "y": 3 },
+ { "label": "K34", "matrix": [3, 4], "x": 6.75, "y": 3 },
+ { "label": "K35", "matrix": [3, 5], "x": 7.75, "y": 3 },
+ { "label": "K36", "matrix": [3, 6], "x": 8.75, "y": 3 },
+ { "label": "K37", "matrix": [3, 7], "x": 9.75, "y": 3 },
+ { "label": "K38", "matrix": [3, 8], "x": 10.75, "y": 3 },
+ { "label": "K39", "matrix": [3, 9], "x": 11.75, "y": 3 },
+ { "label": "K3A", "matrix": [3, 10], "x": 12.75, "y": 3 },
+ { "label": "K3B", "matrix": [3, 11], "x": 13.75, "y": 3 },
+ { "label": "K3C", "matrix": [3, 12], "w": 1.75, "x": 14.75, "y": 3 },
+ { "label": "K3D", "matrix": [3, 13], "x": 16.5, "y": 3 },
+ { "label": "K3E", "matrix": [3, 14], "x": 17.5, "y": 3 },
+ { "label": "K416", "matrix": [4, 15], "x": 0, "y": 4 },
+ { "label": "K417", "matrix": [4, 16], "x": 1, "y": 4 },
+ { "label": "K40", "matrix": [4, 0], "w": 1.25, "x": 2.5, "y": 4 },
+ { "label": "K41", "matrix": [4, 1], "w": 1.25, "x": 3.75, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "w": 1.25, "x": 5, "y": 4 },
+ { "label": "K48", "matrix": [4, 8], "w": 6.25, "x": 6.25, "y": 4 },
+ { "label": "K49", "matrix": [4, 9], "w": 1.25, "x": 12.5, "y": 4 },
+ { "label": "K4A", "matrix": [4, 10], "w": 1.25, "x": 13.75, "y": 4 },
+ { "label": "K4B", "matrix": [4, 11], "x": 15.5, "y": 4 },
+ { "label": "K4C", "matrix": [4, 12], "x": 16.5, "y": 4 },
+ { "label": "K4D", "matrix": [4, 13], "x": 17.5, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/neson_design/nico/keymaps/default/keymap.c b/keyboards/neson_design/nico/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d481379e210
--- /dev/null
+++ b/keyboards/neson_design/nico/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/**
+ Copyright 2023 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC, KC_PSCR,
+ KC_F3, KC_F4, 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_HOME,
+ KC_F5, KC_F6, 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_END,
+ KC_F7, KC_F8, 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, MO(1),
+ KC_F9,KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_LEFT,KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT(
+ _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,KC_PSCR,_______,
+ _______, _______, QK_BOOT, RGB_TOG,RGB_MOD,_______, KC_F16, KC_F17,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,_______,
+ _______, _______, _______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME, KC_END, _______,_______,
+ _______, _______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,
+ _______, _______, _______,_______,_______, _______, _______,_______, _______,_______,_______),
+};
diff --git a/keyboards/neson_design/nico/keymaps/via/keymap.c b/keyboards/neson_design/nico/keymaps/via/keymap.c
new file mode 100644
index 00000000000..9de688505e4
--- /dev/null
+++ b/keyboards/neson_design/nico/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+/**
+ Copyright 2023 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC, KC_PSCR,
+ KC_F3, KC_F4, 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_HOME,
+ KC_F5, KC_F6, 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_END,
+ KC_F7, KC_F8, 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, MO(1),
+ KC_F9,KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_LEFT,KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______, QK_BOOT, RGB_TOG,RGB_MOD,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,
+ _______, _______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,
+ _______, _______, _______,_______,_______, _______, _______,_______, _______,_______,_______)
+};
diff --git a/keyboards/neson_design/nico/keymaps/via/rules.mk b/keyboards/neson_design/nico/keymaps/via/rules.mk
new file mode 100644
index 00000000000..43061db1dd4
--- /dev/null
+++ b/keyboards/neson_design/nico/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/neson_design/nico/nico.c b/keyboards/neson_design/nico/nico.c
new file mode 100644
index 00000000000..63f08b8639f
--- /dev/null
+++ b/keyboards/neson_design/nico/nico.c
@@ -0,0 +1,85 @@
+/**
+ * @file nico.c
+ *
+ Copyright 2023 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
+
+#include "quantum.h"
+#ifdef RGBLIGHT_ENABLE
+
+static bool alert = false;
+static bool backup = false;
+static LED_TYPE caps_led;
+static uint16_t last_ticks = 0;
+
+#define ALERT_INTERVAL 500
+#define ALERM_LED_R 0xFF
+#define ALERM_LED_G 0xA5
+#define ALERM_LED_B 0x00
+//golden 0xFF, 0xD9, 0x00
+
+void housekeeping_task_kb(void)
+{
+ if (host_keyboard_led_state().caps_lock) {
+ if (!backup) {
+ caps_led.r = led[4].r;
+ caps_led.g = led[4].g;
+ caps_led.b = led[4].b;
+ backup = true;
+ }
+ if(alert) {
+ led[4].r = ALERM_LED_G;
+ led[4].g = ALERM_LED_R;
+ led[4].b = ALERM_LED_B;
+ } else {
+ led[4].r = 0;
+ led[4].g = 0;
+ led[4].b = 0;
+ }
+ if (timer_elapsed(last_ticks) > ALERT_INTERVAL) {
+ alert = !alert;
+ last_ticks = timer_read();
+ }
+ ws2812_setleds(led, RGBLED_NUM);
+ } else {
+ if (backup) {
+ led[4].r = caps_led.r;
+ led[4].g = caps_led.g;
+ led[4].b = caps_led.b;
+ backup = false;
+ ws2812_setleds(led, RGBLED_NUM);
+ }
+ }
+ housekeeping_task_user();
+}
+
+void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds)
+{
+ start_led[2].r = start_led[0].r;
+ start_led[2].g = start_led[0].g;
+ start_led[2].b = start_led[0].b;
+
+ start_led[3].r = start_led[1].r;
+ start_led[3].g = start_led[1].g;
+ start_led[3].b = start_led[1].b;
+
+ uint8_t tmp = start_led[4].g;
+ start_led[4].g = start_led[4].r;
+ start_led[4].r = tmp;
+ ws2812_setleds(start_led, RGBLED_NUM);
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/neson_design/nico/readme.md b/keyboards/neson_design/nico/readme.md
new file mode 100644
index 00000000000..9b821c16d02
--- /dev/null
+++ b/keyboards/neson_design/nico/readme.md
@@ -0,0 +1,21 @@
+# Neson Design (formerly iNETT Studio) Nico
+
+A 65% keyboard with F area from the Neson Design's N series.
+
+* Keyboard Maintainer: [astro](https://github.com/yulei)
+* Hardware Supported: Nico keyboard
+* Hardware Availability: Limited gb
+
+Make example for this keyboard (after setting up your build environment):
+
+ make neson_design/nico:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+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 *RST* button on the back of the PCB.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.
\ No newline at end of file
diff --git a/keyboards/neson_design/nico/rules.mk b/keyboards/neson_design/nico/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/neson_design/nico/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/nix_studio/lilith/config.h b/keyboards/nix_studio/lilith/config.h
new file mode 100644
index 00000000000..225e6ac51b2
--- /dev/null
+++ b/keyboards/nix_studio/lilith/config.h
@@ -0,0 +1,7 @@
+// Copyright 2022 Martin Arnstad (@arnstadm)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Set HSE clock since it differs from F411 default */
+#define STM32_HSECLK 16000000
diff --git a/keyboards/nix_studio/lilith/info.json b/keyboards/nix_studio/lilith/info.json
new file mode 100644
index 00000000000..e648cf98fbe
--- /dev/null
+++ b/keyboards/nix_studio/lilith/info.json
@@ -0,0 +1,388 @@
+{
+ "manufacturer": "Nix Studio",
+ "keyboard_name": "lilith",
+ "maintainer": "arnstadm",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B13", "B7", "B6", "B5", "B4", "B3", "A15", "A14", "B1", "B0", "A7", "A6", "A5", "A4", "A2", "A3"],
+ "rows": ["A8", "A1", "B12", "B14", "B15"]
+ },
+ "processor": "STM32F411",
+ "url": "https://www.antipode.no/",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x4C49",
+ "vid": "0x6E78"
+ },
+ "community_layouts": [ "65_ansi_blocker", "65_iso_blocker", "65_ansi_blocker_tsangan_split_bs", "65_iso_blocker_tsangan" ],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [0, 14], "x": 14, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ },
+ "LAYOUT_65_ansi_blocker": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_tsangan_split_bs": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [0, 14], "x": 14, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ },
+ "LAYOUT_65_iso_blocker_tsangan": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker/keymap.c b/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker/keymap.c
new file mode 100644
index 00000000000..3afe91ac88a
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker/keymap.c
@@ -0,0 +1,50 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgD│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │Alt│ Fn│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_65_ansi_blocker(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │ │ │ │ │Ins│ │ │ │ │PSc│Scr│Pause│ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │ │ │ │ │ │ │Mut│Vl-│Vl+│ │ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+ [1] = LAYOUT_65_ansi_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker_tsangan_split_bs/keymap.c b/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker_tsangan_split_bs/keymap.c
new file mode 100644
index 00000000000..b13fd083883
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker_tsangan_split_bs/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_65_ansi_blocker_tsangan_split_bs(
+ 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_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_65_ansi_blocker_tsangan_split_bs(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/65_iso_blocker/keymap.c b/keyboards/nix_studio/lilith/keymaps/65_iso_blocker/keymap.c
new file mode 100644
index 00000000000..83ac675d043
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/65_iso_blocker/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+ [0] = LAYOUT_65_iso_blocker(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ 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_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_65_iso_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/65_iso_blocker_tsangan/keymap.c b/keyboards/nix_studio/lilith/keymaps/65_iso_blocker_tsangan/keymap.c
new file mode 100644
index 00000000000..900a7af04bf
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/65_iso_blocker_tsangan/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+ [0] = LAYOUT_65_iso_blocker_tsangan(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ 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_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_65_iso_blocker_tsangan(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/default/keymap.c b/keyboards/nix_studio/lilith/keymaps/default/keymap.c
new file mode 100644
index 00000000000..217eab037bc
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/default/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/via/keymap.c b/keyboards/nix_studio/lilith/keymaps/via/keymap.c
new file mode 100644
index 00000000000..217eab037bc
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/via/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/via/rules.mk b/keyboards/nix_studio/lilith/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/nix_studio/lilith/mcuconf.h b/keyboards/nix_studio/lilith/mcuconf.h
new file mode 100644
index 00000000000..e93fdc1d236
--- /dev/null
+++ b/keyboards/nix_studio/lilith/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+/* Set PLL M divider from 4 (F411 GENERIC default) to 8, because of 16 MHz crystal on board */
+#undef STM32_PLLM_VALUE
+#define STM32_PLLM_VALUE 8
diff --git a/keyboards/nix_studio/lilith/readme.md b/keyboards/nix_studio/lilith/readme.md
new file mode 100644
index 00000000000..b5c9adce097
--- /dev/null
+++ b/keyboards/nix_studio/lilith/readme.md
@@ -0,0 +1,27 @@
+# lilith
+
+
+
+Lilith by nix studio. 65% keyboard with gasket mount
+
+* Keyboard Maintainer: [Martin Arnstad](https://github.com/arnstadm)
+* Hardware Supported: Lilith PCB
+* Hardware Availability: https://www.antipode.no/products/nix-lilith
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile nix_studio/lilith -km default
+
+Flashing example for this keyboard:
+
+ qmk flash nix_studio/lilith -km default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the top left key and plug in the keyboard. This will also clear emulated EEPROM, so it is a good first step if the keyboard is misbehaving.
+* **Physical reset button**: Briefly press the button on the back of the PCB, located on the top right
+* **Keycode in layout**: There is no key mapped to `QK_BOOT` in the pre-created keymaps, but you may assign this key in any keymaps you create.
diff --git a/keyboards/nix_studio/lilith/rules.mk b/keyboards/nix_studio/lilith/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/nix_studio/lilith/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/planck/rev7/keymaps/peterfalken/config.h b/keyboards/planck/rev7/keymaps/peterfalken/config.h
new file mode 100644
index 00000000000..c3de26365b2
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/peterfalken/config.h
@@ -0,0 +1,49 @@
+/* Copyright 2015-2023 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#ifdef AUDIO_ENABLE
+# define STARTUP_SONG SONG(PLANCK_SOUND)
+// #define STARTUP_SONG SONG(NO_SOUND)
+
+# define DEFAULT_LAYER_SONGS \
+ { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+// #define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+// #define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
diff --git a/keyboards/planck/rev7/keymaps/peterfalken/keymap.c b/keyboards/planck/rev7/keymaps/peterfalken/keymap.c
new file mode 100644
index 00000000000..140149c4723
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/peterfalken/keymap.c
@@ -0,0 +1,80 @@
+// Copyright 2023 Peter.Falken (@PeterFalken)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "muse.h"
+#include "peterfalken.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | Ctrl | Opt | Cmd | LWR | Space | RSE | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ _______, KC_LCTL, KC_LOPT, KC_LCMD, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | ▽ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | ▽ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | RSET | ▽ | M.AP | M.AL | LPAD | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | SLEP |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CPWD | UN | CU | CO | PA | MV | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | ▽ | ▽ | ▽ | ▽ |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ QK_BOOT, _______, CK_M1, KC_MCTL, KC_LPAD, _______, _______, _______, _______, _______, _______, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CK_SLP,
+ CK_CW, _______, CK_CU, CK_CO, CK_PA, CK_MV, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
diff --git a/keyboards/planck/rev7/keymaps/peterfalken/readme.md b/keyboards/planck/rev7/keymaps/peterfalken/readme.md
new file mode 100644
index 00000000000..f64d682a51e
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/peterfalken/readme.md
@@ -0,0 +1,14 @@
+Copyright 2023 LEG @PeterFalken
+
+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 .
diff --git a/keyboards/planck/rev7/keymaps/peterfalken/rules.mk b/keyboards/planck/rev7/keymaps/peterfalken/rules.mk
new file mode 100644
index 00000000000..4db223543d7
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/peterfalken/rules.mk
@@ -0,0 +1,4 @@
+# Setup keymap QMK features
+# TODO: Check for space optimizations
+AUDIO_ENABLE = yes # Enable Audio Output
+ENCODER_ENABLE = no # Disable encoder
diff --git a/keyboards/planck/rev7/matrix.c b/keyboards/planck/rev7/matrix.c
index df1e627e831..c89c399a40d 100644
--- a/keyboards/planck/rev7/matrix.c
+++ b/keyboards/planck/rev7/matrix.c
@@ -19,6 +19,7 @@
#include "hal_pal.h"
#include "hal_pal_lld.h"
#include "quantum.h"
+#include
// STM32-specific watchdog config calculations
// timeout = 31.25us * PR * (RL + 1)
diff --git a/keyboards/plywrks/ply8x/config.h b/keyboards/plywrks/ply8x/config.h
new file mode 100644
index 00000000000..2180b9887f3
--- /dev/null
+++ b/keyboards/plywrks/ply8x/config.h
@@ -0,0 +1,14 @@
+// Copyright 2023 Ramon Imbao (@ramonimbao)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* RGB */
+#define WS2812_SPI SPID2
+#define WS2812_SPI_MOSI_PAL_MODE 0
+#define WS2812_SPI_SCK_PIN B13
+#define WS2812_SPI_SCK_PAL_MODE 0
+#define WS2812_EXTERNAL_PULLUP
+#define RGB_MATRIX_LED_COUNT 6
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/plywrks/ply8x/halconf.h b/keyboards/plywrks/ply8x/halconf.h
new file mode 100644
index 00000000000..e215e323c5d
--- /dev/null
+++ b/keyboards/plywrks/ply8x/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Ramon Imbao (@ramonimbao)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next
diff --git a/keyboards/plywrks/ply8x/info.json b/keyboards/plywrks/ply8x/info.json
new file mode 100644
index 00000000000..8c5766e2c1c
--- /dev/null
+++ b/keyboards/plywrks/ply8x/info.json
@@ -0,0 +1,978 @@
+{
+ "manufacturer": "plywrks",
+ "keyboard_name": "ply8x",
+ "maintainer": "ramonimbao",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "rows": ["B2", "B1", "B0", "A7", "A10", "A2"],
+ "cols": ["A9", "A8", "B12", "B11", "B10", "A6", "A5", "A4", "A15", "C13", "C14", "B9", "B7", "B6", "B5", "B4", "B3"]
+ },
+ "processor": "STM32F072",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x7905",
+ "vid": "0x706C"
+ },
+ "ws2812": {
+ "pin": "B15",
+ "driver": "spi"
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_rain": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "WS2812",
+ "layout": [
+ {"flags": 8, "matrix": [3, 0], "x":2, "y":27},
+ {"flags": 8, "matrix": [0,15], "x":211, "y":0},
+ {"flags": 2, "x":0, "y":0},
+ {"flags": 2, "x":10, "y":0},
+ {"flags": 2, "x":20, "y":0},
+ {"flags": 2, "x":30, "y":0}
+ ]
+ },
+ "layout_aliases": {
+ "LAYOUT_ansi": "LAYOUT_tkl_ansi",
+ "LAYOUT_iso": "LAYOUT_tkl_iso"
+ },
+ "community_layouts": [
+ "tkl_ansi",
+ "tkl_ansi_split_bs_rshift",
+ "tkl_ansi_tsangan",
+ "tkl_ansi_tsangan_split_bs_rshift",
+ "tkl_iso",
+ "tkl_iso_split_bs_rshift",
+ "tkl_iso_tsangan",
+ "tkl_iso_tsangan_split_bs_rshift"
+ ],
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "x":12.5, "y":5.25},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "x":12.5, "y":5.25},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25},
+ {"matrix": [2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25},
+ {"matrix": [2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25},
+ {"matrix": [2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "x":12.5, "y":5.25},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25},
+ {"matrix": [2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "x":12.5, "y":5.25},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/plywrks/ply8x/keymaps/default/keymap.c b/keyboards/plywrks/ply8x/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4ca5b29581d
--- /dev/null
+++ b/keyboards/plywrks/ply8x/keymaps/default/keymap.c
@@ -0,0 +1,47 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+
+#ifdef RGB_MATRIX_ENABLE
+bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
+ led_t led_state = host_keyboard_led_state();
+ if (!led_state.scroll_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(1, 0, 0, 0);
+ }
+
+ if (!led_state.caps_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0);
+ }
+
+ return true;
+}
+#endif
diff --git a/keyboards/plywrks/ply8x/keymaps/via/keymap.c b/keyboards/plywrks/ply8x/keymaps/via/keymap.c
new file mode 100644
index 00000000000..e357a16d89b
--- /dev/null
+++ b/keyboards/plywrks/ply8x/keymaps/via/keymap.c
@@ -0,0 +1,30 @@
+// 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_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_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_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+
+#ifdef RGB_MATRIX_ENABLE
+bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
+ led_t led_state = host_keyboard_led_state();
+ if (!led_state.scroll_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(1, 0, 0, 0);
+ }
+
+ if (!led_state.caps_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0);
+ }
+
+ return true;
+}
+#endif
diff --git a/keyboards/plywrks/ply8x/keymaps/via/rules.mk b/keyboards/plywrks/ply8x/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/plywrks/ply8x/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/plywrks/ply8x/mcuconf.h b/keyboards/plywrks/ply8x/mcuconf.h
new file mode 100644
index 00000000000..aceb2e3dfc0
--- /dev/null
+++ b/keyboards/plywrks/ply8x/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 Ramon Imbao (@ramonimbao)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef STM32_SPI_USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
diff --git a/keyboards/plywrks/ply8x/readme.md b/keyboards/plywrks/ply8x/readme.md
new file mode 100644
index 00000000000..91b49344e5d
--- /dev/null
+++ b/keyboards/plywrks/ply8x/readme.md
@@ -0,0 +1,26 @@
+# Plywrks ply8x
+
+
+
+F12 coreless keyboard PCB.
+
+* Keyboard Maintainer: [Ramon Imbao](https://github.com/ramonimbao)
+* Hardware Supported: STM32F072
+
+Make example for this keyboard (after setting up your build environment):
+
+ make plywrks/ply8x:default
+
+Flashing example for this keyboard:
+
+ make plywrks/ply8x: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**: Set the slide switch to `BOOTLOADER`, then briefly press the button on the back of the PCB.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/plywrks/ply8x/rules.mk b/keyboards/plywrks/ply8x/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/plywrks/ply8x/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/preonic/keymaps/dothtm60/config.h b/keyboards/preonic/keymaps/dothtm60/config.h
new file mode 100644
index 00000000000..718b2d4b650
--- /dev/null
+++ b/keyboards/preonic/keymaps/dothtm60/config.h
@@ -0,0 +1,47 @@
+/* Copyright 2015-2021 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#ifdef AUDIO_ENABLE
+# define STARTUP_SONG SONG(PREONIC_SOUND)
+// #define STARTUP_SONG SONG(NO_SOUND)
+
+# define DEFAULT_LAYER_SONGS \
+ { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) }
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+// #define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+#define MIDI_ADVANCED
+
+#define HOLD_ON_OTHER_KEY_PRESS
diff --git a/keyboards/preonic/keymaps/dothtm60/keymap.c b/keyboards/preonic/keymaps/dothtm60/keymap.c
new file mode 100644
index 00000000000..fbcdb9b7974
--- /dev/null
+++ b/keyboards/preonic/keymaps/dothtm60/keymap.c
@@ -0,0 +1,159 @@
+/* Copyright 2015-2021 Jack Humbert
+ *
+ * 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 7 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+
+#include QMK_KEYBOARD_H
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // [0] = LAYOUT_ortho_5x12(
+ [0] = LAYOUT_ortho_5x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
+ MO(2), KC_LCTL, KC_LALT, KC_LGUI, LT(1,KC_SPC), KC_SPC, KC_SPC, LT(1,KC_SPC), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ortho_5x12(
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, LGUI(KC_MINS), LGUI(KC_EQL), KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
+ KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, LGUI(KC_LCBR), LGUI(KC_RCBR), KC_LCBR, KC_RCBR, KC_DQUO, KC_QUOT, KC_BSLS,
+ KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, LGUI(KC_LBRC), LGUI(KC_RBRC), KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_PENT,
+ KC_TRNS, KC_UNDS, KC_PLUS, KC_MINS, KC_EQL, LGUI(KC_QUES), LGUI(KC_SLSH), KC_QUES, KC_SLSH, KC_QUES, LCAG(KC_UP), KC_TRNS,
+ MO(15), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LGUI(KC_SPC), LGUI(KC_SPC), KC_TRNS, KC_TRNS, LGUI(KC_LBRC), LCAG(KC_DOWN), LGUI(KC_RBRC)
+ ),
+
+ [2] = LAYOUT_ortho_5x12(
+ DB_TOGG, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
+ RGB_TOG, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_NO,
+ HYPR(KC_H), KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO,
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(15), KC_NO, KC_NO, MO(15), KC_TRNS, KC_HOME, KC_PGDN, KC_END
+ ),
+
+
+
+
+ // Musical keys
+
+ [7] = LAYOUT_ortho_5x12(
+
+ // Chromatic Scale Vertical
+ // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ KC_ESC, MI_C, MI_E, MI_Gs, MI_C1, MI_E1, MI_Gs1, MI_C2, MI_E2, MI_Gs2, MI_C3, MI_TR0,
+ KC_TAB, MI_Cs, MI_F, MI_A, MI_Cs1, MI_F1, MI_A1, MI_Cs2, MI_F2, MI_A2, MI_Cs3, MI_TRSU,
+ KC_SPC, MI_D, MI_Fs, MI_As, MI_D1, MI_Fs1, MI_As1, MI_D2, MI_Fs2, MI_As2, MI_D3, MI_TRSD,
+ MI_SUST, MI_Ds, MI_G, MI_B, MI_Ds1, MI_G1, MI_B1, MI_Ds2, MI_G2, MI_B2, MI_Ds3, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+ ),
+
+
+ [8] = LAYOUT_ortho_5x12(
+ // Pocket Operator Scale Vertical
+ //1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ KC_ESC, MI_C, MI_G, MI_C1, MI_G1, MI_C2, MI_G2, MI_C3, MI_G3, MI_C4, MI_G4, MI_TR0,
+ KC_TAB, MI_D, MI_Gs, MI_D1, MI_Gs1, MI_D2, MI_Gs2, MI_D3, MI_Gs3, MI_D4, MI_Gs4, MI_TRSU,
+ KC_SPC, MI_Ds, MI_As, MI_Ds1, MI_As1, MI_Ds2, MI_As2, MI_Ds3, MI_As3, MI_Ds4, MI_As4, MI_TRSD,
+ MI_SUST, MI_F, MI_B, MI_F1, MI_B1, MI_F2, MI_B2, MI_F3, MI_B3, MI_F4, MI_B4, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+ ),
+
+ [9] = LAYOUT_ortho_5x12(
+ // Major scale Vertical
+ // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ KC_ESC, MI_C, MI_G, MI_D1, MI_A1, MI_E2, MI_B2, MI_F3, MI_C4, MI_G4, MI_D5, MI_TR0,
+ KC_TAB, MI_D, MI_A, MI_E1, MI_B1, MI_F2, MI_C3, MI_G3, MI_D4, MI_A4, MI_E5, MI_TRSU,
+ KC_SPC, MI_E, MI_B, MI_F1, MI_C2, MI_G2, MI_D3, MI_A3, MI_E4, MI_B4, MI_F5, MI_TRSD,
+ MI_SUST, MI_F, MI_C1, MI_G1, MI_D2, MI_A2, MI_E3, MI_B3, MI_F4, MI_C5, MI_G5, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+ ),
+
+ [10] = LAYOUT_ortho_5x12(
+ // Black Keys Vertical
+ // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ KC_ESC, MI_C, MI_A, MI_G1, MI_F2, MI_D3, MI_C4, MI_A4, MI_G5, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_C1, MI_A1, MI_G2, MI_F3, MI_D4, MI_C5, MI_A5, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_F, MI_D1, MI_C2, MI_A2, MI_G3, MI_F4, MI_D5, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_G, MI_F1, MI_D2, MI_C3, MI_A3, MI_G4, MI_F5, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+ ),
+
+
+ [11] = LAYOUT_ortho_5x12(
+ // Chromatic Scale Horizontal
+ //1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ KC_ESC, MI_C, MI_Cs, MI_D, MI_Ds, MI_E, MI_F, MI_Fs, MI_G, MI_Gs, MI_A, MI_TR0,
+ KC_TAB, MI_As, MI_B, MI_C1, MI_Cs1, MI_D1, MI_Ds1, MI_E1, MI_F1, MI_Fs1, MI_G1, MI_TRSU,
+ KC_SPC, MI_Gs1, MI_A1, MI_As1, MI_B1, MI_C2, MI_Cs2, MI_D2, MI_Ds2, MI_E2, MI_F2, MI_TRSD,
+ MI_SUST, MI_Fs2, MI_G2, MI_Gs2, MI_A2, MI_As2, MI_B2, MI_C3, MI_Cs3, MI_D3, MI_Ds3, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+ [12] = LAYOUT_ortho_5x12(
+ // Pocket Operator Scale Horizontal
+ //1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ KC_ESC, MI_C, MI_D, MI_Ds, MI_F, MI_G, MI_Gs, MI_As, MI_B, MI_C1, MI_D1, MI_TR0,
+ KC_TAB, MI_Ds1, MI_F1, MI_G1, MI_Gs1, MI_As1, MI_B1, MI_C2, MI_D2, MI_Ds2, MI_F2, MI_TRSU,
+ KC_SPC, MI_G2, MI_Gs2, MI_As2, MI_B2, MI_C3, MI_D3, MI_Ds3, MI_F3, MI_G3, MI_Gs3, MI_TRSD,
+ MI_SUST, MI_As3, MI_B3, MI_C4, MI_D4, MI_Ds4, MI_F4, MI_G4, MI_Gs4, MI_As4, MI_B4, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+
+
+ ),
+
+
+ [13] = LAYOUT_ortho_5x12(
+ // Major scale Horizontal
+ //1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ KC_ESC, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C1, MI_D1, MI_E1, MI_TR0,
+ KC_TAB, MI_F1, MI_G1, MI_A1, MI_B1, MI_C2, MI_D2, MI_E2, MI_F2, MI_G2, MI_A2, MI_TRSU,
+ KC_SPC, MI_B2, MI_C3, MI_D3, MI_E3, MI_F3, MI_G3, MI_A3, MI_B3, MI_C4, MI_D4, MI_TRSD,
+ MI_SUST, MI_E4, MI_F4, MI_G4, MI_A4, MI_B4, MI_C5, MI_D5, MI_E5, MI_F5, MI_G5, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+
+ ),
+ [14] = LAYOUT_ortho_5x12(
+ // Black Keys Horizontal
+ //1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ KC_ESC, MI_C, MI_D, MI_F, MI_G, MI_A, MI_C1, MI_D1, MI_F1, MI_G1, MI_A1, MI_TR0,
+ KC_TAB, MI_C2, MI_D2, MI_F2, MI_G2, MI_A2, MI_C3, MI_D3, MI_F3, MI_G3, MI_A3, MI_TRSU,
+ KC_SPC, MI_C4, MI_D4, MI_F4, MI_G4, MI_A4, MI_C, MI_D, MI_F, MI_G, MI_A, MI_TRSD,
+ MI_SUST, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+
+
+
+
+
+
+ // Settings
+ [15] = LAYOUT_ortho_5x12(
+ DB_TOGG, MI_CH1, MI_CH2, MI_CH3, MI_CH4, MI_CH5, MI_CH6, MI_CH7, MI_CH8, AU_TOGG, KC_NO, QK_BOOT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_NO, DF(11), DF(12), DF(13), DF(14), KC_NO, DB_TOGG,
+ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_NO, DF(7), DF(8), DF(9), DF(10), KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS, DF(0), DF(0), KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO
+ )
+
+
+};
+
diff --git a/keyboards/preonic/keymaps/dothtm60/rules.mk b/keyboards/preonic/keymaps/dothtm60/rules.mk
new file mode 100644
index 00000000000..4745e5384a7
--- /dev/null
+++ b/keyboards/preonic/keymaps/dothtm60/rules.mk
@@ -0,0 +1,3 @@
+SRC += muse.c
+
+MIDI_ENABLE = yes
diff --git a/keyboards/qvex/lynepad2/config.h b/keyboards/qvex/lynepad2/config.h
new file mode 100644
index 00000000000..7b9d3ce306e
--- /dev/null
+++ b/keyboards/qvex/lynepad2/config.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2023 QVEX Tech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 5
+
+//Digital joystick (4-way switch + encoder)
+#define PIN_JU D4
+#define PIN_JD B6
+#define PIN_JL D7
+#define PIN_JR B4
+#define PIN_JC C6
+
+//Thumbwheel
+#define PIN_TC D2
+
+//Backlighting
+#define BACKLIGHT_DEFAULT_LEVEL 5
+
+//RGB arc
+#define RGBLIGHT_DEFAULT_VAL 64
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/info.json b/keyboards/qvex/lynepad2/info.json
new file mode 100644
index 00000000000..02b6198bcd8
--- /dev/null
+++ b/keyboards/qvex/lynepad2/info.json
@@ -0,0 +1,69 @@
+{
+ "manufacturer": "QVEX Tech",
+ "keyboard_name": "Lynepad",
+ "maintainer": "QVEX-Tech",
+ "bootloader": "caterina",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": [ "F0", "F1", "F4", "F5"],
+ "rows": [ "C7", "F7" ,"F6", null, null]
+ },
+ "processor": "atmega32u4",
+ "url": "https://qvex.eu",
+ "usb": {
+ "device_version": "1.0.0",
+ "vid": "0x04D8",
+ "pid": "0xE678"
+ },
+ "encoder": {
+ "rotary": [
+ {"pin_a": "D6", "pin_b": "B5", "resolution": 2},
+ {"pin_a": "D1", "pin_b": "D0", "resolution": 2}
+ ]
+ },
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "rgblight": true
+ },
+ "rgblight": {
+ "led_count": 5,
+ "max_brightness": 192,
+ "sleep": true
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "backlight": {
+ "breathing": true,
+ "levels": 8,
+ "max_brightness": 192,
+ "pin": "B7"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [1, 3], "x": 3, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [3, 0], "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1, "y": 3 },
+ { "matrix": [3, 2], "x": 2, "y": 3 },
+ { "matrix": [3, 3], "x": 3, "y": 3 },
+ { "matrix": [4, 0], "x": 0, "y": 4 },
+ { "matrix": [4, 1], "x": 1, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/default/keymap.c b/keyboards/qvex/lynepad2/keymaps/default/keymap.c
new file mode 100644
index 00000000000..22286170f13
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/default/keymap.c
@@ -0,0 +1,142 @@
+/*
+Copyright 2023 QVEX Tech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+#define RGB_HUE_LAYER0 0 //default layer
+#define RGB_HUE_LAYER1 50
+#define RGB_HUE_LAYER2 100
+#define RGB_HUE_LAYER3 150
+#define RGB_HUE_LAYER4 200
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT //Default
+ (
+ G(KC_D), G(KC_TAB), C(G(KC_LEFT)), C(G(KC_RIGHT)),
+ G(KC_E), XXXXXXX, C(KC_C), C(KC_V),
+ KC_LGUI, XXXXXXX, XXXXXXX,
+
+ KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, //joystick up, down, left, right
+ KC_MPLY, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [1] = LAYOUT //KiCad
+ (
+ KC_ESC, KC_R, KC_M, KC_DEL,
+ KC_V, KC_G, KC_D, KC_X,
+ MO(3), KC_B, C(KC_V),
+
+ KC_PLUS, KC_MINUS, C(KC_Y), C(KC_Z), //joystick up, down, left, right
+ KC_PGDN, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [2] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [3] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [4] = LAYOUT
+ (
+ TO(0), TO(1), TO(2), TO(3),
+ BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX,
+ QK_RBT, EE_CLR, QK_BOOT,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ RGB_TOG, XXXXXXX //joystick center push, thumbwheel push
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU),
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU)
+ },
+
+ [1] = {
+ ENCODER_CCW_CW(LSFT(KC_W), KC_W),
+ ENCODER_CCW_CW(KC_N, LSFT(KC_N))
+ },
+
+ [2] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [3] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [4] = {
+ ENCODER_CCW_CW(RGB_VAD, RGB_VAI),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ }
+};
+#endif
+
+//set only hue, retain saturation, and value
+void rgblight_sethue_noeeprom(uint8_t hue){
+ //only if rgb led ring is on
+ if (rgblight_get_mode()) {
+ rgblight_sethsv_noeeprom(hue,rgblight_get_sat(),rgblight_get_val());
+ }
+}
+
+//set correct layer hue on layer change
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case 1:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER1);
+ break;
+ case 2:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER2);
+ break;
+ case 3:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER3);
+ break;
+ case 4:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER4);
+ break;
+ default:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+ break;
+
+ }
+ return state;
+}
+
+//set default layer hue upon init
+void keyboard_post_init_user(void) {
+ rgblight_init();
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+}
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/default/rules.mk b/keyboards/qvex/lynepad2/keymaps/default/rules.mk
new file mode 100644
index 00000000000..a40474b4d5c
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c b/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c
new file mode 100644
index 00000000000..ead8ab40a6d
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c
@@ -0,0 +1,142 @@
+/*
+Copyright 2023 QVEX Tech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+#define RGB_HUE_LAYER0 0 //default layer
+#define RGB_HUE_LAYER1 50
+#define RGB_HUE_LAYER2 100
+#define RGB_HUE_LAYER3 150
+#define RGB_HUE_LAYER4 200
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT //Default
+ (
+ KC_MS_BTN4, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1,
+ KC_MS_BTN5, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT,
+ KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2,
+
+ KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, //joystick up, down, left, right
+ KC_MPLY, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [1] = LAYOUT //KiCad
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [2] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [3] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [4] = LAYOUT
+ (
+ TO(0), TO(1), TO(2), TO(3),
+ BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX,
+ QK_RBT, EE_CLR, QK_BOOT,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ RGB_TOG, XXXXXXX //joystick center push, thumbwheel push
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU),
+ ENCODER_CCW_CW(KC_MS_WH_DOWN, KC_MS_WH_UP)
+ },
+
+ [1] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [2] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [3] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [4] = {
+ ENCODER_CCW_CW(RGB_VAD, RGB_VAI),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ }
+};
+#endif
+
+//set only hue, retain saturation, and value
+void rgblight_sethue_noeeprom(uint8_t hue) {
+ //only if rgb led ring is on
+ if (rgblight_get_mode()) {
+ rgblight_sethsv_noeeprom(hue,rgblight_get_sat(),rgblight_get_val());
+ }
+}
+
+//set correct layer hue on layer change
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case 1:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER1);
+ break;
+ case 2:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER2);
+ break;
+ case 3:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER3);
+ break;
+ case 4:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER4);
+ break;
+ default:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+ break;
+
+ }
+ return state;
+}
+
+//set default layer hue upon init
+void keyboard_post_init_user(void) {
+ rgblight_init();
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+}
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk b/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk
new file mode 100644
index 00000000000..a40474b4d5c
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/via/keymap.c b/keyboards/qvex/lynepad2/keymaps/via/keymap.c
new file mode 100644
index 00000000000..ff86cdc7fa1
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/via/keymap.c
@@ -0,0 +1,142 @@
+/*
+Copyright 2023 QVEX Tech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+#define RGB_HUE_LAYER0 0 //default layer
+#define RGB_HUE_LAYER1 50
+#define RGB_HUE_LAYER2 100
+#define RGB_HUE_LAYER3 150
+#define RGB_HUE_LAYER4 200
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT //Default
+ (
+ G(KC_D), G(KC_TAB), C(G(KC_LEFT)), C(G(KC_RIGHT)),
+ G(KC_E), XXXXXXX, C(KC_C), C(KC_V),
+ KC_LGUI, XXXXXXX, XXXXXXX,
+
+ KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, //joystick up, down, left, right
+ KC_MPLY, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [1] = LAYOUT //KiCad
+ (
+ KC_ESC, KC_R, KC_M, KC_DEL,
+ KC_V, KC_G, KC_D, KC_X,
+ MO(3), KC_B, C(KC_V),
+
+ KC_PLUS, KC_MINUS, C(KC_Y), C(KC_Z), //joystick up, down, left, right
+ KC_PGDN, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [2] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [3] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [4] = LAYOUT
+ (
+ TO(0), TO(1), TO(2), TO(3),
+ BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX,
+ QK_RBT, EE_CLR, QK_BOOT,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ RGB_TOG, XXXXXXX //joystick center push, thumbwheel push
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU),
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU)
+ },
+
+ [1] = {
+ ENCODER_CCW_CW(LSFT(KC_W), KC_W),
+ ENCODER_CCW_CW(KC_N, LSFT(KC_N))
+ },
+
+ [2] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [3] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [4] = {
+ ENCODER_CCW_CW(RGB_VAD, RGB_VAI),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ }
+};
+#endif
+
+//set only hue, retain saturation, and value
+void rgblight_sethue_noeeprom(uint8_t hue) {
+ //only if rgb led ring is on
+ if (rgblight_get_mode()) {
+ rgblight_sethsv_noeeprom(hue,rgblight_get_sat(),rgblight_get_val());
+ }
+}
+
+//set correct layer hue on layer change
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case 1:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER1);
+ break;
+ case 2:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER2);
+ break;
+ case 3:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER3);
+ break;
+ case 4:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER4);
+ break;
+ default:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+ break;
+
+ }
+ return state;
+}
+
+//set default layer hue upon init
+void keyboard_post_init_user(void) {
+ rgblight_init();
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+}
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/via/rules.mk b/keyboards/qvex/lynepad2/keymaps/via/rules.mk
new file mode 100644
index 00000000000..6ccd6d91943
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+ENCODER_MAP_ENABLE = yes
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/matrix.c b/keyboards/qvex/lynepad2/matrix.c
new file mode 100644
index 00000000000..878ee6e2f72
--- /dev/null
+++ b/keyboards/qvex/lynepad2/matrix.c
@@ -0,0 +1,119 @@
+/*
+Copyright 2023 QVEX Tech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include
+#include
+#include
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+#include "quantum.h"
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
+extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values
+
+static void select_row(uint8_t row) {
+ setPinOutput(row_pins[row]);
+ writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row) {
+ setPinInputHigh(row_pins[row]);
+}
+
+static void unselect_rows(void) {
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+ setPinInputHigh(PIN_JU);
+ setPinInputHigh(PIN_JD);
+ setPinInputHigh(PIN_JL);
+ setPinInputHigh(PIN_JR);
+ setPinInputHigh(PIN_JC);
+ setPinInputHigh(PIN_TC);
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+ if (current_row > 2) return false;
+
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ current_matrix[current_row] = 0;
+
+ select_row(current_row);
+ wait_us(30);
+
+ for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+ uint8_t pin_state = readPin(col_pins[col_index]);
+ current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
+ }
+
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+static bool read_encoder_switches(matrix_row_t current_matrix[]) {
+ matrix_row_t last_fourth_row = current_matrix[3];
+ matrix_row_t last_fifth_row = current_matrix[4];
+
+ current_matrix[3] = 0;
+ current_matrix[4] = 0;
+
+ current_matrix[4] |= !readPin(PIN_TC) ? (1 << 1) : 0;
+
+ if (!readPin(PIN_JC)) {
+ if (!readPin(PIN_JU)) {
+ current_matrix[3] |= (1 << 0);
+ } else if (!readPin(PIN_JD)) {
+ current_matrix[3] |= (1 << 1);
+ } else if (!readPin(PIN_JL)) {
+ current_matrix[3] |= (1 << 2);
+ } else if (!readPin(PIN_JR)) {
+ current_matrix[3] |= (1 << 3);
+ } else {
+ current_matrix[4] |= (1 << 0);
+ }
+ }
+
+ return last_fourth_row != current_matrix[3] || last_fifth_row != current_matrix[4];
+}
+
+void matrix_init_custom(void) {
+ init_pins();
+}
+
+bool matrix_scan_custom(void) {
+ bool changed = false;
+
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+ changed |= read_cols_on_row(raw_matrix, current_row);
+ }
+
+ changed |= read_encoder_switches(raw_matrix);
+
+ return changed;
+}
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/readme.md b/keyboards/qvex/lynepad2/readme.md
new file mode 100644
index 00000000000..c374b617c3e
--- /dev/null
+++ b/keyboards/qvex/lynepad2/readme.md
@@ -0,0 +1,27 @@
+# QVEX Lynepad 2
+
+
+
+*Macropad with 11 keys, thumbwheel, and a rotary 4-way switch*
+
+* Keyboard Maintainer: [QVEX Tech](https://github.com/QVEX-Tech) ([seflm](https://github.com/seflm))
+* Hardware Supported: QVEX Lynepad
+* Hardware Availability: [QVEX Lynepad on Tindie](https://www.tindie.com/products/qvex_tech/lynepad-21-hot-swap-macropad-w-joystick/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make qvex/lynepad:default
+
+Flashing example for this keyboard:
+
+ make qvex/lynepad: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 top left key and plug in the keyboard
+* **Physical reset button**: Briefly press the reset button on the back of the Lynepad using SIM tool (rev.2.0 or newer)
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/qvex/lynepad2/rules.mk b/keyboards/qvex/lynepad2/rules.mk
new file mode 100644
index 00000000000..c25bdff0cf9
--- /dev/null
+++ b/keyboards/qvex/lynepad2/rules.mk
@@ -0,0 +1,2 @@
+CUSTOM_MATRIX = lite
+SRC += matrix.c
\ No newline at end of file
diff --git a/keyboards/rmkeebs/rm_fullsize/info.json b/keyboards/rmkeebs/rm_fullsize/info.json
new file mode 100644
index 00000000000..4b02137ad3e
--- /dev/null
+++ b/keyboards/rmkeebs/rm_fullsize/info.json
@@ -0,0 +1,155 @@
+{
+ "manufacturer": "RuckerMachine",
+ "keyboard_name": "rm_fullsize",
+ "maintainer": "RuckerMachine",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "encoder": true
+ },
+ "matrix_pins": {
+ "cols": ["GP22", "GP23", "GP24", "GP25", "GP26", "GP27", "GP28", "GP29", "GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP12", "GP13", "GP14", "GP16", "GP17"],
+ "rows": ["GP8", "GP7", "GP9", "GP20", "GP18", "GP19"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "GP11", "pin_b": "GP10" }
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0.25 },
+ { "matrix": [0, 2], "x": 2, "y": 0.25 },
+ { "matrix": [0, 3], "x": 3, "y": 0.25 },
+ { "matrix": [0, 4], "x": 4, "y": 0.25 },
+ { "matrix": [0, 5], "x": 5, "y": 0.25 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0.25 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0.25 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0.25 },
+ { "matrix": [0, 9], "x": 9.5, "y": 0.25 },
+ { "matrix": [0, 10], "x": 11, "y": 0.25 },
+ { "matrix": [0, 11], "x": 12, "y": 0.25 },
+ { "matrix": [0, 12], "x": 13, "y": 0.25 },
+ { "matrix": [0, 13], "x": 14, "y": 0.25 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0.25 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0.25 },
+ { "matrix": [3, 15], "x": 17.25, "y": 0.25 },
+ { "matrix": [0, 16], "x": 18.5, "y": 0.25 },
+ { "matrix": [0, 17], "x": 19.5, "y": 0.25 },
+ { "matrix": [0, 18], "x": 20.5, "y": 0.25 },
+ { "matrix": [0, 19], "x": 21.75, "y": 0 },
+
+ { "matrix": [1, 0], "x": 0, "y": 1.5 },
+ { "matrix": [1, 1], "x": 1, "y": 1.5 },
+ { "matrix": [1, 2], "x": 2, "y": 1.5 },
+ { "matrix": [1, 3], "x": 3, "y": 1.5 },
+ { "matrix": [1, 4], "x": 4, "y": 1.5 },
+ { "matrix": [1, 5], "x": 5, "y": 1.5 },
+ { "matrix": [1, 6], "x": 6, "y": 1.5 },
+ { "matrix": [1, 7], "x": 7, "y": 1.5 },
+ { "matrix": [1, 8], "x": 8, "y": 1.5 },
+ { "matrix": [1, 9], "x": 9, "y": 1.5 },
+ { "matrix": [1, 10], "x": 10, "y": 1.5 },
+ { "matrix": [1, 11], "x": 11, "y": 1.5 },
+ { "matrix": [1, 12], "x": 12, "y": 1.5 },
+ { "matrix": [1, 13], "x": 13, "y": 1.5 },
+ { "matrix": [2, 13], "x": 14, "y": 1.5 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.5 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.5 },
+ { "matrix": [4, 15], "x": 17.25, "y": 1.5 },
+ { "matrix": [1, 16], "x": 18.5, "y": 1.5 },
+ { "matrix": [1, 17], "x": 19.5, "y": 1.5 },
+ { "matrix": [1, 18], "x": 20.5, "y": 1.5 },
+ { "matrix": [1, 19], "x": 21.5, "y": 1.5 },
+
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.5 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.5 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.5 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.5 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.5 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.5 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.5 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.5 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.5 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.5 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.5 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.5 },
+ { "matrix": [2, 12], "x": 12.5, "y": 2.5 },
+ { "matrix": [3, 13], "w": 1.5, "x": 13.5, "y": 2.5 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.5 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.5 },
+ { "matrix": [5, 15], "x": 17.25, "y": 2.5 },
+ { "matrix": [2, 16], "x": 18.5, "y": 2.5 },
+ { "matrix": [2, 17], "x": 19.5, "y": 2.5 },
+ { "matrix": [2, 18], "x": 20.5, "y": 2.5 },
+ { "matrix": [2, 19], "x": 21.5, "y": 2.5 },
+
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.5 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.5 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.5 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.5 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.5 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.5 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.5 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.5 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.5 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.5 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.5 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.5 },
+ { "matrix": [3, 12], "w": 2.25, "x": 12.75, "y": 3.5 },
+ { "matrix": [3, 16], "x": 18.5, "y": 3.5 },
+ { "matrix": [3, 17], "x": 19.5, "y": 3.5 },
+ { "matrix": [3, 18], "x": 20.5, "y": 3.5 },
+ { "matrix": [3, 19], "x": 21.5, "y": 3.5 },
+
+ { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.5 },
+ { "matrix": [4, 1], "x": 2.25, "y": 4.5 },
+ { "matrix": [4, 2], "x": 3.25, "y": 4.5 },
+ { "matrix": [4, 3], "x": 4.25, "y": 4.5 },
+ { "matrix": [4, 4], "x": 5.25, "y": 4.5 },
+ { "matrix": [4, 5], "x": 6.25, "y": 4.5 },
+ { "matrix": [4, 6], "x": 7.25, "y": 4.5 },
+ { "matrix": [4, 7], "x": 8.25, "y": 4.5 },
+ { "matrix": [4, 8], "x": 9.25, "y": 4.5 },
+ { "matrix": [4, 9], "x": 10.25, "y": 4.5 },
+ { "matrix": [4, 10], "x": 11.25, "y": 4.5 },
+ { "matrix": [4, 11], "w": 2.75, "x": 12.25, "y": 4.5 },
+ { "matrix": [3, 14], "x": 16.25, "y": 4.5 },
+ { "matrix": [4, 16], "x": 18.5, "y": 4.5 },
+ { "matrix": [4, 17], "x": 19.5, "y": 4.5 },
+ { "matrix": [4, 18], "x": 20.5, "y": 4.5 },
+ { "matrix": [4, 19], "x": 21.5, "y": 4.5 },
+
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.5 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.5 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.5 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.5 },
+ { "matrix": [5, 9], "w": 1.25, "x": 10, "y": 5.5 },
+ { "matrix": [5, 10], "w": 1.25, "x": 11.25, "y": 5.5 },
+ { "matrix": [5, 11], "w": 1.25, "x": 12.5, "y": 5.5 },
+ { "matrix": [5, 12], "w": 1.25, "x": 13.75, "y": 5.5 },
+ { "matrix": [5, 13], "x": 15.25, "y": 5.5 },
+ { "matrix": [4, 14], "x": 16.25, "y": 5.5 },
+ { "matrix": [5, 14], "x": 17.25, "y": 5.5 },
+ { "matrix": [5, 16], "x": 18.5, "y": 5.5 },
+ { "matrix": [5, 17], "x": 19.5, "y": 5.5 },
+ { "matrix": [5, 18], "x": 20.5, "y": 5.5 },
+ { "matrix": [5, 19], "x": 21.5, "y": 5.5 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/rmkeebs/rm_fullsize/keymaps/default/keymap.c b/keyboards/rmkeebs/rm_fullsize/keymaps/default/keymap.c
new file mode 100644
index 00000000000..c94cc2e526e
--- /dev/null
+++ b/keyboards/rmkeebs/rm_fullsize/keymaps/default/keymap.c
@@ -0,0 +1,54 @@
+// Copyright 2022 JRucker (@JRucker)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+ KC_00 = QK_USER
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* ┌───┐
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┐ │ENC│
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│ │PLA│PRV│NXT│ └───┘
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Und│Bsp│ │Ins│Hom│PgU│ │Num│ / │ * │ - │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ │ 7 │ 8 │ 9 │ = │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┼───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ │ 4 │ 5 │ 6 │ + │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ ├───┼───┼───┼───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │Ent│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┼───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │ │ 0 │ 00│ . │Del│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───┴───┴───┴───┘
+ */
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_MPLY, KC_MPRV, KC_MNXT, KC_MUTE,
+
+ 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, C(KC_Z), KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PEQL,
+ 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_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_00, KC_PDOT, KC_PENT
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_00:
+ if (record->event.pressed) {
+ // when keycode KC_00 is pressed
+ SEND_STRING("00");
+ }
+ return false;
+ }
+ return true;
+};
diff --git a/keyboards/rmkeebs/rm_fullsize/keymaps/default/rules.mk b/keyboards/rmkeebs/rm_fullsize/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/rmkeebs/rm_fullsize/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/rmkeebs/rm_fullsize/readme.md b/keyboards/rmkeebs/rm_fullsize/readme.md
new file mode 100644
index 00000000000..5158d447c6f
--- /dev/null
+++ b/keyboards/rmkeebs/rm_fullsize/readme.md
@@ -0,0 +1,26 @@
+# rm_fullsize
+
+
+
+A fullsized keyboard with multiple layout options and a big knob. The case is manchined out of 6061 Aluminum by Rucker Machine in the USA.
+
+* Keyboard Maintainer: [Rucker Machine](https://github.com/RuckerMachine)
+* Hardware Supported: RM Fullsized PCB, RP2040 controller
+* Hardware Availability: [RM Fullsized](https://www.rmkeebs.com/product/rm-fullsized/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rmkeebs/rm_fullsize:default
+
+Flashing example for this keyboard:
+
+ make rmkeebs/rm_fullsize:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (Escape key) and plug in the keyboard
+* **Physical reset button**: Hold down the button on the back of the PCB labeled BOOTLOADER, then press and hold the button labeled RESET for 3 seconds, then release both buttons.
diff --git a/keyboards/rmkeebs/rm_fullsize/rules.mk b/keyboards/rmkeebs/rm_fullsize/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/rmkeebs/rm_fullsize/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/skeletonkbd/frost68/config.h b/keyboards/skeletonkbd/frost68/config.h
new file mode 100644
index 00000000000..eaf7a31fb6e
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/config.h
@@ -0,0 +1,61 @@
+// Copyright 2023 skeletonkbd (@skeletonkbd)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define WS2812_PIO_USE_PIO1
+#define RGB_MATRIX_LED_COUNT 68
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define USB_SUSPEND_WAKEUP_DELAY 200
+
+#define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+#define ENABLE_RGB_MATRIX_BAND_SAT
+#define ENABLE_RGB_MATRIX_BAND_VAL
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#define ENABLE_RGB_MATRIX_DUAL_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#define ENABLE_RGB_MATRIX_RAINDROPS
+#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#define ENABLE_RGB_MATRIX_HUE_BREATHING
+#define ENABLE_RGB_MATRIX_HUE_PENDULUM
+#define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+#define ENABLE_RGB_MATRIX_PIXEL_FLOW
+#define ENABLE_RGB_MATRIX_PIXEL_RAIN
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+#define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_UP_DOWN
diff --git a/keyboards/skeletonkbd/frost68/frost68.c b/keyboards/skeletonkbd/frost68/frost68.c
new file mode 100644
index 00000000000..4bfd3fa28f3
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/frost68.c
@@ -0,0 +1,18 @@
+// Copyright 2023 skeletonkbd (@skeletonkbd)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
+ return false;
+ }
+ if (host_keyboard_led_state().caps_lock) {
+ for (uint8_t i = led_min; i < led_max; i++) {
+ if (g_led_config.flags[i] & LED_FLAG_INDICATOR) {
+ rgb_matrix_set_color(i, RGB_RED);
+ }
+ }
+ }
+ return false;
+}
diff --git a/keyboards/skeletonkbd/frost68/info.json b/keyboards/skeletonkbd/frost68/info.json
new file mode 100644
index 00000000000..3099b26ecaa
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/info.json
@@ -0,0 +1,182 @@
+{
+ "manufacturer": "skeletonkbd",
+ "keyboard_name": "Frost68",
+ "maintainer": "skeletonkbd",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP21", "GP22", "GP23", "GP24", "GP25", "GP26", "GP28", "GP3", "GP4", "GP5", "GP6", "GP9", "GP10", "GP11", "GP12", "GP13"],
+ "rows": ["GP29", "GP27", "GP20", "GP19", "GP18"]
+ },
+ "processor": "RP2040",
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP0"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "layout": [
+ {"matrix": [0, 0], "x": 33.1, "y": 3.7, "flags": 4},
+ {"matrix": [0, 1], "x": 45.7, "y": 3.7, "flags": 4},
+ {"matrix": [0, 2], "x": 58.3, "y": 2.4, "flags": 4},
+ {"matrix": [0, 3], "x": 71.1, "y": 6.4, "flags": 4},
+ {"matrix": [0, 4], "x": 83.4, "y": 10.4, "flags": 4},
+ {"matrix": [0, 5], "x": 95.7, "y": 14.3, "flags": 4},
+ {"matrix": [0, 6], "x": 108, "y": 18.3, "flags": 4},
+ {"matrix": [1, 5], "x": 99.3, "y": 35, "flags": 4},
+ {"matrix": [1, 4], "x": 86.9, "y": 31, "flags": 4},
+ {"matrix": [1, 3], "x": 74.6, "y": 27, "flags": 4},
+ {"matrix": [1, 2], "x": 62.3, "y": 23.1, "flags": 4},
+ {"matrix": [1, 1], "x": 49.2, "y": 22.7, "flags": 4},
+ {"matrix": [1, 0], "x": 33.5, "y": 22.7, "flags": 1},
+ {"matrix": [2, 0], "x": 32.3, "y": 41.8, "flags": 1},
+ {"matrix": [2, 1], "x": 49.7, "y": 41.8, "flags": 4},
+ {"matrix": [2, 2], "x": 62.7, "y": 42.7, "flags": 4},
+ {"matrix": [2, 3], "x": 75.1, "y": 46.7, "flags": 4},
+ {"matrix": [2, 4], "x": 87.4, "y": 50.6, "flags": 4},
+ {"matrix": [2, 5], "x": 99.7, "y": 54.6, "flags": 4},
+ {"matrix": [3, 5], "x": 103.3, "y": 75.2, "flags": 4},
+ {"matrix": [3, 4], "x": 90.9, "y": 71.2, "flags": 4},
+ {"matrix": [3, 3], "x": 78.6, "y": 67.3, "flags": 4},
+ {"matrix": [3, 2], "x": 66.3, "y": 63.3, "flags": 4},
+ {"matrix": [3, 1], "x": 53.3, "y": 60.8, "flags": 4},
+ {"matrix": [3, 0], "x": 32.8, "y": 60.8, "flags": 1},
+ {"matrix": [4, 0], "x": 28.1, "y": 79.9, "flags": 1},
+ {"matrix": [4, 1], "x": 47, "y": 79.9, "flags": 1},
+ {"matrix": [4, 3], "x": 80.6, "y": 87.4, "flags": 4},
+ {"matrix": [4, 5], "x": 100.6, "y": 93.8, "flags": 4},
+ {"matrix": [4, 7], "x": 140.2, "y": 90.4, "flags": 4},
+ {"matrix": [4, 10], "x": 166.4, "y": 82.5, "flags": 1},
+ {"matrix": [4, 12], "x": 195.7, "y": 79.9, "flags": 1},
+ {"matrix": [4, 13], "x": 211.4, "y": 79.9, "flags": 4},
+ {"matrix": [4, 14], "x": 224, "y": 79.9, "flags": 4},
+ {"matrix": [4, 15], "x": 236.6, "y": 79.9, "flags": 4},
+ {"matrix": [3, 14], "x": 224, "y": 60.8, "flags": 4},
+ {"matrix": [3, 13], "x": 206.7, "y": 60.8, "flags": 1},
+ {"matrix": [3, 12], "x": 189.4, "y": 60.8, "flags": 4},
+ {"matrix": [3, 11], "x": 176.8, "y": 60.8, "flags": 4},
+ {"matrix": [3, 10], "x": 163.7, "y": 63.3, "flags": 4},
+ {"matrix": [3, 9], "x": 151.4, "y": 67.3, "flags": 4},
+ {"matrix": [3, 8], "x": 139.1, "y": 71.2, "flags": 4},
+ {"matrix": [3, 7], "x": 126.8, "y": 75.2, "flags": 4},
+ {"matrix": [2, 7], "x": 130.3, "y": 54.6, "flags": 4},
+ {"matrix": [2, 8], "x": 142.6, "y": 50.6, "flags": 4},
+ {"matrix": [2, 9], "x": 155, "y": 46.7, "flags": 4},
+ {"matrix": [2, 10], "x": 167.3, "y": 42.7, "flags": 4},
+ {"matrix": [2, 11], "x": 180.4, "y": 41.8, "flags": 4},
+ {"matrix": [2, 12], "x": 193, "y": 41.8, "flags": 4},
+ {"matrix": [2, 13], "x": 213.4, "y": 41.8, "flags": 4},
+ {"matrix": [2, 15], "x": 236.6, "y": 39.6, "flags": 4},
+ {"matrix": [1, 15], "x": 235.3, "y": 20.5, "flags": 4},
+ {"matrix": [1, 14], "x": 217.4, "y": 22.7, "flags": 4},
+ {"matrix": [1, 13], "x": 201.6, "y": 22.7, "flags": 4},
+ {"matrix": [1, 12], "x": 189, "y": 22.7, "flags": 4},
+ {"matrix": [1, 11], "x": 176.4, "y": 22, "flags": 4},
+ {"matrix": [1, 10], "x": 163.4, "y": 24.5, "flags": 4},
+ {"matrix": [1, 9], "x": 151.1, "y": 28.4, "flags": 4},
+ {"matrix": [1, 8], "x": 138.7, "y": 32.4, "flags": 4},
+ {"matrix": [1, 7], "x": 126.4, "y": 36.4, "flags": 4},
+ {"matrix": [0, 7], "x": 128.1, "y": 16.3, "flags": 4},
+ {"matrix": [0, 8], "x": 140.5, "y": 12.4, "flags": 4},
+ {"matrix": [0, 9], "x": 152.8, "y": 8.4, "flags": 4},
+ {"matrix": [0, 10], "x": 165.1, "y": 4.4, "flags": 4},
+ {"matrix": [0, 11], "x": 178.2, "y": 2.9, "flags": 4},
+ {"matrix": [0, 12], "x": 190.8, "y": 3.7, "flags": 4},
+ {"matrix": [0, 14], "x": 209.7, "y": 3.7, "flags": 1},
+ {"matrix": [0, 15], "x": 233.9, "y": 1.5, "flags": 4}
+ ],
+ "max_brightness": 118,
+ "sat_steps": 8,
+ "speed_steps": 10,
+ "val_steps": 8
+ },
+ "url": "https://skeletonkbd.com/",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x68A0",
+ "vid": "0x1209"
+ },
+ "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": 9, "y": 0},
+ {"matrix": [0, 8], "x": 10, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12, "y": 0},
+ {"matrix": [0, 11], "x": 13, "y": 0},
+ {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 13], "x": 15, "y": 0, "w": 2},
+ {"matrix": [0, 15], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 8.5, "y": 1},
+ {"matrix": [1, 8], "x": 9.5, "y": 1},
+ {"matrix": [1, 9], "x": 10.5, "y": 1},
+ {"matrix": [1, 10], "x": 11.5, "y": 1},
+ {"matrix": [1, 11], "x": 12.5, "y": 1},
+ {"matrix": [1, 12], "x": 13.5, "y": 1},
+ {"matrix": [1, 13], "x": 14.5, "y": 1},
+ {"matrix": [1, 14], "x": 15.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 15], "x": 17.25, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 8.75, "y": 2},
+ {"matrix": [2, 8], "x": 9.75, "y": 2},
+ {"matrix": [2, 9], "x": 10.75, "y": 2},
+ {"matrix": [2, 10], "x": 11.75, "y": 2},
+ {"matrix": [2, 11], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 13.75, "y": 2},
+ {"matrix": [2, 13], "x": 14.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 15], "x": 17.25, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [3, 11], "x": 12.25, "y": 3},
+ {"matrix": [3, 12], "x": 13.25, "y": 3},
+ {"matrix": [3, 13], "x": 14.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 16, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 4, "y": 4, "w": 2.25},
+ {"matrix": [4, 5], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 8.25, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 15, "y": 4},
+ {"matrix": [4, 14], "x": 16, "y": 4},
+ {"matrix": [4, 15], "x": 17, "y": 4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/skeletonkbd/frost68/keymaps/default/keymap.c b/keyboards/skeletonkbd/frost68/keymaps/default/keymap.c
new file mode 100644
index 00000000000..3d0d6dc794c
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+// Copyright 2023 skeletonkbd (@skeletonkbd)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _L1,
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
+ 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_END,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LNG1, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, MO(_L1), KC_SPC, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_L1] = 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, KC_F12, KC_TRNS, KC_PSCR,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_SCRL, KC_PAUS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LNG2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS),
+
+
+};
\ No newline at end of file
diff --git a/keyboards/skeletonkbd/frost68/keymaps/via/keymap.c b/keyboards/skeletonkbd/frost68/keymaps/via/keymap.c
new file mode 100644
index 00000000000..16d734b83f3
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/keymaps/via/keymap.c
@@ -0,0 +1,29 @@
+// Copyright 2023 skeletonkbd (@skeletonkbd)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _L1,
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
+ 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_END,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LNG1, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, MO(_L1), KC_SPC, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_L1] = 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, KC_F12, KC_TRNS, KC_PSCR,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_SCRL, KC_PAUS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LNG2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS),
+
+
+};
\ No newline at end of file
diff --git a/keyboards/skeletonkbd/frost68/keymaps/via/rules.mk b/keyboards/skeletonkbd/frost68/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/skeletonkbd/frost68/readme.md b/keyboards/skeletonkbd/frost68/readme.md
new file mode 100644
index 00000000000..4864fd1a19e
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/readme.md
@@ -0,0 +1,27 @@
+# skeletonkbd/skeleton68
+
+
+
+Alice layout keyboard with acrylic case.
+
+- Keyboard Maintainer: [SkeletonKBD](https://github.com/skeletonkbd)
+- Hardware Supported: Frost68
+- Hardware Availability: https://github.com/skeletonkbd/Frost68
+
+Make example for this keyboard (after setting up your build environment):
+
+ make skeletonkbd/skeleton68:default
+
+Flashing example for this keyboard:
+
+ make skeletonkbd/skeleton68: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/skeletonkbd/frost68/rules.mk b/keyboards/skeletonkbd/frost68/rules.mk
new file mode 100644
index 00000000000..13195723492
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/rules.mk
@@ -0,0 +1 @@
+DEBOUNCE_TYPE = sym_eager_pk
diff --git a/keyboards/smithrune/iron160/iron160_s/info.json b/keyboards/smithrune/iron160/iron160_s/info.json
index f5d80be1788..91c66a3d4fb 100644
--- a/keyboards/smithrune/iron160/iron160_s/info.json
+++ b/keyboards/smithrune/iron160/iron160_s/info.json
@@ -24,74 +24,650 @@
"indicators": {
"caps_lock": "B0"
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_tsangan_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
"layout": [
- {"label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0},
- {"label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0},
- {"label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0},
- {"label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0},
- {"label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0},
- {"label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0},
- {"label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0},
- {"label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0},
- {"label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0},
- {"label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0},
- {"label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0},
- {"label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0},
- {"label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0},
- {"label": "Bspc", "matrix": [0, 13], "w": 1, "x": 13, "y": 0},
- {"label": "Bspc", "matrix": [4, 13], "w": 1, "x": 14, "y": 0},
- {"label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
- {"label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1},
- {"label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1},
- {"label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1},
- {"label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1},
- {"label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1},
- {"label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1},
- {"label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1},
- {"label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1},
- {"label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1},
- {"label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1},
- {"label": "]", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1},
- {"label": "[", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1},
- {"label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1},
- {"label": "Caps", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2},
- {"label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2},
- {"label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2},
- {"label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2},
- {"label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2},
- {"label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2},
- {"label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2},
- {"label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2},
- {"label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2},
- {"label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2},
- {"label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2},
- {"label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2},
- {"label": "~", "matrix": [2, 12], "w": 1, "x": 12.75, "y": 2},
- {"label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2},
- {"label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3},
- {"label": "|", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3},
- {"label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3},
- {"label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3},
- {"label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3},
- {"label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3},
- {"label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3},
- {"label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3},
- {"label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3},
- {"label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3},
- {"label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3},
- {"label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3},
- {"label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3},
- {"label": "MO(1)", "matrix": [3, 13], "w": 1, "x": 14, "y": 3},
- {"label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4},
- {"label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4},
- {"label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4},
- {"label": "Space", "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4},
- {"label": "Alt", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4},
- {"label": "Win", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4},
- {"label": "Menu", "matrix": [4, 11], "w": 1.25, "x": 12.5, "y": 4},
- {"label": "Ctrl", "matrix": [4, 12], "w": 1.25, "x": 13.75, "y": 4}
+ {"label": "~", "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": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 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", "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": "~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "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": "MO(1)", "matrix": [3, 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": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label": "~", "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": "Bspc", "matrix": [0, 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", "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": 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": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "~", "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": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 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", "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": "MO(1)", "matrix": [3, 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": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"label": "~", "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": "Bspc", "matrix": [0, 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", "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": 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": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"label": "~", "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": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 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", "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": "MO(1)", "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, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"label": "~", "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": "Bspc", "matrix": [0, 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": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "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": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"label": "~", "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": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 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": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "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": "MO(1)", "matrix": [3, 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": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"label": "~", "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": "Bspc", "matrix": [0, 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": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "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": "Menu", "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": "~", "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": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 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": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "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": "MO(1)", "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, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
diff --git a/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c b/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c
index 1cc3dea2f6d..a8efb9749dd 100755
--- a/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c
+++ b/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c
@@ -18,18 +18,18 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC,
+ [0] = LAYOUT_all(
+ QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_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_BSLS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
- KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL, KC_BSPC
+ 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_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL
),
- [1] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______, _______
)
};
diff --git a/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c b/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c
index f8790cc6007..0bbaa7e8456 100755
--- a/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c
+++ b/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c
@@ -18,32 +18,32 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC,
+ [0] = LAYOUT_all(
+ QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_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_BSLS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
- KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL, KC_BSPC
+ 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_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL
),
- [1] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______, _______
),
- [2] = LAYOUT(
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______, _______
),
- [3] = LAYOUT(
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______, _______
),
};
diff --git a/keyboards/smithrune/iron160/iron160_s/matrix_diagram.md b/keyboards/smithrune/iron160/iron160_s/matrix_diagram.md
new file mode 100644
index 00000000000..3b4d9bc5789
--- /dev/null
+++ b/keyboards/smithrune/iron160/iron160_s/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for SmithRune I160-S
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │4D │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ┌──┴┐2D │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2D │ │2C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
+│40 │41 │42 │46 │49 │4A │4B │4C │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌────────┐ ┌──────────┐
+│30 │ 2.25u LShift 2.75u RShift │3C │
+└────────┘ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │46 │4A │4B │4C │ Tsangan/WKL/HHKB
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/soda/mango/config.h b/keyboards/soda/mango/config.h
new file mode 100644
index 00000000000..6e9f18cd5d2
--- /dev/null
+++ b/keyboards/soda/mango/config.h
@@ -0,0 +1,14 @@
+// Copyright 2023 devzhaoyou (@gevzhaoyou)
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+#define RGB_MATRIX_LED_COUNT 17
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED //
+
diff --git a/keyboards/soda/mango/info.json b/keyboards/soda/mango/info.json
index a2b3d4b0e09..1524d99da3f 100644
--- a/keyboards/soda/mango/info.json
+++ b/keyboards/soda/mango/info.json
@@ -20,7 +20,82 @@
"bootmagic": true,
"extrakey": true,
"mousekey": true,
- "nkro": true
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "ws2812": {
+ "pin": "A2"
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "WS2812",
+ "layout": [
+ {"flags": 1, "matrix": [0, 0], "x": 0, "y": 0},
+ {"flags": 1, "matrix": [0, 1], "x": 75, "y": 0},
+ {"flags": 1, "matrix": [0, 2], "x": 150, "y": 0},
+ {"flags": 1, "matrix": [0, 3], "x": 224, "y": 0},
+ {"flags": 1, "matrix": [1, 0], "x": 0, "y": 16},
+ {"flags": 1, "matrix": [1, 1], "x": 75, "y": 16},
+ {"flags": 1, "matrix": [1, 2], "x": 150, "y": 16},
+ {"flags": 1, "matrix": [2, 0], "x": 0, "y": 32},
+ {"flags": 1, "matrix": [2, 1], "x": 75, "y": 32},
+ {"flags": 1, "matrix": [2, 2], "x": 150, "y": 32},
+ {"flags": 1, "matrix": [2, 3], "x": 224, "y": 24},
+ {"flags": 1, "matrix": [3, 0], "x": 0, "y": 48},
+ {"flags": 1, "matrix": [3, 1], "x": 75, "y": 48},
+ {"flags": 1, "matrix": [3, 2], "x": 150, "y": 48},
+ {"flags": 1, "matrix": [4, 0], "x": 32, "y": 64},
+ {"flags": 1, "matrix": [4, 1], "x": 150, "y": 64},
+ {"flags": 1, "matrix": [4, 2], "x": 224, "y": 64}
+ ]
+ },
+ "indicators": {
+ "caps_lock": "B15",
+ "on_state": 0
},
"community_layouts": ["numpad_5x4"],
"layouts": {
diff --git a/keyboards/sofle/keymaps/devdev/rules.mk b/keyboards/sofle/keymaps/devdev/rules.mk
index 92a293196f2..860c2122da2 100644
--- a/keyboards/sofle/keymaps/devdev/rules.mk
+++ b/keyboards/sofle/keymaps/devdev/rules.mk
@@ -1,6 +1,6 @@
MOUSEKEY_ENABLE = yes
EXTRAKEY_ENABLE = yes
-CONSOLE_ENABLE = yes
+CONSOLE_ENABLE = no
RGBLIGHT_ENABLE = yes
ENCODER_ENABLE = yes
LTO_ENABLE = yes
diff --git a/keyboards/sofle/keymaps/via/config.h b/keyboards/sofle/keymaps/via/config.h
index 439ad2c0c6d..e53881987da 100644
--- a/keyboards/sofle/keymaps/via/config.h
+++ b/keyboards/sofle/keymaps/via/config.h
@@ -24,7 +24,7 @@ for more options. */
#if defined(KEYBOARD_sofle_rev1)
// Add RGB underglow and top facing lighting
# define WS2812_DI_PIN D3
-# define RGBLED_NUM 70
+# define RGBLED_NUM 72
# define RGBLED_SPLIT \
{ 36, 36 }
# ifdef RGB_MATRIX_ENABLE
diff --git a/keyboards/stront/config.h b/keyboards/stront/config.h
new file mode 100644
index 00000000000..4c88e411acc
--- /dev/null
+++ b/keyboards/stront/config.h
@@ -0,0 +1,95 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_PIN_SWAP
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+/* any side can be master by default, enable split sync to support it */
+#define EE_HANDS
+#define SPLIT_LED_STATE_ENABLE
+#define SPLIT_MODS_ENABLE
+#define SPLIT_POINTING_ENABLE
+
+/* SPI config for display/touchpad */
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN GP10
+#define SPI_MOSI_PIN GP11
+#define SPI_MISO_PIN GP12
+
+/* touchpad config */
+#define POINTING_DEVICE_RIGHT
+#define POINTING_DEVICE_CS_PIN GP9
+#define POINTING_DEVICE_ROTATION_180
+#define CIRQUE_PINNACLE_DIAMETER_MM 40
+
+/* LCD config */
+#define LCD_DC_PIN GP12
+#define LCD_CS_PIN GP9
+#define LCD_RST_PIN GP13
+#define BACKLIGHT_PWM_DRIVER PWMD7
+#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A
+#define QUANTUM_PAINTER_LVGL_USE_CUSTOM_CONF
+
+/* RGB config */
+#ifdef RGB_MATRIX_ENABLE
+# define SPLIT_TRANSPORT_MIRROR
+# define RGB_MATRIX_LED_COUNT RGBLED_NUM
+# define RGB_DISABLE_WHEN_USB_SUSPENDED
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define RGB_MATRIX_KEYPRESSES
+
+# define ENABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue, speed is hue for secondary hue
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static gradient top to bottom, speed controls how much gradient changes
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Static gradient left to right, speed controls how much gradient changes
+# define ENABLE_RGB_MATRIX_BREATHING // Single hue brightness cycling animation
+# define ENABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right
+# define ENABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades saturation
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Single hue 3 blade spinning pinwheel fades brightness
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Single hue spinning spiral fades saturation
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness
+# define ENABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard solid hue cycling through full gradient
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Full gradient scrolling left to right
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Full gradient scrolling out to in
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Full dual gradients scrolling out to in
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradient Chevron shaped scrolling left to right
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Full gradient spinning pinwheel around center of keyboard
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard
+# define ENABLE_RGB_MATRIX_DUAL_BEACON // Full gradient spinning around center of keyboard
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON // Full tighter gradient spinning around center of keyboard
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Full dual gradients spinning two halfs of keyboard
+# define ENABLE_RGB_MATRIX_RAINDROPS // Randomly changes a single key's hue
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation
+# define ENABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight amount at the same time, then shifts back
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight amount in a wave to the right, then back to the left
+# define ENABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight amount and then back down in a wave to the right
+# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL // Single hue fractal filled keys pulsing horizontally out to edges
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW // Pulsing RGB flow along LED wiring with random hues
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN // Randomly light keys with random hues
+# if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP // How hot is your WPM!
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN // That famous computer simulation
+# endif
+# if defined(RGB_MATRIX_KEYPRESSES) || defined(RGB_MATRIX_KEYRELEASES)
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Pulses keys hit to hue & value then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE // Static single hue, pulses keys hit to shifted hue then fades to current hue
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Hue & value pulse near multiple key hits then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Hue & value pulse the same column and row of a single key hit then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of a single key hit then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out
+# define ENABLE_RGB_MATRIX_SPLASH // Full gradient & value pulse away from a single key hit then fades value out
+# define ENABLE_RGB_MATRIX_MULTISPLASH // Full gradient & value pulse away from multiple key hits then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH // Hue & value pulse away from a single key hit then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Hue & value pulse away from multiple key hits then fades value out
+# endif
+#endif
diff --git a/keyboards/stront/display.c b/keyboards/stront/display.c
new file mode 100644
index 00000000000..f7b071d1a9a
--- /dev/null
+++ b/keyboards/stront/display.c
@@ -0,0 +1,125 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "display.h"
+#include "qp.h"
+#include "lvgl_helpers.h"
+
+/* shared styles */
+lv_style_t style_screen;
+lv_style_t style_container;
+lv_style_t style_button;
+lv_style_t style_button_active;
+
+/* screens */
+static lv_obj_t *screen_home;
+
+/* home screen content */
+static lv_obj_t *label_shift;
+static lv_obj_t *label_ctrl;
+static lv_obj_t *label_alt;
+static lv_obj_t *label_gui;
+static lv_obj_t *label_caps;
+
+void init_styles(void) {
+ lv_style_init(&style_screen);
+ lv_style_set_bg_color(&style_screen, lv_color_black());
+
+ lv_style_init(&style_container);
+ lv_style_set_pad_top(&style_container, 0);
+ lv_style_set_pad_bottom(&style_container, 0);
+ lv_style_set_pad_left(&style_container, 0);
+ lv_style_set_pad_right(&style_container, 0);
+ lv_style_set_bg_opa(&style_container, 0);
+ lv_style_set_border_width(&style_container, 0);
+ lv_style_set_width(&style_container, lv_pct(100));
+ lv_style_set_height(&style_container, LV_SIZE_CONTENT);
+
+ lv_style_init(&style_button);
+ lv_style_set_pad_top(&style_button, 4);
+ lv_style_set_pad_bottom(&style_button, 4);
+ lv_style_set_pad_left(&style_button, 4);
+ lv_style_set_pad_right(&style_button, 4);
+ lv_style_set_radius(&style_button, 6);
+ lv_style_set_text_color(&style_button, lv_palette_main(LV_PALETTE_AMBER));
+
+ lv_style_init(&style_button_active);
+ lv_style_set_bg_color(&style_button_active, lv_palette_main(LV_PALETTE_AMBER));
+ lv_style_set_bg_opa(&style_button_active, LV_OPA_100);
+ lv_style_set_text_color(&style_button_active, lv_color_black());
+}
+
+void init_screen_home(void) {
+ screen_home = lv_scr_act();
+
+ lv_obj_add_style(screen_home, &style_screen, 0);
+ use_flex_column(screen_home);
+
+ lv_obj_t *mods = lv_obj_create(screen_home);
+ lv_obj_add_style(mods, &style_container, 0);
+ use_flex_column(mods);
+
+ lv_obj_t *mods_row1 = lv_obj_create(mods);
+ lv_obj_add_style(mods_row1, &style_container, 0);
+ use_flex_row(mods_row1);
+ label_gui = create_button(mods_row1, "GUI", &style_button, &style_button_active);
+ label_alt = create_button(mods_row1, "ALT", &style_button, &style_button_active);
+
+ lv_obj_t *mods_row2 = lv_obj_create(mods);
+ lv_obj_add_style(mods_row2, &style_container, 0);
+ use_flex_row(mods_row2);
+ label_ctrl = create_button(mods_row2, "CTL", &style_button, &style_button_active);
+ label_shift = create_button(mods_row2, "SFT", &style_button, &style_button_active);
+
+ lv_obj_t *label_stront = lv_label_create(screen_home);
+ lv_label_set_text(label_stront, "stront");
+#if LV_FONT_MONTSERRAT_48
+ lv_obj_set_style_text_font(label_stront, &lv_font_montserrat_48, LV_PART_MAIN);
+#endif
+
+ label_caps = create_button(screen_home, "CAPS", &style_button, &style_button_active);
+}
+
+bool display_init_kb(void) {
+ dprint("display_init_kb - start\n");
+
+ backlight_enable();
+
+ painter_device_t display = qp_st7789_make_spi_device(240, 300, LCD_CS_PIN, LCD_DC_PIN, LCD_RST_PIN, 16, 3);
+ qp_set_viewport_offsets(display, 0, 20);
+
+ if (!qp_init(display, QP_ROTATION_180) || !qp_power(display, true) || !qp_lvgl_attach(display)) return false;
+
+ dprint("display_init_kb - initialised\n");
+
+ lv_disp_t *lv_display = lv_disp_get_default();
+ lv_theme_t *lv_theme = lv_theme_default_init(lv_display, lv_palette_main(LV_PALETTE_AMBER), lv_palette_main(LV_PALETTE_BLUE), true, LV_FONT_DEFAULT);
+ lv_disp_set_theme(lv_display, lv_theme);
+ init_styles();
+
+ bool res = display_init_user();
+ if (res) {
+ dprint("display_init_kb - adding default home screen\n");
+ init_screen_home();
+ }
+
+ return true;
+}
+
+__attribute__((weak)) bool display_init_user(void) {
+ return true;
+}
+
+__attribute__((weak)) void display_housekeeping_task(void) {
+ dprint("display_housekeeping_task_kb\n");
+
+ toggle_state(label_shift, LV_STATE_PRESSED, MODS_SHIFT);
+ toggle_state(label_ctrl, LV_STATE_PRESSED, MODS_CTRL);
+ toggle_state(label_alt, LV_STATE_PRESSED, MODS_ALT);
+ toggle_state(label_gui, LV_STATE_PRESSED, MODS_GUI);
+}
+
+__attribute__((weak)) void display_process_caps(bool active) {
+ dprint("display_process_caps\n");
+ toggle_state(label_caps, LV_STATE_PRESSED, active);
+}
diff --git a/keyboards/stront/display.h b/keyboards/stront/display.h
new file mode 100644
index 00000000000..4249ff468ee
--- /dev/null
+++ b/keyboards/stront/display.h
@@ -0,0 +1,20 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "qp_lvgl.h"
+
+#define MODS_SHIFT ((get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT)
+#define MODS_CTRL ((get_mods() | get_oneshot_mods()) & MOD_MASK_CTRL)
+#define MODS_ALT ((get_mods() | get_oneshot_mods()) & MOD_MASK_ALT)
+#define MODS_GUI ((get_mods() | get_oneshot_mods()) & MOD_MASK_GUI)
+
+/* shared styles */
+extern lv_style_t style_screen;
+extern lv_style_t style_container;
+extern lv_style_t style_button;
+extern lv_style_t style_button_active;
+
+bool display_init_kb(void);
+bool display_init_user(void);
+void display_housekeeping_task(void);
+void display_process_caps(bool active);
diff --git a/keyboards/stront/halconf.h b/keyboards/stront/halconf.h
new file mode 100644
index 00000000000..0aa1ff58d8a
--- /dev/null
+++ b/keyboards/stront/halconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/stront/info.json b/keyboards/stront/info.json
new file mode 100644
index 00000000000..97df3477af3
--- /dev/null
+++ b/keyboards/stront/info.json
@@ -0,0 +1,147 @@
+{
+ "keyboard_name": "stront",
+ "manufacturer": "zzeneg",
+ "url": "https://github.com/zzeneg/stront",
+ "maintainer": "zzeneg",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 1], "x": 2, "y": 0 },
+ { "matrix": [0, 2], "x": 3, "y": 0 },
+ { "matrix": [0, 3], "x": 4, "y": 0 },
+ { "matrix": [0, 4], "x": 5, "y": 0 },
+
+ { "matrix": [4, 4], "x": 8, "y": 0 },
+ { "matrix": [4, 3], "x": 9, "y": 0 },
+ { "matrix": [4, 2], "x": 10, "y": 0 },
+ { "matrix": [4, 1], "x": 11, "y": 0 },
+
+ { "matrix": [0, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 0], "x": 1, "y": 1 },
+ { "matrix": [1, 1], "x": 2, "y": 1 },
+ { "matrix": [1, 2], "x": 3, "y": 1 },
+ { "matrix": [1, 3], "x": 4, "y": 1 },
+ { "matrix": [1, 4], "x": 5, "y": 1 },
+
+ { "matrix": [5, 4], "x": 8, "y": 1 },
+ { "matrix": [5, 3], "x": 9, "y": 1 },
+ { "matrix": [5, 2], "x": 10, "y": 1 },
+ { "matrix": [5, 1], "x": 11, "y": 1 },
+ { "matrix": [5, 0], "x": 12, "y": 1 },
+ { "matrix": [4, 0], "x": 13, "y": 1 },
+
+ { "matrix": [3, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 0], "x": 1, "y": 2 },
+ { "matrix": [2, 1], "x": 2, "y": 2 },
+ { "matrix": [2, 2], "x": 3, "y": 2 },
+ { "matrix": [2, 3], "x": 4, "y": 2 },
+ { "matrix": [2, 4], "x": 5, "y": 2 },
+
+ { "matrix": [6, 4], "x": 8, "y": 2 },
+ { "matrix": [6, 3], "x": 9, "y": 2 },
+ { "matrix": [6, 2], "x": 10, "y": 2 },
+ { "matrix": [6, 1], "x": 11, "y": 2 },
+ { "matrix": [6, 0], "x": 12, "y": 2 },
+ { "matrix": [7, 0], "x": 13, "y": 2 },
+
+ { "matrix": [3, 2], "x": 4, "y": 3 },
+ { "matrix": [3, 3], "x": 5, "y": 3 },
+ { "matrix": [3, 4], "x": 6, "y": 3 },
+ { "matrix": [7, 4], "x": 7, "y": 3 },
+ { "matrix": [7, 3], "x": 8, "y": 3 },
+ { "matrix": [7, 2], "x": 9, "y": 3 }
+ ]
+ }
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6"],
+ "rows": ["GP28", "GP27", "GP26", "GP15"]
+ },
+ "split": {
+ "enabled": true
+ },
+ "encoder": {
+ "rotary": [
+ {
+ "pin_a": "GP7",
+ "pin_b": "GP8",
+ "resolution": 4
+ }
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "console": false,
+ "encoder": true,
+ "backlight": true,
+ "extrakey": true,
+ "rgblight": false,
+ "rgb_matrix": true,
+ "nkro": false
+ },
+ "backlight": {
+ "pin": "GP14"
+ },
+ "ws2812": {
+ "pin": "GP29"
+ },
+ "rgblight": {
+ "led_count": 38,
+ "split": true,
+ "split_count": [19, 19]
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "led_count": 38,
+ "split_count": [19, 19],
+ "layout": [
+ { "flags": 4, "matrix": [0, 4], "x": 71, "y": 7 },
+ { "flags": 4, "matrix": [0, 3], "x": 57, "y": 5 },
+ { "flags": 4, "matrix": [0, 2], "x": 44, "y": 0 },
+ { "flags": 4, "matrix": [0, 1], "x": 27, "y": 5 },
+ { "flags": 4, "matrix": [1, 1], "x": 29, "y": 22 },
+ { "flags": 4, "matrix": [1, 0], "x": 14, "y": 26 },
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 26 },
+ { "flags": 4, "matrix": [3, 0], "x": 2, "y": 43 },
+ { "flags": 4, "matrix": [2, 0], "x": 16, "y": 43 },
+ { "flags": 4, "matrix": [2, 1], "x": 30, "y": 38 },
+ { "flags": 4, "matrix": [2, 2], "x": 44, "y": 33 },
+ { "flags": 4, "matrix": [1, 2], "x": 44, "y": 17 },
+ { "flags": 4, "matrix": [1, 3], "x": 57, "y": 22 },
+ { "flags": 4, "matrix": [1, 4], "x": 71, "y": 24 },
+ { "flags": 4, "matrix": [2, 4], "x": 71, "y": 40 },
+ { "flags": 4, "matrix": [2, 3], "x": 57, "y": 38 },
+ { "flags": 4, "matrix": [3, 2], "x": 56, "y": 57 },
+ { "flags": 4, "matrix": [3, 3], "x": 71, "y": 59 },
+ { "flags": 4, "matrix": [3, 4], "x": 85, "y": 64 },
+
+ { "flags": 4, "matrix": [7, 4], "x": 139, "y": 64 },
+ { "flags": 4, "matrix": [7, 3], "x": 153, "y": 59 },
+ { "flags": 4, "matrix": [7, 2], "x": 168, "y": 57 },
+ { "flags": 4, "matrix": [6, 3], "x": 167, "y": 38 },
+ { "flags": 4, "matrix": [6, 4], "x": 153, "y": 40 },
+ { "flags": 4, "matrix": [5, 4], "x": 153, "y": 24 },
+ { "flags": 4, "matrix": [5, 3], "x": 167, "y": 22 },
+ { "flags": 4, "matrix": [5, 2], "x": 180, "y": 17 },
+ { "flags": 4, "matrix": [6, 2], "x": 180, "y": 33 },
+ { "flags": 4, "matrix": [6, 1], "x": 194, "y": 38 },
+ { "flags": 4, "matrix": [6, 0], "x": 208, "y": 43 },
+ { "flags": 4, "matrix": [7, 0], "x": 222, "y": 43 },
+ { "flags": 4, "matrix": [4, 0], "x": 224, "y": 26 },
+ { "flags": 4, "matrix": [5, 0], "x": 210, "y": 26 },
+ { "flags": 4, "matrix": [5, 1], "x": 195, "y": 22 },
+ { "flags": 4, "matrix": [4, 1], "x": 197, "y": 5 },
+ { "flags": 4, "matrix": [4, 2], "x": 180, "y": 0 },
+ { "flags": 4, "matrix": [4, 3], "x": 167, "y": 5 },
+ { "flags": 4, "matrix": [4, 4], "x": 153, "y": 7 }
+ ]
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0844",
+ "vid": "0xFEED"
+ }
+}
diff --git a/keyboards/stront/keymaps/default/keymap.c b/keyboards/stront/keymaps/default/keymap.c
new file mode 100644
index 00000000000..793a2495c7c
--- /dev/null
+++ b/keyboards/stront/keymaps/default/keymap.c
@@ -0,0 +1,107 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_number {
+ // clang-format off
+ _QWERTY = 0,
+ _GAME,
+ _NAV,
+ _NUMBER,
+ _SYMBOL,
+ _FUNC,
+ _SYS
+ // clang-format on
+};
+
+// Left-hand home row mods
+#define HOME_A LGUI_T(KC_A)
+#define HOME_S LALT_T(KC_S)
+#define HOME_D LCTL_T(KC_D)
+#define HOME_F LSFT_T(KC_F)
+
+// Right-hand home row mods
+#define HOME_J RSFT_T(KC_J)
+#define HOME_K RCTL_T(KC_K)
+#define HOME_L LALT_T(KC_L)
+#define HOME_SCLN RGUI_T(KC_SCLN)
+
+// bottom mods
+#define SYM_SPC LT(_SYMBOL, KC_SPC)
+#define NUM_TAB LT(_NUMBER, KC_TAB)
+#define FUNC_ESC LT(_FUNC, KC_ESC)
+#define FUNC_ENT LT(_FUNC, KC_ENT)
+#define NAV_BSPC LT(_NAV, KC_BSPC)
+#define RALT_DEL LALT_T(KC_DEL)
+
+// game layer mods
+#define LALT_Q LALT_T(KC_Q)
+#define LSFT_MINS LSFT_T(KC_MINS)
+#define LCTL_ESC LCTL_T(KC_ESC)
+#define LGUI_QUOT LGUI_T(KC_QUOT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * .---------------------------. .---------------------------.
+ * | W | E | R | T | | Y | U | I | O |
+ * .------+------+------+------+------+------| |------+------+------+------+------+------.
+ * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
+ * '-----------------------------------------/ / \ \-----------------------------------------'
+ * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
+ * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | RAlt |
+ * `-------------''-------' '-------''-------------'
+ */
+ // clang-format off
+ [_QWERTY] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_SCLN, KC_P,
+ KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_GAME] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_P,
+ LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
+ LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_NAV] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
+ XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
+ FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, RALT_DEL
+ ),
+
+ [_NUMBER] = LAYOUT(
+ KC_7, KC_8, KC_9, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_EQL, KC_0, KC_4, KC_5, KC_6, KC_LBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_MINS, KC_BSLS, KC_1, KC_2, KC_3, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_SYMBOL] = LAYOUT(
+ LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_GRV), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ LSFT(KC_EQL), LSFT(KC_0), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_LBRC), XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ LSFT(KC_MINS), LSFT(KC_BSLS), LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_FUNC] = LAYOUT(
+ KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
+ KC_F12, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
+ ),
+
+ [_SYS] = LAYOUT(
+ BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
+ EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
+ _______, QK_BOOT, _______, _______, QK_BOOT, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/stront/keymaps/hid/config.h b/keyboards/stront/keymaps/hid/config.h
new file mode 100644
index 00000000000..e96512f93ff
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/config.h
@@ -0,0 +1,7 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_HID_SYNC, RPC_ID_USER_CAPS_WORD_SYNC, RPC_ID_USER_LAYER_SYNC
+#define QUANTUM_PAINTER_DISPLAY_TIMEOUT 0
diff --git a/keyboards/stront/keymaps/hid/hid_display.c b/keyboards/stront/keymaps/hid/hid_display.c
new file mode 100644
index 00000000000..a1e13117130
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/hid_display.c
@@ -0,0 +1,240 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "hid_display.h"
+#include "display.h"
+#include "raw_hid.h"
+#include "lvgl_helpers.h"
+
+uint16_t home_screen_timer = 0;
+
+/* screens */
+static lv_obj_t *screen_home;
+static lv_obj_t *screen_volume;
+static lv_obj_t *screen_media;
+
+/* home screen content */
+static lv_obj_t *label_time;
+static lv_obj_t *label_volume_home;
+static lv_obj_t *label_shift;
+static lv_obj_t *label_ctrl;
+static lv_obj_t *label_alt;
+static lv_obj_t *label_gui;
+static lv_obj_t *label_layer;
+static lv_obj_t *label_caps;
+#ifdef CAPS_WORD_ENABLE
+static lv_obj_t *label_caps_word;
+#endif
+static lv_obj_t *label_layout;
+
+/* volume screen content */
+static lv_obj_t *arc_volume;
+static lv_obj_t *label_volume_arc;
+
+/* media screen content */
+static lv_obj_t *label_media_artist;
+static lv_obj_t *label_media_title;
+
+enum layout { _EN = 0, _RU };
+void set_layout_label(uint8_t layout) {
+ switch (layout) {
+ case _EN:
+ lv_label_set_text(label_layout, "EN");
+ break;
+
+ case _RU:
+ lv_label_set_text(label_layout, "RU");
+ break;
+ }
+}
+
+void read_string(uint8_t *data, char *string_data) {
+ uint8_t data_length = data[1];
+ memcpy(string_data, data + 2, data_length);
+ string_data[data_length] = '\0';
+}
+
+void start_home_screen_timer(void) {
+ dprint("start_home_screen_timer\n");
+ home_screen_timer = timer_read();
+}
+
+void init_screen_home_custom(void) {
+ screen_home = lv_scr_act();
+ lv_obj_add_style(screen_home, &style_screen, 0);
+ use_flex_column(screen_home);
+
+ label_volume_home = lv_label_create(screen_home);
+ lv_label_set_text(label_volume_home, "");
+
+ lv_obj_t *mods = lv_obj_create(screen_home);
+ lv_obj_add_style(mods, &style_container, 0);
+ use_flex_row(mods);
+
+ label_gui = create_button(mods, "GUI", &style_button, &style_button_active);
+ label_alt = create_button(mods, "ALT", &style_button, &style_button_active);
+ label_ctrl = create_button(mods, "CTL", &style_button, &style_button_active);
+ label_shift = create_button(mods, "SFT", &style_button, &style_button_active);
+
+ label_time = lv_label_create(screen_home);
+ lv_label_set_text(label_time, "00:00");
+ lv_obj_set_style_text_font(label_time, &lv_font_montserrat_48, LV_PART_MAIN);
+
+ lv_obj_t *caps = lv_obj_create(screen_home);
+ lv_obj_add_style(caps, &style_container, 0);
+ use_flex_row(caps);
+
+ label_caps = create_button(caps, "CAPS", &style_button, &style_button_active);
+#ifdef CAPS_WORD_ENABLE
+ label_caps_word = create_button(caps, "CAPS WORD", &style_button, &style_button_active);
+#endif
+
+ lv_obj_t *bottom_row = lv_obj_create(screen_home);
+ lv_obj_add_style(bottom_row, &style_container, 0);
+
+ label_layer = lv_label_create(bottom_row);
+ lv_label_set_text(label_layer, "");
+ lv_obj_align(label_layer, LV_ALIGN_LEFT_MID, 10, 0);
+ display_process_layer_state(0);
+
+ label_layout = lv_label_create(bottom_row);
+ lv_label_set_text(label_layout, "");
+ lv_obj_align(label_layout, LV_ALIGN_RIGHT_MID, -10, 0);
+ set_layout_label(0);
+}
+
+void init_screen_volume(void) {
+ screen_volume = lv_obj_create(NULL);
+ lv_obj_add_style(screen_volume, &style_screen, 0);
+
+ arc_volume = lv_arc_create(screen_volume);
+ lv_obj_set_size(arc_volume, 200, 200);
+ lv_obj_center(arc_volume);
+
+ label_volume_arc = lv_label_create(screen_volume);
+ lv_label_set_text(label_volume_arc, "00");
+ lv_obj_set_style_text_font(label_volume_arc, &lv_font_montserrat_48, LV_PART_MAIN);
+ lv_obj_center(label_volume_arc);
+
+ lv_obj_t *volume_text_label = lv_label_create(screen_volume);
+ lv_label_set_text(volume_text_label, "Volume");
+ lv_obj_align(volume_text_label, LV_ALIGN_BOTTOM_MID, 0, -10);
+}
+
+void init_screen_media(void) {
+ screen_media = lv_obj_create(NULL);
+ lv_obj_add_style(screen_media, &style_screen, 0);
+ use_flex_column(screen_media);
+ lv_obj_set_flex_align(screen_media, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
+
+ label_media_artist = lv_label_create(screen_media);
+ lv_label_set_text(label_media_artist, "N/A");
+ lv_label_set_long_mode(label_media_artist, LV_LABEL_LONG_WRAP);
+ lv_obj_set_width(label_media_artist, lv_pct(90));
+ lv_obj_set_style_text_align(label_media_artist, LV_TEXT_ALIGN_CENTER, 0);
+
+ label_media_title = lv_label_create(screen_media);
+ lv_label_set_text(label_media_title, "N/A");
+ lv_label_set_long_mode(label_media_title, LV_LABEL_LONG_WRAP);
+ lv_obj_set_width(label_media_title, lv_pct(90));
+ lv_obj_set_style_text_align(label_media_title, LV_TEXT_ALIGN_CENTER, 0);
+}
+
+bool display_init_user(void) {
+ init_screen_home_custom();
+ init_screen_volume();
+ init_screen_media();
+
+ return false;
+}
+
+void display_process_raw_hid_data(uint8_t *data, uint8_t length) {
+ uint8_t data_type = data[0];
+ char string_data[length - 2];
+ dprintf("display_process_raw_hid_data - received data_type %u \n", data_type);
+ switch (data_type) {
+ case _TIME:
+ dprintf("time %02d:%02d\n", data[1], data[2]);
+ lv_label_set_text_fmt(label_time, "%02d:%02d", data[1], data[2]);
+ break;
+
+ case _VOLUME:
+ dprintf("volume %d\n", data[1]);
+ lv_label_set_text_fmt(label_volume_home, "Volume: %02d%%", data[1]);
+ lv_label_set_text_fmt(label_volume_arc, "%02d", data[1]);
+ lv_arc_set_value(arc_volume, data[1]);
+ lv_scr_load(screen_volume);
+ start_home_screen_timer();
+ break;
+
+ case _LAYOUT:
+ dprintf("layout %d\n", data[1]);
+ set_layout_label(data[1]);
+ break;
+
+ case _MEDIA_ARTIST:
+ read_string(data, string_data);
+ dprintf("media artist %s\n", string_data);
+ lv_label_set_text(label_media_artist, string_data);
+ lv_scr_load(screen_media);
+ start_home_screen_timer();
+ break;
+
+ case _MEDIA_TITLE:
+ read_string(data, string_data);
+ dprintf("media title %s\n", string_data);
+ lv_label_set_text(label_media_title, string_data);
+ lv_scr_load(screen_media);
+ start_home_screen_timer();
+ break;
+ }
+}
+
+void display_process_layer_state(uint8_t layer) {
+ switch (layer) {
+ case _QWERTY:
+ lv_label_set_text(label_layer, "QWERTY");
+ break;
+ case _GAME:
+ lv_label_set_text(label_layer, "GAME");
+ break;
+ case _NAV:
+ lv_label_set_text(label_layer, "NAV");
+ break;
+ case _NUMBER:
+ lv_label_set_text(label_layer, "NUMBER");
+ break;
+ case _SYMBOL:
+ lv_label_set_text(label_layer, "SYMBOL");
+ break;
+ case _FUNC:
+ lv_label_set_text(label_layer, "FUNC");
+ break;
+ case _SYS:
+ lv_label_set_text(label_layer, "SYSTEM");
+ break;
+ }
+}
+
+void display_housekeeping_task(void) {
+ if (home_screen_timer && timer_elapsed(home_screen_timer) > 5000) {
+ home_screen_timer = 0;
+ lv_scr_load(screen_home);
+ }
+
+ toggle_state(label_shift, LV_STATE_PRESSED, MODS_SHIFT);
+ toggle_state(label_ctrl, LV_STATE_PRESSED, MODS_CTRL);
+ toggle_state(label_alt, LV_STATE_PRESSED, MODS_ALT);
+ toggle_state(label_gui, LV_STATE_PRESSED, MODS_GUI);
+}
+
+void display_process_caps(bool active) {
+ toggle_state(label_caps, LV_STATE_PRESSED, active);
+}
+
+#ifdef CAPS_WORD_ENABLE
+void display_process_caps_word(bool active) {
+ dprint("display_process_caps_word\n");
+ toggle_state(label_caps_word, LV_STATE_PRESSED, active);
+}
+#endif
diff --git a/keyboards/stront/keymaps/hid/hid_display.h b/keyboards/stront/keymaps/hid/hid_display.h
new file mode 100644
index 00000000000..b93bf647169
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/hid_display.h
@@ -0,0 +1,29 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+typedef enum {
+ _QWERTY = 0,
+ _GAME,
+ _EU,
+ _NAV,
+ _NUMBER,
+ _SYMBOL,
+ _FUNC,
+ _SYS,
+} layer_number;
+
+typedef enum {
+ _TIME = 0,
+ _VOLUME,
+ _LAYOUT,
+ _MEDIA_ARTIST,
+ _MEDIA_TITLE,
+} hid_data_type;
+
+void display_process_raw_hid_data(uint8_t *data, uint8_t length);
+void display_process_layer_state(uint8_t layer);
+#ifdef CAPS_WORD_ENABLE
+void display_process_caps_word(bool active);
+#endif
diff --git a/keyboards/stront/keymaps/hid/keymap.c b/keyboards/stront/keymaps/hid/keymap.c
new file mode 100644
index 00000000000..11cb89c48ee
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/keymap.c
@@ -0,0 +1,187 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#include "hid_display.h"
+#include "raw_hid.h"
+#include "transactions.h"
+
+// Left-hand home row mods
+#define HOME_A LGUI_T(KC_A)
+#define HOME_S LALT_T(KC_S)
+#define HOME_D LCTL_T(KC_D)
+#define HOME_F LSFT_T(KC_F)
+
+// Right-hand home row mods
+#define HOME_J RSFT_T(KC_J)
+#define HOME_K RCTL_T(KC_K)
+#define HOME_L LALT_T(KC_L)
+#define HOME_SCLN RGUI_T(KC_SCLN)
+
+// bottom mods
+#define SYM_SPC LT(_SYMBOL, KC_SPC)
+#define NUM_TAB LT(_NUMBER, KC_TAB)
+#define FUNC_ESC LT(_FUNC, KC_ESC)
+#define FUNC_ENT LT(_FUNC, KC_ENT)
+#define NAV_BSPC LT(_NAV, KC_BSPC)
+#define RALT_DEL LALT_T(KC_DEL)
+
+// game layer mods
+#define LALT_Q LALT_T(KC_Q)
+#define LSFT_MINS LSFT_T(KC_MINS)
+#define LCTL_ESC LCTL_T(KC_ESC)
+#define LGUI_QUOT LGUI_T(KC_QUOT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * .---------------------------. .---------------------------.
+ * | W | E | R | T | | Y | U | I | O |
+ * .------+------+------+------+------+------| |------+------+------+------+------+------.
+ * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
+ * '-----------------------------------------/ / \ \-----------------------------------------'
+ * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
+ * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | RAlt |
+ * `-------------''-------' '-------''-------------'
+ */
+ // clang-format off
+ [_QWERTY] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_SCLN, KC_P,
+ KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_GAME] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_P,
+ LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
+ LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_NAV] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
+ XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
+ FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, RALT_DEL
+ ),
+
+ [_NUMBER] = LAYOUT(
+ KC_7, KC_8, KC_9, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_EQL, KC_0, KC_4, KC_5, KC_6, KC_LBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_MINS, KC_BSLS, KC_1, KC_2, KC_3, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_SYMBOL] = LAYOUT(
+ LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_GRV), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ LSFT(KC_EQL), LSFT(KC_0), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_LBRC), XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ LSFT(KC_MINS), LSFT(KC_BSLS), LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_FUNC] = LAYOUT(
+ KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
+ KC_F12, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
+ ),
+
+ [_SYS] = LAYOUT(
+ BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
+ EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
+ _______, QK_BOOT, _______, _______, QK_BOOT, _______
+ )
+ // clang-format on
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ dprintf("process_record_user %u %s %s %d\n", keycode, record->event.pressed ? "pressed" : "depressed", record->tap.interrupted ? "interrupted" : "not interrupted", record->tap.count);
+
+ if (record->event.pressed) {
+ uint8_t data[32];
+ data[0] = 0;
+
+ switch (keycode) {
+ // send hid commands
+ case KC_VOLU:
+ case KC_VOLD:
+ data[0] = _VOLUME;
+ break;
+ }
+
+ if (data[0]) {
+ dprintf("raw_hid_send %u\n", data[0]);
+ raw_hid_send(data, sizeof(data));
+ }
+ }
+
+ return true;
+}
+
+/* Caps Word processing */
+#ifdef CAPS_WORD_ENABLE
+void caps_word_set_user(bool active) {
+ if (is_display_enabled()) {
+ display_process_caps_word(active);
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ dprintf("RPC_ID_USER_CAPS_WORD_SYNC: %s\n", active ? "active" : "inactive");
+ transaction_rpc_send(RPC_ID_USER_CAPS_WORD_SYNC, 1, &active);
+ }
+}
+#endif
+
+/* Active Layer processing */
+layer_state_t layer_state_set_user(layer_state_t state) {
+ if (is_display_enabled()) {
+ display_process_layer_state(get_highest_layer(state));
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ uint8_t layer = get_highest_layer(state);
+ dprintf("RPC_ID_USER_LAYER_SYNC: %u\n", layer);
+ transaction_rpc_send(RPC_ID_USER_LAYER_SYNC, 1, &layer);
+ }
+
+ return state;
+}
+
+/* Raw HID processing*/
+void raw_hid_receive(uint8_t *data, uint8_t length) {
+ dprintf("raw_hid_receive - received %u bytes \n", length);
+
+ if (is_display_enabled()) {
+ display_process_raw_hid_data(data, length);
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ dprint("RPC_ID_USER_HID_SYNC \n");
+ transaction_rpc_send(RPC_ID_USER_HID_SYNC, length, data);
+ }
+}
+
+void hid_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_raw_hid_data((uint8_t *)initiator2target_buffer, initiator2target_buffer_size);
+ }
+}
+
+void layer_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_layer_state(*(uint8_t *)initiator2target_buffer);
+ }
+}
+
+void caps_word_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_caps_word(*(bool *)initiator2target_buffer);
+ }
+}
+
+void keyboard_post_init_user() {
+ // sync received hid data
+ transaction_register_rpc(RPC_ID_USER_HID_SYNC, hid_sync);
+ // sync highest layer (a bit more performant than standard SPLIT_LAYER_STATE_ENABLE)
+ transaction_register_rpc(RPC_ID_USER_LAYER_SYNC, layer_sync);
+ // sync caps word state
+ transaction_register_rpc(RPC_ID_USER_CAPS_WORD_SYNC, caps_word_sync);
+}
diff --git a/keyboards/stront/keymaps/hid/lv_conf.h b/keyboards/stront/keymaps/hid/lv_conf.h
new file mode 100644
index 00000000000..f8f93b7c9ef
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/lv_conf.h
@@ -0,0 +1,15 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef LV_FONT_DEFAULT
+#define LV_FONT_DEFAULT &lv_font_montserrat_20
+
+#undef LV_FONT_MONTSERRAT_20
+#define LV_FONT_MONTSERRAT_20 1
+
+#undef LV_FONT_MONTSERRAT_28
+#define LV_FONT_MONTSERRAT_28 0
diff --git a/keyboards/stront/keymaps/hid/rules.mk b/keyboards/stront/keymaps/hid/rules.mk
new file mode 100644
index 00000000000..beaf344b665
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/rules.mk
@@ -0,0 +1,5 @@
+CAPS_WORD_ENABLE = yes
+
+RAW_ENABLE = yes
+
+SRC += hid_display.c
diff --git a/keyboards/stront/keymaps/i2c/config.h b/keyboards/stront/keymaps/i2c/config.h
new file mode 100644
index 00000000000..8c71dad8355
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/config.h
@@ -0,0 +1,8 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define I2C_DRIVER I2CD1
+#define I2C1_SDA_PIN GP10
+#define I2C1_SCL_PIN GP11
diff --git a/keyboards/stront/keymaps/i2c/halconf.h b/keyboards/stront/keymaps/i2c/halconf.h
new file mode 100644
index 00000000000..46c5a48c9a9
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/stront/keymaps/i2c/keymap.c b/keyboards/stront/keymaps/i2c/keymap.c
new file mode 100644
index 00000000000..793a2495c7c
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/keymap.c
@@ -0,0 +1,107 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_number {
+ // clang-format off
+ _QWERTY = 0,
+ _GAME,
+ _NAV,
+ _NUMBER,
+ _SYMBOL,
+ _FUNC,
+ _SYS
+ // clang-format on
+};
+
+// Left-hand home row mods
+#define HOME_A LGUI_T(KC_A)
+#define HOME_S LALT_T(KC_S)
+#define HOME_D LCTL_T(KC_D)
+#define HOME_F LSFT_T(KC_F)
+
+// Right-hand home row mods
+#define HOME_J RSFT_T(KC_J)
+#define HOME_K RCTL_T(KC_K)
+#define HOME_L LALT_T(KC_L)
+#define HOME_SCLN RGUI_T(KC_SCLN)
+
+// bottom mods
+#define SYM_SPC LT(_SYMBOL, KC_SPC)
+#define NUM_TAB LT(_NUMBER, KC_TAB)
+#define FUNC_ESC LT(_FUNC, KC_ESC)
+#define FUNC_ENT LT(_FUNC, KC_ENT)
+#define NAV_BSPC LT(_NAV, KC_BSPC)
+#define RALT_DEL LALT_T(KC_DEL)
+
+// game layer mods
+#define LALT_Q LALT_T(KC_Q)
+#define LSFT_MINS LSFT_T(KC_MINS)
+#define LCTL_ESC LCTL_T(KC_ESC)
+#define LGUI_QUOT LGUI_T(KC_QUOT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * .---------------------------. .---------------------------.
+ * | W | E | R | T | | Y | U | I | O |
+ * .------+------+------+------+------+------| |------+------+------+------+------+------.
+ * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
+ * '-----------------------------------------/ / \ \-----------------------------------------'
+ * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
+ * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | RAlt |
+ * `-------------''-------' '-------''-------------'
+ */
+ // clang-format off
+ [_QWERTY] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_SCLN, KC_P,
+ KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_GAME] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_P,
+ LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
+ LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_NAV] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
+ XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
+ FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, RALT_DEL
+ ),
+
+ [_NUMBER] = LAYOUT(
+ KC_7, KC_8, KC_9, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_EQL, KC_0, KC_4, KC_5, KC_6, KC_LBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_MINS, KC_BSLS, KC_1, KC_2, KC_3, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_SYMBOL] = LAYOUT(
+ LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_GRV), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ LSFT(KC_EQL), LSFT(KC_0), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_LBRC), XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ LSFT(KC_MINS), LSFT(KC_BSLS), LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_FUNC] = LAYOUT(
+ KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
+ KC_F12, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
+ ),
+
+ [_SYS] = LAYOUT(
+ BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
+ EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
+ _______, QK_BOOT, _______, _______, QK_BOOT, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/stront/keymaps/i2c/mcuconf.h b/keyboards/stront/keymaps/i2c/mcuconf.h
new file mode 100644
index 00000000000..47ee67119de
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/stront/keymaps/i2c/rules.mk b/keyboards/stront/keymaps/i2c/rules.mk
new file mode 100644
index 00000000000..fedac72e2e2
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/rules.mk
@@ -0,0 +1 @@
+POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c
diff --git a/keyboards/stront/keymaps/zzeneg/config.h b/keyboards/stront/keymaps/zzeneg/config.h
new file mode 100644
index 00000000000..38fad1c0fdd
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/config.h
@@ -0,0 +1,30 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// #define DEBUG_MATRIX_SCAN_RATE
+
+#define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_HID_SYNC, RPC_ID_USER_CAPS_WORD_SYNC, RPC_ID_USER_LAYER_SYNC
+#define QUANTUM_PAINTER_DISPLAY_TIMEOUT 0
+
+#define I2C_DRIVER I2CD1
+#define I2C1_SDA_PIN GP10
+#define I2C1_SCL_PIN GP11
+
+#define CIRQUE_PINNACLE_TAP_ENABLE
+#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE
+#define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
+#define MOUSE_EXTENDED_REPORT
+
+#define TAPPING_TERM 150
+#define TAPPING_TERM_PER_KEY
+#define QUICK_TAP_TERM 0
+
+#define CAPS_WORD_IDLE_TIMEOUT 2500
+#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_TIMEOUT 300000
+# define RGB_TRIGGER_ON_KEYDOWN
+#endif
diff --git a/keyboards/stront/keymaps/zzeneg/fonts/montserrat_20_en_ru.c b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_20_en_ru.c
new file mode 100644
index 00000000000..f03a7835a61
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_20_en_ru.c
@@ -0,0 +1,782 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ * Size: 20 px
+ * Bpp: 4
+ * Opts:
+ ******************************************************************************/
+
+#ifdef __has_include
+# if __has_include("lvgl.h")
+# ifndef LV_LVGL_H_INCLUDE_SIMPLE
+# define LV_LVGL_H_INCLUDE_SIMPLE
+# endif
+# endif
+#endif
+
+#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
+# include "lvgl.h"
+#else
+# include "lvgl/lvgl.h"
+#endif
+
+#ifndef MONTSERRAT_20_EN_RU
+# define MONTSERRAT_20_EN_RU 1
+#endif
+
+#if MONTSERRAT_20_EN_RU
+
+/*-----------------
+ * BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
+ /* U+0020 " " */
+
+ /* U+0021 "!" */
+ 0x3f, 0x63, 0xf6, 0x2f, 0x52, 0xf5, 0x1f, 0x41, 0xf4, 0xf, 0x40, 0xf3, 0xf, 0x30, 0xf2, 0x2, 0x0, 0x0, 0x1, 0x5, 0xf8, 0x3f, 0x60,
+
+ /* U+0022 "\"" */
+ 0x9a, 0x3, 0xf0, 0x99, 0x2, 0xf0, 0x99, 0x2, 0xf0, 0x89, 0x2, 0xf0, 0x89, 0x1, 0xf0, 0x44, 0x0, 0x70,
+
+ /* U+0023 "#" */
+ 0x0, 0x0, 0x6b, 0x0, 0x2, 0xe0, 0x0, 0x0, 0x0, 0x79, 0x0, 0x4, 0xc0, 0x0, 0x0, 0x0, 0x97, 0x0, 0x6, 0xa0, 0x0, 0x0, 0x0, 0xb6, 0x0, 0x8, 0x80, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x1, 0x22, 0xf4, 0x22, 0x2c, 0x62, 0x20, 0x0, 0x1, 0xf0, 0x0, 0xd, 0x30, 0x0, 0x0, 0x2, 0xe0, 0x0, 0xf, 0x10, 0x0, 0x0, 0x4, 0xc0, 0x0, 0x1f, 0x0, 0x0, 0x0, 0x6, 0xa0, 0x0, 0x3d, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x12, 0x2b, 0x82, 0x22, 0x8b, 0x22, 0x10, 0x0, 0xc, 0x50, 0x0, 0x88, 0x0, 0x0, 0x0, 0xe, 0x30, 0x0, 0xa6, 0x0, 0x0, 0x0, 0xf, 0x10, 0x0, 0xc4, 0x0, 0x0,
+
+ /* U+0024 "$" */
+ 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x6, 0xcf, 0xfe, 0xb6, 0x0, 0x0, 0xbf, 0x98, 0xd6, 0xaf, 0x90, 0x6, 0xf4, 0x4, 0xb0, 0x1, 0x20, 0xa, 0xc0, 0x4, 0xb0, 0x0, 0x0, 0xb, 0xc0, 0x4, 0xb0, 0x0, 0x0, 0x7, 0xf6, 0x4, 0xb0, 0x0, 0x0, 0x0, 0xcf, 0xca, 0xb0, 0x0, 0x0, 0x0, 0x6, 0xcf, 0xfe, 0x92, 0x0, 0x0, 0x0, 0x5, 0xda, 0xff, 0x60, 0x0, 0x0, 0x4, 0xb0, 0x1b, 0xf1, 0x0, 0x0, 0x4, 0xb0, 0x3, 0xf5, 0x0, 0x0, 0x4, 0xb0, 0x2, 0xf4, 0xb, 0x50, 0x4, 0xb0, 0x9, 0xf1, 0x9, 0xfd, 0x88, 0xd7, 0xcf, 0x50, 0x0, 0x29, 0xdf, 0xfe, 0xa3, 0x0, 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x50, 0x0, 0x0,
+
+ /* U+0025 "%" */
+ 0x0, 0x9d, 0xd9, 0x0, 0x0, 0x0, 0xd5, 0x0, 0x8, 0x90, 0x9, 0x80, 0x0, 0x7, 0xb0, 0x0, 0xe, 0x10, 0x1, 0xe0, 0x0, 0x2e, 0x10, 0x0, 0x2d, 0x0, 0x0, 0xd2, 0x0, 0xb6, 0x0, 0x0, 0x2e, 0x0, 0x0, 0xe2, 0x6, 0xc0, 0x0, 0x0, 0xe, 0x10, 0x1, 0xe0, 0x1e, 0x20, 0x0, 0x0, 0x8, 0xb1, 0x1b, 0x80, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x8e, 0xe8, 0x4, 0xd0, 0x2b, 0xfd, 0x40, 0x0, 0x0, 0x0, 0xe, 0x30, 0xe5, 0x3, 0xe2, 0x0, 0x0, 0x0, 0x99, 0x6, 0xa0, 0x0, 0x88, 0x0, 0x0, 0x3, 0xe1, 0x8, 0x70, 0x0, 0x4b, 0x0, 0x0, 0xd, 0x50, 0x8, 0x70, 0x0, 0x4b, 0x0, 0x0, 0x7b, 0x0, 0x6, 0xa0, 0x0, 0x78, 0x0, 0x2, 0xe1, 0x0, 0x0, 0xe3, 0x2, 0xe2, 0x0, 0xc, 0x60, 0x0, 0x0, 0x2c, 0xdd, 0x40,
+
+ /* U+0026 "&" */
+ 0x0, 0x1, 0xae, 0xfd, 0x50, 0x0, 0x0, 0x0, 0xd, 0xc3, 0x16, 0xf3, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x0, 0xc8, 0x0, 0x0, 0x0, 0x3f, 0x10, 0x0, 0xc7, 0x0, 0x0, 0x0, 0xf, 0x70, 0x6, 0xf2, 0x0, 0x0, 0x0, 0x6, 0xf4, 0x9f, 0x50, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xfc, 0xe2, 0x0, 0x0, 0x0, 0x1, 0xdc, 0x10, 0xcd, 0x10, 0xa, 0x20, 0x9, 0xd0, 0x0, 0xd, 0xd1, 0x1f, 0x10, 0xf, 0x70, 0x0, 0x1, 0xdc, 0x8c, 0x0, 0xf, 0x60, 0x0, 0x0, 0x2e, 0xf6, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x1c, 0xfa, 0x0, 0x3, 0xfd, 0x63, 0x48, 0xec, 0x4f, 0x90, 0x0, 0x29, 0xef, 0xfc, 0x60, 0x4, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0027 "'" */
+ 0x9a, 0x99, 0x99, 0x89, 0x89, 0x44,
+
+ /* U+0028 "(" */
+ 0x0, 0xd8, 0x5, 0xf1, 0xc, 0x90, 0x1f, 0x40, 0x5f, 0x0, 0x9d, 0x0, 0xba, 0x0, 0xd9, 0x0, 0xe8, 0x0, 0xe7, 0x0, 0xe8, 0x0, 0xd9, 0x0, 0xba, 0x0, 0x9d, 0x0, 0x5f, 0x0, 0x1f, 0x40, 0xc, 0x90, 0x5, 0xf1, 0x0, 0xd8,
+
+ /* U+0029 ")" */
+ 0xe, 0x70, 0x0, 0x7e, 0x0, 0x1, 0xf5, 0x0, 0xb, 0xb0, 0x0, 0x7f, 0x0, 0x3, 0xf2, 0x0, 0x1f, 0x40, 0x0, 0xf6, 0x0, 0xe, 0x70, 0x0, 0xe7, 0x0, 0xe, 0x70, 0x0, 0xf6, 0x0, 0x1f, 0x40, 0x3, 0xf2, 0x0, 0x7f, 0x0, 0xb, 0xa0, 0x1, 0xf5, 0x0, 0x7e, 0x0, 0xe, 0x60, 0x0,
+
+ /* U+002A "*" */
+ 0x0, 0x9, 0x50, 0x0, 0x23, 0x9, 0x50, 0x50, 0x3e, 0x9a, 0x7c, 0xc1, 0x0, 0x9f, 0xf5, 0x0, 0x6, 0xed, 0xdd, 0x30, 0x5b, 0x29, 0x54, 0xd1, 0x0, 0x9, 0x50, 0x0, 0x0, 0x4, 0x20, 0x0,
+
+ /* U+002B "+" */
+ 0x0, 0x0, 0xb4, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xf1, 0x13, 0x33, 0xe8, 0x33, 0x30, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0,
+
+ /* U+002C "," */
+ 0x12, 0xd, 0xf1, 0xaf, 0x15, 0xc0, 0x88, 0xc, 0x30,
+
+ /* U+002D "-" */
+ 0x0, 0x0, 0x0, 0xcf, 0xff, 0xf7, 0x33, 0x33, 0x31,
+
+ /* U+002E "." */
+ 0x12, 0xd, 0xf1, 0xad, 0x0,
+
+ /* U+002F "/" */
+ 0x0, 0x0, 0x0, 0x7, 0x20, 0x0, 0x0, 0x3, 0xf1, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x4, 0xf1, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0,
+
+ /* U+0030 "0" */
+ 0x0, 0x8, 0xdf, 0xea, 0x20, 0x0, 0x1, 0xdf, 0x86, 0x7d, 0xf3, 0x0, 0xb, 0xe2, 0x0, 0x0, 0xce, 0x10, 0x3f, 0x50, 0x0, 0x0, 0x1f, 0x70, 0x9e, 0x0, 0x0, 0x0, 0xa, 0xd0, 0xca, 0x0, 0x0, 0x0, 0x7, 0xf0, 0xe8, 0x0, 0x0, 0x0, 0x4, 0xf2, 0xf8, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xe8, 0x0, 0x0, 0x0, 0x4, 0xf2, 0xca, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x9e, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x3f, 0x50, 0x0, 0x0, 0x1f, 0x70, 0xb, 0xe2, 0x0, 0x0, 0xce, 0x10, 0x1, 0xdf, 0x96, 0x7e, 0xf3, 0x0, 0x0, 0x8, 0xdf, 0xea, 0x20, 0x0,
+
+ /* U+0031 "1" */
+ 0xdf, 0xff, 0xe4, 0x55, 0xae, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0,
+
+ /* U+0032 "2" */
+ 0x0, 0x7c, 0xff, 0xea, 0x20, 0x2, 0xdf, 0x96, 0x68, 0xef, 0x20, 0x4c, 0x10, 0x0, 0x1, 0xea, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x0, 0x0, 0xc, 0xb0, 0x0, 0x0, 0x0, 0x4, 0xf5, 0x0, 0x0, 0x0, 0x2, 0xea, 0x0, 0x0, 0x0, 0x2, 0xec, 0x0, 0x0, 0x0, 0x1, 0xdc, 0x0, 0x0, 0x0, 0x1, 0xdd, 0x10, 0x0, 0x0, 0x1, 0xdd, 0x10, 0x0, 0x0, 0x0, 0xce, 0x10, 0x0, 0x0, 0x0, 0xcf, 0x75, 0x55, 0x55, 0x53, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x90,
+
+ /* U+0033 "3" */
+ 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x1, 0x55, 0x55, 0x55, 0x8f, 0x70, 0x0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x0, 0x3, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x20, 0x0, 0x0, 0x0, 0xf, 0xff, 0xb4, 0x0, 0x0, 0x0, 0x33, 0x5b, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x40, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x67, 0x0, 0x0, 0x0, 0xbf, 0x6, 0xfe, 0x96, 0x68, 0xdf, 0x50, 0x2, 0x8d, 0xff, 0xea, 0x30, 0x0,
+
+ /* U+0034 "4" */
+ 0x0, 0x0, 0x0, 0x2, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9e, 0x10, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x2e, 0x90, 0x0, 0x0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0x2a, 0x10, 0x0, 0x4, 0xf6, 0x0, 0x4, 0xf2, 0x0, 0x1, 0xea, 0x0, 0x0, 0x4f, 0x20, 0x0, 0xbe, 0x21, 0x11, 0x15, 0xf3, 0x10, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x44, 0x44, 0x44, 0x47, 0xf5, 0x43, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x20, 0x0,
+
+ /* U+0035 "5" */
+ 0x0, 0xef, 0xff, 0xff, 0xfc, 0x0, 0xf, 0x95, 0x55, 0x55, 0x40, 0x1, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x0, 0x0, 0x0, 0x4, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x11, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xeb, 0x40, 0x0, 0x24, 0x44, 0x47, 0xcf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x3c, 0x20, 0x0, 0x0, 0xaf, 0x13, 0xef, 0xb7, 0x67, 0xdf, 0x60, 0x0, 0x7c, 0xef, 0xeb, 0x40, 0x0,
+
+ /* U+0036 "6" */
+ 0x0, 0x5, 0xbe, 0xfe, 0xb4, 0x0, 0xa, 0xfa, 0x64, 0x6a, 0x60, 0x9, 0xf3, 0x0, 0x0, 0x0, 0x2, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x0, 0x0, 0xc, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x7, 0xdf, 0xfc, 0x50, 0xf, 0x8c, 0xc5, 0x35, 0xaf, 0x80, 0xee, 0xb0, 0x0, 0x0, 0x8f, 0x2d, 0xf2, 0x0, 0x0, 0x0, 0xf7, 0xaf, 0x0, 0x0, 0x0, 0xe, 0x85, 0xf3, 0x0, 0x0, 0x0, 0xf7, 0xd, 0xb0, 0x0, 0x0, 0x8f, 0x20, 0x2e, 0xd6, 0x45, 0xbf, 0x60, 0x0, 0x19, 0xdf, 0xfb, 0x40, 0x0,
+
+ /* U+0037 "7" */
+ 0x5f, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xf6, 0x55, 0x55, 0x55, 0xeb, 0x5f, 0x10, 0x0, 0x0, 0x3f, 0x55, 0xf1, 0x0, 0x0, 0xa, 0xe0, 0x2, 0x0, 0x0, 0x1, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x10, 0x0, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x5, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x60, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0x0, 0x0, 0x0, 0xd, 0xb0, 0x0, 0x0, 0x0, 0x4, 0xf4, 0x0, 0x0, 0x0,
+
+ /* U+0038 "8" */
+ 0x0, 0x5, 0xcf, 0xfe, 0xa3, 0x0, 0x0, 0x9f, 0xa5, 0x46, 0xcf, 0x50, 0x3, 0xf7, 0x0, 0x0, 0xb, 0xe0, 0x7, 0xf0, 0x0, 0x0, 0x4, 0xf3, 0x8, 0xf0, 0x0, 0x0, 0x3, 0xf4, 0x5, 0xf3, 0x0, 0x0, 0x7, 0xf1, 0x0, 0xce, 0x40, 0x0, 0x7f, 0x80, 0x0, 0x1e, 0xff, 0xff, 0xfb, 0x0, 0x2, 0xed, 0x63, 0x33, 0x7e, 0xc0, 0xc, 0xd0, 0x0, 0x0, 0x2, 0xf7, 0xf, 0x70, 0x0, 0x0, 0x0, 0xbc, 0xf, 0x80, 0x0, 0x0, 0x0, 0xcb, 0xb, 0xe1, 0x0, 0x0, 0x4, 0xf7, 0x2, 0xee, 0x85, 0x45, 0xaf, 0xc0, 0x0, 0x18, 0xdf, 0xfe, 0xb6, 0x0,
+
+ /* U+0039 "9" */
+ 0x0, 0x2a, 0xef, 0xea, 0x20, 0x0, 0x4, 0xfc, 0x64, 0x6c, 0xf4, 0x0, 0xe, 0xb0, 0x0, 0x0, 0x9e, 0x10, 0x3f, 0x30, 0x0, 0x0, 0x1f, 0x80, 0x5f, 0x10, 0x0, 0x0, 0xd, 0xd0, 0x4f, 0x20, 0x0, 0x0, 0xf, 0xf0, 0x1f, 0x90, 0x0, 0x0, 0x7f, 0xf1, 0x7, 0xf9, 0x21, 0x28, 0xf7, 0xf2, 0x0, 0x6e, 0xff, 0xfc, 0x35, 0xf1, 0x0, 0x0, 0x23, 0x10, 0x7, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x50, 0x0, 0x0, 0x0, 0x2, 0xdc, 0x0, 0x3, 0xb6, 0x55, 0x9f, 0xc1, 0x0, 0x3, 0xae, 0xff, 0xc6, 0x0, 0x0,
+
+ /* U+003A ":" */
+ 0xbe, 0x1d, 0xf1, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0xd, 0xf1, 0xad, 0x0,
+
+ /* U+003B ";" */
+ 0xbe, 0x1d, 0xf1, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0xd, 0xf1, 0xaf, 0x15, 0xc0, 0x88, 0xc, 0x30,
+
+ /* U+003C "<" */
+ 0x0, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x1, 0x7e, 0xe1, 0x0, 0x3, 0xaf, 0xc5, 0x0, 0x6, 0xdf, 0x93, 0x0, 0x0, 0x9f, 0x70, 0x0, 0x0, 0x0, 0x5d, 0xe8, 0x20, 0x0, 0x0, 0x0, 0x4b, 0xfb, 0x40, 0x0, 0x0, 0x0, 0x28, 0xee, 0x70, 0x0, 0x0, 0x0, 0x5, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+003D "=" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xf1, 0x13, 0x33, 0x33, 0x33, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xf1, 0x13, 0x33, 0x33, 0x33, 0x30,
+
+ /* U+003E ">" */
+ 0x41, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xb4, 0x0, 0x0, 0x0, 0x2, 0x9f, 0xd7, 0x10, 0x0, 0x0, 0x0, 0x6c, 0xf9, 0x30, 0x0, 0x0, 0x0, 0x3c, 0xf1, 0x0, 0x0, 0x5, 0xbf, 0xa0, 0x0, 0x18, 0xee, 0x81, 0x0, 0x3b, 0xfb, 0x50, 0x0, 0x0, 0x89, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+003F "?" */
+ 0x1, 0x7c, 0xff, 0xe9, 0x20, 0x2e, 0xe8, 0x55, 0x8e, 0xe2, 0x5b, 0x10, 0x0, 0x2, 0xfa, 0x0, 0x0, 0x0, 0x0, 0xbd, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x2, 0xf6, 0x0, 0x0, 0x0, 0x2e, 0xc0, 0x0, 0x0, 0x2, 0xec, 0x0, 0x0, 0x0, 0xc, 0xd0, 0x0, 0x0, 0x0, 0x3f, 0x50, 0x0, 0x0, 0x0, 0x27, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x50, 0x0, 0x0, 0x0, 0x5f, 0x40, 0x0,
+
+ /* U+0040 "@" */
+ 0x0, 0x0, 0x4, 0x9d, 0xff, 0xec, 0x82, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xe8, 0x31, 0x1, 0x49, 0xe9, 0x0, 0x0, 0x0, 0x4f, 0x80, 0x0, 0x0, 0x0, 0x1, 0xad, 0x10, 0x0, 0x2f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0xb, 0x80, 0x0, 0x4b, 0xff, 0xc5, 0xf, 0x50, 0xc7, 0x3, 0xf0, 0x0, 0x6f, 0x83, 0x25, 0xd7, 0xf5, 0x3, 0xe0, 0x89, 0x0, 0x2f, 0x50, 0x0, 0x0, 0xdf, 0x50, 0xd, 0x4c, 0x50, 0x9, 0xc0, 0x0, 0x0, 0x4, 0xf5, 0x0, 0x97, 0xe3, 0x0, 0xd8, 0x0, 0x0, 0x0, 0xf, 0x50, 0x7, 0x9f, 0x20, 0xe, 0x60, 0x0, 0x0, 0x0, 0xf5, 0x0, 0x69, 0xe3, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x1f, 0x50, 0x7, 0x9c, 0x50, 0x9, 0xd0, 0x0, 0x0, 0x5, 0xf5, 0x0, 0x96, 0x89, 0x0, 0x2f, 0x70, 0x0, 0x1, 0xdf, 0x50, 0xe, 0x23, 0xf0, 0x0, 0x6f, 0xa4, 0x36, 0xe7, 0xcc, 0x39, 0xb0, 0xb, 0x80, 0x0, 0x4b, 0xff, 0xc5, 0x3, 0xdf, 0xb1, 0x0, 0x2e, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xe8, 0x31, 0x12, 0x5a, 0x40, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9d, 0xff, 0xeb, 0x71, 0x0, 0x0, 0x0,
+
+ /* U+0041 "A" */
+ 0x0, 0x0, 0x0, 0xcf, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xc7, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x1f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x7e, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xe, 0x80, 0x3, 0xf4, 0x0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x3f, 0x40, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x0, 0x7f, 0x33, 0x33, 0x33, 0x33, 0xcc, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x5, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xe, 0xa0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x10,
+
+ /* U+0042 "B" */
+ 0xbf, 0xff, 0xff, 0xfe, 0xb4, 0x0, 0xbd, 0x44, 0x44, 0x46, 0xcf, 0x60, 0xbc, 0x0, 0x0, 0x0, 0xb, 0xf0, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x9, 0xe0, 0xbc, 0x0, 0x0, 0x2, 0x8f, 0x50, 0xbf, 0xff, 0xff, 0xff, 0xf9, 0x0, 0xbd, 0x33, 0x33, 0x34, 0x7d, 0xe2, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xda, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x8e, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xbc, 0x0, 0x0, 0x0, 0x1, 0xeb, 0xbd, 0x44, 0x44, 0x45, 0x7e, 0xf3, 0xbf, 0xff, 0xff, 0xff, 0xd9, 0x20,
+
+ /* U+0043 "C" */
+ 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x3, 0xef, 0xa7, 0x57, 0xbf, 0xc1, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3d, 0x20, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x4e, 0x30, 0x4, 0xef, 0xa7, 0x67, 0xbf, 0xb0, 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0,
+
+ /* U+0044 "D" */
+ 0xbf, 0xff, 0xff, 0xfd, 0xa3, 0x0, 0x0, 0xbd, 0x55, 0x55, 0x58, 0xdf, 0xa0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x5, 0xfb, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x70, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf4, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf6, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf4, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x70, 0xbc, 0x0, 0x0, 0x0, 0x5, 0xfb, 0x0, 0xbd, 0x55, 0x55, 0x58, 0xdf, 0xa0, 0x0, 0xbf, 0xff, 0xff, 0xfd, 0xa3, 0x0, 0x0,
+
+ /* U+0045 "E" */
+ 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xb, 0xd5, 0x55, 0x55, 0x55, 0x40, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0x0, 0xbd, 0x33, 0x33, 0x33, 0x30, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xd5, 0x55, 0x55, 0x55, 0x51, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x30,
+
+ /* U+0046 "F" */
+ 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xbd, 0x55, 0x55, 0x55, 0x54, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x11, 0x11, 0x11, 0x10, 0xbf, 0xff, 0xff, 0xff, 0xf0, 0xbd, 0x44, 0x44, 0x44, 0x40, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0047 "G" */
+ 0x0, 0x0, 0x6c, 0xef, 0xec, 0x60, 0x0, 0x3, 0xef, 0xa7, 0x57, 0xaf, 0xd2, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x2c, 0x40, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x64, 0xe9, 0x0, 0x0, 0x0, 0x0, 0xd, 0x9b, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x6f, 0x30, 0x0, 0x0, 0x0, 0xd, 0x90, 0xdd, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x2f, 0x90, 0x3, 0xef, 0xb7, 0x67, 0xbf, 0xe3, 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x60, 0x0,
+
+ /* U+0048 "H" */
+ 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x11, 0x11, 0x11, 0x11, 0x8f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0x44, 0x44, 0x44, 0x44, 0xaf, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f,
+
+ /* U+0049 "I" */
+ 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
+
+ /* U+004A "J" */
+ 0x0, 0xbf, 0xff, 0xff, 0xd0, 0x3, 0x55, 0x55, 0xbd, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0xbc, 0xb, 0x50, 0x0, 0x1f, 0x80, 0x9f, 0xa5, 0x6d, 0xf1, 0x0, 0x6d, 0xff, 0xb2, 0x0,
+
+ /* U+004B "K" */
+ 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf4, 0xb, 0xc0, 0x0, 0x0, 0x6, 0xf5, 0x0, 0xbc, 0x0, 0x0, 0x4, 0xf7, 0x0, 0xb, 0xc0, 0x0, 0x3, 0xf9, 0x0, 0x0, 0xbc, 0x0, 0x2, 0xea, 0x0, 0x0, 0xb, 0xc0, 0x1, 0xec, 0x0, 0x0, 0x0, 0xbc, 0x1, 0xde, 0x10, 0x0, 0x0, 0xb, 0xc0, 0xcf, 0xf3, 0x0, 0x0, 0x0, 0xbc, 0xbe, 0x3d, 0xe1, 0x0, 0x0, 0xb, 0xff, 0x30, 0x2f, 0xb0, 0x0, 0x0, 0xbf, 0x40, 0x0, 0x5f, 0x80, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x7f, 0x50, 0x0, 0xbc, 0x0, 0x0, 0x0, 0xaf, 0x20, 0xb, 0xc0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x2, 0xeb, 0x0,
+
+ /* U+004C "L" */
+ 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbd, 0x55, 0x55, 0x55, 0x53, 0xbf, 0xff, 0xff, 0xff, 0xf9,
+
+ /* U+004D "M" */
+ 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xdb, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfd, 0xbf, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xdb, 0xef, 0x60, 0x0, 0x0, 0x0, 0x4f, 0xed, 0xbb, 0xbe, 0x0, 0x0, 0x0, 0xd, 0xc9, 0xdb, 0xb2, 0xf7, 0x0, 0x0, 0x5, 0xf3, 0x9d, 0xbb, 0x9, 0xf1, 0x0, 0x0, 0xda, 0x9, 0xdb, 0xb0, 0x1e, 0x90, 0x0, 0x6f, 0x10, 0x9d, 0xbb, 0x0, 0x6f, 0x20, 0xe, 0x80, 0x9, 0xdb, 0xb0, 0x0, 0xda, 0x8, 0xe0, 0x0, 0x9d, 0xbb, 0x0, 0x4, 0xf4, 0xf6, 0x0, 0x9, 0xdb, 0xb0, 0x0, 0xb, 0xfd, 0x0, 0x0, 0x9d, 0xbb, 0x0, 0x0, 0x2f, 0x40, 0x0, 0x9, 0xdb, 0xb0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x9d, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xd0,
+
+ /* U+004E "N" */
+ 0xbd, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbf, 0xa0, 0x0, 0x0, 0x0, 0x7f, 0xbf, 0xf6, 0x0, 0x0, 0x0, 0x7f, 0xbd, 0xef, 0x30, 0x0, 0x0, 0x7f, 0xbc, 0x4f, 0xd1, 0x0, 0x0, 0x7f, 0xbc, 0x7, 0xfb, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0xbf, 0x70, 0x0, 0x7f, 0xbc, 0x0, 0x1e, 0xf3, 0x0, 0x7f, 0xbc, 0x0, 0x3, 0xfe, 0x10, 0x7f, 0xbc, 0x0, 0x0, 0x7f, 0xc0, 0x7f, 0xbc, 0x0, 0x0, 0xa, 0xf8, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0xdf, 0xcf, 0xbc, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xbc, 0x0, 0x0, 0x0, 0x6, 0xff, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x9f,
+
+ /* U+004F "O" */
+ 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x0, 0x3, 0xef, 0xa6, 0x57, 0xbf, 0xc1, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xa0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x2b, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xaf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xab, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xa0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0x3, 0xef, 0xa7, 0x67, 0xcf, 0xc1, 0x0, 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x0,
+
+ /* U+0050 "P" */
+ 0xbf, 0xff, 0xff, 0xec, 0x60, 0x0, 0xbd, 0x55, 0x55, 0x6a, 0xfc, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x3f, 0x90, 0xbc, 0x0, 0x0, 0x0, 0x8, 0xf0, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf1, 0xbc, 0x0, 0x0, 0x0, 0x1e, 0xb0, 0xbc, 0x11, 0x11, 0x26, 0xee, 0x20, 0xbf, 0xff, 0xff, 0xff, 0xa1, 0x0, 0xbd, 0x44, 0x44, 0x30, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0051 "Q" */
+ 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x0, 0x0, 0x3e, 0xfa, 0x65, 0x7b, 0xfc, 0x10, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x0, 0x2, 0xfa, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xa0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xa0, 0xbd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x70, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0xd, 0xd0, 0x0, 0x0, 0x0, 0x2, 0xfa, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0x0, 0x3e, 0xfa, 0x76, 0x7c, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x7c, 0xff, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf7, 0x0, 0x0, 0x50, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x81, 0x18, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x5, 0xef, 0xfe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x20, 0x0,
+
+ /* U+0052 "R" */
+ 0xbf, 0xff, 0xff, 0xec, 0x60, 0x0, 0xbd, 0x55, 0x55, 0x6a, 0xfc, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x3f, 0x90, 0xbc, 0x0, 0x0, 0x0, 0x8, 0xf0, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf1, 0xbc, 0x0, 0x0, 0x0, 0x1e, 0xb0, 0xbc, 0x11, 0x11, 0x26, 0xee, 0x20, 0xbf, 0xff, 0xff, 0xff, 0xa1, 0x0, 0xbd, 0x44, 0x43, 0x4f, 0x70, 0x0, 0xbc, 0x0, 0x0, 0x7, 0xf2, 0x0, 0xbc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x2f, 0x70, 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf2,
+
+ /* U+0053 "S" */
+ 0x0, 0x6, 0xcf, 0xfe, 0xb6, 0x0, 0x0, 0xbf, 0x95, 0x46, 0xaf, 0x90, 0x6, 0xf4, 0x0, 0x0, 0x1, 0x20, 0xa, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x6, 0xcf, 0xfe, 0x92, 0x0, 0x0, 0x0, 0x1, 0x5a, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf4, 0xb, 0x50, 0x0, 0x0, 0x9, 0xf1, 0x9, 0xfd, 0x85, 0x57, 0xcf, 0x50, 0x0, 0x29, 0xdf, 0xfe, 0xa3, 0x0,
+
+ /* U+0054 "T" */
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x45, 0x55, 0x5f, 0xa5, 0x55, 0x52, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0,
+
+ /* U+0055 "U" */
+ 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xcb, 0x0, 0x0, 0x0, 0x0, 0xd9, 0xad, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x6f, 0x30, 0x0, 0x0, 0x5, 0xf3, 0xe, 0xd1, 0x0, 0x0, 0x2e, 0xb0, 0x3, 0xee, 0x96, 0x69, 0xfd, 0x10, 0x0, 0x19, 0xdf, 0xfd, 0x80, 0x0,
+
+ /* U+0056 "V" */
+ 0xbd, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcb, 0x5f, 0x40, 0x0, 0x0, 0x0, 0x3, 0xf4, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x7, 0xf1, 0x0, 0x0, 0x0, 0x1f, 0x70, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x10, 0x0, 0xae, 0x0, 0x0, 0x0, 0xda, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x4, 0xf3, 0x0, 0x0, 0xd, 0xb0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x6, 0xf2, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x8f, 0x0, 0x0, 0x0, 0x0, 0x9e, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x65, 0xf2, 0x0, 0x0, 0x0, 0x0, 0xc, 0xcc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xee, 0x0, 0x0, 0x0,
+
+ /* U+0057 "W" */
+ 0x1f, 0x60, 0x0, 0x0, 0x0, 0xaf, 0x0, 0x0, 0x0, 0x1, 0xf5, 0xc, 0xb0, 0x0, 0x0, 0x0, 0xff, 0x50, 0x0, 0x0, 0x6, 0xf0, 0x7, 0xf1, 0x0, 0x0, 0x5, 0xfd, 0xa0, 0x0, 0x0, 0xb, 0xb0, 0x2, 0xf5, 0x0, 0x0, 0xa, 0xb7, 0xf0, 0x0, 0x0, 0xf, 0x60, 0x0, 0xda, 0x0, 0x0, 0xf, 0x62, 0xf4, 0x0, 0x0, 0x5f, 0x10, 0x0, 0x8f, 0x0, 0x0, 0x4f, 0x10, 0xd9, 0x0, 0x0, 0xac, 0x0, 0x0, 0x3f, 0x40, 0x0, 0x9b, 0x0, 0x8e, 0x0, 0x0, 0xf7, 0x0, 0x0, 0xe, 0x90, 0x0, 0xe6, 0x0, 0x2f, 0x30, 0x4, 0xf2, 0x0, 0x0, 0x9, 0xe0, 0x4, 0xf1, 0x0, 0xd, 0x80, 0x9, 0xd0, 0x0, 0x0, 0x4, 0xf3, 0x9, 0xc0, 0x0, 0x8, 0xd0, 0xe, 0x80, 0x0, 0x0, 0x0, 0xf8, 0xe, 0x70, 0x0, 0x3, 0xf3, 0x3f, 0x30, 0x0, 0x0, 0x0, 0xad, 0x3f, 0x20, 0x0, 0x0, 0xe8, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xbc, 0x0, 0x0, 0x0, 0x9d, 0xd9, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0, 0x0, 0x4f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf2, 0x0, 0x0, 0x0, 0xe, 0xe0, 0x0, 0x0,
+
+ /* U+0058 "X" */
+ 0x1e, 0xb0, 0x0, 0x0, 0x0, 0x8f, 0x20, 0x4f, 0x60, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x9f, 0x20, 0x0, 0xd, 0xb0, 0x0, 0x0, 0xec, 0x0, 0x9, 0xe1, 0x0, 0x0, 0x4, 0xf7, 0x4, 0xf5, 0x0, 0x0, 0x0, 0x9, 0xf4, 0xea, 0x0, 0x0, 0x0, 0x0, 0xd, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xcf, 0x50, 0x0, 0x0, 0x0, 0xd, 0xc0, 0xbe, 0x10, 0x0, 0x0, 0x8, 0xf2, 0x1, 0xeb, 0x0, 0x0, 0x4, 0xf6, 0x0, 0x5, 0xf6, 0x0, 0x0, 0xeb, 0x0, 0x0, 0xa, 0xf2, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x1e, 0xb0, 0x5f, 0x60, 0x0, 0x0, 0x0, 0x4f, 0x60,
+
+ /* U+0059 "Y" */
+ 0xbd, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x62, 0xf7, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x8, 0xf1, 0x0, 0x0, 0x3, 0xf4, 0x0, 0x1e, 0x90, 0x0, 0x0, 0xca, 0x0, 0x0, 0x6f, 0x20, 0x0, 0x5f, 0x20, 0x0, 0x0, 0xdb, 0x0, 0xe, 0x80, 0x0, 0x0, 0x4, 0xf4, 0x8, 0xe0, 0x0, 0x0, 0x0, 0xb, 0xd2, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xed, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x0,
+
+ /* U+005A "Z" */
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x55, 0x55, 0x55, 0x55, 0x6f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x1, 0xeb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x65, 0x55, 0x55, 0x55, 0x52, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60,
+
+ /* U+005B "[" */
+ 0xbf, 0xff, 0xbc, 0x33, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbc, 0x33, 0xbf, 0xff,
+
+ /* U+005C "\\" */
+ 0x45, 0x0, 0x0, 0x0, 0x5, 0xe0, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xa9, 0x0, 0x0, 0x0, 0x5, 0xe0, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x9a, 0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0x4, 0xf0,
+
+ /* U+005D "]" */
+ 0x9f, 0xff, 0x12, 0x37, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x12, 0x37, 0xf1, 0x9f, 0xff, 0x10,
+
+ /* U+005E "^" */
+ 0x0, 0x0, 0x73, 0x0, 0x0, 0x0, 0x4f, 0xc0, 0x0, 0x0, 0xa, 0x7e, 0x30, 0x0, 0x1, 0xf1, 0x89, 0x0, 0x0, 0x7a, 0x2, 0xf0, 0x0, 0xe, 0x40, 0xb, 0x60, 0x5, 0xd0, 0x0, 0x5d, 0x0, 0xb7, 0x0, 0x0, 0xe3, 0x2f, 0x10, 0x0, 0x8, 0xa0,
+
+ /* U+005F "_" */
+ 0xff, 0xff, 0xff, 0xff, 0xff,
+
+ /* U+0060 "`" */
+ 0x7, 0x60, 0x0, 0x2, 0xda, 0x0, 0x0, 0xb, 0xb0,
+
+ /* U+0061 "a" */
+ 0x4, 0xae, 0xff, 0xb3, 0x6, 0xfb, 0x64, 0x6d, 0xf3, 0x14, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, 0x8, 0xe0, 0x6c, 0xef, 0xff, 0xfe, 0x7f, 0x73, 0x22, 0x29, 0xed, 0x90, 0x0, 0x0, 0x8e, 0xd9, 0x0, 0x0, 0xd, 0xe7, 0xf7, 0x11, 0x4c, 0xde, 0x6, 0xdf, 0xfc, 0x57, 0xe0,
+
+ /* U+0062 "b" */
+ 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x61, 0x9e, 0xfe, 0x91, 0x0, 0xf, 0x9e, 0xb6, 0x47, 0xee, 0x30, 0xf, 0xf7, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x60, 0x0, 0x0, 0x0, 0xca, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0xf8, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0x8e, 0xb6, 0x58, 0xee, 0x20, 0xf, 0x52, 0x9e, 0xfe, 0x91, 0x0,
+
+ /* U+0063 "c" */
+ 0x0, 0x4, 0xbe, 0xfe, 0x91, 0x0, 0x7, 0xfb, 0x64, 0x7e, 0xe1, 0x4, 0xf7, 0x0, 0x0, 0x1a, 0x20, 0xcc, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf8, 0x0, 0x0, 0x1a, 0x20, 0x7, 0xfb, 0x65, 0x8e, 0xd1, 0x0, 0x3, 0xbe, 0xfe, 0x91, 0x0,
+
+ /* U+0064 "d" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xd9, 0x0, 0x8f, 0xb5, 0x47, 0xea, 0xd9, 0x5, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0xc, 0xc0, 0x0, 0x0, 0x3, 0xf9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xd9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0xc, 0xc0, 0x0, 0x0, 0x4, 0xf9, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0x0, 0x8f, 0xb6, 0x58, 0xea, 0xc9, 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xc9,
+
+ /* U+0065 "e" */
+ 0x0, 0x5, 0xcf, 0xfc, 0x50, 0x0, 0x0, 0x8f, 0x95, 0x49, 0xf9, 0x0, 0x4, 0xf4, 0x0, 0x0, 0x4f, 0x50, 0xc, 0xa0, 0x0, 0x0, 0x9, 0xc0, 0xf, 0x60, 0x0, 0x0, 0x4, 0xf0, 0x1f, 0xfe, 0xee, 0xee, 0xef, 0xf2, 0xf, 0x71, 0x11, 0x11, 0x11, 0x10, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf7, 0x0, 0x0, 0x5, 0x0, 0x0, 0x7f, 0xc6, 0x56, 0xcf, 0x30, 0x0, 0x3, 0xbe, 0xfe, 0xa2, 0x0,
+
+ /* U+0066 "f" */
+ 0x0, 0x7, 0xef, 0xd3, 0x0, 0x6f, 0x74, 0x72, 0x0, 0xbb, 0x0, 0x0, 0x0, 0xc9, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xd0, 0x23, 0xdb, 0x33, 0x30, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0,
+
+ /* U+0067 "g" */
+ 0x0, 0x4, 0xbf, 0xfd, 0x70, 0xab, 0x0, 0x8f, 0xa4, 0x35, 0xcc, 0xab, 0x4, 0xf6, 0x0, 0x0, 0xb, 0xfb, 0xc, 0xc0, 0x0, 0x0, 0x1, 0xfb, 0xf, 0x70, 0x0, 0x0, 0x0, 0xcb, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xbb, 0xf, 0x70, 0x0, 0x0, 0x0, 0xcb, 0xc, 0xc0, 0x0, 0x0, 0x2, 0xfb, 0x4, 0xf7, 0x0, 0x0, 0xc, 0xfb, 0x0, 0x8f, 0xb6, 0x57, 0xeb, 0xbb, 0x0, 0x4, 0xbf, 0xfd, 0x70, 0xba, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x50, 0x0, 0x0, 0x6, 0xf2, 0x3, 0xfd, 0x85, 0x46, 0xaf, 0x80, 0x0, 0x18, 0xcf, 0xfe, 0xb5, 0x0,
+
+ /* U+0068 "h" */
+ 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x63, 0xbe, 0xfd, 0x80, 0x0, 0xfa, 0xfa, 0x65, 0x9f, 0xb0, 0xf, 0xf4, 0x0, 0x0, 0x6f, 0x40, 0xfb, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x70, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0,
+
+ /* U+0069 "i" */
+ 0x2f, 0x83, 0xf9, 0x0, 0x0, 0x0, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60,
+
+ /* U+006A "j" */
+ 0x0, 0x1, 0xe9, 0x0, 0x1, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe7, 0x0, 0x0, 0xf6, 0x56, 0x4b, 0xf1, 0x6e, 0xfd, 0x40,
+
+ /* U+006B "k" */
+ 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0xcd, 0x10, 0xf6, 0x0, 0x1, 0xcd, 0x10, 0xf, 0x60, 0x1, 0xdd, 0x10, 0x0, 0xf6, 0x1, 0xdd, 0x10, 0x0, 0xf, 0x62, 0xef, 0x20, 0x0, 0x0, 0xf9, 0xec, 0xfb, 0x0, 0x0, 0xf, 0xfc, 0x5, 0xf7, 0x0, 0x0, 0xfc, 0x0, 0x8, 0xf3, 0x0, 0xf, 0x60, 0x0, 0xc, 0xe1, 0x0, 0xf6, 0x0, 0x0, 0x1e, 0xb0, 0xf, 0x60, 0x0, 0x0, 0x4f, 0x70,
+
+ /* U+006C "l" */
+ 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60,
+
+ /* U+006D "m" */
+ 0xf, 0x53, 0xbf, 0xfd, 0x60, 0x4, 0xcf, 0xfc, 0x50, 0x0, 0xf9, 0xf9, 0x56, 0xbf, 0x77, 0xf9, 0x56, 0xbf, 0x70, 0xf, 0xf4, 0x0, 0x0, 0xaf, 0xf4, 0x0, 0x0, 0xbf, 0x0, 0xfb, 0x0, 0x0, 0x3, 0xfa, 0x0, 0x0, 0x3, 0xf3, 0xf, 0x70, 0x0, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x1f, 0x50, 0xf6, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x1, 0xf5, 0xf, 0x60, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x1f, 0x50, 0xf6, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x1, 0xf5, 0xf, 0x60, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x1f, 0x50, 0xf6, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x1, 0xf5, 0xf, 0x60, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x1f, 0x50,
+
+ /* U+006E "n" */
+ 0xf, 0x53, 0xbe, 0xfd, 0x80, 0x0, 0xf9, 0xfa, 0x65, 0x9f, 0xb0, 0xf, 0xf4, 0x0, 0x0, 0x6f, 0x40, 0xfb, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x70, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0,
+
+ /* U+006F "o" */
+ 0x0, 0x4, 0xbf, 0xfd, 0x81, 0x0, 0x0, 0x8f, 0xb5, 0x47, 0xee, 0x20, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xd0, 0xc, 0xc0, 0x0, 0x0, 0x3, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xd9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xb, 0xc0, 0x0, 0x0, 0x4, 0xf4, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xc0, 0x0, 0x7f, 0xb6, 0x58, 0xee, 0x20, 0x0, 0x4, 0xbf, 0xfd, 0x81, 0x0,
+
+ /* U+0070 "p" */
+ 0xf, 0x52, 0xae, 0xfe, 0x91, 0x0, 0xf, 0x8e, 0xb6, 0x47, 0xee, 0x30, 0xf, 0xf7, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x60, 0x0, 0x0, 0x0, 0xca, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0xf8, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0x8e, 0xb6, 0x58, 0xee, 0x20, 0xf, 0x61, 0x9e, 0xfe, 0x91, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0071 "q" */
+ 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xc9, 0x0, 0x8f, 0xb5, 0x47, 0xea, 0xc9, 0x5, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0xc, 0xc0, 0x0, 0x0, 0x3, 0xf9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xd9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0xc, 0xc0, 0x0, 0x0, 0x4, 0xf9, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0x0, 0x8f, 0xb6, 0x58, 0xea, 0xd9, 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9,
+
+ /* U+0072 "r" */
+ 0xf, 0x53, 0xbf, 0x40, 0xf9, 0xf9, 0x51, 0xf, 0xf4, 0x0, 0x0, 0xfb, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0,
+
+ /* U+0073 "s" */
+ 0x0, 0x7d, 0xff, 0xd9, 0x20, 0x9, 0xf8, 0x44, 0x7d, 0x80, 0xf, 0x60, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0xb, 0xf8, 0x30, 0x0, 0x0, 0x0, 0x8e, 0xff, 0xc7, 0x0, 0x0, 0x0, 0x14, 0x8f, 0xb0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x3, 0x0, 0x0, 0x6, 0xf1, 0x4f, 0xc7, 0x55, 0x8f, 0xa0, 0x4, 0xae, 0xff, 0xc7, 0x0,
+
+ /* U+0074 "t" */
+ 0x0, 0x65, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xd0, 0x23, 0xdb, 0x33, 0x30, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x6f, 0x84, 0x82, 0x0, 0x8, 0xef, 0xc3,
+
+ /* U+0075 "u" */
+ 0x2f, 0x40, 0x0, 0x0, 0xf, 0x72, 0xf4, 0x0, 0x0, 0x0, 0xf7, 0x2f, 0x40, 0x0, 0x0, 0xf, 0x72, 0xf4, 0x0, 0x0, 0x0, 0xf7, 0x2f, 0x40, 0x0, 0x0, 0xf, 0x72, 0xf4, 0x0, 0x0, 0x0, 0xf7, 0x1f, 0x50, 0x0, 0x0, 0xf, 0x70, 0xf7, 0x0, 0x0, 0x4, 0xf7, 0xb, 0xe1, 0x0, 0x0, 0xcf, 0x70, 0x3f, 0xd7, 0x57, 0xda, 0xe7, 0x0, 0x2b, 0xef, 0xd7, 0xe, 0x70,
+
+ /* U+0076 "v" */
+ 0xcb, 0x0, 0x0, 0x0, 0xc, 0x95, 0xf2, 0x0, 0x0, 0x3, 0xf2, 0xe, 0x80, 0x0, 0x0, 0xac, 0x0, 0x8e, 0x0, 0x0, 0x1f, 0x50, 0x1, 0xf6, 0x0, 0x7, 0xe0, 0x0, 0xa, 0xc0, 0x0, 0xe7, 0x0, 0x0, 0x3f, 0x30, 0x5f, 0x10, 0x0, 0x0, 0xca, 0xc, 0xa0, 0x0, 0x0, 0x6, 0xf4, 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x50, 0x0, 0x0,
+
+ /* U+0077 "w" */
+ 0xab, 0x0, 0x0, 0x0, 0xf9, 0x0, 0x0, 0x1, 0xf3, 0x4f, 0x10, 0x0, 0x5, 0xfe, 0x0, 0x0, 0x6, 0xd0, 0xe, 0x60, 0x0, 0xb, 0xaf, 0x50, 0x0, 0xc, 0x80, 0x9, 0xc0, 0x0, 0x1f, 0x3a, 0xa0, 0x0, 0x2f, 0x20, 0x3, 0xf1, 0x0, 0x6d, 0x4, 0xf1, 0x0, 0x7c, 0x0, 0x0, 0xd7, 0x0, 0xc7, 0x0, 0xe6, 0x0, 0xd6, 0x0, 0x0, 0x8d, 0x2, 0xf1, 0x0, 0x8c, 0x3, 0xf1, 0x0, 0x0, 0x2f, 0x28, 0xc0, 0x0, 0x3f, 0x19, 0xb0, 0x0, 0x0, 0xc, 0x8e, 0x60, 0x0, 0xd, 0x7e, 0x50, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0x1, 0xfa, 0x0, 0x0, 0x1, 0xf9, 0x0, 0x0,
+
+ /* U+0078 "x" */
+ 0x1e, 0x80, 0x0, 0x0, 0xdb, 0x0, 0x5f, 0x40, 0x0, 0x9e, 0x10, 0x0, 0x9e, 0x10, 0x5f, 0x30, 0x0, 0x0, 0xcb, 0x2e, 0x70, 0x0, 0x0, 0x2, 0xfe, 0xb0, 0x0, 0x0, 0x0, 0xa, 0xf5, 0x0, 0x0, 0x0, 0x5, 0xfc, 0xe1, 0x0, 0x0, 0x1, 0xe8, 0xd, 0xb0, 0x0, 0x0, 0xcc, 0x0, 0x2f, 0x70, 0x0, 0x8f, 0x20, 0x0, 0x6f, 0x30, 0x4f, 0x50, 0x0, 0x0, 0xad, 0x0,
+
+ /* U+0079 "y" */
+ 0xc, 0xb0, 0x0, 0x0, 0x0, 0xc9, 0x5, 0xf2, 0x0, 0x0, 0x3, 0xf2, 0x0, 0xe9, 0x0, 0x0, 0xa, 0xb0, 0x0, 0x7f, 0x0, 0x0, 0x1f, 0x40, 0x0, 0x1f, 0x60, 0x0, 0x8d, 0x0, 0x0, 0x9, 0xd0, 0x0, 0xe7, 0x0, 0x0, 0x2, 0xf4, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xbb, 0xc, 0x90, 0x0, 0x0, 0x0, 0x5f, 0x5f, 0x20, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x3c, 0x55, 0xdd, 0x0, 0x0, 0x0, 0x1a, 0xff, 0xb1, 0x0, 0x0, 0x0,
+
+ /* U+007A "z" */
+ 0xf, 0xff, 0xff, 0xff, 0xf4, 0x3, 0x33, 0x33, 0x3d, 0xd0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0x0, 0x0, 0x3, 0xf5, 0x0, 0x0, 0x0, 0x1e, 0x90, 0x0, 0x0, 0x0, 0xbd, 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x0, 0x1, 0xe9, 0x0, 0x0, 0x0, 0xb, 0xe4, 0x33, 0x33, 0x31, 0x2f, 0xff, 0xff, 0xff, 0xf6,
+
+ /* U+007B "{" */
+ 0x0, 0x5d, 0xf4, 0x0, 0xfb, 0x40, 0x3, 0xf4, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x6, 0xf2, 0x0, 0xcf, 0xb0, 0x0, 0x28, 0xf1, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x0, 0xfb, 0x41, 0x0, 0x5d, 0xf4,
+
+ /* U+007C "|" */
+ 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
+
+ /* U+007D "}" */
+ 0x9f, 0xb2, 0x0, 0x25, 0xeb, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x7f, 0x20, 0x0, 0x1e, 0xf7, 0x0, 0x6f, 0x51, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x25, 0xeb, 0x0, 0x9f, 0xb2, 0x0,
+
+ /* U+007E "~" */
+ 0x9, 0xfd, 0x50, 0x0, 0xc3, 0x6c, 0x36, 0xe8, 0x4, 0xe0, 0xb4, 0x0, 0x2c, 0xff, 0x50, 0x10, 0x0, 0x0, 0x20, 0x0,
+
+ /* U+0401 "Ё" */
+ 0x0, 0x4e, 0x20, 0xba, 0x0, 0x0, 0x3, 0xb1, 0x8, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xae, 0x55, 0x55, 0x55, 0x55, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xf1, 0xa, 0xe3, 0x33, 0x33, 0x33, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xae, 0x55, 0x55, 0x55, 0x55, 0x1a, 0xff, 0xff, 0xff, 0xff, 0xf4,
+
+ /* U+0410 "А" */
+ 0x0, 0x0, 0x0, 0x8f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf5, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xca, 0xc, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x6f, 0x10, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x0, 0x8, 0xe0, 0x0, 0x0, 0x0, 0x8f, 0x0, 0x0, 0x2f, 0x50, 0x0, 0x0, 0xe, 0x80, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x5, 0xf3, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x3f, 0x63, 0x33, 0x33, 0x33, 0x8f, 0x10, 0xa, 0xe0, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x1, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0x7f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x50,
+
+ /* U+0411 "Б" */
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0x90, 0xad, 0x44, 0x44, 0x44, 0x44, 0x20, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xc6, 0x0, 0xad, 0x33, 0x33, 0x35, 0xaf, 0xa0, 0xad, 0x0, 0x0, 0x0, 0x7, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x0, 0x0, 0x0, 0x8, 0xf2, 0xad, 0x33, 0x33, 0x35, 0xaf, 0x80, 0xaf, 0xff, 0xff, 0xfe, 0xb4, 0x0,
+
+ /* U+0412 "В" */
+ 0xaf, 0xff, 0xff, 0xfe, 0xa2, 0x0, 0xad, 0x33, 0x33, 0x36, 0xdf, 0x30, 0xad, 0x0, 0x0, 0x0, 0x1e, 0xb0, 0xad, 0x0, 0x0, 0x0, 0x9, 0xe0, 0xad, 0x0, 0x0, 0x0, 0x9, 0xe0, 0xad, 0x0, 0x0, 0x0, 0xd, 0xa0, 0xad, 0x0, 0x0, 0x3, 0xbd, 0x10, 0xaf, 0xff, 0xff, 0xff, 0xf5, 0x0, 0xad, 0x33, 0x33, 0x34, 0x7e, 0xa0, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf5, 0xad, 0x0, 0x0, 0x0, 0x0, 0xd9, 0xad, 0x0, 0x0, 0x0, 0x0, 0xe9, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf6, 0xad, 0x33, 0x33, 0x34, 0x8f, 0xc0, 0xaf, 0xff, 0xff, 0xff, 0xc7, 0x0,
+
+ /* U+0413 "Г" */
+ 0xaf, 0xff, 0xff, 0xff, 0xf4, 0xad, 0x55, 0x55, 0x55, 0x51, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0414 "Д" */
+ 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x5, 0xf5, 0x55, 0x55, 0x58, 0xf2, 0x0, 0x0, 0x6, 0xe0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x7, 0xd0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x8, 0xc0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x9, 0xb0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xb, 0xa0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x3f, 0x20, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x49, 0xf8, 0x55, 0x55, 0x55, 0x58, 0xf6, 0x51, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf3, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf3, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf3, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40,
+
+ /* U+0415 "Е" */
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xa, 0xe5, 0x55, 0x55, 0x55, 0x50, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0x10, 0xae, 0x33, 0x33, 0x33, 0x30, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe5, 0x55, 0x55, 0x55, 0x51, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x40,
+
+ /* U+0416 "Ж" */
+ 0xd, 0xb0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x8, 0xf1, 0x4, 0xf5, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x2f, 0x70, 0x0, 0xad, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0xbd, 0x0, 0x0, 0x1f, 0x70, 0x0, 0x9, 0xd0, 0x0, 0x4, 0xf4, 0x0, 0x0, 0x7, 0xf1, 0x0, 0x9, 0xd0, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0xda, 0x0, 0x9, 0xd0, 0x0, 0x7f, 0x10, 0x0, 0x0, 0x0, 0x3f, 0x41, 0x1a, 0xd1, 0x12, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x74, 0x4b, 0xe4, 0x45, 0xf9, 0x0, 0x0, 0x0, 0x1, 0xfb, 0x0, 0x9, 0xd0, 0x0, 0x7f, 0x40, 0x0, 0x0, 0xa, 0xf1, 0x0, 0x9, 0xd0, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x4f, 0x60, 0x0, 0x9, 0xd0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0xec, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x9f, 0x20, 0x9, 0xf2, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0xe, 0xc0, 0x3f, 0x80, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x4, 0xf6,
+
+ /* U+0417 "З" */
+ 0x0, 0x15, 0x9a, 0x96, 0x10, 0x0, 0x7, 0xff, 0xdb, 0xcf, 0xf6, 0x0, 0x7, 0x71, 0x0, 0x1, 0xaf, 0x40, 0x0, 0x0, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x90, 0x0, 0x0, 0x0, 0x3, 0xbe, 0x10, 0x0, 0xb, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x2, 0x33, 0x35, 0xaf, 0x50, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf5, 0x9, 0x10, 0x0, 0x0, 0x1c, 0xf1, 0x1c, 0xfa, 0x64, 0x59, 0xef, 0x40, 0x0, 0x5b, 0xff, 0xfe, 0x92, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
+
+ /* U+0418 "И" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x4f, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x1e, 0xff, 0x2a, 0xd0, 0x0, 0x0, 0xb, 0xe6, 0xf2, 0xad, 0x0, 0x0, 0x7, 0xf4, 0x5f, 0x2a, 0xd0, 0x0, 0x3, 0xf9, 0x5, 0xf2, 0xad, 0x0, 0x0, 0xdc, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0xaf, 0x20, 0x5, 0xf2, 0xad, 0x0, 0x5f, 0x60, 0x0, 0x5f, 0x2a, 0xd0, 0x2f, 0xa0, 0x0, 0x5, 0xf2, 0xad, 0xc, 0xe1, 0x0, 0x0, 0x5f, 0x2a, 0xd8, 0xf3, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0xf8, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xfc, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0x20, 0x0, 0x0, 0x0, 0x5f, 0x20,
+
+ /* U+0419 "Й" */
+ 0x0, 0x8, 0x0, 0x0, 0x53, 0x0, 0x0, 0x0, 0xc8, 0x0, 0x3e, 0x30, 0x0, 0x0, 0x1, 0xad, 0xec, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x4f, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x1e, 0xff, 0x2a, 0xd0, 0x0, 0x0, 0xb, 0xe6, 0xf2, 0xad, 0x0, 0x0, 0x7, 0xf4, 0x5f, 0x2a, 0xd0, 0x0, 0x3, 0xf9, 0x5, 0xf2, 0xad, 0x0, 0x0, 0xdc, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0xaf, 0x20, 0x5, 0xf2, 0xad, 0x0, 0x5f, 0x60, 0x0, 0x5f, 0x2a, 0xd0, 0x2f, 0xa0, 0x0, 0x5, 0xf2, 0xad, 0xc, 0xe1, 0x0, 0x0, 0x5f, 0x2a, 0xd8, 0xf3, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0xf8, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xfc, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0x20, 0x0, 0x0, 0x0, 0x5f, 0x20,
+
+ /* U+041A "К" */
+ 0xac, 0x0, 0x0, 0x0, 0x9, 0xe1, 0xac, 0x0, 0x0, 0x0, 0x4f, 0x40, 0xac, 0x0, 0x0, 0x1, 0xe9, 0x0, 0xac, 0x0, 0x0, 0xa, 0xd0, 0x0, 0xac, 0x0, 0x0, 0x5f, 0x30, 0x0, 0xac, 0x0, 0x1, 0xf7, 0x0, 0x0, 0xad, 0x11, 0x1b, 0xc0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0x50, 0x0, 0x0, 0xad, 0x44, 0x4d, 0xd0, 0x0, 0x0, 0xac, 0x0, 0x2, 0xfa, 0x0, 0x0, 0xac, 0x0, 0x0, 0x5f, 0x50, 0x0, 0xac, 0x0, 0x0, 0xa, 0xf2, 0x0, 0xac, 0x0, 0x0, 0x0, 0xdc, 0x0, 0xac, 0x0, 0x0, 0x0, 0x3f, 0x80, 0xac, 0x0, 0x0, 0x0, 0x6, 0xf4,
+
+ /* U+041B "Л" */
+ 0x0, 0x2, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x3, 0xf6, 0x55, 0x55, 0x56, 0xf5, 0x0, 0x3, 0xf1, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x6, 0xe0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x7, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x9, 0xb0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0xb, 0x90, 0x0, 0x0, 0x2, 0xf5, 0x0, 0xf, 0x60, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x6f, 0x20, 0x0, 0x0, 0x2, 0xf5, 0x58, 0xfb, 0x0, 0x0, 0x0, 0x2, 0xf5, 0xbf, 0xb1, 0x0, 0x0, 0x0, 0x2, 0xf5,
+
+ /* U+041C "М" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xea, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x2, 0xfe, 0xaf, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xea, 0xef, 0x70, 0x0, 0x0, 0x0, 0x3f, 0xee, 0xac, 0x9f, 0x10, 0x0, 0x0, 0xb, 0xd8, 0xea, 0xc1, 0xf9, 0x0, 0x0, 0x4, 0xf4, 0x8e, 0xac, 0x7, 0xf2, 0x0, 0x0, 0xcb, 0x8, 0xea, 0xc0, 0xe, 0xa0, 0x0, 0x5f, 0x20, 0x8e, 0xac, 0x0, 0x5f, 0x30, 0xd, 0x90, 0x8, 0xea, 0xc0, 0x0, 0xcb, 0x6, 0xf1, 0x0, 0x8e, 0xac, 0x0, 0x3, 0xf5, 0xe7, 0x0, 0x8, 0xea, 0xc0, 0x0, 0xa, 0xfe, 0x0, 0x0, 0x8e, 0xac, 0x0, 0x0, 0x1f, 0x50, 0x0, 0x8, 0xea, 0xc0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x8e, 0xac, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xe0,
+
+ /* U+041D "Н" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x11, 0x11, 0x11, 0x11, 0x7f, 0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xae, 0x44, 0x44, 0x44, 0x44, 0x9f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10,
+
+ /* U+041E "О" */
+ 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0, 0x0, 0x2, 0xdf, 0xb7, 0x57, 0xbf, 0xd2, 0x0, 0x2, 0xed, 0x20, 0x0, 0x0, 0x3d, 0xe2, 0x0, 0xce, 0x10, 0x0, 0x0, 0x0, 0x1e, 0xc0, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x49, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0xca, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xcd, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0xca, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x40, 0xce, 0x10, 0x0, 0x0, 0x0, 0x1e, 0xc0, 0x2, 0xed, 0x20, 0x0, 0x0, 0x3d, 0xe2, 0x0, 0x2, 0xdf, 0xb7, 0x67, 0xbf, 0xd2, 0x0, 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0, 0x0,
+
+ /* U+041F "П" */
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0xe5, 0x55, 0x55, 0x55, 0x58, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x20,
+
+ /* U+0420 "Р" */
+ 0xaf, 0xff, 0xff, 0xfc, 0x70, 0x0, 0xae, 0x55, 0x55, 0x6a, 0xfd, 0x10, 0xad, 0x0, 0x0, 0x0, 0x3e, 0xa0, 0xad, 0x0, 0x0, 0x0, 0x7, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x2, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0xd, 0xc0, 0xad, 0x11, 0x11, 0x26, 0xdf, 0x30, 0xaf, 0xff, 0xff, 0xff, 0xb2, 0x0, 0xae, 0x44, 0x44, 0x30, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0421 "С" */
+ 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0, 0x2, 0xdf, 0xb7, 0x57, 0xaf, 0xd2, 0x2, 0xed, 0x30, 0x0, 0x0, 0x2d, 0x40, 0xce, 0x10, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce, 0x10, 0x0, 0x0, 0x0, 0x0, 0x2, 0xed, 0x30, 0x0, 0x0, 0x3d, 0x40, 0x2, 0xdf, 0xb7, 0x67, 0xbf, 0xd1, 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0,
+
+ /* U+0422 "Т" */
+ 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x45, 0x55, 0x5e, 0xb5, 0x55, 0x52, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0,
+
+ /* U+0423 "У" */
+ 0x5f, 0x40, 0x0, 0x0, 0x0, 0x6, 0xf2, 0xc, 0xc0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x4, 0xf3, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x4f, 0x30, 0x0, 0x6, 0xf1, 0x0, 0x0, 0xc, 0xb0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x4, 0xf3, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0xcb, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x36, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xc, 0xbd, 0x70, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x86, 0xaf, 0x50, 0x0, 0x0, 0x0, 0x2, 0xdf, 0xd5, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0424 "Ф" */
+ 0x0, 0x0, 0x0, 0x6, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c, 0xef, 0xff, 0xda, 0x50, 0x0, 0x0, 0xa, 0xfc, 0x75, 0xae, 0x46, 0xaf, 0xd3, 0x0, 0xc, 0xe4, 0x0, 0x8, 0xd0, 0x0, 0x1b, 0xf2, 0x6, 0xf3, 0x0, 0x0, 0x8d, 0x0, 0x0, 0xd, 0xc0, 0xca, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x5f, 0x2f, 0x70, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x2, 0xf4, 0xf7, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x1f, 0x5d, 0xa0, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x4, 0xf2, 0x8f, 0x10, 0x0, 0x8, 0xd0, 0x0, 0x0, 0xbd, 0x0, 0xdd, 0x20, 0x0, 0x8d, 0x0, 0x0, 0x9f, 0x40, 0x2, 0xdf, 0x94, 0x28, 0xd1, 0x37, 0xdf, 0x50, 0x0, 0x0, 0x6b, 0xff, 0xff, 0xff, 0xd8, 0x10, 0x0, 0x0, 0x0, 0x0, 0x19, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x59, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0425 "Х" */
+ 0xd, 0xd0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x9f, 0x30, 0x0, 0x9f, 0x30, 0x0, 0x3f, 0x80, 0x0, 0x0, 0xdd, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x3, 0xf8, 0x9, 0xf3, 0x0, 0x0, 0x0, 0x9, 0xf7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xe, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xdf, 0x40, 0x0, 0x0, 0x0, 0xd, 0xd0, 0xde, 0x0, 0x0, 0x0, 0x9, 0xf3, 0x3, 0xf9, 0x0, 0x0, 0x3, 0xf7, 0x0, 0x8, 0xf4, 0x0, 0x0, 0xdc, 0x0, 0x0, 0xd, 0xd0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x3f, 0x90, 0x3f, 0x70, 0x0, 0x0, 0x0, 0x8f, 0x30,
+
+ /* U+0426 "Ц" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xae, 0x55, 0x55, 0x55, 0x55, 0xdd, 0x55, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37,
+
+ /* U+0427 "Ч" */
+ 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xca, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xbd, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x6f, 0x50, 0x0, 0x0, 0x4, 0xf3, 0xc, 0xf8, 0x21, 0x25, 0xaf, 0xf3, 0x1, 0x9f, 0xff, 0xff, 0xb8, 0xf3, 0x0, 0x0, 0x34, 0x20, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3,
+
+ /* U+0428 "Ш" */
+ 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xae, 0x55, 0x55, 0x55, 0xdc, 0x55, 0x55, 0x55, 0xf8, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+
+ /* U+0429 "Щ" */
+ 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xae, 0x55, 0x55, 0x55, 0xdc, 0x55, 0x55, 0x55, 0xfa, 0x53, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x55,
+
+ /* U+042A "Ъ" */
+ 0xcf, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45, 0x55, 0x9f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xc6, 0x0, 0x0, 0x0, 0x6f, 0x43, 0x33, 0x35, 0xbf, 0x90, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x8, 0xf3, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x9, 0xf1, 0x0, 0x0, 0x6f, 0x43, 0x33, 0x35, 0xbf, 0x60, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xfe, 0xa3, 0x0,
+
+ /* U+042B "Ы" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xaf, 0xff, 0xff, 0xfe, 0xb4, 0x0, 0x4, 0xf3, 0xad, 0x33, 0x33, 0x46, 0xcf, 0x60, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0xb, 0xf0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x2, 0xf4, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0xc, 0xe0, 0x4, 0xf3, 0xad, 0x33, 0x33, 0x46, 0xdf, 0x40, 0x4, 0xf3, 0xaf, 0xff, 0xff, 0xfd, 0x92, 0x0, 0x4, 0xf3,
+
+ /* U+042C "Ь" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xfe, 0xb4, 0x0, 0xad, 0x33, 0x33, 0x46, 0xcf, 0x60, 0xad, 0x0, 0x0, 0x0, 0xb, 0xf0, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x2, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0xc, 0xe0, 0xad, 0x33, 0x33, 0x46, 0xdf, 0x40, 0xaf, 0xff, 0xff, 0xfd, 0x92, 0x0,
+
+ /* U+042D "Э" */
+ 0x0, 0x39, 0xdf, 0xfd, 0x81, 0x0, 0x0, 0x8f, 0xd8, 0x66, 0x9f, 0xf4, 0x0, 0x1e, 0x70, 0x0, 0x0, 0x1b, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x23, 0x33, 0x33, 0x3b, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x0, 0x0, 0x0, 0xc, 0xe0, 0x1c, 0x50, 0x0, 0x0, 0x1b, 0xf4, 0x0, 0x9f, 0xd8, 0x66, 0xaf, 0xf5, 0x0, 0x0, 0x3a, 0xdf, 0xfd, 0x81, 0x0, 0x0,
+
+ /* U+042E "Ю" */
+ 0xad, 0x0, 0x0, 0x0, 0x3a, 0xef, 0xfc, 0x60, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x9f, 0xb6, 0x45, 0x9f, 0xd2, 0x0, 0xad, 0x0, 0x0, 0xaf, 0x50, 0x0, 0x0, 0x2d, 0xe1, 0xa, 0xd0, 0x0, 0x5f, 0x50, 0x0, 0x0, 0x0, 0x1e, 0xa0, 0xad, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x1a, 0xd0, 0x1, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x11, 0x5f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xe, 0x9a, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, 0xad, 0x44, 0x7f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xe, 0x9a, 0xd0, 0x1, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x1a, 0xd0, 0x0, 0x5f, 0x60, 0x0, 0x0, 0x0, 0x1e, 0xa0, 0xad, 0x0, 0x0, 0xaf, 0x50, 0x0, 0x0, 0x2d, 0xe1, 0xa, 0xd0, 0x0, 0x0, 0x9f, 0xb6, 0x45, 0x9f, 0xd2, 0x0, 0xad, 0x0, 0x0, 0x0, 0x3a, 0xef, 0xfc, 0x60, 0x0, 0x0,
+
+ /* U+042F "Я" */
+ 0x0, 0x29, 0xef, 0xff, 0xff, 0xf4, 0x5, 0xfd, 0x85, 0x55, 0x57, 0xf4, 0x1f, 0xb0, 0x0, 0x0, 0x3, 0xf4, 0x7f, 0x10, 0x0, 0x0, 0x3, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf4, 0x8f, 0x0, 0x0, 0x0, 0x3, 0xf4, 0x3f, 0x70, 0x0, 0x0, 0x3, 0xf4, 0x9, 0xf8, 0x31, 0x0, 0x3, 0xf4, 0x0, 0x7e, 0xff, 0xff, 0xff, 0xf4, 0x0, 0xd, 0xb3, 0x33, 0x36, 0xf4, 0x0, 0x7f, 0x10, 0x0, 0x3, 0xf4, 0x2, 0xf7, 0x0, 0x0, 0x3, 0xf4, 0xb, 0xd0, 0x0, 0x0, 0x3, 0xf4, 0x6f, 0x30, 0x0, 0x0, 0x3, 0xf4,
+
+ /* U+0430 "а" */
+ 0x4, 0xae, 0xff, 0xb3, 0x6, 0xfb, 0x64, 0x6d, 0xf3, 0x14, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x8, 0xe0, 0x6c, 0xef, 0xff, 0xfe, 0x7f, 0x73, 0x22, 0x29, 0xed, 0x90, 0x0, 0x0, 0x8e, 0xd9, 0x0, 0x0, 0xd, 0xe7, 0xf6, 0x11, 0x4c, 0xce, 0x6, 0xdf, 0xfc, 0x57, 0xe0,
+
+ /* U+0431 "б" */
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0x30, 0x0, 0x0, 0x5, 0x9d, 0xff, 0x80, 0x0, 0x8, 0xff, 0xd9, 0x52, 0x0, 0x0, 0xcf, 0x71, 0x0, 0x0, 0x0, 0x8, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x5, 0xcf, 0xfe, 0x80, 0x0, 0x8d, 0x8e, 0x74, 0x49, 0xfd, 0x0, 0xae, 0xd1, 0x0, 0x0, 0x3f, 0x90, 0xaf, 0x50, 0x0, 0x0, 0x9, 0xf0, 0x9f, 0x10, 0x0, 0x0, 0x5, 0xf2, 0x6f, 0x10, 0x0, 0x0, 0x5, 0xf1, 0x2f, 0x60, 0x0, 0x0, 0x9, 0xe0, 0xb, 0xe2, 0x0, 0x0, 0x4f, 0x70, 0x1, 0xee, 0x74, 0x48, 0xfb, 0x0, 0x0, 0x19, 0xef, 0xfc, 0x60, 0x0,
+
+ /* U+0432 "в" */
+ 0xff, 0xff, 0xff, 0xb3, 0xf, 0x72, 0x22, 0x4b, 0xf2, 0xf6, 0x0, 0x0, 0xf, 0x7f, 0x60, 0x0, 0x0, 0xf6, 0xf6, 0x0, 0x1, 0x9e, 0x1f, 0xff, 0xff, 0xff, 0x50, 0xf7, 0x22, 0x22, 0x6f, 0x6f, 0x60, 0x0, 0x0, 0xac, 0xf6, 0x0, 0x0, 0xa, 0xdf, 0x82, 0x22, 0x37, 0xf7, 0xff, 0xff, 0xff, 0xd7, 0x0,
+
+ /* U+0433 "г" */
+ 0xff, 0xff, 0xff, 0xf7, 0xf9, 0x44, 0x44, 0x42, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0,
+
+ /* U+0434 "д" */
+ 0x0, 0x2f, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x2, 0xf6, 0x44, 0x44, 0xda, 0x0, 0x0, 0x3f, 0x10, 0x0, 0xc, 0xa0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x5f, 0x0, 0x0, 0xc, 0xa0, 0x0, 0x6, 0xe0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x7d, 0x0, 0x0, 0xc, 0xa0, 0x0, 0xa, 0xa0, 0x0, 0x0, 0xca, 0x0, 0x0, 0xe6, 0x0, 0x0, 0xc, 0xa0, 0x3, 0xaf, 0x44, 0x44, 0x44, 0xdb, 0x41, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x80, 0x0, 0x0, 0x0, 0x1, 0xf4, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x46, 0x40, 0x0, 0x0, 0x0, 0x0, 0x82,
+
+ /* U+0435 "е" */
+ 0x0, 0x4b, 0xff, 0xc6, 0x0, 0x0, 0x7f, 0xa5, 0x48, 0xfa, 0x0, 0x3f, 0x50, 0x0, 0x3, 0xf6, 0xa, 0xb0, 0x0, 0x0, 0x8, 0xe0, 0xe7, 0x0, 0x0, 0x0, 0x3f, 0x2f, 0xfe, 0xee, 0xee, 0xef, 0xf3, 0xe8, 0x11, 0x11, 0x11, 0x11, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x51, 0x0, 0x6f, 0xc7, 0x56, 0xbf, 0x40, 0x0, 0x3a, 0xef, 0xea, 0x30, 0x0,
+
+ /* U+0436 "ж" */
+ 0x1f, 0x80, 0x0, 0x7, 0xf0, 0x0, 0x1, 0xe8, 0x0, 0x6f, 0x20, 0x0, 0x7f, 0x0, 0x0, 0x9e, 0x0, 0x0, 0xcb, 0x0, 0x7, 0xf0, 0x0, 0x3f, 0x40, 0x0, 0x2, 0xf5, 0x0, 0x7f, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x7, 0xe1, 0x7, 0xf0, 0x7, 0xe1, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x9, 0xf4, 0x39, 0xf3, 0x39, 0xf2, 0x0, 0x0, 0x4, 0xf6, 0x0, 0x7f, 0x0, 0xd, 0xc0, 0x0, 0x1, 0xeb, 0x0, 0x7, 0xf0, 0x0, 0x3f, 0x70, 0x0, 0xaf, 0x10, 0x0, 0x7f, 0x0, 0x0, 0x8f, 0x30, 0x5f, 0x60, 0x0, 0x7, 0xf0, 0x0, 0x0, 0xdd, 0x0,
+
+ /* U+0437 "з" */
+ 0x2, 0x9e, 0xff, 0xc6, 0x0, 0xc, 0xc7, 0x56, 0xaf, 0xa0, 0x1, 0x0, 0x0, 0x8, 0xf1, 0x0, 0x0, 0x0, 0x5, 0xf1, 0x0, 0x0, 0x0, 0x3d, 0x90, 0x0, 0x9, 0xff, 0xfb, 0x0, 0x0, 0x1, 0x22, 0x4c, 0xe1, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x1, 0x0, 0x0, 0x3, 0xf6, 0x3f, 0xa6, 0x45, 0x8f, 0xc0, 0x3, 0xae, 0xff, 0xc7, 0x0,
+
+ /* U+0438 "и" */
+ 0xf7, 0x0, 0x0, 0x1, 0xdb, 0xf7, 0x0, 0x0, 0xb, 0xfb, 0xf7, 0x0, 0x0, 0x8f, 0xdb, 0xf7, 0x0, 0x5, 0xf4, 0xbb, 0xf7, 0x0, 0x3f, 0x70, 0xbb, 0xf7, 0x1, 0xea, 0x0, 0xbb, 0xf7, 0xc, 0xd0, 0x0, 0xbb, 0xf7, 0x9f, 0x20, 0x0, 0xbb, 0xfc, 0xf4, 0x0, 0x0, 0xbb, 0xff, 0x70, 0x0, 0x0, 0xbb, 0xfb, 0x0, 0x0, 0x0, 0xbb,
+
+ /* U+0439 "й" */
+ 0x2, 0xe0, 0x0, 0x5b, 0x0, 0x0, 0xd7, 0x1, 0xc6, 0x0, 0x0, 0x2b, 0xed, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x1, 0xdb, 0xf7, 0x0, 0x0, 0xb, 0xfb, 0xf7, 0x0, 0x0, 0x8f, 0xdb, 0xf7, 0x0, 0x5, 0xf4, 0xbb, 0xf7, 0x0, 0x3f, 0x70, 0xbb, 0xf7, 0x1, 0xea, 0x0, 0xbb, 0xf7, 0xc, 0xd0, 0x0, 0xbb, 0xf7, 0x9f, 0x20, 0x0, 0xbb, 0xfc, 0xf4, 0x0, 0x0, 0xbb, 0xff, 0x70, 0x0, 0x0, 0xbb, 0xfb, 0x0, 0x0, 0x0, 0xbb,
+
+ /* U+043A "к" */
+ 0xf7, 0x0, 0x0, 0xc, 0xb0, 0xf7, 0x0, 0x0, 0x9e, 0x10, 0xf7, 0x0, 0x5, 0xf3, 0x0, 0xf7, 0x0, 0x2e, 0x70, 0x0, 0xf7, 0x0, 0xca, 0x0, 0x0, 0xff, 0xff, 0xf2, 0x0, 0x0, 0xf9, 0x33, 0xdc, 0x0, 0x0, 0xf7, 0x0, 0x2f, 0x90, 0x0, 0xf7, 0x0, 0x5, 0xf6, 0x0, 0xf7, 0x0, 0x0, 0x7f, 0x30, 0xf7, 0x0, 0x0, 0xa, 0xe1,
+
+ /* U+043B "л" */
+ 0x0, 0x1f, 0xff, 0xff, 0xff, 0xa0, 0x2, 0xf6, 0x44, 0x44, 0xda, 0x0, 0x3f, 0x10, 0x0, 0xc, 0xa0, 0x3, 0xf0, 0x0, 0x0, 0xca, 0x0, 0x4f, 0x0, 0x0, 0xc, 0xa0, 0x5, 0xe0, 0x0, 0x0, 0xca, 0x0, 0x7d, 0x0, 0x0, 0xc, 0xa0, 0x9, 0xb0, 0x0, 0x0, 0xca, 0x0, 0xd7, 0x0, 0x0, 0xc, 0xa3, 0x8f, 0x20, 0x0, 0x0, 0xca, 0xdf, 0x60, 0x0, 0x0, 0xc, 0xa0,
+
+ /* U+043C "м" */
+ 0xfb, 0x0, 0x0, 0x0, 0x0, 0xdc, 0xff, 0x40, 0x0, 0x0, 0x6, 0xfc, 0xfd, 0xd0, 0x0, 0x0, 0xe, 0xdc, 0xf5, 0xe6, 0x0, 0x0, 0x8c, 0x8c, 0xf5, 0x6e, 0x10, 0x2, 0xf3, 0x8c, 0xf5, 0xc, 0x80, 0xb, 0x90, 0x8c, 0xf5, 0x3, 0xf2, 0x4f, 0x10, 0x8c, 0xf5, 0x0, 0xab, 0xd7, 0x0, 0x8c, 0xf5, 0x0, 0x2f, 0xd0, 0x0, 0x8c, 0xf5, 0x0, 0x6, 0x40, 0x0, 0x8c, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x8c,
+
+ /* U+043D "н" */
+ 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf9, 0x33, 0x33, 0x33, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7,
+
+ /* U+043E "о" */
+ 0x0, 0x3b, 0xef, 0xe9, 0x10, 0x0, 0x6f, 0xb6, 0x47, 0xde, 0x30, 0x3f, 0x80, 0x0, 0x0, 0xce, 0xa, 0xd0, 0x0, 0x0, 0x2, 0xf6, 0xe8, 0x0, 0x0, 0x0, 0xd, 0x9f, 0x70, 0x0, 0x0, 0x0, 0xbb, 0xe8, 0x0, 0x0, 0x0, 0xd, 0x9a, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0x3f, 0x90, 0x0, 0x1, 0xcd, 0x0, 0x6f, 0xc6, 0x57, 0xee, 0x20, 0x0, 0x3b, 0xef, 0xe9, 0x10, 0x0,
+
+ /* U+043F "п" */
+ 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf9, 0x44, 0x44, 0x44, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7,
+
+ /* U+0440 "р" */
+ 0xf6, 0x19, 0xef, 0xe9, 0x10, 0xf, 0x8e, 0xb6, 0x47, 0xee, 0x30, 0xff, 0x80, 0x0, 0x1, 0xce, 0xf, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0xf8, 0x0, 0x0, 0x0, 0xd, 0x9f, 0x70, 0x0, 0x0, 0x0, 0xba, 0xf8, 0x0, 0x0, 0x0, 0xd, 0x9f, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0xff, 0x80, 0x0, 0x1, 0xcd, 0xf, 0x9e, 0xc6, 0x57, 0xee, 0x30, 0xf7, 0x19, 0xef, 0xe9, 0x10, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0441 "с" */
+ 0x0, 0x3a, 0xef, 0xe9, 0x10, 0x6, 0xfc, 0x64, 0x7d, 0xe2, 0x3f, 0x80, 0x0, 0x0, 0xa2, 0xad, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x90, 0x0, 0x0, 0xa2, 0x6, 0xfc, 0x65, 0x7e, 0xe2, 0x0, 0x3a, 0xef, 0xe9, 0x10,
+
+ /* U+0442 "т" */
+ 0xff, 0xff, 0xff, 0xff, 0xf6, 0x44, 0x44, 0xf9, 0x44, 0x42, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0,
+
+ /* U+0443 "у" */
+ 0xa, 0xd0, 0x0, 0x0, 0x0, 0xab, 0x3, 0xf4, 0x0, 0x0, 0x1, 0xf4, 0x0, 0xcb, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x5f, 0x20, 0x0, 0xe, 0x70, 0x0, 0xe, 0x90, 0x0, 0x5f, 0x0, 0x0, 0x7, 0xf0, 0x0, 0xc9, 0x0, 0x0, 0x1, 0xf6, 0x3, 0xf2, 0x0, 0x0, 0x0, 0x9d, 0xa, 0xb0, 0x0, 0x0, 0x0, 0x2f, 0x6f, 0x40, 0x0, 0x0, 0x0, 0xb, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x80, 0x0, 0x0, 0x1c, 0x65, 0xbe, 0x10, 0x0, 0x0, 0x9, 0xef, 0xc2, 0x0, 0x0, 0x0,
+
+ /* U+0444 "ф" */
+ 0x0, 0x0, 0x0, 0x6, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x18, 0xcf, 0xff, 0xeb, 0x60, 0x0, 0x0, 0x5f, 0xe8, 0x5e, 0xa6, 0xaf, 0xd2, 0x0, 0x3f, 0x90, 0x0, 0xd8, 0x0, 0x2d, 0xd0, 0xb, 0xd0, 0x0, 0xd, 0x80, 0x0, 0x2f, 0x60, 0xe7, 0x0, 0x0, 0xd8, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0xd, 0x80, 0x0, 0xb, 0xb0, 0xe7, 0x0, 0x0, 0xd8, 0x0, 0x0, 0xca, 0xb, 0xd0, 0x0, 0xd, 0x80, 0x0, 0x2f, 0x60, 0x3f, 0xa0, 0x0, 0xd8, 0x0, 0x2d, 0xd0, 0x0, 0x5f, 0xe8, 0x5e, 0xa6, 0xaf, 0xd2, 0x0, 0x0, 0x18, 0xcf, 0xff, 0xeb, 0x60, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0,
+
+ /* U+0445 "х" */
+ 0x2f, 0x70, 0x0, 0x1, 0xe9, 0x0, 0x6f, 0x30, 0x0, 0xad, 0x0, 0x0, 0xad, 0x0, 0x6f, 0x20, 0x0, 0x0, 0xda, 0x2f, 0x60, 0x0, 0x0, 0x3, 0xfe, 0xa0, 0x0, 0x0, 0x0, 0xb, 0xf3, 0x0, 0x0, 0x0, 0x6, 0xfc, 0xd0, 0x0, 0x0, 0x2, 0xf7, 0x1e, 0x90, 0x0, 0x0, 0xdb, 0x0, 0x3f, 0x50, 0x0, 0x9e, 0x10, 0x0, 0x8f, 0x20, 0x5f, 0x40, 0x0, 0x0, 0xcd, 0x0,
+
+ /* U+0446 "ц" */
+ 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x94, 0x44, 0x44, 0x6f, 0x74, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x27,
+
+ /* U+0447 "ч" */
+ 0x1f, 0x50, 0x0, 0x0, 0x7f, 0x1f, 0x50, 0x0, 0x0, 0x7f, 0x1f, 0x50, 0x0, 0x0, 0x7f, 0xf, 0x50, 0x0, 0x0, 0x7f, 0xf, 0x80, 0x0, 0x0, 0x7f, 0x9, 0xf6, 0x10, 0x26, 0xdf, 0x0, 0x9f, 0xff, 0xfc, 0xbf, 0x0, 0x0, 0x22, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x7f,
+
+ /* U+0448 "ш" */
+ 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x94, 0x44, 0x49, 0xf4, 0x44, 0x44, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+
+ /* U+0449 "щ" */
+ 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x94, 0x44, 0x49, 0xf4, 0x44, 0x44, 0xea, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x81,
+
+ /* U+044A "ъ" */
+ 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x44, 0x4c, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xeb, 0x30, 0x0, 0xb, 0xc2, 0x22, 0x4b, 0xf3, 0x0, 0xb, 0xb0, 0x0, 0x0, 0xe9, 0x0, 0xb, 0xb0, 0x0, 0x0, 0xbb, 0x0, 0xb, 0xb0, 0x0, 0x0, 0xe9, 0x0, 0xb, 0xc2, 0x22, 0x4b, 0xf3, 0x0, 0xb, 0xff, 0xff, 0xeb, 0x30,
+
+ /* U+044B "ы" */
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xff, 0xff, 0xfd, 0x91, 0x0, 0xbb, 0xf8, 0x22, 0x25, 0xde, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x2f, 0x60, 0xbb, 0xf7, 0x0, 0x0, 0xf, 0x70, 0xbb, 0xf7, 0x0, 0x0, 0x2f, 0x50, 0xbb, 0xf7, 0x11, 0x15, 0xdd, 0x0, 0xbb, 0xff, 0xff, 0xfd, 0x91, 0x0, 0xbb,
+
+ /* U+044C "ь" */
+ 0xf7, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0xff, 0xff, 0xfe, 0xa2, 0xf, 0x82, 0x22, 0x4c, 0xe1, 0xf7, 0x0, 0x0, 0x1f, 0x7f, 0x70, 0x0, 0x0, 0xe9, 0xf7, 0x0, 0x0, 0x1f, 0x7f, 0x81, 0x12, 0x4c, 0xe1, 0xff, 0xff, 0xfe, 0x91, 0x0,
+
+ /* U+044D "э" */
+ 0x1, 0x9d, 0xff, 0xc6, 0x0, 0x2, 0xfc, 0x63, 0x48, 0xfb, 0x0, 0x5, 0x0, 0x0, 0x2, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x8f, 0xff, 0xff, 0xf7, 0x0, 0x1, 0x22, 0x22, 0x2f, 0x50, 0x0, 0x0, 0x0, 0x5, 0xf1, 0x3, 0x0, 0x0, 0x2, 0xe9, 0x2, 0xfb, 0x63, 0x48, 0xfb, 0x0, 0x2, 0x9d, 0xff, 0xc6, 0x0, 0x0,
+
+ /* U+044E "ю" */
+ 0xf7, 0x0, 0x0, 0x5c, 0xff, 0xc6, 0x0, 0xf, 0x70, 0x0, 0x9f, 0x84, 0x37, 0xfb, 0x0, 0xf7, 0x0, 0x6f, 0x40, 0x0, 0x2, 0xf8, 0xf, 0x70, 0xd, 0xa0, 0x0, 0x0, 0x8, 0xf0, 0xf7, 0x12, 0xf5, 0x0, 0x0, 0x0, 0x3f, 0x3f, 0xff, 0xff, 0x30, 0x0, 0x0, 0x2, 0xf4, 0xf9, 0x45, 0xf5, 0x0, 0x0, 0x0, 0x3f, 0x3f, 0x70, 0xd, 0xa0, 0x0, 0x0, 0x8, 0xe0, 0xf7, 0x0, 0x6f, 0x40, 0x0, 0x3, 0xf7, 0xf, 0x70, 0x0, 0x9f, 0x84, 0x37, 0xfb, 0x0, 0xf7, 0x0, 0x0, 0x5c, 0xff, 0xc6, 0x0, 0x0,
+
+ /* U+044F "я" */
+ 0x2, 0xae, 0xff, 0xff, 0xf1, 0x3f, 0xd7, 0x44, 0x47, 0xf1, 0xae, 0x0, 0x0, 0x3, 0xf1, 0xca, 0x0, 0x0, 0x3, 0xf1, 0xbc, 0x0, 0x0, 0x3, 0xf1, 0x4f, 0x81, 0x0, 0x3, 0xf1, 0x5, 0xdf, 0xff, 0xff, 0xf1, 0x0, 0x9d, 0x22, 0x25, 0xf1, 0x4, 0xf4, 0x0, 0x3, 0xf1, 0xd, 0x90, 0x0, 0x3, 0xf1, 0x8e, 0x10, 0x0, 0x3, 0xf1,
+
+ /* U+0451 "ё" */
+ 0x0, 0x5e, 0x10, 0xc9, 0x0, 0x0, 0x3, 0xb1, 0x9, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4b, 0xff, 0xc6, 0x0, 0x0, 0x7f, 0xa5, 0x48, 0xfa, 0x0, 0x3f, 0x50, 0x0, 0x3, 0xf6, 0xa, 0xb0, 0x0, 0x0, 0x8, 0xe0, 0xe7, 0x0, 0x0, 0x0, 0x3f, 0x2f, 0xfe, 0xee, 0xee, 0xef, 0xf3, 0xe8, 0x11, 0x11, 0x11, 0x11, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x51, 0x0, 0x6f, 0xc7, 0x56, 0xbf, 0x40, 0x0, 0x3a, 0xef, 0xea, 0x30, 0x0};
+
+/*---------------------
+ * GLYPH DESCRIPTION
+ *--------------------*/
+
+static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
+ {.bitmap_index = 0, .adv_w = 84, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 0, .adv_w = 83, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 23, .adv_w = 119, .box_w = 6, .box_h = 6, .ofs_x = 1, .ofs_y = 9},
+ {.bitmap_index = 41, .adv_w = 223, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 146, .adv_w = 197, .box_w = 12, .box_h = 20, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 266, .adv_w = 265, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 386, .adv_w = 214, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 498, .adv_w = 65, .box_w = 2, .box_h = 6, .ofs_x = 1, .ofs_y = 9},
+ {.bitmap_index = 504, .adv_w = 105, .box_w = 4, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 542, .adv_w = 105, .box_w = 5, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 590, .adv_w = 124, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 7},
+ {.bitmap_index = 622, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 672, .adv_w = 68, .box_w = 3, .box_h = 6, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 681, .adv_w = 122, .box_w = 6, .box_h = 3, .ofs_x = 1, .ofs_y = 4},
+ {.bitmap_index = 690, .adv_w = 68, .box_w = 3, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 695, .adv_w = 107, .box_w = 9, .box_h = 20, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 785, .adv_w = 212, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 875, .adv_w = 116, .box_w = 5, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 913, .adv_w = 182, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 996, .adv_w = 180, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1079, .adv_w = 212, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1177, .adv_w = 181, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1260, .adv_w = 195, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1343, .adv_w = 188, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1426, .adv_w = 204, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1516, .adv_w = 195, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1606, .adv_w = 68, .box_w = 3, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1623, .adv_w = 68, .box_w = 3, .box_h = 14, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 1644, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 1694, .adv_w = 184, .box_w = 10, .box_h = 8, .ofs_x = 1, .ofs_y = 3},
+ {.bitmap_index = 1734, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 1784, .adv_w = 181, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1859, .adv_w = 331, .box_w = 19, .box_h = 19, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 2040, .adv_w = 229, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2153, .adv_w = 241, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2243, .adv_w = 230, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2341, .adv_w = 264, .box_w = 14, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2446, .adv_w = 214, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2529, .adv_w = 203, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2604, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2702, .adv_w = 260, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2792, .adv_w = 97, .box_w = 2, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2807, .adv_w = 160, .box_w = 9, .box_h = 15, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 2875, .adv_w = 228, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2973, .adv_w = 188, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3048, .adv_w = 306, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3161, .adv_w = 260, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3251, .adv_w = 268, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3364, .adv_w = 230, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3454, .adv_w = 268, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 3606, .adv_w = 231, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3696, .adv_w = 197, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3786, .adv_w = 184, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3876, .adv_w = 253, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3966, .adv_w = 223, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4071, .adv_w = 356, .box_w = 22, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4236, .adv_w = 210, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4334, .adv_w = 203, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4432, .adv_w = 208, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4530, .adv_w = 102, .box_w = 4, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 4568, .adv_w = 107, .box_w = 9, .box_h = 20, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 4658, .adv_w = 102, .box_w = 5, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 4706, .adv_w = 184, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 3},
+ {.bitmap_index = 4747, .adv_w = 160, .box_w = 10, .box_h = 1, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 4752, .adv_w = 192, .box_w = 6, .box_h = 3, .ofs_x = 2, .ofs_y = 13},
+ {.bitmap_index = 4761, .adv_w = 189, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4811, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4901, .adv_w = 180, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4962, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5052, .adv_w = 193, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5118, .adv_w = 108, .box_w = 8, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5178, .adv_w = 219, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 5268, .adv_w = 216, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5351, .adv_w = 86, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5374, .adv_w = 88, .box_w = 6, .box_h = 19, .ofs_x = -2, .ofs_y = -4},
+ {.bitmap_index = 5431, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5514, .adv_w = 86, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5537, .adv_w = 340, .box_w = 19, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5642, .adv_w = 216, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5703, .adv_w = 201, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5769, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 5859, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 5949, .adv_w = 128, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5988, .adv_w = 156, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6043, .adv_w = 130, .box_w = 8, .box_h = 14, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6099, .adv_w = 215, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 6160, .adv_w = 173, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6221, .adv_w = 281, .box_w = 18, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6320, .adv_w = 171, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6381, .adv_w = 173, .box_w = 12, .box_h = 15, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 6471, .adv_w = 164, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6526, .adv_w = 107, .box_w = 6, .box_h = 19, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 6583, .adv_w = 94, .box_w = 2, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 6602, .adv_w = 107, .box_w = 6, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 6659, .adv_w = 184, .box_w = 10, .box_h = 4, .ofs_x = 1, .ofs_y = 5},
+ {.bitmap_index = 6679, .adv_w = 211, .box_w = 11, .box_h = 18, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 6778, .adv_w = 238, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6891, .adv_w = 232, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 6981, .adv_w = 240, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7071, .adv_w = 183, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7146, .adv_w = 254, .box_w = 16, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 7298, .adv_w = 211, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7381, .adv_w = 324, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7531, .adv_w = 204, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 7627, .adv_w = 264, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7725, .adv_w = 264, .box_w = 13, .box_h = 19, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7849, .adv_w = 225, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7939, .adv_w = 251, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8044, .adv_w = 308, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 8157, .adv_w = 263, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 8255, .adv_w = 272, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8368, .adv_w = 264, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 8466, .adv_w = 227, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 8556, .adv_w = 229, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8654, .adv_w = 188, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8744, .adv_w = 218, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8849, .adv_w = 293, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = -1},
+ {.bitmap_index = 8985, .adv_w = 208, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 9083, .adv_w = 265, .box_w = 14, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 9216, .adv_w = 234, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 9306, .adv_w = 350, .box_w = 18, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 9441, .adv_w = 357, .box_w = 20, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 9631, .adv_w = 262, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 9751, .adv_w = 313, .box_w = 16, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 9871, .adv_w = 227, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 9961, .adv_w = 226, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10059, .adv_w = 349, .box_w = 19, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 10202, .adv_w = 234, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10292, .adv_w = 187, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10342, .adv_w = 211, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10438, .adv_w = 195, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 10488, .adv_w = 152, .box_w = 8, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 10532, .adv_w = 208, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 10623, .adv_w = 198, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10684, .adv_w = 264, .box_w = 17, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10778, .adv_w = 171, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10833, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 10888, .adv_w = 220, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 10963, .adv_w = 186, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 11018, .adv_w = 202, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 11079, .adv_w = 253, .box_w = 12, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 11145, .adv_w = 216, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 11200, .adv_w = 204, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 11261, .adv_w = 216, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 11316, .adv_w = 220, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 11399, .adv_w = 180, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 11454, .adv_w = 151, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 11509, .adv_w = 179, .box_w = 12, .box_h = 15, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 11599, .adv_w = 251, .box_w = 15, .box_h = 20, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 11749, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 11810, .adv_w = 219, .box_w = 11, .box_h = 14, .ofs_x = 2, .ofs_y = -3},
+ {.bitmap_index = 11887, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 11942, .adv_w = 297, .box_w = 15, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 12025, .adv_w = 297, .box_w = 17, .box_h = 14, .ofs_x = 2, .ofs_y = -3},
+ {.bitmap_index = 12144, .adv_w = 199, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 12210, .adv_w = 251, .box_w = 12, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 12276, .adv_w = 180, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 12326, .adv_w = 183, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 12387, .adv_w = 277, .box_w = 15, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 12470, .adv_w = 194, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 12525, .adv_w = 198, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}};
+
+/*---------------------
+ * CHARACTER MAPPING
+ *--------------------*/
+
+/*Collect the unicode lists and glyph_id offsets*/
+static const lv_font_fmt_txt_cmap_t cmaps[] = {{.range_start = 32, .range_length = 95, .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}, {.range_start = 1025, .range_length = 1, .glyph_id_start = 96, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}, {.range_start = 1040, .range_length = 64, .glyph_id_start = 97, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}, {.range_start = 1105, .range_length = 1, .glyph_id_start = 161, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}};
+
+/*-----------------
+ * KERNING
+ *----------------*/
+
+/*Map glyph_ids to kern left classes*/
+static const uint8_t kern_left_class_mapping[] = {0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 0, 13, 14, 15, 16, 17, 18, 19, 12, 20, 20, 0, 0, 0, 21, 22, 23, 24, 25, 22, 26, 27, 28, 29, 29, 30, 31, 32, 29, 29, 22, 33, 34, 35, 3, 36, 30, 37, 37, 38, 39, 40, 41, 42, 43, 0, 44, 0, 45, 46, 47, 48, 49, 50, 51, 45, 52, 52, 53, 48, 45, 45, 46, 46, 54, 55, 56, 57, 51, 58, 58, 59, 58, 60, 41, 0, 0, 9, 26, 23, 61, 24, 62, 63, 26, 38, 24, 29, 29, 38, 29, 29, 29, 22, 29, 33, 25, 36, 37, 22, 38, 63, 29, 29, 63, 64, 29, 64, 22, 22, 29, 51, 46, 0, 65, 51, 49, 59, 0, 51, 51, 59, 51, 51, 51, 46, 51, 46, 47, 65, 58, 46, 59, 51, 51, 51, 51, 66, 51, 66, 46, 46, 51, 49};
+
+/*Map glyph_ids to kern right classes*/
+static const uint8_t kern_right_class_mapping[] = {0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 13, 14, 15, 16, 17, 12, 18, 19, 20, 21, 21, 0, 0, 0, 22, 23, 24, 25, 23, 25, 25, 25, 23, 25, 25, 26, 25, 25, 25, 25, 23, 25, 23, 25, 3, 27, 28, 29, 29, 30, 31, 32, 33, 34, 35, 0, 36, 0, 37, 38, 39, 39, 39, 40, 39, 38, 41, 42, 38, 38, 43, 43, 39, 43, 39, 43, 44, 45, 46, 47, 47, 48, 49, 50, 0, 0, 35, 9, 25, 24, 25, 25, 25, 51, 25, 30, 52, 25, 25, 25, 53, 25, 25, 23, 25, 25, 23, 27, 30, 23, 30, 25, 54, 25, 25, 27, 25, 25, 52, 25, 30, 37, 23, 43, 43, 55, 39, 48, 56, 43, 43, 43, 55, 43, 43, 39, 43, 43, 39, 57, 47, 39, 48, 43, 46, 43, 43, 57, 43, 43, 56, 43, 48, 39};
+
+/*Kern values between classes*/
+static const int8_t kern_class_values[] = {0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 8, 6, 0, 3, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 9, -8, 0, 0, 6, 0, -18, -19, 3, 15, 8, 6, -13, 3, 17, 1, 14, 3, 11, 0, -14, 0, 0, 2, 0, 0, 0, 0, 0, 0, 19, 2, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 0, -13, 0, 0, 0, 0, 0, -10, 0, 0, 0, 0, 0, -6, 6, 6, 0, 0, -3, 0, -3, 3, 0, -3, 0, -3, -2, -6, 0, 0, 0, 0, -3, 0, 0, -4, -5, 0, 0, -3, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, -6, 0, -6, -7, 0, -1, -4, 0, -9, 0, -38, 0, 0, -6, -16, 6, 10, 0, 0, -6, 3, 3, 11, 6, -6, 6, 0, 0, -19, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -12, 0, 0, 5, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -17, 0, -13, -3, 0, 0, -10, 0, 1, 14, 0, -10, -2, 0, 0, 0, -6, 0, 0, -2, -25, 0, 5, 0, 11, -9, 0, -6, 0, -13, 5, 0, -26, -2, 14, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, -4, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 11, 2, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, -4, -4, -7, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -11,
+ 0, 0, 0, 2, 6, 3, 10, -3, 0, 0, 6, -3, -10, -45, 3, 9, 6, 1, -4, 0, 13, 0, 11, 0, 11, 0, -29, 0, -4, 10, 0, 11, -3, 6, 3, 0, 0, 0, -3, 0, 0, -6, 0, 0, 0, 26, 0, 10, 0, 14, 4, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, -12, 0, 0, 0, -3, 0, -2, 0, 3, -5, -4, -6, 3, 0, -3, 0, 0, 0, -13, 3, -5, 0, -6, -10, 0, -7, -5, -10, 0, 0, -21, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, -4, -7, -4, -4, -2, -5, -6, -8, -4, -6, -7, 0, -18, 3, -20, 0, 0, 0, -10, -2, 0, 33, -4, -4, 3, 3, -4, 0, -4, 3, 0, 0, -17, -6, 11, 0, 19, -10, -3, -12, 0, -12, 6, 0, -31, 0, 3, 3, 0, -5, 0, 0, 3, 0, 0, -3, -5, -11, 0, -11, 0, 8, 0, 8, -16, 6, 0, -12, 0, 19, -6, 0, -12, 0, 10, 0, -21, -31, -21, -6, 10, 0, 0, -22, 0, 5, -7, 0, -5, 0, -6, -13,
+ 0, -3, 10, 0, 10, 0, 10, 0, 0, 10, 10, -40, -22, 0, -22, 0, 2, 0, -22, -22, -9, -22, -10, -20, -10, -22, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 3, -4, -6, 0, 0, 0, -3, 0, 0, -3, 0, 0, 0, -6, 0, -2, 0, -7, -6, 0, -8, -10, -10, -7, 0, -6, 0, -6, 0, 0, 0, 0, 0, -3, 0, 0, 3, 0, 3, -3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, -3, 3, 3, -1, 0, 0, 0, -7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 4, -3, 0, -4, 0, -5, 0, 0, -3, 0, 10, 0, 0, -3, 0, 0, 0, 0, 0, 0, -1, 1, -3, 1, -3, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, 0, -3, -4, 0, 0, 0, 0, 0, 1, 0, 0, -2, 0, -3, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -2, -4, -2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -10, -3, -10, 6, 0, 0, -6, 3, 6, 9, 0, -8, -1, -5, 0, -1, -16, 3, -3, 2, -17, 3, 0, 0, 0, -16, 0, -17, -2, -28, -3, 0, -16, 0, 6, 9, 0, 4, 0, 0, 0, 0, 0, 0, 0, -5, -4, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, -3, 0, 0, 0, 0, 0, -2, -2, 0, -2, -4, 0, 0, 0, 0, 0, 0, 0, -3, -3, 0, -2, -4, -3, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -6, 3, 0, 0, -5, 2, 3, 3, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 3, 0, 0, -3, 0, -3, -3, -5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, -3, 0, 0, 0, 0, -3, -5, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, -3, 0, -11, 0, 0, 9, -16, -17, -14, -6, 3, 0, -3, -21, -6, 0, -6, 0, -6,
+ 5, -6, -21, 0, -9, 0, 0, 2, -1, 2, -3, 0, 3, -1, -10, -12, 0, -16, 0, 0, -7, -8, -10, -5, -9, -1, -7, -1, -10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -3, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -2, 0, -1, -3, 0, -5, -7, -7, -1, 0, -10, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, -3, 0, 3, 0, 12, -3, 0, -7, -2, -12, 0, 0, -5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, -3, 3, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, -7, 0, 0, 5, 0, -16, -10, 0, 0, 0, -5, -16, 0, 0, -3, 3, 0, -10, 0, -13, 0, -9, 0, 0, -4, -5, -4, -3, -6, 0, 0, -7, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 3, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, 5, 0, 3, -6, -6, 0, -3, -3, -4, 0, 0, 0, 0, 0, 0, -10, 0, -3, 0, -5, -3, 0, -7, -8, -10, -3, 0, -6, 0, -10, 0, 0, 0, 0, 0, 26, 0, 0, 2, 0, 0, -4, 0, 0, -6, -6, -6, -5, -5, -6, -5, 0, -14, 0, 0, 0, 0, 0, -29, -5, 11, 10, -2, -13, 0, 3, -5, 0, -16, -2, -4, 3, -22, -3, 3, 0, 5, -11, -5, -12, -10, -13, 0, 0, -19, 0, 19, 0, 0, -2, 0, 0, 0, 0, -2, -2, -3, -8, -10, -8, 0, 0, 0, 0, -14, 0, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -2, -3, -5, 0, 0, -6, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -6, 0, 0, 6, 0, 4, 0, -7, 3, -3, -1, -10, -3, 0,
+ -4, -3, -1, 0, -5, -6, 0, 0, -3, 0, -3, -6, -5, 0, 0, -3, 0, 3, -3, 0, -7, 0, 0, 0, 0, -6, 0, -6, 0, -6, 0, -6, -6, 0, -6, -4, -8, -5, -5, 0, 0, 0, 0, 0, 0, 0, 0, -6, 3, 0, -5, 0, -3, -5, -12, -3, -3, -3, -1, -3, -5, -1, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, 0, 0, 5, -3, 0, -3, 0, 0, 0, 0, -3, -5, -3, -4, -5, -4, -4, 0, 0, 0, 0, 0, 0, 0, 2, 13, -1, 0, -10, 0, -3, 6, 0, -3, -14, -4, 5, -1, 0, -16, -6, 3, -6, 2, 0, -4, -3, -11, 0, -5, 2, 0, 0, -6, 0, 0, 0, 3, 3, -6, -7, 0, -6, 0, 0, -5, -3, -3, 0, -6, 2, -7, 2, -6, -13, -5, -13, -5, -13, -8, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, -4, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, 0, 0, -4, 0, 0, -3, -3, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -3, 0, 0, -7, 0, -7, -8, -5, -5, -5, 0, 0, -5, 0, -6, 0, 0, 0, -10, 0, 3, -7, 6, 0, -3, -15, 0, 0, -7, -3, 0, -13, -8, -9, 0, 0, -13, -3, -13, -12, -15, 0, -10, 0, 2, 22, -4, 0, -8, 0, 0, -1, -3, -6, -9, -6, -12, -12, -12, -7, -1, -8, -1, -11, 0, -8, -13, 0, 0, -3, 0, 0, 0, 0, -22, -4, 10, 8, -8, -12, 0, 0,
+ -12, 0, -16, -3, -3, 6, -30, -4, 0, 0, 0, -21, -4, -17, -3, -24, 0, 0, -22, 0, 20, 0, 0, -3, 0, 0, 0, 0, 0, -2, -3, -12, -3, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -11, 0, -4, 0, 0, -9, -15, 0, 0, -2, -5, -10, -3, 0, -2, 0, 0, 0, 0, -14, -3, -11, -11, -2, -5, -8, -3, -6, 0, -6, -4, -10, -5, 0, -4, 0, 0, -3, -7, 0, 2, 0, -3, -11, -3, 0, -11, -6, -11, -6, -14, -6, -4, 0, -6, 0, 0, 0, 0, 5, 0, 3, -6, 12, 0, -3, -3, -4, 0, 0, 0, 0, 0, 0, -10, 0, -3, 0, -5, -3, 0, -7, -8, -10, -3, 0, -6, 2, 13, 0, 0, 0, 0, 0, 26, 0, 0, 2, 0, 0, -4, 0, 0, -6, -6, -6, -5, -5, -6, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -6, 0, 0, 0, 0, 0, -2, 0, 0, 0, -3, -3, 0, 0, -6, -3, 0, 0, -6, 0, 6, -2, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, -4, 0, -11, -6, 0, 10, -10, -10, -6, -6, 13, 5, 3, -28, -2, 6, -3, 0, -3, 2, -3, -11, 0, -3, 3, -4, -2, -10, -2, 0, 0, 10, 6, 0, -9, 0, -18, 0, 0, 7, -4, -12, 0, -4, -11, -11, -11, -3, -12, 0, -12, -5, -22, -15, -7, 3, 0, -5, 0, -9, 0, 2, 11, -7, -12, -13, -8, 10, 0, 0, -23, -2, 3, -5, -2, -7, 0, -7, -12, -5, -5, -2, 0, 0, -7, -6, -3, 0, 10, 7, -3, -18, 0, -18, 0, -6, -6, -11, -18, 0, -10, -5, -11, -5, -9, -7, -1, -7, 0, -11, -15, -6, 0, 0, -4, 0, -6, -4, 0, -3, -5, 0, 6, -10, 3, 0, 0, -17, 0, -3, -7, -5, -2, -10, -8, -10, -8, 0, -10, -3, -7, -7, -10, -3, 0, 0, 0, 15, -5, 0, -10, 0, 0, 0, -3, -6, -7, -8, -8, -11, -8, -4, -4, -17, -4, -12, -5, -12, -16, 6, 0, -5, 0, -16, -5, 1, 6, -10, -12, -6, -10,
+ 10, -3, 2, -29, -5, 6, -7, -5, -12, 0, -10, -13, -5, -3, -2, -3, -6, -10, 0, 0, 0, 10, 8, -3, -21, 0, -19, 0, -4, 6, -12, -21, -6, -11, -13, -16, -13, -10, -9, 0, -9, -5, -18, -18, -7, 0, 0, 0, 0, -5, 0, 0, 3, -5, 6, 3, -7, 6, 0, 0, -12, -1, 0, -1, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 2, 10, 0, 0, -5, 0, 0, 0, 0, 0, -3, -3, -5, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, -3, 0, 11, 0, 5, 0, 0, -4, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 6, 0, 7, 0, 8, 0, 0, 10, 0, 8, -4, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 3, -4, -4, -4, -6, -5, -3, 0, -19, 0, -3, 6, 0, 10, -45, 0, 33, 5, -6, -6, 3, 3, -3, 0, -16, 0, 0, 14, -19, -6, 10, 0, 10, -6, -3, -13, 6, -6, 0, 0, -21, 11, 45, 0, 0, 0,
+ 0, 0, 38, 0, 0, 0, 0, 6, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, -7, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -5, -4, -5, -4, -4, 0, 0, -3, 6, -9, 0, 0, 0, -3, 0, 3, 43, -6, -3, 11, 9, -9, 3, 0, 0, 3, 3, -3, -10, 19, 10, 27, 0, -3, -3, 15, -3, 6, 0, -42, 8, 0, -3, 0, -9, 0, 0, 34, 0, 3, -6, -9, -4, 12, 6, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, 0, 0, -9, 0, 0, 0, 0, -7, -2, 0, 0, 0, -7, 0, -5, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -3, 0, 0, 0, 0, -18, 0, 0, -3, 0, -5, 0, -9, 0, 0, 0, -6, 3,
+ -5, 0, 0, -9, -3, -8, 0, 0, -9, 0, -3, 0, -15, 0, -2, 0, 0, -27, -7, -13, -2, -11, 0, 0, -22, 0, -9, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -6, -5, -3, -3, -8, -3, -8, -1, -1, -6, 0, 0, 0, 0, -8, 0, -7, 4, -2, 6, 0, -3, -8, -3, -6, -7, 0, -5, -2, -3, 2, -9, 0, 0, 0, 0, -30, -2, -3, 0, -5, 0, -3, -15, -4, 0, 0, -3, -3, 0, -3, 0, 0, 0, 2, 0, -3, -6, -3, -3, 0, 0, 0, 0, -6, -6, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 0, -3, 0, 0, 0, -6, 3, 0, 0, 0, -9, -3, -6, 0, 0, -9, 0, -3, 0, -15, 0, 0, 0, 0, -31, 0, -6, -12, -16, 0, 0, -22, 0, -2,
+ -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -5, -3, -2, -6, 0, -6, -7, -4, -5, -7, 0, 0, 0, 6, -4, 0, 9, 17, -3, -3, -10, 5, 17, 6, 8, -9, 5, 14, 5, 10, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 15, -5, -3, 0, -3, 1, 0, 13, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -29, -5, -2, -14, -17, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, -14, 0, -4, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -29, -5, -2, -14, -17, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, -14, 0, -4, 0, 0, 0, 0, 0, -2, 0,
+ 0, 0, -7, 3, 0, -3, 2, 5, 3, -10, 0, -1, -2, 3, 0, 2, 0, 0, 0, 0, -10, 0, -4, -3, -6, 0, -4, -13, 0, 21, -3, 0, -7, 0, 0, 0, -3, -5, 0, -3, -9, -6, -9, -4, 0, 0, 0, -6, 2, -7, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -29, -5, -2, -14, -17, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, -14, 0, -4, 0, 0, 0, -6, 0, -11, -5, -4, 10, -4, -3, -13, 0, -3, 0, -3, -10, 0, 7, 0, 2, 0, 2, -8, -12, -5, 0, -14, -7, -9, -14, -13, 0, -6, -6, -5, -4, -15, -3, -4, 0, -3, 0, -3, -1, 5, 0, 5, -3, 5, 0, -13, -7, -13, -6, -12, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, -9, 0, -2, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, -6, -3, 3, 0, -6, -7, -3, 0, -11, -3, -8, -2, -5, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 11, 0, 0, -6, 0, 0, 0, 0, 0, -4, 0, -3, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -7, 0, 0, 14, -4, -11, -9, 3, 2, 2, -1, -8, 3, 5, 3, 10, 3, 10, -3, -8, 0, 0, -16, 0, 0, -10, -9, 0, 0, -6, 0, -4, -5, 0, -5, 0, 0, -5, 0, -2, 5, 0, -2, -10, -2, -3, -8, 0, -8, -5, -7, -4, 0, 0, 0, -4, 0, -6, 0, 0, 4, -7, 0, 3, -3, 2, -1, 0, -10, 0, -3, 0, 0, -3, 2, -2, 0, 0, 0, -16, -5, -7, 0, -10, 0, 0, -15, 0, 12, -3, 0, -6, 0, 0, -1, 0, -3, 0, -3, -10, 0, -10, -3, 0, -2, 0, -8, 0, -10, -4, 0, 0, 0,
+ 0, -3, 0, 0, 3, -4, 0, 0, 0, -5, -3, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 8, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, -3, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, -13, -5, -11, -7, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -6, -5, 0, -6, 0, -6, -11, -4, -5, -9, 0, 0, 0, 0, 0, 0, 0, 0, -65, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -49, 0, -3, 0, -38, 0, 0, 0, -38, -38, -38, 0, -28, 0, -28, -6, -50, -45, -36, 0, -6, 0, 0, 0, 0, 0, 0, -8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, -8, 0, -8, 0,
+ -9, 0, 0, 0, 1, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, -11, -7, -11, 0, 0, 0, 0, -7, 0, -6, -10, 0, -9, -6, 0, 0, 0, -5, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, -2, 0, 0, -21, 0, -10, -14, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, -5, -6, 0, -8, -6, -8, -2, -5, -5, -8, 0, 0, 0, 0, 0, 0, -2, 0, -7, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, 0, 0, 0, -2, -11, -7, 0, 0, 0, 0, 0, 0, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, -13, 0, -13, -3, -10, -5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 0, 0, 0, 0, -35, 0, -12, -10, -10, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, -12, -10, 0, -5, 0, -5, -24, -6, -2, -17};
+
+/*Collect the kern class' data in one place*/
+static const lv_font_fmt_txt_kern_classes_t kern_classes = {
+ .class_pair_values = kern_class_values,
+ .left_class_mapping = kern_left_class_mapping,
+ .right_class_mapping = kern_right_class_mapping,
+ .left_class_cnt = 66,
+ .right_class_cnt = 57,
+};
+
+/*--------------------
+ * ALL CUSTOM DATA
+ *--------------------*/
+
+# if LV_VERSION_CHECK(8, 0, 0)
+/*Store all the custom data of the font*/
+static lv_font_fmt_txt_glyph_cache_t cache;
+static const lv_font_fmt_txt_dsc_t font_dsc = {
+# else
+static lv_font_fmt_txt_dsc_t font_dsc = {
+# endif
+ .glyph_bitmap = glyph_bitmap,
+ .glyph_dsc = glyph_dsc,
+ .cmaps = cmaps,
+ .kern_dsc = &kern_classes,
+ .kern_scale = 16,
+ .cmap_num = 4,
+ .bpp = 4,
+ .kern_classes = 1,
+ .bitmap_format = 0,
+# if LV_VERSION_CHECK(8, 0, 0)
+ .cache = &cache
+# endif
+};
+
+/*-----------------
+ * PUBLIC FONT
+ *----------------*/
+
+/*Initialize a public general font descriptor*/
+# if LV_VERSION_CHECK(8, 0, 0)
+const lv_font_t montserrat_20_en_ru = {
+# else
+lv_font_t montserrat_20_en_ru = {
+# endif
+ .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
+ .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
+ .line_height = 23, /*The maximum line height required by the font*/
+ .base_line = 4, /*Baseline measured from the bottom of the line*/
+# if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
+ .subpx = LV_FONT_SUBPX_NONE,
+# endif
+# if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
+ .underline_position = -2,
+ .underline_thickness = 1,
+# endif
+ .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
+};
+
+#endif /*#if MONTSERRAT_20_EN_RU*/
diff --git a/keyboards/stront/keymaps/zzeneg/fonts/montserrat_48_digits.c b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_48_digits.c
new file mode 100644
index 00000000000..ed0c74797d4
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_48_digits.c
@@ -0,0 +1,189 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ * Size: 48 px
+ * Bpp: 4
+ * Opts:
+ ******************************************************************************/
+
+#ifdef __has_include
+# if __has_include("lvgl.h")
+# ifndef LV_LVGL_H_INCLUDE_SIMPLE
+# define LV_LVGL_H_INCLUDE_SIMPLE
+# endif
+# endif
+#endif
+
+#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
+# include "lvgl.h"
+#else
+# include "lvgl/lvgl.h"
+#endif
+
+#ifndef MONTSERRAT_48_DIGITS
+# define MONTSERRAT_48_DIGITS 1
+#endif
+
+#if MONTSERRAT_48_DIGITS
+
+/*-----------------
+ * BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
+ /* U+002E "." */
+ 0x0, 0x44, 0x0, 0xc, 0xff, 0xd1, 0x5f, 0xff, 0xf8, 0x6f, 0xff, 0xf9, 0x2f, 0xff, 0xf5, 0x6, 0xef, 0x80,
+
+ /* U+0030 "0" */
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x9c, 0xef, 0xfe, 0xb8, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xe8, 0x54, 0x45, 0x9e, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0x40, 0x0, 0x0, 0x1f, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xd0, 0x0, 0x0, 0x9f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6, 0x0, 0x1, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfd, 0x0, 0x6, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x30, 0xb, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0xf, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xc0, 0x2f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf0, 0x4f, 0xff,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf1, 0x6f, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf3, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf5, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf5, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0x6f, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf3, 0x4f, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf1, 0x2f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf0, 0xf, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xc0, 0xb, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x6, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x30, 0x1, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfd, 0x0, 0x0, 0x9f, 0xff, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6, 0x0, 0x0, 0x1f, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xd0, 0x0, 0x0, 0x7, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0x40, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xd8, 0x54, 0x45, 0x9e, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x9c, 0xef, 0xfe, 0xb8, 0x20, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0031 "1" */
+ 0x9f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x12, 0x22, 0x22, 0x22, 0xbf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0,
+ 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd,
+
+ /* U+0032 "2" */
+ 0x0, 0x0, 0x0, 0x4, 0x8b, 0xef, 0xff, 0xec, 0x95, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xb8, 0x54, 0x34, 0x69, 0xdf, 0xff, 0xfe, 0x10, 0x0, 0xc, 0xff, 0xff, 0x71, 0x0, 0x0, 0x0, 0x0, 0x5, 0xef, 0xff, 0xb0, 0x0, 0x6, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf3, 0x0, 0x0, 0x4a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xdf, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xef, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf7, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x1, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+
+ /* U+0033 "3" */
+ 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x2, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x28, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xec, 0xa6,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x59, 0xef, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x60, 0x5c, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf1, 0xe, 0xfe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xfa, 0x5, 0xff, 0xff, 0xd6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0xff,
+ 0xff, 0x10, 0x8, 0xff, 0xff, 0xff, 0xb8, 0x54, 0x34, 0x58, 0xcf, 0xff, 0xff, 0x40, 0x0, 0x3, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x10, 0x0, 0x0, 0x0, 0x0, 0x1, 0x69, 0xce, 0xff, 0xfe, 0xc9, 0x50, 0x0, 0x0, 0x0,
+
+ /* U+0034 "4" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
+ 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xc2, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x2f, 0xff, 0x72, 0x22, 0x22, 0x20, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x1f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0,
+
+ /* U+0035 "5" */
+ 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x3f, 0xff, 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x0, 0x0, 0x5, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf2, 0x22, 0x22, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x83, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x60, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x36, 0xae, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xef, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x0, 0x96, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xa0, 0x4f, 0xfa, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf3, 0xb, 0xff, 0xff, 0x92, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
+ 0xff, 0xf9, 0x0, 0x2d, 0xff, 0xff, 0xfd, 0x96, 0x44, 0x34, 0x6a, 0xef, 0xff, 0xfc, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x1, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x7a, 0xdf, 0xff, 0xfd, 0xb8, 0x30, 0x0, 0x0, 0x0,
+
+ /* U+0036 "6" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0xbd, 0xff, 0xfe, 0xda, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc4, 0x0, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xfc, 0x74, 0x21, 0x12, 0x47, 0xbf, 0xe0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xfa, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1, 0x40, 0x0, 0x0, 0x2, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x30, 0x0, 0x1, 0x7b, 0xdf, 0xff, 0xdb, 0x61, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x10, 0x1,
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x7f, 0xff, 0x4, 0xff, 0xfe, 0x84, 0x10, 0x1, 0x49, 0xef, 0xff, 0xf4, 0x0, 0x7f, 0xff, 0x2f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xfe, 0x10, 0x7f, 0xff, 0xbf, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xa0, 0x6f, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf1, 0x5f, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf6, 0x3f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9, 0xf, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfb, 0xd, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfb, 0x8, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfb, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9, 0x0, 0xdf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf5, 0x0, 0x5f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf0, 0x0, 0xb, 0xff, 0xf5,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x80, 0x0, 0x1, 0xef, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x19, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x3e, 0xff, 0xfe, 0x84, 0x10, 0x1, 0x48, 0xef, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x2, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x20, 0x0, 0x0, 0x0, 0x0, 0x7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9c, 0xef, 0xff, 0xda, 0x50, 0x0, 0x0, 0x0,
+
+ /* U+0037 "7" */
+ 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x7f, 0xff, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x2f, 0xff, 0xc0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x40, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfd, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf6, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x37, 0x77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x40, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0038 "8" */
+ 0x0, 0x0, 0x0, 0x2, 0x6a, 0xde, 0xff, 0xfe, 0xb8, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x10, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xfd, 0x73, 0x10, 0x0, 0x25, 0x9f, 0xff, 0xff, 0x40, 0x0, 0x0, 0x6f, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19, 0xff, 0xfe, 0x10, 0x0, 0xe, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xf8, 0x0, 0x4, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xe0, 0x0, 0x7f, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x10, 0x7, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf1, 0x0, 0x6f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x3, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xd0, 0x0, 0xe, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf8, 0x0, 0x0, 0x5f, 0xff, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xfe, 0x10, 0x0, 0x0, 0x8f, 0xff, 0xf9, 0x40, 0x0, 0x0,
+ 0x1, 0x6c, 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x5e, 0xff, 0xff, 0xfe, 0xdc, 0xdf, 0xff, 0xff, 0xfb, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x30, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xfb, 0x63, 0x10, 0x0, 0x24, 0x8e, 0xff, 0xff, 0x60, 0x0, 0x0, 0xcf, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x60, 0x0, 0x8f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0x20, 0x1f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfa, 0x6, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf0, 0x9f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x3a, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0xbf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x49, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf3, 0x6f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0x1,
+ 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xb0, 0xa, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf3, 0x0, 0x1e, 0xff, 0xfc, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf9, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xb6, 0x31, 0x0, 0x2, 0x48, 0xef, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x6, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0xbd, 0xef, 0xff, 0xec, 0x95, 0x10, 0x0, 0x0, 0x0,
+
+ /* U+0039 "9" */
+ 0x0, 0x0, 0x0, 0x5, 0x9c, 0xef, 0xfe, 0xda, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xff, 0x94, 0x10, 0x1, 0x37, 0xcf, 0xff, 0xf5, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xa1, 0x0, 0x0, 0x0, 0x0, 0x4, 0xef, 0xff, 0x40, 0x0, 0x7, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xe1, 0x0, 0xe, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf9, 0x0, 0x3f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x10, 0x6f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x70, 0x7f, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xc0, 0x8f, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xf1, 0x6f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf4, 0x4f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf7, 0xf, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0xf9, 0x8,
+ 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff, 0xfa, 0x1, 0xef, 0xff, 0xa1, 0x0, 0x0, 0x0, 0x0, 0x4, 0xdf, 0xf7, 0xdf, 0xfb, 0x0, 0x3f, 0xff, 0xff, 0x95, 0x20, 0x0, 0x36, 0xcf, 0xff, 0xa0, 0xcf, 0xfb, 0x0, 0x3, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0xcf, 0xfb, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x40, 0x0, 0xcf, 0xfa, 0x0, 0x0, 0x0, 0x16, 0xad, 0xff, 0xfe, 0xc8, 0x30, 0x0, 0x0, 0xef, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xef, 0xff, 0x60, 0x0, 0x0, 0x4, 0x40, 0x0, 0x0, 0x0, 0x0, 0x1, 0x9f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xc, 0xfd, 0x85, 0x31, 0x12, 0x47, 0xbf, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x2b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0xac, 0xef, 0xff, 0xeb, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+003A ":" */
+ 0x6, 0xef, 0x80, 0x3f, 0xff, 0xf5, 0x6f, 0xff, 0xf9, 0x4f, 0xff, 0xf7, 0xb, 0xff, 0xd1, 0x0, 0x44, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0xc, 0xff, 0xd1, 0x5f, 0xff, 0xf8, 0x6f, 0xff, 0xf9, 0x2f, 0xff, 0xf5, 0x6, 0xef, 0x80};
+
+/*---------------------
+ * GLYPH DESCRIPTION
+ *--------------------*/
+
+static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
+ {.bitmap_index = 0, .adv_w = 163, .box_w = 6, .box_h = 6, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 18, .adv_w = 508, .box_w = 28, .box_h = 34, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 494, .adv_w = 277, .box_w = 12, .box_h = 34, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 698, .adv_w = 436, .box_w = 26, .box_h = 34, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1140, .adv_w = 433, .box_w = 25, .box_h = 34, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1565, .adv_w = 508, .box_w = 31, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2092, .adv_w = 435, .box_w = 25, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2517, .adv_w = 468, .box_w = 26, .box_h = 34, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2959, .adv_w = 452, .box_w = 26, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3401, .adv_w = 490, .box_w = 27, .box_h = 34, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3860, .adv_w = 468, .box_w = 26, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4302, .adv_w = 163, .box_w = 6, .box_h = 26, .ofs_x = 2, .ofs_y = 0}};
+
+/*---------------------
+ * CHARACTER MAPPING
+ *--------------------*/
+
+static const uint8_t glyph_id_ofs_list_0[] = {0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
+
+/*Collect the unicode lists and glyph_id offsets*/
+static const lv_font_fmt_txt_cmap_t cmaps[] = {{.range_start = 46, .range_length = 13, .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 13, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL}};
+
+/*-----------------
+ * KERNING
+ *----------------*/
+
+/*Map glyph_ids to kern left classes*/
+static const uint8_t kern_left_class_mapping[] = {0, 1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 2, 10};
+
+/*Map glyph_ids to kern right classes*/
+static const uint8_t kern_right_class_mapping[] = {0, 1, 2, 3, 4, 5, 6, 7, 2, 8, 9, 10, 11};
+
+/*Kern values between classes*/
+static const int8_t kern_class_values[] = {0, -8, -9, 8, 8, -10, 0, -9, 8, 0, 0, -8, 0, 0, 0, -8, 0, 0, -6, 0, 0, 0, 8, -2, 0, 0, 0, -18, 0, -2, 0, 0, 0, 0, 0, 0, -4, -4, 0, -8, -10, 0, 0, 0, 15, 0, -19, -2, -12, 0, -2, -38, 8, -6, 5, 0, 0, 0, -4, -4, 0, -4, -11, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, -41, -15, 8, 0, -7, -50, -15, 0, -15, 0, -15, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0};
+
+/*Collect the kern class' data in one place*/
+static const lv_font_fmt_txt_kern_classes_t kern_classes = {
+ .class_pair_values = kern_class_values,
+ .left_class_mapping = kern_left_class_mapping,
+ .right_class_mapping = kern_right_class_mapping,
+ .left_class_cnt = 10,
+ .right_class_cnt = 11,
+};
+
+/*--------------------
+ * ALL CUSTOM DATA
+ *--------------------*/
+
+# if LV_VERSION_CHECK(8, 0, 0)
+/*Store all the custom data of the font*/
+static lv_font_fmt_txt_glyph_cache_t cache;
+static const lv_font_fmt_txt_dsc_t font_dsc = {
+# else
+static lv_font_fmt_txt_dsc_t font_dsc = {
+# endif
+ .glyph_bitmap = glyph_bitmap,
+ .glyph_dsc = glyph_dsc,
+ .cmaps = cmaps,
+ .kern_dsc = &kern_classes,
+ .kern_scale = 16,
+ .cmap_num = 1,
+ .bpp = 4,
+ .kern_classes = 1,
+ .bitmap_format = 0,
+# if LV_VERSION_CHECK(8, 0, 0)
+ .cache = &cache
+# endif
+};
+
+/*-----------------
+ * PUBLIC FONT
+ *----------------*/
+
+/*Initialize a public general font descriptor*/
+# if LV_VERSION_CHECK(8, 0, 0)
+const lv_font_t montserrat_48_digits = {
+# else
+lv_font_t montserrat_48_digits = {
+# endif
+ .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
+ .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
+ .line_height = 34, /*The maximum line height required by the font*/
+ .base_line = 0, /*Baseline measured from the bottom of the line*/
+# if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
+ .subpx = LV_FONT_SUBPX_NONE,
+# endif
+# if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
+ .underline_position = -5,
+ .underline_thickness = 2,
+# endif
+ .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
+};
+
+#endif /*#if MONTSERRAT_48_DIGITS*/
diff --git a/keyboards/stront/keymaps/zzeneg/halconf.h b/keyboards/stront/keymaps/zzeneg/halconf.h
new file mode 100644
index 00000000000..46c5a48c9a9
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/stront/keymaps/zzeneg/icons/flag_pl.c b/keyboards/stront/keymaps/zzeneg/icons/flag_pl.c
new file mode 100644
index 00000000000..cac55d0eea6
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/icons/flag_pl.c
@@ -0,0 +1,42 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef __has_include
+# if __has_include("lvgl.h")
+# ifndef LV_LVGL_H_INCLUDE_SIMPLE
+# define LV_LVGL_H_INCLUDE_SIMPLE
+# endif
+# endif
+#endif
+
+#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
+# include "lvgl.h"
+#else
+# include "lvgl/lvgl.h"
+#endif
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+# define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_FLAG_PL
+# define LV_ATTRIBUTE_IMG_FLAG_PL
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_FLAG_PL uint8_t flag_pl_map[] = {
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/
+ 0x3c, 0x14, 0xdc, 0xff, /*Color of index 1*/
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
+};
+
+const lv_img_dsc_t flag_pl = {
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .header.always_zero = 0,
+ .header.reserved = 0,
+ .header.w = 60,
+ .header.h = 40,
+ .data_size = 328,
+ .data = flag_pl_map,
+};
diff --git a/keyboards/stront/keymaps/zzeneg/icons/flag_ru.c b/keyboards/stront/keymaps/zzeneg/icons/flag_ru.c
new file mode 100644
index 00000000000..8019b0b4183
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/icons/flag_ru.c
@@ -0,0 +1,42 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef __has_include
+# if __has_include("lvgl.h")
+# ifndef LV_LVGL_H_INCLUDE_SIMPLE
+# define LV_LVGL_H_INCLUDE_SIMPLE
+# endif
+# endif
+#endif
+
+#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
+# include "lvgl.h"
+#else
+# include "lvgl/lvgl.h"
+#endif
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+# define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_FLAG_RU
+# define LV_ATTRIBUTE_IMG_FLAG_RU
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_FLAG_RU uint8_t flag_ru_map[] = {
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/
+ 0xd8, 0x88, 0x0c, 0xff, /*Color of index 1*/
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const lv_img_dsc_t flag_ru = {
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .header.always_zero = 0,
+ .header.reserved = 0,
+ .header.w = 60,
+ .header.h = 40,
+ .data_size = 328,
+ .data = flag_ru_map,
+};
diff --git a/keyboards/stront/keymaps/zzeneg/icons/flag_uk.c b/keyboards/stront/keymaps/zzeneg/icons/flag_uk.c
new file mode 100644
index 00000000000..8bf82348296
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/icons/flag_uk.c
@@ -0,0 +1,46 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef __has_include
+# if __has_include("lvgl.h")
+# ifndef LV_LVGL_H_INCLUDE_SIMPLE
+# define LV_LVGL_H_INCLUDE_SIMPLE
+# endif
+# endif
+#endif
+
+#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
+# include "lvgl.h"
+#else
+# include "lvgl/lvgl.h"
+#endif
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+# define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_FLAG_UK
+# define LV_ATTRIBUTE_IMG_FLAG_UK
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_FLAG_UK uint8_t flag_uk_map[] = {
+ 0xfe, 0xfe, 0xfe, 0xff, /*Color of index 0*/
+ 0x32, 0x15, 0xc9, 0xff, /*Color of index 1*/
+ 0x6c, 0x25, 0x06, 0xff, /*Color of index 2*/
+ 0xcd, 0xbd, 0xca, 0xff, /*Color of index 3*/
+
+ 0x40, 0x02, 0xaa, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xaa, 0xcd, 0x57, 0x50, 0x00, 0xea, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xab, 0xd5, 0x50, 0x55, 0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xb3, 0x55, 0xc0, 0xd5, 0x40, 0x03, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xf5, 0x54, 0x00, 0xc5, 0x54, 0x00, 0x2a, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xac, 0xd5, 0x70, 0x03, 0xb3, 0x55, 0x00, 0x0e, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xbd, 0x55, 0x00, 0x0a, 0xab, 0x15, 0x50, 0x00, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xab, 0x35, 0x5c, 0x00, 0xea, 0xaa, 0xcd, 0x54, 0x00, 0x3a, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaf, 0x55, 0x40, 0x02, 0xaa, 0xaa, 0xac, 0x55, 0x40, 0x02, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xcd, 0x57, 0x00, 0x3a, 0xaa, 0xaa, 0xab, 0x35, 0x50, 0x00, 0xea, 0x81, 0x55, 0x4e, 0xab, 0xd5, 0x50, 0x00, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xb1, 0x55, 0x00, 0x0a, 0x81, 0x55, 0x4e, 0xb3, 0x55, 0xc0, 0x0e, 0xaa, 0xaa, 0xaa, 0xaa, 0xac, 0xd5, 0x40, 0x03, 0x81, 0x55, 0x4e, 0xf5, 0x54, 0x00, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xc5, 0x54, 0x00, 0x01, 0x55, 0x40, 0xd5, 0x70, 0x03, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xc3, 0xfc, 0x00, 0x01, 0x55, 0x40, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0x01, 0x55, 0x40, 0x00, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0xaa, 0xc0, 0x0d, 0x54, 0x01, 0x55, 0x40, 0x00, 0xd5, 0x53, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xac, 0x00, 0x15, 0x53, 0x81, 0x55, 0x4e, 0xc0, 0x0d, 0x57, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xb0, 0x03, 0x55, 0x0a, 0x81, 0x55, 0x4e, 0xb0, 0x03, 0x55, 0x4e, 0xaa, 0xaa,
+ 0xaa, 0xab, 0x00, 0x05, 0x54, 0xea, 0x81, 0x55, 0x4e, 0xab, 0x00, 0x35, 0x5c, 0xaa, 0xaa, 0xaa, 0xac, 0x00, 0xd5, 0x42, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xc0, 0x0d, 0x55, 0x3a, 0xaa, 0xaa, 0xc0, 0x01, 0x55, 0x3a, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xac, 0x00, 0xd5, 0x72, 0xaa, 0xab, 0x00, 0x35, 0x50, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xab, 0x00, 0x35, 0x54, 0xea, 0xb0, 0x00, 0x55, 0x4e, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xb0, 0x03, 0x55, 0xca, 0xc0, 0x0d, 0x54, 0x2a, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xac, 0x00, 0xd5, 0x53, 0x00, 0x15, 0x53, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xc0, 0x0d, 0x57, 0x03, 0x55, 0x0a, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xb0, 0x03, 0x55, 0x05, 0x54, 0xea, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xab, 0x00, 0x35, 0xd5, 0x42, 0xaa, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0d,
+};
+
+const lv_img_dsc_t flag_uk = {
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .header.always_zero = 0,
+ .header.reserved = 0,
+ .header.w = 60,
+ .header.h = 40,
+ .data_size = 616,
+ .data = flag_uk_map,
+};
diff --git a/keyboards/stront/keymaps/zzeneg/keymap.c b/keyboards/stront/keymaps/zzeneg/keymap.c
new file mode 100644
index 00000000000..67cc52e142c
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/keymap.c
@@ -0,0 +1,305 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#include "zzeneg_display.h"
+#include "raw_hid.h"
+#include "transactions.h"
+
+// Left-hand home row mods
+#define HOME_A LGUI_T(KC_A)
+#define HOME_S LALT_T(KC_S)
+#define HOME_D LCTL_T(KC_D)
+#define HOME_F LSFT_T(KC_F)
+
+// Right-hand home row mods
+#define HOME_J RSFT_T(KC_J)
+#define HOME_K RCTL_T(KC_K)
+#define HOME_L LALT_T(KC_L)
+#define HOME_P RGUI_T(KC_P)
+
+// bottom mods
+#define SYM_SPC LT(_SYMBOL, KC_SPC)
+#define NUM_TAB LT(_NUMBER, KC_TAB)
+#define FUNC_ESC LT(_FUNC, KC_ESC)
+#define FUNC_ENT LT(_FUNC, KC_ENT)
+#define NAV_BSPC LT(_NAV, KC_BSPC)
+#define EU_DEL LT(_EU, KC_DEL)
+
+// game layer mods
+#define LALT_Q LALT_T(KC_Q)
+#define LSFT_MINS LSFT_T(KC_MINS)
+#define LCTL_ESC LCTL_T(KC_ESC)
+#define LGUI_QUOT LGUI_T(KC_QUOT)
+
+enum custom_keycodes {
+ M_EMAIL = SAFE_RANGE,
+ M_CBR,
+ M_PRN,
+ M_BRC,
+ M_ARROW,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * .---------------------------. .---------------------------.
+ * | W | E | R | T | | Y | U | I | O |
+ * .------+------+------+------+------+------| |------+------+------+------+------+------.
+ * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
+ * '-----------------------------------------/ / \ \-----------------------------------------'
+ * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
+ * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | _EU |
+ * `-------------''-------' '-------''-------------'
+ */
+ // clang-format off
+ [_QWERTY] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_P, KC_SCLN,
+ KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, EU_DEL
+ ),
+
+ [_GAME] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_P, KC_SCLN,
+ LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
+ LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, EU_DEL
+ ),
+
+ [_EU] = LAYOUT(
+ XXXXXXX, RALT(KC_E), XXXXXXX, M_CBR, KC_MUTE, RALT(KC_U), XXXXXXX, RALT(KC_O),
+ XXXXXXX, RALT(KC_A), RALT(KC_S), LCTL(KC_C), KC_LSFT, M_PRN, M_EMAIL, KC_RSFT, M_ARROW, RALT(KC_L), XXXXXXX, XXXXXXX,
+ XXXXXXX, RALT(KC_Z), RALT(KC_X), RALT(KC_C), LCTL(KC_V), M_BRC, RALT(KC_N), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, XXXXXXX, _______
+ ),
+
+ [_NAV] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
+ XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, LALT(KC_UP), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LALT(KC_DOWN), KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
+ FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, EU_DEL
+ ),
+
+ [_NUMBER] = LAYOUT(
+ KC_7, KC_8, KC_9, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_GRV, KC_0, KC_4, KC_5, KC_6, KC_DOT, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_BSPC, KC_AT, KC_1, KC_2, KC_3, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, EU_DEL
+ ),
+
+ [_SYMBOL] = LAYOUT(
+ KC_PERC, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_DLR, KC_AMPR, KC_EXLM, KC_EQL, KC_LPRN, KC_RPRN, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_BSLS, KC_PIPE, KC_HASH, KC_ASTR, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, EU_DEL
+ ),
+
+ [_FUNC] = LAYOUT(
+ KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
+ KC_LCTL, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_CIRC, KC_F10, KC_F1, KC_F2, KC_F3, KC_TILD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
+ ),
+
+ [_SYS] = LAYOUT(
+ BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
+ XXXXXXX, XXXXXXX, DT_UP, DT_DOWN, DT_PRNT, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
+ EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
+ _______, QK_BOOT, _______, _______, QK_BOOT, _______
+ )
+ // clang-format on
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ // clang-format off
+ [_QWERTY] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_GAME] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_EU] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_NAV] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+ [_NUMBER] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+ [_SYMBOL] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+ [_FUNC] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+ [_SYS] = { ENCODER_CCW_CW(BL_DOWN, BL_UP), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }
+ // clang-format on
+};
+#endif // ENCODER_MAP_ENABLE
+
+/* different tapping term for different fingers */
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // pinkies
+ case HOME_A:
+ case HOME_P:
+ return 250;
+ // ring
+ case HOME_S:
+ case HOME_L:
+ return 200;
+ // middle
+ case HOME_D:
+ case HOME_K:
+ return 160;
+ // index
+ case HOME_F:
+ case HOME_J:
+ return 140;
+ // thumb and game
+ default:
+ return TAPPING_TERM;
+ }
+}
+
+/* helper function for custom increased tapping term for home row CTRL + other keys */
+uint16_t HOME_CTRL_pressed_time = 0;
+void custom_home_row_ctrl(keyrecord_t *record, uint16_t time) {
+ if (record->tap.count && get_mods() & MOD_MASK_CTRL) {
+ if (TIMER_DIFF_16(record->event.time, HOME_CTRL_pressed_time) < time) {
+ del_mods(MOD_MASK_CTRL);
+ tap_code(KC_D);
+ }
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ dprintf("process_record_user %u %s %s %d\n", keycode, record->event.pressed ? "pressed" : "depressed", record->tap.interrupted ? "interrupted" : "not interrupted", record->tap.count);
+
+ if (record->event.pressed) {
+ uint8_t data[32];
+ data[0] = 0;
+
+ switch (keycode) {
+ // send hid commands
+ case KC_VOLU:
+ case KC_VOLD:
+ data[0] = _VOLUME;
+ break;
+
+ // handle macros
+ case M_EMAIL:
+ SEND_STRING("zzeneg@gmail.com");
+ break;
+ case M_CBR:
+ SEND_STRING("{}" SS_TAP(X_LEFT));
+ break;
+ case M_PRN:
+ SEND_STRING("()" SS_TAP(X_LEFT));
+ break;
+ case M_BRC:
+ SEND_STRING("[]" SS_TAP(X_LEFT));
+ break;
+ case M_ARROW:
+ SEND_STRING("=>");
+ break;
+
+ // custom increased tapping term for home row CTRL + other keys
+ case HOME_D:
+ // save time when CTRL from D key is pressed
+ if (!record->tap.count) {
+ HOME_CTRL_pressed_time = record->event.time;
+ }
+ break;
+ case HOME_S:
+ // if S is pressed and CTRL is active, and < 150 passed since CTRL was pressed, cancel CTRL and send D instead
+ custom_home_row_ctrl(record, 150);
+ break;
+ case HOME_A:
+ // if A is pressed and CTRL is active, and < 180 passed since CTRL was pressed, cancel CTRL and send D instead
+ custom_home_row_ctrl(record, 180);
+ break;
+ }
+
+ if (data[0]) {
+ dprintf("raw_hid_send %u\n", data[0]);
+ raw_hid_send(data, sizeof(data));
+ }
+ }
+
+ return true;
+}
+
+/* Active Layer processing */
+layer_state_t layer_state_set_user(layer_state_t state) {
+ if (is_display_enabled()) {
+ display_process_layer_state(get_highest_layer(state));
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ uint8_t layer = get_highest_layer(state);
+ dprintf("RPC_ID_USER_LAYER_SYNC: %u\n", layer);
+ transaction_rpc_send(RPC_ID_USER_LAYER_SYNC, 1, &layer);
+ }
+
+ return state;
+}
+
+/* Caps Word processing */
+void caps_word_set_user(bool active) {
+ if (is_display_enabled()) {
+ display_process_caps_word(active);
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ dprintf("RPC_ID_USER_CAPS_WORD_SYNC: %s\n", active ? "active" : "inactive");
+ transaction_rpc_send(RPC_ID_USER_CAPS_WORD_SYNC, 1, &active);
+ }
+}
+
+/* default caps word logic that allows KC_MINS. Underscore can be typed with KC_RSFT + KC_MINS */
+bool caps_word_press_user(uint16_t keycode) {
+ switch (keycode) {
+ // Keycodes that continue Caps Word, with shift applied.
+ case KC_A ... KC_Z:
+ add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
+ return true;
+
+ // Keycodes that continue Caps Word, without shifting.
+ case KC_1 ... KC_0:
+ case KC_BSPC:
+ case KC_DEL:
+ case KC_MINS:
+ case KC_RSFT:
+ return true;
+
+ default:
+ return false; // Deactivate Caps Word.
+ }
+}
+
+/* Raw HID processing*/
+void raw_hid_receive(uint8_t *data, uint8_t length) {
+ dprintf("raw_hid_receive - received %u bytes \n", length);
+
+ if (is_display_enabled()) {
+ display_process_raw_hid_data(data, length);
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ dprint("RPC_ID_USER_HID_SYNC \n");
+ transaction_rpc_send(RPC_ID_USER_HID_SYNC, length, data);
+ }
+}
+
+void hid_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_raw_hid_data((uint8_t *)initiator2target_buffer, initiator2target_buffer_size);
+ }
+}
+
+void layer_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_layer_state(*(uint8_t *)initiator2target_buffer);
+ }
+}
+
+void caps_word_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_caps_word(*(bool *)initiator2target_buffer);
+ }
+}
+
+void keyboard_post_init_user() {
+ // sync received hid data
+ transaction_register_rpc(RPC_ID_USER_HID_SYNC, hid_sync);
+ // sync highest layer (a bit more performant than standard SPLIT_LAYER_STATE_ENABLE)
+ transaction_register_rpc(RPC_ID_USER_LAYER_SYNC, layer_sync);
+ // sync caps word state
+ transaction_register_rpc(RPC_ID_USER_CAPS_WORD_SYNC, caps_word_sync);
+}
diff --git a/keyboards/stront/keymaps/zzeneg/lv_conf.h b/keyboards/stront/keymaps/zzeneg/lv_conf.h
new file mode 100644
index 00000000000..8b0c1f3f833
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/lv_conf.h
@@ -0,0 +1,148 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* disable some things before lv_conf include */
+#define LV_USE_CALENDAR 0
+#define LV_USE_SPAN 0
+#define LV_USE_ROLLER 0
+#define LV_USE_TEXTAREA 0
+
+#include_next
+
+/* Custom fonts:
+ - montserrat_20_en_ru - english/cyrillic symbols, range 0x20-0x7F,0x0410-0x044F,0x0401,0x0451
+ - montserrat_48_digits - digits, dot and colon only, range 0x2E,0x30-0x3A
+ */
+
+#undef LV_FONT_CUSTOM_DECLARE
+#define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(montserrat_20_en_ru) LV_FONT_DECLARE(montserrat_48_digits)
+
+#undef LV_FONT_DEFAULT
+#define LV_FONT_DEFAULT &montserrat_20_en_ru
+
+#undef LV_FONT_MONTSERRAT_20
+#define LV_FONT_MONTSERRAT_20 0
+
+#undef LV_FONT_MONTSERRAT_48
+#define LV_FONT_MONTSERRAT_48 0
+
+// #undef LV_FONT_MONTSERRAT_16
+// #define LV_FONT_MONTSERRAT_16 1
+
+// #undef LV_FONT_MONTSERRAT_18
+// #define LV_FONT_MONTSERRAT_18 1
+
+// #undef LV_FONT_MONTSERRAT_20
+// #define LV_FONT_MONTSERRAT_20 1
+
+// #undef LV_FONT_MONTSERRAT_22
+// #define LV_FONT_MONTSERRAT_22 1
+
+// #undef LV_FONT_MONTSERRAT_24
+// #define LV_FONT_MONTSERRAT_24 1
+
+// #undef LV_FONT_MONTSERRAT_26
+// #define LV_FONT_MONTSERRAT_26 1
+
+// #undef LV_FONT_MONTSERRAT_28
+// #define LV_FONT_MONTSERRAT_28 1
+
+// #undef LV_FONT_MONTSERRAT_30
+// #define LV_FONT_MONTSERRAT_30 1
+
+// #undef LV_FONT_MONTSERRAT_32
+// #define LV_FONT_MONTSERRAT_32 1
+
+// #undef LV_FONT_MONTSERRAT_34
+// #define LV_FONT_MONTSERRAT_34 1
+
+// #undef LV_FONT_MONTSERRAT_36
+// #define LV_FONT_MONTSERRAT_36 1
+
+// #undef LV_FONT_MONTSERRAT_38
+// #define LV_FONT_MONTSERRAT_38 1
+
+// #undef LV_FONT_MONTSERRAT_40
+// #define LV_FONT_MONTSERRAT_40 1
+
+// #undef LV_FONT_MONTSERRAT_42
+// #define LV_FONT_MONTSERRAT_42 1
+
+// #undef LV_FONT_MONTSERRAT_44
+// #define LV_FONT_MONTSERRAT_44 1
+
+// #undef LV_FONT_MONTSERRAT_46
+// #define LV_FONT_MONTSERRAT_46 1
+
+// #undef LV_FONT_MONTSERRAT_48
+// #define LV_FONT_MONTSERRAT_48 1
+
+/* disable widgets*/
+#undef LV_USE_ANIMIMG
+#define LV_USE_ANIMIMG 0
+#undef LV_USE_BAR
+#define LV_USE_BAR 0
+#undef LV_USE_BTN
+#define LV_USE_BTN 0
+#undef LV_USE_BTNMATRIX
+#define LV_USE_BTNMATRIX 0
+#undef LV_USE_CANVAS
+#define LV_USE_CANVAS 0
+#undef LV_USE_CHECKBOX
+#define LV_USE_CHECKBOX 0
+#undef LV_USE_DROPDOWN
+#define LV_USE_DROPDOWN 0
+#undef LV_USE_LINE
+#define LV_USE_LINE 0
+#undef LV_USE_SLIDER
+#define LV_USE_SLIDER 0
+#undef LV_USE_SWITCH
+#define LV_USE_SWITCH 0
+#undef LV_USE_TABLE
+#define LV_USE_TABLE 0
+
+/* disable extra components */
+#undef LV_USE_CHART
+#define LV_USE_CHART 0
+#undef LV_USE_COLORWHEEL
+#define LV_USE_COLORWHEEL 0
+#undef LV_USE_IMGBTN
+#define LV_USE_IMGBTN 0
+#undef LV_USE_KEYBOARD
+#define LV_USE_KEYBOARD 0
+#undef LV_USE_LED
+#define LV_USE_LED 0
+#undef LV_USE_LIST
+#define LV_USE_LIST 0
+#undef LV_USE_MENU
+#define LV_USE_MENU 0
+#undef LV_USE_METER
+#define LV_USE_METER 0
+#undef LV_USE_MSGBOX
+#define LV_USE_MSGBOX 0
+#undef LV_USE_SPINBOX
+#define LV_USE_SPINBOX 0
+#undef LV_USE_SPINNER
+#define LV_USE_SPINNER 0
+#undef LV_USE_TABVIEW
+#define LV_USE_TABVIEW 0
+#undef LV_USE_TILEVIEW
+#define LV_USE_TILEVIEW 0
+#undef LV_USE_WIN
+#define LV_USE_WIN 0
+
+/* disable themes */
+#undef LV_USE_THEME_BASIC
+#define LV_USE_THEME_BASIC 0
+#undef LV_USE_THEME_MONO
+#define LV_USE_THEME_MONO 0
+
+/* disable layouts */
+#undef LV_USE_GRID
+#define LV_USE_GRID 0
+
+/* disable build examples */
+#undef LV_BUILD_EXAMPLES
+#define LV_BUILD_EXAMPLES 0
diff --git a/keyboards/stront/keymaps/zzeneg/mcuconf.h b/keyboards/stront/keymaps/zzeneg/mcuconf.h
new file mode 100644
index 00000000000..47ee67119de
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/stront/keymaps/zzeneg/rules.mk b/keyboards/stront/keymaps/zzeneg/rules.mk
new file mode 100644
index 00000000000..26ddf778031
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/rules.mk
@@ -0,0 +1,17 @@
+# CONSOLE_ENABLE = yes
+
+EXTRAKEY_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+CAPS_WORD_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+DYNAMIC_TAPPING_TERM_ENABLE = yes
+
+POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c
+
+RAW_ENABLE = yes
+
+SRC += zzeneg_display.c \
+ fonts/montserrat_20_en_ru.c \
+ fonts/montserrat_48_digits.c \
+ icons/flag_uk.c \
+ icons/flag_ru.c
diff --git a/keyboards/stront/keymaps/zzeneg/zzeneg_display.c b/keyboards/stront/keymaps/zzeneg/zzeneg_display.c
new file mode 100644
index 00000000000..d8d6f4d70be
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/zzeneg_display.c
@@ -0,0 +1,242 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "zzeneg_display.h"
+#include "display.h"
+#include "raw_hid.h"
+#include "lvgl_helpers.h"
+
+uint16_t home_screen_timer = 0;
+
+/* screens */
+static lv_obj_t *screen_home;
+static lv_obj_t *screen_volume;
+static lv_obj_t *screen_media;
+
+/* home screen content */
+static lv_obj_t *label_time;
+static lv_obj_t *label_volume_home;
+static lv_obj_t *label_shift;
+static lv_obj_t *label_ctrl;
+static lv_obj_t *label_alt;
+static lv_obj_t *label_gui;
+static lv_obj_t *label_layer;
+static lv_obj_t *label_caps;
+static lv_obj_t *label_caps_word;
+static lv_obj_t *icon_layout;
+
+/* volume screen content */
+static lv_obj_t *arc_volume;
+static lv_obj_t *label_volume_arc;
+
+/* media screen content */
+static lv_obj_t *label_media_artist;
+static lv_obj_t *label_media_title;
+
+LV_IMG_DECLARE(flag_ru);
+LV_IMG_DECLARE(flag_uk);
+/* can be replaced with PL flag (update rules.mk as well) */
+// LV_IMG_DECLARE(flag_pl);
+
+enum layout { _EN = 0, _RU };
+void set_layout_icon(uint8_t layout) {
+ switch (layout) {
+ case _EN:
+ lv_img_set_src(icon_layout, &flag_uk);
+ break;
+
+ case _RU:
+ lv_img_set_src(icon_layout, &flag_ru);
+ break;
+ }
+}
+
+void read_string(uint8_t *data, char *string_data) {
+ uint8_t data_length = data[1];
+ memcpy(string_data, data + 2, data_length);
+ string_data[data_length] = '\0';
+}
+
+void start_home_screen_timer(void) {
+ dprint("reset home screen\n");
+ home_screen_timer = timer_read();
+}
+
+void init_screen_home_custom(void) {
+ screen_home = lv_scr_act();
+ lv_obj_add_style(screen_home, &style_screen, 0);
+ use_flex_column(screen_home);
+
+ label_volume_home = lv_label_create(screen_home);
+ lv_label_set_text(label_volume_home, "");
+
+ lv_obj_t *mods = lv_obj_create(screen_home);
+ lv_obj_add_style(mods, &style_container, 0);
+ use_flex_row(mods);
+
+ label_gui = create_button(mods, "GUI", &style_button, &style_button_active);
+ label_alt = create_button(mods, "ALT", &style_button, &style_button_active);
+ label_ctrl = create_button(mods, "CTL", &style_button, &style_button_active);
+ label_shift = create_button(mods, "SFT", &style_button, &style_button_active);
+
+ label_time = lv_label_create(screen_home);
+ lv_label_set_text(label_time, "00:00");
+ lv_obj_set_style_text_font(label_time, &montserrat_48_digits, LV_PART_MAIN);
+
+ lv_obj_t *caps = lv_obj_create(screen_home);
+ lv_obj_add_style(caps, &style_container, 0);
+ use_flex_row(caps);
+
+ label_caps = create_button(caps, "CAPS", &style_button, &style_button_active);
+ label_caps_word = create_button(caps, "CAPS WORD", &style_button, &style_button_active);
+
+ lv_obj_t *bottom_row = lv_obj_create(screen_home);
+ lv_obj_add_style(bottom_row, &style_container, 0);
+
+ label_layer = lv_label_create(bottom_row);
+ lv_label_set_text(label_layer, "");
+ lv_obj_align(label_layer, LV_ALIGN_LEFT_MID, 10, 0);
+ display_process_layer_state(0);
+
+ icon_layout = lv_img_create(bottom_row);
+ lv_obj_set_style_radius(icon_layout, 4, 0);
+ lv_obj_set_style_clip_corner(icon_layout, true, 0);
+ lv_obj_align(icon_layout, LV_ALIGN_RIGHT_MID, -10, 0);
+}
+
+void init_screen_volume(void) {
+ screen_volume = lv_obj_create(NULL);
+ lv_obj_add_style(screen_volume, &style_screen, 0);
+
+ arc_volume = lv_arc_create(screen_volume);
+ lv_obj_set_size(arc_volume, 200, 200);
+ lv_obj_center(arc_volume);
+
+ label_volume_arc = lv_label_create(screen_volume);
+ lv_label_set_text(label_volume_arc, "00");
+ lv_obj_set_style_text_font(label_volume_arc, &montserrat_48_digits, LV_PART_MAIN);
+ lv_obj_center(label_volume_arc);
+
+ lv_obj_t *volume_text_label = lv_label_create(screen_volume);
+ lv_label_set_text(volume_text_label, "Volume");
+ lv_obj_align(volume_text_label, LV_ALIGN_BOTTOM_MID, 0, -10);
+}
+
+void init_screen_media(void) {
+ screen_media = lv_obj_create(NULL);
+ lv_obj_add_style(screen_media, &style_screen, 0);
+ use_flex_column(screen_media);
+ lv_obj_set_flex_align(screen_media, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
+
+ label_media_artist = lv_label_create(screen_media);
+ lv_label_set_text(label_media_artist, "N/A");
+ lv_label_set_long_mode(label_media_artist, LV_LABEL_LONG_WRAP);
+ lv_obj_set_width(label_media_artist, lv_pct(90));
+ lv_obj_set_style_text_align(label_media_artist, LV_TEXT_ALIGN_CENTER, 0);
+
+ label_media_title = lv_label_create(screen_media);
+ lv_label_set_text(label_media_title, "N/A");
+ lv_label_set_long_mode(label_media_title, LV_LABEL_LONG_WRAP);
+ lv_obj_set_width(label_media_title, lv_pct(90));
+ lv_obj_set_style_text_align(label_media_title, LV_TEXT_ALIGN_CENTER, 0);
+}
+
+bool display_init_user(void) {
+ init_screen_home_custom();
+ init_screen_volume();
+ init_screen_media();
+
+ return false;
+}
+
+void display_process_raw_hid_data(uint8_t *data, uint8_t length) {
+ uint8_t data_type = data[0];
+ char string_data[length - 2];
+ dprintf("display_process_raw_hid_data - received data_type %u \n", data_type);
+ switch (data_type) {
+ case _TIME:
+ dprintf("time %02d:%02d\n", data[1], data[2]);
+ lv_label_set_text_fmt(label_time, "%02d:%02d", data[1], data[2]);
+ break;
+
+ case _VOLUME:
+ dprintf("volume %d\n", data[1]);
+ lv_label_set_text_fmt(label_volume_home, "Volume: %02d%%", data[1]);
+ lv_label_set_text_fmt(label_volume_arc, "%02d", data[1]);
+ lv_arc_set_value(arc_volume, data[1]);
+ lv_scr_load(screen_volume);
+ start_home_screen_timer();
+ break;
+
+ case _LAYOUT:
+ dprintf("layout %d\n", data[1]);
+ set_layout_icon(data[1]);
+ break;
+
+ case _MEDIA_ARTIST:
+ read_string(data, string_data);
+ dprintf("media artist %s\n", string_data);
+ lv_label_set_text(label_media_artist, string_data);
+ lv_scr_load(screen_media);
+ start_home_screen_timer();
+ break;
+
+ case _MEDIA_TITLE:
+ read_string(data, string_data);
+ dprintf("media title %s\n", string_data);
+ lv_label_set_text(label_media_title, string_data);
+ lv_scr_load(screen_media);
+ start_home_screen_timer();
+ break;
+ }
+}
+
+void display_process_layer_state(uint8_t layer) {
+ switch (layer) {
+ case _QWERTY:
+ lv_label_set_text(label_layer, "QWERTY");
+ break;
+ case _GAME:
+ lv_label_set_text(label_layer, "GAME");
+ break;
+ case _EU:
+ lv_label_set_text(label_layer, "EU");
+ break;
+ case _NAV:
+ lv_label_set_text(label_layer, "NAV");
+ break;
+ case _NUMBER:
+ lv_label_set_text(label_layer, "NUMBER");
+ break;
+ case _SYMBOL:
+ lv_label_set_text(label_layer, "SYMBOL");
+ break;
+ case _FUNC:
+ lv_label_set_text(label_layer, "FUNC");
+ break;
+ case _SYS:
+ lv_label_set_text(label_layer, "SYSTEM");
+ break;
+ }
+}
+
+void display_housekeeping_task(void) {
+ if (home_screen_timer && timer_elapsed(home_screen_timer) > 5000) {
+ home_screen_timer = 0;
+ lv_scr_load(screen_home);
+ }
+
+ toggle_state(label_shift, LV_STATE_PRESSED, MODS_SHIFT);
+ toggle_state(label_ctrl, LV_STATE_PRESSED, MODS_CTRL);
+ toggle_state(label_alt, LV_STATE_PRESSED, MODS_ALT);
+ toggle_state(label_gui, LV_STATE_PRESSED, MODS_GUI);
+}
+
+void display_process_caps(bool active) {
+ toggle_state(label_caps, LV_STATE_PRESSED, active);
+}
+
+void display_process_caps_word(bool active) {
+ dprint("display_process_caps_word\n");
+ toggle_state(label_caps_word, LV_STATE_PRESSED, active);
+}
diff --git a/keyboards/stront/keymaps/zzeneg/zzeneg_display.h b/keyboards/stront/keymaps/zzeneg/zzeneg_display.h
new file mode 100644
index 00000000000..22b36793f40
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/zzeneg_display.h
@@ -0,0 +1,27 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+typedef enum {
+ _QWERTY = 0,
+ _GAME,
+ _EU,
+ _NAV,
+ _NUMBER,
+ _SYMBOL,
+ _FUNC,
+ _SYS,
+} layer_number;
+
+typedef enum {
+ _TIME = 0,
+ _VOLUME,
+ _LAYOUT,
+ _MEDIA_ARTIST,
+ _MEDIA_TITLE,
+} hid_data_type;
+
+void display_process_raw_hid_data(uint8_t *data, uint8_t length);
+void display_process_layer_state(uint8_t layer);
+void display_process_caps_word(bool active);
diff --git a/keyboards/stront/lv_conf.h b/keyboards/stront/lv_conf.h
new file mode 100644
index 00000000000..57b093d500a
--- /dev/null
+++ b/keyboards/stront/lv_conf.h
@@ -0,0 +1,18 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef LV_FONT_DEFAULT
+#define LV_FONT_DEFAULT &lv_font_montserrat_28
+
+#undef LV_FONT_MONTSERRAT_14
+#define LV_FONT_MONTSERRAT_14 0
+
+#undef LV_FONT_MONTSERRAT_28
+#define LV_FONT_MONTSERRAT_28 1
+
+#undef LV_FONT_MONTSERRAT_48
+#define LV_FONT_MONTSERRAT_48 1
diff --git a/keyboards/stront/lvgl_helpers.c b/keyboards/stront/lvgl_helpers.c
new file mode 100644
index 00000000000..f4f06983215
--- /dev/null
+++ b/keyboards/stront/lvgl_helpers.c
@@ -0,0 +1,113 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "lvgl_helpers.h"
+
+lv_obj_t *create_button(lv_obj_t *parent, const char *text, lv_style_t *style, lv_style_t *style_pressed) {
+ lv_obj_t *label = lv_label_create(parent);
+ lv_label_set_text(label, text);
+ lv_obj_add_style(label, style, 0);
+ lv_obj_add_style(label, style_pressed, LV_STATE_PRESSED);
+ return label;
+}
+
+void use_flex_row(void *obj) {
+ lv_obj_set_layout(obj, LV_LAYOUT_FLEX);
+ lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_ROW);
+ lv_obj_set_flex_align(obj, LV_FLEX_ALIGN_SPACE_AROUND, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
+}
+
+void use_flex_column(void *obj) {
+ lv_obj_set_layout(obj, LV_LAYOUT_FLEX);
+ lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN);
+ lv_obj_set_flex_align(obj, LV_FLEX_ALIGN_SPACE_AROUND, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
+}
+
+void toggle_state(void *obj, lv_state_t state, bool enabled) {
+ if (enabled) {
+ lv_obj_add_state(obj, state);
+ } else {
+ lv_obj_clear_state(obj, state);
+ }
+}
+
+void toggle_hidden(void *obj, bool visible) {
+ if (visible) {
+ lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN);
+ } else {
+ lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
+ }
+}
+
+void resize_font(void *label, int32_t font_size) {
+ dprintf("font size %ld\n", font_size);
+#if LV_FONT_MONTSERRAT_8
+ if (font_size == 8) return lv_obj_set_style_text_font(label, &lv_font_montserrat_8, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_10
+ if (font_size <= 10) return lv_obj_set_style_text_font(label, &lv_font_montserrat_8, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_12
+ if (font_size <= 12) return lv_obj_set_style_text_font(label, &lv_font_montserrat_12, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_14
+ if (font_size <= 14) return lv_obj_set_style_text_font(label, &lv_font_montserrat_14, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_16
+ if (font_size <= 16) return lv_obj_set_style_text_font(label, &lv_font_montserrat_16, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_18
+ if (font_size <= 18) return lv_obj_set_style_text_font(label, &lv_font_montserrat_18, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_20
+ if (font_size <= 20) return lv_obj_set_style_text_font(label, &lv_font_montserrat_20, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_22
+ if (font_size <= 22) return lv_obj_set_style_text_font(label, &lv_font_montserrat_22, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_24
+ if (font_size <= 24) return lv_obj_set_style_text_font(label, &lv_font_montserrat_24, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_26
+ if (font_size <= 26) return lv_obj_set_style_text_font(label, &lv_font_montserrat_26, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_28
+ if (font_size <= 28) return lv_obj_set_style_text_font(label, &lv_font_montserrat_28, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_30
+ if (font_size <= 30) return lv_obj_set_style_text_font(label, &lv_font_montserrat_30, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_32
+ if (font_size <= 32) return lv_obj_set_style_text_font(label, &lv_font_montserrat_32, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_34
+ if (font_size <= 34) return lv_obj_set_style_text_font(label, &lv_font_montserrat_34, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_36
+ if (font_size <= 36) return lv_obj_set_style_text_font(label, &lv_font_montserrat_36, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_38
+ if (font_size <= 38) return lv_obj_set_style_text_font(label, &lv_font_montserrat_38, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_40
+ if (font_size <= 40) return lv_obj_set_style_text_font(label, &lv_font_montserrat_40, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_42
+ if (font_size <= 42) return lv_obj_set_style_text_font(label, &lv_font_montserrat_42, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_44
+ if (font_size <= 44) return lv_obj_set_style_text_font(label, &lv_font_montserrat_44, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_46
+ if (font_size <= 46) return lv_obj_set_style_text_font(label, &lv_font_montserrat_46, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_48
+ if (font_size <= 48) return lv_obj_set_style_text_font(label, &lv_font_montserrat_48, LV_PART_MAIN);
+#endif
+}
+
+void debug_set_obj_border(lv_obj_t *obj) {
+ lv_color_t red = lv_color_hex(0xFF0000);
+ lv_obj_set_style_border_color(obj, red, 0);
+ lv_obj_set_style_border_width(obj, 1, 0);
+}
diff --git a/keyboards/stront/lvgl_helpers.h b/keyboards/stront/lvgl_helpers.h
new file mode 100644
index 00000000000..671f6cccd2d
--- /dev/null
+++ b/keyboards/stront/lvgl_helpers.h
@@ -0,0 +1,13 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "qp_lvgl.h"
+
+lv_obj_t *create_button(lv_obj_t *parent, const char *text, lv_style_t *style, lv_style_t *style_pressed);
+
+void use_flex_row(void *obj);
+void use_flex_column(void *obj);
+void toggle_state(void *obj, lv_state_t state, bool enabled);
+void toggle_hidden(void *obj, bool visible);
+void resize_font(void *label, int32_t v);
+void debug_set_obj_border(lv_obj_t *obj);
diff --git a/keyboards/stront/mcuconf.h b/keyboards/stront/mcuconf.h
new file mode 100644
index 00000000000..f35384aa286
--- /dev/null
+++ b/keyboards/stront/mcuconf.h
@@ -0,0 +1,12 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_SPI_USE_SPI1
+#define RP_SPI_USE_SPI1 TRUE
+
+#undef RP_PWM_USE_PWM7
+#define RP_PWM_USE_PWM7 TRUE
diff --git a/keyboards/stront/readme.md b/keyboards/stront/readme.md
new file mode 100644
index 00000000000..1da6f0bdd1a
--- /dev/null
+++ b/keyboards/stront/readme.md
@@ -0,0 +1,45 @@
+# stront
+
+
+
+Split keyboard with 38 keys, LCD display and Cirque trackpad.
+
+- Keyboard Maintainer: [zzeneg](https://github.com/zzeneg)
+- Hardware Supported: Stront PCBs, Waveshare RP2040 Zero
+- Hardware Availability: [GitHub](https://github.com/zzeneg/stront)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make stront:default
+
+Flashing example for this keyboard:
+
+ make stront: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).
+
+## Keymaps
+
+- `default` - sample keymap with home row mods. Not recommended for longer use - create your own.
+- `hid` - default keymap with HID support. Requires additional software running on computer, see https://github.com/zzeneg/qmk-hid-host.
+- `i2c` - default keymap with I2C Cirque instead of default SPI
+- `zzeneg` - my highly customized layout, you can use as a reference
+
+Keymaps have [EE_HANDS](https://docs.qmk.fm/#/feature_split_keyboard?id=handedness-by-eeprom) enabled, so any side can be master (though using side with touchpad as master is recommended). You have to specify left/right side by flashing with different commands:
+
+`qmk flash -kb stront -km default -bl uf2-split-left`
+
+or
+
+`qmk flash -kb stront -km default -bl uf2-split-right`
+
+If your keyboard is flashed already, you can do it by pressing key combinations - hold inner thumb key, then hold outer thumb key to activate SYSTEM layer. Now press outer bottom pinky key for left side or inner bottom index key for right side. See [keymap](./keymaps/default/keymap.c) for better understanding. Reconnect the keyboard to apply changes.
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (outer top pinky key) and plug in the keyboard
+- **Keycode in layout**: Press the key mapped to `QK_BOOT` - by default you need to hold inner thumb key, then hold outer thumb key and press middle thumb key (see [keymap.c](./keymaps/default/keymap.c) for details). It's a complicated combination to avoid accidental activations.
+
+RP2040 Zero has physical boot/reset buttons but they are unaccessible after the keyboards is assembled, so always keep a `QK_BOOT` key and/or bootmagic feature in your keymaps.
diff --git a/keyboards/stront/rules.mk b/keyboards/stront/rules.mk
new file mode 100644
index 00000000000..940a592d11d
--- /dev/null
+++ b/keyboards/stront/rules.mk
@@ -0,0 +1,12 @@
+SERIAL_DRIVER = vendor
+WS2812_DRIVER = vendor
+
+POINTING_DEVICE_ENABLE = yes
+POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
+
+QUANTUM_PAINTER_ENABLE = yes
+QUANTUM_PAINTER_DRIVERS += st7789_spi
+QUANTUM_PAINTER_LVGL_INTEGRATION = yes
+
+SRC += lvgl_helpers.c \
+ display.c
diff --git a/keyboards/stront/stront.c b/keyboards/stront/stront.c
new file mode 100644
index 00000000000..dc1f588c9b8
--- /dev/null
+++ b/keyboards/stront/stront.c
@@ -0,0 +1,61 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "stront.h"
+#include "display.h"
+
+static bool display_enabled;
+
+/* public function to be used in keymaps */
+bool is_display_enabled(void) {
+ return display_enabled;
+}
+
+/* default encoder keys */
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+ if (index == 0) {
+ if (clockwise) {
+ tap_code_delay(KC_VOLU, 10);
+ } else {
+ tap_code_delay(KC_VOLD, 10);
+ }
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code_delay(KC_RIGHT, 10);
+ } else {
+ tap_code_delay(KC_LEFT, 10);
+ }
+ }
+ return true;
+}
+
+/* Caps Lock processing */
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res && display_enabled) {
+ display_process_caps(led_state.caps_lock);
+ }
+
+ return res;
+}
+
+void housekeeping_task_kb(void) {
+ if (display_enabled) {
+ display_housekeeping_task();
+ }
+
+ housekeeping_task_user();
+}
+
+void keyboard_post_init_kb(void) {
+ display_enabled = false;
+
+ if (is_keyboard_left()) {
+ display_enabled = display_init_kb();
+ }
+
+ keyboard_post_init_user();
+}
diff --git a/keyboards/stront/stront.h b/keyboards/stront/stront.h
new file mode 100644
index 00000000000..9ca618a6fbb
--- /dev/null
+++ b/keyboards/stront/stront.h
@@ -0,0 +1,6 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+bool is_display_enabled(void);
diff --git a/keyboards/takashicompany/baumkuchen/baumkuchen.c b/keyboards/takashicompany/baumkuchen/baumkuchen.c
new file mode 100644
index 00000000000..7d4f26b73e8
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/baumkuchen.c
@@ -0,0 +1,19 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+
+ if (clockwise) {
+ tap_code(KC_WH_D);
+ } else {
+ tap_code(KC_WH_U);
+ }
+
+ return true;
+}
\ No newline at end of file
diff --git a/keyboards/takashicompany/baumkuchen/info.json b/keyboards/takashicompany/baumkuchen/info.json
new file mode 100644
index 00000000000..e2318348827
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/info.json
@@ -0,0 +1,75 @@
+{
+ "manufacturer": "takashicompany",
+ "keyboard_name": "Baumkuchen",
+ "maintainer": "takashicompany",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {
+ "pin_a": "D1",
+ "pin_b": "D0"
+ }
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "direct": [
+ ["B2", "B6", "D4", "C6", "F4", "F5", "D7", "E6", "F6", "F7", "B1", "B3", "B4", "B5", "B5"]
+ ]
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 6,
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0045",
+ "vid": "0x7463"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 0, "y": 1 },
+ { "matrix": [0, 5], "x": 1, "y": 1 },
+ { "matrix": [0, 6], "x": 2, "y": 1 },
+ { "matrix": [0, 7], "x": 3, "y": 1 },
+ { "matrix": [0, 8], "x": 0, "y": 2 },
+ { "matrix": [0, 9], "x": 1, "y": 2 },
+ { "matrix": [0, 10], "x": 2, "y": 2 },
+ { "matrix": [0, 11], "x": 3, "y": 2 },
+ { "matrix": [0, 12], "x": 4, "y": 2 },
+ { "matrix": [0, 13], "x": 3.5, "y": 3.25 },
+ { "matrix": [0, 14], "x": 4.5, "y": 3.25 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/takashicompany/baumkuchen/keymaps/build_test/keymap.c b/keyboards/takashicompany/baumkuchen/keymaps/build_test/keymap.c
new file mode 100644
index 00000000000..b99d3a3592b
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/keymaps/build_test/keymap.c
@@ -0,0 +1,33 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R,
+ KC_A, KC_S, KC_D, KC_F,
+ KC_Z, KC_X, KC_C, KC_V, KC_B,
+ KC_NO, KC_NO
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ if (record->event.pressed) {
+ rgblight_toggle_noeeprom(); // for test
+ }
+
+ return true;
+}
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+
+ if (clockwise) {
+ tap_code(KC_1);
+ } else {
+ tap_code(KC_2);
+ }
+
+ return false;
+}
diff --git a/keyboards/takashicompany/baumkuchen/keymaps/default/keymap.c b/keyboards/takashicompany/baumkuchen/keymaps/default/keymap.c
new file mode 100644
index 00000000000..7ea01cbd5d3
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/keymaps/default/keymap.c
@@ -0,0 +1,19 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R,
+ KC_A, KC_S, KC_D, KC_F,
+ KC_Z, KC_X, KC_C, LT(1, KC_V), KC_B,
+ KC_NO, KC_NO
+ ),
+ [1] = LAYOUT(
+ RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/takashicompany/baumkuchen/keymaps/via/config.h b/keyboards/takashicompany/baumkuchen/keymaps/via/config.h
new file mode 100644
index 00000000000..1017b9cb4bd
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/keymaps/via/config.h
@@ -0,0 +1,6 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 29
diff --git a/keyboards/takashicompany/baumkuchen/keymaps/via/keymap.c b/keyboards/takashicompany/baumkuchen/keymaps/via/keymap.c
new file mode 100644
index 00000000000..1e4624ca883
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/keymaps/via/keymap.c
@@ -0,0 +1,28 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ LT(1, KC_ESC), KC_Q, KC_W, KC_E,
+ KC_TAB, KC_A, KC_S, KC_D,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V,
+ KC_WH_U, KC_WH_D
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS,
+ KC_TRNS,KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ RGB_TOG, RGB_MOD, KC_TRNS, QK_BOOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS
+ )
+};
diff --git a/keyboards/takashicompany/baumkuchen/keymaps/via/rules.mk b/keyboards/takashicompany/baumkuchen/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/takashicompany/baumkuchen/readme.md b/keyboards/takashicompany/baumkuchen/readme.md
new file mode 100644
index 00000000000..adc3f2e0064
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/readme.md
@@ -0,0 +1,31 @@
+# Baumkuchen
+
+
+
+Baumkuchen is a 13-key macropad with a radial key layout.
+The board can be used as a circuit or as a switch plate by cutting out the keyswitch Pro Micro part.
+It is compatible with Cherry MX compatible keyswitches, and a rotary encoder can be optionally installed.
+LEDs can also be mounted to make it glow.
+The board is reversible, allowing you to choose the arrangement of keys and Pro Micro according to your usage style.
+
+* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
+* Hardware Supported: Baumkuchen PCB, Pro Micro
+* Hardware Availability: https://github.com/takashicompany/baumkuchen
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashicompany/baumkuchen:default
+
+Flashing example for this keyboard:
+
+ make takashicompany/baumkuchen:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/takashicompany/baumkuchen/rules.mk b/keyboards/takashicompany/baumkuchen/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/info.json b/keyboards/takashicompany/minidivide/info.json
new file mode 100644
index 00000000000..2234cd9b39e
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/info.json
@@ -0,0 +1,105 @@
+{
+ "manufacturer": "takashicompany",
+ "keyboard_name": "miniDivide",
+ "maintainer": "takashicompany",
+ "build": {
+ "lto": true
+ },
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["D4", "C6", "D7", "E6", "B4"],
+ "rows": ["F4", "F5", "F6", "F7"]
+ },
+ "pin_compatible": "promicro",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 10,
+ "sleep": true,
+ "split_count": [5, 5]
+ },
+ "split": {
+ "enabled": true,
+ "matrix_pins": {
+ "right": {
+ "cols": ["B4", "E6", "D7", "C6", "D4"],
+ "rows": ["F4", "F5", "F6", "F7"]
+ }
+ },
+ "soft_serial_pin": "D2"
+ },
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0037",
+ "vid": "0x7463"
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.42},
+ {"matrix": [0, 1], "x": 0.84, "y": 0.21},
+ {"matrix": [0, 2], "x": 1.68, "y": 0},
+ {"matrix": [0, 3], "x": 2.52, "y": 0.21},
+ {"matrix": [0, 4], "x": 3.36, "y": 0.42},
+ {"matrix": [4, 0], "x": 6.3, "y": 0.42},
+ {"matrix": [4, 1], "x": 7.14, "y": 0.21},
+ {"matrix": [4, 2], "x": 7.98, "y": 0},
+ {"matrix": [4, 3], "x": 8.82, "y": 0.21},
+ {"matrix": [4, 4], "x": 9.66, "y": 0.42},
+ {"matrix": [1, 0], "x": 0, "y": 1.26},
+ {"matrix": [1, 1], "x": 0.84, "y": 1.05},
+ {"matrix": [1, 2], "x": 1.68, "y": 0.84},
+ {"matrix": [1, 3], "x": 2.52, "y": 1.05},
+ {"matrix": [1, 4], "x": 3.36, "y": 1.26},
+ {"matrix": [5, 0], "x": 6.3, "y": 1.26},
+ {"matrix": [5, 1], "x": 7.14, "y": 1.05},
+ {"matrix": [5, 2], "x": 7.98, "y": 0.84},
+ {"matrix": [5, 3], "x": 8.82, "y": 1.05},
+ {"matrix": [5, 4], "x": 9.66, "y": 1.26},
+ {"matrix": [2, 0], "x": 0, "y": 2.1},
+ {"matrix": [2, 1], "x": 0.84, "y": 1.89},
+ {"matrix": [2, 2], "x": 1.68, "y": 1.68},
+ {"matrix": [2, 3], "x": 2.52, "y": 1.89},
+ {"matrix": [2, 4], "x": 3.36, "y": 2.1},
+ {"matrix": [6, 0], "x": 6.3, "y": 2.1},
+ {"matrix": [6, 1], "x": 7.14, "y": 1.89},
+ {"matrix": [6, 2], "x": 7.98, "y": 1.68},
+ {"matrix": [6, 3], "x": 8.82, "y": 1.89},
+ {"matrix": [6, 4], "x": 9.66, "y": 2.1},
+ {"matrix": [3, 1], "x": 1.68, "y": 3.15},
+ {"matrix": [3, 2], "x": 2.52, "y": 3.15},
+ {"matrix": [3, 3], "x": 3.36, "y": 3.15},
+ {"matrix": [3, 4], "x": 4.2, "y": 3.15},
+ {"matrix": [7, 0], "x": 5.46, "y": 3.15},
+ {"matrix": [7, 1], "x": 6.3, "y": 3.15},
+ {"matrix": [7, 2], "x": 7.14, "y": 3.15},
+ {"matrix": [7, 3], "x": 7.98, "y": 3.15}
+ ]
+ }
+ }
+}
diff --git a/keyboards/takashicompany/minidivide/keymaps/default/keymap.c b/keyboards/takashicompany/minidivide/keymaps/default/keymap.c
new file mode 100644
index 00000000000..38b954f38da
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/keymaps/default/keymap.c
@@ -0,0 +1,70 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LNG1), KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3,
+ LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3),
+ KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(5, KC_SPC), LT(4, KC_LNG1), KC_RGUI, KC_RCTL
+ ),
+
+ [4] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3,
+ LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [5] = LAYOUT(
+ KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS,
+ KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [6] = LAYOUT(
+ KC_ESC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO,
+ KC_LCTL, KC_TRNS, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [7] = LAYOUT(
+ KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), MO(9),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [8] = LAYOUT(
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, DF(0), DF(3),
+ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/keymaps/via/config.h b/keyboards/takashicompany/minidivide/keymaps/via/config.h
new file mode 100644
index 00000000000..f357dce3032
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/keymaps/via/config.h
@@ -0,0 +1,5 @@
+// Copyright 2022 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 10
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/keymaps/via/keymap.c b/keyboards/takashicompany/minidivide/keymaps/via/keymap.c
new file mode 100644
index 00000000000..38b954f38da
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/keymaps/via/keymap.c
@@ -0,0 +1,70 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LNG1), KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3,
+ LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3),
+ KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(5, KC_SPC), LT(4, KC_LNG1), KC_RGUI, KC_RCTL
+ ),
+
+ [4] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3,
+ LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [5] = LAYOUT(
+ KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS,
+ KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [6] = LAYOUT(
+ KC_ESC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO,
+ KC_LCTL, KC_TRNS, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [7] = LAYOUT(
+ KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), MO(9),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [8] = LAYOUT(
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, DF(0), DF(3),
+ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/keymaps/via/rules.mk b/keyboards/takashicompany/minidivide/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/minidivide.c b/keyboards/takashicompany/minidivide/minidivide.c
new file mode 100644
index 00000000000..abdb91fc47e
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/minidivide.c
@@ -0,0 +1,48 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ return OLED_ROTATION_270;
+}
+
+//Variable that stores the number of times the key was pressed
+static uint16_t press_count = 0;
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+ // Increment the counter when a key is pressed
+ if (record->event.pressed) {
+ press_count++;
+ }
+
+ return process_record_user(keycode, record);
+}
+
+bool oled_task_kb(void) {
+
+ if (!oled_task_user()) { return false; }
+
+ oled_write_ln_P(PSTR("mini"), false);
+ oled_write_ln_P(PSTR("Divide"), false);
+
+ oled_set_cursor(0, 5);
+
+ oled_write_ln_P(PSTR("Layer"), false);
+ oled_write_ln(get_u8_str(get_highest_layer(layer_state), ' '), false);
+
+ oled_write_ln_P(PSTR(" "), false);
+ oled_write_ln_P(PSTR(" "), false);
+
+ oled_write_ln_P(PSTR("Count"), false);
+ oled_write_ln(get_u16_str(press_count, ' '), false);
+
+ return false;
+
+}
+#endif
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/readme.md b/keyboards/takashicompany/minidivide/readme.md
new file mode 100644
index 00000000000..de49c2892b4
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/readme.md
@@ -0,0 +1,43 @@
+# miniDivide
+
+
+
+miniDivide is a split keyboard with 0.8u (16mm) key pitch.
+The size of a single key is 80% of that of a conventional keyboard key.
+Although the key size is more compact than usual, it has the advantage of requiring minimal finger movement.
+The number of keys is 19 keys for one hand and 38 keys for two hands.
+
+It is small and thin, making it easy to carry around.
+The option to mount a coin cell battery on the PCB is available so that the BLE Micro Pro can be installed.
+OLED can also be mounted.
+
+miniDivideは0.8u(16mm)キーピッチの分割型のキーボードです。
+一つのキーの大きさが従来のキーボードのキーと比較すると80%のサイズとなっています。
+通常よりコンパクトなキーサイズですが、指の動きが最小限で済むという強みがあります。
+キー数は片手で19キー、両手で38キーとなります。
+
+小さく、薄いので持ち運びにも便利です。
+またBLE Micro Proを搭載できるよう、コイン電池をPCBに搭載するオプションが可能です。
+OLEDも搭載できます。
+
+* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
+* Hardware Supported: PCB, Pro Micro
+* Hardware Availability: https://github.com/takashicompany/minidivide
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashicompany/minidivide:default
+
+Flashing example for this keyboard:
+
+ make takashicompany/minidivide:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/takashicompany/minidivide/rules.mk b/keyboards/takashicompany/minidivide/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/varanidae/info.json b/keyboards/varanidae/info.json
new file mode 100644
index 00000000000..f35e061dcf0
--- /dev/null
+++ b/keyboards/varanidae/info.json
@@ -0,0 +1,515 @@
+{
+ "keyboard_name": "Varanidae",
+ "manufacturer": "Tokage IT Lab.",
+ "url": "https://github.com/TokageItLab/Varanidae",
+ "maintainer": "Silc Renew",
+ "usb": {
+ "vid": "0x5369",
+ "pid": "0x0001",
+ "device_version": "1.0.0"
+ },
+ "pin_compatible": "elite_c",
+ "development_board": "elite_c",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ { "pin_a": "D0", "pin_b": "D1", "resolution": 2 }
+ ]
+ },
+ "dynamic_keymap": {
+ "layer_count": 3
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["D2", "F4", "D4", "D7", "B4", "B7", "C7", "F0", "B2", "B1", "F6"],
+ "rows": ["B0", "F5", "C6", "E6", "B5", "D5", "F1", "B6", "B3", "F7", "D3"]
+ },
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_iso_split_bs_rshift"
+ },
+ "layouts": {
+ "LAYOUT_ansi": {
+ "layout": [
+ { "label":"Middle Click", "matrix": [0, 0], "x": 0, "y": 0, "w": 1 },
+
+ { "label":"F16", "matrix": [0, 1], "x": 1, "y": 0, "w": 1 },
+ { "label":"F17", "matrix": [0, 2], "x": 2, "y": 0, "w": 1 },
+ { "label":"F18", "matrix": [0, 3], "x": 3, "y": 0, "w": 1 },
+ { "label":"F19", "matrix": [0, 4], "x": 4, "y": 0, "w": 1 },
+ { "label":"F1", "matrix": [0, 5], "x": 5.25, "y": 0, "w": 1 },
+ { "label":"F2", "matrix": [0, 6], "x": 6.25, "y": 0, "w": 1 },
+ { "label":"F3", "matrix": [0, 7], "x": 7.25, "y": 0, "w": 1 },
+ { "label":"F4", "matrix": [0, 8], "x": 8.25, "y": 0, "w": 1 },
+ { "label":"F5", "matrix": [0, 9], "x": 9.25, "y": 0, "w": 1 },
+ { "label":"F6", "matrix": [0, 10], "x": 10.25, "y": 0, "w": 1 },
+ { "label":"F7", "matrix": [5, 6], "x": 11.25, "y": 0, "w": 1 },
+ { "label":"F8", "matrix": [5, 7], "x": 12.25, "y": 0, "w": 1 },
+ { "label":"F9", "matrix": [5, 8], "x": 13.25, "y": 0, "w": 1 },
+ { "label":"F10", "matrix": [5, 9], "x": 14.25, "y": 0, "w": 1 },
+ { "label":"F11", "matrix": [5, 10], "x": 15.25, "y": 0, "w": 1 },
+ { "label":"F12", "matrix": [7, 1], "x": 16.25, "y": 0, "w": 1 },
+ { "label":"F13", "matrix": [7, 2], "x": 17.25, "y": 0, "w": 1 },
+ { "label":"F14", "matrix": [7, 3], "x": 18.25, "y": 0, "w": 1 },
+ { "label":"F15", "matrix": [7, 4], "x": 19.25, "y": 0, "w": 1 },
+
+ { "label":"F20", "matrix": [1, 1], "x": 0, "y": 1, "w": 1 },
+ { "label":"F21", "matrix": [1, 2], "x": 1, "y": 1, "w": 1 },
+ { "label":"F22", "matrix": [1, 3], "x": 2, "y": 1, "w": 1 },
+ { "label":"F23", "matrix": [1, 4], "x": 3, "y": 1, "w": 1 },
+ { "label":"F24", "matrix": [1, 5], "x": 4, "y": 1, "w": 1 },
+ { "label":"Esc", "matrix": [1, 6], "x": 5.25, "y": 1.25, "w": 1 },
+ { "label":"1", "matrix": [1, 7], "x": 6.25, "y": 1.25, "w": 1 },
+ { "label":"2", "matrix": [1, 8], "x": 7.25, "y": 1.25, "w": 1 },
+ { "label":"3", "matrix": [1, 9], "x": 8.25, "y": 1.25, "w": 1 },
+ { "label":"4", "matrix": [1, 10], "x": 9.25, "y": 1.25, "w": 1 },
+ { "label":"5", "matrix": [6, 6], "x": 10.25, "y": 1.25, "w": 1 },
+ { "label":"6", "matrix": [6, 7], "x": 11.25, "y": 1.25, "w": 1 },
+ { "label":"7", "matrix": [6, 8], "x": 12.25, "y": 1.25, "w": 1 },
+ { "label":"8", "matrix": [6, 9], "x": 13.25, "y": 1.25, "w": 1 },
+ { "label":"9", "matrix": [6, 10], "x": 14.25, "y": 1.25, "w": 1 },
+ { "label":"0", "matrix": [8, 1], "x": 15.25, "y": 1.25, "w": 1 },
+ { "label":"-", "matrix": [8, 2], "x": 16.25, "y": 1.25, "w": 1 },
+ { "label":"=", "matrix": [8, 3], "x": 17.25, "y": 1.25, "w": 1 },
+ { "label":"Backspace", "matrix": [7, 5], "x": 18.25, "y": 1.25, "w": 2 },
+
+ { "label":"/", "matrix": [2, 1], "x": 0, "y": 2.25, "w": 1 },
+ { "label":"7", "matrix": [2, 2], "x": 1, "y": 2.25, "w": 1 },
+ { "label":"8", "matrix": [2, 3], "x": 2, "y": 2.25, "w": 1 },
+ { "label":"9", "matrix": [2, 4], "x": 3, "y": 2.25, "w": 1 },
+ { "label":"Home", "matrix": [2, 5], "x": 4, "y": 2.25, "w": 1 },
+ { "label":"Tab", "matrix": [2, 6], "x": 5.25, "y": 2.25, "w": 1.5 },
+ { "label":"Q", "matrix": [2, 7], "x": 6.75, "y": 2.25, "w": 1 },
+ { "label":"W", "matrix": [2, 8], "x": 7.75, "y": 2.25, "w": 1 },
+ { "label":"E", "matrix": [2, 9], "x": 8.75, "y": 2.25, "w": 1 },
+ { "label":"R", "matrix": [2, 10], "x": 9.75, "y": 2.25, "w": 1 },
+ { "label":"T", "matrix": [7, 6], "x": 10.75, "y": 2.25, "w": 1 },
+ { "label":"Y", "matrix": [7, 7], "x": 11.75, "y": 2.25, "w": 1 },
+ { "label":"U", "matrix": [7, 8], "x": 12.75, "y": 2.25, "w": 1 },
+ { "label":"I", "matrix": [7, 9], "x": 13.75, "y": 2.25, "w": 1 },
+ { "label":"O", "matrix": [7, 10], "x": 14.75, "y": 2.25, "w": 1 },
+ { "label":"P", "matrix": [9, 1], "x": 15.75, "y": 2.25, "w": 1 },
+ { "label":"[", "matrix": [9, 2], "x": 16.75, "y": 2.25, "w": 1 },
+ { "label":"]", "matrix": [9, 3], "x": 17.75, "y": 2.25, "w": 1 },
+ { "label":"\\", "matrix": [10, 3], "x": 18.75, "y": 2.25, "w": 1.5 },
+
+ { "label":"*", "matrix": [3, 1], "x": 0, "y": 3.25, "w": 1 },
+ { "label":"4", "matrix": [3, 2], "x": 1, "y": 3.25, "w": 1 },
+ { "label":"5", "matrix": [3, 3], "x": 2, "y": 3.25, "w": 1 },
+ { "label":"6", "matrix": [3, 4], "x": 3, "y": 3.25, "w": 1 },
+ { "label":"End", "matrix": [3, 5], "x": 4, "y": 3.25, "w": 1 },
+ { "label":"Alt", "matrix": [3, 6], "x": 5.25, "y": 3.25, "w": 1.75 },
+ { "label":"A", "matrix": [3, 7], "x": 7, "y": 3.25, "w": 1 },
+ { "label":"S", "matrix": [3, 8], "x": 8, "y": 3.25, "w": 1 },
+ { "label":"D", "matrix": [3, 9], "x": 9, "y": 3.25, "w": 1 },
+ { "label":"F", "matrix": [3, 10], "x": 10, "y": 3.25, "w": 1 },
+ { "label":"G", "matrix": [8, 6], "x": 11, "y": 3.25, "w": 1 },
+ { "label":"H", "matrix": [8, 7], "x": 12, "y": 3.25, "w": 1 },
+ { "label":"J", "matrix": [8, 8], "x": 13, "y": 3.25, "w": 1 },
+ { "label":"K", "matrix": [8, 9], "x": 14, "y": 3.25, "w": 1 },
+ { "label":"L", "matrix": [8, 10], "x": 15, "y": 3.25, "w": 1 },
+ { "label":";", "matrix": [10, 1], "x": 16, "y": 3.25, "w": 1 },
+ { "label":"'", "matrix": [10, 2], "x": 17, "y": 3.25, "w": 1 },
+ { "label":"Enter", "matrix": [9, 4], "x": 18, "y": 3.25, "w": 2.25},
+
+ { "label":"-", "matrix": [4, 1], "x": 0, "y": 4.25, "w": 1 },
+ { "label":"1", "matrix": [4, 2], "x": 1, "y": 4.25, "w": 1 },
+ { "label":"2", "matrix": [4, 3], "x": 2, "y": 4.25, "w": 1 },
+ { "label":"3", "matrix": [4, 4], "x": 3, "y": 4.25, "w": 1 },
+ { "label":"Page Up", "matrix": [4, 5], "x": 4, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [4, 6], "x": 5.25, "y": 4.25, "w": 2.25},
+ { "label":"Z", "matrix": [4, 8], "x": 7.5, "y": 4.25, "w": 1 },
+ { "label":"X", "matrix": [4, 9], "x": 8.5, "y": 4.25, "w": 1 },
+ { "label":"C", "matrix": [4, 10], "x": 9.5, "y": 4.25, "w": 1 },
+ { "label":"V", "matrix": [9, 6], "x": 10.5, "y": 4.25, "w": 1 },
+ { "label":"B", "matrix": [9, 7], "x": 11.5, "y": 4.25, "w": 1 },
+ { "label":"N", "matrix": [9, 8], "x": 12.5, "y": 4.25, "w": 1 },
+ { "label":"M", "matrix": [9, 9], "x": 13.5, "y": 4.25, "w": 1 },
+ { "label":",", "matrix": [9, 10], "x": 14.5, "y": 4.25, "w": 1 },
+ { "label":".", "matrix": [10, 4], "x": 15.5, "y": 4.25, "w": 1 },
+ { "label":"/", "matrix": [10, 5], "x": 16.5, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [8, 5], "x": 17.5, "y": 4.25, "w": 2.75 },
+
+ { "label":"+", "matrix": [5, 1], "x": 0, "y": 5.25, "w": 1 },
+ { "label":"0", "matrix": [5, 2], "x": 1, "y": 5.25, "w": 1 },
+ { "label":".", "matrix": [5, 3], "x": 2, "y": 5.25, "w": 1 },
+ { "label":"Enter", "matrix": [5, 4], "x": 3, "y": 5.25, "w": 1 },
+ { "label":"Page Down", "matrix": [5, 5], "x": 4, "y": 5.25, "w": 1 },
+ { "label":"Win", "matrix": [6, 1], "x": 5.25, "y": 5.25, "w": 1 },
+ { "label":"Ctrl", "matrix": [6, 2], "x": 6.25, "y": 5.25, "w": 1 },
+ { "label":"Print", "matrix": [6, 3], "x": 7.25, "y": 5.25, "w": 1 },
+ { "label":"Muhenkan", "matrix": [6, 4], "x": 8.25, "y": 5.25, "w": 1 },
+ { "label":"Space", "matrix": [6, 5], "x": 9.25, "y": 5.25, "w": 6 },
+ { "label":"Henkan", "matrix": [10, 6], "x": 15.25, "y": 5.25, "w": 1 },
+ { "label":"Left", "matrix": [10, 7], "x": 16.25, "y": 5.25, "w": 1 },
+ { "label":"Up", "matrix": [10, 8], "x": 17.25, "y": 5.25, "w": 1 },
+ { "label":"Down", "matrix": [10, 9], "x": 18.25, "y": 5.25, "w": 1 },
+ { "label":"Right", "matrix": [10, 10], "x": 19.25, "y": 5.25, "w": 1 }
+ ]
+ },
+ "LAYOUT_ansi_split_bs_rshift": {
+ "layout": [
+ { "label":"Middle Click", "matrix": [0, 0], "x": 0, "y": 0, "w": 1 },
+
+ { "label":"F16", "matrix": [0, 1], "x": 1, "y": 0, "w": 1 },
+ { "label":"F17", "matrix": [0, 2], "x": 2, "y": 0, "w": 1 },
+ { "label":"F18", "matrix": [0, 3], "x": 3, "y": 0, "w": 1 },
+ { "label":"F19", "matrix": [0, 4], "x": 4, "y": 0, "w": 1 },
+ { "label":"F1", "matrix": [0, 5], "x": 5.25, "y": 0, "w": 1 },
+ { "label":"F2", "matrix": [0, 6], "x": 6.25, "y": 0, "w": 1 },
+ { "label":"F3", "matrix": [0, 7], "x": 7.25, "y": 0, "w": 1 },
+ { "label":"F4", "matrix": [0, 8], "x": 8.25, "y": 0, "w": 1 },
+ { "label":"F5", "matrix": [0, 9], "x": 9.25, "y": 0, "w": 1 },
+ { "label":"F6", "matrix": [0, 10], "x": 10.25, "y": 0, "w": 1 },
+ { "label":"F7", "matrix": [5, 6], "x": 11.25, "y": 0, "w": 1 },
+ { "label":"F8", "matrix": [5, 7], "x": 12.25, "y": 0, "w": 1 },
+ { "label":"F9", "matrix": [5, 8], "x": 13.25, "y": 0, "w": 1 },
+ { "label":"F10", "matrix": [5, 9], "x": 14.25, "y": 0, "w": 1 },
+ { "label":"F11", "matrix": [5, 10], "x": 15.25, "y": 0, "w": 1 },
+ { "label":"F12", "matrix": [7, 1], "x": 16.25, "y": 0, "w": 1 },
+ { "label":"F13", "matrix": [7, 2], "x": 17.25, "y": 0, "w": 1 },
+ { "label":"F14", "matrix": [7, 3], "x": 18.25, "y": 0, "w": 1 },
+ { "label":"F15", "matrix": [7, 4], "x": 19.25, "y": 0, "w": 1 },
+
+ { "label":"F20", "matrix": [1, 1], "x": 0, "y": 1, "w": 1 },
+ { "label":"F21", "matrix": [1, 2], "x": 1, "y": 1, "w": 1 },
+ { "label":"F22", "matrix": [1, 3], "x": 2, "y": 1, "w": 1 },
+ { "label":"F23", "matrix": [1, 4], "x": 3, "y": 1, "w": 1 },
+ { "label":"F24", "matrix": [1, 5], "x": 4, "y": 1, "w": 1 },
+ { "label":"Esc", "matrix": [1, 6], "x": 5.25, "y": 1.25, "w": 1 },
+ { "label":"1", "matrix": [1, 7], "x": 6.25, "y": 1.25, "w": 1 },
+ { "label":"2", "matrix": [1, 8], "x": 7.25, "y": 1.25, "w": 1 },
+ { "label":"3", "matrix": [1, 9], "x": 8.25, "y": 1.25, "w": 1 },
+ { "label":"4", "matrix": [1, 10], "x": 9.25, "y": 1.25, "w": 1 },
+ { "label":"5", "matrix": [6, 6], "x": 10.25, "y": 1.25, "w": 1 },
+ { "label":"6", "matrix": [6, 7], "x": 11.25, "y": 1.25, "w": 1 },
+ { "label":"7", "matrix": [6, 8], "x": 12.25, "y": 1.25, "w": 1 },
+ { "label":"8", "matrix": [6, 9], "x": 13.25, "y": 1.25, "w": 1 },
+ { "label":"9", "matrix": [6, 10], "x": 14.25, "y": 1.25, "w": 1 },
+ { "label":"0", "matrix": [8, 1], "x": 15.25, "y": 1.25, "w": 1 },
+ { "label":"-", "matrix": [8, 2], "x": 16.25, "y": 1.25, "w": 1 },
+ { "label":"=", "matrix": [8, 3], "x": 17.25, "y": 1.25, "w": 1 },
+ { "label":"Delete", "matrix": [8, 4], "x": 18.25, "y": 1.25, "w": 1 },
+ { "label":"Backspace", "matrix": [7, 5], "x": 19.25, "y": 1.25, "w": 1 },
+
+ { "label":"/", "matrix": [2, 1], "x": 0, "y": 2.25, "w": 1 },
+ { "label":"7", "matrix": [2, 2], "x": 1, "y": 2.25, "w": 1 },
+ { "label":"8", "matrix": [2, 3], "x": 2, "y": 2.25, "w": 1 },
+ { "label":"9", "matrix": [2, 4], "x": 3, "y": 2.25, "w": 1 },
+ { "label":"Home", "matrix": [2, 5], "x": 4, "y": 2.25, "w": 1 },
+ { "label":"Tab", "matrix": [2, 6], "x": 5.25, "y": 2.25, "w": 1.5 },
+ { "label":"Q", "matrix": [2, 7], "x": 6.75, "y": 2.25, "w": 1 },
+ { "label":"W", "matrix": [2, 8], "x": 7.75, "y": 2.25, "w": 1 },
+ { "label":"E", "matrix": [2, 9], "x": 8.75, "y": 2.25, "w": 1 },
+ { "label":"R", "matrix": [2, 10], "x": 9.75, "y": 2.25, "w": 1 },
+ { "label":"T", "matrix": [7, 6], "x": 10.75, "y": 2.25, "w": 1 },
+ { "label":"Y", "matrix": [7, 7], "x": 11.75, "y": 2.25, "w": 1 },
+ { "label":"U", "matrix": [7, 8], "x": 12.75, "y": 2.25, "w": 1 },
+ { "label":"I", "matrix": [7, 9], "x": 13.75, "y": 2.25, "w": 1 },
+ { "label":"O", "matrix": [7, 10], "x": 14.75, "y": 2.25, "w": 1 },
+ { "label":"P", "matrix": [9, 1], "x": 15.75, "y": 2.25, "w": 1 },
+ { "label":"[", "matrix": [9, 2], "x": 16.75, "y": 2.25, "w": 1 },
+ { "label":"]", "matrix": [9, 3], "x": 17.75, "y": 2.25, "w": 1 },
+ { "label":"\\", "matrix": [10, 3], "x": 18.75, "y": 2.25, "w": 1.5 },
+
+ { "label":"*", "matrix": [3, 1], "x": 0, "y": 3.25, "w": 1 },
+ { "label":"4", "matrix": [3, 2], "x": 1, "y": 3.25, "w": 1 },
+ { "label":"5", "matrix": [3, 3], "x": 2, "y": 3.25, "w": 1 },
+ { "label":"6", "matrix": [3, 4], "x": 3, "y": 3.25, "w": 1 },
+ { "label":"End", "matrix": [3, 5], "x": 4, "y": 3.25, "w": 1 },
+ { "label":"Alt", "matrix": [3, 6], "x": 5.25, "y": 3.25, "w": 1.75 },
+ { "label":"A", "matrix": [3, 7], "x": 7, "y": 3.25, "w": 1 },
+ { "label":"S", "matrix": [3, 8], "x": 8, "y": 3.25, "w": 1 },
+ { "label":"D", "matrix": [3, 9], "x": 9, "y": 3.25, "w": 1 },
+ { "label":"F", "matrix": [3, 10], "x": 10, "y": 3.25, "w": 1 },
+ { "label":"G", "matrix": [8, 6], "x": 11, "y": 3.25, "w": 1 },
+ { "label":"H", "matrix": [8, 7], "x": 12, "y": 3.25, "w": 1 },
+ { "label":"J", "matrix": [8, 8], "x": 13, "y": 3.25, "w": 1 },
+ { "label":"K", "matrix": [8, 9], "x": 14, "y": 3.25, "w": 1 },
+ { "label":"L", "matrix": [8, 10], "x": 15, "y": 3.25, "w": 1 },
+ { "label":";", "matrix": [10, 1], "x": 16, "y": 3.25, "w": 1 },
+ { "label":"'", "matrix": [10, 2], "x": 17, "y": 3.25, "w": 1 },
+ { "label":"Enter", "matrix": [9, 4], "x": 18, "y": 3.25, "w": 2.25},
+
+ { "label":"-", "matrix": [4, 1], "x": 0, "y": 4.25, "w": 1 },
+ { "label":"1", "matrix": [4, 2], "x": 1, "y": 4.25, "w": 1 },
+ { "label":"2", "matrix": [4, 3], "x": 2, "y": 4.25, "w": 1 },
+ { "label":"3", "matrix": [4, 4], "x": 3, "y": 4.25, "w": 1 },
+ { "label":"Page Up", "matrix": [4, 5], "x": 4, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [4, 6], "x": 5.25, "y": 4.25, "w": 2.25},
+ { "label":"Z", "matrix": [4, 8], "x": 7.5, "y": 4.25, "w": 1 },
+ { "label":"X", "matrix": [4, 9], "x": 8.5, "y": 4.25, "w": 1 },
+ { "label":"C", "matrix": [4, 10], "x": 9.5, "y": 4.25, "w": 1 },
+ { "label":"V", "matrix": [9, 6], "x": 10.5, "y": 4.25, "w": 1 },
+ { "label":"B", "matrix": [9, 7], "x": 11.5, "y": 4.25, "w": 1 },
+ { "label":"N", "matrix": [9, 8], "x": 12.5, "y": 4.25, "w": 1 },
+ { "label":"M", "matrix": [9, 9], "x": 13.5, "y": 4.25, "w": 1 },
+ { "label":",", "matrix": [9, 10], "x": 14.5, "y": 4.25, "w": 1 },
+ { "label":".", "matrix": [10, 4], "x": 15.5, "y": 4.25, "w": 1 },
+ { "label":"/", "matrix": [10, 5], "x": 16.5, "y": 4.25, "w": 1 },
+ { "label":"`", "matrix": [9, 5], "x": 17.5, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [8, 5], "x": 18.5, "y": 4.25, "w": 1.75 },
+
+ { "label":"+", "matrix": [5, 1], "x": 0, "y": 5.25, "w": 1 },
+ { "label":"0", "matrix": [5, 2], "x": 1, "y": 5.25, "w": 1 },
+ { "label":".", "matrix": [5, 3], "x": 2, "y": 5.25, "w": 1 },
+ { "label":"Enter", "matrix": [5, 4], "x": 3, "y": 5.25, "w": 1 },
+ { "label":"Page Down", "matrix": [5, 5], "x": 4, "y": 5.25, "w": 1 },
+ { "label":"Win", "matrix": [6, 1], "x": 5.25, "y": 5.25, "w": 1 },
+ { "label":"Ctrl", "matrix": [6, 2], "x": 6.25, "y": 5.25, "w": 1 },
+ { "label":"Print", "matrix": [6, 3], "x": 7.25, "y": 5.25, "w": 1 },
+ { "label":"Muhenkan", "matrix": [6, 4], "x": 8.25, "y": 5.25, "w": 1 },
+ { "label":"Space", "matrix": [6, 5], "x": 9.25, "y": 5.25, "w": 6 },
+ { "label":"Henkan", "matrix": [10, 6], "x": 15.25, "y": 5.25, "w": 1 },
+ { "label":"Left", "matrix": [10, 7], "x": 16.25, "y": 5.25, "w": 1 },
+ { "label":"Up", "matrix": [10, 8], "x": 17.25, "y": 5.25, "w": 1 },
+ { "label":"Down", "matrix": [10, 9], "x": 18.25, "y": 5.25, "w": 1 },
+ { "label":"Right", "matrix": [10, 10], "x": 19.25, "y": 5.25, "w": 1 }
+ ]
+ },
+ "LAYOUT_iso": {
+ "layout": [
+ { "label":"Middle Click", "matrix": [0, 0], "x": 0, "y": 0, "w": 1 },
+
+ { "label":"F16", "matrix": [0, 1], "x": 1, "y": 0, "w": 1 },
+ { "label":"F17", "matrix": [0, 2], "x": 2, "y": 0, "w": 1 },
+ { "label":"F18", "matrix": [0, 3], "x": 3, "y": 0, "w": 1 },
+ { "label":"F19", "matrix": [0, 4], "x": 4, "y": 0, "w": 1 },
+ { "label":"F1", "matrix": [0, 5], "x": 5.25, "y": 0, "w": 1 },
+ { "label":"F2", "matrix": [0, 6], "x": 6.25, "y": 0, "w": 1 },
+ { "label":"F3", "matrix": [0, 7], "x": 7.25, "y": 0, "w": 1 },
+ { "label":"F4", "matrix": [0, 8], "x": 8.25, "y": 0, "w": 1 },
+ { "label":"F5", "matrix": [0, 9], "x": 9.25, "y": 0, "w": 1 },
+ { "label":"F6", "matrix": [0, 10], "x": 10.25, "y": 0, "w": 1 },
+ { "label":"F7", "matrix": [5, 6], "x": 11.25, "y": 0, "w": 1 },
+ { "label":"F8", "matrix": [5, 7], "x": 12.25, "y": 0, "w": 1 },
+ { "label":"F9", "matrix": [5, 8], "x": 13.25, "y": 0, "w": 1 },
+ { "label":"F10", "matrix": [5, 9], "x": 14.25, "y": 0, "w": 1 },
+ { "label":"F11", "matrix": [5, 10], "x": 15.25, "y": 0, "w": 1 },
+ { "label":"F12", "matrix": [7, 1], "x": 16.25, "y": 0, "w": 1 },
+ { "label":"F13", "matrix": [7, 2], "x": 17.25, "y": 0, "w": 1 },
+ { "label":"F14", "matrix": [7, 3], "x": 18.25, "y": 0, "w": 1 },
+ { "label":"F15", "matrix": [7, 4], "x": 19.25, "y": 0, "w": 1 },
+
+ { "label":"F20", "matrix": [1, 1], "x": 0, "y": 1, "w": 1 },
+ { "label":"F21", "matrix": [1, 2], "x": 1, "y": 1, "w": 1 },
+ { "label":"F22", "matrix": [1, 3], "x": 2, "y": 1, "w": 1 },
+ { "label":"F23", "matrix": [1, 4], "x": 3, "y": 1, "w": 1 },
+ { "label":"F24", "matrix": [1, 5], "x": 4, "y": 1, "w": 1 },
+ { "label":"Esc", "matrix": [1, 6], "x": 5.25, "y": 1.25, "w": 1 },
+ { "label":"1", "matrix": [1, 7], "x": 6.25, "y": 1.25, "w": 1 },
+ { "label":"2", "matrix": [1, 8], "x": 7.25, "y": 1.25, "w": 1 },
+ { "label":"3", "matrix": [1, 9], "x": 8.25, "y": 1.25, "w": 1 },
+ { "label":"4", "matrix": [1, 10], "x": 9.25, "y": 1.25, "w": 1 },
+ { "label":"5", "matrix": [6, 6], "x": 10.25, "y": 1.25, "w": 1 },
+ { "label":"6", "matrix": [6, 7], "x": 11.25, "y": 1.25, "w": 1 },
+ { "label":"7", "matrix": [6, 8], "x": 12.25, "y": 1.25, "w": 1 },
+ { "label":"8", "matrix": [6, 9], "x": 13.25, "y": 1.25, "w": 1 },
+ { "label":"9", "matrix": [6, 10], "x": 14.25, "y": 1.25, "w": 1 },
+ { "label":"0", "matrix": [8, 1], "x": 15.25, "y": 1.25, "w": 1 },
+ { "label":"-", "matrix": [8, 2], "x": 16.25, "y": 1.25, "w": 1 },
+ { "label":"=", "matrix": [8, 3], "x": 17.25, "y": 1.25, "w": 1 },
+ { "label":"Backspace", "matrix": [7, 5], "x": 18.25, "y": 1.25, "w": 2 },
+
+ { "label":"/", "matrix": [2, 1], "x": 0, "y": 2.25, "w": 1 },
+ { "label":"7", "matrix": [2, 2], "x": 1, "y": 2.25, "w": 1 },
+ { "label":"8", "matrix": [2, 3], "x": 2, "y": 2.25, "w": 1 },
+ { "label":"9", "matrix": [2, 4], "x": 3, "y": 2.25, "w": 1 },
+ { "label":"Home", "matrix": [2, 5], "x": 4, "y": 2.25, "w": 1 },
+ { "label":"Tab", "matrix": [2, 6], "x": 5.25, "y": 2.25, "w": 1.5 },
+ { "label":"Q", "matrix": [2, 7], "x": 6.75, "y": 2.25, "w": 1 },
+ { "label":"W", "matrix": [2, 8], "x": 7.75, "y": 2.25, "w": 1 },
+ { "label":"E", "matrix": [2, 9], "x": 8.75, "y": 2.25, "w": 1 },
+ { "label":"R", "matrix": [2, 10], "x": 9.75, "y": 2.25, "w": 1 },
+ { "label":"T", "matrix": [7, 6], "x": 10.75, "y": 2.25, "w": 1 },
+ { "label":"Y", "matrix": [7, 7], "x": 11.75, "y": 2.25, "w": 1 },
+ { "label":"U", "matrix": [7, 8], "x": 12.75, "y": 2.25, "w": 1 },
+ { "label":"I", "matrix": [7, 9], "x": 13.75, "y": 2.25, "w": 1 },
+ { "label":"O", "matrix": [7, 10], "x": 14.75, "y": 2.25, "w": 1 },
+ { "label":"P", "matrix": [9, 1], "x": 15.75, "y": 2.25, "w": 1 },
+ { "label":"[", "matrix": [9, 2], "x": 16.75, "y": 2.25, "w": 1 },
+ { "label":"]", "matrix": [9, 3], "x": 17.75, "y": 2.25, "w": 1 },
+
+ { "label":"*", "matrix": [3, 1], "x": 0, "y": 3.25, "w": 1 },
+ { "label":"4", "matrix": [3, 2], "x": 1, "y": 3.25, "w": 1 },
+ { "label":"5", "matrix": [3, 3], "x": 2, "y": 3.25, "w": 1 },
+ { "label":"6", "matrix": [3, 4], "x": 3, "y": 3.25, "w": 1 },
+ { "label":"End", "matrix": [3, 5], "x": 4, "y": 3.25, "w": 1 },
+ { "label":"Alt", "matrix": [3, 6], "x": 5.25, "y": 3.25, "w": 1.75 },
+ { "label":"A", "matrix": [3, 7], "x": 7, "y": 3.25, "w": 1 },
+ { "label":"S", "matrix": [3, 8], "x": 8, "y": 3.25, "w": 1 },
+ { "label":"D", "matrix": [3, 9], "x": 9, "y": 3.25, "w": 1 },
+ { "label":"F", "matrix": [3, 10], "x": 10, "y": 3.25, "w": 1 },
+ { "label":"G", "matrix": [8, 6], "x": 11, "y": 3.25, "w": 1 },
+ { "label":"H", "matrix": [8, 7], "x": 12, "y": 3.25, "w": 1 },
+ { "label":"J", "matrix": [8, 8], "x": 13, "y": 3.25, "w": 1 },
+ { "label":"K", "matrix": [8, 9], "x": 14, "y": 3.25, "w": 1 },
+ { "label":"L", "matrix": [8, 10], "x": 15, "y": 3.25, "w": 1 },
+ { "label":";", "matrix": [10, 1], "x": 16, "y": 3.25, "w": 1 },
+ { "label":"'", "matrix": [10, 2], "x": 17, "y": 3.25, "w": 1 },
+ { "label":"\\", "matrix": [10, 3], "x": 18, "y": 3.25, "w": 1 },
+ { "label":"Enter", "matrix": [9, 4], "x": 19, "y": 2.25, "w": 1.25, "h": 2 },
+
+ { "label":"-", "matrix": [4, 1], "x": 0, "y": 4.25, "w": 1 },
+ { "label":"1", "matrix": [4, 2], "x": 1, "y": 4.25, "w": 1 },
+ { "label":"2", "matrix": [4, 3], "x": 2, "y": 4.25, "w": 1 },
+ { "label":"3", "matrix": [4, 4], "x": 3, "y": 4.25, "w": 1 },
+ { "label":"Page Up", "matrix": [4, 5], "x": 4, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [4, 6], "x": 5.25, "y": 4.25, "w": 1.25},
+ { "label":"\\", "matrix": [4, 7], "x": 6.5, "y": 4.25, "w": 1 },
+ { "label":"Z", "matrix": [4, 8], "x": 7.5, "y": 4.25, "w": 1 },
+ { "label":"X", "matrix": [4, 9], "x": 8.5, "y": 4.25, "w": 1 },
+ { "label":"C", "matrix": [4, 10], "x": 9.5, "y": 4.25, "w": 1 },
+ { "label":"V", "matrix": [9, 6], "x": 10.5, "y": 4.25, "w": 1 },
+ { "label":"B", "matrix": [9, 7], "x": 11.5, "y": 4.25, "w": 1 },
+ { "label":"N", "matrix": [9, 8], "x": 12.5, "y": 4.25, "w": 1 },
+ { "label":"M", "matrix": [9, 9], "x": 13.5, "y": 4.25, "w": 1 },
+ { "label":",", "matrix": [9, 10], "x": 14.5, "y": 4.25, "w": 1 },
+ { "label":".", "matrix": [10, 4], "x": 15.5, "y": 4.25, "w": 1 },
+ { "label":"/", "matrix": [10, 5], "x": 16.5, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [8, 5], "x": 17.5, "y": 4.25, "w": 2.75 },
+
+ { "label":"+", "matrix": [5, 1], "x": 0, "y": 5.25, "w": 1 },
+ { "label":"0", "matrix": [5, 2], "x": 1, "y": 5.25, "w": 1 },
+ { "label":".", "matrix": [5, 3], "x": 2, "y": 5.25, "w": 1 },
+ { "label":"Enter", "matrix": [5, 4], "x": 3, "y": 5.25, "w": 1 },
+ { "label":"Page Down", "matrix": [5, 5], "x": 4, "y": 5.25, "w": 1 },
+ { "label":"Win", "matrix": [6, 1], "x": 5.25, "y": 5.25, "w": 1 },
+ { "label":"Ctrl", "matrix": [6, 2], "x": 6.25, "y": 5.25, "w": 1 },
+ { "label":"Print", "matrix": [6, 3], "x": 7.25, "y": 5.25, "w": 1 },
+ { "label":"Muhenkan", "matrix": [6, 4], "x": 8.25, "y": 5.25, "w": 1 },
+ { "label":"Space", "matrix": [6, 5], "x": 9.25, "y": 5.25, "w": 6 },
+ { "label":"Henkan", "matrix": [10, 6], "x": 15.25, "y": 5.25, "w": 1 },
+ { "label":"Left", "matrix": [10, 7], "x": 16.25, "y": 5.25, "w": 1 },
+ { "label":"Up", "matrix": [10, 8], "x": 17.25, "y": 5.25, "w": 1 },
+ { "label":"Down", "matrix": [10, 9], "x": 18.25, "y": 5.25, "w": 1 },
+ { "label":"Right", "matrix": [10, 10], "x": 19.25, "y": 5.25, "w": 1 }
+ ]
+ },
+ "LAYOUT_iso_split_bs_rshift": {
+ "layout": [
+ { "label":"Middle Click", "matrix": [0, 0], "x": 0, "y": 0, "w": 1 },
+
+ { "label":"F16", "matrix": [0, 1], "x": 1, "y": 0, "w": 1 },
+ { "label":"F17", "matrix": [0, 2], "x": 2, "y": 0, "w": 1 },
+ { "label":"F18", "matrix": [0, 3], "x": 3, "y": 0, "w": 1 },
+ { "label":"F19", "matrix": [0, 4], "x": 4, "y": 0, "w": 1 },
+ { "label":"F1", "matrix": [0, 5], "x": 5.25, "y": 0, "w": 1 },
+ { "label":"F2", "matrix": [0, 6], "x": 6.25, "y": 0, "w": 1 },
+ { "label":"F3", "matrix": [0, 7], "x": 7.25, "y": 0, "w": 1 },
+ { "label":"F4", "matrix": [0, 8], "x": 8.25, "y": 0, "w": 1 },
+ { "label":"F5", "matrix": [0, 9], "x": 9.25, "y": 0, "w": 1 },
+ { "label":"F6", "matrix": [0, 10], "x": 10.25, "y": 0, "w": 1 },
+ { "label":"F7", "matrix": [5, 6], "x": 11.25, "y": 0, "w": 1 },
+ { "label":"F8", "matrix": [5, 7], "x": 12.25, "y": 0, "w": 1 },
+ { "label":"F9", "matrix": [5, 8], "x": 13.25, "y": 0, "w": 1 },
+ { "label":"F10", "matrix": [5, 9], "x": 14.25, "y": 0, "w": 1 },
+ { "label":"F11", "matrix": [5, 10], "x": 15.25, "y": 0, "w": 1 },
+ { "label":"F12", "matrix": [7, 1], "x": 16.25, "y": 0, "w": 1 },
+ { "label":"F13", "matrix": [7, 2], "x": 17.25, "y": 0, "w": 1 },
+ { "label":"F14", "matrix": [7, 3], "x": 18.25, "y": 0, "w": 1 },
+ { "label":"F15", "matrix": [7, 4], "x": 19.25, "y": 0, "w": 1 },
+
+ { "label":"F20", "matrix": [1, 1], "x": 0, "y": 1, "w": 1 },
+ { "label":"F21", "matrix": [1, 2], "x": 1, "y": 1, "w": 1 },
+ { "label":"F22", "matrix": [1, 3], "x": 2, "y": 1, "w": 1 },
+ { "label":"F23", "matrix": [1, 4], "x": 3, "y": 1, "w": 1 },
+ { "label":"F24", "matrix": [1, 5], "x": 4, "y": 1, "w": 1 },
+ { "label":"Esc", "matrix": [1, 6], "x": 5.25, "y": 1.25, "w": 1 },
+ { "label":"1", "matrix": [1, 7], "x": 6.25, "y": 1.25, "w": 1 },
+ { "label":"2", "matrix": [1, 8], "x": 7.25, "y": 1.25, "w": 1 },
+ { "label":"3", "matrix": [1, 9], "x": 8.25, "y": 1.25, "w": 1 },
+ { "label":"4", "matrix": [1, 10], "x": 9.25, "y": 1.25, "w": 1 },
+ { "label":"5", "matrix": [6, 6], "x": 10.25, "y": 1.25, "w": 1 },
+ { "label":"6", "matrix": [6, 7], "x": 11.25, "y": 1.25, "w": 1 },
+ { "label":"7", "matrix": [6, 8], "x": 12.25, "y": 1.25, "w": 1 },
+ { "label":"8", "matrix": [6, 9], "x": 13.25, "y": 1.25, "w": 1 },
+ { "label":"9", "matrix": [6, 10], "x": 14.25, "y": 1.25, "w": 1 },
+ { "label":"0", "matrix": [8, 1], "x": 15.25, "y": 1.25, "w": 1 },
+ { "label":"-", "matrix": [8, 2], "x": 16.25, "y": 1.25, "w": 1 },
+ { "label":"=", "matrix": [8, 3], "x": 17.25, "y": 1.25, "w": 1 },
+ { "label":"Delete", "matrix": [8, 4], "x": 18.25, "y": 1.25, "w": 1 },
+ { "label":"Backspace", "matrix": [7, 5], "x": 19.25, "y": 1.25, "w": 1 },
+
+ { "label":"/", "matrix": [2, 1], "x": 0, "y": 2.25, "w": 1 },
+ { "label":"7", "matrix": [2, 2], "x": 1, "y": 2.25, "w": 1 },
+ { "label":"8", "matrix": [2, 3], "x": 2, "y": 2.25, "w": 1 },
+ { "label":"9", "matrix": [2, 4], "x": 3, "y": 2.25, "w": 1 },
+ { "label":"Home", "matrix": [2, 5], "x": 4, "y": 2.25, "w": 1 },
+ { "label":"Tab", "matrix": [2, 6], "x": 5.25, "y": 2.25, "w": 1.5 },
+ { "label":"Q", "matrix": [2, 7], "x": 6.75, "y": 2.25, "w": 1 },
+ { "label":"W", "matrix": [2, 8], "x": 7.75, "y": 2.25, "w": 1 },
+ { "label":"E", "matrix": [2, 9], "x": 8.75, "y": 2.25, "w": 1 },
+ { "label":"R", "matrix": [2, 10], "x": 9.75, "y": 2.25, "w": 1 },
+ { "label":"T", "matrix": [7, 6], "x": 10.75, "y": 2.25, "w": 1 },
+ { "label":"Y", "matrix": [7, 7], "x": 11.75, "y": 2.25, "w": 1 },
+ { "label":"U", "matrix": [7, 8], "x": 12.75, "y": 2.25, "w": 1 },
+ { "label":"I", "matrix": [7, 9], "x": 13.75, "y": 2.25, "w": 1 },
+ { "label":"O", "matrix": [7, 10], "x": 14.75, "y": 2.25, "w": 1 },
+ { "label":"P", "matrix": [9, 1], "x": 15.75, "y": 2.25, "w": 1 },
+ { "label":"[", "matrix": [9, 2], "x": 16.75, "y": 2.25, "w": 1 },
+ { "label":"]", "matrix": [9, 3], "x": 17.75, "y": 2.25, "w": 1 },
+
+ { "label":"*", "matrix": [3, 1], "x": 0, "y": 3.25, "w": 1 },
+ { "label":"4", "matrix": [3, 2], "x": 1, "y": 3.25, "w": 1 },
+ { "label":"5", "matrix": [3, 3], "x": 2, "y": 3.25, "w": 1 },
+ { "label":"6", "matrix": [3, 4], "x": 3, "y": 3.25, "w": 1 },
+ { "label":"End", "matrix": [3, 5], "x": 4, "y": 3.25, "w": 1 },
+ { "label":"Alt", "matrix": [3, 6], "x": 5.25, "y": 3.25, "w": 1.75 },
+ { "label":"A", "matrix": [3, 7], "x": 7, "y": 3.25, "w": 1 },
+ { "label":"S", "matrix": [3, 8], "x": 8, "y": 3.25, "w": 1 },
+ { "label":"D", "matrix": [3, 9], "x": 9, "y": 3.25, "w": 1 },
+ { "label":"F", "matrix": [3, 10], "x": 10, "y": 3.25, "w": 1 },
+ { "label":"G", "matrix": [8, 6], "x": 11, "y": 3.25, "w": 1 },
+ { "label":"H", "matrix": [8, 7], "x": 12, "y": 3.25, "w": 1 },
+ { "label":"J", "matrix": [8, 8], "x": 13, "y": 3.25, "w": 1 },
+ { "label":"K", "matrix": [8, 9], "x": 14, "y": 3.25, "w": 1 },
+ { "label":"L", "matrix": [8, 10], "x": 15, "y": 3.25, "w": 1 },
+ { "label":";", "matrix": [10, 1], "x": 16, "y": 3.25, "w": 1 },
+ { "label":"'", "matrix": [10, 2], "x": 17, "y": 3.25, "w": 1 },
+ { "label":"\\", "matrix": [10, 3], "x": 18, "y": 3.25, "w": 1 },
+ { "label":"Enter", "matrix": [9, 4], "x": 19, "y": 2.25, "w": 1.25, "h": 2 },
+
+ { "label":"-", "matrix": [4, 1], "x": 0, "y": 4.25, "w": 1 },
+ { "label":"1", "matrix": [4, 2], "x": 1, "y": 4.25, "w": 1 },
+ { "label":"2", "matrix": [4, 3], "x": 2, "y": 4.25, "w": 1 },
+ { "label":"3", "matrix": [4, 4], "x": 3, "y": 4.25, "w": 1 },
+ { "label":"Page Up", "matrix": [4, 5], "x": 4, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [4, 6], "x": 5.25, "y": 4.25, "w": 1.25},
+ { "label":"\\", "matrix": [4, 7], "x": 6.5, "y": 4.25, "w": 1 },
+ { "label":"Z", "matrix": [4, 8], "x": 7.5, "y": 4.25, "w": 1 },
+ { "label":"X", "matrix": [4, 9], "x": 8.5, "y": 4.25, "w": 1 },
+ { "label":"C", "matrix": [4, 10], "x": 9.5, "y": 4.25, "w": 1 },
+ { "label":"V", "matrix": [9, 6], "x": 10.5, "y": 4.25, "w": 1 },
+ { "label":"B", "matrix": [9, 7], "x": 11.5, "y": 4.25, "w": 1 },
+ { "label":"N", "matrix": [9, 8], "x": 12.5, "y": 4.25, "w": 1 },
+ { "label":"M", "matrix": [9, 9], "x": 13.5, "y": 4.25, "w": 1 },
+ { "label":",", "matrix": [9, 10], "x": 14.5, "y": 4.25, "w": 1 },
+ { "label":".", "matrix": [10, 4], "x": 15.5, "y": 4.25, "w": 1 },
+ { "label":"/", "matrix": [10, 5], "x": 16.5, "y": 4.25, "w": 1 },
+ { "label":"`", "matrix": [9, 5], "x": 17.5, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [8, 5], "x": 18.5, "y": 4.25, "w": 1.75 },
+
+ { "label":"+", "matrix": [5, 1], "x": 0, "y": 5.25, "w": 1 },
+ { "label":"0", "matrix": [5, 2], "x": 1, "y": 5.25, "w": 1 },
+ { "label":".", "matrix": [5, 3], "x": 2, "y": 5.25, "w": 1 },
+ { "label":"Enter", "matrix": [5, 4], "x": 3, "y": 5.25, "w": 1 },
+ { "label":"Page Down", "matrix": [5, 5], "x": 4, "y": 5.25, "w": 1 },
+ { "label":"Win", "matrix": [6, 1], "x": 5.25, "y": 5.25, "w": 1 },
+ { "label":"Ctrl", "matrix": [6, 2], "x": 6.25, "y": 5.25, "w": 1 },
+ { "label":"Print", "matrix": [6, 3], "x": 7.25, "y": 5.25, "w": 1 },
+ { "label":"Muhenkan", "matrix": [6, 4], "x": 8.25, "y": 5.25, "w": 1 },
+ { "label":"Space", "matrix": [6, 5], "x": 9.25, "y": 5.25, "w": 6 },
+ { "label":"Henkan", "matrix": [10, 6], "x": 15.25, "y": 5.25, "w": 1 },
+ { "label":"Left", "matrix": [10, 7], "x": 16.25, "y": 5.25, "w": 1 },
+ { "label":"Up", "matrix": [10, 8], "x": 17.25, "y": 5.25, "w": 1 },
+ { "label":"Down", "matrix": [10, 9], "x": 18.25, "y": 5.25, "w": 1 },
+ { "label":"Right", "matrix": [10, 10], "x": 19.25, "y": 5.25, "w": 1 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/varanidae/keymaps/ansi/keymap.c b/keyboards/varanidae/keymaps/ansi/keymap.c
new file mode 100644
index 00000000000..c020bd67188
--- /dev/null
+++ b/keyboards/varanidae/keymaps/ansi/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, 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_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, 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_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, 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_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, 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_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/ansi/rules.mk b/keyboards/varanidae/keymaps/ansi/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/varanidae/keymaps/ansi/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/keymaps/ansi_split_bs_rshift/keymap.c b/keyboards/varanidae/keymaps/ansi_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..becb8120711
--- /dev/null
+++ b/keyboards/varanidae/keymaps/ansi_split_bs_rshift/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi_split_bs_rshift(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, 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_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, 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_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, 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_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_GRV, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/ansi_split_bs_rshift/rules.mk b/keyboards/varanidae/keymaps/ansi_split_bs_rshift/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/varanidae/keymaps/ansi_split_bs_rshift/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/keymaps/default/keymap.c b/keyboards/varanidae/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4c43532108b
--- /dev/null
+++ b/keyboards/varanidae/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, 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_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, 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_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, 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_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, 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_GRV, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/default/rules.mk b/keyboards/varanidae/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/varanidae/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/keymaps/iso/keymap.c b/keyboards/varanidae/keymaps/iso/keymap.c
new file mode 100644
index 00000000000..b1f1b0c9a4d
--- /dev/null
+++ b/keyboards/varanidae/keymaps/iso/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_iso(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, 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_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, 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_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, 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_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/iso/rules.mk b/keyboards/varanidae/keymaps/iso/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/varanidae/keymaps/iso/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/keymaps/iso_split_bs_rshift/keymap.c b/keyboards/varanidae/keymaps/iso_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..7324f628772
--- /dev/null
+++ b/keyboards/varanidae/keymaps/iso_split_bs_rshift/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_iso_split_bs_rshift(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, 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_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, 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_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, 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_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, 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_GRV, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/iso_split_bs_rshift/rules.mk b/keyboards/varanidae/keymaps/iso_split_bs_rshift/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/varanidae/keymaps/iso_split_bs_rshift/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/keymaps/via/keymap.c b/keyboards/varanidae/keymaps/via/keymap.c
new file mode 100644
index 00000000000..20e942e455a
--- /dev/null
+++ b/keyboards/varanidae/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, 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_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, 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_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
+ KC_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, 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_GRV, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/via/rules.mk b/keyboards/varanidae/keymaps/via/rules.mk
new file mode 100644
index 00000000000..f1adcab005e
--- /dev/null
+++ b/keyboards/varanidae/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/readme.md b/keyboards/varanidae/readme.md
new file mode 100644
index 00000000000..fbaaa77d640
--- /dev/null
+++ b/keyboards/varanidae/readme.md
@@ -0,0 +1,24 @@
+# Varanidae
+
+
+
+Varanidae the left-side pad 110 keys keyboard for creators powered by Elite-C.
+
+* Keyboard Maintainer: [Silc Renew](https://github.com/TokageItLab)
+* Hardware Supported: Varanidae
+* Hardware Availability: [TokageItLab / Varanidae](https://github.com/TokageItLab/Varanidae)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make varanidae:default
+ make varanidae:via
+
+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 switch at (0,0) in the matrix (usually the encoder push switch) and plug in the keyboard
+* **Physical reset button**: Briefly press the reset switch on the Elite-C
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/varanidae/rules.mk b/keyboards/varanidae/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/varanidae/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/viktus/styrka_topre/ec.c b/keyboards/viktus/styrka_topre/ec.c
new file mode 100644
index 00000000000..c9980461afb
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/ec.c
@@ -0,0 +1,191 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "ec.h"
+
+#include "quantum.h"
+#include "analog.h"
+//#include "debug.h"
+
+// sensing channel definitions
+#define A0 0
+#define A1 1
+#define A2 2
+#define A3 3
+#define A4 4
+#define A5 5
+#define A6 6
+#define A7 7
+
+// analog connection settings
+#define DISCHARGE_PIN D3
+#define ANALOG_PORT D4
+
+#ifndef MUX_SEL_PIN
+# define MUX_SEL_PINS \
+ { D0, D1, D2 }
+#endif
+
+// pin connections
+const uint8_t row_channels[] = MATRIX_ROW_PINS;
+const uint8_t col_pins[] = MATRIX_COL_PINS;
+const uint8_t mux_sel_pins[] = MUX_SEL_PINS;
+
+_Static_assert(sizeof(mux_sel_pins) == 3, "invalid MUX_SEL_PINS");
+
+static ec_config_t config;
+static uint16_t ec_sw_value[MATRIX_COLS][MATRIX_ROWS];
+
+static inline void discharge_capacitor(void) { setPinOutput(DISCHARGE_PIN); }
+static inline void charge_capacitor(uint8_t col) {
+ setPinInput(DISCHARGE_PIN);
+ writePinHigh(col_pins[col]);
+}
+
+static inline void clear_all_col_pins(void) {
+ for (int col = 0; col < sizeof(col_pins); col++) {
+ writePinLow(col_pins[col]);
+ }
+}
+
+void init_mux_sel(void) {
+ for (int idx = 0; idx < sizeof(mux_sel_pins); idx++) {
+ setPinOutput(mux_sel_pins[idx]);
+ }
+}
+
+void select_mux(uint8_t row) {
+ uint8_t ch = row_channels[row];
+ writePin(mux_sel_pins[0], ch & 1);
+ writePin(mux_sel_pins[1], ch & 2);
+ writePin(mux_sel_pins[2], ch & 4);
+}
+
+void init_col(void) {
+ for (int idx = 0; idx < sizeof(col_pins); idx++) {
+ setPinOutput(col_pins[idx]);
+ writePinLow(col_pins[idx]);
+ }
+}
+
+void ec_init(ec_config_t const* const ec_config) {
+ // save config
+ config = *ec_config;
+
+ // initialize discharge pin as discharge mode
+ writePinLow(DISCHARGE_PIN);
+ setPinOutput(DISCHARGE_PIN);
+
+ // set analog reference
+ analogReference(ADC_REF_POWER);
+
+ // initialize drive lines
+ init_col();
+
+ // initialize multiplexer select pin
+ init_mux_sel();
+
+ // set discharge pin to charge mode
+ setPinInput(DISCHARGE_PIN);
+}
+
+uint16_t ec_readkey_raw(uint8_t col, uint8_t row) {
+ uint16_t sw_value = 0;
+
+ discharge_capacitor();
+
+ select_mux(row);
+
+ clear_all_col_pins();
+
+ cli();
+
+ charge_capacitor(col);
+
+ sw_value = analogReadPin(ANALOG_PORT);
+
+ sei();
+
+ return sw_value;
+}
+
+bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt) {
+ bool current_state = (*current_row >> col) & 1;
+
+ // press to release
+ if (current_state && sw_value < reset_pt) {
+ *current_row &= ~(MATRIX_ROW_SHIFTER << col);
+ return true;
+ }
+
+ // release to press
+ if ((!current_state) && sw_value > actuation_pt) {
+ *current_row |= (MATRIX_ROW_SHIFTER << col);
+ return true;
+ }
+
+ return false;
+}
+
+bool ec_matrix_scan(matrix_row_t current_matrix[]) {
+ bool updated = false;
+
+ for (int row = 0; row < sizeof(row_channels); row++) {
+ for (int col = 0; col < sizeof(col_pins); col++) {
+ uint16_t reset_pt = config.reset_pt;
+ uint16_t actuation_pt = config.actuation_pt;
+
+ switch(row) {
+ case 0:
+ switch(col) {
+ case 15: // lower threshold for split backspace:
+ case 16: // lower threshold for 2U backspace: 2U(37 rest, 62 btm)
+ reset_pt = 45;
+ actuation_pt = 50;
+ break;
+ }
+ break;
+ case 4:
+ switch(col) {
+ case 8: // Lower threshold for spacebar: 7U(37 rest, 63 btm)
+ reset_pt = 55;
+ actuation_pt = 60;
+ break;
+ case 13: // Lower threshold for right bottom mods: 1.5U(40 rest, 65 btm)
+ reset_pt = 47;
+ actuation_pt = 53;
+ break;
+ }
+ break;
+ }
+
+ ec_sw_value[col][row] = ec_readkey_raw(col, row);
+ updated |= ec_update_key(¤t_matrix[row], col, ec_sw_value[col][row], reset_pt, actuation_pt);
+ }
+ }
+
+ return updated;
+}
+
+// console debugging for pad values
+/*void ec_dprint_matrix(void) {
+ for (int row = 0; row < sizeof(row_channels); row++) {
+ for (int col = 0; col < sizeof(col_pins); col++) {
+ dprintf("%5d", ec_sw_value[col][row]);
+ }
+ dprintf("\n");
+ }
+}*/
diff --git a/keyboards/viktus/styrka_topre/ec.h b/keyboards/viktus/styrka_topre/ec.h
new file mode 100644
index 00000000000..ace8d092b5f
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/ec.h
@@ -0,0 +1,31 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+
+#include "matrix.h"
+
+typedef struct {
+ uint16_t reset_pt;
+ uint16_t actuation_pt;
+} ec_config_t;
+
+void ec_init(ec_config_t const* const ec_config);
+bool ec_matrix_scan(matrix_row_t current_matrix[]);
+//void ec_dprint_matrix(void);
+uint16_t ec_readkey_raw(uint8_t col, uint8_t row);
+bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt);
diff --git a/keyboards/viktus/styrka_topre/info.json b/keyboards/viktus/styrka_topre/info.json
new file mode 100644
index 00000000000..f6d3560985f
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/info.json
@@ -0,0 +1,438 @@
+{
+ "manufacturer": "Viktus Design LLC",
+ "keyboard_name": "Viktus Styrka - Topre",
+ "maintainer": "BlindAssassin111",
+ "url": "https://viktus.design",
+ "usb": {
+ "device_version": "1.3.0",
+ "vid": "0x5644",
+ "pid": "0x5354"
+ },
+ "bootloader": "atmel-dfu",
+ "processor": "atmega32u4",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["B5", "B4", "D7", "D6", "F6", "F5", "F4", "C7", "C6", "B6", "F7", "B1", "B2", "B3", "B7", "F1", "F0", "E6"],
+ "rows": ["A7", "A6", "A4", "A5", "A3"]
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "K002", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "K003", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "K004", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "K005", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "K006", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "K007", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "K008", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "K009", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "K00A", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "K00B", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "K00C", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "K00D", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "K00E", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "K00F", "matrix": [0, 15], "x": 15, "y": 0},
+ {"label": "K010", "matrix": [0, 16], "x": 16, "y": 0},
+ {"label": "K011", "matrix": [0, 17], "x": 17, "y": 0},
+ {"label": "K100", "matrix": [1, 0], "x": 18, "y": 0},
+ {"label": "K101", "matrix": [1, 1], "x": 19, "y": 0},
+ {"label": "K102", "matrix": [1, 2], "x": 20, "y": 0},
+ {"label": "K103", "matrix": [1, 3], "x": 21, "y": 0},
+ {"label": "K104", "matrix": [1, 4], "x": 22, "y": 0},
+ {"label": "K105", "matrix": [1, 5], "x": 23, "y": 0},
+ {"label": "K106", "matrix": [1, 6], "x": 24, "y": 0},
+ {"label": "K107", "matrix": [1, 7], "x": 25, "y": 0},
+ {"label": "K108", "matrix": [1, 8], "x": 26, "y": 0},
+ {"label": "K109", "matrix": [1, 9], "x": 27, "y": 0},
+ {"label": "K10A", "matrix": [1, 10], "x": 28, "y": 0},
+ {"label": "K10B", "matrix": [1, 11], "x": 29, "y": 0},
+ {"label": "K10C", "matrix": [1, 12], "x": 30, "y": 0},
+ {"label": "K10D", "matrix": [1, 13], "x": 31, "y": 0},
+ {"label": "K10E", "matrix": [1, 14], "x": 32, "y": 0},
+ {"label": "K110", "matrix": [1, 16], "x": 33, "y": 0},
+ {"label": "K111", "matrix": [1, 17], "x": 34, "y": 0},
+ {"label": "K200", "matrix": [2, 0], "x": 35, "y": 0},
+ {"label": "K201", "matrix": [2, 1], "x": 36, "y": 0},
+ {"label": "K202", "matrix": [2, 2], "x": 37, "y": 0},
+ {"label": "K203", "matrix": [2, 3], "x": 38, "y": 0},
+ {"label": "K204", "matrix": [2, 4], "x": 39, "y": 0},
+ {"label": "K205", "matrix": [2, 5], "x": 40, "y": 0},
+ {"label": "K206", "matrix": [2, 6], "x": 41, "y": 0},
+ {"label": "K207", "matrix": [2, 7], "x": 42, "y": 0},
+ {"label": "K208", "matrix": [2, 8], "x": 43, "y": 0},
+ {"label": "K209", "matrix": [2, 9], "x": 44, "y": 0},
+ {"label": "K20A", "matrix": [2, 10], "x": 45, "y": 0},
+ {"label": "K20B", "matrix": [2, 11], "x": 46, "y": 0},
+ {"label": "K20C", "matrix": [2, 12], "x": 47, "y": 0},
+ {"label": "K20D", "matrix": [2, 13], "x": 48, "y": 0},
+ {"label": "K20F", "matrix": [2, 15], "x": 49, "y": 0},
+ {"label": "K211", "matrix": [2, 17], "x": 50, "y": 0},
+ {"label": "K300", "matrix": [3, 0], "x": 51, "y": 0},
+ {"label": "K301", "matrix": [3, 1], "x": 52, "y": 0},
+ {"label": "K302", "matrix": [3, 2], "x": 53, "y": 0},
+ {"label": "K304", "matrix": [3, 4], "x": 54, "y": 0},
+ {"label": "K305", "matrix": [3, 5], "x": 55, "y": 0},
+ {"label": "K306", "matrix": [3, 6], "x": 56, "y": 0},
+ {"label": "K307", "matrix": [3, 7], "x": 57, "y": 0},
+ {"label": "K308", "matrix": [3, 8], "x": 58, "y": 0},
+ {"label": "K309", "matrix": [3, 9], "x": 59, "y": 0},
+ {"label": "K30A", "matrix": [3, 10], "x": 60, "y": 0},
+ {"label": "K30B", "matrix": [3, 11], "x": 61, "y": 0},
+ {"label": "K30C", "matrix": [3, 12], "x": 62, "y": 0},
+ {"label": "K30D", "matrix": [3, 13], "x": 63, "y": 0},
+ {"label": "K30E", "matrix": [3, 14], "x": 64, "y": 0},
+ {"label": "K310", "matrix": [3, 16], "x": 65, "y": 0},
+ {"label": "K311", "matrix": [3, 17], "x": 66, "y": 0},
+ {"label": "K400", "matrix": [4, 0], "x": 67, "y": 0},
+ {"label": "K401", "matrix": [4, 1], "x": 68, "y": 0},
+ {"label": "K402", "matrix": [4, 2], "x": 69, "y": 0},
+ {"label": "K403", "matrix": [4, 3], "x": 70, "y": 0},
+ {"label": "K404", "matrix": [4, 4], "x": 71, "y": 0},
+ {"label": "K408", "matrix": [4, 8], "x": 72, "y": 0},
+ {"label": "K40C", "matrix": [4, 12], "x": 73, "y": 0},
+ {"label": "K40D", "matrix": [4, 13], "x": 74, "y": 0},
+ {"label": "K40E", "matrix": [4, 14], "x": 75, "y": 0},
+ {"label": "K410", "matrix": [4, 16], "x": 76, "y": 0},
+ {"label": "K411", "matrix": [4, 17], "x": 77, "y": 0}
+ ]
+ },
+ "LAYOUT_2u_6u": {
+ "layout": [
+ {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
+ {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
+ {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
+ {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
+ {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
+ {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
+ {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
+ {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
+ {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
+ {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
+ {"label": "K010", "matrix": [0, 16], "x": 15.25, "y": 0, "w": 2},
+ {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
+ {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
+ {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
+ {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
+ {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
+ {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
+ {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
+ {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
+ {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
+ {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
+ {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
+ {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
+ {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
+ {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
+ {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
+ {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
+ {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
+ {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
+ {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
+ {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
+ {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
+ {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
+ {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
+ {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
+ {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
+ {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
+ {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
+ {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
+ {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
+ {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
+ {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
+ {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
+ {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
+ {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
+ {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
+ {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
+ {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
+ {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
+ {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
+ {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
+ {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
+ {"label": "K403", "matrix": [4, 3], "x": 3.5, "y": 4, "w": 1.25},
+ {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.25},
+ {"label": "K408", "matrix": [4, 8], "x": 6, "y": 4, "w": 6.25},
+ {"label": "K40C", "matrix": [4, 12], "x": 12.25, "y": 4},
+ {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
+ {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
+ {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
+ ]
+ },
+ "LAYOUT_2u_7u": {
+ "layout": [
+ {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
+ {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
+ {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
+ {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
+ {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
+ {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
+ {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
+ {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
+ {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
+ {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
+ {"label": "K010", "matrix": [0, 16], "x": 15.25, "y": 0, "w": 2},
+ {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
+ {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
+ {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
+ {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
+ {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
+ {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
+ {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
+ {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
+ {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
+ {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
+ {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
+ {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
+ {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
+ {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
+ {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
+ {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
+ {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
+ {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
+ {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
+ {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
+ {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
+ {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
+ {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
+ {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
+ {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
+ {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
+ {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
+ {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
+ {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
+ {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
+ {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
+ {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
+ {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
+ {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
+ {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
+ {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
+ {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
+ {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
+ {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
+ {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
+ {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"label": "K403", "matrix": [4, 3], "x": 3.75, "y": 4},
+ {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
+ {"label": "K408", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
+ {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
+ {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
+ {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
+ ]
+ },
+
+ "LAYOUT_split_6u": {
+ "layout": [
+ {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
+ {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
+ {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
+ {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
+ {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
+ {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
+ {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
+ {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
+ {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
+ {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
+ {"label": "K00F", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "K010", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
+ {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
+ {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
+ {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
+ {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
+ {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
+ {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
+ {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
+ {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
+ {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
+ {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
+ {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
+ {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
+ {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
+ {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
+ {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
+ {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
+ {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
+ {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
+ {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
+ {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
+ {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
+ {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
+ {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
+ {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
+ {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
+ {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
+ {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
+ {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
+ {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
+ {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
+ {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
+ {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
+ {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
+ {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
+ {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
+ {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
+ {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
+ {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
+ {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
+ {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
+ {"label": "K403", "matrix": [4, 3], "x": 3.5, "y": 4, "w": 1.25},
+ {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.25},
+ {"label": "K408", "matrix": [4, 8], "x": 6, "y": 4, "w": 6.25},
+ {"label": "K40C", "matrix": [4, 12], "x": 12.25, "y": 4},
+ {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
+ {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
+ {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
+ ]
+ },
+ "LAYOUT_split_7u": {
+ "layout": [
+ {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
+ {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
+ {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
+ {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
+ {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
+ {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
+ {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
+ {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
+ {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
+ {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
+ {"label": "K00F", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "K010", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
+ {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
+ {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
+ {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
+ {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
+ {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
+ {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
+ {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
+ {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
+ {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
+ {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
+ {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
+ {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
+ {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
+ {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
+ {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
+ {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
+ {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
+ {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
+ {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
+ {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
+ {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
+ {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
+ {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
+ {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
+ {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
+ {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
+ {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
+ {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
+ {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
+ {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
+ {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
+ {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
+ {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
+ {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
+ {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
+ {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
+ {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
+ {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
+ {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
+ {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"label": "K403", "matrix": [4, 3], "x": 3.75, "y": 4},
+ {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
+ {"label": "K408", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
+ {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
+ {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
+ {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/viktus/styrka_topre/keymaps/default/keymap.c b/keyboards/viktus/styrka_topre/keymaps/default/keymap.c
new file mode 100644
index 00000000000..5c3f8fa0310
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_2u_7u(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ )
+};
diff --git a/keyboards/viktus/styrka_topre/keymaps/via/keymap.c b/keyboards/viktus/styrka_topre/keymaps/via/keymap.c
new file mode 100644
index 00000000000..5c3f8fa0310
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_2u_7u(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ )
+};
diff --git a/keyboards/viktus/styrka_topre/keymaps/via/rules.mk b/keyboards/viktus/styrka_topre/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/viktus/styrka_topre/readme.md b/keyboards/viktus/styrka_topre/readme.md
new file mode 100644
index 00000000000..20c9aedb5cc
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/readme.md
@@ -0,0 +1,27 @@
+# Styrka - Topre
+
+
+
+A topre PCB for the Viktus Styrka
+
+- Keyboard Maintainer: BlindAssassin111
+- Hardware Supported: Styrka Topre PCB
+- Hardware Availability: Viktus Design LLC
+
+Make example for this keyboard (after setting up your build environment):
+
+ make viktus/styrka_topre:default
+
+Flashing example for this keyboard:
+
+ make viktus/styrka_topre: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/viktus/styrka_topre/rules.mk b/keyboards/viktus/styrka_topre/rules.mk
new file mode 100644
index 00000000000..037e26c530c
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/rules.mk
@@ -0,0 +1,3 @@
+CUSTOM_MATRIX = lite
+QUANTUM_LIB_SRC += analog.c
+SRC += ec.c
diff --git a/keyboards/viktus/styrka_topre/styrka_topre.c b/keyboards/viktus/styrka_topre/styrka_topre.c
new file mode 100644
index 00000000000..96b04090cf6
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/styrka_topre.c
@@ -0,0 +1,49 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+#include "ec.h"
+#include "matrix.h"
+//#include "debug.h" // needed for debugging
+
+#define RESET_PT 55
+#define ACTUATION_PT 65
+
+// console debugging for pad values
+/*void keyboard_post_init_kb() {
+ debug_enable = true;
+ debug_matrix = true;
+}*/
+
+void matrix_init_custom(void) {
+ ec_config_t ec_config = {.reset_pt = RESET_PT, .actuation_pt = ACTUATION_PT};
+
+ ec_init(&ec_config);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool updated = ec_matrix_scan(current_matrix);
+
+ // console debugging for pad values
+ /*static int cnt = 0;
+ if (cnt++ == 300) {
+ cnt = 0;
+ ec_dprint_matrix();
+ dprintf("\n");
+ }*/
+
+ return updated;
+}
diff --git a/keyboards/winry/winry25tc/config.h b/keyboards/winry/winry25tc/config.h
index 98c540c876a..e668a852182 100644
--- a/keyboards/winry/winry25tc/config.h
+++ b/keyboards/winry/winry25tc/config.h
@@ -20,3 +20,5 @@
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
+
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
diff --git a/keyboards/winry/winry25tc/keymaps/lightsout/keymap.c b/keyboards/winry/winry25tc/keymaps/lightsout/keymap.c
new file mode 100644
index 00000000000..f175f36b91e
--- /dev/null
+++ b/keyboards/winry/winry25tc/keymaps/lightsout/keymap.c
@@ -0,0 +1,136 @@
+/* Copyright 2023 Tom Parker-Shemilt
+ *
+ * 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, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+// Exact keymap is irrelevant as we're using rows/cols
+// but we need _something_ set so we're using no-ops
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )};
+
+bool tiles[5][5] = {
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+};
+
+/* Because snake pattern of leds */
+const uint8_t remap[25] = {
+ 20,21,22,23,24,
+ 19,6,7,8,9,
+ 18,5,0,1,10,
+ 17,4,3,2,11,
+ 16,15,14,13,12,
+};
+
+// clang-format on
+
+bool is_blank(void) {
+ for (uint8_t y = 0; y < 5; y++) {
+ for (uint8_t x = 0; x < 5; x++) {
+ if (tiles[x][y]) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+void do_move(uint8_t x, uint8_t y) {
+ tiles[x][y] ^= true;
+ if (x > 0) {
+ tiles[x - 1][y] ^= true;
+ }
+ if (y > 0) {
+ tiles[x][y - 1] ^= true;
+ }
+ if (x < 4) {
+ tiles[x + 1][y] ^= true;
+ }
+ if (y < 4) {
+ tiles[x][y + 1] ^= true;
+ }
+}
+
+void refresh_leds(void) {
+ for (uint8_t y = 0; y < 5; y++) {
+ for (uint8_t x = 0; x < 5; x++) {
+ uint8_t tile = tiles[x][y];
+ uint8_t index = (y * 5) + x;
+ if (tile) {
+ setrgb(RGB_RED, &led[remap[index]]);
+ } else {
+ setrgb(RGB_WHITE, &led[remap[index]]);
+ }
+ }
+ }
+ rgblight_set();
+}
+
+uint8_t initial_moves = 1;
+
+void start_game(void) {
+ rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
+ srand(timer_read32());
+ while (true) {
+ for (uint8_t i = 0; i < initial_moves; i++) {
+ do_move(rand() % 5, rand() % 5);
+ }
+ if (!is_blank()) {
+ // Catch the "we picked the same location 2*N times" case
+ break;
+ }
+ }
+ refresh_leds();
+}
+
+void keyboard_post_init_user(void) {
+ rgblight_enable_noeeprom();
+ start_game();
+}
+
+bool won = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ if (won) {
+ initial_moves++;
+ won = false;
+ start_game();
+ } else {
+ uint8_t x = record->event.key.col;
+ uint8_t y = record->event.key.row;
+ do_move(x, y);
+ if (is_blank()) {
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL);
+ won = true;
+ }
+ }
+ }
+ refresh_leds();
+ return true;
+}
diff --git a/keyboards/winry/winry25tc/keymaps/lightsout/readme.md b/keyboards/winry/winry25tc/keymaps/lightsout/readme.md
new file mode 100644
index 00000000000..4271bff43fd
--- /dev/null
+++ b/keyboards/winry/winry25tc/keymaps/lightsout/readme.md
@@ -0,0 +1,3 @@
+# Lights Out game
+
+Implements a "lights out" mode as per https://en.m.wikipedia.org/wiki/Lights_Out_(game) with a single move having been played on start. On completion of the game, the Rainbow Swirl pattern is displayed. If another key is then pressed, the game resets, with the initial number of moves incremented by one.
diff --git a/keyboards/wolf/neely65/info.json b/keyboards/wolf/neely65/info.json
new file mode 100644
index 00000000000..5535036f376
--- /dev/null
+++ b/keyboards/wolf/neely65/info.json
@@ -0,0 +1,108 @@
+{
+ "manufacturer": "Neely",
+ "keyboard_name": "Neely65",
+ "maintainer": "ToastyStoemp",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B7", "B3", "E6", "F0", "F1", "F4", "F5", "F6", "F7", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4"],
+ "rows": ["D5", "D3", "D2", "D1", "D0"]
+ },
+ "processor": "atmega32u4",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0071",
+ "vid": "0x5453"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "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 },
+ { "matrix": [0, 14], "x": 14.5, "y": 0 },
+ { "matrix": [0, 15], "x": 15.5, "y": 0 },
+ { "matrix": [2, 14], "x": 16.5, "y": 0 },
+ { "matrix": [0, 16], "x": 17.5, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "w": 1.5, "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 4, "y": 1 },
+ { "matrix": [1, 4], "x": 5, "y": 1 },
+ { "matrix": [1, 5], "x": 6, "y": 1 },
+ { "matrix": [1, 6], "x": 7, "y": 1 },
+ { "matrix": [1, 7], "x": 8, "y": 1 },
+ { "matrix": [1, 8], "x": 9, "y": 1 },
+ { "matrix": [1, 9], "x": 10, "y": 1 },
+ { "matrix": [1, 10], "x": 11, "y": 1 },
+ { "matrix": [1, 11], "x": 12, "y": 1 },
+ { "matrix": [1, 12], "x": 13, "y": 1 },
+ { "matrix": [1, 13], "x": 14, "y": 1 },
+ { "matrix": [1, 14], "x": 15, "y": 1 },
+ { "matrix": [1, 15], "w": 1.5, "x": 16, "y": 1 },
+ { "matrix": [1, 16], "x": 17.5, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "w": 1.75, "x": 2.5, "y": 2 },
+ { "matrix": [2, 3], "x": 4.25, "y": 2 },
+ { "matrix": [2, 4], "x": 5.25, "y": 2 },
+ { "matrix": [2, 5], "x": 6.25, "y": 2 },
+ { "matrix": [2, 6], "x": 7.25, "y": 2 },
+ { "matrix": [2, 7], "x": 8.25, "y": 2 },
+ { "matrix": [2, 8], "x": 9.25, "y": 2 },
+ { "matrix": [2, 9], "x": 10.25, "y": 2 },
+ { "matrix": [2, 10], "x": 11.25, "y": 2 },
+ { "matrix": [2, 11], "x": 12.25, "y": 2 },
+ { "matrix": [2, 12], "x": 13.25, "y": 2 },
+ { "matrix": [2, 13], "x": 14.25, "y": 2 },
+ { "matrix": [2, 15], "w": 2.25, "x": 15.25, "y": 2 },
+ { "matrix": [2, 16], "x": 17.5, "y": 2 },
+ { "matrix": [3, 0], "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1, "y": 3 },
+ { "matrix": [3, 2], "w": 2.25, "x": 2.5, "y": 3 },
+ { "matrix": [3, 3], "x": 4.75, "y": 3 },
+ { "matrix": [3, 4], "x": 5.75, "y": 3 },
+ { "matrix": [3, 5], "x": 6.75, "y": 3 },
+ { "matrix": [3, 6], "x": 7.75, "y": 3 },
+ { "matrix": [3, 7], "x": 8.75, "y": 3 },
+ { "matrix": [3, 8], "x": 9.75, "y": 3 },
+ { "matrix": [3, 9], "x": 10.75, "y": 3 },
+ { "matrix": [3, 10], "x": 11.75, "y": 3 },
+ { "matrix": [3, 11], "x": 12.75, "y": 3 },
+ { "matrix": [3, 12], "x": 13.75, "y": 3 },
+ { "matrix": [3, 14], "w": 1.75, "x": 14.75, "y": 3 },
+ { "matrix": [3, 15], "x": 16.5, "y": 3 },
+ { "matrix": [3, 16], "x": 17.5, "y": 3 },
+ { "matrix": [4, 0], "x": 0, "y": 4 },
+ { "matrix": [4, 1], "x": 1, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 1.5, "x": 4.75, "y": 4 },
+ { "matrix": [4, 7], "w": 7, "x": 6.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.5, "x": 13.25, "y": 4 },
+ { "matrix": [4, 14], "x": 15.5, "y": 4 },
+ { "matrix": [4, 15], "x": 16.5, "y": 4 },
+ { "matrix": [4, 16], "x": 17.5, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/wolf/neely65/keymaps/default/keymap.c b/keyboards/wolf/neely65/keymaps/default/keymap.c
new file mode 100644
index 00000000000..3e1350a75e7
--- /dev/null
+++ b/keyboards/wolf/neely65/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 contact@vwolf.be
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F1, KC_F2,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F3, KC_F4,
+ 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_DEL, KC_ENT, KC_PGDN, KC_F5, KC_F6,
+ 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_END, KC_F7, KC_F8,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_APP, KC_F9, KC_F10
+ ),
+
+ [1] = 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, KC_F12, KC_DEL, KC_AUDIO_VOL_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_VOL_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_NEXT_TRACK, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_MUTE, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/wolf/neely65/keymaps/via/keymap.c b/keyboards/wolf/neely65/keymaps/via/keymap.c
new file mode 100644
index 00000000000..3e1350a75e7
--- /dev/null
+++ b/keyboards/wolf/neely65/keymaps/via/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 contact@vwolf.be
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F1, KC_F2,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F3, KC_F4,
+ 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_DEL, KC_ENT, KC_PGDN, KC_F5, KC_F6,
+ 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_END, KC_F7, KC_F8,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_APP, KC_F9, KC_F10
+ ),
+
+ [1] = 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, KC_F12, KC_DEL, KC_AUDIO_VOL_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_VOL_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_NEXT_TRACK, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_MUTE, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/wolf/neely65/keymaps/via/rules.mk b/keyboards/wolf/neely65/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/wolf/neely65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/wolf/neely65/readme.md b/keyboards/wolf/neely65/readme.md
new file mode 100644
index 00000000000..52865bfb116
--- /dev/null
+++ b/keyboards/wolf/neely65/readme.md
@@ -0,0 +1,23 @@
+# Neely65
+
+
+
+The following is the QMK Firmware for the Neely65 PCB.
+
+* Keyboard Maintainer: [Wolf](https://github.com/ToastyStoemp)
+* Hardware Supported: Neely65 PCB only
+* Hardware Availability: Private Run
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wolf/neely65:default
+
+Flashing example for this keyboard:
+
+ make wolf/neely65:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader Enter the bootloader in 2 ways:
+* **Bootmagic reset**: Hold down the key ESC key and plug in the keyboard (Top Left most switch)
+* **Physical reset button**: Briefly press the button on the back of the PCB
diff --git a/keyboards/wolf/neely65/rules.mk b/keyboards/wolf/neely65/rules.mk
new file mode 100644
index 00000000000..3437a35bdf1
--- /dev/null
+++ b/keyboards/wolf/neely65/rules.mk
@@ -0,0 +1,2 @@
+# Processor frequency
+F_CPU = 8000000
diff --git a/keyboards/wolf/silhouette/info.json b/keyboards/wolf/silhouette/info.json
new file mode 100644
index 00000000000..fa52666b2a0
--- /dev/null
+++ b/keyboards/wolf/silhouette/info.json
@@ -0,0 +1,110 @@
+{
+ "manufacturer": "4GT",
+ "keyboard_name": "Silhouette",
+ "maintainer": "ToastyStoemp",
+ "bootloader": "custom",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "GP12"
+ },
+ "matrix_pins": {
+ "cols": ["GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18", "GP11", "GP17", "GP16", "GP7", "GP6", "GP5", "GP4", "GP2", "GP1", "GP0"],
+ "rows": ["GP27", "GP26", "GP25", "GP13", "GP3"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0080",
+ "vid": "0x5453"
+ },
+ "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": [2, 14], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 19.5, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 16.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 },
+ { "matrix": [4, 14], "x": 15.25, "y": 4 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4 },
+ { "matrix": [4, 16], "x": 17.25, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/wolf/silhouette/keymaps/default/keymap.c b/keyboards/wolf/silhouette/keymaps/default/keymap.c
new file mode 100644
index 00000000000..9a5e5b24d76
--- /dev/null
+++ b/keyboards/wolf/silhouette/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 contact@vwolf.be
+// 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_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = 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, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/wolf/silhouette/keymaps/via/keymap.c b/keyboards/wolf/silhouette/keymaps/via/keymap.c
new file mode 100644
index 00000000000..9a5e5b24d76
--- /dev/null
+++ b/keyboards/wolf/silhouette/keymaps/via/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 contact@vwolf.be
+// 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_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = 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, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/wolf/silhouette/keymaps/via/rules.mk b/keyboards/wolf/silhouette/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/wolf/silhouette/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/wolf/silhouette/readme.md b/keyboards/wolf/silhouette/readme.md
new file mode 100644
index 00000000000..920de93c413
--- /dev/null
+++ b/keyboards/wolf/silhouette/readme.md
@@ -0,0 +1,23 @@
+# Silhouette
+
+
+
+The following is the QMK Firmware for the Silhouette PCB.
+
+* Keyboard Maintainer: [Wolf](https://github.com/ToastyStoemp)
+* Hardware Supported: Silhouette PCB
+* Hardware Availability: https://beacons.ai/chamchi
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wolf/silhouette:default
+
+Flashing example for this keyboard:
+
+ make wolf/silhouette: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 ESC key and plug in the keyboard (Top Left most switch)
diff --git a/keyboards/wolf/silhouette/rules.mk b/keyboards/wolf/silhouette/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/wolf/ziggurat/info.json b/keyboards/wolf/ziggurat/info.json
new file mode 100644
index 00000000000..2e8d39dacba
--- /dev/null
+++ b/keyboards/wolf/ziggurat/info.json
@@ -0,0 +1,111 @@
+{
+ "manufacturer": "Laminar",
+ "keyboard_name": "Ziggurat",
+ "maintainer": "ToastyStoemp",
+ "bootloader": "custom",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP27", "GP28", "GP29", "GP0", "GP1", "GP2", "GP3", "GP4", "GP5"],
+ "rows": ["GP11", "GP10", "GP7", "GP6", "GP23", "GP24", "GP25", "GP26", "GP19", "GP18"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0084",
+ "vid": "0x5453"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [1, 0], "x": 1, "y": 0 },
+ { "matrix": [0, 1], "x": 2.25, "y": 0 },
+ { "matrix": [1, 1], "x": 3.25, "y": 0 },
+ { "matrix": [0, 2], "x": 4.25, "y": 0 },
+ { "matrix": [1, 2], "x": 5.25, "y": 0 },
+ { "matrix": [0, 3], "x": 6.25, "y": 0 },
+ { "matrix": [1, 3], "x": 7.25, "y": 0 },
+ { "matrix": [0, 4], "x": 8.25, "y": 0 },
+ { "matrix": [1, 4], "x": 9.25, "y": 0 },
+ { "matrix": [0, 5], "x": 10.25, "y": 0 },
+ { "matrix": [1, 5], "x": 11.25, "y": 0 },
+ { "matrix": [0, 6], "x": 12.25, "y": 0 },
+ { "matrix": [1, 6], "x": 13.25, "y": 0 },
+ { "matrix": [7, 6], "x": 14.25, "y": 0 },
+ { "matrix": [0, 7], "x": 15.25, "y": 0 },
+ { "matrix": [1, 7], "x": 16.25, "y": 0 },
+ { "matrix": [0, 8], "x": 17.25, "y": 0 },
+ { "matrix": [2, 0], "x": 0, "y": 1 },
+ { "matrix": [3, 0], "x": 1, "y": 1 },
+ { "matrix": [2, 1], "w": 1.5, "x": 2.25, "y": 1 },
+ { "matrix": [3, 1], "x": 3.75, "y": 1 },
+ { "matrix": [2, 2], "x": 4.75, "y": 1 },
+ { "matrix": [3, 2], "x": 5.75, "y": 1 },
+ { "matrix": [2, 3], "x": 6.75, "y": 1 },
+ { "matrix": [3, 3], "x": 7.75, "y": 1 },
+ { "matrix": [2, 4], "x": 8.75, "y": 1 },
+ { "matrix": [3, 4], "x": 9.75, "y": 1 },
+ { "matrix": [2, 5], "x": 10.75, "y": 1 },
+ { "matrix": [3, 5], "x": 11.75, "y": 1 },
+ { "matrix": [2, 6], "x": 12.75, "y": 1 },
+ { "matrix": [3, 6], "x": 13.75, "y": 1 },
+ { "matrix": [2, 7], "x": 14.75, "y": 1 },
+ { "matrix": [3, 7], "w": 1.5, "x": 15.75, "y": 1 },
+ { "matrix": [2, 8], "x": 17.25, "y": 1 },
+ { "matrix": [4, 0], "x": 0, "y": 2 },
+ { "matrix": [5, 0], "x": 1, "y": 2 },
+ { "matrix": [4, 1], "w": 1.75, "x": 2.25, "y": 2 },
+ { "matrix": [5, 1], "x": 4, "y": 2 },
+ { "matrix": [4, 2], "x": 5, "y": 2 },
+ { "matrix": [5, 2], "x": 6, "y": 2 },
+ { "matrix": [4, 3], "x": 7, "y": 2 },
+ { "matrix": [5, 3], "x": 8, "y": 2 },
+ { "matrix": [4, 4], "x": 9, "y": 2 },
+ { "matrix": [5, 4], "x": 10, "y": 2 },
+ { "matrix": [4, 5], "x": 11, "y": 2 },
+ { "matrix": [5, 5], "x": 12, "y": 2 },
+ { "matrix": [4, 6], "x": 13, "y": 2 },
+ { "matrix": [5, 6], "x": 14, "y": 2 },
+ { "matrix": [4, 7], "x": 19, "y": 2 },
+ { "matrix": [5, 7], "w": 2.25, "x": 15, "y": 2 },
+ { "matrix": [4, 8], "x": 17.25, "y": 2 },
+ { "matrix": [6, 0], "x": 0, "y": 3 },
+ { "matrix": [7, 0], "x": 1, "y": 3 },
+ { "matrix": [6, 1], "w": 1.25, "x": 2.25, "y": 3 },
+ { "matrix": [7, 1], "x": 3.5, "y": 3 },
+ { "matrix": [9, 2], "x": 4.5, "y": 3 },
+ { "matrix": [6, 2], "x": 5.5, "y": 3 },
+ { "matrix": [7, 2], "x": 6.5, "y": 3 },
+ { "matrix": [6, 3], "x": 7.5, "y": 3 },
+ { "matrix": [7, 3], "x": 8.5, "y": 3 },
+ { "matrix": [6, 4], "x": 9.5, "y": 3 },
+ { "matrix": [7, 4], "x": 10.5, "y": 3 },
+ { "matrix": [6, 5], "x": 11.5, "y": 3 },
+ { "matrix": [7, 5], "x": 12.5, "y": 3 },
+ { "matrix": [6, 6], "x": 13.5, "y": 3 },
+ { "matrix": [6, 7], "w": 1.75, "x": 14.5, "y": 3 },
+ { "matrix": [7, 7], "x": 16.25, "y": 3 },
+ { "matrix": [6, 8], "x": 17.25, "y": 3 },
+ { "matrix": [8, 0], "x": 0, "y": 4 },
+ { "matrix": [9, 0], "x": 1, "y": 4 },
+ { "matrix": [8, 1], "w": 1.5, "x": 2.25, "y": 4 },
+ { "matrix": [9, 1], "x": 3.75, "y": 4 },
+ { "matrix": [8, 2], "w": 1.5, "x": 4.75, "y": 4 },
+ { "matrix": [8, 4], "w": 7, "x": 6.25, "y": 4 },
+ { "matrix": [8, 6], "w": 1.5, "x": 13.25, "y": 4 },
+ { "matrix": [8, 7], "x": 15.25, "y": 4 },
+ { "matrix": [9, 7], "x": 16.25, "y": 4 },
+ { "matrix": [8, 8], "x": 17.25, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/wolf/ziggurat/keymaps/default/keymap.c b/keyboards/wolf/ziggurat/keymaps/default/keymap.c
new file mode 100644
index 00000000000..e26689efa71
--- /dev/null
+++ b/keyboards/wolf/ziggurat/keymaps/default/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 contact@vwolf.be
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_F1, KC_F6, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
+ KC_F2, KC_F7, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F3, KC_F8, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_F4, KC_F9, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F5, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_F1, KC_F6, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
+ KC_F2, KC_F7, _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ KC_F3, KC_F8, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_F4, KC_F9, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ KC_F5, KC_F10, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/wolf/ziggurat/keymaps/via/keymap.c b/keyboards/wolf/ziggurat/keymaps/via/keymap.c
new file mode 100644
index 00000000000..e26689efa71
--- /dev/null
+++ b/keyboards/wolf/ziggurat/keymaps/via/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 contact@vwolf.be
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_F1, KC_F6, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
+ KC_F2, KC_F7, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F3, KC_F8, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_F4, KC_F9, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F5, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_F1, KC_F6, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
+ KC_F2, KC_F7, _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ KC_F3, KC_F8, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_F4, KC_F9, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ KC_F5, KC_F10, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/wolf/ziggurat/keymaps/via/rules.mk b/keyboards/wolf/ziggurat/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/wolf/ziggurat/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/wolf/ziggurat/readme.md b/keyboards/wolf/ziggurat/readme.md
new file mode 100644
index 00000000000..d7aa00c077f
--- /dev/null
+++ b/keyboards/wolf/ziggurat/readme.md
@@ -0,0 +1,23 @@
+# Ziggurat
+
+
+
+The following is the QMK Firmware for the Ziggurat PCB.
+
+* Keyboard Maintainer: [Wolf](https://github.com/ToastyStoemp)
+* Hardware Supported: Ziggurat PCB
+* Hardware Availability: https://www.eloquentclicks.com/product/ziggurat-plateless-leaf-spring-pcb-mount-65-xt/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wolf/ziggurat:default
+
+Flashing example for this keyboard:
+
+ make wolf/ziggurat:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader Enter the bootloader in 2 ways:
+* **Bootmagic reset**: Hold down the key ESC key and plug in the keyboard (Top Left most switch)
+* **Physical reset button**: Briefly press the button on the back of the PCB
diff --git a/keyboards/wolf/ziggurat/rules.mk b/keyboards/wolf/ziggurat/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/wolf/ziggurat/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/wuque/nemui65/config.h b/keyboards/wuque/nemui65/config.h
new file mode 100644
index 00000000000..489059d8ab3
--- /dev/null
+++ b/keyboards/wuque/nemui65/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2023 wuque
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
diff --git a/keyboards/wuque/nemui65/info.json b/keyboards/wuque/nemui65/info.json
new file mode 100644
index 00000000000..b56df19efd9
--- /dev/null
+++ b/keyboards/wuque/nemui65/info.json
@@ -0,0 +1,128 @@
+{
+ "keyboard_name": "nemui65",
+ "manufacturer": "wuque",
+ "maintainer": "spbgzh",
+ "usb": {
+ "vid": "0x807C",
+ "pid": "0x0005",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["C7", "D5", "B5", "B4", "D7", "D6", "D4", "D3", "D2", "D1", "D0", "B7", "B2", "B3", "F7"],
+ "rows": ["F1", "F0", "C6", "B6", "F5"]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ "rbglight": true
+ },
+ "diode_direction": "COL2ROW",
+ "indicators": {
+ "caps_lock": "F6",
+ "on_state": 0
+ },
+ "ws2812": {
+ "pin": "F4"
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "max_brightness": 200,
+ "led_count": 1,
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "sleep": true
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "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, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/wuque/nemui65/keymaps/default/keymap.c b/keyboards/wuque/nemui65/keymaps/default/keymap.c
new file mode 100644
index 00000000000..24801db75eb
--- /dev/null
+++ b/keyboards/wuque/nemui65/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 wuque
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_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_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = 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, KC_F12, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/wuque/nemui65/keymaps/via/keymap.c b/keyboards/wuque/nemui65/keymaps/via/keymap.c
new file mode 100644
index 00000000000..da09d31c619
--- /dev/null
+++ b/keyboards/wuque/nemui65/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 wuque
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_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_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = 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, KC_F12, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/wuque/nemui65/keymaps/via/rules.mk b/keyboards/wuque/nemui65/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/wuque/nemui65/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/wuque/nemui65/readme.md b/keyboards/wuque/nemui65/readme.md
new file mode 100644
index 00000000000..4225139ab02
--- /dev/null
+++ b/keyboards/wuque/nemui65/readme.md
@@ -0,0 +1,27 @@
+# Nmui65
+
+More Info at [Nemui65](https://mechsandco.com/products/nemui65)
+
+
+* Keyboard Maintainer: [spbgzh](https://github.com/spbgzh)
+* Hardware Supported: Nemui65
+* Hardware Availability: [Nemui65](https://mechsandco.com/products/nemui65)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wuque/nemui65:default
+
+Flashing example for this keyboard:
+
+ make wuque/nemui65:default:flash
+
+## Bootloader
+
+Enter the bootloader using one of the following methods:
+
+* Tap the Reset switch mounted on the PCB
+* In the case of the default keymap, use the key combination Fn + Delete
+* Hold the Esc key while connecting the USB cable (also erases persistent settings)
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/wuque/nemui65/rules.mk b/keyboards/wuque/nemui65/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/wuque/nemui65/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/xelus/rs60/rev1/info.json b/keyboards/xelus/rs60/rev1/info.json
index 9b8f0410fab..69f8d6e5b0e 100644
--- a/keyboards/xelus/rs60/rev1/info.json
+++ b/keyboards/xelus/rs60/rev1/info.json
@@ -9,7 +9,8 @@
},
"diode_direction": "COL2ROW",
"indicators": {
- "caps_lock": "B0"
+ "caps_lock": "B0",
+ "on_state": 0
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
diff --git a/keyboards/xelus/rs60/rev2_1/info.json b/keyboards/xelus/rs60/rev2_1/info.json
index b8cda1a22a7..118a671547c 100644
--- a/keyboards/xelus/rs60/rev2_1/info.json
+++ b/keyboards/xelus/rs60/rev2_1/info.json
@@ -9,7 +9,8 @@
},
"diode_direction": "COL2ROW",
"indicators": {
- "caps_lock": "A1"
+ "caps_lock": "A1",
+ "on_state": 0
},
"processor": "STM32L412",
"bootloader": "stm32-dfu",
diff --git a/keyboards/xiudi/xd75/keymaps/dothtm75/config.h b/keyboards/xiudi/xd75/keymaps/dothtm75/config.h
new file mode 100644
index 00000000000..155d4562d53
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/dothtm75/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2017 Mike Cramer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HOLD_ON_OTHER_KEY_PRESS
+
+#define MIDI_ADVANCED
diff --git a/keyboards/xiudi/xd75/keymaps/dothtm75/keymap.c b/keyboards/xiudi/xd75/keymaps/dothtm75/keymap.c
new file mode 100644
index 00000000000..1767915dace
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/dothtm75/keymap.c
@@ -0,0 +1,174 @@
+/* Copyright 2017 Wunder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_5x15(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_MINS), LGUI(KC_EQL), KC_6, KC_7, KC_8, KC_9, KC_0, LGUI(KC_0), KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, LGUI(KC_LCBR), LGUI(KC_RCBR), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSLS,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, LGUI(KC_LBRC), LGUI(KC_RBRC), 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, LGUI(KC_QUES), LGUI(KC_SLSH), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT,
+ MO(2), KC_LCTL, KC_LALT, KC_LGUI, LT(1,KC_SPC), KC_SPC, LGUI(KC_SPC), KC_NO, KC_SPC, LT(1,KC_SPC), KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ortho_5x15(
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_MINS, KC_EQL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LGUI(KC_1), KC_DEL,
+ KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_LCBR, KC_RCBR, KC_NO, KC_LCBR, KC_RCBR, KC_DQUO, KC_QUOT, KC_NO, KC_SLSH,
+ KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_LBRC, KC_RBRC, KC_NO, KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_NO, KC_PENT,
+ KC_TRNS, KC_UNDS, KC_PLUS, KC_MINS, KC_EQL, KC_NO, KC_QUES, KC_SLSH, KC_NO, KC_QUES, KC_SLSH, KC_QUES, KC_SLSH, LCAG(KC_UP), KC_TRNS,
+ MO(15), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LGUI(KC_SPC), HYPR(KC_J), KC_TRNS, LGUI(KC_SPC), KC_TRNS, KC_TRNS, KC_TRNS, LGUI(KC_LBRC), LCAG(KC_DOWN), LGUI(KC_RBRC)
+ ),
+
+ [2] = LAYOUT_ortho_5x15(
+ DB_TOGG, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO, KC_DEL,
+ RGB_TOG, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_NO, KC_NO, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_NO, KC_NO,
+ HYPR(KC_H), KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(15), HYPR(KC_K), KC_NO, KC_NO, KC_TRNS, MO(15), KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+
+ ),
+
+ // Musical keys
+
+ [3] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Vertical Typing 60
+ KC_ESC, MI_C, MI_E, MI_Gs, MI_C1, MI_E1, KC_NO, KC_NO, MI_Gs1, MI_C2, MI_E2, MI_Gs2, MI_C3, MI_E3, MI_TR0,
+ KC_TAB, MI_Cs, MI_F, MI_A, MI_Cs1, MI_F1, KC_NO, KC_NO, MI_A1, MI_Cs2, MI_F2, MI_A2, MI_Cs3, MI_F3, MI_TRSU,
+ KC_SPC, MI_D, MI_Fs, MI_As, MI_D1, MI_Fs1, KC_NO, KC_NO, MI_As1, MI_D2, MI_Fs2, MI_As2, MI_D3, MI_Fs3, MI_TRSD,
+ MI_SUST, MI_Ds, MI_G, MI_B, MI_Ds1, MI_G1, KC_NO, KC_NO, MI_B1, MI_Ds2, MI_G2, MI_B2, MI_Ds3, MI_G3, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [4] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Vertical Typing 60
+ KC_ESC, MI_C, MI_G, MI_C1, MI_G1, MI_C2, KC_NO, KC_NO, MI_G2, MI_C3, MI_G3, MI_C4, MI_G4, MI_C5, MI_TR0,
+ KC_TAB, MI_D, MI_Gs, MI_D1, MI_Gs1, MI_D2, KC_NO, KC_NO, MI_Gs2, MI_D3, MI_Gs3, MI_D4, MI_Gs4, MI_D5, MI_TRSU,
+ KC_SPC, MI_Ds, MI_As, MI_Ds1, MI_As1, MI_Ds2, KC_NO, KC_NO, MI_As2, MI_Ds3, MI_As3, MI_Ds4, MI_As4, MI_Ds5, MI_TRSD,
+ MI_SUST, MI_F, MI_B, MI_F1, MI_B1, MI_F2, KC_NO, KC_NO, MI_B2, MI_F3, MI_B3, MI_F4, MI_B4, MI_F5, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [5] = LAYOUT_ortho_5x15(
+ // Major scale Vertical Typing 60
+ KC_ESC, MI_C, MI_G, MI_D1, MI_A1, MI_E2, KC_NO, KC_NO, MI_B2, MI_F3, MI_C4, MI_G4, MI_D5, MI_A5, MI_TR0,
+ KC_TAB, MI_D, MI_A, MI_E1, MI_B1, MI_F2, KC_NO, KC_NO, MI_C3, MI_G3, MI_D4, MI_A4, MI_E5, MI_B5, MI_TRSU,
+ KC_SPC, MI_E, MI_B, MI_F1, MI_C2, MI_G2, KC_NO, KC_NO, MI_D3, MI_A3, MI_E4, MI_B4, MI_F5, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_C1, MI_G1, MI_D2, MI_A2, KC_NO, KC_NO, MI_E3, MI_B3, MI_F4, MI_C5, MI_G5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [6] = LAYOUT_ortho_5x15(
+ // Black Keys Vertical Typing 60
+ KC_ESC, MI_C, MI_A, MI_G1, MI_F2, MI_D3, KC_NO, KC_NO, MI_C4, MI_A4, MI_G5, KC_NO, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_C1, MI_A1, MI_G2, MI_F3, KC_NO, KC_NO, MI_D4, MI_C5, MI_A5, KC_NO, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_F, MI_D1, MI_C2, MI_A2, MI_G3, KC_NO, KC_NO, MI_F4, MI_D5, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_G, MI_F1, MI_D2, MI_C3, MI_A3, KC_NO, KC_NO, MI_G4, MI_F5, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [7] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Vertical
+ KC_ESC, MI_C, MI_E, MI_Gs, MI_C1, MI_E1, MI_Gs1, MI_C2, MI_E2, MI_Gs2, MI_C3, MI_E3, MI_Gs3, KC_NO, MI_TR0,
+ KC_TAB, MI_Cs, MI_F, MI_A, MI_Cs1, MI_F1, MI_A1, MI_Cs2, MI_F2, MI_A2, MI_Cs3, MI_F3, MI_A3, KC_NO, MI_TRSU,
+ KC_SPC, MI_D, MI_Fs, MI_As, MI_D1, MI_Fs1, MI_As1, MI_D2, MI_Fs2, MI_As2, MI_D3, MI_Fs3, MI_As3, KC_NO, MI_TRSD,
+ MI_SUST, MI_Ds, MI_G, MI_B, MI_Ds1, MI_G1, MI_B1, MI_Ds2, MI_G2, MI_B2, MI_Ds3, MI_G3, MI_B3, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [8] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Vertical
+ KC_ESC, MI_C, MI_G, MI_C1, MI_G1, MI_C2, MI_G2, MI_C3, MI_G3, MI_C4, MI_G4, MI_C5, MI_G5, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_Gs, MI_D1, MI_Gs1, MI_D2, MI_Gs2, MI_D3, MI_Gs3, MI_D4, MI_Gs4, MI_D5, MI_Gs5, KC_NO, MI_TRSU,
+ KC_SPC, MI_Ds, MI_As, MI_Ds1, MI_As1, MI_Ds2, MI_As2, MI_Ds3, MI_As3, MI_Ds4, MI_As4, MI_Ds5, MI_As5, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_B, MI_F1, MI_B1, MI_F2, MI_B2, MI_F3, MI_B3, MI_F4, MI_B4, MI_F5, MI_B5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [9] = LAYOUT_ortho_5x15(
+ // Major scale Vertical
+ KC_ESC, MI_C, MI_G, MI_D1, MI_A1, MI_E2, MI_B2, MI_F3, MI_C4, MI_G4, MI_D5, MI_A5, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_A, MI_E1, MI_B1, MI_F2, MI_C3, MI_G3, MI_D4, MI_A4, MI_E5, MI_B5, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_E, MI_B, MI_F1, MI_C2, MI_G2, MI_D3, MI_A3, MI_E4, MI_B4, MI_F5, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_C1, MI_G1, MI_D2, MI_A2, MI_E3, MI_B3, MI_F4, MI_C5, MI_G5, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [10] = LAYOUT_ortho_5x15(
+ // Black Keys Vertical
+ KC_ESC, MI_C, MI_A, MI_G1, MI_F2, MI_D3, MI_C4, MI_A4, MI_G5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_C1, MI_A1, MI_G2, MI_F3, MI_D4, MI_C5, MI_A5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_F, MI_D1, MI_C2, MI_A2, MI_G3, MI_F4, MI_D5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_G, MI_F1, MI_D2, MI_C3, MI_A3, MI_G4, MI_F5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [11] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Horizontal
+ KC_ESC, MI_C, MI_Cs, MI_D, MI_Ds, MI_E, MI_F, MI_Fs, MI_G, MI_Gs, MI_A, MI_As, MI_B, KC_NO, MI_TR0,
+ KC_TAB, MI_C1, MI_Cs1, MI_D1, MI_Ds1, MI_E1, MI_F1, MI_Fs1, MI_G1, MI_Gs1, MI_A1, MI_As1, MI_B1, KC_NO, MI_TRSU,
+ KC_SPC, MI_C2, MI_Cs2, MI_D2, MI_Ds2, MI_E2, MI_F2, MI_Fs2, MI_G2, MI_Gs2, MI_A2, MI_As2, MI_B2, KC_NO, MI_TRSD,
+ MI_SUST, MI_C3, MI_Cs3, MI_D3, MI_Ds3, MI_E3, MI_F3, MI_Fs3, MI_G3, MI_Gs3, MI_A3, MI_As3, MI_B3, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+ [12] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Horizontal
+ KC_ESC, MI_C, MI_D, MI_Ds, MI_F, MI_G, MI_Gs, MI_As, MI_B, MI_C1, MI_D1, MI_Ds1, MI_F1, KC_NO, MI_TR0,
+ KC_TAB, MI_G1, MI_Gs1, MI_As1, MI_B1, MI_C2, MI_D2, MI_Ds2, MI_F2, MI_G2, MI_Gs2, MI_As2, MI_B2, KC_NO, MI_TRSU,
+ KC_SPC, MI_C3, MI_D3, MI_Ds3, MI_F3, MI_G3, MI_Gs3, MI_As3, MI_B3, MI_C4, MI_D4, MI_Ds4, MI_F4, KC_NO, MI_TRSD,
+ MI_SUST, MI_G4, MI_Gs4, MI_As4, MI_B4, MI_C5, MI_D5, MI_Ds5, MI_F5, MI_G5, MI_Gs5, MI_As5, MI_B5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [13] = LAYOUT_ortho_5x15(
+ // Major scale Horizontal
+ KC_ESC, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C1, MI_D1, MI_E1, MI_F1, MI_G1, KC_NO, MI_TR0,
+ KC_TAB, MI_A1, MI_B1, MI_C2, MI_D2, MI_E2, MI_F2, MI_G2, MI_A2, MI_B2, MI_C3, MI_D3, MI_E3, KC_NO, MI_TRSU,
+ KC_SPC, MI_F3, MI_G3, MI_A3, MI_B3, MI_C4, MI_D4, MI_E4, MI_F4, MI_G4, MI_A4, MI_B4, MI_C5, KC_NO, MI_TRSD,
+ MI_SUST, MI_D5, MI_E5, MI_F5, MI_G5, MI_A5, MI_B5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+ [14] = LAYOUT_ortho_5x15(
+ // Black Keys Horizontal
+ KC_ESC, MI_C, MI_D, MI_F, MI_G, MI_A, MI_C1, MI_D1, MI_F1, MI_G1, MI_A1, MI_C2, MI_D2, KC_NO, MI_TR0,
+ KC_TAB, MI_F2, MI_G2, MI_A2, MI_C3, MI_D3, MI_F3, MI_G3, MI_A3, MI_C4, MI_D4, MI_F4, MI_G4, KC_NO, MI_TRSU,
+ KC_SPC, MI_A4, MI_C, MI_D, MI_F, MI_G, MI_A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [15] = LAYOUT_ortho_5x15(
+ // Settings
+ DB_TOGG, MI_CH1, MI_CH2, MI_CH3, MI_CH4, MI_CH5, KC_NO, KC_NO, MI_CH6, MI_CH7, MI_CH8, AU_TOGG, KC_NO, KC_NO, QK_BOOT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, DF(3), DF(4), DF(5), DF(6), KC_NO, KC_NO, KC_NO,
+ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_NO, KC_NO, KC_NO, DF(11), DF(12), DF(13), DF(14), KC_NO, KC_NO, DB_TOGG,
+ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_NO, KC_NO, KC_NO, DF(7), DF(8), DF(9), DF(10), KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS, DF(0), DF(0), DF(0), DF(0), KC_TRNS, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO
+ )
+};
+
diff --git a/keyboards/xiudi/xd75/keymaps/dothtm75/rules.mk b/keyboards/xiudi/xd75/keymaps/dothtm75/rules.mk
new file mode 100644
index 00000000000..56c4130708c
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/dothtm75/rules.mk
@@ -0,0 +1,2 @@
+
+MIDI_ENABLE = yes
diff --git a/keyboards/xiudi/xd75/keymaps/zigotica/config.h b/keyboards/xiudi/xd75/keymaps/zigotica/config.h
new file mode 100644
index 00000000000..23e276cf6ef
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/zigotica/config.h
@@ -0,0 +1,27 @@
+/* Copyright 2023 Sergi Meseguer
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// these should work better for homerow modifiers
+#define TAPPING_TERM 350
+#define PERMISSIVE_HOLD
+#define QUICK_TAP_TERM 0
+
+// needed to get same layers as split keyboards
+// see users/zigotica/zigotica.h
+#define ORTHOLINEAR_KEYBOARD
+
diff --git a/keyboards/xiudi/xd75/keymaps/zigotica/keymap.c b/keyboards/xiudi/xd75/keymaps/zigotica/keymap.c
new file mode 100644
index 00000000000..4133b57e720
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/zigotica/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2023 Sergi Meseguer
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "zigotica.h"
+
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_wrapper(
+ KC_ESC, ____NUM15, _BLANK_3, ____NUM60, KC_DEL,
+ KC_TAB, _STENAI_L1, _BLANK_3, _STENAI_R1, _______,
+ KC_EQL, _STENAI_L2, _BLANK_3, _STENAI_R2, KC_ENT,
+ KC_LSFT, _STENAI_L3, ____TARRS, _STENAI_R3, KC_RSFT,
+ ____LORTH, _STENAI_LT, ____BARRS, _STENAI_RT, ____RORTH
+ ),
+
+ [_NUM] = LAYOUT_wrapper(
+ QK_MAKE, _BLANK_ROW, _BLANK_3, _BLANK_ROW, _______,
+ _______, ____NUM_L1, _BLANK_3, ____NUM_R1, _______,
+ _______, ____NUM_L2, _BLANK_3, ____NUM_R2, _______,
+ _______, ____NUM_L3, _BLANK_3, ____NUM_R3, _______,
+ _BLANK_4, ____NUM_LT, _BLANK_3, ____NUM_RT, _BLANK_4
+ ),
+
+ [_NAV] = LAYOUT_wrapper(
+ QK_MAKE, _BLANK_ROW, _BLANK_3, _BLANK_ROW, _______,
+ _______, ____NAV_L1, _BLANK_3, ____NAV_R1, _______,
+ _______, ____NAV_L2, _BLANK_3, ____NAV_R2, _______,
+ _______, ____NAV_L3, _BLANK_3, ____NAV_R3, _______,
+ _BLANK_4, ____NAV_LT, _BLANK_3, ____NAV_RT, _BLANK_4
+ ),
+
+ [_SYM] = LAYOUT_wrapper(
+ QK_MAKE, _BLANK_ROW, _BLANK_3, _BLANK_ROW, _______,
+ _______, ____SYM_L1, _BLANK_3, ____SYM_R1, _______,
+ _______, ____SYM_L2, _BLANK_3, ____SYM_R2, _______,
+ _______, ____SYM_L3, _BLANK_3, ____SYM_R3, _______,
+ _BLANK_4, ____SYM_LT, _BLANK_3, ____SYM_RT, _BLANK_4
+ ),
+
+ [_FN] = LAYOUT_wrapper(
+ QK_MAKE, ____FN_15, _BLANK_3, ____FN_60, _______,
+ _______, ____FN_L1, _BLANK_3, ____FN_R1, _______,
+ _______, ____FN_L2, _BLANK_3, ____FN_R2, _______,
+ _______, ____FN_L3, _BLANK_3, ____FN_R3, _______,
+ _BLANK_4, ____FN_LT, _BLANK_3, ____FN_RT, _BLANK_4
+ ),
+};
+
+
diff --git a/keyboards/xiudi/xd75/keymaps/zigotica/rules.mk b/keyboards/xiudi/xd75/keymaps/zigotica/rules.mk
new file mode 100644
index 00000000000..c41232e8f94
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/zigotica/rules.mk
@@ -0,0 +1,6 @@
+OLED_SUPPORTED = no
+ENCODER_SUPPORTED = no
+
+MOUSEKEY_ENABLE = yes
+COMBO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/ymdk/id75/keymaps/dothtm75/config.h b/keyboards/ymdk/id75/keymaps/dothtm75/config.h
new file mode 100644
index 00000000000..155d4562d53
--- /dev/null
+++ b/keyboards/ymdk/id75/keymaps/dothtm75/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2017 Mike Cramer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HOLD_ON_OTHER_KEY_PRESS
+
+#define MIDI_ADVANCED
diff --git a/keyboards/ymdk/id75/keymaps/dothtm75/keymap.c b/keyboards/ymdk/id75/keymaps/dothtm75/keymap.c
new file mode 100644
index 00000000000..f8267aff643
--- /dev/null
+++ b/keyboards/ymdk/id75/keymaps/dothtm75/keymap.c
@@ -0,0 +1,174 @@
+/* Copyright 2017 Wunder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_5x15(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_MINS), LGUI(KC_EQL), KC_6, KC_7, KC_8, KC_9, KC_0, LGUI(KC_0), KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, LGUI(KC_LCBR), LGUI(KC_RCBR), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSLS,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, LGUI(KC_LBRC), LGUI(KC_RBRC), 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, LGUI(KC_QUES), LGUI(KC_SLSH), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT,
+ MO(2), KC_LCTL, KC_LALT, KC_LGUI, LT(1,KC_SPC), KC_SPC, LGUI(KC_SPC), LGUI(KC_SPC), KC_SPC, LT(1,KC_SPC), KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ortho_5x15(
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_MINS, KC_EQL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LGUI(KC_1), KC_DEL,
+ KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_LCBR, KC_RCBR, KC_NO, KC_LCBR, KC_RCBR, KC_DQUO, KC_QUOT, KC_NO, KC_SLSH,
+ KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_LBRC, KC_RBRC, KC_NO, KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_NO, KC_PENT,
+ KC_TRNS, KC_UNDS, KC_PLUS, KC_MINS, KC_EQL, KC_NO, KC_QUES, KC_SLSH, KC_NO, KC_QUES, KC_SLSH, KC_QUES, KC_SLSH, LCAG(KC_UP), KC_TRNS,
+ MO(15), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LGUI(KC_SPC), HYPR(KC_J), KC_TRNS, LGUI(KC_SPC), KC_TRNS, KC_TRNS, KC_TRNS, LGUI(KC_LBRC), LCAG(KC_DOWN), LGUI(KC_RBRC)
+ ),
+
+ [2] = LAYOUT_ortho_5x15(
+ DB_TOGG, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO, KC_DEL,
+ RGB_TOG, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_NO, KC_NO, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_NO, KC_NO,
+ HYPR(KC_H), KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(15), HYPR(KC_K), KC_NO, KC_NO, KC_TRNS, MO(15), KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+
+ ),
+
+ // Musical keys
+
+ [3] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Vertical Typing 60
+ KC_ESC, MI_C, MI_E, MI_Gs, MI_C1, MI_E1, KC_NO, KC_NO, MI_Gs1, MI_C2, MI_E2, MI_Gs2, MI_C3, MI_E3, MI_TR0,
+ KC_TAB, MI_Cs, MI_F, MI_A, MI_Cs1, MI_F1, KC_NO, KC_NO, MI_A1, MI_Cs2, MI_F2, MI_A2, MI_Cs3, MI_F3, MI_TRSU,
+ KC_SPC, MI_D, MI_Fs, MI_As, MI_D1, MI_Fs1, KC_NO, KC_NO, MI_As1, MI_D2, MI_Fs2, MI_As2, MI_D3, MI_Fs3, MI_TRSD,
+ MI_SUST, MI_Ds, MI_G, MI_B, MI_Ds1, MI_G1, KC_NO, KC_NO, MI_B1, MI_Ds2, MI_G2, MI_B2, MI_Ds3, MI_G3, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [4] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Vertical Typing 60
+ KC_ESC, MI_C, MI_G, MI_C1, MI_G1, MI_C2, KC_NO, KC_NO, MI_G2, MI_C3, MI_G3, MI_C4, MI_G4, MI_C5, MI_TR0,
+ KC_TAB, MI_D, MI_Gs, MI_D1, MI_Gs1, MI_D2, KC_NO, KC_NO, MI_Gs2, MI_D3, MI_Gs3, MI_D4, MI_Gs4, MI_D5, MI_TRSU,
+ KC_SPC, MI_Ds, MI_As, MI_Ds1, MI_As1, MI_Ds2, KC_NO, KC_NO, MI_As2, MI_Ds3, MI_As3, MI_Ds4, MI_As4, MI_Ds5, MI_TRSD,
+ MI_SUST, MI_F, MI_B, MI_F1, MI_B1, MI_F2, KC_NO, KC_NO, MI_B2, MI_F3, MI_B3, MI_F4, MI_B4, MI_F5, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [5] = LAYOUT_ortho_5x15(
+ // Major scale Vertical Typing 60
+ KC_ESC, MI_C, MI_G, MI_D1, MI_A1, MI_E2, KC_NO, KC_NO, MI_B2, MI_F3, MI_C4, MI_G4, MI_D5, MI_A5, MI_TR0,
+ KC_TAB, MI_D, MI_A, MI_E1, MI_B1, MI_F2, KC_NO, KC_NO, MI_C3, MI_G3, MI_D4, MI_A4, MI_E5, MI_B5, MI_TRSU,
+ KC_SPC, MI_E, MI_B, MI_F1, MI_C2, MI_G2, KC_NO, KC_NO, MI_D3, MI_A3, MI_E4, MI_B4, MI_F5, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_C1, MI_G1, MI_D2, MI_A2, KC_NO, KC_NO, MI_E3, MI_B3, MI_F4, MI_C5, MI_G5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [6] = LAYOUT_ortho_5x15(
+ // Black Keys Vertical Typing 60
+ KC_ESC, MI_C, MI_A, MI_G1, MI_F2, MI_D3, KC_NO, KC_NO, MI_C4, MI_A4, MI_G5, KC_NO, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_C1, MI_A1, MI_G2, MI_F3, KC_NO, KC_NO, MI_D4, MI_C5, MI_A5, KC_NO, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_F, MI_D1, MI_C2, MI_A2, MI_G3, KC_NO, KC_NO, MI_F4, MI_D5, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_G, MI_F1, MI_D2, MI_C3, MI_A3, KC_NO, KC_NO, MI_G4, MI_F5, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [7] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Vertical
+ KC_ESC, MI_C, MI_E, MI_Gs, MI_C1, MI_E1, MI_Gs1, MI_C2, MI_E2, MI_Gs2, MI_C3, MI_E3, MI_Gs3, KC_NO, MI_TR0,
+ KC_TAB, MI_Cs, MI_F, MI_A, MI_Cs1, MI_F1, MI_A1, MI_Cs2, MI_F2, MI_A2, MI_Cs3, MI_F3, MI_A3, KC_NO, MI_TRSU,
+ KC_SPC, MI_D, MI_Fs, MI_As, MI_D1, MI_Fs1, MI_As1, MI_D2, MI_Fs2, MI_As2, MI_D3, MI_Fs3, MI_As3, KC_NO, MI_TRSD,
+ MI_SUST, MI_Ds, MI_G, MI_B, MI_Ds1, MI_G1, MI_B1, MI_Ds2, MI_G2, MI_B2, MI_Ds3, MI_G3, MI_B3, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [8] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Vertical
+ KC_ESC, MI_C, MI_G, MI_C1, MI_G1, MI_C2, MI_G2, MI_C3, MI_G3, MI_C4, MI_G4, MI_C5, MI_G5, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_Gs, MI_D1, MI_Gs1, MI_D2, MI_Gs2, MI_D3, MI_Gs3, MI_D4, MI_Gs4, MI_D5, MI_Gs5, KC_NO, MI_TRSU,
+ KC_SPC, MI_Ds, MI_As, MI_Ds1, MI_As1, MI_Ds2, MI_As2, MI_Ds3, MI_As3, MI_Ds4, MI_As4, MI_Ds5, MI_As5, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_B, MI_F1, MI_B1, MI_F2, MI_B2, MI_F3, MI_B3, MI_F4, MI_B4, MI_F5, MI_B5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [9] = LAYOUT_ortho_5x15(
+ // Major scale Vertical
+ KC_ESC, MI_C, MI_G, MI_D1, MI_A1, MI_E2, MI_B2, MI_F3, MI_C4, MI_G4, MI_D5, MI_A5, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_A, MI_E1, MI_B1, MI_F2, MI_C3, MI_G3, MI_D4, MI_A4, MI_E5, MI_B5, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_E, MI_B, MI_F1, MI_C2, MI_G2, MI_D3, MI_A3, MI_E4, MI_B4, MI_F5, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_C1, MI_G1, MI_D2, MI_A2, MI_E3, MI_B3, MI_F4, MI_C5, MI_G5, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [10] = LAYOUT_ortho_5x15(
+ // Black Keys Vertical
+ KC_ESC, MI_C, MI_A, MI_G1, MI_F2, MI_D3, MI_C4, MI_A4, MI_G5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_C1, MI_A1, MI_G2, MI_F3, MI_D4, MI_C5, MI_A5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_F, MI_D1, MI_C2, MI_A2, MI_G3, MI_F4, MI_D5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_G, MI_F1, MI_D2, MI_C3, MI_A3, MI_G4, MI_F5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [11] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Horizontal
+ KC_ESC, MI_C, MI_Cs, MI_D, MI_Ds, MI_E, MI_F, MI_Fs, MI_G, MI_Gs, MI_A, MI_As, MI_B, KC_NO, MI_TR0,
+ KC_TAB, MI_C1, MI_Cs1, MI_D1, MI_Ds1, MI_E1, MI_F1, MI_Fs1, MI_G1, MI_Gs1, MI_A1, MI_As1, MI_B1, KC_NO, MI_TRSU,
+ KC_SPC, MI_C2, MI_Cs2, MI_D2, MI_Ds2, MI_E2, MI_F2, MI_Fs2, MI_G2, MI_Gs2, MI_A2, MI_As2, MI_B2, KC_NO, MI_TRSD,
+ MI_SUST, MI_C3, MI_Cs3, MI_D3, MI_Ds3, MI_E3, MI_F3, MI_Fs3, MI_G3, MI_Gs3, MI_A3, MI_As3, MI_B3, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+ [12] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Horizontal
+ KC_ESC, MI_C, MI_D, MI_Ds, MI_F, MI_G, MI_Gs, MI_As, MI_B, MI_C1, MI_D1, MI_Ds1, MI_F1, KC_NO, MI_TR0,
+ KC_TAB, MI_G1, MI_Gs1, MI_As1, MI_B1, MI_C2, MI_D2, MI_Ds2, MI_F2, MI_G2, MI_Gs2, MI_As2, MI_B2, KC_NO, MI_TRSU,
+ KC_SPC, MI_C3, MI_D3, MI_Ds3, MI_F3, MI_G3, MI_Gs3, MI_As3, MI_B3, MI_C4, MI_D4, MI_Ds4, MI_F4, KC_NO, MI_TRSD,
+ MI_SUST, MI_G4, MI_Gs4, MI_As4, MI_B4, MI_C5, MI_D5, MI_Ds5, MI_F5, MI_G5, MI_Gs5, MI_As5, MI_B5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [13] = LAYOUT_ortho_5x15(
+ // Major scale Horizontal
+ KC_ESC, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C1, MI_D1, MI_E1, MI_F1, MI_G1, KC_NO, MI_TR0,
+ KC_TAB, MI_A1, MI_B1, MI_C2, MI_D2, MI_E2, MI_F2, MI_G2, MI_A2, MI_B2, MI_C3, MI_D3, MI_E3, KC_NO, MI_TRSU,
+ KC_SPC, MI_F3, MI_G3, MI_A3, MI_B3, MI_C4, MI_D4, MI_E4, MI_F4, MI_G4, MI_A4, MI_B4, MI_C5, KC_NO, MI_TRSD,
+ MI_SUST, MI_D5, MI_E5, MI_F5, MI_G5, MI_A5, MI_B5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+ [14] = LAYOUT_ortho_5x15(
+ // Black Keys Horizontal
+ KC_ESC, MI_C, MI_D, MI_F, MI_G, MI_A, MI_C1, MI_D1, MI_F1, MI_G1, MI_A1, MI_C2, MI_D2, KC_NO, MI_TR0,
+ KC_TAB, MI_F2, MI_G2, MI_A2, MI_C3, MI_D3, MI_F3, MI_G3, MI_A3, MI_C4, MI_D4, MI_F4, MI_G4, KC_NO, MI_TRSU,
+ KC_SPC, MI_A4, MI_C, MI_D, MI_F, MI_G, MI_A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [15] = LAYOUT_ortho_5x15(
+ // Settings
+ DB_TOGG, MI_CH1, MI_CH2, MI_CH3, MI_CH4, MI_CH5, KC_NO, KC_NO, MI_CH6, MI_CH7, MI_CH8, AU_TOGG, KC_NO, KC_NO, QK_BOOT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, DF(3), DF(4), DF(5), DF(6), KC_NO, KC_NO, KC_NO,
+ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_NO, KC_NO, KC_NO, DF(11), DF(12), DF(13), DF(14), KC_NO, KC_NO, DB_TOGG,
+ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_NO, KC_NO, KC_NO, DF(7), DF(8), DF(9), DF(10), KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS, DF(0), DF(0), DF(0), DF(0), KC_TRNS, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO
+ )
+};
+
diff --git a/keyboards/ymdk/id75/keymaps/dothtm75/rules.mk b/keyboards/ymdk/id75/keymaps/dothtm75/rules.mk
new file mode 100644
index 00000000000..56c4130708c
--- /dev/null
+++ b/keyboards/ymdk/id75/keymaps/dothtm75/rules.mk
@@ -0,0 +1,2 @@
+
+MIDI_ENABLE = yes
diff --git a/layouts/community/ergodox/zweihander-macos/keymap.c b/layouts/community/ergodox/zweihander-macos/keymap.c
index cbf258745b6..19567797a04 100644
--- a/layouts/community/ergodox/zweihander-macos/keymap.c
+++ b/layouts/community/ergodox/zweihander-macos/keymap.c
@@ -118,11 +118,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | ⌥↑ | PgUp | ⌥↓ | | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | | Home | PgDn | End | |------| |------| ⌘[ | ← | ↓ | → | | F16 |
+ * | | ⌃⇧⌘← | Home | PgDn | End | ⌃⇧⌘→ |------| |------| ⌘[ | ← | ↓ | → | | F16 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | ⏯ | ⏮ | ⏭ | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * | | | | | | |VolUp |VolDn | Mute | | |
+ * | | | | | | |VolDn |VolUp | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
@@ -134,23 +134,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
// MEDIA AND MOUSE
[MDIA] = LAYOUT_ergodox(
- KC_TRNS, KC_F14 , KC_F15 , KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS, /* F14 dims screen, F15 brightens */
- KC_TRNS, KC_TRNS, LALT(KC_UP), KC_PGUP, LALT(KC_DOWN), KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END , KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_F14 , KC_F15 , KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS, /* F14 dims screen, F15 brightens */
+ KC_TRNS, KC_TRNS, LALT(KC_UP), KC_PGUP, LALT(KC_DOWN), KC_TRNS, KC_TRNS,
+ KC_TRNS, C(S(G(KC_LEFT))), KC_HOME, KC_PGDN, KC_END , C(S(G(KC_RGHT))),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
- KC_TRNS, LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_EJCT, KC_PWR,
- KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS,
- LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_F16 ,
- KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
- KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_EJCT, KC_PWR,
+ KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS,
+ LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_F16 ,
+ KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
- LGUI(KC_X), LGUI(KC_C), LGUI(KC_V)
+ LGUI(KC_X), LGUI(KC_C), LGUI(KC_V)
),
};
diff --git a/layouts/community/ortho_4x10/scotto/keymap.c b/layouts/community/ortho_4x10/scotto/keymap.c
new file mode 100644
index 00000000000..919764324bf
--- /dev/null
+++ b/layouts/community/ortho_4x10/scotto/keymap.c
@@ -0,0 +1,74 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "scotto.h"
+
+#define LAYOUT_ortho_4x10_wrapper(...) LAYOUT_ortho_4x10(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4x10_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ KC_NO, KC_NO, _______THUMB6_1_______, KC_NO, KC_NO
+ ),
+ [1] = LAYOUT_ortho_4x10_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ ),
+ [2] = LAYOUT_ortho_4x10_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3a________________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ ),
+ [3] = LAYOUT_ortho_4x10_wrapper(
+ ________________FUNC_SYS1a________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ ),
+ [4] = LAYOUT_ortho_4x10_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ KC_NO, KC_NO, _______THUMB6_4_______, KC_NO, KC_NO
+ ),
+ [5] = LAYOUT_ortho_4x10_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3b_________________,
+ KC_NO, KC_NO, _______THUMB6_5_______, KC_NO, KC_NO
+ ),
+ [6] = LAYOUT_ortho_4x10_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ ),
+ [7] = LAYOUT_ortho_4x10_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3b________________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ ),
+ [8] = LAYOUT_ortho_4x10_wrapper(
+ ________________FUNC_SYS1b________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ )
+};
diff --git a/layouts/community/split_3x5_2/scotto/keymap.c b/layouts/community/split_3x5_2/scotto/keymap.c
new file mode 100644
index 00000000000..fcba0f483b2
--- /dev/null
+++ b/layouts/community/split_3x5_2/scotto/keymap.c
@@ -0,0 +1,78 @@
+/*
+Copyright 2023 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+#include "scotto.h"
+
+#define LAYOUT_split_3x5_2_wrapper(...) LAYOUT_split_3x5_2(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x5_2_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ _______THUMB4_1_______
+ ),
+ [1] = LAYOUT_split_3x5_2_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ _____THUMB4_TRNS______
+ ),
+ [2] = LAYOUT_split_3x5_2_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3a________________,
+ _____THUMB4_TRNS______
+ ),
+ [3] = LAYOUT_split_3x5_2_wrapper(
+ ________________FUNC_SYS1a________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ _____THUMB4_TRNS______
+ ),
+ [4] = LAYOUT_split_3x5_2_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ _______THUMB4_4_______
+ ),
+ [5] = LAYOUT_split_3x5_2_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3b_________________,
+ _______THUMB4_5_______
+ ),
+ [6] = LAYOUT_split_3x5_2_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ _____THUMB4_TRNS______
+ ),
+ [7] = LAYOUT_split_3x5_2_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3b________________,
+ _____THUMB4_TRNS______
+ ),
+ [8] = LAYOUT_split_3x5_2_wrapper(
+ ________________FUNC_SYS1b________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ _____THUMB4_TRNS______
+ )
+};
diff --git a/layouts/community/split_3x5_3/scotto/keymap.c b/layouts/community/split_3x5_3/scotto/keymap.c
new file mode 100644
index 00000000000..b0d4d9a038f
--- /dev/null
+++ b/layouts/community/split_3x5_3/scotto/keymap.c
@@ -0,0 +1,75 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+#include "scotto.h"
+
+#define LAYOUT_split_3x5_3_wrapper(...) LAYOUT_split_3x5_3(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x5_3_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ _______THUMB6_1_______
+ ),
+ [1] = LAYOUT_split_3x5_3_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ _____THUMB6_TRNS______
+ ),
+ [2] = LAYOUT_split_3x5_3_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3a________________,
+ _____THUMB6_TRNS______
+ ),
+ [3] = LAYOUT_split_3x5_3_wrapper(
+ ________________FUNC_SYS1a________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ _____THUMB6_TRNS______
+ ),
+ [4] = LAYOUT_split_3x5_3_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ _______THUMB6_4_______
+ ),
+ [5] = LAYOUT_split_3x5_3_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3b_________________,
+ _______THUMB6_5_______
+ ),
+ [6] = LAYOUT_split_3x5_3_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ _____THUMB6_TRNS______
+ ),
+ [7] = LAYOUT_split_3x5_3_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3b________________,
+ _____THUMB6_TRNS______
+ ),
+ [8] = LAYOUT_split_3x5_3_wrapper(
+ ________________FUNC_SYS1b________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ _____THUMB6_TRNS______
+ )
+};
diff --git a/layouts/default/60_abnt2/default_60_abnt2/keymap.c b/layouts/default/60_abnt2/default_60_abnt2/keymap.c
index a5a8f61cb60..712931016ae 100644
--- a/layouts/default/60_abnt2/default_60_abnt2/keymap.c
+++ b/layouts/default/60_abnt2/default_60_abnt2/keymap.c
@@ -30,11 +30,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ' │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│
- * └───┴───┴───┴───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───────┘
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ Tab │ Q │ W │ E │Rst│ T │Ins│Hom│ ↑ │End│PgU│ ´ │ [ │ │
- * ├─────┴┬──┴┬──┴┬──└───┘┬──└───┴┬──┴┬──┴┬──┴┬──┴┐──┴┬──┴┐ Ent│
+ * ├─────┴┬──┴┬──┴┬──┴───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
* │ Caps │ A │ S │ D │ F │ G │ H │ ← │ ↓ │ → │PgD│ ~ │ ] │ │
- * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─└───┴───┴───┴───┘─┬─┴─┬─┴────┤
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
* │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ ; │ / │ Shift│
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
* │Ctrl│GUI │Alt │ │ Alt│ GUI│ MO1│Ctrl│
diff --git a/layouts/default/60_jis/default_60_jis/keymap.c b/layouts/default/60_jis/default_60_jis/keymap.c
new file mode 100644
index 00000000000..a35e3f0f795
--- /dev/null
+++ b/layouts/default/60_jis/default_60_jis/keymap.c
@@ -0,0 +1,27 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
+ * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ] │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │
+ * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤
+ * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt │GUI │Ctrl│
+ * └────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘
+ */
+ [0] = LAYOUT_60_jis(
+ 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_INT3, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_RCTL
+ )
+};
diff --git a/layouts/default/60_jis/info.json b/layouts/default/60_jis/info.json
new file mode 100644
index 00000000000..56972148bda
--- /dev/null
+++ b/layouts/default/60_jis/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "60% JIS layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_jis": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+ {"x": 6, "y": 0},
+ {"x": 7, "y": 0},
+ {"x": 8, "y": 0},
+ {"x": 9, "y": 0},
+ {"x": 10, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+ {"x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"x": 0, "y": 2, "w": 1.75},
+ {"x": 1.75, "y": 2},
+ {"x": 2.75, "y": 2},
+ {"x": 3.75, "y": 2},
+ {"x": 4.75, "y": 2},
+ {"x": 5.75, "y": 2},
+ {"x": 6.75, "y": 2},
+ {"x": 7.75, "y": 2},
+ {"x": 8.75, "y": 2},
+ {"x": 9.75, "y": 2},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2},
+
+ {"x": 0, "y": 3, "w": 2.25},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y": 3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3},
+ {"x": 13.25, "y": 3, "w": 1.75},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 1.25},
+ {"x": 5, "y": 4, "w": 3.75},
+ {"x": 8.75, "y": 4, "w": 1.25},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 12.5, "y": 4, "w": 1.25},
+ {"x": 13.75, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_jis/layout.json b/layouts/default/60_jis/layout.json
new file mode 100644
index 00000000000..a93cc2bbfd2
--- /dev/null
+++ b/layouts/default/60_jis/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:2.25},"","","","","","","","","","","","",{w:1.75},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.75},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},""]
diff --git a/layouts/default/60_jis/readme.md b/layouts/default/60_jis/readme.md
new file mode 100644
index 00000000000..236abdfa074
--- /dev/null
+++ b/layouts/default/60_jis/readme.md
@@ -0,0 +1,3 @@
+# 60_jis
+
+ LAYOUT_60_jis
diff --git a/layouts/default/64_ansi/default_64_ansi/keymap.c b/layouts/default/64_ansi/default_64_ansi/keymap.c
index fdbb44117fb..ede754b2ca7 100644
--- a/layouts/default/64_ansi/default_64_ansi/keymap.c
+++ b/layouts/default/64_ansi/default_64_ansi/keymap.c
@@ -4,6 +4,19 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Sft│ ↑ │mo1│
+ * ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │Alt│Ctl│ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[0] = LAYOUT_64_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
@@ -11,6 +24,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │PSn│SLk│Pause│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │PgU│ │
+ * ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │mo2│Hom│PgD│End│
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[1] = LAYOUT_64_ansi(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS,
@@ -18,9 +44,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
_______, _______, _______, _______, _______, MO(2), KC_HOME, KC_PGDN, KC_END
),
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │QBt│ │ │ │ │ │ │ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[2] = LAYOUT_64_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
diff --git a/layouts/default/64_iso/default_64_iso/keymap.c b/layouts/default/64_iso/default_64_iso/keymap.c
index 1dfcdd3eb70..a28e652024b 100644
--- a/layouts/default/64_iso/default_64_iso/keymap.c
+++ b/layouts/default/64_iso/default_64_iso/keymap.c
@@ -4,6 +4,19 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
+ * ├───┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │Sft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Sft│ ↑ │mo1│
+ * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │Alt│Ctl│ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[0] = LAYOUT_64_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
@@ -11,6 +24,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │PSn│SLk│ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │PgU│ │
+ * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │mo2│Hom│PgD│End│
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[1] = LAYOUT_64_iso(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL,
@@ -18,9 +44,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
_______, _______, _______, _______, _______, MO(2), KC_HOME, KC_PGDN, KC_END
),
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │QBt│ │ │ │ │ │ │ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[2] = LAYOUT_64_iso(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
diff --git a/layouts/default/fullsize_jis/default_fullsize_jis/keymap.c b/layouts/default/fullsize_jis/default_fullsize_jis/keymap.c
new file mode 100644
index 00000000000..068bd5024bf
--- /dev/null
+++ b/layouts/default/fullsize_jis/default_fullsize_jis/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
+ * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp│ │Ins│Hom│PgU│ │Num│ / │ * │ - │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ │ │Del│End│PgD│ │ 7 │ 8 │ 9 │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘ ├───┼───┼───┤ + │
+ * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │ │ │ 4 │ 5 │ 6 │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐ ├───┼───┼───┼───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │ │ ↑ │ │ 1 │ 2 │ 3 │ │
+ * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┼───┴┬──┴─┬─┴─┬─┴─┬─┴─┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤Ent│
+ * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt│GUI│App│Ctrl│ │ ← │ ↓ │ → │ │ 0 │ . │ │
+ * └────┴────┴────┴────┴────────────┴────┴────┴───┴───┴───┴────┘ └───┴───┴───┘ └───────┴───┴───┘
+ */
+ [0] = LAYOUT_fullsize_jis(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ )
+};
diff --git a/layouts/default/fullsize_jis/info.json b/layouts/default/fullsize_jis/info.json
new file mode 100644
index 00000000000..8acd5f2fe3a
--- /dev/null
+++ b/layouts/default/fullsize_jis/info.json
@@ -0,0 +1,125 @@
+{
+ "keyboard_name": "Fullsize JIS layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_fullsize_jis": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+ {"x": 15.25, "y": 0},
+ {"x": 16.25, "y": 0},
+ {"x": 17.25, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+ {"x": 4, "y": 1.25},
+ {"x": 5, "y": 1.25},
+ {"x": 6, "y": 1.25},
+ {"x": 7, "y": 1.25},
+ {"x": 8, "y": 1.25},
+ {"x": 9, "y": 1.25},
+ {"x": 10, "y": 1.25},
+ {"x": 11, "y": 1.25},
+ {"x": 12, "y": 1.25},
+ {"x": 13, "y": 1.25},
+ {"x": 14, "y": 1.25},
+ {"x": 15.25, "y": 1.25},
+ {"x": 16.25, "y": 1.25},
+ {"x": 17.25, "y": 1.25},
+ {"x": 18.5, "y": 1.25},
+ {"x": 19.5, "y": 1.25},
+ {"x": 20.5, "y": 1.25},
+ {"x": 21.5, "y": 1.25},
+ {"x": 0, "y": 2.25, "w": 1.5},
+
+ {"x": 1.5, "y": 2.25},
+ {"x": 2.5, "y": 2.25},
+ {"x": 3.5, "y": 2.25},
+ {"x": 4.5, "y": 2.25},
+ {"x": 5.5, "y": 2.25},
+ {"x": 6.5, "y": 2.25},
+ {"x": 7.5, "y": 2.25},
+ {"x": 8.5, "y": 2.25},
+ {"x": 9.5, "y": 2.25},
+ {"x": 10.5, "y": 2.25},
+ {"x": 11.5, "y": 2.25},
+ {"x": 12.5, "y": 2.25},
+ {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"x": 15.25, "y": 2.25},
+ {"x": 16.25, "y": 2.25},
+ {"x": 17.25, "y": 2.25},
+ {"x": 18.5, "y": 2.25},
+ {"x": 19.5, "y": 2.25},
+ {"x": 20.5, "y": 2.25},
+ {"x": 21.5, "y": 2.25, "h": 2},
+
+ {"x": 0, "y": 3.25, "w": 1.75},
+ {"x": 1.75, "y": 3.25},
+ {"x": 2.75, "y": 3.25},
+ {"x": 3.75, "y": 3.25},
+ {"x": 4.75, "y": 3.25},
+ {"x": 5.75, "y": 3.25},
+ {"x": 6.75, "y": 3.25},
+ {"x": 7.75, "y": 3.25},
+ {"x": 8.75, "y": 3.25},
+ {"x": 9.75, "y": 3.25},
+ {"x": 10.75, "y": 3.25},
+ {"x": 11.75, "y": 3.25},
+ {"x": 12.75, "y": 3.25},
+ {"x": 18.5, "y": 3.25},
+ {"x": 19.5, "y": 3.25},
+ {"x": 20.5, "y": 3.25},
+
+ {"x": 0, "y": 4.25, "w": 2.25},
+ {"x": 2.25, "y": 4.25},
+ {"x": 3.25, "y": 4.25},
+ {"x": 4.25, "y": 4.25},
+ {"x": 5.25, "y": 4.25},
+ {"x": 6.25, "y": 4.25},
+ {"x": 7.25, "y": 4.25},
+ {"x": 8.25, "y": 4.25},
+ {"x": 9.25, "y": 4.25},
+ {"x": 10.25, "y": 4.25},
+ {"x": 11.25, "y": 4.25},
+ {"x": 12.25, "y": 4.25},
+ {"x": 13.25, "y": 4.25, "w": 1.75},
+ {"x": 16.25, "y": 4.25},
+ {"x": 18.5, "y": 4.25},
+ {"x": 19.5, "y": 4.25},
+ {"x": 20.5, "y": 4.25},
+ {"x": 21.5, "y": 4.25, "h": 2},
+
+ {"x": 0, "y": 5.25, "w": 1.25},
+ {"x": 1.25, "y": 5.25, "w": 1.25},
+ {"x": 2.5, "y": 5.25, "w": 1.25},
+ {"x": 3.75, "y": 5.25, "w": 1.25},
+ {"x": 5, "y": 5.25, "w": 3.25},
+ {"x": 8.25, "y": 5.25, "w": 1.25},
+ {"x": 9.5, "y": 5.25, "w": 1.25},
+ {"x": 10.75, "y": 5.25},
+ {"x": 11.75, "y": 5.25},
+ {"x": 12.75, "y": 5.25},
+ {"x": 13.75, "y": 5.25, "w": 1.25},
+ {"x": 15.25, "y": 5.25},
+ {"x": 16.25, "y": 5.25},
+ {"x": 17.25, "y": 5.25},
+ {"x": 18.5, "y": 5.25, "w": 2},
+ {"x": 20.5, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/fullsize_jis/layout.json b/layouts/default/fullsize_jis/layout.json
new file mode 100644
index 00000000000..e8caad88788
--- /dev/null
+++ b/layouts/default/fullsize_jis/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","","",{x:0.25},"","","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","","",{x:0.25},"","","",{h:2},""],
+[{w:1.75},"","","","","","","","","","","","","",{x:4.75},"","",""],
+[{w:2.25},"","","","","","","","","","","","",{w:1.75},"",{x:1.25},"",{x:1.25},"","","",{h:2},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.25},"",{w:1.25},"",{w:1.25},"","","","",{w:1.25},"",{x:0.25},"","","",{x:0.25,w:2},"",""]
diff --git a/layouts/default/fullsize_jis/readme.md b/layouts/default/fullsize_jis/readme.md
new file mode 100644
index 00000000000..93853251572
--- /dev/null
+++ b/layouts/default/fullsize_jis/readme.md
@@ -0,0 +1,3 @@
+# fullsize_jis
+
+ LAYOUT_fullsize_jis
diff --git a/layouts/default/readme.md b/layouts/default/readme.md
index a728d93d1a2..439613911ac 100644
--- a/layouts/default/readme.md
+++ b/layouts/default/readme.md
@@ -154,6 +154,21 @@ LAYOUT_60_iso_tsangan
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
```
+```
+LAYOUT_60_jis
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤
+│ │ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘
+```
+
```
LAYOUT_60_tsangan_hhkb
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
@@ -623,6 +638,24 @@ LAYOUT_tkl_iso_tsangan_split_bs_rshift
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘
```
+```
+LAYOUT_tkl_jis
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘ └───┴───┴───┘
+```
+
```
LAYOUT_tkl_f13_ansi
┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
@@ -767,6 +800,25 @@ LAYOUT_tkl_f13_iso_tsangan_split_bs_rshift
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘└───┴───┴───┘
```
+```
+LAYOUT_tkl_f13_jis
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ ││ │ │ │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │└───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ ││ │ │ │
+└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘└───┴───┴───┘
+
+```
+
```
LAYOUT_tkl_nofrow_ansi
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
@@ -872,6 +924,23 @@ LAYOUT_fullsize_iso
└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
```
+```
+LAYOUT_fullsize_jis
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘ ├───┼───┼───┤ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐ ├───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┼───┴┬──┴─┬─┴─┬─┴─┬─┴─┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────┴────────────┴────┴────┴───┴───┴───┴────┘ └───┴───┴───┘ └───────┴───┴───┘
+```
### Split Layouts
diff --git a/layouts/default/tkl_f13_jis/default_tkl_f13_jis/keymaps.c b/layouts/default/tkl_f13_jis/default_tkl_f13_jis/keymaps.c
new file mode 100644
index 00000000000..ec5c35cb542
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/default_tkl_f13_jis/keymaps.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+ * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13││PSc│Scr│Pse│
+ * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
+ * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp││Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ ││Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│└───┴───┴───┘
+ * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │ │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt │GUI │Ctrl││ ← │ ↓ │ → │
+ * └────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘└───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_f13_jis(
+ 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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, 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_INT1, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_f13_jis/info.json b/layouts/default/tkl_f13_jis/info.json
new file mode 100644
index 00000000000..97f5bd3880e
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/info.json
@@ -0,0 +1,108 @@
+{
+ "keyboard_name": "Tenkeyless JIS layout with F13 key",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_f13_jis": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1.25, "y": 0},
+ {"x": 2.25, "y": 0},
+ {"x": 3.25, "y": 0},
+ {"x": 4.25, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.75, "y": 0},
+ {"x": 10.75, "y": 0},
+ {"x": 11.75, "y": 0},
+ {"x": 12.75, "y": 0},
+ {"x": 14, "y": 0},
+ {"x": 15.25, "y": 0},
+ {"x": 16.25, "y": 0},
+ {"x": 17.25, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+ {"x": 4, "y": 1.25},
+ {"x": 5, "y": 1.25},
+ {"x": 6, "y": 1.25},
+ {"x": 7, "y": 1.25},
+ {"x": 8, "y": 1.25},
+ {"x": 9, "y": 1.25},
+ {"x": 10, "y": 1.25},
+ {"x": 11, "y": 1.25},
+ {"x": 12, "y": 1.25},
+ {"x": 13, "y": 1.25},
+ {"x": 14, "y": 1.25},
+ {"x": 15.25, "y": 1.25},
+ {"x": 16.25, "y": 1.25},
+ {"x": 17.25, "y": 1.25},
+ {"x": 0, "y": 2.25, "w": 1.5},
+
+ {"x": 1.5, "y": 2.25},
+ {"x": 2.5, "y": 2.25},
+ {"x": 3.5, "y": 2.25},
+ {"x": 4.5, "y": 2.25},
+ {"x": 5.5, "y": 2.25},
+ {"x": 6.5, "y": 2.25},
+ {"x": 7.5, "y": 2.25},
+ {"x": 8.5, "y": 2.25},
+ {"x": 9.5, "y": 2.25},
+ {"x": 10.5, "y": 2.25},
+ {"x": 11.5, "y": 2.25},
+ {"x": 12.5, "y": 2.25},
+ {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"x": 15.25, "y": 2.25},
+ {"x": 16.25, "y": 2.25},
+ {"x": 17.25, "y": 2.25},
+
+ {"x": 0, "y": 3.25, "w": 1.75},
+ {"x": 1.75, "y": 3.25},
+ {"x": 2.75, "y": 3.25},
+ {"x": 3.75, "y": 3.25},
+ {"x": 4.75, "y": 3.25},
+ {"x": 5.75, "y": 3.25},
+ {"x": 6.75, "y": 3.25},
+ {"x": 7.75, "y": 3.25},
+ {"x": 8.75, "y": 3.25},
+ {"x": 9.75, "y": 3.25},
+ {"x": 10.75, "y": 3.25},
+ {"x": 11.75, "y": 3.25},
+ {"x": 12.75, "y": 3.25},
+
+ {"x": 0, "y": 4.25, "w": 2.25},
+ {"x": 2.25, "y": 4.25},
+ {"x": 3.25, "y": 4.25},
+ {"x": 4.25, "y": 4.25},
+ {"x": 5.25, "y": 4.25},
+ {"x": 6.25, "y": 4.25},
+ {"x": 7.25, "y": 4.25},
+ {"x": 8.25, "y": 4.25},
+ {"x": 9.25, "y": 4.25},
+ {"x": 10.25, "y": 4.25},
+ {"x": 11.25, "y": 4.25},
+ {"x": 12.25, "y": 4.25},
+ {"x": 13.25, "y": 4.25, "w": 1.75},
+ {"x": 16.25, "y": 4.25},
+
+ {"x": 0, "y": 5.25, "w": 1.25},
+ {"x": 1.25, "y": 5.25, "w": 1.25},
+ {"x": 2.5, "y": 5.25, "w": 1.25},
+ {"x": 3.75, "y": 5.25, "w": 1.25},
+ {"x": 5, "y": 5.25, "w": 3.75},
+ {"x": 8.75, "y": 5.25, "w": 1.25},
+ {"x": 10, "y": 5.25, "w": 1.25},
+ {"x": 11.25, "y": 5.25, "w": 1.25},
+ {"x": 12.5, "y": 5.25, "w": 1.25},
+ {"x": 13.75, "y": 5.25, "w": 1.25},
+ {"x": 15.25, "y": 5.25},
+ {"x": 16.25, "y": 5.25},
+ {"x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_f13_jis/layout.json b/layouts/default/tkl_f13_jis/layout.json
new file mode 100644
index 00000000000..8b20546b74a
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:2.25},"","","","","","","","","","","","",{w:1.75},"",{x:1.25},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.75},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_f13_jis/readme.md b/layouts/default/tkl_f13_jis/readme.md
new file mode 100644
index 00000000000..cc49ffd8301
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/readme.md
@@ -0,0 +1,3 @@
+# tkl_f13_jis
+
+ LAYOUT_tkl_f13_jis
diff --git a/layouts/default/tkl_jis/default_tkl_jis/keymap.c b/layouts/default/tkl_jis/default_tkl_jis/keymap.c
new file mode 100644
index 00000000000..c60165afcb2
--- /dev/null
+++ b/layouts/default/tkl_jis/default_tkl_jis/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘
+ * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │ │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤ ┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt │GUI │Ctrl│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_jis(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, 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_INT1, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_jis/info.json b/layouts/default/tkl_jis/info.json
new file mode 100644
index 00000000000..513852193a5
--- /dev/null
+++ b/layouts/default/tkl_jis/info.json
@@ -0,0 +1,107 @@
+{
+ "keyboard_name": "Tenkeyless JIS layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_jis": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+ {"x": 15.25, "y": 0},
+ {"x": 16.25, "y": 0},
+ {"x": 17.25, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+ {"x": 4, "y": 1.25},
+ {"x": 5, "y": 1.25},
+ {"x": 6, "y": 1.25},
+ {"x": 7, "y": 1.25},
+ {"x": 8, "y": 1.25},
+ {"x": 9, "y": 1.25},
+ {"x": 10, "y": 1.25},
+ {"x": 11, "y": 1.25},
+ {"x": 12, "y": 1.25},
+ {"x": 13, "y": 1.25},
+ {"x": 14, "y": 1.25},
+ {"x": 15.25, "y": 1.25},
+ {"x": 16.25, "y": 1.25},
+ {"x": 17.25, "y": 1.25},
+ {"x": 0, "y": 2.25, "w": 1.5},
+
+ {"x": 1.5, "y": 2.25},
+ {"x": 2.5, "y": 2.25},
+ {"x": 3.5, "y": 2.25},
+ {"x": 4.5, "y": 2.25},
+ {"x": 5.5, "y": 2.25},
+ {"x": 6.5, "y": 2.25},
+ {"x": 7.5, "y": 2.25},
+ {"x": 8.5, "y": 2.25},
+ {"x": 9.5, "y": 2.25},
+ {"x": 10.5, "y": 2.25},
+ {"x": 11.5, "y": 2.25},
+ {"x": 12.5, "y": 2.25},
+ {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"x": 15.25, "y": 2.25},
+ {"x": 16.25, "y": 2.25},
+ {"x": 17.25, "y": 2.25},
+
+ {"x": 0, "y": 3.25, "w": 1.75},
+ {"x": 1.75, "y": 3.25},
+ {"x": 2.75, "y": 3.25},
+ {"x": 3.75, "y": 3.25},
+ {"x": 4.75, "y": 3.25},
+ {"x": 5.75, "y": 3.25},
+ {"x": 6.75, "y": 3.25},
+ {"x": 7.75, "y": 3.25},
+ {"x": 8.75, "y": 3.25},
+ {"x": 9.75, "y": 3.25},
+ {"x": 10.75, "y": 3.25},
+ {"x": 11.75, "y": 3.25},
+ {"x": 12.75, "y": 3.25},
+
+ {"x": 0, "y": 4.25, "w": 2.25},
+ {"x": 2.25, "y": 4.25},
+ {"x": 3.25, "y": 4.25},
+ {"x": 4.25, "y": 4.25},
+ {"x": 5.25, "y": 4.25},
+ {"x": 6.25, "y": 4.25},
+ {"x": 7.25, "y": 4.25},
+ {"x": 8.25, "y": 4.25},
+ {"x": 9.25, "y": 4.25},
+ {"x": 10.25, "y": 4.25},
+ {"x": 11.25, "y": 4.25},
+ {"x": 12.25, "y": 4.25},
+ {"x": 13.25, "y": 4.25, "w": 1.75},
+ {"x": 16.25, "y": 4.25},
+
+ {"x": 0, "y": 5.25, "w": 1.25},
+ {"x": 1.25, "y": 5.25, "w": 1.25},
+ {"x": 2.5, "y": 5.25, "w": 1.25},
+ {"x": 3.75, "y": 5.25, "w": 1.25},
+ {"x": 5, "y": 5.25, "w": 3.75},
+ {"x": 8.75, "y": 5.25, "w": 1.25},
+ {"x": 10, "y": 5.25, "w": 1.25},
+ {"x": 11.25, "y": 5.25, "w": 1.25},
+ {"x": 12.5, "y": 5.25, "w": 1.25},
+ {"x": 13.75, "y": 5.25, "w": 1.25},
+ {"x": 15.25, "y": 5.25},
+ {"x": 16.25, "y": 5.25},
+ {"x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_jis/layout.json b/layouts/default/tkl_jis/layout.json
new file mode 100644
index 00000000000..c7a6833b75d
--- /dev/null
+++ b/layouts/default/tkl_jis/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:2.25},"","","","","","","","","","","","",{w:1.75},"",{x:1.25},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.75},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_jis/readme.md b/layouts/default/tkl_jis/readme.md
new file mode 100644
index 00000000000..59505a19664
--- /dev/null
+++ b/layouts/default/tkl_jis/readme.md
@@ -0,0 +1,5 @@
+# tkl_jis
+
+ LAYOUT_tkl_jis
+
+A standard JIS TKL layout.
diff --git a/lib/python/qmk/keyboard.py b/lib/python/qmk/keyboard.py
index 0c980faf2b8..235b62640c2 100644
--- a/lib/python/qmk/keyboard.py
+++ b/lib/python/qmk/keyboard.py
@@ -182,7 +182,7 @@ def render_layout(layout_data, render_ascii, key_labels=None):
if x >= 0.25 and w == 1.25 and h == 2:
render_key_isoenter(textpad, x, y, w, h, label, style)
- elif w == 2.25 and h == 2:
+ elif w == 1.5 and h == 2:
render_key_baenter(textpad, x, y, w, h, label, style)
else:
render_key_rect(textpad, x, y, w, h, label, style)
@@ -275,7 +275,7 @@ def render_key_baenter(textpad, x, y, w, h, label, style):
w = ceil(w * 4)
h = ceil(h * 3)
- label_len = w - 2
+ label_len = w + 1
label_leftover = label_len - len(label)
if len(label) > label_len:
@@ -292,9 +292,9 @@ def render_key_baenter(textpad, x, y, w, h, label, style):
lab_line = array('u', box_chars['v'] + label_middle + box_chars['v'])
bot_line = array('u', box_chars['bl'] + label_border_bottom + box_chars['br'])
- textpad[y][x + 3:x + w] = top_line
- textpad[y + 1][x + 3:x + w] = mid_line
- textpad[y + 2][x + 3:x + w] = mid_line
- textpad[y + 3][x:x + w] = crn_line
- textpad[y + 4][x:x + w] = lab_line
- textpad[y + 5][x:x + w] = bot_line
+ textpad[y][x:x + w] = top_line
+ textpad[y + 1][x:x + w] = mid_line
+ textpad[y + 2][x:x + w] = mid_line
+ textpad[y + 3][x - 3:x + w] = crn_line
+ textpad[y + 4][x - 3:x + w] = lab_line
+ textpad[y + 5][x - 3:x + w] = bot_line
diff --git a/lib/python/qmk/painter.py b/lib/python/qmk/painter.py
index 48310c89616..381a9964431 100644
--- a/lib/python/qmk/painter.py
+++ b/lib/python/qmk/painter.py
@@ -191,6 +191,12 @@ def convert_requested_format(im, format):
return im
+def rgb_to565(r, g, b):
+ msb = ((r >> 3 & 0x1F) << 3) + (g >> 5 & 0x07)
+ lsb = ((g >> 2 & 0x07) << 5) + (b >> 3 & 0x1F)
+ return [msb, lsb]
+
+
def convert_image_bytes(im, format):
"""Convert the supplied image to the equivalent bytes required by the QMK firmware.
"""
@@ -248,41 +254,25 @@ def convert_image_bytes(im, format):
if image_format == 'IMAGE_FORMAT_RGB565':
# Take the red, green, and blue channels
- image_bytes_red = im.tobytes("raw", "R")
- image_bytes_green = im.tobytes("raw", "G")
- image_bytes_blue = im.tobytes("raw", "B")
- image_pixels_len = len(image_bytes_red)
+ red = im.tobytes("raw", "R")
+ green = im.tobytes("raw", "G")
+ blue = im.tobytes("raw", "B")
# No palette
palette = None
- bytearray = []
- for x in range(image_pixels_len):
- # 5 bits of red, 3 MSb of green
- byte = ((image_bytes_red[x] >> 3 & 0x1F) << 3) + (image_bytes_green[x] >> 5 & 0x07)
- bytearray.append(byte)
- # 3 LSb of green, 5 bits of blue
- byte = ((image_bytes_green[x] >> 2 & 0x07) << 5) + (image_bytes_blue[x] >> 3 & 0x1F)
- bytearray.append(byte)
+ bytearray = [byte for r, g, b in zip(red, green, blue) for byte in rgb_to565(r, g, b)]
if image_format == 'IMAGE_FORMAT_RGB888':
# Take the red, green, and blue channels
- image_bytes_red = im.tobytes("raw", "R")
- image_bytes_green = im.tobytes("raw", "G")
- image_bytes_blue = im.tobytes("raw", "B")
- image_pixels_len = len(image_bytes_red)
+ red = im.tobytes("raw", "R")
+ green = im.tobytes("raw", "G")
+ blue = im.tobytes("raw", "B")
# No palette
palette = None
- bytearray = []
- for x in range(image_pixels_len):
- byte = image_bytes_red[x]
- bytearray.append(byte)
- byte = image_bytes_green[x]
- bytearray.append(byte)
- byte = image_bytes_blue[x]
- bytearray.append(byte)
+ bytearray = [byte for r, g, b in zip(red, green, blue) for byte in (r, g, b)]
if len(bytearray) != expected_byte_count:
raise Exception(f"Wrong byte count, was {len(bytearray)}, expected {expected_byte_count}")
diff --git a/platforms/chibios/drivers/usbpd_stm32g4.c b/platforms/chibios/drivers/usbpd_stm32g4.c
index 0096f22f077..21b8f6db95a 100644
--- a/platforms/chibios/drivers/usbpd_stm32g4.c
+++ b/platforms/chibios/drivers/usbpd_stm32g4.c
@@ -22,8 +22,6 @@
// Initialises the USBPD subsystem
__attribute__((weak)) void usbpd_init(void) {
- // Disable dead-battery signals
- PWR->CR3 |= PWR_CR3_UCPD_DBDIS;
// Enable the clock for the UCPD1 peripheral
RCC->APB1ENR2 |= RCC_APB1ENR2_UCPD1EN;
@@ -46,6 +44,11 @@ __attribute__((weak)) void usbpd_init(void) {
CR |= UCPD_CR_ANAMODE | UCPD_CR_CCENABLE_Msk;
// Apply the changes
UCPD1->CR = CR;
+
+ // Disable dead-battery signals only after UCPD1 is configured to ensure
+ // that the transition does not go through any intermediate state without
+ // any pull-down resistance.
+ PWR->CR3 |= PWR_CR3_UCPD_DBDIS;
}
// Gets the current state of the USBPD allowance
diff --git a/users/mattly/mattly.c b/users/mattly/mattly.c
index afb1c75df14..9e8e7cfc976 100644
--- a/users/mattly/mattly.c
+++ b/users/mattly/mattly.c
@@ -31,6 +31,9 @@ void layer_state_set_rgb(layer_state_t state) {
case _NAVNUM_WIN:
rgblight_sethsv_noeeprom(HSV_NAVNUM);
break;
+ case _GAME:
+ rgblight_sethsv_noeeprom(HSV_GAME);
+ break;
case _FUNCT:
case _FUNCT_WIN:
rgblight_sethsv_noeeprom(HSV_FUNCT);
diff --git a/users/mattly/mattly.h b/users/mattly/mattly.h
index 5f6b7c5f092..2a151939b87 100644
--- a/users/mattly/mattly.h
+++ b/users/mattly/mattly.h
@@ -25,12 +25,14 @@ enum {
_NAVNUM,
_NAVNUM_WIN,
_SYMBOL,
+ _GAME,
_FUNCT,
_FUNCT_WIN,
};
// == System
#define TOG_WIN TG(_OVER_WIN)
+#define TOG_GAM TG(_GAME)
// == Thumbs
// left hand
@@ -47,68 +49,73 @@ enum {
#define NAVLOCK TG(_NAVNUM)
#define SYMLOCK TG(_SYMBOL)
-
// == QWERTY
// left hand home row
-#define A_CTL MT(MOD_LCTL, KC_A)
-#define A_GUI MT(MOD_LGUI, KC_A)
-#define S_ALT MT(MOD_LALT, KC_S)
-#define D_GUI MT(MOD_LGUI, KC_D)
-#define D_CTL MT(MOD_LCTL, KC_D)
-#define F_SFT MT(MOD_LSFT, KC_F)
+#define A_CTL MT(MOD_LCTL, KC_A)
+#define A_GUI MT(MOD_LGUI, KC_A)
+#define S_ALT MT(MOD_LALT, KC_S)
+#define D_GUI MT(MOD_LGUI, KC_D)
+#define D_CTL MT(MOD_LCTL, KC_D)
+#define F_SFT MT(MOD_LSFT, KC_F)
// left hand aux
-#define W_CTL MT(MOD_LCTL, KC_W)
-#define W_GUI MT(MOD_LGUI, KC_W)
-#define E_ALT MT(MOD_LALT, KC_E)
-#define R_GUI MT(MOD_LGUI, KC_R)
-#define R_CTL MT(MOD_LCTL, KC_R)
+#define W_CTL MT(MOD_LCTL, KC_W)
+#define W_GUI MT(MOD_LGUI, KC_W)
+#define E_ALT MT(MOD_LALT, KC_E)
+#define R_GUI MT(MOD_LGUI, KC_R)
+#define R_CTL MT(MOD_LCTL, KC_R)
// right hand home row
-#define J_SFT MT(MOD_RSFT, KC_J)
-#define K_GUI MT(MOD_RGUI, KC_K)
-#define K_CTL MT(MOD_RCTL, KC_K)
-#define L_ALT MT(MOD_RALT, KC_L)
+#define J_SFT MT(MOD_RSFT, KC_J)
+#define K_GUI MT(MOD_RGUI, KC_K)
+#define K_CTL MT(MOD_RCTL, KC_K)
+#define L_ALT MT(MOD_RALT, KC_L)
#define MINSCTL MT(MOD_RCTL, KC_MINS)
#define MINSGUI MT(MOD_RGUI, KC_MINS)
// right hand aux
-#define U_GUI MT(MOD_RGUI, KC_U)
-#define U_CTL MT(MOD_RCTL, KC_U)
-#define I_ALT MT(MOD_RALT, KC_I)
-#define O_CTL MT(MOD_RCTL, KC_O)
-#define O_GUI MT(MOD_RGUI, KC_O)
+#define U_GUI MT(MOD_RGUI, KC_U)
+#define U_CTL MT(MOD_RCTL, KC_U)
+#define I_ALT MT(MOD_RALT, KC_I)
+#define O_CTL MT(MOD_RCTL, KC_O)
+#define O_GUI MT(MOD_RGUI, KC_O)
// == OS X default keys
-// movement by word
+// movement by text
#define M_BWORD LALT(KC_LEFT)
#define W_BWORD LCTL(KC_LEFT)
#define M_FWORD LALT(KC_RIGHT)
#define W_FWORD LCTL(KC_RIGHT)
+#define M_BLINE LGUI(KC_LEFT)
+#define M_ELINE LGUI(KC_RIGHT)
+
+#define M_BPARA LOPT(KC_UP)
+#define M_NPARA LOPT(KC_DOWN)
+
// gui navigation
-#define M_NXWIN LGUI(KC_GRV) // Next Window
+#define M_NXWIN LGUI(KC_GRV) // Next Window
#define W_NXWIN LALT(KC_TAB)
-#define M_PVWIN LGUI(LSFT(KC_GRV)) // Prev Window
+#define M_PVWIN LGUI(LSFT(KC_GRV)) // Prev Window
#define W_PVWIN LALT(LSFT(KC_TAB))
-#define M_NXTAB LGUI(LSFT(KC_RBRC)) // Next Tab
+#define M_NXTAB LGUI(LSFT(KC_RBRC)) // Next Tab
#define W_NXTAB LCTL(KC_PGDN)
-#define M_PVTAB LGUI(LSFT(KC_LBRC)) // Prev Tab
+#define M_PVTAB LGUI(LSFT(KC_LBRC)) // Prev Tab
#define W_PVTAB LCTL(KC_PGUP)
-#define M_NAVBK LGUI(KC_LBRC) // Navigate Forward
+#define M_NAVBK LGUI(KC_LBRC) // Navigate Forward
#define W_NAVBK LALT(KC_LEFT)
-#define M_NAVFW LGUI(KC_RBRC) // Navigate Back
+#define M_NAVFW LGUI(KC_RBRC) // Navigate Back
#define W_NAVFW LALT(KC_RIGHT)
// == UNDERGLOW
#ifdef RGBLIGHT_ENABLE
-#define HSV_CAPS 55, 255, 255
-#define HSV_ERR 30, 196, 196
-#define HSV_MAC 20, 255, 128
-#define HSV_WIN 10, 255, 128
-#define HSV_SYMBOL 235, 255, 255
-#define HSV_NAVNUM 250, 255, 255
-#define HSV_FUNCT 210, 255, 255
-#define HSV_RESET 180, 255, 255
+#define HSV_CAPS 55, 255, 255
+#define HSV_ERR 0, 255, 96
+#define HSV_MAC 250, 255, 192
+#define HSV_WIN 250, 192, 128
+#define HSV_SYMBOL 235, 255, 255
+#define HSV_NAVNUM 20, 255, 255
+#define HSV_GAME 40, 255, 255
+#define HSV_FUNCT 200, 255, 255
+#define HSV_RESET 180, 255, 255
#endif
#endif
-
diff --git a/users/mattly/rules.mk b/users/mattly/rules.mk
index 85cdcc91f00..96f07658253 100644
--- a/users/mattly/rules.mk
+++ b/users/mattly/rules.mk
@@ -1,3 +1,4 @@
SRC += mattly.c
LTO_ENABLE = yes
CONSOLE_ENABLE = yes
+RGB_MATRIX_ENABLE = no
diff --git a/users/miketronic/config.h b/users/miketronic/config.h
new file mode 100644
index 00000000000..4123caa5bc6
--- /dev/null
+++ b/users/miketronic/config.h
@@ -0,0 +1,12 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+
+#define DEBOUNCE 10
+#if defined(TAP_DANCE_ENABLE)
+# define TAP_CODE_DELAY 5
+# define TAP_HOLD_CAPS_DELAY 25
+#endif
+#define MACRO_TIMER 5
+#define ENABLE_COMPILE_KEYCODE
\ No newline at end of file
diff --git a/users/miketronic/miketronic.c b/users/miketronic/miketronic.c
new file mode 100644
index 00000000000..3c47a72462f
--- /dev/null
+++ b/users/miketronic/miketronic.c
@@ -0,0 +1,17 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+
+
+__attribute__ ((weak)) void keyboard_post_init_keymap(void) { }
+
+// Init effect for RGB boards only
+void keyboard_post_init_user(void) {
+#ifdef RGB_MATRIX_ENABLE
+ rgblight_enable_noeeprom(); // enables Rgb, without saving settings
+ rgblight_sethsv_noeeprom(HSV_ORANGE); // sets the color without saving
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
+#endif
+ keyboard_post_init_keymap();
+}
\ No newline at end of file
diff --git a/users/miketronic/miketronic.h b/users/miketronic/miketronic.h
new file mode 100644
index 00000000000..4032215a1d7
--- /dev/null
+++ b/users/miketronic/miketronic.h
@@ -0,0 +1,63 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+#include QMK_KEYBOARD_H
+
+#include "quantum.h"
+#include "wrappers.h"
+#include "action.h"
+#include "version.h"
+#include "process_records.h"
+#ifdef TAP_DANCE_ENABLE
+# include "tapdances.h"
+#endif
+
+enum layer_names {
+ _WM,
+ _QW,
+ _LOWER,
+ _RAISE,
+ _EX,
+ _FN,
+ _SYMB
+};
+
+
+// Layer macros
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define FN MO(_FN)
+#define EX MO(_EX)
+#define TEX LT(_EX, KC_T) // Tap for "T", hold for Extras layer
+#define BSYM LT(_SYMB, KC_B) // Tap for "B", hold for Symbols layer
+#define JSYM LT(_SYMB, KC_J) // Tap for "J", hold for Symbols layer
+#define FNZ LT(_FN, KC_Z) // Tap for "Z", hold for FN layer
+#define VLOWER LT(_LOWER, KC_V) // Tap for "V", hold for Lower layer
+#define KRAISE LT(_RAISE, KC_K) // Tap for "K", hold for Raise layer
+
+// Mod Tap
+//#define ASFT MT(MOD_LSFT, KC_A) // Tap for "A", hold for Shift
+#define ASFT SFT_T(KC_A) // Tap for "A", hold for Shift
+#define GGUI MT(MOD_LGUI, KC_G) // Tap for "G", hold for OS Key
+#define MGUI MT(MOD_LGUI, KC_M) // Tap for "M", hold for OS Key
+#define CTRLX MT(MOD_LCTL, KC_X) // Tap for "X", hold for Ctrl
+#define CALT MT(MOD_LALT, KC_C) // Tap for "C", hold for Alt
+#define L_ALT MT(MOD_RALT, KC_L) // Tap for "L", hold for Alt
+#define TBSHFT MT(MOD_LSFT, KC_TAB) // Tap for Tab, hold for Shift
+#define SLSHFT MT(MOD_RSFT, KC_SLSH) // Tap for Slash, hold for Shift
+#define SFT_ENT RSFT_T(KC_ENT) // Tap for Enter, hold for Shift
+#define OSSFT OSM(MOD_LSFT) // One shot left Shift
+
+// MISC
+#define CALTDEL LCTL(LALT(KC_DEL)) // Ctrl Alt Del
+#define TSKMGR LCTL(LSFT(KC_ESC)) // Task Manager
+#define CLIP LCTL(LALT(KC_Q)) // Clipboard (Ditto)
+#define SS LCTL(LALT(KC_G)) // Greenshot region
+#define NUM LSFT(KC_3)
+#define AT LSFT(KC_2)
+#define COPY LCTL(KC_C)
+#define PASTE LCTL(KC_V)
+#define ____ KC_TRNS
+#define XXXX KC_NO
+#define XXXXXXX KC_NO
diff --git a/users/miketronic/process_records.c b/users/miketronic/process_records.c
new file mode 100644
index 00000000000..5c60ddf1003
--- /dev/null
+++ b/users/miketronic/process_records.c
@@ -0,0 +1,151 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+#include "process_records.h"
+
+__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+__attribute__((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ switch (keycode) {
+ case VERSION:
+ if (!record->event.pressed) {
+ send_string_with_delay_P(PSTR(QMK_KEYBOARD ":" QMK_KEYMAP "\nVersion:" QMK_VERSION ", built: " QMK_BUILDDATE "\n"), MACRO_TIMER);
+ }
+ break;
+
+ case M01:
+ if (record->event.pressed) {
+ SEND_STRING("//a11");
+ }
+ break;
+
+ case M02:
+ if (record->event.pressed) {
+ SEND_STRING("//a12");
+ }
+ break;
+
+ case M03:
+ if (record->event.pressed) {
+ SEND_STRING("//a08");
+ }
+ break;
+
+ case M04:
+ if (record->event.pressed) {
+ SEND_STRING("//a09");
+ }
+ break;
+
+ case M05:
+ if (record->event.pressed) {
+ SEND_STRING("//th");
+ }
+ break;
+
+ case M06:
+ if (record->event.pressed) {
+ SEND_STRING("//re");
+ }
+ break;
+
+ case M07:
+ if (record->event.pressed) {
+ SEND_STRING("//yw");
+ }
+ break;
+
+ case M08:
+ if (record->event.pressed) {
+ tap_random_base64();
+ }
+ break;
+
+ case CCCV: // One key copy/paste
+ if (record->event.pressed) {
+ copy_paste_timer = timer_read();
+ } else {
+ if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
+ tap_code16(LCTL(KC_C));
+ } else { // Tap, paste
+ tap_code16(LCTL(KC_V));
+ }
+ }
+ break;
+
+ case IENTER: // Tap for letter "i", slight hold for "enter"
+ if (record->event.pressed) {
+ copy_paste_timer = timer_read();
+ } else {
+ if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, enter
+ tap_code16(KC_ENT);
+ } else { // Tap, "i"
+ tap_code16(KC_I);
+ }
+ }
+ break;
+
+ case PRN:
+ if (record->event.pressed) {
+ SEND_STRING("()");
+ tap_code(KC_LEFT);
+ }
+ break;
+
+ case BRACES:
+ if (record->event.pressed) {
+ uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
+ if (shifted) {
+ unregister_code(KC_LSFT);
+ unregister_code(KC_RSFT);
+ SEND_STRING("<>"SS_TAP(X_LEFT));
+ }
+ else {
+ SEND_STRING("[]"SS_TAP(X_LEFT));
+ }
+ }
+ break;
+
+#if defined(RGBLIGHT_ENABLE)
+ case RGB1:
+ if (record->event.pressed) {
+ rgblight_sethsv_noeeprom(HSV_BLUE);
+ }
+ break;
+
+ case RGB2:
+ if (record->event.pressed) {
+ rgblight_sethsv_noeeprom(HSV_RED);
+ }
+ break;
+
+ case RGB3:
+ if (record->event.pressed) {
+ rgblight_sethsv_noeeprom(HSV_ORANGE);
+ }
+ break;
+
+ case RGB4:
+ if (record->event.pressed) {
+ rgblight_sethsv_noeeprom(HSV_WHITE);
+ }
+ break;
+
+ case RGB5:
+ if (record->event.pressed) {
+ rgblight_sethsv_noeeprom(HSV_GREEN);
+ }
+ break;
+#endif
+ }
+ return process_record_keymap(keycode, record) && process_record_secrets(keycode, record);
+}
diff --git a/users/miketronic/process_records.h b/users/miketronic/process_records.h
new file mode 100644
index 00000000000..17737490a17
--- /dev/null
+++ b/users/miketronic/process_records.h
@@ -0,0 +1,38 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+#include "miketronic.h"
+
+
+bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
+uint16_t copy_paste_timer;
+
+enum custom_keycodes {
+ WM = QK_USER,
+ QW,
+ MAKE,
+ VERSION,
+ M01,
+ M02,
+ M03,
+ M04,
+ M05,
+ M06,
+ M07,
+ M08,
+ M09,
+ M10,
+ M11,
+ M12,
+ RGB1,
+ RGB2,
+ RGB3,
+ RGB4,
+ RGB5,
+ IENTER,
+ PRN,
+ BRACES,
+ CCCV
+};
diff --git a/users/miketronic/readme.md b/users/miketronic/readme.md
new file mode 100644
index 00000000000..619a84ec2e6
--- /dev/null
+++ b/users/miketronic/readme.md
@@ -0,0 +1,25 @@
+Copyright 2023 @miketronic -- Mike B
+SPDX-License-Identifier: GPL-2.0+
+
+# Layout for ortho 4x12 and 3x10 boards
+# My current daily drivers: Planck, Pi40 and Satpad
+
+**Objective:** I tried to make layouts with core functions that are able to be present on the 3x10 boards and adapt those to the "middle 3x10" of the 4x12 boards to make going back and forth between the two board sizes easier.
+
+
+##### My Main Layer - Workman
+
+| | | | | | | | | | | | |
+| ---- |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| ----:|
+| Tab/Esc | Q/Esc | D | R | W | B/SYM | J/SYM | F | U | P | BSPC | BSPC |
+| Tab/Shift | A | S | H | T/EX | G | Y | N | E | O | I/Enter | Enter|
+| Shft | Z | X | M | C | V | K | L | Spc/, | Spc/. | / | Up/Right |
+| FN | Ctrl | OS | Alt |Lower | Spc/Enter |Spc/Enter |Raise | SS| Clip | CopyPaste | Dn/Left |
+
+SYM - Symbols layer on hold
+FN - Function layer on hold
+EX - Extras layer on hold
+Clip - Macro to my clipboard app (Ditto)
+SS - Greenshot screenshot region
+
+##### Will add the other layers as I find time
\ No newline at end of file
diff --git a/users/miketronic/rules.mk b/users/miketronic/rules.mk
new file mode 100644
index 00000000000..bbd3e4131e0
--- /dev/null
+++ b/users/miketronic/rules.mk
@@ -0,0 +1,4 @@
+SRC += miketronic.c process_records.c
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+ SRC += $(USER_PATH)/tapdances.c
+endif
diff --git a/users/miketronic/tapdances.c b/users/miketronic/tapdances.c
new file mode 100644
index 00000000000..5fcf66062b1
--- /dev/null
+++ b/users/miketronic/tapdances.c
@@ -0,0 +1,33 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+#include "tapdances.h"
+
+
+tap_dance_action_t tap_dance_actions[] = {
+
+ [T_BRC] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), // Tap once for Left Brace, twice for Right Brace
+ [T_MIN] = ACTION_TAP_DANCE_DOUBLE(KC_MINUS, KC_EQUAL), // Minus, Equals
+ [T_UMIN] = ACTION_TAP_DANCE_DOUBLE(KC_UNDS, KC_MINS), // Underscore, Minus
+ [T_GESC] = ACTION_TAP_DANCE_DOUBLE(KC_GRAVE, KC_ESCAPE), // Grave, Escape
+ [T_SE] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT), // Space, Enter
+ [T_MULTDIV] = ACTION_TAP_DANCE_DOUBLE(KC_PAST, KC_PSLS), // Multiply, Divide
+ [T_UR] = ACTION_TAP_DANCE_DOUBLE(KC_UP, KC_RGHT), // Up, Right
+ [T_DL] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN, KC_LEFT), // Down, Left
+ [T_CP] = ACTION_TAP_DANCE_DOUBLE(LCTL(KC_C), LCTL(KC_V)), // Copy, Paste
+ [T_DENT] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_ENT), // Dot, Enter
+ [T_IENT] = ACTION_TAP_DANCE_DOUBLE(KC_I, KC_ENT), // "I", Enter
+ [T_CSPC] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_COMM), // Space, Comma
+ [T_DSPC] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_DOT), // Space, Dot
+ [T_QEXC] = ACTION_TAP_DANCE_DOUBLE(KC_QUES, KC_EXLM), // "?", "!"
+ [T_QESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC), // "q", Escape
+ [T_TE] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_ESC), // Tab, Escape
+ [T_20] = ACTION_TAP_DANCE_DOUBLE(KC_2, KC_0), // "2", "0"
+ [T_SL] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_BSLS), // Slash, Backslash
+ [T_XX] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_RPRN), // Left Paren, Right Paren
+ [T_YY] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), // Left Bracket, Right Bracket
+ [T_ATH] = ACTION_TAP_DANCE_DOUBLE(KC_AT, KC_HASH), // "@", "#"
+ [T_PRAM] = ACTION_TAP_DANCE_DOUBLE(KC_PERC, KC_AMPR) // "%", "&"
+};
+
diff --git a/users/miketronic/tapdances.h b/users/miketronic/tapdances.h
new file mode 100644
index 00000000000..8135bac2695
--- /dev/null
+++ b/users/miketronic/tapdances.h
@@ -0,0 +1,57 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+#include "quantum.h"
+
+
+#define TD_BRC TD(T_BRC)
+#define TD_ATH TD(T_ATH)
+#define TD_CSPC TD(T_CSPC)
+#define TD_DSPC TD(T_DSPC)
+#define TD_CP TD(T_CP)
+#define TD_DENT TD(T_DENT)
+#define TD_IENT TD(T_IENT)
+#define TD_MIN TD(T_MIN)
+#define TD_UMIN TD(T_UMIN)
+#define TD_GESC TD(T_GESC)
+#define TD_QESC TD(T_QESC)
+#define TD_QEXC TD(T_QEXC)
+#define TD_PRAM TD(T_PRAM)
+#define TD_SE TD(T_SE)
+#define TD_MD TD(T_MULTDIV)
+#define TD_UR TD(T_UR)
+#define TD_DL TD(T_DL)
+#define TD_TE TD(T_TE)
+#define TD_20 TD(T_20)
+#define TD_SL TD(T_SL)
+#define TD_XX TD(T_XX)
+#define TD_YY TD(T_YY)
+
+
+
+// Tap Dance
+enum tapdance_id{
+ T_BRC = 0,
+ T_ATH,
+ T_CSPC,
+ T_DSPC,
+ T_CP,
+ T_DENT,
+ T_IENT,
+ T_MIN,
+ T_UMIN,
+ T_GESC,
+ T_QESC,
+ T_QEXC,
+ T_SE,
+ T_MULTDIV,
+ T_UR,
+ T_DL,
+ T_TE,
+ T_20,
+ T_SL,
+ T_XX,
+ T_YY,
+ T_PRAM
+};
\ No newline at end of file
diff --git a/users/miketronic/wrappers.h b/users/miketronic/wrappers.h
new file mode 100644
index 00000000000..7d955f4172a
--- /dev/null
+++ b/users/miketronic/wrappers.h
@@ -0,0 +1,226 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+#include "miketronic.h"
+
+/* Pattern adapted from users/drashna/wrapper.h
+ Define per-layout keymap sections. Also requires a wrapper.
+ Example:
+ #define LAYOUT_:name_wrapper(...) LAYOUT_:name(__VA_ARGS__)
+ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_MODS] = LAYOUT_:name _wrapper(
+ _______, ___________________BLANK___________________, ...
+ ...
+ ),
+ }
+*/
+
+
+// clang-format off
+# define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
+# define LAYOUT_planck_grid_wrapper(...) LAYOUT_planck_grid(__VA_ARGS__)
+#if (defined(KEYBOARD_hazel_satpad))
+# define LAYOUT_3x11_wrapper(...) LAYOUT(__VA_ARGS__)
+#endif
+#if (defined(KEYBOARD_mechwild_bde_rev2))
+# define LAYOUT_3x14_wrapper(...) LAYOUT(__VA_ARGS__)
+#endif
+#if (defined(KEYBOARD_hazel_bad_wings))
+# define LAYOUT_split_3x5_3_wrapper(...) LAYOUT_split_3x5_3(__VA_ARGS__)
+#endif
+#if (defined(KEYBOARD_idobao_id75_v1))
+# define LAYOUT_ortho_5x15_wrapper(...) LAYOUT_ortho_5x15(__VA_ARGS__)
+#endif
+
+
+#define _________NUMBER_01__________ KC_7, KC_8, KC_9
+#define _________NUMBER_02__________ KC_4, KC_5, KC_6
+#define _________NUMBER_03__________ KC_1, TD_20, KC_3
+
+
+
+#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
+#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
+#define _________________QWERTY_L3_________________ FNZ, KC_X, KC_C, VLOWER, KC_B
+
+#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
+#define _________________QWERTY_R2_________________ KC_H, KC_J, KRAISE, KC_L, KC_SCLN
+#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
+
+
+
+#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
+#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
+#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+
+#define ______________LONG_FUNC_LEFT_______________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6
+#define ______________LONG_FUNC_RIGHT______________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12
+
+#define _________________BLANK_5___________________ _______, _______, _______, _______, _______
+#define _________________BLANK_6___________________ _______, _______, _______, _______, _______, _______
+
+#define _________________LOWER_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
+#define _________________LOWER_L2__________________ _________________FUNC_LEFT_________________
+#define _________________LOWER_L3__________________ _________________FUNC_RIGHT________________
+
+#define _________________LOWER_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
+#define _________________LOWER_R2__________________ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
+#define _________________LOWER_R3__________________ _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+
+#define _______________LOWER_310_L1________________ PRN, BRACES, TD_SL, _______, _______
+#define _______________LOWER_310_L2________________ TD_ATH, TD_PRAM, _______, _______, _______
+#define _______________LOWER_310_L3________________ _______, _______, _______, _______, _______
+
+#define _______________LOWER_310_R1________________ _______, KC_7, KC_8, KC_9, _______
+#define _______________LOWER_310_R2________________ TD_DENT, KC_4, KC_5, KC_6, TD_UR
+#define _______________LOWER_310_R3________________ KC_0, KC_1, TD_20, KC_3, TD_DL
+
+#define _______________LOWER_412_L1________________ _______, PRN, BRACES, TD_SL, _______, _______
+#define _______________LOWER_412_L2________________ _______, TD_ATH, TD_PRAM, _______, _______, _______
+#define _______________LOWER_412_L3________________ _______, _______, _______, _______, _______, _______
+#define _______________LOWER_412_L4________________ _______, _______, _______, _______, _______, _______
+
+#define _______________LOWER_412_R1________________ _______, KC_7, KC_8, KC_9, _______, _______
+#define _______________LOWER_412_R2________________ TD_DENT, KC_4, KC_5, KC_6, _______, _______
+#define _______________LOWER_412_R3________________ KC_0, KC_1, TD_20, KC_3, _______, TD_UR
+#define _______________LOWER_412_R4________________ _______, _______, KC_BSPC, KC_SPC, TD_DENT, TD_DL
+
+
+
+#define _________________RAISE_L1__________________ ________________NUMBER_LEFT________________
+#define _________________RAISE_L2__________________ ___________________BLANK___________________
+#define _________________RAISE_L3__________________ ___________________BLANK___________________
+
+#define _________________RAISE_R1__________________ ________________NUMBER_RIGHT_______________
+#define _________________RAISE_R2__________________ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC
+#define _________________RAISE_R3__________________ _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+
+#define _______________RAISE_310_L1________________ QK_BOOT, DB_TOGG, _______, _______, QK_MAKE
+#define _______________RAISE_310_L2________________ KC_LSFT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD
+#define _______________RAISE_310_L3________________ _______, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD
+
+#define _______________RAISE_310_R1________________ _______, KC_F7, KC_F8, KC_F9, KC_F10
+#define _______________RAISE_310_R2________________ TD_UMIN, KC_F4, KC_F5, KC_F6, KC_F11
+#define _______________RAISE_310_R3________________ _______, KC_F1, KC_F2, KC_F3, KC_F12
+
+#define _______________RAISE_412_L1________________ QK_BOOT, DB_TOGG, _______, _______, _______, QK_MAKE
+#define _______________RAISE_412_L2________________ KC_LSFT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, WM
+#define _______________RAISE_412_L3________________ _______, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, QW
+
+#define _______________RAISE_412_R1________________ _______, _______, KC_F7, KC_F8, KC_F9, KC_F10
+#define _______________RAISE_412_R2________________ _______, _______, KC_F4, KC_F5, KC_F6, KC_F11
+#define _______________RAISE_412_R3________________ _______, TD_UMIN, KC_F1, KC_F2, KC_F3, KC_F12
+
+
+
+#define ______________EXTRAS_310_L1________________ KC_EXLM, _______, _______, _______, _______
+#define ______________EXTRAS_310_L2________________ KC_LSFT, _______, _______, _______, _______
+#define ______________EXTRAS_310_L3________________ _______, _______, _______, _______, _______
+
+#define ______________EXTRAS_310_R1________________ _______, TD_SL, PRN, BRACES, KC_SCLN
+#define ______________EXTRAS_310_R2________________ QK_LEAD, TD_ATH, TD_PRAM, _______, KC_QUOT
+#define ______________EXTRAS_310_R3________________ _______, _______, KC_COMM, KC_DOT, KC_QUES
+
+#define ______________EXTRAS_412_L1________________ _______, KC_EXLM, _______, _______, _______, _______
+#define ______________EXTRAS_412_L2________________ KC_LSFT, _______, _______, _______, _______, _______
+#define ______________EXTRAS_412_L3________________ _______, _______, _______, _______, _______, _______
+#define ______________EXTRAS_412_L4________________ _______, _______, _______, _______, _______, TD_SE
+
+#define ______________EXTRAS_412_R1________________ _______, TD_SL, PRN, BRACES, KC_SCLN, _______
+#define ______________EXTRAS_412_R2________________ QK_LEAD, TD_ATH, TD_PRAM, _______, KC_QUOT, _______
+#define ______________EXTRAS_412_R3________________ _______, _______, KC_COMM, KC_DOT, KC_QUES, _______
+#define ______________EXTRAS_412_R4________________ TD_SE, _______, _______, _______, _______, _______
+
+
+
+#define _____________FUNCTION_310_L1_______________ CCCV, CLIP, SS, _______, _______
+#define _____________FUNCTION_310_L2_______________ TBSHFT, M05, M06, M07, M08
+#define _____________FUNCTION_310_L3_______________ _______, M01, M02, M03, M04
+
+#define _____________FUNCTION_310_R1_______________ _______, TD_SL, KC_UP, _______, KC_DEL
+#define _____________FUNCTION_310_R2_______________ _______, KC_LEFT, KC_DOWN, KC_RGHT, TD_UR
+#define _____________FUNCTION_310_R3_______________ _______, _______, KC_COMM, KC_DOT, TD_DL
+
+#define _____________FUNCTION_412_L1_______________ CCCV, CLIP, SS, _______, _______, _______
+#define _____________FUNCTION_412_L2_______________ TBSHFT, M05, M06, M07, M08, _______
+#define _____________FUNCTION_412_L3_______________ _______, M01, M02, M03, M04, _______
+#define _____________FUNCTION_412_L4_______________ _______, RGB1, RGB2, RGB3, RGB4, _______
+
+#define _____________FUNCTION_412_R1_______________ _______, T_SL, KC_UP, _______, _______, KC_DEL
+#define _____________FUNCTION_412_R2_______________ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______
+#define _____________FUNCTION_412_R3_______________ _______, _______, KC_COMM, KC_DOT, KC_QUES, T_UR
+#define _____________FUNCTION_412_R4_______________ _______, _______, _______, _______, _______, T_DL
+
+#define ____________FUNCTION_ID75_TOP_R____________ M06, M07, M08, M09, M10, KC_DEL
+
+
+
+#define _____________SYMBOLS_310_L1________________ KC_DLR, KC_CIRC, KC_LABK, KC_RABK, ____
+#define _____________SYMBOLS_310_L2________________ KC_PERC, KC_COLN, KC_SCLN, KC_PLUS, KC_EQL
+#define _____________SYMBOLS_310_L3________________ KC_AMPR, KC_QUOT, KC_DQUO, KC_ASTR, KC_HASH
+
+#define _____________SYMBOLS_310_R1________________ ____, KC_PIPE, KC_LBRC, KC_RBRC, KC_MINS
+#define _____________SYMBOLS_310_R2________________ XXXX, XXXX, KC_LPRN, KC_RPRN, KC_UNDS
+#define _____________SYMBOLS_310_R3________________ KC_EXLM, KC_QUES, KC_SLSH, KC_BSLS, KC_AT
+
+
+
+#define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
+#define _________________ADJUST_L2_________________ MU_TOGG, CK_TOGG, AU_ON, AU_OFF, AG_NORM
+#define _________________ADJUST_L3_________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
+
+#define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
+#define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN
+#define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
+
+
+#define _________FOUR_001__________ KC_BSPC, M08, M08, KC_MUTE
+#define _________FOUR_002__________ KC_ENT, M08, PRN, TD_UR
+#define _________FOUR_003__________ KC_BSLS, TD_ATH, BRACES, TD_DL
+
+#define _________3KEY_LEFT___________ OSSFT, KC_SPC, LOWER
+#define _________3KEY_RIGHT__________ RAISE, KC_ENT, CCCV
+
+#define ________3KEY_ID75_01_________ OSSFT, QK_LEAD, LOWER
+#define ________3KEY_ID75_02_________ KC_7, KC_8, KC_9
+#define ________3KEY_ID75_03_________ KC_4, KC_5, KC_6
+#define ________3KEY_ID75_04_________ KC_1, TD_20, KC_3
+#define ________3KEY_ID75_05_________ KC_SPC, TD_DENT, KC_ENT
+
+
+#define _____________WORKMAN_310_001_L_____________ TD_QESC, KC_D, KC_R, KC_W, BSYM
+#define _____________WORKMAN_310_001_R_____________ JSYM, KC_F, KC_U, KC_P, KC_BSPC
+#define _____________WORKMAN_310_002_L_____________ ASFT, KC_S, KC_H, TEX, KC_G
+#define _____________WORKMAN_310_002_R_____________ KC_Y, KC_N, KC_E, KC_O, KC_I
+#define _____________WORKMAN_310_003_L_____________ FNZ, CTRLX, MGUI, CALT, VLOWER
+#define _____________WORKMAN_310_003_R_____________ KRAISE, KC_L, TD_CSPC, TD_DSPC, SFT_ENT
+#define _____________WORKMAN_310_004_L_____________ FN, KC_LCTL, KC_LGUI, KC_LALT, LOWER
+#define _____________WORKMAN_310_004_R_____________ RAISE, SS, CLIP, CCCV, FN
+
+#define _____________WORKMAN_410_003_L_____________ FNZ, KC_X, KC_M, KC_C, KC_V
+#define _____________WORKMAN_410_003_R_____________ KC_K, KC_L, TD_CSPC, TD_DSPC, SFT_ENT
+
+#define _____________WORKMAN_311_001_L_____________ TD_QESC, KC_D, KC_R, KC_W, BSYM
+#define _____________WORKMAN_311_001_R_____________ JSYM, KC_F, KC_U, KC_P, KC_BSPC
+#define _____________WORKMAN_311_002_L_____________ ASFT, KC_S, KC_H, TEX, KC_G
+#define _____________WORKMAN_311_002_R_____________ KC_Y, KC_N, KC_E, KC_O, KC_I
+#define _____________WORKMAN_311_003_L_____________ FNZ, CTRLX, MGUI, CALT, VLOWER, KC_ENT
+#define _____________WORKMAN_311_003_R_____________ KRAISE, KC_L, TD_CSPC, TD_DSPC, SFT_ENT
+
+#define _____________WORKMAN_412_001_L_____________ TD_TE, TD_QESC, KC_D, KC_R, KC_W, BSYM
+#define _____________WORKMAN_412_001_R_____________ JSYM, KC_F, KC_U, KC_P, KC_BSPC, KC_BSPC
+#define _____________WORKMAN_412_002_L_____________ TBSHFT, KC_A, KC_S, KC_H, TEX, KC_G
+#define _____________WORKMAN_412_002_R_____________ KC_Y, KC_N, KC_E, KC_O, KC_I, KC_ENT
+#define _____________WORKMAN_412_003_L_____________ KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V
+#define _____________WORKMAN_412_003_R_____________ KC_K, KC_L, TD_CSPC, TD_DSPC, SFT_ENT, TD_UR
+#define _____________WORKMAN_412_004_L_____________ FN, KC_LCTL, KC_LGUI, KC_LALT, LOWER, TD_SE
+#define _____________WORKMAN_412_004_R_____________ TD_SE, RAISE, SS, CLIP, CCCV, TD_DL
+
+#define _____________WORKMAN_ID75_TOP_L____________ KC_ESC, M01, M02, M03, M04, M05
+#define _____________WORKMAN_ID75_TOP_R____________ M06, M07, M08, M09, M10, KC_BSPC
+#define _____________WORKMAN_ID75_BOT_L____________ FN, KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC
+#define _____________WORKMAN_ID75_BOT_R____________ KC_ENT, RAISE, SS, CLIP, CCCV, TD_DL
+
+// clang-format on
\ No newline at end of file
diff --git a/users/scotto/config.h b/users/scotto/config.h
new file mode 100644
index 00000000000..34fe069d6e5
--- /dev/null
+++ b/users/scotto/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// config added when Tap Dance is enabled
+#ifdef TAP_DANCE_ENABLE
+# ifdef TAPPING_TERM
+# undef TAPPING_TERM
+# define TAPPING_TERM 135
+# endif
+# define TAPPING_TERM_PER_KEY
+# define PERMISSIVE_HOLD
+#endif
diff --git a/users/scotto/readme.md b/users/scotto/readme.md
new file mode 100644
index 00000000000..f7fdeb24c42
--- /dev/null
+++ b/users/scotto/readme.md
@@ -0,0 +1,17 @@
+# Scotto
+
+Applies to layouts:
+- LAYOUT_ortho_4x10
+- LAYOUT_split_3x5_2
+- LAYOUT_split_3x5_3
+
+### QWERTY
+
+Scotto's default functional layout is Colemak. To compile this layout in QWERTY (US English), append compile command with `KEYMAP=QWERTY` environment variable.
+```
+qmk compile -kb -km scotto -e KEYMAP=QWERTY
+```
+Example for [Scotto34](/keyboards/scottokeebs/scotto34):
+```
+qmk compile -kb scottokeebs/scotto34 -km scotto -e KEYMAP=QWERTY
+```
diff --git a/users/scotto/rules.mk b/users/scotto/rules.mk
new file mode 100644
index 00000000000..50a01966754
--- /dev/null
+++ b/users/scotto/rules.mk
@@ -0,0 +1,11 @@
+SRC += scotto.c
+
+TAP_DANCE_ENABLE = yes
+
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+ SRC += tap_dance.c
+endif
+
+ifneq ($(strip $(KEYMAP)),)
+ OPT_DEFS += -DKEYMAP_$(KEYMAP)
+endif
diff --git a/users/scotto/scotto.c b/users/scotto/scotto.c
new file mode 100644
index 00000000000..41520973c6f
--- /dev/null
+++ b/users/scotto/scotto.c
@@ -0,0 +1,15 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "scotto.h"
diff --git a/users/scotto/scotto.h b/users/scotto/scotto.h
new file mode 100644
index 00000000000..023906852e5
--- /dev/null
+++ b/users/scotto/scotto.h
@@ -0,0 +1,69 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include QMK_KEYBOARD_H
+
+#ifdef TAP_DANCE_ENABLE
+ #include "tap_dance.h"
+#endif
+
+// Assign rows of keycodes to a single def each
+#define __QWERTY1__ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P
+#define __QWERTY2__ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC
+#define __QWERTY3a_ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
+#define __QWERTY3b_ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
+
+#define __COLEMAK1__ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC
+#define __COLEMAK2__ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O
+#define __COLEMAK3a_ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
+#define __COLEMAK3b_ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
+
+#define ______________SYM_MEDIA_NAV1______________ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL
+#define ______________SYM_MEDIA_NAV2______________ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT
+#define ______________SYM_MEDIA_NAV3______________ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILD, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS)
+
+#define _________________NUM_SYM1_________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC
+#define _________________NUM_SYM2_________________ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0
+#define _________________NUM_SYM3a________________ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
+#define _________________NUM_SYM3b________________ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(8), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
+
+#define ________________FUNC_SYS1a________________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(5), TO(4)
+#define ________________FUNC_SYS1b________________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4), TO(5), TO(0)
+#define ________________FUNC_SYS2_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+#define ________________FUNC_SYS3_________________ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12
+
+#define _______THUMB6_1_______ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
+#define _______THUMB6_4_______ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LALT, LCTL_T(KC_SPC), LT(6, KC_TAB), LT(7, KC_ENT), TD(TD_LALT_ESC_WINDOWS_EMOJI)
+#define _______THUMB6_5_______ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(6, KC_TAB), LT(7, KC_ENT), TD(TD_LALT_ESC_WINDOWS_EMOJI)
+#define _____THUMB6_TRNS______ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+
+#define _______THUMB4_1_______ TD(TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI), LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+#define _______THUMB4_4_______ TD(TD_ESC_LCTL_LALT_WINDOWS_EMOJI), LCTL_T(KC_SPC), LT(6, KC_TAB), LT(7, KC_ENT)
+#define _______THUMB4_5_______ KC_LCTL, KC_SPC, LT(6, KC_TAB), LT(7, KC_ENT)
+#define _____THUMB4_TRNS______ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+
+// set functional layout
+#if defined (KEYMAP_QWERTY)
+ #define _________________KEYMAP1__________________ __QWERTY1__
+ #define _________________KEYMAP2__________________ __QWERTY2__
+ #define _________________KEYMAP3a_________________ __QWERTY3a_
+ #define _________________KEYMAP3b_________________ __QWERTY3b_
+#else
+ #define _________________KEYMAP1__________________ __COLEMAK1__
+ #define _________________KEYMAP2__________________ __COLEMAK2__
+ #define _________________KEYMAP3a_________________ __COLEMAK3a_
+ #define _________________KEYMAP3b_________________ __COLEMAK3b_
+#endif
diff --git a/users/scotto/tap_dance.c b/users/scotto/tap_dance.c
new file mode 100644
index 00000000000..e6183843341
--- /dev/null
+++ b/users/scotto/tap_dance.c
@@ -0,0 +1,154 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "tap_dance.h"
+#include "scotto.h"
+
+// Create an instance of 'td_tap_t' for the 'x' tap dance.
+static td_tap_t xtap_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+td_state_t cur_dance(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ return TD_SINGLE_TAP;
+ } else {
+ return TD_SINGLE_HOLD;
+ }
+ } else if (state->count == 2) {
+ if (state->interrupted || !state->pressed) {
+ return TD_DOUBLE_TAP;
+ } else {
+ return TD_DOUBLE_HOLD;
+ }
+ } else if (state->count == 3) {
+ if (state->interrupted || !state->pressed) {
+ return TD_TRIPLE_TAP;
+ } else {
+ return TD_TRIPLE_HOLD;
+ }
+ }
+
+ return TD_UNKNOWN;
+}
+
+void td_esc_lalt_lctl_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: tap_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
+ case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
+ default: break;
+ }
+}
+
+void td_esc_lalt_lctl_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ case TD_DOUBLE_HOLD: unregister_code(KC_LCTL); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_esc_lctl_lalt_windows_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: tap_code16(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
+ case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
+ default: break;
+ }
+}
+
+void td_esc_lctl_lalt_windows_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ case TD_DOUBLE_HOLD: unregister_code(KC_LALT); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_lalt_esc_windowr_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
+ case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
+ default: break;
+ }
+}
+
+void td_lalt_esc_windowr_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_lctl_esc_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
+ case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
+ default: break;
+ }
+}
+
+void td_lctl_esc_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+ // Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ [TD_LCTL_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lctl_esc_spotlight_emoji_finished, td_lctl_esc_spotlight_emoji_reset),
+ [TD_LALT_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lalt_esc_windowr_emoji_finished, td_lalt_esc_windowr_emoji_reset),
+ [TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_esc_lalt_lctl_spotlight_emoji_finished, td_esc_lalt_lctl_spotlight_emoji_reset),
+ [TD_ESC_LCTL_LALT_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_esc_lctl_lalt_windows_emoji_finished, td_esc_lctl_lalt_windows_emoji_reset),
+};
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI) :
+ case TD(TD_LALT_ESC_WINDOWS_EMOJI) :
+ case TD(TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI) :
+ case TD(TD_ESC_LCTL_LALT_WINDOWS_EMOJI) :
+ case LGUI_T(KC_SPC) :
+ case LT(1, KC_SPC) :
+ case LT(1, KC_TAB) :
+ case LT(2, KC_ENT) :
+ return 200;
+ default:
+ return TAPPING_TERM;
+ }
+};
diff --git a/users/scotto/tap_dance.h b/users/scotto/tap_dance.h
new file mode 100644
index 00000000000..4082d2b9fba
--- /dev/null
+++ b/users/scotto/tap_dance.h
@@ -0,0 +1,39 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+#include "scotto.h"
+
+typedef enum {
+ TD_NONE = 0,
+ TD_UNKNOWN,
+ TD_SINGLE_HOLD,
+ TD_DOUBLE_HOLD,
+ TD_TRIPLE_HOLD,
+ TD_SINGLE_TAP,
+ TD_DOUBLE_TAP,
+ TD_TRIPLE_TAP
+} td_state_t;
+
+typedef struct {
+ bool is_press_action;
+ td_state_t state;
+} td_tap_t;
+
+enum {
+ TD_LCTL_ESC_SPOTLIGHT_EMOJI = 0,
+ TD_LALT_ESC_WINDOWS_EMOJI,
+ TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI,
+ TD_ESC_LCTL_LALT_WINDOWS_EMOJI
+};
diff --git a/users/zigotica/rows.h b/users/zigotica/rows.h
index 18f08ccb0b7..575b32186e8 100644
--- a/users/zigotica/rows.h
+++ b/users/zigotica/rows.h
@@ -15,8 +15,10 @@ along with this program. If not, see .
#include "zigotica.h"
// clang-format off
-#define _BLANK_ROW _______, _______, _______, _______, _______
#define _BLANK_THUMB _______, _______
+#define _BLANK_3 _______, _______, _______
+#define _BLANK_4 _______, _______, _______, _______
+#define _BLANK_ROW _______, _______, _______, _______, _______
/*
* STENAI Layer
@@ -60,12 +62,14 @@ along with this program. If not, see .
#define _COLEMAK_R3 KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
#define _QWERTY_L1 KC_Q, KC_W, KC_E, KC_R, KC_T
-#define _QWERTY_L2 KC_A, KC_S, KC_D, KC_F, KC_G
+#define _QWERTY_L2 LALT_T(KC_A), LCTL_T(KC_S), LSFT_T(KC_D), LGUI_T(KC_F), KC_G
#define _QWERTY_L3 KC_Z, KC_X, KC_C, KC_V, KC_B
+#define _QWERTY_LT LT(_NUM, KC_TAB), LT(_NAV, KC_SPC)
#define _QWERTY_R1 KC_Y, KC_U, KC_I, KC_O, KC_P
-#define _QWERTY_R2 KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT
+#define _QWERTY_R2 KC_H, RGUI_T(KC_J), RSFT_T(KC_K), RCTL_T(KC_L), RALT_T(KC_SCLN)
#define _QWERTY_R3 KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
+#define _QWERTY_RT LT(_SYM, KC_SPC), LT(_FN, KC_ENT)
/*
* NUM Layer
@@ -191,4 +195,17 @@ along with this program. If not, see .
#define ____FN_R2 _______, KC_F1, KC_F2, KC_F3, KC_F11
#define ____FN_R3 _______, KC_F4, KC_F5, KC_F6, KC_F12
#define ____FN_RT _BLANK_THUMB
+
+
+// Ortho short rows
+#define ____NUM15 KC_1, KC_2, KC_3, KC_4, KC_5
+#define ____NUM60 KC_6, KC_7, KC_8, KC_9, KC_0
+#define ____FN_15 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define ____FN_60 KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+#define ____LMODS KC_LCTL, KC_LALT, KC_LGUI
+#define ____TARRS _______, KC_UP, _______
+#define ____BARRS KC_LEFT, KC_DOWN, KC_RIGHT
+#define ____LORTH ____LMODS, KC_MINS
+#define ____RORTH KC_BSPC, KC_SCLN, KC_BSLS, KC_SLSH
+
// clang-format on
diff --git a/users/zigotica/rules.mk b/users/zigotica/rules.mk
index 019e6f6dda1..93b0b5704d1 100644
--- a/users/zigotica/rules.mk
+++ b/users/zigotica/rules.mk
@@ -5,7 +5,7 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
endif
ifeq ($(strip $(COMBO_ENABLE)), yes)
- SRC += combos.c
+ INTROSPECTION_KEYMAP_C = combos.c
endif
ifeq ($(strip $(OLED_ENABLE)), yes)
diff --git a/users/zigotica/zigotica.h b/users/zigotica/zigotica.h
index e85a04edbed..e7ac83e0dcb 100644
--- a/users/zigotica/zigotica.h
+++ b/users/zigotica/zigotica.h
@@ -16,7 +16,7 @@ along with this program. If not, see .
#include "rows.h"
-#ifdef SPLIT_KEYBOARD
+#if defined(SPLIT_KEYBOARD) || defined(ORTHOLINEAR_KEYBOARD)
enum userspace_layers {
BASE = 0,
_NUM,