diff --git a/.gitignore b/.gitignore
index e9e7b27e6c61..f6401d9f832e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -108,5 +108,6 @@ compile_commands.json
.clangd/
.cache/
-# VIA(L) json files that don't belong in QMK repo
+# VIA(L) files that don't belong in QMK repo
via*.json
+/keyboards/**/keymaps/vial/*
diff --git a/docs/feature_tri_layer.md b/docs/feature_tri_layer.md
index aa6c87719ca6..ade0040cc7b1 100644
--- a/docs/feature_tri_layer.md
+++ b/docs/feature_tri_layer.md
@@ -40,7 +40,7 @@ Eg, if you wanted to set the "Adjust" layer to be layer 5, you'd add this to you
| `set_tri_layer_lower_layer(layer)` | Changes the "lower" layer*. |
| `set_tri_layer_upper_layer(layer)` | Changes the "upper" layer*. |
| `set_tri_layer_adjust_layer(layer)` | Changes the "adjust" layer*. |
-| `set_tri_layer_layers(lower, upper, adjust)` | Stes the "lower", "upper" and "adjust" layers*. |
+| `set_tri_layer_layers(lower, upper, adjust)` | Sets the "lower", "upper" and "adjust" layers*. |
| `get_tri_layer_lower_layer()` | Gets the current "lower" layer. |
| `get_tri_layer_upper_layer()` | Gets the current "upper" layer. |
| `get_tri_layer_adjust_layer()` | Gets the current "adjust" layer. |
diff --git a/docs/feature_unicode.md b/docs/feature_unicode.md
index 341084f9260a..2c6d2ef002e5 100644
--- a/docs/feature_unicode.md
+++ b/docs/feature_unicode.md
@@ -140,7 +140,7 @@ To set the list of enabled input modes, add the `UNICODE_SELECTED_MODES` define
```c
#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX
// or
-#define UNICODE_SELECTED_MODES UNICODE_MODE_MAC, UNICODE_MODE_WINCOMPOSE
+#define UNICODE_SELECTED_MODES UNICODE_MODE_MACOS, UNICODE_MODE_WINCOMPOSE
```
These modes can then be cycled through using the `UC_NEXT` and `UC_PREV` keycodes. You can also switch to any input mode, even if it is not specified in `UNICODE_SELECTED_MODES`, using their respective keycodes.
@@ -151,7 +151,7 @@ If your keyboard has working EEPROM, it will remember the last used input mode a
### ** macOS **
-**Mode Name:** `UNICODE_MODE_MAC`
+**Mode Name:** `UNICODE_MODE_MACOS`
macOS has built-in support for Unicode input as its own input source. It supports all possible code points by way of surrogate pairs for code points above `U+FFFF`.
diff --git a/docs/pr_checklist.md b/docs/pr_checklist.md
index 9bf1b8d0056c..38c268369433 100644
--- a/docs/pr_checklist.md
+++ b/docs/pr_checklist.md
@@ -138,7 +138,7 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- 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`
-- submitters can have a personal (or bells-and-whistles) keymap showcasing capabilities in the same PR but it shouldn't be embedded in the 'default' keymap
+- submitters can add an example (or bells-and-whistles) keymap showcasing capabilities in the same PR but it shouldn't be embedded in the 'default' keymap
- submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board
- Do not include VIA json files in the PR. These do not belong in the QMK repository as they are not used by QMK firmware -- they belong in the [VIA Keyboard Repo](https://github.com/the-via/keyboards)
- Do not include KLE json files in the PR. These have no use within QMK.
diff --git a/keyboards/blu/vimclutch/info.json b/keyboards/blu/vimclutch/info.json
index bb9586b61f84..cbee78735cfb 100644
--- a/keyboards/blu/vimclutch/info.json
+++ b/keyboards/blu/vimclutch/info.json
@@ -11,8 +11,9 @@
"development_board": "promicro",
"diode_direction": "ROW2COL",
"matrix_pins": {
- "cols": ["B3", "B2", "B6"],
- "rows": ["B5"]
+ "direct": [
+ ["B3", "B2", "B6"]
+ ]
},
"layouts": {
"LAYOUT": {
diff --git a/keyboards/blu/vimclutch/readme.md b/keyboards/blu/vimclutch/readme.md
index bbc6b9826066..94ebc183332b 100644
--- a/keyboards/blu/vimclutch/readme.md
+++ b/keyboards/blu/vimclutch/readme.md
@@ -19,8 +19,6 @@ Here are some included keymaps and their modes to get you started:
* vc_i: the same as default but using `i` instead of `a`
* vim_ai: vim clutch only, selectable between `a` and `i`
-Also includes a mode for single-keypress in case of "push to talk clutch"
-
Make example for this keyboard after setting up your development environment:
make blu/vimclutch:default
@@ -34,3 +32,7 @@ Flashing example for this keyboard:
Reset button on the reverse side of the enclosure for initializing flashing.
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).
+
+## Hardware Revision Compatibility
+This keyboard as-it-is in the QMK repository at the is only designed to work with Revision B (and possibly beyond!)
+
diff --git a/keyboards/coseyfannitutti/discipline/keymaps/briianpowell/keymap.c b/keyboards/coseyfannitutti/discipline/keymaps/briianpowell/keymap.c
index ed49188c5e91..0dc219faccc7 100644
--- a/keyboards/coseyfannitutti/discipline/keymaps/briianpowell/keymap.c
+++ b/keyboards/coseyfannitutti/discipline/keymaps/briianpowell/keymap.c
@@ -30,68 +30,28 @@ enum discpline_keycodes {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_65_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_DEL,
+ FN_ESC, 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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
- /* QWERTY: Default Layer
- * ,--------------------------------------------------------------.
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Backs| `~|
- * |---------------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|
- * |---------------------------------------------------------------|
- * |Fn/CL | A| S| D| F| G| H| J| K| L| ;| '| Enter|PgU|
- * |---------------------------------------------------------------|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
- * |---------------------------------------------------------------|
- * |Ctrl|Gui |Alt | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig|
- * `---------------------------------------------------------------'
- */
- [_QWERTY] = LAYOUT_65_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_DEL,
- FN_ESC, 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, KC_RGUI, KC_RCTL,KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
- /* Workman
- * ,---------------------------------------------------------------.
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Backs| `~|
- * |---------------------------------------------------------------|
- * |Tab | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| Del|
- * |---------------------------------------------------------------|
- * |Fn/CL | A| S| H| T| G| Y| N| E| O| I| '| Enter| PgU|
- * |---------------------------------------------------------------|
- * |Shift | Z| X| M| C| V| K| L| ,| .| /|Shift |Up| PgD|
- * |---------------------------------------------------------------|
- * |Ctrl|Alt |Gui | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig|
- * `---------------------------------------------------------------'
- */
- [_WORKMAN] = LAYOUT_65_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_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
- FN_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, KC_ENT, KC_HOME,
- KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, 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
+ [_WORKMAN] = LAYOUT_65_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_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ FN_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, 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
),
- /* Function
- * ,---------------------------------------------------------------.
- * |RST| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| | |
- * |---------------------------------------------------------------|
- * | | | | | | | | | | | | | | |INS|
- * |---------------------------------------------------------------|
- * | | | | | | | | | | | | | |HME|
- * |---------------------------------------------------------------|
- * | | | | | | | | | | | | | |VL+|END|
- * |---------------------------------------------------------------|
- * | | | | PLY/PS | | | | |PRV|VL-|NXT|
- * `---------------------------------------------------------------'
- */
[_FUNC] = LAYOUT_65_ansi(
- _______, 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,
- _______,KC_WH_U,KC_BTN1,KC_MS_U,KC_BTN2,_______,_______,AG_NORM,AG_SWAP,QWERTY,WORKMAN,_______,_______,_______, KC_INS,
- _______,KC_WH_D,KC_MS_L,KC_MS_D,KC_MS_R,_______,_______,_______,_______,_______,_______,_______, _______, KC_PGUP,
- _______,KC_WH_L,KC_BTN3,KC_WH_R,_______,_______,_______,_______,_______,_______,_______, _______,KC_VOLU, KC_PGDN,
- _______,_______,_______, KC_MPLY, _______,_______,_______,KC_MPRV,KC_VOLD, KC_MNXT
+ 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, QK_BOOT,
+ KC_TRNS, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, AG_NORM, AG_SWAP, QWERTY, WORKMAN, KC_TRNS, KC_INS,
+ KC_TRNS, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP,
+ KC_TRNS, KC_WH_L, KC_BTN3, KC_WH_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_PGDN,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
),
};
diff --git a/keyboards/enviousdesign/60f/info.json b/keyboards/enviousdesign/60f/info.json
new file mode 100644
index 000000000000..20876aa0b846
--- /dev/null
+++ b/keyboards/enviousdesign/60f/info.json
@@ -0,0 +1,227 @@
+{
+ "manufacturer": "Envious.Design",
+ "keyboard_name": "EnvKB 60F V1",
+ "maintainer": "Envious.Design",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP10", "GP9", "GP8", "GP7", "GP6", "GP5", "GP16", "GP17", "GP18", "GP19", "GP20", "GP21", "GP22", "GP26", "GP27"],
+ "rows": ["GP11", "GP12", "GP13", "GP14", "GP15"]
+ },
+ "processor": "RP2040",
+ "url": "http://envious.design",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0xA400",
+ "vid": "0xE739"
+ },
+ "community_layouts": ["60_ansi", "60_iso"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 2.5, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 3.5, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 4.5, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 5.5, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 6.5, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 7.5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 8.5, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 9.5, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 10.5, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 11.5, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 12.5, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 13.5, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 14.5, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 15.5, "y": 0, "w": 2},
+ {"label": "1,0", "matrix": [1, 0], "x": 2.5, "y": 1, "w": 1.5},
+ {"label": "1,2", "matrix": [1, 2], "x": 4, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 5, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 6, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 7, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 8, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 9, "y": 1},
+ {"label": "1,8", "matrix": [1, 8], "x": 10, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 11, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 12, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 13, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 14, "y": 1},
+ {"label": "1,13", "matrix": [1, 13], "x": 15, "y": 1},
+ {"label": "1,14", "matrix": [1, 14], "x": 16, "y": 1, "w": 1.5},
+ {"label": "2,0", "matrix": [2, 0], "x": 2.5, "y": 2, "w": 1.75},
+ {"label": "2,2", "matrix": [2, 2], "x": 4.25, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 5.25, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 6.25, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 7.25, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 8.25, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 9.25, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 10.25, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 11.25, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 12.25, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 13.25, "y": 2},
+ {"label": "2,12", "matrix": [2, 12], "x": 14.25, "y": 2},
+ {"label": "Enter", "matrix": [2, 14], "x": 15.25, "y": 2, "w": 2.25},
+ {"label": "3,0", "matrix": [3, 0], "x": 2.5, "y": 3, "w": 2.25},
+ {"label": "3,2", "matrix": [3, 2], "x": 4.75, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 5.75, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 6.75, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 7.75, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 8.75, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 9.75, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 10.75, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 11.75, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 12.75, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 13.75, "y": 3},
+ {"label": "3,13", "matrix": [3, 13], "x": 14.75, "y": 3, "w": 2.75},
+ {"label": "4,0", "matrix": [4, 0], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 3.75, "y": 4, "w": 1.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 5, "y": 4, "w": 1.25},
+ {"label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4, "w": 6.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 13.75, "y": 4, "w": 1.25},
+ {"label": "4,13", "matrix": [4, 13], "x": 15, "y": 4, "w": 1.25},
+ {"label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 2.5, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 3.5, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 4.5, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 5.5, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 6.5, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 7.5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 8.5, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 9.5, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 10.5, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 11.5, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 12.5, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 13.5, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 14.5, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 15.5, "y": 0, "w": 2},
+ {"label": "1,0", "matrix": [1, 0], "x": 2.5, "y": 1, "w": 1.5},
+ {"label": "1,2", "matrix": [1, 2], "x": 4, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 5, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 6, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 7, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 8, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 9, "y": 1},
+ {"label": "1,8", "matrix": [1, 8], "x": 10, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 11, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 12, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 13, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 14, "y": 1},
+ {"label": "1,13", "matrix": [1, 13], "x": 15, "y": 1},
+ {"label": "2,0", "matrix": [2, 0], "x": 2.5, "y": 2, "w": 1.75},
+ {"label": "2,2", "matrix": [2, 2], "x": 4.25, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 5.25, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 6.25, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 7.25, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 8.25, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 9.25, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 10.25, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 11.25, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 12.25, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 13.25, "y": 2},
+ {"label": "2,12", "matrix": [2, 12], "x": 14.25, "y": 2},
+ {"label": "2,13", "matrix": [2, 13], "x": 15.25, "y": 2},
+ {"label": "Enter", "matrix": [2, 14], "x": 16.25, "y": 1, "w": 1.25, "h": 2},
+ {"label": "3,0", "matrix": [3, 0], "x": 2.5, "y": 3, "w": 1.25},
+ {"label": "3,1", "matrix": [3, 1], "x": 3.75, "y": 3},
+ {"label": "3,2", "matrix": [3, 2], "x": 4.75, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 5.75, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 6.75, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 7.75, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 8.75, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 9.75, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 10.75, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 11.75, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 12.75, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 13.75, "y": 3},
+ {"label": "3,13", "matrix": [3, 13], "x": 14.75, "y": 3, "w": 2.75},
+ {"label": "4,0", "matrix": [4, 0], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 3.75, "y": 4, "w": 1.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 5, "y": 4, "w": 1.25},
+ {"label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4, "w": 6.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 13.75, "y": 4, "w": 1.25},
+ {"label": "4,13", "matrix": [4, 13], "x": 15, "y": 4, "w": 1.25},
+ {"label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 2.5, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 3.5, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 4.5, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 5.5, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 6.5, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 7.5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 8.5, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 9.5, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 10.5, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 11.5, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 12.5, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 13.5, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 14.5, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 15.5, "y": 0, "w": 2},
+ {"label": "1,0", "matrix": [1, 0], "x": 2.5, "y": 1, "w": 1.5},
+ {"label": "1,2", "matrix": [1, 2], "x": 4, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 5, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 6, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 7, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 8, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 9, "y": 1},
+ {"label": "1,8", "matrix": [1, 8], "x": 10, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 11, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 12, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 13, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 14, "y": 1},
+ {"label": "1,13", "matrix": [1, 13], "x": 15, "y": 1},
+ {"label": "1,14", "matrix": [1, 14], "x": 16, "y": 1, "w": 1.5},
+ {"label": "2,0", "matrix": [2, 0], "x": 2.5, "y": 2, "w": 1.75},
+ {"label": "2,2", "matrix": [2, 2], "x": 4.25, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 5.25, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 6.25, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 7.25, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 8.25, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 9.25, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 10.25, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 11.25, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 12.25, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 13.25, "y": 2},
+ {"label": "2,12", "matrix": [2, 12], "x": 14.25, "y": 2},
+ {"label": "2,13", "matrix": [2, 13], "x": 15.25, "y": 2},
+ {"label": "Enter", "matrix": [2, 14], "x": 16.25, "y": 2, "w": 1.25},
+ {"label": "3,0", "matrix": [3, 0], "x": 2.5, "y": 3, "w": 1.25},
+ {"label": "3,1", "matrix": [3, 1], "x": 3.75, "y": 3},
+ {"label": "3,2", "matrix": [3, 2], "x": 4.75, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 5.75, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 6.75, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 7.75, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 8.75, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 9.75, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 10.75, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 11.75, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 12.75, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 13.75, "y": 3},
+ {"label": "3,13", "matrix": [3, 13], "x": 14.75, "y": 3, "w": 2.75},
+ {"label": "4,0", "matrix": [4, 0], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 3.75, "y": 4, "w": 1.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 5, "y": 4, "w": 1.25},
+ {"label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4, "w": 6.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 13.75, "y": 4, "w": 1.25},
+ {"label": "4,13", "matrix": [4, 13], "x": 15, "y": 4, "w": 1.25},
+ {"label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/enviousdesign/60f/keymaps/default/keymap.c b/keyboards/enviousdesign/60f/keymaps/default/keymap.c
new file mode 100644
index 000000000000..42f84afed7e3
--- /dev/null
+++ b/keyboards/enviousdesign/60f/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2022 Adam K (@Envious-Data)
+ *
+ * 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_all(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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, KC_RWIN, MO(1), KC_RCTL
+ ),
+ [1] = 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,
+ QK_BOOT, KC_VOLU, KC_UP, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INSERT,KC_HOME,KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_END, KC_PGDN, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_TRNS, KC_TRNS, KC_CALCULATOR,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS
+ )
+};
+
diff --git a/keyboards/enviousdesign/60f/keymaps/via/keymap.c b/keyboards/enviousdesign/60f/keymaps/via/keymap.c
new file mode 100644
index 000000000000..42f84afed7e3
--- /dev/null
+++ b/keyboards/enviousdesign/60f/keymaps/via/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2022 Adam K (@Envious-Data)
+ *
+ * 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_all(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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, KC_RWIN, MO(1), KC_RCTL
+ ),
+ [1] = 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,
+ QK_BOOT, KC_VOLU, KC_UP, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INSERT,KC_HOME,KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_END, KC_PGDN, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_TRNS, KC_TRNS, KC_CALCULATOR,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS
+ )
+};
+
diff --git a/keyboards/enviousdesign/60f/keymaps/via/rules.mk b/keyboards/enviousdesign/60f/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/enviousdesign/60f/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/enviousdesign/60f/readme.md b/keyboards/enviousdesign/60f/readme.md
new file mode 100644
index 000000000000..5098f22327d6
--- /dev/null
+++ b/keyboards/enviousdesign/60f/readme.md
@@ -0,0 +1,31 @@
+# EnvKB 60F
+
+![Image of the EnvKB 60F PCB](https://i.imgur.com/c5xMEg0h.png)
+
+
+A low cost Standard 60% Design which takes inspiration from the CFTKB Mysterium.
+
+* Keyboard Maintainer: [Envious-Data](https://github.com/envious-data)
+* Hardware Supported: EnvKB 60F (Pi Pico)
+* Hardware Availability: [GitHub](https://github.com/Envious-Data/Env-KB60F)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make enviousdesign/60f:default
+
+Flashing example for this keyboard:
+
+ make enviousdesign/60f: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. This will also clear the emulated EEPROM, so it is a good first step if the keyboard is misbehaving.
+* **Physical reset**: Hold down the `BOOTSEL` button on the Pi Pico, then either plug the board in or press the `RESET` button.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT`. In the pre-supplied keymaps it is on the second layer, replacing the Tab key.
+
+After entering the bootloader through one of the three methods above, the keyboard will appear as a USB mass storage device named `RPI-RP2`. If the CLI is unable to find this device, the compiled `.uf2` file can be manually copied to it. The keyboard will reboot on completion with the new firmware loaded.
+
diff --git a/keyboards/enviousdesign/60f/rules.mk b/keyboards/enviousdesign/60f/rules.mk
new file mode 100644
index 000000000000..837f4bffb53e
--- /dev/null
+++ b/keyboards/enviousdesign/60f/rules.mk
@@ -0,0 +1 @@
+# This file is intentionally left blank
diff --git a/keyboards/enviousdesign/65m/info.json b/keyboards/enviousdesign/65m/info.json
new file mode 100644
index 000000000000..232893246261
--- /dev/null
+++ b/keyboards/enviousdesign/65m/info.json
@@ -0,0 +1,393 @@
+{
+ "manufacturer": "Envious.Design",
+ "keyboard_name": "EnvKB 65M",
+ "maintainer": "Envious.Design",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP16"],
+ "rows": ["GP21", "GP20", "GP19", "GP18", "GP17"]
+ },
+ "processor": "RP2040",
+ "url": "http://envious.design",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0xA279",
+ "vid": "0xE739"
+ },
+ "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, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 14], "x": 13.75, "y": 2, "w": 1.25},
+ {"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": [3, 16], "x": 16, "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, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 4], "x": 3.75, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 6, "y": 4, "w": 1.75},
+ {"matrix": [4, 8], "x": 7.75, "y": 4, "w": 2.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+ {"matrix": [4, 16], "x": 16, "y": 4}
+ ]
+ },
+ "LAYOUT_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": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 14], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [3, 16], "x": 16, "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, 3], "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},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+ {"matrix": [4, 16], "x": 16, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_split_space": {
+ "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, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 14], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [3, 16], "x": 16, "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, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 4], "x": 3.75, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 6, "y": 4, "w": 1.75},
+ {"matrix": [4, 8], "x": 7.75, "y": 4, "w": 2.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+ {"matrix": [4, 16], "x": 16, "y": 4}
+ ]
+ },
+ "LAYOUT_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": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 14], "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},
+ {"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": [3, 16], "x": 16, "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, 3], "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},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+ {"matrix": [4, 16], "x": 16, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_split_space": {
+ "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, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 14], "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},
+ {"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": [3, 16], "x": 16, "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, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 4], "x": 3.75, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 6, "y": 4, "w": 1.75},
+ {"matrix": [4, 8], "x": 7.75, "y": 4, "w": 2.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+ {"matrix": [4, 16], "x": 16, "y": 4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/enviousdesign/65m/keymaps/default/keymap.c b/keyboards/enviousdesign/65m/keymaps/default/keymap.c
new file mode 100644
index 000000000000..4efa8abf9232
--- /dev/null
+++ b/keyboards/enviousdesign/65m/keymaps/default/keymap.c
@@ -0,0 +1,21 @@
+/* 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_HOME, KC_PGUP,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(2), MO(1), KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN
+ ),
+ [1] = 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_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_END, KC_INS,
+ QK_BOOTLOADER, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS, KC_DEL
+ )
+};
+
diff --git a/keyboards/enviousdesign/65m/keymaps/via/keymap.c b/keyboards/enviousdesign/65m/keymaps/via/keymap.c
new file mode 100644
index 000000000000..4efa8abf9232
--- /dev/null
+++ b/keyboards/enviousdesign/65m/keymaps/via/keymap.c
@@ -0,0 +1,21 @@
+/* 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_HOME, KC_PGUP,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(2), MO(1), KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN
+ ),
+ [1] = 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_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_END, KC_INS,
+ QK_BOOTLOADER, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS, KC_DEL
+ )
+};
+
diff --git a/keyboards/enviousdesign/65m/keymaps/via/rules.mk b/keyboards/enviousdesign/65m/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/enviousdesign/65m/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/enviousdesign/65m/readme.md b/keyboards/enviousdesign/65m/readme.md
new file mode 100644
index 000000000000..76180843f329
--- /dev/null
+++ b/keyboards/enviousdesign/65m/readme.md
@@ -0,0 +1,30 @@
+# EnvKB 65M
+
+![image of EnvKB 65M PCB](https://i.imgur.com/3d76sz9h.png)
+
+A low cost 65% kit featuring split space and an attempt at fitting a standard keycap set.
+
+* Keyboard Maintainer: [Envious-Data](https://github.com/envious-data)
+* Hardware Supported: EnvKB 65M (Pi Pico)
+* Hardware Availability: [Mechboards](https://mechboards.co.uk/products/envkb-65-kit), [GitHub](https://github.com/Envious-Data/Env-KB65M)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make enviousdesign/65m:default
+
+Flashing example for this keyboard:
+
+ make enviousdesign/65m: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. This will also clear the emulated EEPROM, so it is a good first step if the keyboard is misbehaving.
+* **Physical reset**: Hold down the `BOOTSEL` button on the Pi Pico, then either plug the board in or press the `RESET` button.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT`. In the pre-supplied keymaps it is on the second layer, replacing the Control key in the bottom-left.
+
+After entering the bootloader through one of the three methods above, the keyboard will appear as a USB mass storage device named `RPI-RP2`. If the CLI is unable to find this device, the compiled `.uf2` file can be manually copied to it. The keyboard will reboot on completion with the new firmware loaded.
+
diff --git a/keyboards/enviousdesign/65m/rules.mk b/keyboards/enviousdesign/65m/rules.mk
new file mode 100644
index 000000000000..837f4bffb53e
--- /dev/null
+++ b/keyboards/enviousdesign/65m/rules.mk
@@ -0,0 +1 @@
+# This file is intentionally left blank
diff --git a/keyboards/enviousdesign/commissions/mini1800/info.json b/keyboards/enviousdesign/commissions/mini1800/info.json
new file mode 100644
index 000000000000..9303e7af2346
--- /dev/null
+++ b/keyboards/enviousdesign/commissions/mini1800/info.json
@@ -0,0 +1,110 @@
+{
+ "manufacturer": "Envious.Design",
+ "keyboard_name": "Mini1800",
+ "maintainer": "Envious.Design",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "vid": "0xE739",
+ "pid": "0xC001",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "num_lock": "GP8",
+ "caps_lock": "GP10",
+ }
+ "diode_direction": "ROW2COL",
+ "matrix_pins": {
+ "rows": ["GP4", "GP3", "GP2", "GP1", "GP0"],
+ "cols": ["GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18", "GP17", "GP16", "GP15", "GP27", "GP28", "GP5", "GP6", "GP7"]
+ },
+ "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.5, "y": 0 },
+ { "matrix": [0, 15], "x": 15.5, "y": 0 },
+ { "matrix": [0, 16], "x": 16.5, "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], "w": 1.5, "x": 12.5, "y": 1 },
+ { "matrix": [1, 14], "x": 14.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15.5, "y": 1 },
+ { "matrix": [1, 16], "x": 16.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], "w": 1.75, "x": 11.75, "y": 2 },
+ { "matrix": [2, 14], "x": 14.5, "y": 2 },
+ { "matrix": [2, 15], "x": 15.5, "y": 2 },
+ { "matrix": [2, 16], "x": 16.5, "y": 2 },
+ { "matrix": [3, 0], "w": 2, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 2, "y": 3 },
+ { "matrix": [3, 2], "x": 3, "y": 3 },
+ { "matrix": [3, 3], "x": 4, "y": 3 },
+ { "matrix": [3, 4], "x": 5, "y": 3 },
+ { "matrix": [3, 5], "x": 6, "y": 3 },
+ { "matrix": [3, 6], "x": 7, "y": 3 },
+ { "matrix": [3, 7], "x": 8, "y": 3 },
+ { "matrix": [3, 8], "x": 9, "y": 3 },
+ { "matrix": [3, 9], "x": 10, "y": 3 },
+ { "matrix": [3, 11], "w": 1.75, "x": 11, "y": 3 },
+ { "matrix": [3, 12], "x": 13, "y": 3.25 },
+ { "matrix": [3, 14], "x": 14.5, "y": 3 },
+ { "matrix": [3, 15], "x": 15.5, "y": 3 },
+ { "matrix": [3, 16], "x": 16.5, "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.75, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 2.75, "x": 6.5, "y": 4 },
+ { "matrix": [4, 8], "w": 1.25, "x": 9.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10.5, "y": 4 },
+ { "matrix": [4, 11], "x": 12, "y": 4.25 },
+ { "matrix": [4, 12], "x": 13, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 15.5, "y": 4 },
+ { "matrix": [4, 16], "x": 16.5, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/enviousdesign/commissions/mini1800/keymaps/default/keymap.c b/keyboards/enviousdesign/commissions/mini1800/keymaps/default/keymap.c
new file mode 100644
index 000000000000..c095531fe6a1
--- /dev/null
+++ b/keyboards/enviousdesign/commissions/mini1800/keymaps/default/keymap.c
@@ -0,0 +1,31 @@
+/* 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_BSLS, KC_PGUP, KC_PGDN, 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_BSPC, KC_7, KC_8, KC_9,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, KC_4, KC_5, KC_6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_SLSH, KC_RSFT, KC_UP, KC_1, KC_2, KC_3,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(1,KC_SPC), KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_0, LT(1,KC_DOT)
+ ),
+
+ [1] = LAYOUT(
+ KC_PWR, 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_MUTE, KC_HOME, KC_END, KC_MSTP,
+ KC_CAPS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_PAUS, KC_PSCR, KC_RBRC, KC_SLEP, KC_P7, KC_P8, KC_P9,
+ KC_TRNS, KC_TRNS, KC_SCRL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_P4, KC_P5, KC_P6,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NUM, KC_TRNS, KC_TRNS, KC_DOT, KC_TRNS, KC_VOLU, KC_P1, KC_P2, KC_P3,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT, KC_P0, KC_PDOT
+ ),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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/enviousdesign/commissions/mini1800/keymaps/via/keymap.c b/keyboards/enviousdesign/commissions/mini1800/keymaps/via/keymap.c
new file mode 100644
index 000000000000..c095531fe6a1
--- /dev/null
+++ b/keyboards/enviousdesign/commissions/mini1800/keymaps/via/keymap.c
@@ -0,0 +1,31 @@
+/* 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_BSLS, KC_PGUP, KC_PGDN, 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_BSPC, KC_7, KC_8, KC_9,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, KC_4, KC_5, KC_6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_SLSH, KC_RSFT, KC_UP, KC_1, KC_2, KC_3,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(1,KC_SPC), KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_0, LT(1,KC_DOT)
+ ),
+
+ [1] = LAYOUT(
+ KC_PWR, 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_MUTE, KC_HOME, KC_END, KC_MSTP,
+ KC_CAPS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_PAUS, KC_PSCR, KC_RBRC, KC_SLEP, KC_P7, KC_P8, KC_P9,
+ KC_TRNS, KC_TRNS, KC_SCRL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_P4, KC_P5, KC_P6,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NUM, KC_TRNS, KC_TRNS, KC_DOT, KC_TRNS, KC_VOLU, KC_P1, KC_P2, KC_P3,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT, KC_P0, KC_PDOT
+ ),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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/enviousdesign/commissions/mini1800/keymaps/via/rules.mk b/keyboards/enviousdesign/commissions/mini1800/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/enviousdesign/commissions/mini1800/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/enviousdesign/commissions/mini1800/mini1800.c b/keyboards/enviousdesign/commissions/mini1800/mini1800.c
new file mode 100644
index 000000000000..f35be22d1342
--- /dev/null
+++ b/keyboards/enviousdesign/commissions/mini1800/mini1800.c
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include "quantum.h"
+
+void matrix_init_user(void) {
+ setPinOutput(GP9); //init gpio
+ writePinLow(GP9);
+ setPinOutput(GP11); //init and turn off inverted power led
+ writePinHigh(GP11);
+}
+
+//layer, capslock and numlock
+layer_state_t layer_state_set_user(layer_state_t state) {
+ writePin(GP9, layer_state_cmp(state, 1));
+ return state;
+}
+
+bool led_update_user(led_t led_state) {
+ led_state.num_lock = !led_state.num_lock;
+ led_update_ports(led_state);
+ return false;
+}
+
diff --git a/keyboards/enviousdesign/commissions/mini1800/readme.md b/keyboards/enviousdesign/commissions/mini1800/readme.md
new file mode 100644
index 000000000000..874cbcec6093
--- /dev/null
+++ b/keyboards/enviousdesign/commissions/mini1800/readme.md
@@ -0,0 +1,27 @@
+# mini1800
+
+![mini1800](https://i.imgur.com/t55hjq8.jpeg)
+
+*A mini1800 layout commission keyboard for LASERman71 utilising the RP2040 MCU*
+
+* Keyboard Maintainer: [Adam](https://github.com/envious-data)
+* Hardware Supported: *Onboard RP2040 MCU*
+* Hardware Availability: *None Yet*
+
+Make example for this keyboard (after setting up your build environment):
+
+ make enviousdesign/commissions/mini1800:default
+
+Flashing example for this keyboard:
+
+ make enviousdesign/commissions/mini1800: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/enviousdesign/commissions/mini1800/rules.mk b/keyboards/enviousdesign/commissions/mini1800/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/enviousdesign/commissions/mini1800/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/enviousdesign/delirium/readme.md b/keyboards/enviousdesign/delirium/readme.md
new file mode 100644
index 000000000000..157a960303e7
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/readme.md
@@ -0,0 +1,32 @@
+# EnvKB DELIRIUM
+
+![Image of EnvKB TKL PCB](https://i.imgur.com/a7UaS4mh.png)
+
+A low cost standard TKL design which takes inspiration from the CFTKB Mysterium. All versions are designed for reference Pi Picos.
+
+* Keyboard Maintainer: [Envious-Data](https://github.com/envious-data)
+* Hardware Supported:
+ * Delirium Prototype (`tkl/rev0`)
+ * Delirium (`tkl/rev1`)
+ * Delirium RGB (`tkl/rgb`)
+* Hardware Availability: [Mechboards](https://mechboards.co.uk/products/envkb-delirium-tkl-kit), [GitHub](https://github.com/Envious-Data/Env-KB)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make enviousdesign/tkl/rgb:default
+
+Flashing example for this keyboard:
+
+ make enviousdesign/tkl/rgb: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. This will also clear the emulated EEPROM, so it is a good first step if the keyboard is misbehaving.
+* **Physical reset**: Hold down the `BOOTSEL` button on the Pi Pico, then either plug the board in or press the `RESET` button.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT`. In the pre-supplied keymaps it is on the second layer, replacing the Esc key.
+
+After entering the bootloader through one of the three methods above, the keyboard will appear as a USB mass storage device named `RPI-RP2`. If the CLI is unable to find this device, the compiled `.uf2` file can be manually copied to it. The keyboard will reboot on completion with the new firmware loaded.
diff --git a/keyboards/enviousdesign/delirium/rev0/info.json b/keyboards/enviousdesign/delirium/rev0/info.json
new file mode 100644
index 000000000000..f1eb3dc59b04
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rev0/info.json
@@ -0,0 +1,121 @@
+{
+ "manufacturer": "Envious.Design",
+ "keyboard_name": "Delirium Prototype",
+ "maintainer": "Envious.Design",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP19", "GP18", "GP17", "GP16"],
+ "rows": ["GP20", "GP21", "GP22", "GP26", "GP27", "GP28"]
+ },
+ "processor": "RP2040",
+ "url": "http://envious.design",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0xA100",
+ "vid": "0xE739"
+ },
+ "community_layouts": ["tkl_iso"],
+ "layouts": {
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 6.5, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 7.5, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 8.5, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 9.5, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "0,15", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "0,16", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "0,17", "matrix": [0, 17], "x": 17.25, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.5},
+ {"label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.5},
+ {"label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.5},
+ {"label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.5},
+ {"label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.5},
+ {"label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.5},
+ {"label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.5},
+ {"label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.5},
+ {"label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.5},
+ {"label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.5},
+ {"label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.5},
+ {"label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.5},
+ {"label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.5},
+ {"label": "1,14", "matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"label": "1,15", "matrix": [1, 15], "x": 15.25, "y": 1.5},
+ {"label": "1,16", "matrix": [1, 16], "x": 16.25, "y": 1.5},
+ {"label": "1,17", "matrix": [1, 17], "x": 17.25, "y": 1.5},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"label": "2,2", "matrix": [2, 2], "x": 1.5, "y": 2.5},
+ {"label": "2,3", "matrix": [2, 3], "x": 2.5, "y": 2.5},
+ {"label": "2,4", "matrix": [2, 4], "x": 3.5, "y": 2.5},
+ {"label": "2,5", "matrix": [2, 5], "x": 4.5, "y": 2.5},
+ {"label": "2,6", "matrix": [2, 6], "x": 5.5, "y": 2.5},
+ {"label": "2,7", "matrix": [2, 7], "x": 6.5, "y": 2.5},
+ {"label": "2,8", "matrix": [2, 8], "x": 7.5, "y": 2.5},
+ {"label": "2,9", "matrix": [2, 9], "x": 8.5, "y": 2.5},
+ {"label": "2,10", "matrix": [2, 10], "x": 9.5, "y": 2.5},
+ {"label": "2,11", "matrix": [2, 11], "x": 10.5, "y": 2.5},
+ {"label": "2,12", "matrix": [2, 12], "x": 11.5, "y": 2.5},
+ {"label": "2,13", "matrix": [2, 13], "x": 12.5, "y": 2.5},
+ {"label": "2,15", "matrix": [2, 15], "x": 15.25, "y": 2.5},
+ {"label": "2,16", "matrix": [2, 16], "x": 16.25, "y": 2.5},
+ {"label": "2,17", "matrix": [2, 17], "x": 17.25, "y": 2.5},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"label": "3,2", "matrix": [3, 2], "x": 1.75, "y": 3.5},
+ {"label": "3,3", "matrix": [3, 3], "x": 2.75, "y": 3.5},
+ {"label": "3,4", "matrix": [3, 4], "x": 3.75, "y": 3.5},
+ {"label": "3,5", "matrix": [3, 5], "x": 4.75, "y": 3.5},
+ {"label": "3,6", "matrix": [3, 6], "x": 5.75, "y": 3.5},
+ {"label": "3,7", "matrix": [3, 7], "x": 6.75, "y": 3.5},
+ {"label": "3,8", "matrix": [3, 8], "x": 7.75, "y": 3.5},
+ {"label": "3,9", "matrix": [3, 9], "x": 8.75, "y": 3.5},
+ {"label": "3,10", "matrix": [3, 10], "x": 9.75, "y": 3.5},
+ {"label": "3,11", "matrix": [3, 11], "x": 10.75, "y": 3.5},
+ {"label": "3,12", "matrix": [3, 12], "x": 11.75, "y": 3.5},
+ {"label": "3,13", "matrix": [3, 13], "x": 12.75, "y": 3.5},
+ {"label": "3,14", "matrix": [2, 14], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"label": "4,5", "matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"label": "4,7", "matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"label": "4,8", "matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"label": "4,9", "matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"label": "4,10", "matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"label": "4,13", "matrix": [4, 13], "x": 12.25, "y": 4.5, "w": 2.75},
+ {"label": "4,16", "matrix": [4, 16], "x": 16.25, "y": 4.5},
+ {"label": "5,0", "matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"label": "5,1", "matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"label": "5,3", "matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"label": "5,6", "matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"label": "5,10", "matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.25},
+ {"label": "5,11", "matrix": [5, 11], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"label": "5,13", "matrix": [5, 13], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"label": "5,14", "matrix": [5, 14], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"label": "5,15", "matrix": [5, 15], "x": 15.25, "y": 5.5},
+ {"label": "5,16", "matrix": [5, 16], "x": 16.25, "y": 5.5},
+ {"label": "5,17", "matrix": [5, 17], "x": 17.25, "y": 5.5}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/enviousdesign/delirium/rev0/keymaps/default/keymap.c b/keyboards/enviousdesign/delirium/rev0/keymaps/default/keymap.c
new file mode 100644
index 000000000000..1e0e273fa42a
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rev0/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
+/* Copyright 2022 Adam K (@Envious-Data)
+ *
+ * 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_tkl_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_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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_iso(
+ QK_BOOTLOADER, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MUTE, KC_VOLD, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/enviousdesign/delirium/rev0/rules.mk b/keyboards/enviousdesign/delirium/rev0/rules.mk
new file mode 100644
index 000000000000..837f4bffb53e
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rev0/rules.mk
@@ -0,0 +1 @@
+# This file is intentionally left blank
diff --git a/keyboards/enviousdesign/delirium/rev1/info.json b/keyboards/enviousdesign/delirium/rev1/info.json
new file mode 100644
index 000000000000..e548d0281417
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rev1/info.json
@@ -0,0 +1,305 @@
+{
+ "manufacturer": "Envious.Design",
+ "keyboard_name": "Delirium",
+ "maintainer": "Envious.Design",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP19", "GP18", "GP17", "GP16"],
+ "rows": ["GP20", "GP21", "GP22", "GP26", "GP27", "GP28"]
+ },
+ "processor": "RP2040",
+ "url": "http://envious.design",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0xA500",
+ "vid": "0xE739"
+ },
+ "community_layouts": ["tkl_ansi", "tkl_iso"],
+ "layouts": {
+ "LAYOUT_all": {
+ "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, 7], "x": 6.5, "y": 0},
+ {"label": "F6", "matrix": [0, 8], "x": 7.5, "y": 0},
+ {"label": "F7", "matrix": [0, 9], "x": 8.5, "y": 0},
+ {"label": "F8", "matrix": [0, 10], "x": 9.5, "y": 0},
+ {"label": "F9", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "F10", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "F11", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "F12", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "PrtSc", "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": "\u00ac", "matrix": [1, 0], "x": 0, "y": 1.5},
+ {"label": "!", "matrix": [1, 1], "x": 1, "y": 1.5},
+ {"label": "\"", "matrix": [1, 2], "x": 2, "y": 1.5},
+ {"label": "\u00a3", "matrix": [1, 3], "x": 3, "y": 1.5},
+ {"label": "$", "matrix": [1, 4], "x": 4, "y": 1.5},
+ {"label": "%", "matrix": [1, 5], "x": 5, "y": 1.5},
+ {"label": "^", "matrix": [1, 6], "x": 6, "y": 1.5},
+ {"label": "&", "matrix": [1, 7], "x": 7, "y": 1.5},
+ {"label": "*", "matrix": [1, 8], "x": 8, "y": 1.5},
+ {"label": "(", "matrix": [1, 9], "x": 9, "y": 1.5},
+ {"label": ")", "matrix": [1, 10], "x": 10, "y": 1.5},
+ {"label": "_", "matrix": [1, 11], "x": 11, "y": 1.5},
+ {"label": "+", "matrix": [1, 12], "x": 12, "y": 1.5},
+ {"label": "Backspace", "matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.5},
+ {"label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.5},
+ {"label": "PgUp", "matrix": [1, 17], "x": 17.25, "y": 1.5},
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"label": "Q", "matrix": [2, 2], "x": 1.5, "y": 2.5},
+ {"label": "W", "matrix": [2, 3], "x": 2.5, "y": 2.5},
+ {"label": "E", "matrix": [2, 4], "x": 3.5, "y": 2.5},
+ {"label": "R", "matrix": [2, 5], "x": 4.5, "y": 2.5},
+ {"label": "T", "matrix": [2, 6], "x": 5.5, "y": 2.5},
+ {"label": "Y", "matrix": [2, 7], "x": 6.5, "y": 2.5},
+ {"label": "U", "matrix": [2, 8], "x": 7.5, "y": 2.5},
+ {"label": "I", "matrix": [2, 9], "x": 8.5, "y": 2.5},
+ {"label": "O", "matrix": [2, 10], "x": 9.5, "y": 2.5},
+ {"label": "P", "matrix": [2, 11], "x": 10.5, "y": 2.5},
+ {"label": "{", "matrix": [2, 12], "x": 11.5, "y": 2.5},
+ {"label": "}", "matrix": [2, 13], "x": 12.5, "y": 2.5},
+ {"label": "|", "matrix": [2, 14], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"label": "Delete", "matrix": [2, 15], "x": 15.25, "y": 2.5},
+ {"label": "End", "matrix": [2, 16], "x": 16.25, "y": 2.5},
+ {"label": "PgDn", "matrix": [2, 17], "x": 17.25, "y": 2.5},
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"label": "A", "matrix": [3, 2], "x": 1.75, "y": 3.5},
+ {"label": "S", "matrix": [3, 3], "x": 2.75, "y": 3.5},
+ {"label": "D", "matrix": [3, 4], "x": 3.75, "y": 3.5},
+ {"label": "F", "matrix": [3, 5], "x": 4.75, "y": 3.5},
+ {"label": "G", "matrix": [3, 6], "x": 5.75, "y": 3.5},
+ {"label": "H", "matrix": [3, 7], "x": 6.75, "y": 3.5},
+ {"label": "J", "matrix": [3, 8], "x": 7.75, "y": 3.5},
+ {"label": "K", "matrix": [3, 9], "x": 8.75, "y": 3.5},
+ {"label": "L", "matrix": [3, 10], "x": 9.75, "y": 3.5},
+ {"label": ":", "matrix": [3, 11], "x": 10.75, "y": 3.5},
+ {"label": "@", "matrix": [3, 12], "x": 11.75, "y": 3.5},
+ {"label": "~", "matrix": [3, 13], "x": 12.75, "y": 3.5},
+ {"label": "Enter", "matrix": [3, 14], "x": 13.75, "y": 3.5, "w": 1.25},
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"label": "|", "matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.5, "w": 2.75},
+ {"label": "\u2191", "matrix": [4, 16], "x": 16.25, "y": 4.5},
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"label": "Win", "matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"label": "AltGr", "matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.25},
+ {"label": "Win", "matrix": [5, 11], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"label": "Menu", "matrix": [5, 13], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 14], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"label": "\u2190", "matrix": [5, 15], "x": 15.25, "y": 5.5},
+ {"label": "\u2193", "matrix": [5, 16], "x": 16.25, "y": 5.5},
+ {"label": "\u2192", "matrix": [5, 17], "x": 17.25, "y": 5.5}
+ ]
+ },
+ "LAYOUT_tkl_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, 7], "x": 6.5, "y": 0},
+ {"label": "F6", "matrix": [0, 8], "x": 7.5, "y": 0},
+ {"label": "F7", "matrix": [0, 9], "x": 8.5, "y": 0},
+ {"label": "F8", "matrix": [0, 10], "x": 9.5, "y": 0},
+ {"label": "F9", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "F10", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "F11", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "F12", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "PrtSc", "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": "\u00ac", "matrix": [1, 0], "x": 0, "y": 1.5},
+ {"label": "!", "matrix": [1, 1], "x": 1, "y": 1.5},
+ {"label": "\"", "matrix": [1, 2], "x": 2, "y": 1.5},
+ {"label": "\u00a3", "matrix": [1, 3], "x": 3, "y": 1.5},
+ {"label": "$", "matrix": [1, 4], "x": 4, "y": 1.5},
+ {"label": "%", "matrix": [1, 5], "x": 5, "y": 1.5},
+ {"label": "^", "matrix": [1, 6], "x": 6, "y": 1.5},
+ {"label": "&", "matrix": [1, 7], "x": 7, "y": 1.5},
+ {"label": "*", "matrix": [1, 8], "x": 8, "y": 1.5},
+ {"label": "(", "matrix": [1, 9], "x": 9, "y": 1.5},
+ {"label": ")", "matrix": [1, 10], "x": 10, "y": 1.5},
+ {"label": "_", "matrix": [1, 11], "x": 11, "y": 1.5},
+ {"label": "+", "matrix": [1, 12], "x": 12, "y": 1.5},
+ {"label": "Backspace", "matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.5},
+ {"label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.5},
+ {"label": "PgUp", "matrix": [1, 17], "x": 17.25, "y": 1.5},
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"label": "Q", "matrix": [2, 2], "x": 1.5, "y": 2.5},
+ {"label": "W", "matrix": [2, 3], "x": 2.5, "y": 2.5},
+ {"label": "E", "matrix": [2, 4], "x": 3.5, "y": 2.5},
+ {"label": "R", "matrix": [2, 5], "x": 4.5, "y": 2.5},
+ {"label": "T", "matrix": [2, 6], "x": 5.5, "y": 2.5},
+ {"label": "Y", "matrix": [2, 7], "x": 6.5, "y": 2.5},
+ {"label": "U", "matrix": [2, 8], "x": 7.5, "y": 2.5},
+ {"label": "I", "matrix": [2, 9], "x": 8.5, "y": 2.5},
+ {"label": "O", "matrix": [2, 10], "x": 9.5, "y": 2.5},
+ {"label": "P", "matrix": [2, 11], "x": 10.5, "y": 2.5},
+ {"label": "{", "matrix": [2, 12], "x": 11.5, "y": 2.5},
+ {"label": "}", "matrix": [2, 13], "x": 12.5, "y": 2.5},
+ {"label": "|", "matrix": [2, 14], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"label": "Delete", "matrix": [2, 15], "x": 15.25, "y": 2.5},
+ {"label": "End", "matrix": [2, 16], "x": 16.25, "y": 2.5},
+ {"label": "PgDn", "matrix": [2, 17], "x": 17.25, "y": 2.5},
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"label": "A", "matrix": [3, 2], "x": 1.75, "y": 3.5},
+ {"label": "S", "matrix": [3, 3], "x": 2.75, "y": 3.5},
+ {"label": "D", "matrix": [3, 4], "x": 3.75, "y": 3.5},
+ {"label": "F", "matrix": [3, 5], "x": 4.75, "y": 3.5},
+ {"label": "G", "matrix": [3, 6], "x": 5.75, "y": 3.5},
+ {"label": "H", "matrix": [3, 7], "x": 6.75, "y": 3.5},
+ {"label": "J", "matrix": [3, 8], "x": 7.75, "y": 3.5},
+ {"label": "K", "matrix": [3, 9], "x": 8.75, "y": 3.5},
+ {"label": "L", "matrix": [3, 10], "x": 9.75, "y": 3.5},
+ {"label": ":", "matrix": [3, 11], "x": 10.75, "y": 3.5},
+ {"label": "@", "matrix": [3, 12], "x": 11.75, "y": 3.5},
+ {"label": "Enter", "matrix": [3, 14], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.5, "w": 2.75},
+ {"label": "\u2191", "matrix": [4, 16], "x": 16.25, "y": 4.5},
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"label": "Win", "matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"label": "AltGr", "matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.25},
+ {"label": "Win", "matrix": [5, 11], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"label": "Menu", "matrix": [5, 13], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 14], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"label": "\u2190", "matrix": [5, 15], "x": 15.25, "y": 5.5},
+ {"label": "\u2193", "matrix": [5, 16], "x": 16.25, "y": 5.5},
+ {"label": "\u2192", "matrix": [5, 17], "x": 17.25, "y": 5.5}
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "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, 7], "x": 6.5, "y": 0},
+ {"label": "F6", "matrix": [0, 8], "x": 7.5, "y": 0},
+ {"label": "F7", "matrix": [0, 9], "x": 8.5, "y": 0},
+ {"label": "F8", "matrix": [0, 10], "x": 9.5, "y": 0},
+ {"label": "F9", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "F10", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "F11", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "F12", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "PrtSc", "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": "\u00ac", "matrix": [1, 0], "x": 0, "y": 1.5},
+ {"label": "!", "matrix": [1, 1], "x": 1, "y": 1.5},
+ {"label": "\"", "matrix": [1, 2], "x": 2, "y": 1.5},
+ {"label": "\u00a3", "matrix": [1, 3], "x": 3, "y": 1.5},
+ {"label": "$", "matrix": [1, 4], "x": 4, "y": 1.5},
+ {"label": "%", "matrix": [1, 5], "x": 5, "y": 1.5},
+ {"label": "^", "matrix": [1, 6], "x": 6, "y": 1.5},
+ {"label": "&", "matrix": [1, 7], "x": 7, "y": 1.5},
+ {"label": "*", "matrix": [1, 8], "x": 8, "y": 1.5},
+ {"label": "(", "matrix": [1, 9], "x": 9, "y": 1.5},
+ {"label": ")", "matrix": [1, 10], "x": 10, "y": 1.5},
+ {"label": "_", "matrix": [1, 11], "x": 11, "y": 1.5},
+ {"label": "+", "matrix": [1, 12], "x": 12, "y": 1.5},
+ {"label": "Backspace", "matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.5},
+ {"label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.5},
+ {"label": "PgUp", "matrix": [1, 17], "x": 17.25, "y": 1.5},
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"label": "Q", "matrix": [2, 2], "x": 1.5, "y": 2.5},
+ {"label": "W", "matrix": [2, 3], "x": 2.5, "y": 2.5},
+ {"label": "E", "matrix": [2, 4], "x": 3.5, "y": 2.5},
+ {"label": "R", "matrix": [2, 5], "x": 4.5, "y": 2.5},
+ {"label": "T", "matrix": [2, 6], "x": 5.5, "y": 2.5},
+ {"label": "Y", "matrix": [2, 7], "x": 6.5, "y": 2.5},
+ {"label": "U", "matrix": [2, 8], "x": 7.5, "y": 2.5},
+ {"label": "I", "matrix": [2, 9], "x": 8.5, "y": 2.5},
+ {"label": "O", "matrix": [2, 10], "x": 9.5, "y": 2.5},
+ {"label": "P", "matrix": [2, 11], "x": 10.5, "y": 2.5},
+ {"label": "{", "matrix": [2, 12], "x": 11.5, "y": 2.5},
+ {"label": "}", "matrix": [2, 13], "x": 12.5, "y": 2.5},
+ {"label": "Delete", "matrix": [2, 15], "x": 15.25, "y": 2.5},
+ {"label": "End", "matrix": [2, 16], "x": 16.25, "y": 2.5},
+ {"label": "PgDn", "matrix": [2, 17], "x": 17.25, "y": 2.5},
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"label": "A", "matrix": [3, 2], "x": 1.75, "y": 3.5},
+ {"label": "S", "matrix": [3, 3], "x": 2.75, "y": 3.5},
+ {"label": "D", "matrix": [3, 4], "x": 3.75, "y": 3.5},
+ {"label": "F", "matrix": [3, 5], "x": 4.75, "y": 3.5},
+ {"label": "G", "matrix": [3, 6], "x": 5.75, "y": 3.5},
+ {"label": "H", "matrix": [3, 7], "x": 6.75, "y": 3.5},
+ {"label": "J", "matrix": [3, 8], "x": 7.75, "y": 3.5},
+ {"label": "K", "matrix": [3, 9], "x": 8.75, "y": 3.5},
+ {"label": "L", "matrix": [3, 10], "x": 9.75, "y": 3.5},
+ {"label": ":", "matrix": [3, 11], "x": 10.75, "y": 3.5},
+ {"label": "@", "matrix": [3, 12], "x": 11.75, "y": 3.5},
+ {"label": "~", "matrix": [3, 13], "x": 12.75, "y": 3.5},
+ {"label": "Enter", "matrix": [3, 14], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"label": "|", "matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.5, "w": 2.75},
+ {"label": "\u2191", "matrix": [4, 16], "x": 16.25, "y": 4.5},
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"label": "Win", "matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"label": "AltGr", "matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.25},
+ {"label": "Win", "matrix": [5, 11], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"label": "Menu", "matrix": [5, 13], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 14], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"label": "\u2190", "matrix": [5, 15], "x": 15.25, "y": 5.5},
+ {"label": "\u2193", "matrix": [5, 16], "x": 16.25, "y": 5.5},
+ {"label": "\u2192", "matrix": [5, 17], "x": 17.25, "y": 5.5}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/enviousdesign/delirium/rev1/keymaps/default/keymap.c b/keyboards/enviousdesign/delirium/rev1/keymaps/default/keymap.c
new file mode 100644
index 000000000000..02a2b616efba
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rev1/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2022 Adam K (@Envious-Data)
+ *
+ * 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_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_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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOTLOADER, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MUTE, KC_VOLD, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_EXEC, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/enviousdesign/delirium/rev1/keymaps/via/keymap.c b/keyboards/enviousdesign/delirium/rev1/keymaps/via/keymap.c
new file mode 100644
index 000000000000..02a2b616efba
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rev1/keymaps/via/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2022 Adam K (@Envious-Data)
+ *
+ * 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_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_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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOTLOADER, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MUTE, KC_VOLD, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_EXEC, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/enviousdesign/delirium/rev1/keymaps/via/rules.mk b/keyboards/enviousdesign/delirium/rev1/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rev1/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/enviousdesign/delirium/rev1/rules.mk b/keyboards/enviousdesign/delirium/rev1/rules.mk
new file mode 100644
index 000000000000..837f4bffb53e
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rev1/rules.mk
@@ -0,0 +1 @@
+# This file is intentionally left blank
diff --git a/keyboards/enviousdesign/delirium/rgb/info.json b/keyboards/enviousdesign/delirium/rgb/info.json
new file mode 100644
index 000000000000..ad7d45d3cf75
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rgb/info.json
@@ -0,0 +1,239 @@
+{
+ "manufacturer": "Envious.Design",
+ "keyboard_name": "Delirium RGB",
+ "maintainer": "Envious.Design",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP19", "GP18", "GP17", "GP16"],
+ "rows": ["GP20", "GP21", "GP22", "GP26", "GP27", "GP28"]
+ },
+ "processor": "RP2040",
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "max_brightness": 64,
+ "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": [
+ {"matrix": [0, 0], "x": 0, "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, 7], "x": 84, "y": 0, "flags": 4},
+ {"matrix": [0, 8], "x": 97, "y": 0, "flags": 4},
+ {"matrix": [0, 9], "x": 110, "y": 0, "flags": 4},
+ {"matrix": [0, 10], "x": 123, "y": 0, "flags": 4},
+ {"matrix": [0, 11], "x": 143, "y": 0, "flags": 4},
+ {"matrix": [0, 12], "x": 156, "y": 0, "flags": 4},
+ {"matrix": [0, 13], "x": 169, "y": 0, "flags": 4},
+ {"matrix": [0, 14], "x": 182, "y": 0, "flags": 4},
+ {"matrix": [0, 15], "x": 198, "y": 0, "flags": 4},
+ {"matrix": [0, 16], "x": 211, "y": 0, "flags": 4},
+ {"matrix": [0, 17], "x": 224, "y": 0, "flags": 4},
+ {"matrix": [1, 0], "x": 0, "y": 17, "flags": 4},
+ {"matrix": [1, 1], "x": 13, "y": 17, "flags": 4},
+ {"matrix": [1, 2], "x": 26, "y": 17, "flags": 4},
+ {"matrix": [1, 3], "x": 39, "y": 17, "flags": 4},
+ {"matrix": [1, 4], "x": 52, "y": 17, "flags": 4},
+ {"matrix": [1, 5], "x": 65, "y": 17, "flags": 4},
+ {"matrix": [1, 6], "x": 78, "y": 17, "flags": 4},
+ {"matrix": [1, 7], "x": 91, "y": 17, "flags": 4},
+ {"matrix": [1, 8], "x": 104, "y": 17, "flags": 4},
+ {"matrix": [1, 9], "x": 117, "y": 17, "flags": 4},
+ {"matrix": [1, 10], "x": 130, "y": 17, "flags": 4},
+ {"matrix": [1, 11], "x": 143, "y": 17, "flags": 4},
+ {"matrix": [1, 12], "x": 156, "y": 17, "flags": 4},
+ {"matrix": [1, 14], "x": 175, "y": 17, "flags": 4},
+ {"matrix": [1, 15], "x": 198, "y": 17, "flags": 4},
+ {"matrix": [1, 16], "x": 211, "y": 17, "flags": 4},
+ {"matrix": [1, 17], "x": 224, "y": 17, "flags": 4},
+ {"matrix": [2, 0], "x": 3, "y": 29, "flags": 4},
+ {"matrix": [2, 2], "x": 19, "y": 29, "flags": 4},
+ {"matrix": [2, 3], "x": 32, "y": 29, "flags": 4},
+ {"matrix": [2, 4], "x": 45, "y": 29, "flags": 4},
+ {"matrix": [2, 5], "x": 58, "y": 29, "flags": 4},
+ {"matrix": [2, 6], "x": 71, "y": 29, "flags": 4},
+ {"matrix": [2, 7], "x": 84, "y": 29, "flags": 4},
+ {"matrix": [2, 8], "x": 97, "y": 29, "flags": 4},
+ {"matrix": [2, 9], "x": 110, "y": 29, "flags": 4},
+ {"matrix": [2, 10], "x": 123, "y": 29, "flags": 4},
+ {"matrix": [2, 11], "x": 136, "y": 29, "flags": 4},
+ {"matrix": [2, 12], "x": 149, "y": 29, "flags": 4},
+ {"matrix": [2, 13], "x": 162, "y": 29, "flags": 4},
+ {"matrix": [3, 14], "x": 175, "y": 29, "flags": 4},
+ {"matrix": [2, 15], "x": 198, "y": 29, "flags": 4},
+ {"matrix": [2, 16], "x": 211, "y": 29, "flags": 4},
+ {"matrix": [2, 17], "x": 224, "y": 29, "flags": 4},
+ {"matrix": [3, 0], "x": 5, "y": 41, "flags": 8},
+ {"matrix": [3, 2], "x": 23, "y": 41, "flags": 4},
+ {"matrix": [3, 3], "x": 36, "y": 41, "flags": 4},
+ {"matrix": [3, 4], "x": 49, "y": 41, "flags": 4},
+ {"matrix": [3, 5], "x": 62, "y": 41, "flags": 4},
+ {"matrix": [3, 6], "x": 75, "y": 41, "flags": 4},
+ {"matrix": [3, 7], "x": 88, "y": 41, "flags": 4},
+ {"matrix": [3, 8], "x": 101, "y": 41, "flags": 4},
+ {"matrix": [3, 9], "x": 114, "y": 41, "flags": 4},
+ {"matrix": [3, 10], "x": 127, "y": 41, "flags": 4},
+ {"matrix": [3, 11], "x": 140, "y": 41, "flags": 4},
+ {"matrix": [3, 12], "x": 153, "y": 41, "flags": 4},
+ {"matrix": [3, 13], "x": 166, "y": 41, "flags": 4},
+ {"matrix": [4, 0], "x": 2, "y": 52, "flags": 4},
+ {"matrix": [4, 1], "x": 16, "y": 52, "flags": 4},
+ {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4},
+ {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4},
+ {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4},
+ {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4},
+ {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4},
+ {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4},
+ {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4},
+ {"matrix": [4, 9], "x": 120, "y": 52, "flags": 4},
+ {"matrix": [4, 10], "x": 133, "y": 52, "flags": 4},
+ {"matrix": [4, 11], "x": 146, "y": 52, "flags": 4},
+ {"matrix": [4, 13], "x": 170, "y": 52, "flags": 4},
+ {"matrix": [4, 16], "x": 211, "y": 52, "flags": 4},
+ {"matrix": [5, 0], "x": 2, "y": 64, "flags": 4},
+ {"matrix": [5, 1], "x": 18, "y": 64, "flags": 4},
+ {"matrix": [5, 3], "x": 34, "y": 64, "flags": 4},
+ {"matrix": [5, 6], "x": 83, "y": 64, "flags": 4},
+ {"matrix": [5, 10], "x": 131, "y": 64, "flags": 4},
+ {"matrix": [5, 11], "x": 148, "y": 64, "flags": 4},
+ {"matrix": [5, 13], "x": 164, "y": 64, "flags": 4},
+ {"matrix": [5, 14], "x": 180, "y": 64, "flags": 4},
+ {"matrix": [5, 15], "x": 198, "y": 64, "flags": 4},
+ {"matrix": [5, 16], "x": 211, "y": 64, "flags": 4},
+ {"matrix": [5, 17], "x": 224, "y": 64, "flags": 4}
+ ]
+ },
+ "url": "http://envious.design",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0xA400",
+ "vid": "0xE739"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP0"
+ },
+ "community_layouts": ["tkl_iso"],
+ "layouts": {
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0, "w": 1},
+ {"label": "0,2", "matrix": [0, 2], "x": 2, "y": 0, "w": 1},
+ {"label": "0,3", "matrix": [0, 3], "x": 3, "y": 0, "w": 1},
+ {"label": "0,4", "matrix": [0, 4], "x": 4, "y": 0, "w": 1},
+ {"label": "0,5", "matrix": [0, 5], "x": 5, "y": 0, "w": 1},
+ {"label": "0,7", "matrix": [0, 7], "x": 6.5, "y": 0, "w": 1},
+ {"label": "0,8", "matrix": [0, 8], "x": 7.5, "y": 0, "w": 1},
+ {"label": "0,9", "matrix": [0, 9], "x": 8.5, "y": 0, "w": 1},
+ {"label": "0,10", "matrix": [0, 10], "x": 9.5, "y": 0, "w": 1},
+ {"label": "0,11", "matrix": [0, 11], "x": 11, "y": 0, "w": 1},
+ {"label": "0,12", "matrix": [0, 12], "x": 12, "y": 0, "w": 1},
+ {"label": "0,13", "matrix": [0, 13], "x": 13, "y": 0, "w": 1},
+ {"label": "0,14", "matrix": [0, 14], "x": 14, "y": 0, "w": 1},
+ {"label": "0,15", "matrix": [0, 15], "x": 15.25, "y": 0, "w": 1},
+ {"label": "0,16", "matrix": [0, 16], "x": 16.25, "y": 0, "w": 1},
+ {"label": "0,17", "matrix": [0, 17], "x": 17.25, "y": 0, "w": 1},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.5, "w": 1},
+ {"label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.5, "w": 1},
+ {"label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.5, "w": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.5, "w": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.5, "w": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.5, "w": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.5, "w": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.5, "w": 1},
+ {"label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.5, "w": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.5, "w": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.5, "w": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.5, "w": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.5, "w": 1},
+ {"label": "1,14", "matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"label": "1,15", "matrix": [1, 15], "x": 15.25, "y": 1.5, "w": 1},
+ {"label": "1,16", "matrix": [1, 16], "x": 16.25, "y": 1.5, "w": 1},
+ {"label": "1,17", "matrix": [1, 17], "x": 17.25, "y": 1.5, "w": 1},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"label": "2,2", "matrix": [2, 2], "x": 1.5, "y": 2.5, "w": 1},
+ {"label": "2,3", "matrix": [2, 3], "x": 2.5, "y": 2.5, "w": 1},
+ {"label": "2,4", "matrix": [2, 4], "x": 3.5, "y": 2.5, "w": 1},
+ {"label": "2,5", "matrix": [2, 5], "x": 4.5, "y": 2.5, "w": 1},
+ {"label": "2,6", "matrix": [2, 6], "x": 5.5, "y": 2.5, "w": 1},
+ {"label": "2,7", "matrix": [2, 7], "x": 6.5, "y": 2.5, "w": 1},
+ {"label": "2,8", "matrix": [2, 8], "x": 7.5, "y": 2.5, "w": 1},
+ {"label": "2,9", "matrix": [2, 9], "x": 8.5, "y": 2.5, "w": 1},
+ {"label": "2,10", "matrix": [2, 10], "x": 9.5, "y": 2.5, "w": 1},
+ {"label": "2,11", "matrix": [2, 11], "x": 10.5, "y": 2.5, "w": 1},
+ {"label": "2,12", "matrix": [2, 12], "x": 11.5, "y": 2.5, "w": 1},
+ {"label": "2,13", "matrix": [2, 13], "x": 12.5, "y": 2.5, "w": 1},
+ {"label": "2,15", "matrix": [2, 15], "x": 15.25, "y": 2.5, "w": 1},
+ {"label": "2,16", "matrix": [2, 16], "x": 16.25, "y": 2.5, "w": 1},
+ {"label": "2,17", "matrix": [2, 17], "x": 17.25, "y": 2.5, "w": 1},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"label": "3,2", "matrix": [3, 2], "x": 1.75, "y": 3.5, "w": 1},
+ {"label": "3,3", "matrix": [3, 3], "x": 2.75, "y": 3.5, "w": 1},
+ {"label": "3,4", "matrix": [3, 4], "x": 3.75, "y": 3.5, "w": 1},
+ {"label": "3,5", "matrix": [3, 5], "x": 4.75, "y": 3.5, "w": 1},
+ {"label": "3,6", "matrix": [3, 6], "x": 5.75, "y": 3.5, "w": 1},
+ {"label": "3,7", "matrix": [3, 7], "x": 6.75, "y": 3.5, "w": 1},
+ {"label": "3,8", "matrix": [3, 8], "x": 7.75, "y": 3.5, "w": 1},
+ {"label": "3,9", "matrix": [3, 9], "x": 8.75, "y": 3.5, "w": 1},
+ {"label": "3,10", "matrix": [3, 10], "x": 9.75, "y": 3.5, "w": 1},
+ {"label": "3,11", "matrix": [3, 11], "x": 10.75, "y": 3.5, "w": 1},
+ {"label": "3,12", "matrix": [3, 12], "x": 11.75, "y": 3.5, "w": 1},
+ {"label": "3,13", "matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 1},
+ {"label": "3,14", "matrix": [3, 14], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4.5, "w": 1},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.5, "w": 1},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.5, "w": 1},
+ {"label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.5, "w": 1},
+ {"label": "4,5", "matrix": [4, 5], "x": 5.25, "y": 4.5, "w": 1},
+ {"label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4.5, "w": 1},
+ {"label": "4,7", "matrix": [4, 7], "x": 7.25, "y": 4.5, "w": 1},
+ {"label": "4,8", "matrix": [4, 8], "x": 8.25, "y": 4.5, "w": 1},
+ {"label": "4,9", "matrix": [4, 9], "x": 9.25, "y": 4.5, "w": 1},
+ {"label": "4,10", "matrix": [4, 10], "x": 10.25, "y": 4.5, "w": 1},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4.5, "w": 1},
+ {"label": "4,13", "matrix": [4, 13], "x": 12.25, "y": 4.5, "w": 2.75},
+ {"label": "4,16", "matrix": [4, 16], "x": 16.25, "y": 4.5, "w": 1},
+ {"label": "5,0", "matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"label": "5,1", "matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"label": "5,3", "matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"label": "5,6", "matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"label": "5,10", "matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.25},
+ {"label": "5,11", "matrix": [5, 11], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"label": "5,13", "matrix": [5, 13], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"label": "5,14", "matrix": [5, 14], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"label": "5,15", "matrix": [5, 15], "x": 15.25, "y": 5.5, "w": 1},
+ {"label": "5,16", "matrix": [5, 16], "x": 16.25, "y": 5.5, "w": 1},
+ {"label": "5,17", "matrix": [5, 17], "x": 17.25, "y": 5.5, "w": 1}
+ ]
+ }
+ }
+}
diff --git a/keyboards/enviousdesign/delirium/rgb/keymaps/default/keymap.c b/keyboards/enviousdesign/delirium/rgb/keymaps/default/keymap.c
new file mode 100644
index 000000000000..d791874aff03
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rgb/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2022 Adam K (@Envious-Data)
+ *
+ * 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_tkl_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_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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_iso(
+ QK_BOOTLOADER, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MUTE, KC_VOLD, 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_TRNS, RGB_MOD, RGB_SAI, RGB_VAI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD,RGB_SAD, RGB_VAD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI, RGB_SPD, RGB_HUD
+ )
+};
+
diff --git a/keyboards/enviousdesign/delirium/rgb/rgb.c b/keyboards/enviousdesign/delirium/rgb/rgb.c
new file mode 100644
index 000000000000..e6a3354b299e
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rgb/rgb.c
@@ -0,0 +1,35 @@
+/* Copyright 2022 Adam K (@Envious-Data)
+ *
+ * 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
+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(50, 16, 16, 16); // assuming caps lock is at led #50
+ }
+ if (host_keyboard_led_state().scroll_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(14, 16, 16, 16); // assuming scroll lock is at led #14
+ }
+ if (get_highest_layer(layer_state) == 1) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(83, 16, 16 ,16);
+ }
+ return true;
+}
+#endif
\ No newline at end of file
diff --git a/keyboards/enviousdesign/delirium/rgb/rules.mk b/keyboards/enviousdesign/delirium/rgb/rules.mk
new file mode 100644
index 000000000000..837f4bffb53e
--- /dev/null
+++ b/keyboards/enviousdesign/delirium/rgb/rules.mk
@@ -0,0 +1 @@
+# This file is intentionally left blank
diff --git a/keyboards/enviousdesign/mcro/readme.md b/keyboards/enviousdesign/mcro/readme.md
new file mode 100644
index 000000000000..378fab8c3efa
--- /dev/null
+++ b/keyboards/enviousdesign/mcro/readme.md
@@ -0,0 +1,30 @@
+# EnvKB MCRO
+
+![Image of EnvKB MCRO PCB](https://i.imgur.com/QnANWnBh.png)
+
+A small 12 Key macro pad for various uses
+
+* Keyboard Maintainer: [Envious-Data](https://github.com/envious-data)
+* Hardware Supported: EnvKB MCRO (Pi Pico)
+* Hardware Availability: [GitHub](https://github.com/Envious-Data/Env-MCRO)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make enviousdesign/mcro:default
+
+Flashing example for this keyboard:
+
+ make enviousdesign/mcro: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. This will also clear the emulated EEPROM, so it is a good first step if the keyboard is misbehaving.
+* **Physical reset**: Hold down the `BOOTSEL` button on the Pi Pico, then either plug the board in or press the `RESET` button.
+* **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.
+
+After entering the bootloader through one of the three methods above, the keyboard will appear as a USB mass storage device named `RPI-RP2`. If the CLI is unable to find this device, the compiled `.uf2` file can be manually copied to it. The keyboard will reboot on completion with the new firmware loaded.
+
diff --git a/keyboards/enviousdesign/mcro/rev1/info.json b/keyboards/enviousdesign/mcro/rev1/info.json
new file mode 100644
index 000000000000..fe6a4ffe77c8
--- /dev/null
+++ b/keyboards/enviousdesign/mcro/rev1/info.json
@@ -0,0 +1,44 @@
+{
+ "manufacturer": "Envious.Design",
+ "keyboard_name": "MCRO",
+ "maintainer": "Envious.Design",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP18", "GP19", "GP20", "GP21"],
+ "rows": ["GP4", "GP11", "GP15"]
+ },
+ "processor": "RP2040",
+ "url": "http://envious.design",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0xA300",
+ "vid": "0xE739"
+ },
+ "layouts": {
+ "LAYOUT_ortho_3x4": {
+ "layout": [
+ {"label": "F13", "matrix": [0, 0], "x": 0, "y": 0, "w": 1},
+ {"label": "F14", "matrix": [0, 1], "x": 1, "y": 0, "w": 1},
+ {"label": "F15", "matrix": [0, 2], "x": 2, "y": 0, "w": 1},
+ {"label": "F16", "matrix": [0, 3], "x": 3, "y": 0, "w": 1},
+ {"label": "F17", "matrix": [1, 0], "x": 0, "y": 1.25, "w": 1},
+ {"label": "F18", "matrix": [1, 1], "x": 1, "y": 1.25, "w": 1},
+ {"label": "F19", "matrix": [1, 2], "x": 2, "y": 1.25, "w": 1},
+ {"label": "F20", "matrix": [1, 3], "x": 3, "y": 1.25, "w": 1},
+ {"label": "F21", "matrix": [2, 0], "x": 0, "y": 2.5, "w": 1},
+ {"label": "F22", "matrix": [2, 1], "x": 1, "y": 2.5, "w": 1},
+ {"label": "F23", "matrix": [2, 2], "x": 2, "y": 2.5, "w": 1},
+ {"label": "F24", "matrix": [2, 3], "x": 3, "y": 2.5, "w": 1}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/enviousdesign/mcro/rev1/keymaps/default/keymap.c b/keyboards/enviousdesign/mcro/rev1/keymaps/default/keymap.c
new file mode 100644
index 000000000000..e9def4a38fcf
--- /dev/null
+++ b/keyboards/enviousdesign/mcro/rev1/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/* Copyright 2022 Adam K (@Envious-Data)
+ *
+ * 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_ortho_3x4(
+ KC_F13, KC_F14, KC_F15, KC_F16,
+ KC_F17, KC_F18, KC_F19, KC_F20,
+ KC_F21, KC_F22, KC_F23, KC_F24
+ )
+};
+
diff --git a/keyboards/enviousdesign/mcro/rev1/keymaps/via/keymap.c b/keyboards/enviousdesign/mcro/rev1/keymaps/via/keymap.c
new file mode 100644
index 000000000000..35b46697c141
--- /dev/null
+++ b/keyboards/enviousdesign/mcro/rev1/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2022 Adam K (@Envious-Data)
+ *
+ * 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_ortho_3x4(
+ KC_F13, KC_F14, KC_F15, KC_F16,
+ KC_F17, KC_F18, KC_F19, KC_F20,
+ KC_F21, KC_F22, KC_F23, KC_F24
+ )
+};
+
diff --git a/keyboards/enviousdesign/mcro/rev1/keymaps/via/rules.mk b/keyboards/enviousdesign/mcro/rev1/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/enviousdesign/mcro/rev1/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/enviousdesign/mcro/rev1/rules.mk b/keyboards/enviousdesign/mcro/rev1/rules.mk
new file mode 100644
index 000000000000..837f4bffb53e
--- /dev/null
+++ b/keyboards/enviousdesign/mcro/rev1/rules.mk
@@ -0,0 +1 @@
+# This file is intentionally left blank
diff --git a/keyboards/era/sirind/klein_hs/config.h b/keyboards/era/sirind/klein_hs/config.h
new file mode 100644
index 000000000000..bbd438736357
--- /dev/null
+++ b/keyboards/era/sirind/klein_hs/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 eerraa
+ *
+ * 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
+
+/* BACKLIGHT PWM */
+#define BACKLIGHT_PWM_DRIVER PWMD7
+#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_B
\ No newline at end of file
diff --git a/keyboards/era/sirind/klein_hs/halconf.h b/keyboards/era/sirind/klein_hs/halconf.h
new file mode 100644
index 000000000000..f57e86df018d
--- /dev/null
+++ b/keyboards/era/sirind/klein_hs/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 eerraa
+ *
+ * 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
+
+#include_next
\ No newline at end of file
diff --git a/keyboards/era/sirind/klein_hs/info.json b/keyboards/era/sirind/klein_hs/info.json
new file mode 100644
index 000000000000..6d677f6748d1
--- /dev/null
+++ b/keyboards/era/sirind/klein_hs/info.json
@@ -0,0 +1,467 @@
+{
+ "manufacturer": "SIRIND",
+ "keyboard_name": "Klein_HS",
+ "maintainer": "eerraa",
+ "backlight": {
+ "levels": 5,
+ "pin": "GP15"
+ },
+ "bootloader": "rp2040",
+ "build": {
+ "debounce_type": "sym_defer_pk"
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ },
+ "indicators": {
+ "caps_lock": "GP16",
+ "on_state": 0,
+ "scroll_lock": "GP17"
+ },
+ "matrix_pins": {
+ "cols": ["GP22", "GP23", "GP24", "GP25", "GP26", "GP27", "GP28", "GP29", "GP11", "GP10", "GP9", "GP8", "GP7", "GP1", "GP2", "GP3"],
+ "rows": ["GP18", "GP19", "GP20", "GP21", "GP14", "GP5", "GP6", "GP4", "GP13", "GP12"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0004",
+ "vid": "0x4552"
+ },
+ "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, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [5, 8], "x": 10.75, "y": 0},
+ {"matrix": [5, 9], "x": 11.75, "y": 0},
+ {"matrix": [5, 10], "x": 12.75, "y": 0},
+ {"matrix": [5, 11], "x": 13.75, "y": 0},
+ {"matrix": [5, 12], "x": 14.75, "y": 0},
+ {"matrix": [5, 13], "x": 15.75, "y": 0},
+ {"matrix": [5, 14], "x": 16.75, "y": 0},
+ {"matrix": [5, 15], "x": 17.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 3, "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": [6, 8], "x": 10.25, "y": 1},
+ {"matrix": [6, 9], "x": 11.25, "y": 1},
+ {"matrix": [6, 10], "x": 12.25, "y": 1},
+ {"matrix": [6, 11], "x": 13.25, "y": 1},
+ {"matrix": [6, 12], "x": 14.25, "y": 1},
+ {"matrix": [6, 13], "x": 15.25, "y": 1},
+ {"matrix": [6, 14], "x": 16.25, "y": 1},
+ {"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3.25, "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": [7, 8], "x": 10.5, "y": 2},
+ {"matrix": [7, 9], "x": 11.5, "y": 2},
+ {"matrix": [7, 10], "x": 12.5, "y": 2},
+ {"matrix": [7, 11], "x": 13.5, "y": 2},
+ {"matrix": [7, 12], "x": 14.5, "y": 2},
+ {"matrix": [7, 13], "x": 15.5, "y": 2},
+ {"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.75, "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": [8, 8], "x": 10, "y": 3},
+ {"matrix": [8, 9], "x": 11, "y": 3},
+ {"matrix": [8, 10], "x": 12, "y": 3},
+ {"matrix": [8, 11], "x": 13, "y": 3},
+ {"matrix": [8, 12], "x": 14, "y": 3},
+ {"matrix": [8, 13], "x": 15, "y": 3},
+ {"matrix": [8, 14], "x": 16, "y": 3, "w": 1.75},
+ {"matrix": [8, 15], "x": 17.75, "y": 3},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 8.25, "y": 4},
+ {"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
+ {"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
+ {"matrix": [9, 13], "x": 15, "y": 4},
+ {"matrix": [9, 14], "x": 16, "y": 4},
+ {"matrix": [9, 15], "x": 17, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "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, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [5, 8], "x": 10.75, "y": 0},
+ {"matrix": [5, 9], "x": 11.75, "y": 0},
+ {"matrix": [5, 10], "x": 12.75, "y": 0},
+ {"matrix": [5, 11], "x": 13.75, "y": 0},
+ {"matrix": [5, 12], "x": 14.75, "y": 0},
+ {"matrix": [5, 13], "x": 15.75, "y": 0},
+ {"matrix": [5, 15], "x": 16.75, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 3, "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": [6, 8], "x": 10.25, "y": 1},
+ {"matrix": [6, 9], "x": 11.25, "y": 1},
+ {"matrix": [6, 10], "x": 12.25, "y": 1},
+ {"matrix": [6, 11], "x": 13.25, "y": 1},
+ {"matrix": [6, 12], "x": 14.25, "y": 1},
+ {"matrix": [6, 13], "x": 15.25, "y": 1},
+ {"matrix": [6, 14], "x": 16.25, "y": 1},
+ {"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3.25, "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": [7, 8], "x": 10.5, "y": 2},
+ {"matrix": [7, 9], "x": 11.5, "y": 2},
+ {"matrix": [7, 10], "x": 12.5, "y": 2},
+ {"matrix": [7, 11], "x": 13.5, "y": 2},
+ {"matrix": [7, 12], "x": 14.5, "y": 2},
+ {"matrix": [7, 13], "x": 15.5, "y": 2},
+ {"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.75, "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": [8, 8], "x": 10, "y": 3},
+ {"matrix": [8, 9], "x": 11, "y": 3},
+ {"matrix": [8, 10], "x": 12, "y": 3},
+ {"matrix": [8, 11], "x": 13, "y": 3},
+ {"matrix": [8, 12], "x": 14, "y": 3},
+ {"matrix": [8, 13], "x": 15, "y": 3},
+ {"matrix": [8, 14], "x": 16, "y": 3, "w": 2.75},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 8.25, "y": 4},
+ {"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
+ {"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
+ {"matrix": [9, 15], "x": 17.25, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_ansi_arrow": {
+ "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, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [5, 8], "x": 10.75, "y": 0},
+ {"matrix": [5, 9], "x": 11.75, "y": 0},
+ {"matrix": [5, 10], "x": 12.75, "y": 0},
+ {"matrix": [5, 11], "x": 13.75, "y": 0},
+ {"matrix": [5, 12], "x": 14.75, "y": 0},
+ {"matrix": [5, 13], "x": 15.75, "y": 0},
+ {"matrix": [5, 15], "x": 16.75, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 3, "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": [6, 8], "x": 10.25, "y": 1},
+ {"matrix": [6, 9], "x": 11.25, "y": 1},
+ {"matrix": [6, 10], "x": 12.25, "y": 1},
+ {"matrix": [6, 11], "x": 13.25, "y": 1},
+ {"matrix": [6, 12], "x": 14.25, "y": 1},
+ {"matrix": [6, 13], "x": 15.25, "y": 1},
+ {"matrix": [6, 14], "x": 16.25, "y": 1},
+ {"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3.25, "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": [7, 8], "x": 10.5, "y": 2},
+ {"matrix": [7, 9], "x": 11.5, "y": 2},
+ {"matrix": [7, 10], "x": 12.5, "y": 2},
+ {"matrix": [7, 11], "x": 13.5, "y": 2},
+ {"matrix": [7, 12], "x": 14.5, "y": 2},
+ {"matrix": [7, 13], "x": 15.5, "y": 2},
+ {"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.75, "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": [8, 8], "x": 10, "y": 3},
+ {"matrix": [8, 9], "x": 11, "y": 3},
+ {"matrix": [8, 10], "x": 12, "y": 3},
+ {"matrix": [8, 11], "x": 13, "y": 3},
+ {"matrix": [8, 12], "x": 14, "y": 3},
+ {"matrix": [8, 13], "x": 15, "y": 3},
+ {"matrix": [8, 14], "x": 16, "y": 3},
+ {"matrix": [8, 15], "x": 17, "y": 3, "w": 1.75},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 8.25, "y": 4},
+ {"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
+ {"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
+ {"matrix": [9, 13], "x": 15, "y": 4},
+ {"matrix": [9, 14], "x": 16, "y": 4},
+ {"matrix": [9, 15], "x": 17, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_split_bs": {
+ "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, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [5, 8], "x": 10.75, "y": 0},
+ {"matrix": [5, 9], "x": 11.75, "y": 0},
+ {"matrix": [5, 10], "x": 12.75, "y": 0},
+ {"matrix": [5, 11], "x": 13.75, "y": 0},
+ {"matrix": [5, 12], "x": 14.75, "y": 0},
+ {"matrix": [5, 13], "x": 15.75, "y": 0},
+ {"matrix": [5, 14], "x": 16.75, "y": 0},
+ {"matrix": [5, 15], "x": 17.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 3, "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": [6, 8], "x": 10.25, "y": 1},
+ {"matrix": [6, 9], "x": 11.25, "y": 1},
+ {"matrix": [6, 10], "x": 12.25, "y": 1},
+ {"matrix": [6, 11], "x": 13.25, "y": 1},
+ {"matrix": [6, 12], "x": 14.25, "y": 1},
+ {"matrix": [6, 13], "x": 15.25, "y": 1},
+ {"matrix": [6, 14], "x": 16.25, "y": 1},
+ {"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3.25, "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": [7, 8], "x": 10.5, "y": 2},
+ {"matrix": [7, 9], "x": 11.5, "y": 2},
+ {"matrix": [7, 10], "x": 12.5, "y": 2},
+ {"matrix": [7, 11], "x": 13.5, "y": 2},
+ {"matrix": [7, 12], "x": 14.5, "y": 2},
+ {"matrix": [7, 13], "x": 15.5, "y": 2},
+ {"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.75, "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": [8, 8], "x": 10, "y": 3},
+ {"matrix": [8, 9], "x": 11, "y": 3},
+ {"matrix": [8, 10], "x": 12, "y": 3},
+ {"matrix": [8, 11], "x": 13, "y": 3},
+ {"matrix": [8, 12], "x": 14, "y": 3},
+ {"matrix": [8, 13], "x": 15, "y": 3},
+ {"matrix": [8, 14], "x": 16, "y": 3, "w": 2.75},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 8.25, "y": 4},
+ {"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
+ {"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
+ {"matrix": [9, 15], "x": 17.25, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_ansi_split_bs_rsft": {
+ "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, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [5, 8], "x": 10.75, "y": 0},
+ {"matrix": [5, 9], "x": 11.75, "y": 0},
+ {"matrix": [5, 10], "x": 12.75, "y": 0},
+ {"matrix": [5, 11], "x": 13.75, "y": 0},
+ {"matrix": [5, 12], "x": 14.75, "y": 0},
+ {"matrix": [5, 13], "x": 15.75, "y": 0},
+ {"matrix": [5, 14], "x": 16.75, "y": 0},
+ {"matrix": [5, 15], "x": 17.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 3, "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": [6, 8], "x": 10.25, "y": 1},
+ {"matrix": [6, 9], "x": 11.25, "y": 1},
+ {"matrix": [6, 10], "x": 12.25, "y": 1},
+ {"matrix": [6, 11], "x": 13.25, "y": 1},
+ {"matrix": [6, 12], "x": 14.25, "y": 1},
+ {"matrix": [6, 13], "x": 15.25, "y": 1},
+ {"matrix": [6, 14], "x": 16.25, "y": 1},
+ {"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3.25, "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": [7, 8], "x": 10.5, "y": 2},
+ {"matrix": [7, 9], "x": 11.5, "y": 2},
+ {"matrix": [7, 10], "x": 12.5, "y": 2},
+ {"matrix": [7, 11], "x": 13.5, "y": 2},
+ {"matrix": [7, 12], "x": 14.5, "y": 2},
+ {"matrix": [7, 13], "x": 15.5, "y": 2},
+ {"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.75, "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": [8, 8], "x": 10, "y": 3},
+ {"matrix": [8, 9], "x": 11, "y": 3},
+ {"matrix": [8, 10], "x": 12, "y": 3},
+ {"matrix": [8, 11], "x": 13, "y": 3},
+ {"matrix": [8, 12], "x": 14, "y": 3},
+ {"matrix": [8, 13], "x": 15, "y": 3},
+ {"matrix": [8, 14], "x": 16, "y": 3, "w": 1.75},
+ {"matrix": [8, 15], "x": 17.75, "y": 3},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 8.25, "y": 4},
+ {"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
+ {"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
+ {"matrix": [9, 15], "x": 17.25, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_arrow_split_bs": {
+ "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, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [5, 8], "x": 10.75, "y": 0},
+ {"matrix": [5, 9], "x": 11.75, "y": 0},
+ {"matrix": [5, 10], "x": 12.75, "y": 0},
+ {"matrix": [5, 11], "x": 13.75, "y": 0},
+ {"matrix": [5, 12], "x": 14.75, "y": 0},
+ {"matrix": [5, 13], "x": 15.75, "y": 0},
+ {"matrix": [5, 14], "x": 16.75, "y": 0},
+ {"matrix": [5, 15], "x": 17.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 3, "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": [6, 8], "x": 10.25, "y": 1},
+ {"matrix": [6, 9], "x": 11.25, "y": 1},
+ {"matrix": [6, 10], "x": 12.25, "y": 1},
+ {"matrix": [6, 11], "x": 13.25, "y": 1},
+ {"matrix": [6, 12], "x": 14.25, "y": 1},
+ {"matrix": [6, 13], "x": 15.25, "y": 1},
+ {"matrix": [6, 14], "x": 16.25, "y": 1},
+ {"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3.25, "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": [7, 8], "x": 10.5, "y": 2},
+ {"matrix": [7, 9], "x": 11.5, "y": 2},
+ {"matrix": [7, 10], "x": 12.5, "y": 2},
+ {"matrix": [7, 11], "x": 13.5, "y": 2},
+ {"matrix": [7, 12], "x": 14.5, "y": 2},
+ {"matrix": [7, 13], "x": 15.5, "y": 2},
+ {"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.75, "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": [8, 8], "x": 10, "y": 3},
+ {"matrix": [8, 9], "x": 11, "y": 3},
+ {"matrix": [8, 10], "x": 12, "y": 3},
+ {"matrix": [8, 11], "x": 13, "y": 3},
+ {"matrix": [8, 12], "x": 14, "y": 3},
+ {"matrix": [8, 13], "x": 15, "y": 3},
+ {"matrix": [8, 14], "x": 16, "y": 3},
+ {"matrix": [8, 15], "x": 17, "y": 3, "w": 1.75},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 8.25, "y": 4},
+ {"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
+ {"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
+ {"matrix": [9, 13], "x": 15, "y": 4},
+ {"matrix": [9, 14], "x": 16, "y": 4},
+ {"matrix": [9, 15], "x": 17, "y": 4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/era/sirind/klein_hs/keymaps/default/keymap.c b/keyboards/era/sirind/klein_hs/keymaps/default/keymap.c
new file mode 100644
index 000000000000..88878bbcd936
--- /dev/null
+++ b/keyboards/era/sirind/klein_hs/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+// 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(
+ 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_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, 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_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, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, 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_PSCR, 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,
+ KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/era/sirind/klein_hs/keymaps/via/keymap.c b/keyboards/era/sirind/klein_hs/keymaps/via/keymap.c
new file mode 100644
index 000000000000..88878bbcd936
--- /dev/null
+++ b/keyboards/era/sirind/klein_hs/keymaps/via/keymap.c
@@ -0,0 +1,23 @@
+// 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(
+ 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_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, 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_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, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, 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_PSCR, 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,
+ KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/era/sirind/klein_hs/keymaps/via/rules.mk b/keyboards/era/sirind/klein_hs/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/era/sirind/klein_hs/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/era/sirind/klein_hs/mcuconf.h b/keyboards/era/sirind/klein_hs/mcuconf.h
new file mode 100644
index 000000000000..b82cc49d7d07
--- /dev/null
+++ b/keyboards/era/sirind/klein_hs/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 eerraa
+ *
+ * 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 RP_PWM_USE_PWM7
+#define RP_PWM_USE_PWM7 TRUE
\ No newline at end of file
diff --git a/keyboards/era/sirind/klein_hs/readme.md b/keyboards/era/sirind/klein_hs/readme.md
new file mode 100644
index 000000000000..86343271bbd2
--- /dev/null
+++ b/keyboards/era/sirind/klein_hs/readme.md
@@ -0,0 +1,23 @@
+# Mont Cervin Klein
+
+* Keyboard Maintainer: [ERA](https://github.com/eerraa)
+* Hardware supported: SIRIND Klein_HS
+* Hardware availability: [Syryan](https://srind.mysoho.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make era/sirind/klein_hs:default
+
+Flashing example for this keyboard:
+
+ make era/sirind/klein_hs:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at ESC(0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly short the `RESET` and `GND` pads on the SWD header twice, or short the `BOOT` header and plug in keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/era/sirind/klein_hs/rules.mk b/keyboards/era/sirind/klein_hs/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/handwired/dactyl_manuform/4x6_4_3/info.json b/keyboards/handwired/dactyl_manuform/4x6_4_3/info.json
new file mode 100644
index 000000000000..60830dbf80af
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6_4_3/info.json
@@ -0,0 +1,111 @@
+{
+ "keyboard_name": "Dactyl-Manuform (4x6 + 4 and 3 for thumbs)",
+ "manufacturer": "joshreve",
+ "url": "https://github.com/joshreve/dactyl-keyboard",
+ "maintainer": "rek",
+ "usb": {
+ "vid": "0x444D",
+ "pid": "0x3536",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "matrix_pins": {
+ "cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
+ "rows": ["F6", "F7", "B1", "B3", "B2", "B6"]
+ },
+ "diode_direction": "COL2ROW",
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "D0"
+ },
+ "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": [6, 0], "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, "y": 0},
+ {"matrix": [6, 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": [7, 0], "x": 11, "y": 1},
+ {"matrix": [7, 1], "x": 12, "y": 1},
+ {"matrix": [7, 2], "x": 13, "y": 1},
+ {"matrix": [7, 3], "x": 14, "y": 1},
+ {"matrix": [7, 4], "x": 15, "y": 1},
+ {"matrix": [7, 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": [8, 0], "x": 11, "y": 2},
+ {"matrix": [8, 1], "x": 12, "y": 2},
+ {"matrix": [8, 2], "x": 13, "y": 2},
+ {"matrix": [8, 3], "x": 14, "y": 2},
+ {"matrix": [8, 4], "x": 15, "y": 2},
+ {"matrix": [8, 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": [3, 5], "x": 5, "y": 3},
+
+ {"matrix": [9, 0], "x": 11, "y": 3},
+ {"matrix": [9, 1], "x": 12, "y": 3},
+ {"matrix": [9, 2], "x": 13, "y": 3},
+ {"matrix": [9, 3], "x": 14, "y": 3},
+ {"matrix": [9, 4], "x": 15, "y": 3},
+ {"matrix": [9, 5], "x": 16, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+
+ {"matrix": [10, 2], "x": 11, "y": 4},
+ {"matrix": [10, 3], "x": 12, "y": 4},
+ {"matrix": [10, 4], "x": 13, "y": 4},
+ {"matrix": [10, 5], "x": 14, "y": 4},
+
+ {"matrix": [5, 3], "x": 3, "y": 5},
+ {"matrix": [5, 4], "x": 4, "y": 5},
+ {"matrix": [5, 5], "x": 5, "y": 5},
+
+ {"matrix": [11, 0], "x": 14, "y": 5},
+ {"matrix": [11, 1], "x": 15, "y": 5},
+ {"matrix": [11, 2], "x": 16, "y": 5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_manuform/4x6_4_3/keymaps/default/config.h b/keyboards/handwired/dactyl_manuform/4x6_4_3/keymaps/default/config.h
new file mode 100644
index 000000000000..4d83c191f3c1
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6_4_3/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2012 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 MASTER_LEFT
+//#define MASTER_RIGHT
+
+//#define EE_HANDS
diff --git a/keyboards/handwired/dactyl_manuform/4x6_4_3/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/4x6_4_3/keymaps/default/keymap.c
new file mode 100644
index 000000000000..d8fe94a59bfd
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6_4_3/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+// Copyright 2023 Adam Tombleson (@rekarnar)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+
+enum layer_names {
+ _BASE,
+ _RAISE,
+ _LOWER
+};
+
+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_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_CAPS , 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_BSLS,
+ KC_LCTL , KC_TAB , KC_LSFT, KC_LALT, KC_COMMA,KC_DOT , KC_LBRC , KC_RBRC ,
+ LOWER, KC_SPC , KC_BSPC, RAISE , KC_ENT , KC_DEL
+ ),
+
+ [_LOWER] = LAYOUT(
+ _______ , KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR , KC_ASTR , KC_LPRN , KC_RPRN , KC_DEL,
+ QK_BOOT , _______, _______, _______, _______, _______, _______, _______ , _______ , _______ , KC_TILD , KC_PLUS,
+ _______ , KC_HOME, KC_PGUP, KC_PGDN, KC_END , _______, _______, KC_LEFT , KC_UP , KC_DOWN , KC_RGHT , KC_PIPE,
+ _______ , _______, _______, _______, _______, _______, _______, _______ , _______ , _______ , KC_EQL , KC_UNDS,
+ _______ , _______, _______, _______, KC_TILD, _______ , KC_LPRN , KC_RPRN ,
+ _______, KC_LGUI, LALT(KC_PSCR), C(S(KC_LEFT)), KC_GRAVE, C(S(KC_RIGHT))
+
+ ),
+
+ [_RAISE] = 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 ,
+ _______ , _______,_______ , _______, _______, _______, _______, _______ , _______ , _______ , _______ , _______,
+ _______ , _______,_______ , _______, _______, _______, _______, KC_HOME , KC_PGUP , KC_PGDN , KC_END , _______,
+ _______ , _______,_______ , _______, _______, _______, _______, _______ , _______ , _______ , _______ , _______,
+ _______ , _______,_______ , _______, _______, _______ , _______ , LALT(KC_TAB),
+ KC_VOLD, KC_MUTE, KC_VOLU, _______, _______ , _______
+ )
+};
diff --git a/keyboards/handwired/dactyl_manuform/4x6_4_3/readme.md b/keyboards/handwired/dactyl_manuform/4x6_4_3/readme.md
new file mode 100644
index 000000000000..c3574c52bb8f
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6_4_3/readme.md
@@ -0,0 +1,9 @@
+# Dactyl-Manuform (4x6 + 4 and 3 for thumbs)
+
+This is a 4x6 manuform with a 4 key bottom row and 3 key thumb clusters.
+
+The result is a 62 key layout.
+
+## Description
+
+* Keyboard Maintainer: https://github.com/joshreve/dactyl-keyboard
diff --git a/keyboards/handwired/dactyl_manuform/4x6_4_3/rules.mk b/keyboards/handwired/dactyl_manuform/4x6_4_3/rules.mk
new file mode 100644
index 000000000000..3bbd2614291a
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6_4_3/rules.mk
@@ -0,0 +1 @@
+# File intentionally blank
diff --git a/keyboards/handwired/split_cloud/config.h b/keyboards/handwired/split_cloud/config.h
new file mode 100644
index 000000000000..faa2750cafeb
--- /dev/null
+++ b/keyboards/handwired/split_cloud/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2023 Cloud Chagnon
+
+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
+
+/* left/right via compilation flag */
+#define EE_HANDS
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronztize 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/handwired/split_cloud/info.json b/keyboards/handwired/split_cloud/info.json
new file mode 100644
index 000000000000..6d28728f69a5
--- /dev/null
+++ b/keyboards/handwired/split_cloud/info.json
@@ -0,0 +1,118 @@
+{
+ "keyboard_name": "Split-Cloud",
+ "manufacturer": "coolsa",
+ "maintainer": "Cloud Chagnon",
+ "url": "https://github.com/coolsa/cloud_keyboard",
+ "usb": {
+ "vid": "0xCC43",
+ "pid": "0x0001",
+ "device_version": "0.0.1",
+ "force_nkro": true
+ },
+ "diode_direction": "ROW2COL",
+ "matrix_pins": {
+ "cols": ["B6", "B2", "B3", "B1", "F7", "F6"],
+ "rows": ["C6", "D7", "E6", "B4", "B5"]
+ },
+ "bootmagic": {
+ "enabled": true
+ },
+ "features": {
+ "extrakey": true,
+ "nkro": true
+ },
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "D3",
+ "matrix_pins": {
+ "right": {
+ "cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
+ "rows": ["F7", "B1", "B3", "B2", "B6"]
+ }
+ },
+ "bootmagic": {
+ "matrix": [5, 5]
+ }
+ },
+ "stenography": {
+ "enabled": true,
+ "protocol": "all"
+ }
+ "development_board": "promicro",
+ "community_layouts": ["ortho_5x12"],
+ "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, 5], "x": 7, "y": 0},
+ {"matrix": [5, 4], "x": 8, "y": 0},
+ {"matrix": [5, 3], "x": 9, "y": 0},
+ {"matrix": [5, 2], "x": 10, "y": 0},
+ {"matrix": [5, 1], "x": 11, "y": 0},
+ {"matrix": [5, 0], "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, 5], "x": 7, "y": 1},
+ {"matrix": [6, 4], "x": 8, "y": 1},
+ {"matrix": [6, 3], "x": 9, "y": 1},
+ {"matrix": [6, 2], "x": 10, "y": 1},
+ {"matrix": [6, 1], "x": 11, "y": 1},
+ {"matrix": [6, 0], "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, 5], "x": 7, "y": 2},
+ {"matrix": [7, 4], "x": 8, "y": 2},
+ {"matrix": [7, 3], "x": 9, "y": 2},
+ {"matrix": [7, 2], "x": 10, "y": 2},
+ {"matrix": [7, 1], "x": 11, "y": 2},
+ {"matrix": [7, 0], "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, 5], "x": 7, "y": 3},
+ {"matrix": [8, 4], "x": 8, "y": 3},
+ {"matrix": [8, 3], "x": 9, "y": 3},
+ {"matrix": [8, 2], "x": 10, "y": 3},
+ {"matrix": [8, 1], "x": 11, "y": 3},
+ {"matrix": [8, 0], "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, 5], "x": 7, "y": 4},
+ {"matrix": [9, 4], "x": 8, "y": 4},
+ {"matrix": [9, 3], "x": 9, "y": 4},
+ {"matrix": [9, 2], "x": 10, "y": 4},
+ {"matrix": [9, 1], "x": 11, "y": 4},
+ {"matrix": [9, 0], "x": 12, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/split_cloud/keymaps/default/config.h b/keyboards/handwired/split_cloud/keymaps/default/config.h
new file mode 100644
index 000000000000..7a6ba5e65657
--- /dev/null
+++ b/keyboards/handwired/split_cloud/keymaps/default/config.h
@@ -0,0 +1,24 @@
+/*
+Copyright 2023 Cloud Chagnon
+
+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
+
+/* The defaults are different for the Tri Layers */
+#define TRI_LAYER_LOWER_LAYER 3
+#define TRI_LAYER_UPPER_LAYER 4
+#define TRI_LAYER_ADJUST_LAYER 6
+
diff --git a/keyboards/handwired/split_cloud/keymaps/default/keymap.c b/keyboards/handwired/split_cloud/keymaps/default/keymap.c
new file mode 100644
index 000000000000..f94a112c07d2
--- /dev/null
+++ b/keyboards/handwired/split_cloud/keymaps/default/keymap.c
@@ -0,0 +1,226 @@
+/* Copyright 2023 Cloud Chagnon
+ *
+ * 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 "keymap_steno.h"
+
+// clang-format off
+
+enum layer_names {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ EXT_PLV
+};
+
+#define ST_BOLT QK_STENO_BOLT
+#define ST_GEM QK_STENO_GEMINI
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt |RCtrl |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_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,
+ 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_LGUI, KC_LALT, KC_RCTL, TL_LOWR, KC_SPC, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt |RCtrl |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_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,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_RCTL, TL_LOWR, KC_SPC, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt |RCtrl |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_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,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_RCTL, TL_LOWR, KC_SPC, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_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,
+ _______, 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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | 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_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,
+ _______, 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
+ ),
+
+ /* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | FN | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | | E | U | PWR | RES1 | RES2 |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+ [_PLOVER] = LAYOUT_ortho_5x12(
+ STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC ,
+ STN_FN, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR ,
+ XXXXXXX, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR ,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ EXT_PLV, XXXXXXX, XXXXXXX, XXXXXXX, STN_A, STN_O, STN_E, STN_U, XXXXXXX, STN_PWR, STN_RE1, STN_RE2
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| Debug| | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | |Aud cy|Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | |TXBOLT|GEM RP|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_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, DB_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
+ _______, _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ST_BOLT, ST_GEM ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
+
+// clang-format on
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ case PLOVER:
+ if (!record->event.pressed) {
+ layer_on(_PLOVER);
+ }
+ return false;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ layer_off(_PLOVER);
+ }
+ return false;
+ }
+ return true;
+};
diff --git a/keyboards/handwired/split_cloud/keymaps/default/rules.mk b/keyboards/handwired/split_cloud/keymaps/default/rules.mk
new file mode 100644
index 000000000000..7c9bf212a6f5
--- /dev/null
+++ b/keyboards/handwired/split_cloud/keymaps/default/rules.mk
@@ -0,0 +1 @@
+TRI_LAYER_ENABLE = yes
diff --git a/keyboards/handwired/split_cloud/readme.md b/keyboards/handwired/split_cloud/readme.md
new file mode 100644
index 000000000000..1d2731727508
--- /dev/null
+++ b/keyboards/handwired/split_cloud/readme.md
@@ -0,0 +1,22 @@
+# Split-Cloud handwired keyboard
+
+The Split-Cloud is a split ortholinear 5x12 layout, forked from the Preonic and Nyquist keyboard models. The default layout adds extra options for some added game compatibility, two control keys for QEmu, and adds a steno layer based on the Planck example.
+
+![Split-Cloud](https://i.imgur.com/QoHAFeXh.jpg)
+
+* Keyboard Maintainer: [Cloud Chagnon](https://github.com/coolsa)
+* Hardware Supported: Pro Micro
+* Hardware Availability: [Repository](https://github.com/coolsa/split-cloud)
+
+Make example for this keyboard:
+
+ make handwired/split_cloud:default
+
+This keyboard uses [Handedness by EEPROM](https://docs.qmk.fm/#/feature_split_keyboard?id=handedness-by-eeprom) as default, and must be configured once on each side. The make commands are:
+
+ make handwired/split_cloud:default:avrdude-split-left
+ make handwired/split_cloud:default:avrdude-split-right
+
+[QMK Toolbox](http://qmk.fm/toolbox) can also be used to set EEPROM handedness. Place the controller in bootloader mode and select menu option Tools -> EEPROM -> Set Left/Right Hand
+
+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/handwired/split_cloud/rules.mk b/keyboards/handwired/split_cloud/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/hineybush/h101/info.json b/keyboards/hineybush/h101/info.json
new file mode 100644
index 000000000000..d1f8fa32a084
--- /dev/null
+++ b/keyboards/hineybush/h101/info.json
@@ -0,0 +1,381 @@
+{
+ "manufacturer": "hiney",
+ "keyboard_name": "h101",
+ "maintainer": "hineybush",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B0", "B1", "B2", "B10", "B11", "B12", "A8", "A9", "A10", "A15", "B3", "B4", "B5", "B6", "B7", "B9", "A3", "F0", "F1", "A7", "A5", "A4"],
+ "rows": ["C13", "C14", "C15", "A0", "A1", "A2"]
+ },
+ "processor": "STM32F072",
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "vid": "0x4069",
+ "pid": "0x0002"
+ },
+ "indicators": {
+ "num_lock": "A6",
+ "caps_lock": "B14",
+ "scroll_lock": "B8",
+ "on_state": 0
+ },
+ "layouts": {
+ "LAYOUT_f13_tsangan": {
+ "layout": [
+ {"matrix": [0,0], "label":"Esc", "x":0, "y":0},
+ {"matrix": [0,1], "label":"F1", "x":1.25, "y":0},
+ {"matrix": [0,2], "label":"F2", "x":2.25, "y":0},
+ {"matrix": [0,3], "label":"F3", "x":3.25, "y":0},
+ {"matrix": [0,4], "label":"F4", "x":4.25, "y":0},
+ {"matrix": [0,5], "label":"F5", "x":5.5, "y":0},
+ {"matrix": [0,6], "label":"F6", "x":6.5, "y":0},
+ {"matrix": [0,7], "label":"F7", "x":7.5, "y":0},
+ {"matrix": [0,8], "label":"F8", "x":8.5, "y":0},
+ {"matrix": [0,9], "label":"F9", "x":9.75, "y":0},
+ {"matrix": [0,11], "label":"F10", "x":10.75, "y":0},
+ {"matrix": [0,12], "label":"F11", "x":11.75, "y":0},
+ {"matrix": [0,13], "label":"F12", "x":12.75, "y":0},
+ {"matrix": [0,14], "label":"F13", "x":14, "y":0},
+ {"matrix": [0,15], "label":"PrtSc", "x":15.25, "y":0},
+ {"matrix": [0,16], "label":"Scroll Lock", "x":16.25, "y":0},
+ {"matrix": [0,17], "label":"Pause", "x":17.25, "y":0},
+ {"matrix": [0,18], "label":"KP 1", "x":18.5, "y":0},
+ {"matrix": [0,19], "label":"KP 2", "x":19.5, "y":0},
+ {"matrix": [0,20], "label":"KP 3", "x":20.5, "y":0},
+ {"matrix": [0,21], "label":"KP 4", "x":21.5, "y":0},
+ {"matrix": [1,0], "label":"~", "x":0, "y":1.25},
+ {"matrix": [1,1], "label":"!", "x":1, "y":1.25},
+ {"matrix": [1,2], "label":"@", "x":2, "y":1.25},
+ {"matrix": [1,3], "label":"#", "x":3, "y":1.25},
+ {"matrix": [1,4], "label":"$", "x":4, "y":1.25},
+ {"matrix": [1,5], "label":"%", "x":5, "y":1.25},
+ {"matrix": [1,6], "label":"^", "x":6, "y":1.25},
+ {"matrix": [1,7], "label":"&", "x":7, "y":1.25},
+ {"matrix": [1,8], "label":"*", "x":8, "y":1.25},
+ {"matrix": [1,9], "label":"(", "x":9, "y":1.25},
+ {"matrix": [1,10], "label":")", "x":10, "y":1.25},
+ {"matrix": [1,11], "label":"_", "x":11, "y":1.25},
+ {"matrix": [1,12], "label":"+", "x":12, "y":1.25},
+ {"matrix": [1,14], "label":"Backspace", "x":13, "y":1.25, "w":2},
+ {"matrix": [1,15], "label":"Insert", "x":15.25, "y":1.25},
+ {"matrix": [1,16], "label":"Home", "x":16.25, "y":1.25},
+ {"matrix": [1,17], "label":"PgUp", "x":17.25, "y":1.25},
+ {"matrix": [1,18], "label":"Num Lock", "x":18.5, "y":1.25},
+ {"matrix": [1,19], "label":"/", "x":19.5, "y":1.25},
+ {"matrix": [1,20], "label":"*", "x":20.5, "y":1.25},
+ {"matrix": [1,21], "label":"-", "x":21.5, "y":1.25},
+ {"matrix": [2,0], "label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2,1], "label":"Q", "x":1.5, "y":2.25},
+ {"matrix": [2,2], "label":"W", "x":2.5, "y":2.25},
+ {"matrix": [2,3], "label":"E", "x":3.5, "y":2.25},
+ {"matrix": [2,4], "label":"R", "x":4.5, "y":2.25},
+ {"matrix": [2,5], "label":"T", "x":5.5, "y":2.25},
+ {"matrix": [2,6], "label":"Y", "x":6.5, "y":2.25},
+ {"matrix": [2,7], "label":"U", "x":7.5, "y":2.25},
+ {"matrix": [2,8], "label":"I", "x":8.5, "y":2.25},
+ {"matrix": [2,9], "label":"O", "x":9.5, "y":2.25},
+ {"matrix": [2,10], "label":"P", "x":10.5, "y":2.25},
+ {"matrix": [2,11], "label":"{", "x":11.5, "y":2.25},
+ {"matrix": [2,12], "label":"}", "x":12.5, "y":2.25},
+ {"matrix": [2,13], "label":"|", "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,15], "label":"Delete", "x":15.25, "y":2.25},
+ {"matrix": [2,16], "label":"End", "x":16.25, "y":2.25},
+ {"matrix": [2,17], "label":"PgDn", "x":17.25, "y":2.25},
+ {"matrix": [2,18], "label":"7", "x":18.5, "y":2.25},
+ {"matrix": [2,19], "label":"8", "x":19.5, "y":2.25},
+ {"matrix": [2,20], "label":"9", "x":20.5, "y":2.25},
+ {"matrix": [2,21], "label":"+", "x":21.5, "y":2.25, "h":2},
+ {"matrix": [3,0], "label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3,1], "label":"A", "x":1.75, "y":3.25},
+ {"matrix": [3,2], "label":"S", "x":2.75, "y":3.25},
+ {"matrix": [3,3], "label":"D", "x":3.75, "y":3.25},
+ {"matrix": [3,4], "label":"F", "x":4.75, "y":3.25},
+ {"matrix": [3,5], "label":"G", "x":5.75, "y":3.25},
+ {"matrix": [3,6], "label":"H", "x":6.75, "y":3.25},
+ {"matrix": [3,7], "label":"J", "x":7.75, "y":3.25},
+ {"matrix": [3,8], "label":"K", "x":8.75, "y":3.25},
+ {"matrix": [3,9], "label":"L", "x":9.75, "y":3.25},
+ {"matrix": [3,10], "label":":", "x":10.75, "y":3.25},
+ {"matrix": [3,11], "label":"\"", "x":11.75, "y":3.25},
+ {"matrix": [3,13], "label":"Enter", "x":12.75, "y":3.25, "w":2.25},
+ {"matrix": [3,18], "label":"4", "x":18.5, "y":3.25},
+ {"matrix": [3,19], "label":"5", "x":19.5, "y":3.25},
+ {"matrix": [3,20], "label":"6", "x":20.5, "y":3.25},
+ {"matrix": [4,0], "label":"Shift", "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4,2], "label":"Z", "x":2.25, "y":4.25},
+ {"matrix": [4,3], "label":"X", "x":3.25, "y":4.25},
+ {"matrix": [4,4], "label":"C", "x":4.25, "y":4.25},
+ {"matrix": [4,5], "label":"V", "x":5.25, "y":4.25},
+ {"matrix": [4,6], "label":"B", "x":6.25, "y":4.25},
+ {"matrix": [4,7], "label":"N", "x":7.25, "y":4.25},
+ {"matrix": [4,8], "label":"M", "x":8.25, "y":4.25},
+ {"matrix": [4,9], "label":"<", "x":9.25, "y":4.25},
+ {"matrix": [4,10], "label":">", "x":10.25, "y":4.25},
+ {"matrix": [4,11], "label":"?", "x":11.25, "y":4.25},
+ {"matrix": [4,12], "label":"Shift", "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,16], "label":"Up Arrow", "x":16.25, "y":4.25},
+ {"matrix": [4,18], "label":"1", "x":18.5, "y":4.25},
+ {"matrix": [4,19], "label":"2", "x":19.5, "y":4.25},
+ {"matrix": [4,20], "label":"3", "x":20.5, "y":4.25},
+ {"matrix": [4,21], "label":"Enter", "x":21.5, "y":4.25, "h":2},
+ {"matrix": [5,0], "label":"Ctrl", "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5,1], "label":"Win", "x":1.5, "y":5.25},
+ {"matrix": [5,2], "label":"Alt", "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5,7], "label":"Space", "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "label":"Alt", "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "label":"Win", "x":12.5, "y":5.25},
+ {"matrix": [5,13], "label":"Ctrl", "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,15], "label":"Left Arrow", "x":15.25, "y":5.25},
+ {"matrix": [5,16], "label":"Down Arrow", "x":16.25, "y":5.25},
+ {"matrix": [5,17], "label":"Right Arrow", "x":17.25, "y":5.25},
+ {"matrix": [5,19], "label":"0", "x":18.5, "y":5.25, "w":2},
+ {"matrix": [5,20], "label":".", "x":20.5, "y":5.25}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0,0], "label":"Esc", "x":0, "y":0},
+ {"matrix": [0,1], "label":"F1", "x":1.25, "y":0},
+ {"matrix": [0,2], "label":"F2", "x":2.25, "y":0},
+ {"matrix": [0,3], "label":"F3", "x":3.25, "y":0},
+ {"matrix": [0,4], "label":"F4", "x":4.25, "y":0},
+ {"matrix": [0,5], "label":"F5", "x":5.5, "y":0},
+ {"matrix": [0,6], "label":"F6", "x":6.5, "y":0},
+ {"matrix": [0,7], "label":"F7", "x":7.5, "y":0},
+ {"matrix": [0,8], "label":"F8", "x":8.5, "y":0},
+ {"matrix": [0,9], "label":"F9", "x":9.75, "y":0},
+ {"matrix": [0,11], "label":"F10", "x":10.75, "y":0},
+ {"matrix": [0,12], "label":"F11", "x":11.75, "y":0},
+ {"matrix": [0,13], "label":"F12", "x":12.75, "y":0},
+ {"matrix": [0,14], "label":"F13", "x":14, "y":0},
+ {"matrix": [0,15], "label":"PrtSc", "x":15.25, "y":0},
+ {"matrix": [0,16], "label":"Scroll Lock", "x":16.25, "y":0},
+ {"matrix": [0,17], "label":"Pause", "x":17.25, "y":0},
+ {"matrix": [0,18], "label":"KP 1", "x":18.5, "y":0},
+ {"matrix": [0,19], "label":"KP 2", "x":19.5, "y":0},
+ {"matrix": [0,20], "label":"KP 3", "x":20.5, "y":0},
+ {"matrix": [0,21], "label":"KP 4", "x":21.5, "y":0},
+ {"matrix": [1,0], "label":"~", "x":0, "y":1.25},
+ {"matrix": [1,1], "label":"!", "x":1, "y":1.25},
+ {"matrix": [1,2], "label":"@", "x":2, "y":1.25},
+ {"matrix": [1,3], "label":"#", "x":3, "y":1.25},
+ {"matrix": [1,4], "label":"$", "x":4, "y":1.25},
+ {"matrix": [1,5], "label":"%", "x":5, "y":1.25},
+ {"matrix": [1,6], "label":"^", "x":6, "y":1.25},
+ {"matrix": [1,7], "label":"&", "x":7, "y":1.25},
+ {"matrix": [1,8], "label":"*", "x":8, "y":1.25},
+ {"matrix": [1,9], "label":"(", "x":9, "y":1.25},
+ {"matrix": [1,10], "label":")", "x":10, "y":1.25},
+ {"matrix": [1,11], "label":"_", "x":11, "y":1.25},
+ {"matrix": [1,12], "label":"+", "x":12, "y":1.25},
+ {"matrix": [1,13], "label":"1U Split Bksp", "x":13, "y":1.25},
+ {"matrix": [1,14], "label":"Backspace", "x":14, "y":1.25},
+ {"matrix": [1,15], "label":"Insert", "x":15.25, "y":1.25},
+ {"matrix": [1,16], "label":"Home", "x":16.25, "y":1.25},
+ {"matrix": [1,17], "label":"PgUp", "x":17.25, "y":1.25},
+ {"matrix": [1,18], "label":"Num Lock", "x":18.5, "y":1.25},
+ {"matrix": [1,19], "label":"/", "x":19.5, "y":1.25},
+ {"matrix": [1,20], "label":"*", "x":20.5, "y":1.25},
+ {"matrix": [1,21], "label":"-", "x":21.5, "y":1.25},
+ {"matrix": [2,0], "label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2,1], "label":"Q", "x":1.5, "y":2.25},
+ {"matrix": [2,2], "label":"W", "x":2.5, "y":2.25},
+ {"matrix": [2,3], "label":"E", "x":3.5, "y":2.25},
+ {"matrix": [2,4], "label":"R", "x":4.5, "y":2.25},
+ {"matrix": [2,5], "label":"T", "x":5.5, "y":2.25},
+ {"matrix": [2,6], "label":"Y", "x":6.5, "y":2.25},
+ {"matrix": [2,7], "label":"U", "x":7.5, "y":2.25},
+ {"matrix": [2,8], "label":"I", "x":8.5, "y":2.25},
+ {"matrix": [2,9], "label":"O", "x":9.5, "y":2.25},
+ {"matrix": [2,10], "label":"P", "x":10.5, "y":2.25},
+ {"matrix": [2,11], "label":"{", "x":11.5, "y":2.25},
+ {"matrix": [2,12], "label":"}", "x":12.5, "y":2.25},
+ {"matrix": [2,13], "label":"|", "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,15], "label":"Delete", "x":15.25, "y":2.25},
+ {"matrix": [2,16], "label":"End", "x":16.25, "y":2.25},
+ {"matrix": [2,17], "label":"PgDn", "x":17.25, "y":2.25},
+ {"matrix": [2,18], "label":"7", "x":18.5, "y":2.25},
+ {"matrix": [2,19], "label":"8", "x":19.5, "y":2.25},
+ {"matrix": [2,20], "label":"9", "x":20.5, "y":2.25},
+ {"matrix": [2,21], "label":"+", "x":21.5, "y":2.25},
+ {"matrix": [3,0], "label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3,1], "label":"A", "x":1.75, "y":3.25},
+ {"matrix": [3,2], "label":"S", "x":2.75, "y":3.25},
+ {"matrix": [3,3], "label":"D", "x":3.75, "y":3.25},
+ {"matrix": [3,4], "label":"F", "x":4.75, "y":3.25},
+ {"matrix": [3,5], "label":"G", "x":5.75, "y":3.25},
+ {"matrix": [3,6], "label":"H", "x":6.75, "y":3.25},
+ {"matrix": [3,7], "label":"J", "x":7.75, "y":3.25},
+ {"matrix": [3,8], "label":"K", "x":8.75, "y":3.25},
+ {"matrix": [3,9], "label":"L", "x":9.75, "y":3.25},
+ {"matrix": [3,10], "label":":", "x":10.75, "y":3.25},
+ {"matrix": [3,11], "label":"\"", "x":11.75, "y":3.25},
+ {"matrix": [3,13], "label":"Enter", "x":12.75, "y":3.25, "w":2.25},
+ {"matrix": [3,18], "label":"4", "x":18.5, "y":3.25},
+ {"matrix": [3,19], "label":"5", "x":19.5, "y":3.25},
+ {"matrix": [3,20], "label":"6", "x":20.5, "y":3.25},
+ {"matrix": [3,21], "label":"+", "x":21.5, "y":3.25},
+ {"matrix": [4,0], "label":"Shift", "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4,2], "label":"Z", "x":2.25, "y":4.25},
+ {"matrix": [4,3], "label":"X", "x":3.25, "y":4.25},
+ {"matrix": [4,4], "label":"C", "x":4.25, "y":4.25},
+ {"matrix": [4,5], "label":"V", "x":5.25, "y":4.25},
+ {"matrix": [4,6], "label":"B", "x":6.25, "y":4.25},
+ {"matrix": [4,7], "label":"N", "x":7.25, "y":4.25},
+ {"matrix": [4,8], "label":"M", "x":8.25, "y":4.25},
+ {"matrix": [4,9], "label":"<", "x":9.25, "y":4.25},
+ {"matrix": [4,10], "label":">", "x":10.25, "y":4.25},
+ {"matrix": [4,11], "label":"?", "x":11.25, "y":4.25},
+ {"matrix": [4,12], "label":"Shift", "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "label":"Fn", "x":14, "y":4.25},
+ {"matrix": [4,16], "label":"Up Arrow", "x":16.25, "y":4.25},
+ {"matrix": [4,18], "label":"1", "x":18.5, "y":4.25},
+ {"matrix": [4,19], "label":"2", "x":19.5, "y":4.25},
+ {"matrix": [4,20], "label":"3", "x":20.5, "y":4.25},
+ {"matrix": [4,21], "label":"Enter", "x":21.5, "y":4.25},
+ {"matrix": [5,0], "label":"Ctrl", "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5,1], "label":"Win", "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5,2], "label":"Alt", "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5,7], "label":"Space", "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "label":"Alt", "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "label":"Alt", "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "label":"Win", "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,15], "label":"Left Arrow", "x":15.25, "y":5.25},
+ {"matrix": [5,16], "label":"Down Arrow", "x":16.25, "y":5.25},
+ {"matrix": [5,17], "label":"Right Arrow", "x":17.25, "y":5.25},
+ {"matrix": [5,18], "label":"0", "x":18.5, "y":5.25},
+ {"matrix": [5,19], "label":"0", "x":19.5, "y":5.25},
+ {"matrix": [5,20], "label":".", "x":20.5, "y":5.25},
+ {"matrix": [5,21], "label":"Enter", "x":21.5, "y":5.25}
+ ]
+ },
+ "LAYOUT_f12_all": {
+ "layout": [
+ {"matrix": [0,0], "label":"Esc", "x":0, "y":0},
+ {"matrix": [0,1], "label":"F1", "x":1.25, "y":0},
+ {"matrix": [0,2], "label":"F2", "x":2.25, "y":0},
+ {"matrix": [0,3], "label":"F3", "x":3.25, "y":0},
+ {"matrix": [0,4], "label":"F4", "x":4.25, "y":0},
+ {"matrix": [0,5], "label":"F5", "x":5.5, "y":0},
+ {"matrix": [0,6], "label":"F6", "x":6.5, "y":0},
+ {"matrix": [0,7], "label":"F7", "x":7.5, "y":0},
+ {"matrix": [0,8], "label":"F8", "x":8.5, "y":0},
+ {"matrix": [0,9], "label":"F9", "x":9.75, "y":0},
+ {"matrix": [0,11], "label":"F10", "x":10.75, "y":0},
+ {"matrix": [0,12], "label":"F11", "x":11.75, "y":0},
+ {"matrix": [0,13], "label":"F12", "x":12.75, "y":0},
+ {"matrix": [0,15], "label":"PrtSc", "x":15.25, "y":0},
+ {"matrix": [0,16], "label":"Scroll Lock", "x":16.25, "y":0},
+ {"matrix": [0,17], "label":"Pause", "x":17.25, "y":0},
+ {"matrix": [0,18], "label":"KP 1", "x":18.5, "y":0},
+ {"matrix": [0,19], "label":"KP 2", "x":19.5, "y":0},
+ {"matrix": [0,20], "label":"KP 3", "x":20.5, "y":0},
+ {"matrix": [0,21], "label":"KP 4", "x":21.5, "y":0},
+ {"matrix": [1,0], "label":"~", "x":0, "y":1.25},
+ {"matrix": [1,1], "label":"!", "x":1, "y":1.25},
+ {"matrix": [1,2], "label":"@", "x":2, "y":1.25},
+ {"matrix": [1,3], "label":"#", "x":3, "y":1.25},
+ {"matrix": [1,4], "label":"$", "x":4, "y":1.25},
+ {"matrix": [1,5], "label":"%", "x":5, "y":1.25},
+ {"matrix": [1,6], "label":"^", "x":6, "y":1.25},
+ {"matrix": [1,7], "label":"&", "x":7, "y":1.25},
+ {"matrix": [1,8], "label":"*", "x":8, "y":1.25},
+ {"matrix": [1,9], "label":"(", "x":9, "y":1.25},
+ {"matrix": [1,10], "label":")", "x":10, "y":1.25},
+ {"matrix": [1,11], "label":"_", "x":11, "y":1.25},
+ {"matrix": [1,12], "label":"+", "x":12, "y":1.25},
+ {"matrix": [1,13], "label":"1U Split Bksp", "x":13, "y":1.25},
+ {"matrix": [1,14], "label":"Backspace", "x":14, "y":1.25},
+ {"matrix": [1,15], "label":"Insert", "x":15.25, "y":1.25},
+ {"matrix": [1,16], "label":"Home", "x":16.25, "y":1.25},
+ {"matrix": [1,17], "label":"PgUp", "x":17.25, "y":1.25},
+ {"matrix": [1,18], "label":"Num Lock", "x":18.5, "y":1.25},
+ {"matrix": [1,19], "label":"/", "x":19.5, "y":1.25},
+ {"matrix": [1,20], "label":"*", "x":20.5, "y":1.25},
+ {"matrix": [1,21], "label":"-", "x":21.5, "y":1.25},
+ {"matrix": [2,0], "label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2,1], "label":"Q", "x":1.5, "y":2.25},
+ {"matrix": [2,2], "label":"W", "x":2.5, "y":2.25},
+ {"matrix": [2,3], "label":"E", "x":3.5, "y":2.25},
+ {"matrix": [2,4], "label":"R", "x":4.5, "y":2.25},
+ {"matrix": [2,5], "label":"T", "x":5.5, "y":2.25},
+ {"matrix": [2,6], "label":"Y", "x":6.5, "y":2.25},
+ {"matrix": [2,7], "label":"U", "x":7.5, "y":2.25},
+ {"matrix": [2,8], "label":"I", "x":8.5, "y":2.25},
+ {"matrix": [2,9], "label":"O", "x":9.5, "y":2.25},
+ {"matrix": [2,10], "label":"P", "x":10.5, "y":2.25},
+ {"matrix": [2,11], "label":"{", "x":11.5, "y":2.25},
+ {"matrix": [2,12], "label":"}", "x":12.5, "y":2.25},
+ {"matrix": [2,13], "label":"|", "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,15], "label":"Delete", "x":15.25, "y":2.25},
+ {"matrix": [2,16], "label":"End", "x":16.25, "y":2.25},
+ {"matrix": [2,17], "label":"PgDn", "x":17.25, "y":2.25},
+ {"matrix": [2,18], "label":"7", "x":18.5, "y":2.25},
+ {"matrix": [2,19], "label":"8", "x":19.5, "y":2.25},
+ {"matrix": [2,20], "label":"9", "x":20.5, "y":2.25},
+ {"matrix": [2,21], "label":"+", "x":21.5, "y":2.25},
+ {"matrix": [3,0], "label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3,1], "label":"A", "x":1.75, "y":3.25},
+ {"matrix": [3,2], "label":"S", "x":2.75, "y":3.25},
+ {"matrix": [3,3], "label":"D", "x":3.75, "y":3.25},
+ {"matrix": [3,4], "label":"F", "x":4.75, "y":3.25},
+ {"matrix": [3,5], "label":"G", "x":5.75, "y":3.25},
+ {"matrix": [3,6], "label":"H", "x":6.75, "y":3.25},
+ {"matrix": [3,7], "label":"J", "x":7.75, "y":3.25},
+ {"matrix": [3,8], "label":"K", "x":8.75, "y":3.25},
+ {"matrix": [3,9], "label":"L", "x":9.75, "y":3.25},
+ {"matrix": [3,10], "label":":", "x":10.75, "y":3.25},
+ {"matrix": [3,11], "label":"\"", "x":11.75, "y":3.25},
+ {"matrix": [3,13], "label":"Enter", "x":12.75, "y":3.25, "w":2.25},
+ {"matrix": [3,18], "label":"4", "x":18.5, "y":3.25},
+ {"matrix": [3,19], "label":"5", "x":19.5, "y":3.25},
+ {"matrix": [3,20], "label":"6", "x":20.5, "y":3.25},
+ {"matrix": [3,21], "label":"+", "x":21.5, "y":3.25},
+ {"matrix": [4,0], "label":"Shift", "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4,2], "label":"Z", "x":2.25, "y":4.25},
+ {"matrix": [4,3], "label":"X", "x":3.25, "y":4.25},
+ {"matrix": [4,4], "label":"C", "x":4.25, "y":4.25},
+ {"matrix": [4,5], "label":"V", "x":5.25, "y":4.25},
+ {"matrix": [4,6], "label":"B", "x":6.25, "y":4.25},
+ {"matrix": [4,7], "label":"N", "x":7.25, "y":4.25},
+ {"matrix": [4,8], "label":"M", "x":8.25, "y":4.25},
+ {"matrix": [4,9], "label":"<", "x":9.25, "y":4.25},
+ {"matrix": [4,10], "label":">", "x":10.25, "y":4.25},
+ {"matrix": [4,11], "label":"?", "x":11.25, "y":4.25},
+ {"matrix": [4,12], "label":"Shift", "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "label":"Fn", "x":14, "y":4.25},
+ {"matrix": [4,16], "label":"Up Arrow", "x":16.25, "y":4.25},
+ {"matrix": [4,18], "label":"1", "x":18.5, "y":4.25},
+ {"matrix": [4,19], "label":"2", "x":19.5, "y":4.25},
+ {"matrix": [4,20], "label":"3", "x":20.5, "y":4.25},
+ {"matrix": [4,21], "label":"Enter", "x":21.5, "y":4.25},
+ {"matrix": [5,0], "label":"Ctrl", "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5,1], "label":"Win", "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5,2], "label":"Alt", "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5,7], "label":"Space", "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "label":"Alt", "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "label":"Alt", "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "label":"Win", "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,15], "label":"Left Arrow", "x":15.25, "y":5.25},
+ {"matrix": [5,16], "label":"Down Arrow", "x":16.25, "y":5.25},
+ {"matrix": [5,17], "label":"Right Arrow", "x":17.25, "y":5.25},
+ {"matrix": [5,18], "label":"0", "x":18.5, "y":5.25},
+ {"matrix": [5,19], "label":"0", "x":19.5, "y":5.25},
+ {"matrix": [5,20], "label":".", "x":20.5, "y":5.25},
+ {"matrix": [5,21], "label":"Enter", "x":21.5, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/hineybush/h101/keymaps/default/keymap.c b/keyboards/hineybush/h101/keymaps/default/keymap.c
new file mode 100644
index 000000000000..bc0352003644
--- /dev/null
+++ b/keyboards/hineybush/h101/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 Josh Hinnebusch (@hineybush)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_f13_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_0, KC_PSCR, KC_SCRL, KC_PAUS, KC_MPLY, KC_MNXT, KC_VOLU, KC_VOLD,
+ 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_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [1] = LAYOUT_f13_tsangan(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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/hineybush/h101/keymaps/via/keymap.c b/keyboards/hineybush/h101/keymaps/via/keymap.c
new file mode 100644
index 000000000000..020042b13a66
--- /dev/null
+++ b/keyboards/hineybush/h101/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
+// Copyright 2023 Josh Hinnebusch (@hineybush)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
+│00 ││01 │02 │03 │04 ││05 │06 │07 │08 ││09 │0B │0C │0D ││0E │ │0F │0G │0H │ │0I │0J │0K │0L │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘ └───┴───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │ │1F │1G │1H │ │1I │1J │1K │1L │ │1E │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ ├───┼───┼───┼───┤ └───────┘ ┌───┐
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │ │2F │2G │2H │ │2I │2J │2K │2L │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┼───┤ │2L │ Numpad "+"
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │ │3I │3J │3K │3L │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ ├───┼───┼───┼───┤ ├───┤
+│40 │42 │43 │44 │45 │46 │47 │48 │49 │3A │3B │4C │4D │ │4G │ │4I │4J │4K │4L │ │ │
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ┌───┼───┼───┐ ├───┼───┼───┼───┤ ┌───────┐ │4L │ Numpad Enter
+│50 │51 │52 │57 │5A │5B │5C │5D │ │5F │5G │5H │ │5I │5J │5K │5L │ Numpad 0 │5J │ │ │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───┴───┴───┴───┘ └───────┘ └───┘
+ ┌──────────┐
+ 2.75u RShift │4C │
+ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│50 │51 │52 │57 │5B │5C │5D │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+*/
+#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_0, KC_PSCR, KC_SCRL, KC_PAUS, KC_MPLY, KC_MNXT, KC_VOLU, KC_VOLD,
+ 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_TRNS, 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_TRNS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_P0, KC_PDOT, KC_TRNS),
+
+ [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_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, 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/hineybush/h101/keymaps/via/rules.mk b/keyboards/hineybush/h101/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/hineybush/h101/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/hineybush/h101/readme.md b/keyboards/hineybush/h101/readme.md
new file mode 100644
index 000000000000..d28ce3507477
--- /dev/null
+++ b/keyboards/hineybush/h101/readme.md
@@ -0,0 +1,27 @@
+# h101
+
+![h101](https://i.imgur.com/LqmvjS1h.png)
+
+F13 full-size PCB with 1.25u function row Spacing.
+
+* Keyboard Maintainer: [hineybush](https://github.com/hineybush)
+* Hardware Supported: h101 using STM32F072
+* Hardware Availability: Fossil by Carolina Mech
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hineybush/h101:default
+
+Flashing example for this keyboard:
+
+ make hineybush/h101: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/hineybush/h101/rules.mk b/keyboards/hineybush/h101/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/hineybush/h101/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/horrortroll/nyx/rev1/config.h b/keyboards/horrortroll/nyx/rev1/config.h
new file mode 100644
index 000000000000..9d891b2ff429
--- /dev/null
+++ b/keyboards/horrortroll/nyx/rev1/config.h
@@ -0,0 +1,23 @@
+/* Copyright 2023 HorrorTroll
+ *
+ * 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 config */
+#define RGB_MATRIX_LED_COUNT 67
+#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
diff --git a/keyboards/horrortroll/nyx/rev1/info.json b/keyboards/horrortroll/nyx/rev1/info.json
new file mode 100644
index 000000000000..f3b859de0a9c
--- /dev/null
+++ b/keyboards/horrortroll/nyx/rev1/info.json
@@ -0,0 +1,222 @@
+{
+ "keyboard_name": "Nyx",
+ "manufacturer": "HorrorTroll",
+ "maintainer": "HorrorTroll",
+ "usb": {
+ "vid": "0x7516",
+ "pid": "0x5005",
+ "device_version": "0.0.1"
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP3", "GP23", "GP2", "GP1", "GP0", "GP4", "GP17", "GP11", "GP10", "GP19", "GP9", "GP8", "GP13", "GP15", "GP14"],
+ "rows": ["GP24", "GP25", "GP18", "GP12", "GP16"]
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP22"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "max_brightness": 75,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_val": true,
+ "band_pinwheel_val": 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,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "typing_heatmap": 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], "x": 0, "y": 0, "flags": 1},
+ {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4},
+ {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4},
+ {"matrix": [0, 7], "x": 105, "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": 202, "y": 0, "flags": 1},
+ {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4},
+
+ {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4},
+ {"matrix": [1, 13], "x": 205, "y": 16, "flags": 4},
+ {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4},
+ {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4},
+ {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4},
+ {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4},
+ {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4},
+ {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4},
+ {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4},
+ {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4},
+ {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4},
+ {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4},
+ {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4},
+ {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4},
+ {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1},
+
+ {"matrix": [2, 0], "x": 6, "y": 32, "flags": 8},
+ {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4},
+ {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4},
+ {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4},
+ {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4},
+ {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4},
+ {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4},
+ {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4},
+ {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4},
+ {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4},
+ {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4},
+ {"matrix": [2, 11], "x": 175, "y": 32, "flags": 4},
+ {"matrix": [2, 13], "x": 200, "y": 32, "flags": 1},
+ {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4},
+
+ {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4},
+ {"matrix": [3, 13], "x": 209, "y": 48, "flags": 4},
+ {"matrix": [3, 12], "x": 189, "y": 48, "flags": 1},
+ {"matrix": [3, 11], "x": 168, "y": 48, "flags": 4},
+ {"matrix": [3, 10], "x": 153, "y": 48, "flags": 4},
+ {"matrix": [3, 9], "x": 138, "y": 48, "flags": 4},
+ {"matrix": [3, 8], "x": 123, "y": 48, "flags": 4},
+ {"matrix": [3, 7], "x": 108, "y": 48, "flags": 4},
+ {"matrix": [3, 6], "x": 93, "y": 48, "flags": 4},
+ {"matrix": [3, 5], "x": 78, "y": 48, "flags": 4},
+ {"matrix": [3, 4], "x": 63, "y": 48, "flags": 4},
+ {"matrix": [3, 3], "x": 49, "y": 48, "flags": 4},
+ {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4},
+ {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1},
+
+ {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1},
+ {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1},
+ {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1},
+ {"matrix": [4, 6], "x": 95, "y": 64, "flags": 4},
+ {"matrix": [4, 9], "x": 151, "y": 64, "flags": 1},
+ {"matrix": [4, 10], "x": 170, "y": 64, "flags": 1},
+ {"matrix": [4, 12], "x": 194, "y": 64, "flags": 4},
+ {"matrix": [4, 13], "x": 209, "y": 64, "flags": 4},
+ {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4}
+ ]
+ },
+ "community_layouts": ["65_ansi_blocker"],
+ "layouts": {
+ "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, 14], "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, 14], "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, 14], "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, 14], "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, 6], "w": 6.25, "x": 3.75, "y": 4},
+ {"matrix": [4, 9], "w": 1.25, "x": 10, "y": 4},
+ {"matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4},
+ {"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/horrortroll/nyx/rev1/keymaps/default/keymap.c b/keyboards/horrortroll/nyx/rev1/keymaps/default/keymap.c
new file mode 100644
index 000000000000..d678f19b46ec
--- /dev/null
+++ b/keyboards/horrortroll/nyx/rev1/keymaps/default/keymap.c
@@ -0,0 +1,85 @@
+/* Copyright 2023 HorrorTroll
+ *
+ * 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] = {
+
+/*
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Ins│
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ │ Tab │ q │ w │ e │ r │ t │ y │ u │ i │ o │ p │ [ │ ] │ \ │Del│
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ │ Caps │ a │ s │ d │ f │ g │ h │ j │ k │ l │ ; │ ' │ Enter │PgU│
+ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ │ LShift │ z │ x │ c │ v │ b │ n │ m │ , │ . │ / │ RSft │ ↑ │PgD│
+ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ │LCrl│GUI │LAlt│ Space │ Fn │RCrl│ │ ← │ ↓ │ → │
+ └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ │ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │ │
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ { │ } │ | │ │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ : │ " │ │ │
+ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ │ LShift │ Z │ X │ C │ V │ B │ N │ M │ < │ > │ ? │ RSft │ │ │
+ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ │ │ │ │ │ │ │ │ │ │ │
+ └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+*/
+ /* Row: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
+ [_BASE] = 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_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_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, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+/*
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │Tog│
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ │Reset│ │MsU│ │ │ │ │ │ │Sad│Sai│Spd│Spi│ │Mod│
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ │ │MsL│MsD│MsR│ │ │ │ │ │ │ │ │ │ │
+ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ │ │ │ │Cal│ │ │NKO│ │VoD│VoU│Mut│ │Vai│ │
+ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ │ │ │ │ │ │ │ │Hud│Vad│Hui│
+ └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+*/
+ /* Row: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
+ [_FN] = 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, _______, RGB_TOG,
+ QK_BOOT, _______, KC_MS_U, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, RGB_SPD, RGB_SPI, _______, RGB_MOD,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_CALC, _______, _______, NK_TOGG, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUI
+ )
+};
diff --git a/keyboards/horrortroll/nyx/rev1/keymaps/via/keymap.c b/keyboards/horrortroll/nyx/rev1/keymaps/via/keymap.c
new file mode 100644
index 000000000000..d678f19b46ec
--- /dev/null
+++ b/keyboards/horrortroll/nyx/rev1/keymaps/via/keymap.c
@@ -0,0 +1,85 @@
+/* Copyright 2023 HorrorTroll
+ *
+ * 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] = {
+
+/*
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Ins│
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ │ Tab │ q │ w │ e │ r │ t │ y │ u │ i │ o │ p │ [ │ ] │ \ │Del│
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ │ Caps │ a │ s │ d │ f │ g │ h │ j │ k │ l │ ; │ ' │ Enter │PgU│
+ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ │ LShift │ z │ x │ c │ v │ b │ n │ m │ , │ . │ / │ RSft │ ↑ │PgD│
+ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ │LCrl│GUI │LAlt│ Space │ Fn │RCrl│ │ ← │ ↓ │ → │
+ └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ │ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │ │
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ { │ } │ | │ │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ : │ " │ │ │
+ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ │ LShift │ Z │ X │ C │ V │ B │ N │ M │ < │ > │ ? │ RSft │ │ │
+ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ │ │ │ │ │ │ │ │ │ │ │
+ └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+*/
+ /* Row: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
+ [_BASE] = 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_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_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, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+/*
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │Tog│
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ │Reset│ │MsU│ │ │ │ │ │ │Sad│Sai│Spd│Spi│ │Mod│
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ │ │MsL│MsD│MsR│ │ │ │ │ │ │ │ │ │ │
+ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ │ │ │ │Cal│ │ │NKO│ │VoD│VoU│Mut│ │Vai│ │
+ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ │ │ │ │ │ │ │ │Hud│Vad│Hui│
+ └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+*/
+ /* Row: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
+ [_FN] = 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, _______, RGB_TOG,
+ QK_BOOT, _______, KC_MS_U, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, RGB_SPD, RGB_SPI, _______, RGB_MOD,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_CALC, _______, _______, NK_TOGG, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUI
+ )
+};
diff --git a/keyboards/horrortroll/nyx/rev1/keymaps/via/rules.mk b/keyboards/horrortroll/nyx/rev1/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/horrortroll/nyx/rev1/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/horrortroll/nyx/rev1/lib/startup_swirl_anim.h b/keyboards/horrortroll/nyx/rev1/lib/startup_swirl_anim.h
new file mode 100644
index 000000000000..0cd0a54a8b5d
--- /dev/null
+++ b/keyboards/horrortroll/nyx/rev1/lib/startup_swirl_anim.h
@@ -0,0 +1,133 @@
+/* Copyright 2022 Jpe230
+ * Copyright 2023 HorrorTroll
+ *
+ * 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
+
+#define LED_TRAIL 10
+
+static int8_t top = 0;
+static int8_t bottom = MATRIX_ROWS - 1;
+static int8_t left = 0;
+static int8_t right = MATRIX_COLS - 1;
+static int8_t dir = 1;
+
+static int8_t i = 0;
+static int8_t j = 0;
+
+static bool traverse = true;
+
+static uint8_t v_values[RGB_MATRIX_LED_COUNT] = {0};
+
+static void traverse_matrix(void) {
+ if (dir == 1) {
+ // moving left->right
+ i++;
+ // Since we have traversed the whole first
+ // row, move down to the next row.
+ if (i > right) {
+ ++top;
+ dir = 2;
+ j = top;
+ i -= 1;
+ }
+ } else if (dir == 2) {
+ // moving top->bottom
+ j++;
+ // Since we have traversed the whole last
+ // column, move left to the previous column.
+ if (j > bottom) {
+ --right;
+ dir = 3;
+ i = right;
+ j -= 1;
+ }
+ } else if (dir == 3) {
+ // moving right->left
+ i--;
+ // Since we have traversed the whole last
+ // row, move up to the previous row.
+ if (i < left) {
+ --bottom;
+ dir = 4;
+ j = bottom;
+ i += 1;
+ }
+ } else if (dir == 4) {
+ // moving bottom->up
+ j--;
+ // Since we have traversed the whole first
+ // col, move right to the next column.
+ if (j < top) {
+ ++left;
+ dir = 1;
+ i = left;
+ j += 1;
+ }
+ }
+}
+
+static void swirl_set_color(HSV hsv) {
+ uint8_t index = g_led_config.matrix_co[j][i];
+
+ if(index != NO_LED){
+ v_values[index] = 75;
+ }
+
+ for(uint8_t v = 0; v < RGB_MATRIX_LED_COUNT; v++)
+ {
+ if(index != v) {
+ if(v_values[v] >= 20)
+ v_values[v] -= 20;
+ else
+ v_values[v] = 0;
+ }
+ hsv.v = v_values[v];
+ RGB rgb = hsv_to_rgb(hsv);
+ rgb_matrix_set_color(v, rgb.r, rgb.g, rgb.b);
+ }
+
+ traverse_matrix();
+
+ if (!(top <= bottom && left <= right)) {
+ eeprom_read_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config));
+ rgb_matrix_mode_noeeprom(rgb_matrix_config.mode);
+ return;
+ }
+}
+
+static bool STARTUP_SWIRL_ANIM(effect_params_t* params) {
+ HSV hsv = rgb_matrix_config.hsv;
+ uint8_t time = scale16by8(g_rgb_timer, qadd8(24, 1));
+ hsv.h = time;
+ RGB rgb = hsv_to_rgb(hsv);
+
+ if (traverse) {
+ swirl_set_color(hsv);
+ }
+ traverse = !traverse;
+ return false;
+
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+
+ for (int i = led_min; i < led_max; i++) {
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); // Clear matrix just in case
+ }
+
+ return rgb_matrix_check_finished_leds(led_max);
+}
diff --git a/keyboards/horrortroll/nyx/rev1/nyx.c b/keyboards/horrortroll/nyx/rev1/nyx.c
new file mode 100644
index 000000000000..fb4ce3183b06
--- /dev/null
+++ b/keyboards/horrortroll/nyx/rev1/nyx.c
@@ -0,0 +1,89 @@
+/* Copyright 2023 HorrorTroll
+ *
+ * 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
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ 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);
+ rgb_matrix_enable_noeeprom();
+ }
+ break;
+ }
+ }
+ return false;
+ case RGB_MOD:
+ if (record->event.pressed) {
+ switch (rgb_matrix_get_mode()) {
+ case RGB_MATRIX_SOLID_MULTISPLASH:
+ rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR);
+ return false;
+ default:
+ rgb_matrix_step();
+ return false;
+ }
+ }
+ return false;
+ case RGB_RMOD:
+ if (record->event.pressed) {
+ switch (rgb_matrix_get_mode()) {
+ case RGB_MATRIX_SOLID_COLOR:
+ rgb_matrix_mode(RGB_MATRIX_SOLID_MULTISPLASH);
+ return false;
+ default:
+ rgb_matrix_step_reverse();
+ return false;
+ }
+ }
+ return false;
+ }
+
+ return process_record_user(keycode, record);
+}
+
+bool rgb_matrix_indicators_kb(void) {
+ if (!rgb_matrix_indicators_user()) {
+ return false;
+ }
+
+ if (host_keyboard_led_state().caps_lock) {
+ rgb_matrix_set_color(30, 0, 75, 75);
+ } else if (!(rgb_matrix_get_flags() & LED_FLAG_INDICATOR)) {
+ rgb_matrix_set_color(30, RGB_OFF);
+ }
+ return true;
+}
+
+void keyboard_post_init_kb(void) {
+ if (!(rgb_matrix_get_flags() & LED_FLAG_ALL)) {
+ rgb_matrix_set_color_all(0, 0, 0);
+ } else {
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_CUSTOM_STARTUP_SWIRL_ANIM);
+ }
+
+ keyboard_post_init_user();
+}
+#endif
diff --git a/keyboards/horrortroll/nyx/rev1/readme.md b/keyboards/horrortroll/nyx/rev1/readme.md
new file mode 100644
index 000000000000..7fdbd0ed8f3b
--- /dev/null
+++ b/keyboards/horrortroll/nyx/rev1/readme.md
@@ -0,0 +1,27 @@
+# Nyx
+
+![Nyx](https://i.imgur.com/I202xevh.png)
+
+A 65% keyboard, which controlled by an RP2040 chipset. The keyboard feature RGB Matrix.
+
+* Keyboard Maintainer: [HorrorTroll](https://github.com/HorrorTroll)
+* Hardware Supported: RP2040
+* Hardware Availability: Private prototype (only 5 PCB available)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make horrortroll/nyx/rev1:default
+
+Flashing example for this keyboard:
+
+ make horrortroll/nyx/rev1: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 (Esc 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/horrortroll/nyx/rev1/rgb_matrix_kb.inc b/keyboards/horrortroll/nyx/rev1/rgb_matrix_kb.inc
new file mode 100644
index 000000000000..0912e3d956ae
--- /dev/null
+++ b/keyboards/horrortroll/nyx/rev1/rgb_matrix_kb.inc
@@ -0,0 +1,7 @@
+RGB_MATRIX_EFFECT(STARTUP_SWIRL_ANIM)
+
+#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+#include "lib/startup_swirl_anim.h"
+
+#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/keyboards/horrortroll/nyx/rev1/rules.mk b/keyboards/horrortroll/nyx/rev1/rules.mk
new file mode 100644
index 000000000000..942ef4c5dbde
--- /dev/null
+++ b/keyboards/horrortroll/nyx/rev1/rules.mk
@@ -0,0 +1 @@
+RGB_MATRIX_CUSTOM_KB = yes
diff --git a/keyboards/horrortroll/readme.md b/keyboards/horrortroll/readme.md
index 67347a3c1623..64bcdf0c654e 100644
--- a/keyboards/horrortroll/readme.md
+++ b/keyboards/horrortroll/readme.md
@@ -1,17 +1,18 @@
# Welcome to my Keyboard Firmwares
## Keyboards Released by me:
- | Keyboard name | MCU | Layout | Vendor ID | Product ID | Features |
- | ---------------- | ------------- | ------------ | --------- | ---------- | -------------------------------------------- |
- | Handwired K552 | STM32F103RCT6 | TKL | 0x7516 | 0x5000 | Hotswap, RGB Underglow, OLED 128x32 |
- | Paws 60 | ATMEGA32U4 | 60% | 0x7516 | 0x5001 | Hotswap |
+ | Keyboard name | MCU | Layout | Vendor ID | Product ID | Features |
+ | -------------- | ------------- | ------ | --------- | ---------- | ----------------------------------- |
+ | Handwired K552 | STM32F103RCT6 | TKL | 0x7516 | 0x5000 | Hotswap, RGB Underglow, OLED 128x32 |
+ | Paws 60 | ATMEGA32U4 | 60% | 0x7516 | 0x5001 | Hotswap |
+ | Nyx | RP2040 | 65% | 0x7516 | 0x5005 | Hotswap, RGB Matrix |
## Keyboards Completed has Collaboration with me:
- | Keyboard name | MCU | Layout | Vendor ID | Product ID | Features |
- | ------------------ | ------------- | ------------ | --------- | ---------- | ---------------------------------- |
- | Lemon40 | ATMEGA32U4 | 40% Alice | 0x7516 | 0x6000 | Solder, RGB Underglow, OLED 128x32 |
- | Caticorn (Solder) | RP2040 | TKL | 0x7516 | 0x6001 | Solder |
- | Caticorn (Hotswap) | RP2040 | TKL | 0x7516 | 0x6002 | Hotswap |
+ | Keyboard name | MCU | Layout | Vendor ID | Product ID | Features |
+ | ------------------ | ---------- | --------- | --------- | ---------- | ---------------------------------- |
+ | Lemon40 | ATMEGA32U4 | 40% Alice | 0x7516 | 0x6000 | Solder, RGB Underglow, OLED 128x32 |
+ | Caticorn (Solder) | RP2040 | TKL | 0x7516 | 0x6001 | Solder |
+ | Caticorn (Hotswap) | RP2040 | TKL | 0x7516 | 0x6002 | Hotswap |
## Keyboard Rewrited by me:
| Keyboard name | MCU | Layout | Vendor ID | Product ID | Features |
diff --git a/keyboards/inland/v83p/config.h b/keyboards/inland/v83p/config.h
new file mode 100644
index 000000000000..c433b568dda5
--- /dev/null
+++ b/keyboards/inland/v83p/config.h
@@ -0,0 +1,36 @@
+// Copyright 2023 jonylee@hfd (@jonylee1986)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define ENCODER_DEFAULT_POS 0x3
+
+/* DIP switch */
+#define DIP_SWITCH_PINS \
+ { C11 }
+
+/* I2C Config for LED Driver */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define I2C1_SDA_PIN B7
+#define I2C1_SCL_PIN B6
+#define I2C1_SCL_PAL_MODE 4
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000
+
+#define RGB_MATRIX_LED_COUNT 92
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+/* 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 (4 * 1024)
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
diff --git a/keyboards/inland/v83p/halconf.h b/keyboards/inland/v83p/halconf.h
new file mode 100644
index 000000000000..fcd8b7216a67
--- /dev/null
+++ b/keyboards/inland/v83p/halconf.h
@@ -0,0 +1,11 @@
+// Copyright 2023 jonylee@hfd (@jonylee1986)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#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/inland/v83p/info.json b/keyboards/inland/v83p/info.json
new file mode 100644
index 000000000000..d7a418bccfbe
--- /dev/null
+++ b/keyboards/inland/v83p/info.json
@@ -0,0 +1,253 @@
+{
+ "manufacturer": "Inland",
+ "keyboard_name": "V83P",
+ "maintainer": "jonylee@hfd",
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "usb": {
+ "vid": "0xFFFE",
+ "pid": "0x001B",
+ "device_version": "1.0.3",
+ "force_nkro": true,
+ "suspend_wakeup_delay": 1000
+ },
+ "diode_direction": "ROW2COL",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true,
+ "encoder": true,
+ "dip_switch":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", "B14"]
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "A8", "pin_b": "B13" }
+ ]
+ },
+ "rgb_matrix": {
+ "driver": "ckled2001",
+ "max_brightness": 180,
+ "animations": {
+ "solid_color": true,
+ "breathing": 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,
+ "raindrops": true,
+ "typing_heatmap": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "multisplash": true
+ },
+ "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": 194, "y": 0 },
+
+ { "flags": 4, "matrix": [1,0], "x": 0, "y": 13},
+ { "flags": 4, "matrix": [1,1], "x": 14, "y": 13},
+ { "flags": 4, "matrix": [1,2], "x": 28, "y": 13},
+ { "flags": 4, "matrix": [1,3], "x": 42, "y": 13},
+ { "flags": 4, "matrix": [1,4], "x": 56, "y": 13},
+ { "flags": 4, "matrix": [1,5], "x": 70, "y": 13},
+ { "flags": 4, "matrix": [1,6], "x": 84, "y": 13},
+ { "flags": 4, "matrix": [1,7], "x": 98, "y": 13},
+ { "flags": 4, "matrix": [1,8], "x": 112, "y": 13},
+ { "flags": 4, "matrix": [1,9], "x": 126, "y": 13},
+ { "flags": 4, "matrix": [1,10], "x": 140, "y": 13},
+ { "flags": 4, "matrix": [1,11], "x": 154, "y": 13},
+ { "flags": 4, "matrix": [1,12], "x": 168, "y": 13},
+ { "flags": 4, "matrix": [1,13], "x": 182, "y": 13},
+ { "flags": 4, "matrix": [1,15], "x": 224, "y": 13},
+
+ { "flags": 4, "matrix": [2,0], "x": 0, "y": 26},
+ { "flags": 4, "matrix": [2,1], "x": 14, "y": 26},
+ { "flags": 4, "matrix": [2,2], "x": 28, "y": 26},
+ { "flags": 4, "matrix": [2,3], "x": 42, "y": 26},
+ { "flags": 4, "matrix": [2,4], "x": 56, "y": 26},
+ { "flags": 4, "matrix": [2,5], "x": 70, "y": 26},
+ { "flags": 4, "matrix": [2,6], "x": 84, "y": 26},
+ { "flags": 4, "matrix": [2,7], "x": 98, "y": 26},
+ { "flags": 4, "matrix": [2,8], "x": 112, "y": 26},
+ { "flags": 4, "matrix": [2,9], "x": 126, "y": 26},
+ { "flags": 4, "matrix": [2,10], "x": 140, "y": 26},
+ { "flags": 4, "matrix": [2,11], "x": 154, "y": 26},
+ { "flags": 4, "matrix": [2,12], "x": 168, "y": 26},
+ { "flags": 4, "matrix": [2,13], "x": 182, "y": 26},
+ { "flags": 4, "matrix": [2,15], "x": 224, "y": 26},
+
+ { "flags": 1, "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": 1, "matrix": [3,13], "x": 182, "y": 38},
+ { "flags": 4, "matrix": [3,15], "x": 224, "y": 38},
+
+ { "flags": 1, "matrix": [4,0], "x": 0, "y": 51},
+ { "flags": 4, "matrix": [4,1], "x": 18, "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": 1, "matrix": [4,13], "x": 200, "y": 51},
+ { "flags": 1, "matrix": [4,14], "x": 214, "y": 51},
+ { "flags": 1, "matrix": [4,15], "x": 224, "y": 51},
+
+ { "flags": 1, "matrix": [5,0], "x": 0, "y": 64},
+ { "flags": 1, "matrix": [5,1], "x": 18, "y": 64},
+ { "flags": 1, "matrix": [5,2], "x": 37, "y": 64},
+ { "flags": 4, "matrix": [5,5], "x": 92, "y": 64},
+ { "flags": 1, "matrix": [5,9], "x": 140, "y": 64},
+ { "flags": 1, "matrix": [5,10], "x": 154, "y": 64},
+ { "flags": 1, "matrix": [5,11], "x": 168, "y": 64},
+ { "flags": 1, "matrix": [5,13], "x": 196, "y": 64},
+ { "flags": 1, "matrix": [5,14], "x": 210, "y": 64},
+ { "flags": 1, "matrix": [5,15], "x": 224, "y": 64},
+
+ { "flags": 2, "x": 0, "y": 0 },
+ { "flags": 2, "x": 0, "y": 16},
+ { "flags": 2, "x": 0, "y": 32},
+ { "flags": 2, "x": 0, "y": 48},
+ { "flags": 2, "x": 0, "y": 64},
+
+ { "flags": 2, "x": 224, "y": 0 },
+ { "flags": 2, "x": 224, "y": 16},
+ { "flags": 2, "x": 224, "y": 32},
+ { "flags": 2, "x": 224, "y": 48},
+ { "flags": 2, "x": 224, "y": 64}
+ ]
+ },
+ "layouts": {
+ "LAYOUT_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.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,15], "x": 15.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": [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], "w": 2, "x": 13, "y": 1 },
+ { "matrix": [1,15], "x": 15.5, "y": 1 },
+
+ { "matrix": [2,0], "w": 1.5, "x": 0, "y": 2 },
+ { "matrix": [2,1], "x": 1.5, "y": 2 },
+ { "matrix": [2,2], "x": 2.5, "y": 2 },
+ { "matrix": [2,3], "x": 3.5, "y": 2 },
+ { "matrix": [2,4], "x": 4.5, "y": 2 },
+ { "matrix": [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], "w": 1.5, "x": 13.5, "y": 2 },
+ { "matrix": [2,15], "x": 15.5, "y": 2 },
+
+ { "matrix": [3,0], "w": 1.75, "x": 0, "y": 3 },
+ { "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], "w": 2.25, "x": 12.75, "y": 3 },
+ { "matrix": [3,15], "x": 15.5, "y": 3 },
+
+ { "matrix": [4,0], "w": 2.25, "x": 0, "y": 4 },
+ { "matrix": [4,1], "x": 2.25, "y": 4 },
+ { "matrix": [4,2], "x": 3.25, "y": 4 },
+ { "matrix": [4,3], "x": 4.25, "y": 4 },
+ { "matrix": [4,4], "x": 5.25, "y": 4 },
+ { "matrix": [4,5], "x": 6.25, "y": 4 },
+ { "matrix": [4,6], "x": 7.25, "y": 4 },
+ { "matrix": [4,7], "x": 8.25, "y": 4 },
+ { "matrix": [4,8], "x": 9.25, "y": 4 },
+ { "matrix": [4,9], "x": 10.25, "y": 4 },
+ { "matrix": [4,10], "x": 11.25, "y": 4 },
+ { "matrix": [4,13], "w": 1.75, "x": 12.25, "y": 4 },
+ { "matrix": [4,14], "x": 14.25, "y": 4.25 },
+ { "matrix": [4,15], "x": 15.5, "y": 4 },
+
+ { "matrix": [5,0], "w": 1.25, "x": 0, "y": 5 },
+ { "matrix": [5,1], "w": 1.25, "x": 1.25, "y": 5 },
+ { "matrix": [5,2], "w": 1.25, "x": 2.5, "y": 5 },
+ { "matrix": [5,5], "w": 6.25, "x": 3.75, "y": 5 },
+ { "matrix": [5,9], "x": 10, "y": 5 },
+ { "matrix": [5,10], "x": 11, "y": 5 },
+ { "matrix": [5,11], "x": 12, "y": 5 },
+ { "matrix": [5,13], "x": 13.25, "y": 5.25 },
+ { "matrix": [5,14], "x": 14.25, "y": 5.25 },
+ { "matrix": [5,15], "x": 15.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/inland/v83p/keymaps/default/keymap.c b/keyboards/inland/v83p/keymaps/default/keymap.c
new file mode 100644
index 000000000000..359939a01597
--- /dev/null
+++ b/keyboards/inland/v83p/keymaps/default/keymap.c
@@ -0,0 +1,55 @@
+// Copyright 2023 jonylee@hfd (@jonylee1986)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+// clang-format off
+enum __layers {
+ WIN_B,
+ WIN_FN,
+ MAC_B,
+ MAC_FN
+};
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT_ansi( /* 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_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(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_ansi( /* FN */
+ EE_CLR, KC_BRID, KC_BRIU, KC_MAIL, KC_WSCH, KC_CALC, KC_MSEL, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI, RGB_HUD,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI),
+
+ [MAC_B] = LAYOUT_ansi( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_F3, KC_F4, 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_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_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_ansi( /* FN */
+ EE_CLR, 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_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI, RGB_HUD,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [WIN_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_SAI, RGB_SAD) },
+ [MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_SAI, RGB_SAD) },
+};
+#endif
+
diff --git a/keyboards/inland/v83p/keymaps/default/rules.mk b/keyboards/inland/v83p/keymaps/default/rules.mk
new file mode 100644
index 000000000000..a40474b4d5c7
--- /dev/null
+++ b/keyboards/inland/v83p/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/inland/v83p/keymaps/via/keymap.c b/keyboards/inland/v83p/keymaps/via/keymap.c
new file mode 100644
index 000000000000..56b44997d031
--- /dev/null
+++ b/keyboards/inland/v83p/keymaps/via/keymap.c
@@ -0,0 +1,76 @@
+// Copyright 2023 jonylee@hfd (@jonylee1986)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+// clang-format off
+enum __layers {
+ WIN_B,
+ WIN_FN,
+ MAC_B,
+ MAC_FN
+};
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT_ansi( /* 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_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(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_ansi( /* FN */
+ EE_CLR, KC_BRID, KC_BRIU, KC_MAIL, KC_WSCH, KC_CALC, KC_MSEL, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI, RGB_HUD,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI),
+
+ [MAC_B] = LAYOUT_ansi( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_F3, KC_F4, 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_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_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_ansi( /* FN */
+ EE_CLR, 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_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI, RGB_HUD,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [WIN_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_SAI, RGB_SAD) },
+ [MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_SAI, RGB_SAD) },
+};
+#endif
+// clang-format on
+
+bool dip_switch_update_user(uint8_t index, bool active) {
+ if (index == 0) {
+ default_layer_set(1UL << (active ? 2 : 0));
+ }
+ if (active) {
+ keymap_config.no_gui = 0;
+ }
+ return true;
+}
+bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
+ // caps lock red
+ if ((host_keyboard_led_state().caps_lock)) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(44, 128, 0, 0);
+ }
+ // GUI lock red
+ if (keymap_config.no_gui) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(73, 128, 0, 0);
+ }
+ return true;
+}
diff --git a/keyboards/inland/v83p/keymaps/via/rules.mk b/keyboards/inland/v83p/keymaps/via/rules.mk
new file mode 100644
index 000000000000..4253f570f0bb
--- /dev/null
+++ b/keyboards/inland/v83p/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/inland/v83p/mcuconf.h b/keyboards/inland/v83p/mcuconf.h
new file mode 100644
index 000000000000..aa272655630f
--- /dev/null
+++ b/keyboards/inland/v83p/mcuconf.h
@@ -0,0 +1,12 @@
+// Copyright 2023 jonylee@hfd (@jonylee1986)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#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/inland/v83p/readme.md b/keyboards/inland/v83p/readme.md
new file mode 100644
index 000000000000..000e960d634d
--- /dev/null
+++ b/keyboards/inland/v83p/readme.md
@@ -0,0 +1,26 @@
+# v83p
+
+A customizable 75% encoder keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: v83p
+* Hardware Availability: [inland](https://www.microcenter.com/search/search_results.aspx?N=4294961018+4294822437)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make inland/v83p:default
+
+Flashing example for this keyboard:
+
+ make inland/v83p:default:flash
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the top left key) and plug in the keyboard
+* **Physical BOOT contact**: Short circuit the BOOT contact located below the spacebar of the PCB and plug in the keyboard
diff --git a/keyboards/inland/v83p/rules.mk b/keyboards/inland/v83p/rules.mk
new file mode 100644
index 000000000000..24d5f6f52ecc
--- /dev/null
+++ b/keyboards/inland/v83p/rules.mk
@@ -0,0 +1,2 @@
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/inland/v83p/v83p.c b/keyboards/inland/v83p/v83p.c
new file mode 100644
index 000000000000..26ab62784aab
--- /dev/null
+++ b/keyboards/inland/v83p/v83p.c
@@ -0,0 +1,119 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+// clang-format off
+
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led PROGMEM g_ckled2001_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, G_13, H_13, I_13},
+ {1, D_3, E_3, F_3},
+
+ {0, J_1, K_1, L_1},
+ {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, 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},
+};
+#endif
+
+
diff --git a/keyboards/jukaie/jk01/config.h b/keyboards/jukaie/jk01/config.h
new file mode 100644
index 000000000000..8a7ea71db4e8
--- /dev/null
+++ b/keyboards/jukaie/jk01/config.h
@@ -0,0 +1,44 @@
+/* Copyright 2023 JUKAIE
+ *
+ * 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
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+/* External spi flash */
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B14
+#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
+
+/* SPI Config for LED Driver */
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN A5
+#define SPI_MOSI_PIN A7
+#define SPI_MISO_PIN A6
+
+#define DRIVER_1_CS A15
+#define DRIVER_2_CS B15
+#define DRIVER_1_EN C13
+#define DRIVER_2_EN C13
+
+#define DRIVER_COUNT 2
+#define DRIVER_1_LED_TOTAL 66
+#define DRIVER_2_LED_TOTAL 19
+#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
diff --git a/keyboards/jukaie/jk01/halconf.h b/keyboards/jukaie/jk01/halconf.h
new file mode 100644
index 000000000000..64a184eb924e
--- /dev/null
+++ b/keyboards/jukaie/jk01/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2023 Westberry Technology (ChangZhou) Corp., Ltd
+ *
+ * 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
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/jukaie/jk01/info.json b/keyboards/jukaie/jk01/info.json
new file mode 100644
index 000000000000..87c787158c7f
--- /dev/null
+++ b/keyboards/jukaie/jk01/info.json
@@ -0,0 +1,270 @@
+{
+ "manufacturer": "Jukaie",
+ "keyboard_name": "JK01",
+ "maintainer": "Jukaie",
+ "bootloader": "wb32-dfu",
+ "bootmagic": {
+ "matrix": [1, 3]
+ },
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "C2", "pin_b": "C3"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "indicators": {
+ "caps_lock": "C14"
+ },
+ "matrix_pins": {
+ "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],
+ "rows": ["B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10", "B12"]
+ },
+ "processor": "WB32FQ95",
+ "qmk": {
+ "tap_keycode_delay": 10
+ },
+ "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
+ },
+ "center_point": [76, 25],
+ "driver": "aw20216",
+ "layout": [
+ { "flags": 4, "matrix": [1, 3], "x": 0, "y": 0 },
+ { "flags": 4, "matrix": [2, 6], "x": 20, "y": 0 },
+ { "flags": 4, "matrix": [3, 6], "x": 30, "y": 0 },
+ { "flags": 4, "matrix": [3, 1], "x": 40, "y": 0 },
+ { "flags": 4, "matrix": [3, 3], "x": 50, "y": 0 },
+ { "flags": 4, "matrix": [0, 7], "x": 60, "y": 0 },
+ { "flags": 4, "matrix": [6, 3], "x": 70, "y": 0 },
+ { "flags": 4, "matrix": [7, 1], "x": 80, "y": 0 },
+ { "flags": 4, "matrix": [7, 6], "x": 90, "y": 0 },
+ { "flags": 4, "matrix": [10, 6], "x": 100, "y": 0 },
+ { "flags": 4, "matrix": [10, 7], "x": 110, "y": 0 },
+ { "flags": 4, "matrix": [10, 3], "x": 120, "y": 0 },
+ { "flags": 4, "matrix": [10, 5], "x": 130, "y": 0 },
+ { "flags": 4, "matrix": [9, 7], "x": 140, "y": 0 },
+ { "flags": 4, "matrix": [0, 2], "x": 150, "y": 0 },
+ { "flags": 4, "matrix": [1, 6], "x": 0, "y": 10 },
+ { "flags": 4, "matrix": [1, 7], "x": 10, "y": 10 },
+ { "flags": 4, "matrix": [2, 7], "x": 20, "y": 10 },
+ { "flags": 4, "matrix": [3, 7], "x": 30, "y": 10 },
+ { "flags": 4, "matrix": [4, 7], "x": 40, "y": 10 },
+ { "flags": 4, "matrix": [4, 6], "x": 50, "y": 10 },
+ { "flags": 4, "matrix": [5, 6], "x": 60, "y": 10 },
+ { "flags": 4, "matrix": [5, 7], "x": 70, "y": 10 },
+ { "flags": 4, "matrix": [6, 7], "x": 80, "y": 10 },
+ { "flags": 4, "matrix": [7, 7], "x": 90, "y": 10 },
+ { "flags": 4, "matrix": [8, 7], "x": 100, "y": 10 },
+ { "flags": 4, "matrix": [8, 6], "x": 110, "y": 10 },
+ { "flags": 4, "matrix": [6, 6], "x": 120, "y": 10 },
+ { "flags": 4, "matrix": [10, 1], "x": 130, "y": 10 },
+ { "flags": 4, "matrix": [11, 6], "x": 150, "y": 10 },
+ { "flags": 4, "matrix": [1, 1], "x": 0, "y": 20 },
+ { "flags": 4, "matrix": [1, 0], "x": 15, "y": 20 },
+ { "flags": 4, "matrix": [2, 0], "x": 25, "y": 20 },
+ { "flags": 4, "matrix": [3, 0], "x": 35, "y": 20 },
+ { "flags": 4, "matrix": [4, 0], "x": 45, "y": 20 },
+ { "flags": 4, "matrix": [4, 1], "x": 55, "y": 20 },
+ { "flags": 4, "matrix": [5, 1], "x": 65, "y": 20 },
+ { "flags": 4, "matrix": [5, 0], "x": 75, "y": 20 },
+ { "flags": 4, "matrix": [6, 0], "x": 85, "y": 20 },
+ { "flags": 4, "matrix": [7, 0], "x": 95, "y": 20 },
+ { "flags": 4, "matrix": [8, 0], "x": 105, "y": 20 },
+ { "flags": 4, "matrix": [8, 1], "x": 115, "y": 20 },
+ { "flags": 4, "matrix": [6, 1], "x": 125, "y": 20 },
+ { "flags": 4, "matrix": [10, 2], "x": 135, "y": 20 },
+ { "flags": 4, "matrix": [6, 5], "x": 150, "y": 20 },
+ { "flags": 4, "matrix": [2, 1], "x": 0, "y": 30 },
+ { "flags": 4, "matrix": [1, 2], "x": 17, "y": 30 },
+ { "flags": 8, "matrix": [2, 2], "x": 27, "y": 30 },
+ { "flags": 4, "matrix": [3, 2], "x": 37, "y": 30 },
+ { "flags": 4, "matrix": [4, 2], "x": 47, "y": 30 },
+ { "flags": 4, "matrix": [4, 3], "x": 57, "y": 30 },
+ { "flags": 4, "matrix": [5, 3], "x": 67, "y": 30 },
+ { "flags": 4, "matrix": [5, 2], "x": 77, "y": 30 },
+ { "flags": 4, "matrix": [6, 2], "x": 87, "y": 30 },
+ { "flags": 4, "matrix": [7, 2], "x": 97, "y": 30 },
+ { "flags": 4, "matrix": [8, 2], "x": 107, "y": 30 },
+ { "flags": 4, "matrix": [8, 3], "x": 117, "y": 30 },
+ { "flags": 4, "matrix": [10, 4], "x": 127, "y": 30 },
+ { "flags": 4, "matrix": [1, 5], "x": 150, "y": 30 },
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 40 },
+ { "flags": 4, "matrix": [1, 4], "x": 22, "y": 40 },
+ { "flags": 4, "matrix": [2, 4], "x": 32, "y": 40 },
+ { "flags": 4, "matrix": [3, 4], "x": 42, "y": 40 },
+ { "flags": 4, "matrix": [4, 4], "x": 52, "y": 40 },
+ { "flags": 4, "matrix": [4, 5], "x": 62, "y": 40 },
+ { "flags": 4, "matrix": [5, 5], "x": 72, "y": 40 },
+ { "flags": 4, "matrix": [5, 4], "x": 82, "y": 40 },
+ { "flags": 4, "matrix": [6, 4], "x": 92, "y": 40 },
+ { "flags": 4, "matrix": [7, 4], "x": 102, "y": 40 },
+ { "flags": 4, "matrix": [8, 5], "x": 112, "y": 40 },
+ { "flags": 4, "matrix": [9, 1], "x": 122, "y": 40 },
+ { "flags": 4, "matrix": [3, 5], "x": 140, "y": 40 },
+ { "flags": 4, "matrix": [2, 5], "x": 150, "y": 40 },
+ { "flags": 4, "matrix": [0, 6], "x": 0, "y": 50 },
+ { "flags": 4, "matrix": [9, 0], "x": 12, "y": 50 },
+ { "flags": 4, "matrix": [9, 3], "x": 25, "y": 50 },
+ { "flags": 4, "matrix": [9, 4], "x": 37, "y": 50 },
+ { "flags": 4, "matrix": [9, 5], "x": 100, "y": 50 },
+ { "flags": 4, "matrix": [9, 2], "x": 110, "y": 50 },
+ { "flags": 4, "matrix": [0, 4], "x": 120, "y": 50 },
+ { "flags": 4, "matrix": [0, 3], "x": 130, "y": 50 },
+ { "flags": 4, "matrix": [7, 3], "x": 140, "y": 50 },
+ { "flags": 4, "matrix": [0, 5], "x": 150, "y": 50 },
+ { "flags": 4, "matrix": [11, 0], "x": 0, "y": 1 },
+ { "flags": 4, "matrix": [11, 1], "x": 0, "y": 2 }
+ ]
+ },
+ "url": "",
+ "usb": {
+ "device_version": "0.0.2",
+ "pid": "0x0002",
+ "vid": "0x4141"
+ },
+ "eeprom": {
+ "driver": "wear_leveling"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "ESC", "matrix": [1, 3], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [2, 6], "x": 2, "y": 0 },
+ { "label": "F2", "matrix": [3, 6], "x": 3, "y": 0 },
+ { "label": "F3", "matrix": [3, 1], "x": 4, "y": 0 },
+ { "label": "F4", "matrix": [3, 3], "x": 5, "y": 0 },
+ { "label": "F5", "matrix": [0, 7], "x": 6, "y": 0 },
+ { "label": "F6", "matrix": [6, 3], "x": 7, "y": 0 },
+ { "label": "F7", "matrix": [7, 1], "x": 8, "y": 0 },
+ { "label": "F8", "matrix": [7, 6], "x": 9, "y": 0 },
+ { "label": "F9", "matrix": [10, 6], "x": 10, "y": 0 },
+ { "label": "F10", "matrix": [10, 7], "x": 11, "y": 0 },
+ { "label": "F11", "matrix": [10, 3], "x": 12, "y": 0 },
+ { "label": "F12", "matrix": [10, 5], "x": 13, "y": 0 },
+ { "label": "Printscreen", "matrix": [9, 7], "x": 14, "y": 0 },
+ { "label": "Del", "matrix": [0, 2], "x": 15, "y": 0 },
+ { "label": "`", "matrix": [1, 6], "x": 0, "y": 1 },
+ { "label": "1", "matrix": [1, 7], "x": 1, "y": 1 },
+ { "label": "2", "matrix": [2, 7], "x": 2, "y": 1 },
+ { "label": "3", "matrix": [3, 7], "x": 3, "y": 1 },
+ { "label": "4", "matrix": [4, 7], "x": 4, "y": 1 },
+ { "label": "5", "matrix": [4, 6], "x": 5, "y": 1 },
+ { "label": "6", "matrix": [5, 6], "x": 6, "y": 1 },
+ { "label": "7", "matrix": [5, 7], "x": 7, "y": 1 },
+ { "label": "8", "matrix": [6, 7], "x": 8, "y": 1 },
+ { "label": "9", "matrix": [7, 7], "x": 9, "y": 1 },
+ { "label": "0", "matrix": [8, 7], "x": 10, "y": 1 },
+ { "label": "-", "matrix": [8, 6], "x": 11, "y": 1 },
+ { "label": "=", "matrix": [6, 6], "x": 12, "y": 1 },
+ { "label": "Backspace", "matrix": [10, 1], "w": 2, "x": 13, "y": 1 },
+ { "label": "Home", "matrix": [11, 6], "x": 15, "y": 1 },
+ { "label": "Tab", "matrix": [1, 1], "w": 1.5, "x": 0, "y": 2 },
+ { "label": "Q", "matrix": [1, 0], "x": 1.5, "y": 2 },
+ { "label": "W", "matrix": [2, 0], "x": 2.5, "y": 2 },
+ { "label": "E", "matrix": [3, 0], "x": 3.5, "y": 2 },
+ { "label": "R", "matrix": [4, 0], "x": 4.5, "y": 2 },
+ { "label": "T", "matrix": [4, 1], "x": 5.5, "y": 2 },
+ { "label": "Y", "matrix": [5, 1], "x": 6.5, "y": 2 },
+ { "label": "U", "matrix": [5, 0], "x": 7.5, "y": 2 },
+ { "label": "I", "matrix": [6, 0], "x": 8.5, "y": 2 },
+ { "label": "O", "matrix": [7, 0], "x": 9.5, "y": 2 },
+ { "label": "P", "matrix": [8, 0], "x": 10.5, "y": 2 },
+ { "label": "[", "matrix": [8, 1], "x": 11.5, "y": 2 },
+ { "label": "]", "matrix": [6, 1], "x": 12.5, "y": 2 },
+ { "label": "\\", "matrix": [10, 2], "w": 1.5, "x": 13.5, "y": 2 },
+ { "label": "End", "matrix": [6, 5], "x": 15, "y": 2 },
+ { "label": "Caps Lock", "matrix": [2, 1], "w": 1.75, "x": 0, "y": 3 },
+ { "label": "A", "matrix": [1, 2], "x": 1.75, "y": 3 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 3 },
+ { "label": "D", "matrix": [3, 2], "x": 3.75, "y": 3 },
+ { "label": "F", "matrix": [4, 2], "x": 4.75, "y": 3 },
+ { "label": "G", "matrix": [4, 3], "x": 5.75, "y": 3 },
+ { "label": "H", "matrix": [5, 3], "x": 6.75, "y": 3 },
+ { "label": "J", "matrix": [5, 2], "x": 7.75, "y": 3 },
+ { "label": "K", "matrix": [6, 2], "x": 8.75, "y": 3 },
+ { "label": "L", "matrix": [7, 2], "x": 9.75, "y": 3 },
+ { "label": ";", "matrix": [8, 2], "x": 10.75, "y": 3 },
+ { "label": "'", "matrix": [8, 3], "x": 11.75, "y": 3 },
+ { "label": "Enter", "matrix": [10, 4], "w": 2.25, "x": 12.75, "y": 3 },
+ { "label": "PgUp", "matrix": [1, 5], "x": 15, "y": 3 },
+ { "label": "Shift", "matrix": [0, 0], "w": 2.25, "x": 0, "y": 4 },
+ { "label": "Z", "matrix": [1, 4], "x": 2.25, "y": 4 },
+ { "label": "X", "matrix": [2, 4], "x": 3.25, "y": 4 },
+ { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 4 },
+ { "label": "V", "matrix": [4, 4], "x": 5.25, "y": 4 },
+ { "label": "B", "matrix": [4, 5], "x": 6.25, "y": 4 },
+ { "label": "N", "matrix": [5, 5], "x": 7.25, "y": 4 },
+ { "label": "M", "matrix": [5, 4], "x": 8.25, "y": 4 },
+ { "label": ",", "matrix": [6, 4], "x": 9.25, "y": 4 },
+ { "label": ".", "matrix": [7, 4], "x": 10.25, "y": 4 },
+ { "label": "/", "matrix": [8, 5], "x": 11.25, "y": 4 },
+ { "label": "Shift", "matrix": [9, 1], "w": 1.75, "x": 12.25, "y": 4 },
+ { "label": "Up", "matrix": [3, 5], "x": 14, "y": 4 },
+ { "label": "PgDn", "matrix": [2, 5], "x": 15, "y": 4 },
+ { "label": "Ctrl", "matrix": [0, 6], "w": 1.25, "x": 0, "y": 5 },
+ { "label": "Win", "matrix": [9, 0], "w": 1.25, "x": 1.25, "y": 5 },
+ { "label": "Alt", "matrix": [9, 3], "w": 1.25, "x": 2.5, "y": 5 },
+ { "label": "Space", "matrix": [9, 4], "w": 6.25, "x": 3.75, "y": 5 },
+ { "label": "Alt", "matrix": [9, 5], "x": 10, "y": 5 },
+ { "label": "FN", "matrix": [9, 2], "x": 11, "y": 5 },
+ { "label": "Ctrl", "matrix": [0, 4], "x": 12, "y": 5 },
+ { "label": "Left", "matrix": [0, 3], "x": 13, "y": 5 },
+ { "label": "Down", "matrix": [7, 3], "x": 14, "y": 5 },
+ { "label": "Right", "matrix": [0, 5], "x": 15, "y": 5 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/jukaie/jk01/jk01.c b/keyboards/jukaie/jk01/jk01.c
new file mode 100644
index 000000000000..8f6941947609
--- /dev/null
+++ b/keyboards/jukaie/jk01/jk01.c
@@ -0,0 +1,173 @@
+/* Copyright 2023 JUKAIE
+ *
+ * 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 "jk01.h"
+
+#ifdef RGB_MATRIX_ENABLE
+
+const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ //{0, CS1_SW4, CS2_SW4, CS3_SW4}, // 0, k00, Esc
+
+ {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 1, k13, Esc
+ {0, CS1_SW2, CS2_SW2, CS3_SW2}, // 2, k26, F1
+ {0, CS1_SW3, CS2_SW3, CS3_SW3}, // 3, k36, F2
+ {0, CS1_SW4, CS2_SW4, CS3_SW4}, // 4, k31, F3
+ {0, CS1_SW5, CS2_SW5, CS3_SW5}, // 5, k33, F4
+ {0, CS1_SW6, CS2_SW6, CS3_SW6}, // 6, k07, F5
+ {0, CS1_SW7, CS2_SW7, CS3_SW7}, // 7, k63, F6
+ {0, CS1_SW8, CS2_SW8, CS3_SW8}, // 8, k71, F7
+ {0, CS1_SW9, CS2_SW9, CS3_SW9}, // 9, k76, F8
+ {0, CS1_SW10, CS2_SW10, CS3_SW10}, // 10, ka6, F9
+ {0, CS1_SW11, CS2_SW11, CS3_SW11}, // 11, ka7, F10
+ {0, CS1_SW12, CS2_SW12, CS3_SW12}, // 12, ka3, F11
+ {1, CS1_SW1, CS2_SW1, CS3_SW1}, // 13, ka5, F12
+ {1, CS4_SW2, CS5_SW2, CS6_SW2}, // 14, k97, Printscreen
+ {1, CS4_SW5, CS5_SW5, CS6_SW5}, // 15, k02, Del
+
+ {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 16, k16, `
+ {0, CS4_SW2, CS5_SW2, CS6_SW2}, // 17, k17, 1
+ {0, CS4_SW3, CS5_SW3, CS6_SW3}, // 18, k27, 2
+ {0, CS4_SW4, CS5_SW4, CS6_SW4}, // 19, k37, 3
+ {0, CS4_SW5, CS5_SW5, CS6_SW5}, // 20, k47, 4
+ {0, CS4_SW6, CS5_SW6, CS6_SW6}, // 21, k46, 5
+ {0, CS4_SW7, CS5_SW7, CS6_SW7}, // 22, k56, 6
+ {0, CS4_SW8, CS5_SW8, CS6_SW8}, // 23, k57, 7
+ {0, CS4_SW9, CS5_SW9, CS6_SW9}, // 24, k67, 8
+ {0, CS4_SW10, CS5_SW10, CS6_SW10}, // 25, k77, 9
+ {0, CS4_SW11, CS5_SW11, CS6_SW11}, // 26, k87, 0
+ {0, CS4_SW12, CS5_SW12, CS6_SW12}, // 27, k86, -
+ {1, CS1_SW5, CS2_SW5, CS3_SW5}, // 28, k66, =
+ {1, CS1_SW7, CS2_SW7, CS3_SW7}, // 29, ka1, Backspace
+ {1, CS1_SW2, CS2_SW2, CS3_SW2}, // 30, kc6, Home
+
+ {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 31, k11, Tab
+ {0, CS7_SW2, CS8_SW2, CS9_SW2}, // 32, k10, Q
+ {0, CS7_SW3, CS8_SW3, CS9_SW3}, // 33, k20, W
+ {0, CS7_SW4, CS8_SW4, CS9_SW4}, // 34, k30, E
+ {0, CS7_SW5, CS8_SW5, CS9_SW5}, // 35, k40, R
+ {0, CS7_SW6, CS8_SW6, CS9_SW6}, // 36, k41, T
+ {0, CS7_SW7, CS8_SW7, CS9_SW7}, // 37, k51, Y
+ {0, CS7_SW8, CS8_SW8, CS9_SW8}, // 38, k50, U
+ {0, CS7_SW9, CS8_SW9, CS9_SW9}, // 39, k60, I
+ {0, CS7_SW10, CS8_SW10, CS9_SW10}, // 40, k70, O
+ {0, CS7_SW11, CS8_SW11, CS9_SW11}, // 41, k80, P
+ {0, CS7_SW12, CS8_SW12, CS9_SW12}, // 42, k81, [
+ {1, CS1_SW8, CS2_SW8, CS3_SW8}, // 43, k61, ]
+ {1, CS1_SW9, CS2_SW9, CS3_SW9}, // 44, ka2, "\\"
+ {1, CS4_SW3, CS5_SW3, CS6_SW3}, // 45, k65, End
+
+ {0, CS10_SW1, CS11_SW1, CS12_SW1}, // 46, k21, Caps Lock
+ {0, CS10_SW2, CS11_SW2, CS12_SW2}, // 47, k12, A
+ {0, CS10_SW3, CS11_SW3, CS12_SW3}, // 48, k22, S
+ {0, CS10_SW4, CS11_SW4, CS12_SW4}, // 49, k32, D
+ {0, CS10_SW5, CS11_SW5, CS12_SW5}, // 50, k42, F
+ {0, CS10_SW6, CS11_SW6, CS12_SW6}, // 51, k43, G
+ {0, CS10_SW7, CS11_SW7, CS12_SW7}, // 52, k53, H
+ {0, CS10_SW8, CS11_SW8, CS12_SW8}, // 53, k52, J
+ {0, CS10_SW9, CS11_SW9, CS12_SW9}, // 54, k62, K
+ {0, CS10_SW10, CS11_SW10, CS12_SW10}, // 55, k72, L
+ {0, CS10_SW11, CS11_SW11, CS12_SW11}, // 56, k82, ;
+ {0, CS10_SW12, CS11_SW12, CS12_SW12}, // 57, k83, '
+ {1, CS1_SW11, CS2_SW11, CS3_SW11}, // 58, ka4, Enter
+ {1, CS4_SW4, CS5_SW4, CS6_SW4}, // 59, k15, PgUp
+
+ {0, CS13_SW1, CS14_SW1, CS15_SW1}, // 60, k00, Shift_L
+ {0, CS13_SW2, CS14_SW2, CS15_SW2}, // 61, k14, Z
+ {0, CS13_SW3, CS14_SW3, CS15_SW3}, // 62, k24, X
+ {0, CS13_SW4, CS14_SW4, CS15_SW4}, // 63, k34, C
+ {0, CS13_SW5, CS14_SW5, CS15_SW5}, // 64, k44, V
+ {0, CS13_SW6, CS14_SW6, CS15_SW6}, // 65, k45, B
+ {0, CS13_SW7, CS14_SW7, CS15_SW7}, // 66, k55, N
+ {0, CS13_SW8, CS14_SW8, CS15_SW8}, // 67, k54, M
+ {0, CS13_SW9, CS14_SW9, CS15_SW9}, // 68, k64, ,
+ {0, CS13_SW10, CS14_SW10, CS15_SW10}, // 69, k74, .
+ {0, CS13_SW11, CS14_SW11, CS15_SW11}, // 70, k85, /
+ {1, CS4_SW8, CS5_SW8, CS6_SW8}, // 71, k91, Shift_R
+ {1, CS4_SW9, CS5_SW9, CS6_SW9}, // 72, k35, Up
+ {1, CS4_SW7, CS5_SW7, CS6_SW7}, // 73, k25, PgDn
+
+ {0, CS16_SW1, CS17_SW1, CS18_SW1}, // 74, k06, Ctrl_L
+ {0, CS16_SW2, CS17_SW2, CS18_SW2}, // 75, k90, Win_L
+ {0, CS16_SW3, CS17_SW3, CS18_SW3}, // 76, k93, Alt_L
+ {0, CS16_SW6, CS17_SW6, CS18_SW6}, // 77, k94, Space
+ {0, CS16_SW9, CS17_SW9, CS18_SW9}, // 78, k95, Alt_R
+ {0, CS16_SW10, CS17_SW10, CS18_SW10}, // 79, k92, FN
+ {0, CS16_SW12, CS17_SW12, CS18_SW12}, // 80, k04, Ctrl_R
+ {1, CS4_SW10, CS5_SW10, CS6_SW10}, // 81, k03, Left
+ {1, CS4_SW11, CS5_SW11, CS6_SW11}, // 82, k73, Down
+ {1, CS10_SW5, CS11_SW5, CS12_SW5}, // 83, k05, Right
+
+ {1, CS10_SW10, CS11_SW10, CS12_SW10}, // 84, kb0, Z1
+ {1, CS10_SW11, CS11_SW11, CS12_SW11}, // 85, kb1, Z2
+};
+
+#endif
+
+#ifdef EEPROM_ENABLE
+
+#include "spi_master.h"
+
+void spi_init(void) {
+ static bool is_initialised = false;
+ if (!is_initialised) {
+ is_initialised = true;
+
+ // Try releasing special pins for a short time
+ setPinInput(SPI_SCK_PIN);
+ setPinInput(SPI_MOSI_PIN);
+ setPinInput(SPI_MISO_PIN);
+
+ chThdSleepMilliseconds(10);
+
+ palSetPadMode(PAL_PORT(SPI_SCK_PIN), PAL_PAD(SPI_SCK_PIN), PAL_MODE_ALTERNATE(SPI_SCK_PAL_MODE) | PAL_OUTPUT_TYPE_PUSHPULL | PAL_OUTPUT_SPEED_HIGHEST | PAL_WB32_CURRENT_LEVEL3);
+ palSetPadMode(PAL_PORT(SPI_MOSI_PIN), PAL_PAD(SPI_MOSI_PIN), PAL_MODE_ALTERNATE(SPI_MOSI_PAL_MODE) | PAL_OUTPUT_TYPE_PUSHPULL | PAL_OUTPUT_SPEED_HIGHEST);
+ palSetPadMode(PAL_PORT(SPI_MISO_PIN), PAL_PAD(SPI_MISO_PIN), PAL_MODE_ALTERNATE(SPI_MISO_PAL_MODE) | PAL_OUTPUT_TYPE_PUSHPULL | PAL_OUTPUT_SPEED_HIGHEST);
+ }
+}
+
+#endif
+
+void keyboard_pre_init_kb(void) {
+ setPinOutput(C0);
+ setPinOutput(C15);
+ keyboard_pre_init_user();
+};
+void housekeeping_task_kb(void) {
+ writePin(C15, keymap_config.no_gui);
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ switch (keycode) {
+
+ case KC_SIRI:
+ if (record->event.pressed) {
+ host_consumer_send(0xCF);
+ } else {
+ host_consumer_send(0);
+ }
+ return false; /* Skip all further processing of this key */
+
+ default:
+ return true; /* Process all other keycodes normally */
+ }
+};
\ No newline at end of file
diff --git a/keyboards/jukaie/jk01/jk01.h b/keyboards/jukaie/jk01/jk01.h
new file mode 100644
index 000000000000..d4bf805c12d5
--- /dev/null
+++ b/keyboards/jukaie/jk01/jk01.h
@@ -0,0 +1,22 @@
+/* Copyright 2022 GSKY
+ *
+ * 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 "quantum.h"
+
+enum keyboard_keycodes {
+ KC_SIRI = QK_KB
+};
diff --git a/keyboards/jukaie/jk01/keymaps/default/keymap.c b/keyboards/jukaie/jk01/keymaps/default/keymap.c
new file mode 100644
index 000000000000..bdf509a8e899
--- /dev/null
+++ b/keyboards/jukaie/jk01/keymaps/default/keymap.c
@@ -0,0 +1,78 @@
+/* Copyright 2023 JUKAIE
+ *
+ * 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.
+
+enum custom_layers {
+ Win,
+ Mac,
+ Winfn,
+ Macfn,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[Win] = 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_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_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(Winfn),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[Mac] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_SIRI, KC_F5, KC_F6, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, 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_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_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(Macfn),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[Winfn] = LAYOUT(
+ QK_BOOT, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, RGB_MOD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI,
+ KC_TRNS, KC_TRNS, TO(Win), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TO(Mac), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS,
+ KC_TRNS, GUI_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPD, RGB_VAD, RGB_SPI),
+
+[Macfn] = LAYOUT(
+ QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS, KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, RGB_MOD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI,
+ KC_TRNS, KC_TRNS, TO(Win), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TO(Mac), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPD, RGB_VAD, RGB_SPI),
+
+};
+
+#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_VOLD, KC_VOLU) },
+ [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
+};
+#endif
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ writePin(C0, layer_state_cmp(state, 1));
+ return state;
+};
diff --git a/keyboards/jukaie/jk01/keymaps/default/rules.mk b/keyboards/jukaie/jk01/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/jukaie/jk01/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/jukaie/jk01/keymaps/via/keymap.c b/keyboards/jukaie/jk01/keymaps/via/keymap.c
new file mode 100644
index 000000000000..bdf509a8e899
--- /dev/null
+++ b/keyboards/jukaie/jk01/keymaps/via/keymap.c
@@ -0,0 +1,78 @@
+/* Copyright 2023 JUKAIE
+ *
+ * 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.
+
+enum custom_layers {
+ Win,
+ Mac,
+ Winfn,
+ Macfn,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[Win] = 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_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_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(Winfn),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[Mac] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_SIRI, KC_F5, KC_F6, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, 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_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_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(Macfn),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[Winfn] = LAYOUT(
+ QK_BOOT, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, RGB_MOD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI,
+ KC_TRNS, KC_TRNS, TO(Win), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TO(Mac), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS,
+ KC_TRNS, GUI_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPD, RGB_VAD, RGB_SPI),
+
+[Macfn] = LAYOUT(
+ QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS, KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, RGB_MOD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI,
+ KC_TRNS, KC_TRNS, TO(Win), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TO(Mac), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPD, RGB_VAD, RGB_SPI),
+
+};
+
+#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_VOLD, KC_VOLU) },
+ [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
+};
+#endif
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ writePin(C0, layer_state_cmp(state, 1));
+ return state;
+};
diff --git a/keyboards/jukaie/jk01/keymaps/via/rules.mk b/keyboards/jukaie/jk01/keymaps/via/rules.mk
new file mode 100644
index 000000000000..f1adcab005e8
--- /dev/null
+++ b/keyboards/jukaie/jk01/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/jukaie/jk01/mcuconf.h b/keyboards/jukaie/jk01/mcuconf.h
new file mode 100644
index 000000000000..e4b8d1f97328
--- /dev/null
+++ b/keyboards/jukaie/jk01/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright (C) 2023 Westberry Technology (ChangZhou) Corp., Ltd
+ *
+ * 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_SPI_USE_SPIM2
+#define WB32_SPI_USE_SPIM2 TRUE
diff --git a/keyboards/jukaie/jk01/readme.md b/keyboards/jukaie/jk01/readme.md
new file mode 100644
index 000000000000..a9dbac18acd3
--- /dev/null
+++ b/keyboards/jukaie/jk01/readme.md
@@ -0,0 +1,23 @@
+# jk01
+
+An 83 keys keyboard, Equipped with the WestBerry Q95 microcontroller.
+
+* Keyboard Maintainer: [JUKAIE](https://github.com/jukaie)
+* Hardware Supported: JK01
+* Hardware Availability: [JUKAIE](https://github.com/jukaie/keyboard1)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jukaie/jk01:default
+
+Flashing example for this keyboard:
+
+ make jukaie/jk01:default:flash
+
+To reset the board into bootloader mode, do one of the following:
+
+* Hold the Reset switch mounted on the surface of the PCB back side after the USB cable is connected
+* Hold the Escape key while connecting the USB cable (also erases persistent settings)
+* Fn+ESC will reset the board to 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/jukaie/jk01/rules.mk b/keyboards/jukaie/jk01/rules.mk
new file mode 100644
index 000000000000..002458405eed
--- /dev/null
+++ b/keyboards/jukaie/jk01/rules.mk
@@ -0,0 +1 @@
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/kapcave/arya/info.json b/keyboards/kapcave/arya/info.json
index 34246609e53b..ebcb70015009 100644
--- a/keyboards/kapcave/arya/info.json
+++ b/keyboards/kapcave/arya/info.json
@@ -25,8 +25,85 @@
},
"processor": "STM32F072",
"bootloader": "stm32-dfu",
- "community_layouts": ["alice_split_bs"],
+ "community_layouts": ["alice", "alice_split_bs"],
"layouts": {
+ "LAYOUT_alice": {
+ "layout": [
+ {"matrix": [8, 1], "x": 0.4, "y": 0},
+ {"matrix": [3, 6], "x": 1.55, "y": 0.1},
+ {"matrix": [3, 7], "x": 2.55, "y": 0.1},
+ {"matrix": [4, 6], "x": 3.55, "y": 0},
+ {"matrix": [4, 7], "x": 4.55, "y": 0.1},
+ {"matrix": [5, 6], "x": 5.55, "y": 0.1},
+ {"matrix": [5, 7], "x": 6.55, "y": 0.1},
+ {"matrix": [6, 6], "x": 7.55, "y": 0.1},
+
+ {"matrix": [6, 7], "x": 9.75, "y": 0.1},
+ {"matrix": [7, 6], "x": 10.75, "y": 0.1},
+ {"matrix": [7, 7], "x": 11.75, "y": 0.1},
+ {"matrix": [0, 6], "x": 12.75, "y": 0.1},
+ {"matrix": [0, 7], "x": 13.75, "y": 0},
+ {"matrix": [1, 7], "x": 14.75, "y": 0.1},
+ {"matrix": [2, 7], "x": 15.75, "y": 0.1, "w": 2},
+
+ {"matrix": [8, 0], "x": 0.2, "y": 1},
+ {"matrix": [3, 4], "x": 1.35, "y": 1.1, "w": 1.5},
+ {"matrix": [3, 5], "x": 2.85, "y": 1.1},
+ {"matrix": [4, 4], "x": 3.85, "y": 1.1},
+ {"matrix": [4, 5], "x": 4.85, "y": 1.1},
+ {"matrix": [5, 4], "x": 5.85, "y": 1.1},
+ {"matrix": [5, 5], "x": 6.85, "y": 1.1},
+
+ {"matrix": [6, 4], "x": 9.45, "y": 1.1},
+ {"matrix": [6, 5], "x": 10.45, "y": 1.1},
+ {"matrix": [7, 5], "x": 11.45, "y": 1.1},
+ {"matrix": [0, 5], "x": 12.45, "y": 1.1},
+ {"matrix": [1, 5], "x": 13.45, "y": 1.1},
+ {"matrix": [1, 6], "x": 14.45, "y": 1.1},
+ {"matrix": [2, 5], "x": 15.45, "y": 1.1},
+ {"matrix": [2, 4], "x": 16.45, "y": 1.1, "w": 1.5},
+
+ {"matrix": [8, 2], "x": 0, "y": 2},
+ {"matrix": [3, 2], "x": 1.15, "y": 2.1, "w": 1.75},
+ {"matrix": [3, 3], "x": 2.9, "y": 2.1},
+ {"matrix": [4, 3], "x": 3.9, "y": 2.1},
+ {"matrix": [5, 2], "x": 4.9, "y": 2.1},
+ {"matrix": [5, 3], "x": 5.9, "y": 2.1},
+ {"matrix": [6, 3], "x": 6.9, "y": 2.1},
+
+ {"matrix": [7, 3], "x": 9.9, "y": 2.1},
+ {"matrix": [7, 4], "x": 10.9, "y": 2.1},
+ {"matrix": [0, 3], "x": 11.9, "y": 2.1},
+ {"matrix": [0, 4], "x": 12.9, "y": 2.1},
+ {"matrix": [1, 3], "x": 13.9, "y": 2.1},
+ {"matrix": [1, 4], "x": 14.9, "y": 2.1},
+ {"matrix": [2, 3], "x": 15.9, "y": 2.1, "w": 2.25},
+
+ {"matrix": [3, 1], "x": 0.95, "y": 3.1, "w": 2.25},
+ {"matrix": [4, 1], "x": 3.2, "y": 3.1},
+ {"matrix": [4, 2], "x": 4.2, "y": 3.1},
+ {"matrix": [5, 1], "x": 5.2, "y": 3.1},
+ {"matrix": [6, 1], "x": 6.2, "y": 3.1},
+ {"matrix": [6, 2], "x": 7.2, "y": 3.1},
+
+ {"matrix": [7, 1], "x": 9.6, "y": 3.1},
+ {"matrix": [7, 2], "x": 10.6, "y": 3.1},
+ {"matrix": [0, 1], "x": 11.6, "y": 3.1},
+ {"matrix": [0, 2], "x": 12.6, "y": 3.1},
+ {"matrix": [1, 1], "x": 13.6, "y": 3.1},
+ {"matrix": [1, 2], "x": 14.6, "y": 3.1},
+ {"matrix": [2, 1], "x": 15.6, "y": 3.1, "w": 1.75},
+ {"matrix": [2, 2], "x": 17.35, "y": 3.1},
+
+ {"matrix": [3, 0], "x": 0.95, "y": 4.1, "w": 1.5},
+ {"matrix": [4, 0], "x": 3.85, "y": 4.1, "w": 1.5},
+ {"matrix": [5, 0], "x": 5.35, "y": 4.1, "w": 2},
+ {"matrix": [6, 0], "x": 7.35, "y": 4.1, "w": 1.25},
+ {"matrix": [0, 0], "x": 9.6, "y": 4.1, "w": 2.75},
+ {"matrix": [1, 0], "x": 12.35, "y": 4.1, "w": 1.5},
+ {"matrix": [2, 0], "x": 16.65, "y": 4.1, "w": 1.5}
+ ]
+ },
"LAYOUT_alice_split_bs": {
"layout": [
{"matrix": [8, 1], "x": 0.4, "y": 0},
diff --git a/keyboards/kapcave/arya/matrix_diagram.md b/keyboards/kapcave/arya/matrix_diagram.md
new file mode 100644
index 000000000000..245cb9a079cf
--- /dev/null
+++ b/keyboards/kapcave/arya/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Kapcave Arya
+
+```
+ ┌───────┐
+ 2u Backspace │27 │
+ └───────┘
+ ┌───┐ ┌───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┐
+ │81 │ │36 │37 │46 │47 │56 │57 │66 │ │67 │76 │77 │06 │07 │17 │26 │27 │
+ ┌┴──┬┘ ┌┴───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┘ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┐
+ │80 │ │34 │35 │44 │45 │54 │55 │ │64 │65 │75 │05 │15 │16 │25 │24 │
+┌┴──┬┘ ┌┴─────┼───┼───┼───┼───┼───┤ └┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴──────┴┐
+│82 │ │32 │33 │43 │52 │53 │63 │ │73 │74 │03 │04 │13 │14 │23 │
+└───┘ ┌┴──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───────┬──┴┐
+ │31 │41 │42 │51 │61 │62 │ │71 │72 │01 │02 │11 │12 │21 │22 │
+ ├─────┬──┴──┬┴───┴┬──┴───┴┬──┴──┐ ├───┴───┴──┬┴───┴┬──┴───┴──────┬──┴──┬┘
+ │30 │ │40 │50 │60 │ │00 │10 │ │20 │
+ └─────┘ └─────┴───────┴─────┘ └──────────┴─────┘ └─────┘
+ ┌────────────┐
+ 2.75u RShift │21 │
+ └────────────┘
+ ┌─────────┬───┐
+ │50 │60 │ 2.25u-1u Left Space
+ └─────────┴───┘
+```
diff --git a/keyboards/keychron/v6/ansi_encoder/keymaps/via/rules.mk b/keyboards/keychron/v6/ansi_encoder/keymaps/via/rules.mk
index c09b2475769a..f1adcab005e8 100644
--- a/keyboards/keychron/v6/ansi_encoder/keymaps/via/rules.mk
+++ b/keyboards/keychron/v6/ansi_encoder/keymaps/via/rules.mk
@@ -1,2 +1,2 @@
VIA_ENABLE = yes
-EMCODER_MAP_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/kisakeyluxury/qtz/config.h b/keyboards/kisakeyluxury/qtz/config.h
new file mode 100644
index 000000000000..7660e3d7e98e
--- /dev/null
+++ b/keyboards/kisakeyluxury/qtz/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2023 kisakeyluxury
+
+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/kisakeyluxury/qtz/info.json b/keyboards/kisakeyluxury/qtz/info.json
new file mode 100644
index 000000000000..ba79fc31a22b
--- /dev/null
+++ b/keyboards/kisakeyluxury/qtz/info.json
@@ -0,0 +1,69 @@
+{
+ "keyboard_name": "fraserqaz",
+ "manufacturer": "iceage",
+ "maintainer": "kisakey-luxury",
+ "usb": {
+ "vid": "0xFEED",
+ "pid": "0x6060",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["D0", "D1", "D2", "D3", "F7", "F6", "F5", "F4", "F1", "F0"],
+ "rows": ["D5", "D4", "D6", "C6"]
+ },
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0, "w": 1.25},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [1, 5], "x": 5.25, "y": 1},
+ {"matrix": [1, 6], "x": 6.25, "y": 1},
+ {"matrix": [1, 7], "x": 7.25, "y": 1},
+ {"matrix": [1, 8], "x": 8.25, "y": 1},
+ {"matrix": [1, 9], "x": 9.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2, "w": 1.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 4], "x": 3, "y": 3},
+ {"matrix": [3, 5], "x": 4, "y": 3, "w": 2.25},
+ {"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},
+ ]
+ }
+ }
+}
diff --git a/keyboards/kisakeyluxury/qtz/keymaps/default/config.h b/keyboards/kisakeyluxury/qtz/keymaps/default/config.h
new file mode 100644
index 000000000000..7d03c4ddb8e5
--- /dev/null
+++ b/keyboards/kisakeyluxury/qtz/keymaps/default/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2023 kisakeyluxury
+
+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 COMBO_TERM 200
diff --git a/keyboards/kisakeyluxury/qtz/keymaps/default/keymap.c b/keyboards/kisakeyluxury/qtz/keymaps/default/keymap.c
new file mode 100644
index 000000000000..d5b0a8d2affb
--- /dev/null
+++ b/keyboards/kisakeyluxury/qtz/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+/*
+Copyright 2023 kisakeyluxury
+
+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{
+ _BASE
+};
+
+enum combo_events {
+ COMBO_ESC
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ 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_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,
+ KC_1, KC_2, KC_3, KC_4, KC_SPACE, KC_4, KC_3, KC_2, QK_BOOT
+ )
+};
+
+#ifdef COMBO_ENABLE
+const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, COMBO_END};
+
+combo_t key_combos[] = {
+ [COMBO_ESC] = COMBO(combo_esc,KC_ESC),
+};
+#endif
diff --git a/keyboards/kisakeyluxury/qtz/keymaps/default/rules.mk b/keyboards/kisakeyluxury/qtz/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ab1e438182a3
--- /dev/null
+++ b/keyboards/kisakeyluxury/qtz/keymaps/default/rules.mk
@@ -0,0 +1 @@
+COMBO_ENABLE = yes
diff --git a/keyboards/kisakeyluxury/qtz/readme.md b/keyboards/kisakeyluxury/qtz/readme.md
new file mode 100644
index 000000000000..813bf10a32d1
--- /dev/null
+++ b/keyboards/kisakeyluxury/qtz/readme.md
@@ -0,0 +1,24 @@
+# qtz
+
+35% keyboard designed by Iceage
+
+![pcb image](https://i.imgur.com/D2OmIkUh.png)
+
+* Keyboard Maintainer: [kisakey-luxury](https://github.com/kisakey-luxury)
+* Hardware Supported: *not released yet*
+* Hardware Availability: *not released yet*
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kisakeyluxury/qtz:default
+
+Flashing example for this keyboard:
+
+ make kisakeyluxury/qtz:default:flash
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset button**: Briefly press the button on the back of the PCB under the "Z" key
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available (default is bottom-right most key)
\ No newline at end of file
diff --git a/keyboards/kisakeyluxury/qtz/rules.mk b/keyboards/kisakeyluxury/qtz/rules.mk
new file mode 100644
index 000000000000..0d24fc285796
--- /dev/null
+++ b/keyboards/kisakeyluxury/qtz/rules.mk
@@ -0,0 +1 @@
+# intentionally left blank
\ No newline at end of file
diff --git a/keyboards/kprepublic/cstc40/config.h b/keyboards/kprepublic/cstc40/config.h
new file mode 100644
index 000000000000..c43098689529
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/config.h
@@ -0,0 +1,59 @@
+// Copyright 2022 Var (@itsvar8)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define I2C1_SDA_PIN B9
+#define I2C1_SCL_PIN B8
+#define DRIVER_ADDR_1 0b1010000
+#define DRIVER_COUNT 1
+#define RGB_MATRIX_LED_COUNT 47
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+
+#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 ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+#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_DISABLE_WHEN_USB_SUSPENDED
diff --git a/keyboards/kprepublic/cstc40/daughterboard/daughterboard.c b/keyboards/kprepublic/cstc40/daughterboard/daughterboard.c
new file mode 100644
index 000000000000..39d3d7ff5284
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/daughterboard/daughterboard.c
@@ -0,0 +1,71 @@
+/* Copyright 2022 bdtc123
+ *
+ * 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 is31_led g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+ { 0, L_1, K_1, J_1 },
+ { 0, L_2, K_2, J_2 },
+ { 0, L_3, K_3, J_3 },
+ { 0, L_4, K_4, J_4 },
+ { 0, L_5, K_5, J_5 },
+ { 0, L_6, K_6, J_6 },
+ { 0, L_7, K_7, J_7 },
+ { 0, L_8, K_8, J_8 },
+ { 0, L_9, K_9, J_9 },
+ { 0, L_10, K_10, J_10 },
+ { 0, L_11, K_11, J_11 },
+ { 0, L_12, K_12, J_12 },
+
+ { 0, I_1, H_1, G_1 },
+ { 0, I_2, H_2, G_2 },
+ { 0, I_3, H_3, G_3 },
+ { 0, I_4, H_4, G_4 },
+ { 0, I_5, H_5, G_5 },
+ { 0, I_6, H_6, G_6 },
+ { 0, I_7, H_7, G_7 },
+ { 0, I_8, H_8, G_8 },
+ { 0, I_9, H_9, G_9 },
+ { 0, I_10, H_10, G_10 },
+ { 0, I_11, H_11, G_11 },
+ { 0, I_12, H_12, G_12 },
+
+ { 0, F_1, E_1, D_1 },
+ { 0, F_2, E_2, D_2 },
+ { 0, F_3, E_3, D_3 },
+ { 0, F_4, E_4, D_4 },
+ { 0, F_5, E_5, D_5 },
+ { 0, F_6, E_6, D_6 },
+ { 0, F_7, E_7, D_7 },
+ { 0, F_8, E_8, D_8 },
+ { 0, F_9, E_9, D_9 },
+ { 0, F_10, E_10, D_10 },
+ { 0, F_11, E_11, D_11 },
+ { 0, F_12, E_12, D_12 },
+
+ { 0, C_1, B_1, A_1 },
+ { 0, C_2, B_2, A_2 },
+ { 0, C_3, B_3, A_3 },
+ { 0, C_4, B_4, A_4 },
+ { 0, C_5, B_5, A_5 },
+ { 0, C_6, B_6, A_6 },
+ { 0, C_8, B_8, A_8 },
+ { 0, C_9, B_9, A_9 },
+ { 0, C_10, B_10, A_10 },
+ { 0, C_11, B_11, A_11 },
+ { 0, C_12, B_12, A_12 }
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/kprepublic/cstc40/daughterboard/info.json b/keyboards/kprepublic/cstc40/daughterboard/info.json
new file mode 100644
index 000000000000..cdba7942df84
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/daughterboard/info.json
@@ -0,0 +1,6 @@
+{
+ "matrix_pins": {
+ "cols": ["B15", "B14", "B13", "B10", "B12", "A5", "C4", "A7", "A15", "C10", "C11", "C0"],
+ "rows": ["B1", "B0", "C5", "A6"]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kprepublic/cstc40/daughterboard/rules.mk b/keyboards/kprepublic/cstc40/daughterboard/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/daughterboard/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/kprepublic/cstc40/halconf.h b/keyboards/kprepublic/cstc40/halconf.h
new file mode 100644
index 000000000000..0f279040aae1
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/halconf.h
@@ -0,0 +1,20 @@
+/* Copyright 2020 Nick Brassel (tzarc)
+ *
+ * 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 .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
\ No newline at end of file
diff --git a/keyboards/kprepublic/cstc40/info.json b/keyboards/kprepublic/cstc40/info.json
new file mode 100644
index 000000000000..4ccd8389e882
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/info.json
@@ -0,0 +1,130 @@
+{
+ "manufacturer": "kprepublic",
+ "keyboard_name": "cstc40",
+ "maintainer": "itsvar8",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "ROW2COL",
+ "debounce": 2,
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "processor": "STM32F401",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0040",
+ "vid": "0x586A"
+ },
+ "layouts": {
+ "LAYOUT_planck_mit": {
+ "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": [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": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [2, 3], "x": 3, "y": 2 },
+ { "matrix": [2, 4], "x": 4, "y": 2 },
+ { "matrix": [2, 5], "x": 5, "y": 2 },
+ { "matrix": [2, 6], "x": 6, "y": 2 },
+ { "matrix": [2, 7], "x": 7, "y": 2 },
+ { "matrix": [2, 8], "x": 8, "y": 2 },
+ { "matrix": [2, 9], "x": 9, "y": 2 },
+ { "matrix": [2, 10], "x": 10, "y": 2 },
+ { "matrix": [2, 11], "x": 11, "y": 2 },
+ { "matrix": [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], "w": 2, "x": 5, "y": 3 },
+ { "matrix": [3, 7], "x": 7, "y": 3 },
+ { "matrix": [3, 8], "x": 8, "y": 3 },
+ { "matrix": [3, 9], "x": 9, "y": 3 },
+ { "matrix": [3, 10], "x": 10, "y": 3 },
+ { "matrix": [3, 11], "x": 11, "y": 3 }
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "is31fl3733",
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
+ {"matrix": [0, 1], "x": 20, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 40, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 61, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 81, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 101, "y": 0, "flags": 4},
+ {"matrix": [0, 6], "x": 122, "y": 0, "flags": 4},
+ {"matrix": [0, 7], "x": 142, "y": 0, "flags": 4},
+ {"matrix": [0, 8], "x": 162, "y": 0, "flags": 4},
+ {"matrix": [0, 9], "x": 183, "y": 0, "flags": 4},
+ {"matrix": [0, 10], "x": 203, "y": 0, "flags": 4},
+ {"matrix": [0, 11], "x": 224, "y": 0, "flags": 1},
+ {"matrix": [1, 0], "x": 0, "y": 21, "flags": 1},
+ {"matrix": [1, 1], "x": 20, "y": 21, "flags": 4},
+ {"matrix": [1, 2], "x": 40, "y": 21, "flags": 4},
+ {"matrix": [1, 3], "x": 61, "y": 21, "flags": 4},
+ {"matrix": [1, 4], "x": 81, "y": 21, "flags": 4},
+ {"matrix": [1, 5], "x": 101, "y": 21, "flags": 4},
+ {"matrix": [1, 6], "x": 122, "y": 21, "flags": 4},
+ {"matrix": [1, 7], "x": 142, "y": 21, "flags": 4},
+ {"matrix": [1, 8], "x": 162, "y": 21, "flags": 4},
+ {"matrix": [1, 9], "x": 183, "y": 21, "flags": 4},
+ {"matrix": [1, 10], "x": 203, "y": 21, "flags": 4},
+ {"matrix": [1, 11], "x": 224, "y": 21, "flags": 1},
+ {"matrix": [2, 0], "x": 0, "y": 42, "flags": 1},
+ {"matrix": [2, 1], "x": 20, "y": 42, "flags": 4},
+ {"matrix": [2, 2], "x": 40, "y": 42, "flags": 4},
+ {"matrix": [2, 3], "x": 61, "y": 42, "flags": 4},
+ {"matrix": [2, 4], "x": 81, "y": 42, "flags": 4},
+ {"matrix": [2, 5], "x": 101, "y": 42, "flags": 4},
+ {"matrix": [2, 6], "x": 122, "y": 42, "flags": 4},
+ {"matrix": [2, 7], "x": 142, "y": 42, "flags": 4},
+ {"matrix": [2, 8], "x": 162, "y": 42, "flags": 4},
+ {"matrix": [2, 9], "x": 183, "y": 42, "flags": 4},
+ {"matrix": [2, 10], "x": 203, "y": 42, "flags": 4},
+ {"matrix": [2, 11], "x": 224, "y": 42, "flags": 1},
+ {"matrix": [3, 0], "x": 0, "y": 64, "flags": 1},
+ {"matrix": [3, 1], "x": 20, "y": 64, "flags": 1},
+ {"matrix": [3, 2], "x": 40, "y": 64, "flags": 1},
+ {"matrix": [3, 3], "x": 61, "y": 64, "flags": 1},
+ {"matrix": [3, 4], "x": 81, "y": 64, "flags": 1},
+ {"matrix": [3, 5], "x": 111, "y": 64, "flags": 1},
+ {"matrix": [3, 7], "x": 142, "y": 64, "flags": 1},
+ {"matrix": [3, 8], "x": 162, "y": 64, "flags": 1},
+ {"matrix": [3, 9], "x": 183, "y": 64, "flags": 1},
+ {"matrix": [3, 10], "x": 203, "y": 64, "flags": 1},
+ {"matrix": [3, 11], "x": 224, "y": 64, "flags": 1}
+ ],
+ "max_brightness": 200
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kprepublic/cstc40/keymaps/default/keymap.c b/keyboards/kprepublic/cstc40/keymaps/default/keymap.c
new file mode 100644
index 000000000000..e47ff226a935
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/keymaps/default/keymap.c
@@ -0,0 +1,94 @@
+/* Copyright 2023
+ *
+ * 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] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | BLTog| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[0] = LAYOUT_planck_mit(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ RGB_TOG, KC_LCTL, KC_LALT, KC_LGUI, TL_LOWR, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[1] = LAYOUT_planck_mit(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, 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 |
+ * `-----------------------------------------------------------------------------------'
+ */
+[2] = LAYOUT_planck_mit(
+ 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)
+ * v------------------------RGB CONTROL--------------------v
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[3] = LAYOUT_planck_mit(
+ _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
diff --git a/keyboards/kprepublic/cstc40/keymaps/default/rules.mk b/keyboards/kprepublic/cstc40/keymaps/default/rules.mk
new file mode 100644
index 000000000000..7c9bf212a6f5
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/keymaps/default/rules.mk
@@ -0,0 +1 @@
+TRI_LAYER_ENABLE = yes
diff --git a/keyboards/kprepublic/cstc40/keymaps/via/keymap.c b/keyboards/kprepublic/cstc40/keymaps/via/keymap.c
new file mode 100644
index 000000000000..e47ff226a935
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/keymaps/via/keymap.c
@@ -0,0 +1,94 @@
+/* Copyright 2023
+ *
+ * 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] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | BLTog| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[0] = LAYOUT_planck_mit(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ RGB_TOG, KC_LCTL, KC_LALT, KC_LGUI, TL_LOWR, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[1] = LAYOUT_planck_mit(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, 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 |
+ * `-----------------------------------------------------------------------------------'
+ */
+[2] = LAYOUT_planck_mit(
+ 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)
+ * v------------------------RGB CONTROL--------------------v
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[3] = LAYOUT_planck_mit(
+ _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
diff --git a/keyboards/kprepublic/cstc40/keymaps/via/rules.mk b/keyboards/kprepublic/cstc40/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/kprepublic/cstc40/mcuconf.h b/keyboards/kprepublic/cstc40/mcuconf.h
new file mode 100644
index 000000000000..a56e52fb8dae
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/mcuconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2020 Nick Brassel (tzarc)
+ *
+ * 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 .
+ */
+#pragma once
+
+#include_next
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
\ No newline at end of file
diff --git a/keyboards/kprepublic/cstc40/readme.md b/keyboards/kprepublic/cstc40/readme.md
new file mode 100644
index 000000000000..211c078cc2ec
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/readme.md
@@ -0,0 +1,26 @@
+# cstc40
+
+A 40% hotswap ortholinear RGB keyboard from KP Republic.
+
+* Keyboard Maintainer: [Var](https://github.com/itsvar8)
+* Hardware Supported: CSTC40
+* Hardware Availability: kprepublic.com
+
+The differences between the two versions are just the rows and columns pins and the additional small pcb for the daughterboard version.
+
+Make example for this keyboard (after setting up your build environment):
+
+ for daughterboard version: make kprepublic/cstc40/daughterboard:default
+ for single pcb version: make kprepublic/cstc40/single_pcb: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 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
+
+The single_pcb uses pin A10, which apparently is a design flaw that prevent the bootloader to start every time - https://docs.qmk.fm/#/platformdev_blackpill_f4x1?id=pins-to-be-avoided. There is a simple workaround that works most of the time - press the pin key (generally the letter R) during the boot.
diff --git a/keyboards/kprepublic/cstc40/single_pcb/info.json b/keyboards/kprepublic/cstc40/single_pcb/info.json
new file mode 100644
index 000000000000..330ada7bac5b
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/single_pcb/info.json
@@ -0,0 +1,6 @@
+{
+ "matrix_pins": {
+ "cols": ["C7", "C8", "C9", "A8", "A10", "B10", "A15", "C13", "B6", "B5", "B4", "B3"],
+ "rows": ["C12", "C10", "C11", "B0"]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kprepublic/cstc40/single_pcb/rules.mk b/keyboards/kprepublic/cstc40/single_pcb/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/single_pcb/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/kprepublic/cstc40/single_pcb/single_pcb.c b/keyboards/kprepublic/cstc40/single_pcb/single_pcb.c
new file mode 100644
index 000000000000..39d3d7ff5284
--- /dev/null
+++ b/keyboards/kprepublic/cstc40/single_pcb/single_pcb.c
@@ -0,0 +1,71 @@
+/* Copyright 2022 bdtc123
+ *
+ * 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 is31_led g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+ { 0, L_1, K_1, J_1 },
+ { 0, L_2, K_2, J_2 },
+ { 0, L_3, K_3, J_3 },
+ { 0, L_4, K_4, J_4 },
+ { 0, L_5, K_5, J_5 },
+ { 0, L_6, K_6, J_6 },
+ { 0, L_7, K_7, J_7 },
+ { 0, L_8, K_8, J_8 },
+ { 0, L_9, K_9, J_9 },
+ { 0, L_10, K_10, J_10 },
+ { 0, L_11, K_11, J_11 },
+ { 0, L_12, K_12, J_12 },
+
+ { 0, I_1, H_1, G_1 },
+ { 0, I_2, H_2, G_2 },
+ { 0, I_3, H_3, G_3 },
+ { 0, I_4, H_4, G_4 },
+ { 0, I_5, H_5, G_5 },
+ { 0, I_6, H_6, G_6 },
+ { 0, I_7, H_7, G_7 },
+ { 0, I_8, H_8, G_8 },
+ { 0, I_9, H_9, G_9 },
+ { 0, I_10, H_10, G_10 },
+ { 0, I_11, H_11, G_11 },
+ { 0, I_12, H_12, G_12 },
+
+ { 0, F_1, E_1, D_1 },
+ { 0, F_2, E_2, D_2 },
+ { 0, F_3, E_3, D_3 },
+ { 0, F_4, E_4, D_4 },
+ { 0, F_5, E_5, D_5 },
+ { 0, F_6, E_6, D_6 },
+ { 0, F_7, E_7, D_7 },
+ { 0, F_8, E_8, D_8 },
+ { 0, F_9, E_9, D_9 },
+ { 0, F_10, E_10, D_10 },
+ { 0, F_11, E_11, D_11 },
+ { 0, F_12, E_12, D_12 },
+
+ { 0, C_1, B_1, A_1 },
+ { 0, C_2, B_2, A_2 },
+ { 0, C_3, B_3, A_3 },
+ { 0, C_4, B_4, A_4 },
+ { 0, C_5, B_5, A_5 },
+ { 0, C_6, B_6, A_6 },
+ { 0, C_8, B_8, A_8 },
+ { 0, C_9, B_9, A_9 },
+ { 0, C_10, B_10, A_10 },
+ { 0, C_11, B_11, A_11 },
+ { 0, C_12, B_12, A_12 }
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/lendunistus/rpneko65/rev1/config.h b/keyboards/lendunistus/rpneko65/rev1/config.h
new file mode 100644
index 000000000000..6786155fbf62
--- /dev/null
+++ b/keyboards/lendunistus/rpneko65/rev1/config.h
@@ -0,0 +1,6 @@
+// Copyright 2023 lendunistus
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define CAPS_LOCK_ENABLE true
diff --git a/keyboards/lendunistus/rpneko65/rev1/info.json b/keyboards/lendunistus/rpneko65/rev1/info.json
new file mode 100644
index 000000000000..29682cf2a779
--- /dev/null
+++ b/keyboards/lendunistus/rpneko65/rev1/info.json
@@ -0,0 +1,766 @@
+{
+ "manufacturer": "lendunistus",
+ "keyboard_name": "RPNeko65",
+ "maintainer": "lendunistus",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP15", "GP14", "GP13", "GP12", "GP11", "GP10", "GP9", "GP8", "GP6", "GP5", "GP4", "GP3", "GP2", "GP0", "GP1"],
+ "rows": ["GP28", "GP27", "GP26", "GP25", "GP24"]
+ },
+ "processor": "RP2040",
+ "rgblight": {
+ "led_count": 1
+ },
+ "url": "https://github.com/lendunistus/rpneko65",
+ "usb": {
+ "device_version": "1.0.0",
+ "force_nkro": true,
+ "pid": "0x0001",
+ "vid": "0x6C75"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP18"
+ },
+ "community_layouts": [
+ "65_ansi_blocker",
+ "65_ansi_blocker_split_bs",
+ "65_ansi_blocker_tsangan",
+ "65_ansi_blocker_tsangan_split_bs",
+ "65_iso_blocker",
+ "65_iso_blocker_split_bs",
+ "65_iso_blocker_tsangan",
+ "65_iso_blocker_tsangan_split_bs"
+ ],
+ "layouts": {
+ "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, 14], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 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, 13], "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, 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, 15], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "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, 15], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 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, 13], "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, 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, 15], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "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, 15], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_split_space": {
+ "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, 14], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 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, 13], "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, 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, 15], "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, 5], "x": 4, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4, "w": 2},
+ {"matrix": [4, 7], "x": 8.25, "y": 4, "w": 2.75},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"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": {
+ "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, 14], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 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, 13], "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, 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, 15], "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, 11], "x": 11, "y": 4, "w": 1.5},
+ {"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], "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, 13], "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, 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, 15], "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, 11], "x": 11, "y": 4, "w": 1.5},
+ {"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, 14], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 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": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 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, 13], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "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, 15], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 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": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 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, 13], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "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, 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, 14], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 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": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 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, 13], "x": 14, "y": 3},
+ {"matrix": [3, 15], "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, 11], "x": 11, "y": 4, "w": 1.5},
+ {"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_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 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": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 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, 13], "x": 14, "y": 3},
+ {"matrix": [3, 15], "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, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "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": [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, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"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, 13], "x": 14, "y": 3},
+ {"matrix": [3, 15], "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, 5], "x": 4, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4, "w": 2},
+ {"matrix": [4, 7], "x": 8.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 9], "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, 15], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/lendunistus/rpneko65/rev1/keymaps/default/keymap.c b/keyboards/lendunistus/rpneko65/rev1/keymaps/default/keymap.c
new file mode 100644
index 000000000000..5b52fa20387d
--- /dev/null
+++ b/keyboards/lendunistus/rpneko65/rev1/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 lendunistus
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Main layer
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_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_NUHS, 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_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ // Function layer
+ [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_SCRL, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/lendunistus/rpneko65/rev1/keymaps/via/keymap.c b/keyboards/lendunistus/rpneko65/rev1/keymaps/via/keymap.c
new file mode 100644
index 000000000000..5b52fa20387d
--- /dev/null
+++ b/keyboards/lendunistus/rpneko65/rev1/keymaps/via/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 lendunistus
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Main layer
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_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_NUHS, 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_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ // Function layer
+ [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_SCRL, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/lendunistus/rpneko65/rev1/keymaps/via/rules.mk b/keyboards/lendunistus/rpneko65/rev1/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/lendunistus/rpneko65/rev1/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/lendunistus/rpneko65/rev1/readme.md b/keyboards/lendunistus/rpneko65/rev1/readme.md
new file mode 100644
index 000000000000..d41fe19c8a4d
--- /dev/null
+++ b/keyboards/lendunistus/rpneko65/rev1/readme.md
@@ -0,0 +1,24 @@
+# rpneko65
+
+![rpneko65](https://i.imgur.com/QUIUSqJh.png)\
+*PCB rear side*
+
+A multi-layout PCB designed to fit the Bakeneko65 case by kkatano.
+
+* Keyboard Maintainer: [lendunistus](https://github.com/lendunistus)
+* Hardware Supported: RPNeko65 PCB; [Bakeneko65 V3 Case](https://github.com/kkatano/bakeneko-65)
+* Hardware Availability: [Open source on GitHub](https://github.com/lendunistus/rpneko65)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make lendunistus/rpneko65/rev1:default
+
+Flashing example for this keyboard:
+
+ make lendunistus/rpneko65/rev1: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
+
+Plug in the keyboard while holding down either the ESC key or the button on the back of the PCB labelled "USB Boot".
diff --git a/keyboards/lendunistus/rpneko65/rev1/rev1.c b/keyboards/lendunistus/rpneko65/rev1/rev1.c
new file mode 100644
index 000000000000..2cb9cf07f871
--- /dev/null
+++ b/keyboards/lendunistus/rpneko65/rev1/rev1.c
@@ -0,0 +1,34 @@
+/*
+Copyright 2022 Stefan Sundin "4pplet"
+
+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 (CAPS_LOCK_ENABLE && res) {
+ if(led_state.caps_lock) {
+ #ifdef CAPS_LOCK_COLOR
+ rgblight_sethsv_at(CAPS_LOCK_COLOR, 0);
+ #else
+ rgblight_sethsv_at(rgblight_get_hue(),rgblight_get_sat(),rgblight_get_val(), 0);
+ #endif
+ }
+ else{
+ rgblight_sethsv_at(HSV_BLACK, 0);
+ }
+ }
+ return res;
+}
diff --git a/keyboards/lendunistus/rpneko65/rev1/rules.mk b/keyboards/lendunistus/rpneko65/rev1/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/lendunistus/rpneko65/rev1/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/linworks/dolice/info.json b/keyboards/linworks/dolice/info.json
index 9b4af1230562..23fb708cf646 100644
--- a/keyboards/linworks/dolice/info.json
+++ b/keyboards/linworks/dolice/info.json
@@ -25,9 +25,10 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "layout_aliases": {
- "LAYOUT_all": "LAYOUT_alice_split_bs"
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_alice_split_bs"
},
+ "community_layouts": ["alice", "alice_split_bs"],
"layouts": {
"LAYOUT_alice": {
"layout": [
diff --git a/keyboards/linworks/dolice/matrix_diagram.md b/keyboards/linworks/dolice/matrix_diagram.md
new file mode 100644
index 000000000000..c89f8f82225e
--- /dev/null
+++ b/keyboards/linworks/dolice/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Linworks Dolice
+
+```
+ ┌───────┐
+ 2u Backspace │17 │
+ └───────┘
+ ┌───┐ ┌───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┐
+ │00 │ │10 │01 │11 │02 │12 │03 │13 │ │14 │05 │15 │06 │16 │07 │17 │57 │
+ ┌┴──┬┘ ┌┴───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┘ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┐
+ │20 │ │30 │21 │22 │32 │23 │33 │ │24 │34 │25 │35 │26 │36 │27 │37 │
+┌┴──┬┘ ┌┴─────┼───┼───┼───┼───┼───┤ └┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴──────┴┐
+│40 │ │50 │41 │42 │52 │43 │53 │ │44 │54 │45 │55 │46 │56 │47 │
+└───┘ ┌┴──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───────┬──┴┐
+ │70 │61 │62 │72 │63 │73 │ │64 │74 │65 │75 │66 │76 │67 │77 │
+ ├─────┬──┴──┬┴───┴┬──┴───┴┬──┴──┐ ├───┴───┴──┬┴───┴┬──┴───┴──────┬──┴──┬┘
+ │80 │ │81 │82 │83 │ │84 │85 │ │87 │
+ └─────┘ └─────┴───────┴─────┘ └──────────┴─────┘ └─────┘
+ ┌────────────┐
+ 2.75u RShift │67 │
+ └────────────┘
+ ┌─────────┬───┐
+ │82 │83 │ 2.25u-1u Left Space
+ └─────────┴───┘
+```
diff --git a/keyboards/miiiw/blackio83/blackio83.c b/keyboards/miiiw/blackio83/blackio83.c
new file mode 100644
index 000000000000..0d8412624e2d
--- /dev/null
+++ b/keyboards/miiiw/blackio83/blackio83.c
@@ -0,0 +1,189 @@
+/* Copyright 2023 ArthurCyy
+ *
+ * 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 "blackio83.h"
+#include "usb_main.h"
+#include "usb_util.h"
+
+#define LOOP_10HZ_PERIOD 100
+deferred_token loop10hz_token = INVALID_DEFERRED_TOKEN;
+uint32_t loop_10Hz(uint32_t trigger_time, void *cb_arg);
+
+static const SerialConfig mwproto_uart_config = {
+ .speed = MWPROTO_BITRATE,
+};
+
+static void POWER_EnterSleep(void) {
+ /* Clear Wake-up flag */
+ PWR->CR |= PWR_CR_CWUF | PWR_CR_CSBF;
+ /* Select Sleep mode */
+ /* PWR->CR |= PWR_CR_PDDS | PWR_CR_LPDS; */
+ /* Set SLEEPDEEP bit of Cortex System Control Register */
+ SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
+ /* Request Wait For Interrupt */
+ __WFI();
+ /* Reset SLEEPDEEP bit of Cortex System Control Register */
+ SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
+ NVIC_SystemReset();
+}
+
+extern void ws2812_poweron(void);
+extern void ws2812_poweroff(void);
+
+static bool p_setup = false;
+static bool s_init = false;
+void ws2812_poweron(void) {
+ if(p_setup) return;
+ p_setup = true;
+ s_init = false;
+ setPinOutput(RGB_EN_PIN);
+ writePinHigh(RGB_EN_PIN);
+}
+
+void ws2812_poweroff(void) {
+ if(!p_setup) return;
+ p_setup = false;
+ setPinInputLow(WS2812_DI_PIN);
+ writePinLow(RGB_EN_PIN);
+}
+
+void keyboard_pre_init_kb() {
+ keyboard_pre_init_user();
+
+ setPinInputLow(MWPROTO_STATUS_PIN);
+ setPinOutput(MWPROTO_WAKEUP_PIN);
+ writePinLow(MWPROTO_WAKEUP_PIN);
+ wait_ms(2);
+ writePinHigh(MWPROTO_WAKEUP_PIN);
+
+ palSetLineMode(MWPROTO_TX_PIN, PAL_MODE_ALTERNATE(MWPROTO_TX_PAL_MODE) | PAL_OUTPUT_TYPE_OPENDRAIN);
+ sdStart(&MWPROTO_DRIVER, &mwproto_uart_config);
+}
+
+void keyboard_post_init_kb(void) {
+ keyboard_post_init_user();
+
+ print(/* clang-format off */
+ "\n<--QMK Keyboard-->\n"
+ "Vendor: " STR(MANUFACTURER) "(" STR(VENDOR_ID) ")\n"
+ "Product: " STR(PRODUCT) " (" STR(PRODUCT_ID) ")\n"
+ "Version: " STR(DEVICE_VER) "\n"
+ "BUILD: " __DATE__ "\n"
+ ); /* clang-format on */
+
+ writePinLow(MWPROTO_WAKEUP_PIN);
+ wait_ms(50);
+ sdPutI(&MWPROTO_DRIVER, 0xA5);
+ sdPutI(&MWPROTO_DRIVER, 0x12);
+ sdPutI(&MWPROTO_DRIVER, 0x01);
+ sdPutI(&MWPROTO_DRIVER, 0x02);
+ sdPutI(&MWPROTO_DRIVER, 0xB4);
+ writePinHigh(MWPROTO_WAKEUP_PIN);
+
+ ws2812_poweron();
+ loop10hz_token = defer_exec(LOOP_10HZ_PERIOD, loop_10Hz, NULL);
+}
+
+__attribute__((weak)) void shutdown_user(void) {
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_set_suspend_state(true);
+#endif // RGB_MATRIX_ENABLE
+ wait_ms(10);
+ ws2812_poweroff();
+}
+
+#ifdef DIP_SWITCH_ENABLE
+bool dip_switch_update_mask_kb(uint32_t state) {
+ if (!dip_switch_update_mask_user(state)) { return false; }
+
+ if(state & 0x01) {
+ led_suspend();
+ usbDisconnectBus(&USB_DRIVER);
+ usbStop(&USB_DRIVER);
+ shutdown_user();
+ setPinInputHigh(POWER_SWITCH_PIN);
+ palEnableLineEvent(POWER_SWITCH_PIN, PAL_EVENT_MODE_RISING_EDGE);
+ POWER_EnterSleep();
+ }
+
+ return true;
+}
+#endif
+
+uint32_t loop_10Hz(uint32_t trigger_time, void *cb_arg) {
+
+ if(last_input_activity_elapsed() > 1000) {
+ static uint32_t pmu_timer = 0;
+ if(timer_elapsed32(pmu_timer) > 3000) {
+ pmu_timer = timer_read32();
+ writePinLow(MWPROTO_WAKEUP_PIN);
+ if(readPin(MWPROTO_STATUS_PIN))
+ wait_us(500);
+ else
+ wait_us(1500);
+ sdPutI(&MWPROTO_DRIVER, 0xA5);
+ sdPutI(&MWPROTO_DRIVER, 0x28);
+ sdPutI(&MWPROTO_DRIVER, 0x00);
+ sdPutI(&MWPROTO_DRIVER, 0x8D);
+ writePinHigh(MWPROTO_WAKEUP_PIN);
+ }
+ }
+
+ extern matrix_row_t matrix[MATRIX_ROWS];
+ static uint32_t restore_tick = 0;
+ if(matrix[0] == 0x4000 && matrix[1] == 0 &&
+ matrix[2] == 0 && matrix[3] == 0 && matrix[4] == 0 && matrix[5] == 0x201) {
+ if(restore_tick++ > 50) {
+ restore_tick = 0;
+ writePinLow(MWPROTO_WAKEUP_PIN);
+ if(readPin(MWPROTO_STATUS_PIN))
+ wait_us(500);
+ else
+ wait_us(1500);
+ sdPutI(&MWPROTO_DRIVER, 0xA5);
+ sdPutI(&MWPROTO_DRIVER, 0x1F);
+ sdPutI(&MWPROTO_DRIVER, 0x01);
+ sdPutI(&MWPROTO_DRIVER, 0x0F);
+ sdPutI(&MWPROTO_DRIVER, 0xB4);
+ writePinHigh(MWPROTO_WAKEUP_PIN);
+ wait_ms(50);
+ eeconfig_init();
+ #ifdef RGB_MATRIX_ENABLE
+ extern void rgb_matrix_update_pwm_buffers(void);
+ for(int i = 0; i < 5; i++) {
+ rgb_matrix_set_color_all(RGB_WHITE);
+ rgb_matrix_update_pwm_buffers();
+ wait_ms(500);
+ rgb_matrix_set_color_all(RGB_OFF);
+ rgb_matrix_update_pwm_buffers();
+ wait_ms(500);
+ }
+ #endif
+ wait_ms(500);
+ soft_reset_keyboard();
+ }
+ } else {
+ restore_tick = 0;
+ }
+
+ static uint32_t debug_tick = 0;
+ if (debug_tick++ > 9 ) {
+ dprintf("trigger %d\n", trigger_time);
+ debug_tick = 0;
+ }
+
+ return LOOP_10HZ_PERIOD;
+}
diff --git a/keyboards/miiiw/blackio83/blackio83.h b/keyboards/miiiw/blackio83/blackio83.h
new file mode 100644
index 000000000000..ea371443e30e
--- /dev/null
+++ b/keyboards/miiiw/blackio83/blackio83.h
@@ -0,0 +1,30 @@
+/* Copyright 2023 ArthurCyy
+ *
+ * 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 "quantum.h"
+
+#define XXX KC_NO
+
+enum custom_keycodes {
+ DEV_BT1 = QK_KB,
+ DEV_BT2,
+ DEV_BT3,
+ DEV_RF24,
+ ALT_TAB,
+ RGB_RST,
+};
\ No newline at end of file
diff --git a/keyboards/miiiw/blackio83/config.h b/keyboards/miiiw/blackio83/config.h
new file mode 100644
index 000000000000..73c98722e9d4
--- /dev/null
+++ b/keyboards/miiiw/blackio83/config.h
@@ -0,0 +1,56 @@
+/* Copyright 2023 ArthurCyy
+ *
+ * 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
+
+// EEPROM i2c chip
+#define EEPROM_I2C_24LC256
+
+/* Disable the animations you don't want/need. You will need to disable a good number of these *
+ * because they take up a lot of space. Disable until you can successfully compile your firmware. */
+// 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_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR
diff --git a/keyboards/miiiw/blackio83/halconf.h b/keyboards/miiiw/blackio83/halconf.h
new file mode 100644
index 000000000000..037108a3923b
--- /dev/null
+++ b/keyboards/miiiw/blackio83/halconf.h
@@ -0,0 +1,32 @@
+/* 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 .
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/geekboards/macropad_v2/halconf.h -r platforms/chibios/common/configs/halconf.h`
+ */
+
+#pragma once
+
+#define HAL_USE_SERIAL TRUE
+
+#define HAL_USE_I2C TRUE
+
+// This enables interrupt-driven mode
+#define PAL_USE_WAIT TRUE
+#define USB_USE_WAIT TRUE
+
+#include_next
diff --git a/keyboards/miiiw/blackio83/info.json b/keyboards/miiiw/blackio83/info.json
new file mode 100644
index 000000000000..40fc6b7d8937
--- /dev/null
+++ b/keyboards/miiiw/blackio83/info.json
@@ -0,0 +1,216 @@
+{
+ "manufacturer": "MIIIW",
+ "keyboard_name": "MIIIW BlackIO 83",
+ "maintainer": "ArthurCyy",
+ "bootloader": "stm32-dfu",
+ "debounce": 3,
+ "diode_direction": "COL2ROW",
+ "features": {
+ "backlight": false,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "deferred_exec": true,
+ "dip_switch": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true,
+ "rgblight": false
+ },
+ "indicators": {
+ "caps_lock": "B2",
+ "num_lock": "B14"
+ },
+ "matrix_pins": {
+ "cols": ["H0", "H1", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "H10", "H11", "H12", "H13", "H14", "H15"],
+ "rows": ["A7", "A6", "A5", "A4", "A3", "A2"]
+ },
+ "processor": "STM32F072",
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 10, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 18, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 26, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 34, "y": 0, "flags": 4},
+ {"matrix": [0, 6], "x": 44, "y": 0, "flags": 4},
+ {"matrix": [0, 7], "x": 52, "y": 0, "flags": 4},
+ {"matrix": [0, 8], "x": 60, "y": 0, "flags": 4},
+ {"matrix": [0, 9], "x": 68, "y": 0, "flags": 4},
+ {"matrix": [0, 10], "x": 78, "y": 0, "flags": 4},
+ {"matrix": [0, 11], "x": 86, "y": 0, "flags": 4},
+ {"matrix": [0, 12], "x": 94, "y": 0, "flags": 4},
+ {"matrix": [0, 13], "x": 102, "y": 0, "flags": 4},
+ {"matrix": [0, 14], "x": 112, "y": 0, "flags": 4},
+ {"matrix": [0, 15], "x": 124, "y": 0, "flags": 4},
+ {"matrix": [1, 0], "x": 124, "y": 20, "flags": 4},
+ {"matrix": [1, 1], "x": 108, "y": 20, "flags": 4},
+ {"matrix": [1, 2], "x": 96, "y": 20, "flags": 4},
+ {"matrix": [1, 3], "x": 88, "y": 20, "flags": 4},
+ {"matrix": [1, 4], "x": 80, "y": 20, "flags": 4},
+ {"matrix": [1, 5], "x": 72, "y": 20, "flags": 4},
+ {"matrix": [1, 6], "x": 64, "y": 20, "flags": 4},
+ {"matrix": [1, 7], "x": 56, "y": 20, "flags": 4},
+ {"matrix": [1, 8], "x": 48, "y": 20, "flags": 4},
+ {"matrix": [1, 9], "x": 40, "y": 20, "flags": 4},
+ {"matrix": [1, 10], "x": 32, "y": 20, "flags": 4},
+ {"matrix": [1, 11], "x": 24, "y": 20, "flags": 4},
+ {"matrix": [1, 12], "x": 16, "y": 20, "flags": 4},
+ {"matrix": [1, 13], "x": 8, "y": 20, "flags": 4},
+ {"matrix": [1, 15], "x": 0, "y": 20, "flags": 4},
+ {"matrix": [2, 0], "x": 2, "y": 36, "flags": 4},
+ {"matrix": [2, 1], "x": 12, "y": 36, "flags": 4},
+ {"matrix": [2, 2], "x": 20, "y": 36, "flags": 4},
+ {"matrix": [2, 3], "x": 28, "y": 36, "flags": 4},
+ {"matrix": [2, 4], "x": 36, "y": 36, "flags": 4},
+ {"matrix": [2, 5], "x": 44, "y": 36, "flags": 4},
+ {"matrix": [2, 6], "x": 52, "y": 36, "flags": 4},
+ {"matrix": [2, 7], "x": 60, "y": 36, "flags": 4},
+ {"matrix": [2, 8], "x": 68, "y": 36, "flags": 4},
+ {"matrix": [2, 9], "x": 76, "y": 36, "flags": 4},
+ {"matrix": [2, 10], "x": 84, "y": 36, "flags": 4},
+ {"matrix": [2, 11], "x": 92, "y": 36, "flags": 4},
+ {"matrix": [2, 12], "x": 100, "y": 36, "flags": 4},
+ {"matrix": [2, 13], "x": 110, "y": 36, "flags": 4},
+ {"matrix": [2, 15], "x": 124, "y": 36, "flags": 4},
+ {"matrix": [3, 0], "x": 124, "y": 52, "flags": 4},
+ {"matrix": [3, 1], "x": 107, "y": 52, "flags": 4},
+ {"matrix": [3, 2], "x": 94, "y": 52, "flags": 4},
+ {"matrix": [3, 3], "x": 86, "y": 52, "flags": 4},
+ {"matrix": [3, 4], "x": 78, "y": 52, "flags": 4},
+ {"matrix": [3, 5], "x": 70, "y": 52, "flags": 4},
+ {"matrix": [3, 6], "x": 62, "y": 52, "flags": 4},
+ {"matrix": [3, 7], "x": 54, "y": 52, "flags": 4},
+ {"matrix": [3, 8], "x": 46, "y": 52, "flags": 4},
+ {"matrix": [3, 9], "x": 38, "y": 52, "flags": 4},
+ {"matrix": [3, 10], "x": 30, "y": 52, "flags": 4},
+ {"matrix": [3, 11], "x": 22, "y": 52, "flags": 4},
+ {"matrix": [3, 12], "x": 14, "y": 52, "flags": 4},
+ {"matrix": [3, 15], "x": 3, "y": 52, "flags": 4},
+ {"matrix": [4, 0], "x": 5, "y": 68, "flags": 4},
+ {"matrix": [4, 1], "x": 18, "y": 68, "flags": 4},
+ {"matrix": [4, 2], "x": 26, "y": 68, "flags": 4},
+ {"matrix": [4, 3], "x": 34, "y": 68, "flags": 4},
+ {"matrix": [4, 4], "x": 42, "y": 68, "flags": 4},
+ {"matrix": [4, 5], "x": 50, "y": 68, "flags": 4},
+ {"matrix": [4, 6], "x": 58, "y": 68, "flags": 4},
+ {"matrix": [4, 7], "x": 66, "y": 68, "flags": 4},
+ {"matrix": [4, 8], "x": 74, "y": 68, "flags": 4},
+ {"matrix": [4, 9], "x": 82, "y": 68, "flags": 4},
+ {"matrix": [4, 10], "x": 90, "y": 68, "flags": 4},
+ {"matrix": [4, 11], "x": 104, "y": 68, "flags": 4},
+ {"matrix": [4, 13], "x": 114, "y": 68, "flags": 4},
+ {"matrix": [4, 15], "x": 124, "y": 68, "flags": 4},
+ {"matrix": [5, 0], "x": 122, "y": 84, "flags": 4},
+ {"matrix": [5, 1], "x": 114, "y": 84, "flags": 4},
+ {"matrix": [5, 2], "x": 106, "y": 84, "flags": 4},
+ {"matrix": [5, 5], "x": 96, "y": 84, "flags": 4},
+ {"matrix": [5, 8], "x": 88, "y": 84, "flags": 4},
+ {"matrix": [5, 9], "x": 80, "y": 84, "flags": 4},
+ {"matrix": [5, 10], "x": 50, "y": 84, "flags": 4},
+ {"matrix": [5, 12], "x": 20, "y": 88, "flags": 4},
+ {"matrix": [5, 13], "x": 10, "y": 88, "flags": 4},
+ {"matrix": [5, 14], "x": 1, "y": 88, "flags": 4}
+ ]
+ },
+ "url": "https://github.com/ArthurCyy",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x83A1",
+ "vid": "0x3044"
+ },
+ "ws2812": {
+ "pin": "B15"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.25, "y": 0},
+ {"matrix": [0, 3], "x": 2.25, "y": 0},
+ {"matrix": [0, 4], "x": 3.25, "y": 0},
+ {"matrix": [0, 5], "x": 4.25, "y": 0},
+ {"matrix": [0, 6], "x": 5.5, "y": 0},
+ {"matrix": [0, 7], "x": 6.5, "y": 0},
+ {"matrix": [0, 8], "x": 7.5, "y": 0},
+ {"matrix": [0, 9], "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, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15.25, "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, 15], "x": 15.25, "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, 15], "x": 15.25, "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, "w": 2.25},
+ {"matrix": [3, 15], "x": 15.25, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [4, 1], "x": 2.25, "y": 4},
+ {"matrix": [4, 2], "x": 3.25, "y": 4},
+ {"matrix": [4, 3], "x": 4.25, "y": 4},
+ {"matrix": [4, 4], "x": 5.25, "y": 4},
+ {"matrix": [4, 5], "x": 6.25, "y": 4},
+ {"matrix": [4, 6], "x": 7.25, "y": 4},
+ {"matrix": [4, 7], "x": 8.25, "y": 4},
+ {"matrix": [4, 8], "x": 9.25, "y": 4},
+ {"matrix": [4, 9], "x": 10.25, "y": 4},
+ {"matrix": [4, 10], "x": 11.25, "y": 4},
+ {"matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 13], "x": 14.25, "y": 4.5},
+ {"matrix": [4, 15], "x": 15.25, "y": 4.25},
+ {"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": 10, "y": 5},
+ {"matrix": [5, 9], "x": 11, "y": 5},
+ {"matrix": [5, 10], "x": 12, "y": 5},
+ {"matrix": [5, 12], "x": 13.25, "y": 5.5},
+ {"matrix": [5, 13], "x": 14.25, "y": 5.5},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.5}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/miiiw/blackio83/keymaps/default/keymap.c b/keyboards/miiiw/blackio83/keymaps/default/keymap.c
new file mode 100644
index 000000000000..dc906f7e2c85
--- /dev/null
+++ b/keyboards/miiiw/blackio83/keymaps/default/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright 2023 ArthurCyy
+ *
+ * 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
+
+// Defines names for use in layer keycodes and the keymap
+enum keymap_layers {
+ WIN_BL,
+ WIN_FL,
+ MAC_BL,
+ MAC_FL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap WIN_BL: Win Base Layer (Default Layer)
+ */
+ [WIN_BL] = 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_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_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(WIN_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap WIN_FL: Win Function Layer
+ */
+ [WIN_FL] = LAYOUT(
+ RGB_RST, KC_BRID, KC_BRIU, ALT_TAB, G(KC_D), KC_WBAK, KC_WSCH, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD
+ ),
+
+ /* Keymap MAC_BL: Mac Base Layer
+ */
+ [MAC_BL] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU,C(KC_UP),C(KC_DOWN),KC_F11,G(KC_SPC),KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, 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_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_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FL), KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap MAC_FL: Mac Function Layer
+ */
+ [MAC_FL] = LAYOUT(
+ RGB_RST, 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, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD
+ ),
+};
diff --git a/keyboards/miiiw/blackio83/keymaps/via/keymap.c b/keyboards/miiiw/blackio83/keymaps/via/keymap.c
new file mode 100644
index 000000000000..dc906f7e2c85
--- /dev/null
+++ b/keyboards/miiiw/blackio83/keymaps/via/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright 2023 ArthurCyy
+ *
+ * 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
+
+// Defines names for use in layer keycodes and the keymap
+enum keymap_layers {
+ WIN_BL,
+ WIN_FL,
+ MAC_BL,
+ MAC_FL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap WIN_BL: Win Base Layer (Default Layer)
+ */
+ [WIN_BL] = 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_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_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(WIN_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap WIN_FL: Win Function Layer
+ */
+ [WIN_FL] = LAYOUT(
+ RGB_RST, KC_BRID, KC_BRIU, ALT_TAB, G(KC_D), KC_WBAK, KC_WSCH, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD
+ ),
+
+ /* Keymap MAC_BL: Mac Base Layer
+ */
+ [MAC_BL] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU,C(KC_UP),C(KC_DOWN),KC_F11,G(KC_SPC),KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, 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_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_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FL), KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap MAC_FL: Mac Function Layer
+ */
+ [MAC_FL] = LAYOUT(
+ RGB_RST, 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, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD
+ ),
+};
diff --git a/keyboards/miiiw/blackio83/keymaps/via/rules.mk b/keyboards/miiiw/blackio83/keymaps/via/rules.mk
new file mode 100644
index 000000000000..36b7ba9cbc98
--- /dev/null
+++ b/keyboards/miiiw/blackio83/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/miiiw/blackio83/matrix.c b/keyboards/miiiw/blackio83/matrix.c
new file mode 100644
index 000000000000..841ff3c16e69
--- /dev/null
+++ b/keyboards/miiiw/blackio83/matrix.c
@@ -0,0 +1,139 @@
+/* Copyright 2023 ArthurCyy
+ *
+ * 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 "matrix.h"
+#include "common/shift_register.h"
+
+static uint8_t read_rows(void);
+static void init_cols(void);
+static void select_col(uint8_t col);
+static void unselect_col(uint8_t col);
+static void unselect_cols(void);
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+#ifdef DIP_SWITCH_PINS
+# define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(pin_t))
+static pin_t dip_switch_pad[] = DIP_SWITCH_PINS;
+#endif
+
+void matrix_init_custom(void) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ setPinInputLow(row_pins[row]);
+ }
+
+ shift_init();
+ init_cols();
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool changed = false;
+
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ select_col(col);
+ waitInputPinDelay();
+ uint8_t rows = read_rows();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ bool prev_bit = ((uint32_t)(current_matrix[row]) & (matrix_row_t)(1UL << col)) ? 1 : 0;
+ bool curr_bit = ((uint32_t)rows & (uint32_t)(1UL << row)) ? 1 : 0;
+ if (prev_bit != curr_bit) {
+ current_matrix[row] = (uint32_t)(current_matrix[row]) ^ (uint32_t)(1UL << col);
+ changed = true;
+ }
+ }
+ unselect_col(col);
+ }
+
+ return changed;
+}
+
+void matrix_power_up(void) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ palDisableLineEvent(row_pins[row]);
+ setPinInputLow(row_pins[row]);
+ }
+ init_cols();
+#ifdef DIP_SWITCH_PINS
+ for (uint8_t i = 1; i < NUMBER_OF_DIP_SWITCHES; i++) {
+ setPinInputHigh(dip_switch_pad[i]);
+ }
+#endif
+}
+
+void matrix_power_down(void) {
+ unselect_cols();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ setPinInputLow(row_pins[row]);
+ palEnableLineEvent(row_pins[row], PAL_EVENT_MODE_RISING_EDGE);
+ }
+#ifdef DIP_SWITCH_PINS
+ for (uint8_t i = 1; i < NUMBER_OF_DIP_SWITCHES; i++) {
+ setPinInputLow(dip_switch_pad[i]);
+ }
+#endif
+}
+
+static uint8_t read_rows(void) {
+ uint8_t row_value = 0;
+ for(uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ row_value |= (readPin(row_pins[row]) << row);
+ }
+ return row_value;
+}
+
+static void init_cols(void) {
+ shift_writeAll(0);
+ for(uint8_t col = 0; col < MATRIX_COLS; col++) {
+ if(col_pins[col] < H0) {
+ setPinOutput(col_pins[col]);
+ writePinLow(col_pins[col]);
+ }
+ }
+}
+
+static void select_col(uint8_t col) {
+ if(col_pins[col] < H0){
+ writePinHigh(col_pins[col]);
+ waitInputPinDelay();
+ waitInputPinDelay();
+ waitInputPinDelay();
+ waitInputPinDelay();
+ waitInputPinDelay();
+ waitInputPinDelay();
+ }else{
+ shift_writePin(col_pins[col], 1);
+ }
+}
+
+static void unselect_col(uint8_t col) {
+ if(col_pins[col] < H0){
+ writePinLow(col_pins[col]);
+ }else{
+ shift_writePin(col_pins[col], 0);
+ }
+}
+
+static void unselect_cols(void) {
+ shift_writeAll(1);
+ for(uint8_t col = 0; col < MATRIX_COLS; col++) {
+ if(col_pins[col] < H0) {
+ setPinOutput(col_pins[col]);
+ writePinHigh(col_pins[col]);
+ }
+ }
+}
diff --git a/keyboards/miiiw/blackio83/mcuconf.h b/keyboards/miiiw/blackio83/mcuconf.h
new file mode 100644
index 000000000000..89038eba8251
--- /dev/null
+++ b/keyboards/miiiw/blackio83/mcuconf.h
@@ -0,0 +1,33 @@
+/* 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 .
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/geekboards/macropad_v2/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h`
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_SERIAL_USE_USART1
+#define STM32_SERIAL_USE_USART1 TRUE
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
+
+#undef STM32_I2C_USE_DMA
+#define STM32_I2C_USE_DMA FALSE
diff --git a/keyboards/miiiw/blackio83/readme.md b/keyboards/miiiw/blackio83/readme.md
new file mode 100644
index 000000000000..ecb42fac261b
--- /dev/null
+++ b/keyboards/miiiw/blackio83/readme.md
@@ -0,0 +1,30 @@
+# MIIIW BlackIO83
+
+![BlackIO83](https://i.imgur.com/jZ7HrTCh.jpg)
+![BlackIO83](https://i.imgur.com/AnlUIfph.jpg)
+
+A customizable 75% keyboard.
+
+* Keyboard Maintainer: [ArthurCyy](https://github.com/ArthurCyy)
+* Hardware Supported: BlackIO83 rev_0100
+* Hardware Availability: [MIIIW](https://www.miiiw.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make miiiw/blackio83/rev_0100:default
+
+Flashing example for this keyboard:
+
+ make miiiw/blackio83/rev_0100: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**: With the power switch off, hold down the key at (0,0) in the matrix (Escape) and plug in the keyboard.
+* **Physical button**: With the power switch off, hold the small metal button on the right side under the spacebar keycap and plug in the keyboard.
+* **Keycode in layout**:
+ * (Official firmware only) With the power switch on, press and hold the left Shift+ Fn+ upper right DEL.
+ * (Unofficial firmware) With the power switch on, press the key mapped to `QK_BOOT` if it is available.
diff --git a/keyboards/miiiw/blackio83/rev_0100/config.h b/keyboards/miiiw/blackio83/rev_0100/config.h
new file mode 100644
index 000000000000..803c8a8a3b2d
--- /dev/null
+++ b/keyboards/miiiw/blackio83/rev_0100/config.h
@@ -0,0 +1,70 @@
+/* Copyright 2023 ArthurCyy
+ *
+ * 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
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+
+/* Dip Switch */
+#define POWER_SWITCH_PIN B0
+#define DIP_SWITCH_PINS { B0, B1, B8, B12 }
+
+/* 16 with dummy columns for shift registers */
+#define SHR_SERIES_NUM 2
+#define SHR_CLOCK_PIN A0
+#define SHR_DATA_PIN A1
+#define SHR_LATCH_PIN C15
+
+/* MIIIW Protocol Driver */
+#define MWPROTO_BITRATE 256000
+#define MWPROTO_DRIVER SD1
+#define MWPROTO_TX_PIN A9
+#define MWPROTO_TX_PAL_MODE 1
+#define MWPROTO_RX_PIN A10
+#define MWPROTO_RX_PAL_MODE 1
+#define MWPROTO_WAKEUP_PIN A15
+#define MWPROTO_STATUS_PIN C13
+
+/* RGB Matrix config */
+#define RGB_EN_PIN A8
+#define RGBLED_NUM 83
+#define RGB_MATRIX_LED_COUNT 83
+#define RGB_MATRIX_CENTER { 62, 42 }
+
+// PWM RGB Underglow Defines
+#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_GRB
+#define WS2812_TRST_US 200
+
+// I2C config
+#define I2C_DRIVER I2CD1
+#define I2C1_SCL_PIN B6
+#define I2C1_SDA_PIN B7
+#define I2C1_SCL_PAL_MODE 1
+#define I2C1_SDA_PAL_MODE 1
+#define I2C1_TIMINGR_PRESC 0x00U
+#define I2C1_TIMINGR_SCLDEL 0x03U
+#define I2C1_TIMINGR_SDADEL 0x01U
+#define I2C1_TIMINGR_SCLH 0x03U
+#define I2C1_TIMINGR_SCLL 0x09U
diff --git a/keyboards/miiiw/blackio83/rev_0100/rev_0100.c b/keyboards/miiiw/blackio83/rev_0100/rev_0100.c
new file mode 100644
index 000000000000..b28ac84acb41
--- /dev/null
+++ b/keyboards/miiiw/blackio83/rev_0100/rev_0100.c
@@ -0,0 +1,17 @@
+/* Copyright 2023 ArthurCyy
+ *
+ * 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 "blackio83.h"
diff --git a/keyboards/miiiw/blackio83/rev_0100/rules.mk b/keyboards/miiiw/blackio83/rev_0100/rules.mk
new file mode 100644
index 000000000000..5558efa95d72
--- /dev/null
+++ b/keyboards/miiiw/blackio83/rev_0100/rules.mk
@@ -0,0 +1,7 @@
+CUSTOM_MATRIX = lite
+
+WS2812_DRIVER_REQUIRED := yes
+
+# Project specific files
+SRC += matrix.c \
+ common/shift_register.c
diff --git a/keyboards/miiiw/common/shift_register.c b/keyboards/miiiw/common/shift_register.c
new file mode 100644
index 000000000000..1f21c1246836
--- /dev/null
+++ b/keyboards/miiiw/common/shift_register.c
@@ -0,0 +1,90 @@
+/* Copyright 2023 ArthurCyy
+ *
+ * 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 "shift_register.h"
+
+static void shift_out(void);
+
+static uint8_t shift_values[SHR_SERIES_NUM] = {0};
+
+void shift_init(void) {
+#ifdef SHR_OE_PIN
+ setPinOutput(SHR_OE_PIN);
+ writePinHigh(SHR_OE_PIN);
+#endif
+ setPinOutput(SHR_DATA_PIN);
+ setPinOutput(SHR_LATCH_PIN);
+ setPinOutput(SHR_CLOCK_PIN);
+}
+
+void shift_enable(void) {
+#ifdef SHR_OE_PIN
+ writePinLow(SHR_OE_PIN);
+#endif
+ writePinLow(SHR_DATA_PIN);
+ writePinLow(SHR_LATCH_PIN);
+ writePinLow(SHR_CLOCK_PIN);
+}
+
+void shift_disable(void) {
+#ifdef SHR_OE_PIN
+ writePinHigh(SHR_OE_PIN);
+#endif
+ writePinLow(SHR_DATA_PIN);
+ writePinLow(SHR_LATCH_PIN);
+ writePinLow(SHR_CLOCK_PIN);
+}
+
+void shift_writePin(pin_t pin, int level) {
+ uint8_t group = (pin - H0) >> 3;
+ uint8_t bit = 0x01 << ((pin - H0)&0x07);
+
+ if(group >= SHR_SERIES_NUM)
+ return;
+
+ if(level)
+ shift_values[group] |= bit;
+ else
+ shift_values[group] &= ~bit;
+ shift_out();
+}
+
+void shift_writeGroup(int group, uint8_t value) {
+ if(group >= SHR_SERIES_NUM)
+ return;
+
+ shift_values[group] = value;
+ shift_out();
+}
+
+void shift_writeAll(int level) {
+ memset(shift_values, level ? 0xFF : 0, sizeof(shift_values));
+ shift_out();
+}
+
+static void shift_out(void) {
+ uint8_t n = SHR_SERIES_NUM;
+ writePinLow(SHR_LATCH_PIN);
+ while(n--){
+ for (uint8_t i = 0; i < 8; i++) {
+ writePinLow(SHR_CLOCK_PIN);
+ writePin(SHR_DATA_PIN, shift_values[n] & (0x80 >> i));
+ writePinHigh(SHR_CLOCK_PIN);
+ }
+ }
+ writePinHigh(SHR_LATCH_PIN);
+}
diff --git a/keyboards/miiiw/common/shift_register.h b/keyboards/miiiw/common/shift_register.h
new file mode 100644
index 000000000000..f9895e63f827
--- /dev/null
+++ b/keyboards/miiiw/common/shift_register.h
@@ -0,0 +1,34 @@
+/* Copyright 2023 ArthurCyy
+ *
+ * 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 "gpio.h"
+
+#ifndef GPIOH_BASE
+# define GPIOH_BASE (0xFF595A00U)
+#endif
+
+#ifndef SHR_SERIES_NUM
+# define SHR_SERIES_NUM 1
+#endif
+
+extern void shift_init(void);
+extern void shift_enable(void);
+extern void shift_disable(void);
+extern void shift_writePin(pin_t pin, int level);
+extern void shift_writeGroup(int group, uint8_t value);
+extern void shift_writeAll(int level);
diff --git a/keyboards/monsgeek/m3/config.h b/keyboards/monsgeek/m3/config.h
new file mode 100644
index 000000000000..85eb5b8e99e7
--- /dev/null
+++ b/keyboards/monsgeek/m3/config.h
@@ -0,0 +1,50 @@
+/* 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
+
+/* LED Indicators */
+#define LED_MAC_OS_PIN C10
+#define LED_WIN_LOCK_PIN C11
+
+/* 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 RGB_MATRIX_LED_COUNT 87
+
+#define RGB_TRIGGER_ON_KEYDOWN
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/monsgeek/m3/halconf.h b/keyboards/monsgeek/m3/halconf.h
new file mode 100644
index 000000000000..55bfe5c97794
--- /dev/null
+++ b/keyboards/monsgeek/m3/halconf.h
@@ -0,0 +1,23 @@
+/* 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
+
+#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/m3/info.json b/keyboards/monsgeek/m3/info.json
new file mode 100644
index 000000000000..db646103f12c
--- /dev/null
+++ b/keyboards/monsgeek/m3/info.json
@@ -0,0 +1,249 @@
+{
+ "keyboard_name": "M3",
+ "manufacturer": "MonsGeek",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "vid": "0xFFFE",
+ "pid": "0x0009",
+ "device_version": "1.0.5",
+ "suspend_wakeup_delay": 400,
+ "force_nkro": true
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "dynamic_keymap": {
+ "layer_count": 6
+ },
+ "matrix_pins": {
+ "cols": ["C1", "C2", "C3", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B2", "B10"],
+ "rows": ["B15", "C6", "C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "indicators": {
+ "caps_lock": "A15"
+ },
+ "rgb_matrix": {
+ "driver": "ckled2001",
+ "max_brightness": 160,
+ "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": 24, "y": 0},
+ { "flags": 4, "matrix": [0, 2], "x": 38, "y": 0},
+ { "flags": 4, "matrix": [0, 3], "x": 52, "y": 0},
+ { "flags": 4, "matrix": [0, 4], "x": 66, "y": 0},
+ { "flags": 4, "matrix": [0, 5], "x": 82, "y": 0},
+ { "flags": 4, "matrix": [0, 6], "x": 96, "y": 0},
+ { "flags": 4, "matrix": [0, 7], "x":110, "y": 0},
+ { "flags": 4, "matrix": [0, 8], "x":124, "y": 0},
+ { "flags": 4, "matrix": [0, 9], "x":140, "y": 0},
+ { "flags": 4, "matrix": [0, 10], "x":154, "y": 0},
+ { "flags": 4, "matrix": [0, 11], "x":168, "y": 0},
+ { "flags": 4, "matrix": [0, 12], "x":182, "y": 0},
+ { "flags": 4, "matrix": [0, 14], "x":196, "y": 0},
+ { "flags": 4, "matrix": [0, 15], "x":210, "y": 0},
+ { "flags": 4, "matrix": [0, 16], "x":224, "y": 0},
+
+ { "flags": 4, "matrix": [1, 0], "x": 0, "y": 12},
+ { "flags": 4, "matrix": [1, 1], "x": 13, "y": 12},
+ { "flags": 4, "matrix": [1, 2], "x": 26, "y": 12},
+ { "flags": 4, "matrix": [1, 3], "x": 39, "y": 12},
+ { "flags": 4, "matrix": [1, 4], "x": 52, "y": 12},
+ { "flags": 4, "matrix": [1, 5], "x": 65, "y": 12},
+ { "flags": 4, "matrix": [1, 6], "x": 79, "y": 12},
+ { "flags": 4, "matrix": [1, 7], "x": 92, "y": 12},
+ { "flags": 4, "matrix": [1, 8], "x":105, "y": 12},
+ { "flags": 4, "matrix": [1, 9], "x":118, "y": 12},
+ { "flags": 4, "matrix": [1, 10], "x":131, "y": 12},
+ { "flags": 4, "matrix": [1, 11], "x":144, "y": 12},
+ { "flags": 4, "matrix": [1, 12], "x":158, "y": 12},
+ { "flags": 4, "matrix": [1, 13], "x":171, "y": 12},
+ { "flags": 4, "matrix": [1, 14], "x":184, "y": 12},
+ { "flags": 4, "matrix": [1, 15], "x":197, "y": 12},
+ { "flags": 4, "matrix": [1, 16], "x":210, "y": 12},
+
+ { "flags": 4, "matrix": [2, 0], "x": 0, "y": 26},
+ { "flags": 4, "matrix": [2, 1], "x": 14, "y": 26},
+ { "flags": 4, "matrix": [2, 2], "x": 28, "y": 26},
+ { "flags": 4, "matrix": [2, 3], "x": 42, "y": 26},
+ { "flags": 4, "matrix": [2, 4], "x": 56, "y": 26},
+ { "flags": 4, "matrix": [2, 5], "x": 70, "y": 26},
+ { "flags": 4, "matrix": [2, 6], "x": 84, "y": 26},
+ { "flags": 4, "matrix": [2, 7], "x": 98, "y": 26},
+ { "flags": 4, "matrix": [2, 8], "x":112, "y": 26},
+ { "flags": 4, "matrix": [2, 9], "x":126, "y": 26},
+ { "flags": 4, "matrix": [2, 10], "x":140, "y": 26},
+ { "flags": 4, "matrix": [2, 11], "x":154, "y": 26},
+ { "flags": 4, "matrix": [2, 12], "x":168, "y": 26},
+ { "flags": 4, "matrix": [2, 13], "x":182, "y": 26},
+ { "flags": 4, "matrix": [2, 14], "x":196, "y": 26},
+ { "flags": 4, "matrix": [2, 15], "x":210, "y": 26},
+ { "flags": 4, "matrix": [2, 16], "x":224, "y": 26},
+
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 38},
+ { "flags": 4, "matrix": [3, 1], "x": 14, "y": 38},
+ { "flags": 4, "matrix": [3, 2], "x": 28, "y": 38},
+ { "flags": 4, "matrix": [3, 3], "x": 42, "y": 38},
+ { "flags": 4, "matrix": [3, 4], "x": 56, "y": 38},
+ { "flags": 4, "matrix": [3, 5], "x": 70, "y": 38},
+ { "flags": 4, "matrix": [3, 6], "x": 84, "y": 38},
+ { "flags": 4, "matrix": [3, 7], "x": 98, "y": 38},
+ { "flags": 4, "matrix": [3, 8], "x":112, "y": 38},
+ { "flags": 4, "matrix": [3, 9], "x":126, "y": 38},
+ { "flags": 4, "matrix": [3, 10], "x":140, "y": 38},
+ { "flags": 4, "matrix": [3, 11], "x":154, "y": 38},
+ { "flags": 4, "matrix": [3, 13], "x":182, "y": 38},
+
+ { "flags": 4, "matrix": [4, 0], "x": 0, "y": 51},
+ { "flags": 4, "matrix": [4, 1], "x": 14, "y": 51},
+ { "flags": 4, "matrix": [4, 2], "x": 28, "y": 51},
+ { "flags": 4, "matrix": [4, 3], "x": 42, "y": 51},
+ { "flags": 4, "matrix": [4, 4], "x": 56, "y": 51},
+ { "flags": 4, "matrix": [4, 5], "x": 70, "y": 51},
+ { "flags": 4, "matrix": [4, 6], "x": 84, "y": 51},
+ { "flags": 4, "matrix": [4, 7], "x": 98, "y": 51},
+ { "flags": 4, "matrix": [4, 8], "x":112, "y": 51},
+ { "flags": 4, "matrix": [4, 9], "x":126, "y": 51},
+ { "flags": 4, "matrix": [4, 10], "x":140, "y": 51},
+ { "flags": 4, "matrix": [4, 13], "x":154, "y": 51},
+ { "flags": 4, "matrix": [4, 15], "x":182, "y": 51},
+
+ { "flags": 4, "matrix": [5, 0], "x": 0, "y": 64},
+ { "flags": 4, "matrix": [5, 1], "x": 14, "y": 64},
+ { "flags": 4, "matrix": [5, 2], "x": 28, "y": 64},
+ { "flags": 4, "matrix": [5, 5], "x": 70, "y": 64},
+ { "flags": 4, "matrix": [5, 9], "x":126, "y": 64},
+ { "flags": 4, "matrix": [5, 10], "x":140, "y": 64},
+ { "flags": 4, "matrix": [5, 11], "x":154, "y": 64},
+ { "flags": 4, "matrix": [5, 13], "x":182, "y": 64},
+ { "flags": 4, "matrix": [5, 14], "x":196, "y": 64},
+ { "flags": 4, "matrix": [5, 15], "x":210, "y": 64},
+ { "flags": 4, "matrix": [5, 16], "x":224, "y": 64}
+ ]
+ },
+ "community_layouts": ["tkl_ansi"],
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 2, "y": 0 },
+ { "label": "F2", "matrix": [0, 2], "x": 3, "y": 0 },
+ { "label": "F3", "matrix": [0, 3], "x": 4, "y": 0 },
+ { "label": "F4", "matrix": [0, 4], "x": 5, "y": 0 },
+ { "label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0 },
+ { "label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0 },
+ { "label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0 },
+ { "label": "F9", "matrix": [0, 9], "x": 11, "y": 0 },
+ { "label": "F10", "matrix": [0, 10], "x": 12, "y": 0 },
+ { "label": "F11", "matrix": [0, 11], "x": 13, "y": 0 },
+ { "label": "F12", "matrix": [0, 12], "x": 14, "y": 0 },
+ { "label": "PrtSc", "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "label": "ScrLk", "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "label": "Pause", "matrix": [0, 16], "x": 17.25, "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": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2 },
+ { "label": "Ins", "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "label": "PgUp", "matrix": [1, 16], "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": "Del", "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "label": "PgDn", "matrix": [2, 16], "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, 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], "x": 12.25, "y": 4.25, "w": 2.75 },
+ { "label": "Up", "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+
+ { "label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25 },
+ { "label": "Win", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25 },
+ { "label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25 },
+ { "label": "Space", "matrix": [5, 5], "x": 3.75, "y": 5.25, "w": 6.25 },
+ { "label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25 },
+ { "label": "Win", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25 },
+ { "label": "Fn", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25 },
+ { "label": "Ctrl", "matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25 },
+ { "label": "Left", "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "label": "Down", "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "label": "Right", "matrix": [5, 16], "x": 17.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/monsgeek/m3/keymaps/default/keymap.c b/keyboards/monsgeek/m3/keymaps/default/keymap.c
new file mode 100644
index 000000000000..d075b6067f34
--- /dev/null
+++ b/keyboards/monsgeek/m3/keymaps/default/keymap.c
@@ -0,0 +1,79 @@
+/* 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
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT_tkl_ansi( /* 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_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, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_W] = LAYOUT_tkl_ansi( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(WIN_FN), _______, KC_A, KC_S, KC_D),
+
+
+ [WIN_FN] = LAYOUT_tkl_ansi( /* FN */
+ _______, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM, KC_MSEL, KC_MPLY, KC_MPRV, KC_MNXT, _______,_______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______, _______, _______,
+ _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, _______, DF(MAC_B),_______,_______, _______, RGB_MOD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+
+ [MAC_B] = LAYOUT_tkl_ansi( /* 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_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_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_W] = LAYOUT_tkl_ansi( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D),
+ [MAC_FN] = LAYOUT_tkl_ansi( /* FN */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______, _______, _______,
+ _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, _______, DF(WIN_B),_______,_______, _______, RGB_MOD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI)
+};
+// clang-format on
diff --git a/keyboards/monsgeek/m3/keymaps/via/keymap.c b/keyboards/monsgeek/m3/keymaps/via/keymap.c
new file mode 100644
index 000000000000..d075b6067f34
--- /dev/null
+++ b/keyboards/monsgeek/m3/keymaps/via/keymap.c
@@ -0,0 +1,79 @@
+/* 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
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT_tkl_ansi( /* 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_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, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_W] = LAYOUT_tkl_ansi( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(WIN_FN), _______, KC_A, KC_S, KC_D),
+
+
+ [WIN_FN] = LAYOUT_tkl_ansi( /* FN */
+ _______, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM, KC_MSEL, KC_MPLY, KC_MPRV, KC_MNXT, _______,_______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______, _______, _______,
+ _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, _______, DF(MAC_B),_______,_______, _______, RGB_MOD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+
+ [MAC_B] = LAYOUT_tkl_ansi( /* 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_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_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_W] = LAYOUT_tkl_ansi( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D),
+ [MAC_FN] = LAYOUT_tkl_ansi( /* FN */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______, _______, _______,
+ _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, _______, DF(WIN_B),_______,_______, _______, RGB_MOD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_HUI,
+ _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI)
+};
+// clang-format on
diff --git a/keyboards/monsgeek/m3/keymaps/via/rules.mk b/keyboards/monsgeek/m3/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/monsgeek/m3/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/monsgeek/m3/m3.c b/keyboards/monsgeek/m3/m3.c
new file mode 100644
index 000000000000..95bfb34789b5
--- /dev/null
+++ b/keyboards/monsgeek/m3/m3.c
@@ -0,0 +1,192 @@
+/* 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 ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ /*row0*/
+ {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},
+ {1, A_15, B_15, C_15},
+ {1, A_16, B_16, C_16},
+
+ /*row1*/
+ {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},
+ {1, D_2, E_2, F_2},
+ {1, D_3, E_3, F_3},
+
+ /*row2*/
+ {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, G_1, H_1, I_1},
+ {1, G_2, H_2, I_2},
+ {1, G_3, H_3, I_3},
+
+ /*row3*/
+ {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, G_13, H_13, I_13},
+
+ /*row4*/
+ {0, J_1, K_1, L_1},
+ {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, J_4, K_4, L_4},
+
+ /*row5*/
+ {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, J_1, K_1, L_1},
+ {1, J_2, K_2, L_2},
+ {1, J_3, K_3, L_3},
+};
+#endif // RGB_MATRIX_ENABLE
+
+// clang-format on
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN,
+};
+
+void matrix_init_kb(void) {
+ setPinOutput(LED_MAC_OS_PIN); // LDE2 MAC\WIN
+ writePinLow(LED_MAC_OS_PIN);
+ setPinOutput(LED_WIN_LOCK_PIN); // LED3 Win Lock
+ writePinLow(LED_WIN_LOCK_PIN);
+}
+
+void housekeeping_task_kb(void){
+ writePin(LED_MAC_OS_PIN, (get_highest_layer(default_layer_state) == 3));
+ writePin(LED_WIN_LOCK_PIN, keymap_config.no_gui);
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+ switch (keycode) {
+ case DF(WIN_B):
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(WIN_B);
+ }
+ return false;
+ case DF(MAC_B):
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(MAC_B);
+ keymap_config.no_gui = 0;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ case GU_TOGG:
+ if (record->event.pressed) {
+ writePin(LED_WIN_LOCK_PIN, !keymap_config.no_gui);
+ }
+ return true;
+ 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;
+ }
+}
diff --git a/keyboards/monsgeek/m3/mcuconf.h b/keyboards/monsgeek/m3/mcuconf.h
new file mode 100644
index 000000000000..e2884f3828f6
--- /dev/null
+++ b/keyboards/monsgeek/m3/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/m3/readme.md b/keyboards/monsgeek/m3/readme.md
new file mode 100644
index 000000000000..32e9112276b3
--- /dev/null
+++ b/keyboards/monsgeek/m3/readme.md
@@ -0,0 +1,24 @@
+# MonsGeek M3
+
+A customizable 80% keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: MonsGeek M3 PCB
+* Hardware Availability: [monsgeek](https://www.monsgeek.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make monsgeek/m3:default
+
+Flashing example for this keyboard:
+
+ make monsgeek/m3: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
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/monsgeek/m3/rules.mk b/keyboards/monsgeek/m3/rules.mk
new file mode 100644
index 000000000000..24d5f6f52ecc
--- /dev/null
+++ b/keyboards/monsgeek/m3/rules.mk
@@ -0,0 +1,2 @@
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/printedpad/info.json b/keyboards/printedpad/info.json
index 8ced02141b7a..90a42c73137a 100644
--- a/keyboards/printedpad/info.json
+++ b/keyboards/printedpad/info.json
@@ -22,7 +22,7 @@
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
- "vid": "0x5044"
+ "vid": "0x5064"
},
"layouts": {
"LAYOUT": {
diff --git a/keyboards/rationalist/ratio60_hotswap/keymaps/default/keymap.c b/keyboards/rationalist/ratio60_hotswap/keymaps/default/keymap.c
new file mode 100644
index 000000000000..48d264064a18
--- /dev/null
+++ b/keyboards/rationalist/ratio60_hotswap/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet"
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, MO(1)),
+
+[1] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______ ),
+};
+
+#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_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/rationalist/ratio60_hotswap/keymaps/default/rules.mk b/keyboards/rationalist/ratio60_hotswap/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/rationalist/ratio60_hotswap/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/rationalist/ratio60_hotswap/keymaps/via/keymap.c b/keyboards/rationalist/ratio60_hotswap/keymaps/via/keymap.c
new file mode 100644
index 000000000000..9fd68711a3a6
--- /dev/null
+++ b/keyboards/rationalist/ratio60_hotswap/keymaps/via/keymap.c
@@ -0,0 +1,41 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet"
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, MO(1)),
+
+[1] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______ )
+};
+
+#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_BRID, KC_BRIU) }
+};
+#endif
diff --git a/keyboards/rationalist/ratio60_hotswap/keymaps/via/rules.mk b/keyboards/rationalist/ratio60_hotswap/keymaps/via/rules.mk
new file mode 100644
index 000000000000..f1adcab005e8
--- /dev/null
+++ b/keyboards/rationalist/ratio60_hotswap/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/rationalist/ratio60_hotswap/readme.md b/keyboards/rationalist/ratio60_hotswap/readme.md
new file mode 100644
index 000000000000..7085b8484371
--- /dev/null
+++ b/keyboards/rationalist/ratio60_hotswap/readme.md
@@ -0,0 +1,24 @@
+# Rati(o)60
+
+A 60% hot swap PCB for both tray mount and o-ring mount
+
+* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
+* Hardware Supported: Rati(o)60 Rev A
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rationalist/ratio60_hotswap/rev_a:default
+
+Flashing example for this keyboard:
+
+ make rationalist/ratio60_hotswap/rev_a: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 Escape and plug in the keyboard
+* **Physical reset button**: Press and hold the button on the back of the PCB or short the reset header for about 3 seconds then release the buttom/remove the short
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/rationalist/ratio60_hotswap/rev_a/config.h b/keyboards/rationalist/ratio60_hotswap/rev_a/config.h
new file mode 100644
index 000000000000..eb7d87e083a0
--- /dev/null
+++ b/keyboards/rationalist/ratio60_hotswap/rev_a/config.h
@@ -0,0 +1,19 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet"
+
+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_EXTERNAL_PULLUP
diff --git a/keyboards/rationalist/ratio60_hotswap/rev_a/info.json b/keyboards/rationalist/ratio60_hotswap/rev_a/info.json
new file mode 100644
index 000000000000..5d3763d52d92
--- /dev/null
+++ b/keyboards/rationalist/ratio60_hotswap/rev_a/info.json
@@ -0,0 +1,377 @@
+{
+ "manufacturer": "Rationalist",
+ "keyboard_name": "Rati(o)60 Hotswap Rev A",
+ "maintainer": "4pplet",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "A1", "pin_b": "A0", "resolution": 2}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["B2", "A4", "A3", "A2", "F1", "F0", "C15", "C14", "C13", "B9", "B8", "B7", "A15", "B3"],
+ "rows": ["B14", "A9", "B6", "B5", "B4"]
+ },
+ "processor": "STM32F072",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 16
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0003",
+ "vid": "0x4446"
+ },
+ "ws2812": {
+ "pin": "A8"
+ },
+ "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_hhkb", "60_tsangan_hhkb"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [1, 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, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 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, 8], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [1, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.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, 8], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [1, 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, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 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, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [1, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [1, 13], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/rationalist/ratio60_hotswap/rev_a/rules.mk b/keyboards/rationalist/ratio60_hotswap/rev_a/rules.mk
new file mode 100644
index 000000000000..04fe1eba2acd
--- /dev/null
+++ b/keyboards/rationalist/ratio60_hotswap/rev_a/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -p FFFF -v FFFF
diff --git a/keyboards/sawnsprojects/okayu/halconf.h b/keyboards/sawnsprojects/okayu/halconf.h
new file mode 100644
index 000000000000..eb4e81c9ac84
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/halconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 MaiTheSan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+#include_next
diff --git a/keyboards/sawnsprojects/okayu/info.json b/keyboards/sawnsprojects/okayu/info.json
new file mode 100644
index 000000000000..89743590368f
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/info.json
@@ -0,0 +1,766 @@
+{
+ "keyboard_name": "Okayu",
+ "manufacturer": "Salane",
+ "url": "",
+ "maintainer": "Mai The San",
+ "usb": {
+ "vid": "0x5350",
+ "pid": "0x00A1",
+ "device_version": "1.0.0",
+ "force_nkro": true
+ },
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": false,
+ "nkro": true,
+ "rgblight": true
+ },
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_tsangan_hhkb",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
+ "matrix_pins": {
+ "cols": ["A9", "A0", "A8", "C13", "A1", "A2", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4"],
+ "rows": ["B3", "A15", "A3", "A10", "B14"]
+ },
+ "diode_direction": "COL2ROW",
+ "indicators": {
+ "caps_lock": "B12",
+ "on_state": 0
+ },
+ "ws2812": {
+ "pin": "B15",
+ "driver": "spi"
+ },
+ "rgblight": {
+ "led_count": 24,
+ "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_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": "K2D", "matrix": [2, 13], "x": 14, "y": 0},
+
+ {"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "K1D", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "K2C", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "K31", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "K3D", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "K41", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "K46", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "K4A", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "K4C", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "K4D", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi": {
+ "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, "w": 2},
+
+ {"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "K1D", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "K2C", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "K41", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "K46", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "K4A", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "K4C", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "K4D", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "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": "K2D", "matrix": [2, 13], "x": 14, "y": 0},
+
+ {"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "K1D", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "K2C", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "K3D", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "K41", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "K46", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "K4A", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "K4C", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "K4D", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "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, "w": 2},
+
+ {"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "K1D", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "K2C", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "K41", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "K46", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "K4B", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "K4C", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "K4D", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "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": "K2D", "matrix": [2, 13], "x": 14, "y": 0},
+
+ {"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "K1D", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "K2C", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "K3D", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "K41", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "K46", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "K4B", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "K4C", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "K4D", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "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": "K2D", "matrix": [2, 13], "x": 14, "y": 0},
+
+ {"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "K1D", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "K2C", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "K3D", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "K41", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "K46", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "K4B", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "K4C", "matrix": [4, 12], "x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "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, "w": 2},
+
+ {"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "K1D", "matrix": [1, 13], "x": 12.75, "y": 2},
+
+ {"label": "K2C", "matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "K31", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "K41", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "K46", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "K4A", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "K4C", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "K4D", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "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": "K2D", "matrix": [2, 13], "x": 14, "y": 0},
+
+ {"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "K1D", "matrix": [1, 13], "x": 12.75, "y": 2},
+
+ {"label": "K2C", "matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "K31", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "K3D", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "K41", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "K46", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "K4A", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "K4C", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "K4D", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "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, "w": 2},
+
+ {"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "K1D", "matrix": [1, 13], "x": 12.75, "y": 2},
+
+ {"label": "K2C", "matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "K31", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "K41", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "K46", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "K4B", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "K4C", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "K4D", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "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": "K2D", "matrix": [2, 13], "x": 14, "y": 0},
+
+ {"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "K1D", "matrix": [1, 13], "x": 12.75, "y": 2},
+
+ {"label": "K2C", "matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "K31", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "K3D", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "K41", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "K46", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "K4B", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "K4C", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "K4D", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/sawnsprojects/okayu/keymaps/default/keymap.c b/keyboards/sawnsprojects/okayu/keymaps/default/keymap.c
new file mode 100644
index 000000000000..f5290a50064a
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/keymaps/default/keymap.c
@@ -0,0 +1,42 @@
+// Copyright 2023 MaiTheSan (@maithesan)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum {
+ _BL,
+ _FL,
+ _AL,
+ _CL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BL] = 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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, TG(_AL),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(_FL), KC_RALT, KC_RGUI, KC_RCTL),
+
+[_FL] = 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,
+ BL_TOGG, BL_UP, BL_DOWN, BL_STEP, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______,
+ VK_TOGG, _______, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, MO(_CL), _______, _______, _______, _______),
+
+[_AL] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______,
+ _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+[_CL] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, EE_CLR, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______)
+
+ };
diff --git a/keyboards/sawnsprojects/okayu/keymaps/via/keymap.c b/keyboards/sawnsprojects/okayu/keymaps/via/keymap.c
new file mode 100644
index 000000000000..f5290a50064a
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/keymaps/via/keymap.c
@@ -0,0 +1,42 @@
+// Copyright 2023 MaiTheSan (@maithesan)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum {
+ _BL,
+ _FL,
+ _AL,
+ _CL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BL] = 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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, TG(_AL),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(_FL), KC_RALT, KC_RGUI, KC_RCTL),
+
+[_FL] = 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,
+ BL_TOGG, BL_UP, BL_DOWN, BL_STEP, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______,
+ VK_TOGG, _______, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, MO(_CL), _______, _______, _______, _______),
+
+[_AL] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______,
+ _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+[_CL] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, EE_CLR, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______)
+
+ };
diff --git a/keyboards/sawnsprojects/okayu/keymaps/via/rules.mk b/keyboards/sawnsprojects/okayu/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/sawnsprojects/okayu/readme.md b/keyboards/sawnsprojects/okayu/readme.md
new file mode 100644
index 000000000000..d49415865b90
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/readme.md
@@ -0,0 +1,27 @@
+# Okayu
+
+![Okayu](https://i.imgur.com/pRnRHl8h.png)
+
+A Wibu 60% keyboard PCB Design by inspire of Nekomata Okayu and can fit many keyboard case
+
+* Keyboard Maintainer: [Mai The San](https://github.com/maithesan)
+* Hardware Supported: Several 60% keyboard (RE60, Krush60, Unikorn, Tinyneko, Bakeneko60...)
+* Hardware Availability: NuxrosKB, Salane Discord
+
+Make example for this keyboard (after setting up your build environment):
+
+ make sawnsprojects/okayu:default
+
+Flashing example for this keyboard:
+
+ make sawnsprojects/okayu: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/sawnsprojects/okayu/rules.mk b/keyboards/sawnsprojects/okayu/rules.mk
new file mode 100644
index 000000000000..59655554eb2c
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = sawnsprojects/okayu/stm32f072
\ No newline at end of file
diff --git a/keyboards/sawnsprojects/okayu/stm32f072/config.h b/keyboards/sawnsprojects/okayu/stm32f072/config.h
new file mode 100644
index 000000000000..c47f1928c848
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/stm32f072/config.h
@@ -0,0 +1,8 @@
+// Copyright 2023 MaiTheSan
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define WS2812_SPI SPID1
+#define WS2812_SPI_MOSI_PAL_MODE 5
+#define WS2812_SPI_SCK_PIN B13
+#define WS2812_SPI_SCK_PAL_MODE 5
\ No newline at end of file
diff --git a/keyboards/sawnsprojects/okayu/stm32f072/info.json b/keyboards/sawnsprojects/okayu/stm32f072/info.json
new file mode 100644
index 000000000000..b5d728b1cdf1
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/stm32f072/info.json
@@ -0,0 +1,4 @@
+{
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu",
+}
diff --git a/keyboards/sawnsprojects/okayu/stm32f072/mcuconf.h b/keyboards/sawnsprojects/okayu/stm32f072/mcuconf.h
new file mode 100644
index 000000000000..7cd72d9a86b9
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/stm32f072/mcuconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 MaiTheSan
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next
+
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
diff --git a/keyboards/sawnsprojects/okayu/stm32f072/rules.mk b/keyboards/sawnsprojects/okayu/stm32f072/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/sawnsprojects/okayu/stm32f103/config.h b/keyboards/sawnsprojects/okayu/stm32f103/config.h
new file mode 100644
index 000000000000..eff3605470a9
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/stm32f103/config.h
@@ -0,0 +1,8 @@
+// Copyright 2023 MaiTheSan
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define WS2812_SPI SPID2
+#define WS2812_SPI_MOSI_PAL_MODE 5
+#define WS2812_SPI_SCK_PIN B13
+#define WS2812_SPI_SCK_PAL_MODE 5
\ No newline at end of file
diff --git a/keyboards/sawnsprojects/okayu/stm32f103/info.json b/keyboards/sawnsprojects/okayu/stm32f103/info.json
new file mode 100644
index 000000000000..31fd483f66be
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/stm32f103/info.json
@@ -0,0 +1,3 @@
+{
+ "development_board": "bluepill"
+}
diff --git a/keyboards/sawnsprojects/okayu/stm32f103/mcuconf.h b/keyboards/sawnsprojects/okayu/stm32f103/mcuconf.h
new file mode 100644
index 000000000000..8ab476c663ec
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/stm32f103/mcuconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 MaiTheSan
+// 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/sawnsprojects/okayu/stm32f103/rules.mk b/keyboards/sawnsprojects/okayu/stm32f103/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/sawnsprojects/okayu/stm32f303/config.h b/keyboards/sawnsprojects/okayu/stm32f303/config.h
new file mode 100644
index 000000000000..c47f1928c848
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/stm32f303/config.h
@@ -0,0 +1,8 @@
+// Copyright 2023 MaiTheSan
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define WS2812_SPI SPID1
+#define WS2812_SPI_MOSI_PAL_MODE 5
+#define WS2812_SPI_SCK_PIN B13
+#define WS2812_SPI_SCK_PAL_MODE 5
\ No newline at end of file
diff --git a/keyboards/sawnsprojects/okayu/stm32f303/info.json b/keyboards/sawnsprojects/okayu/stm32f303/info.json
new file mode 100644
index 000000000000..84661311fd2b
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/stm32f303/info.json
@@ -0,0 +1,4 @@
+{
+ "processor": "STM32F303",
+ "bootloader": "stm32-dfu"
+}
\ No newline at end of file
diff --git a/keyboards/sawnsprojects/okayu/stm32f303/mcuconf.h b/keyboards/sawnsprojects/okayu/stm32f303/mcuconf.h
new file mode 100644
index 000000000000..7cd72d9a86b9
--- /dev/null
+++ b/keyboards/sawnsprojects/okayu/stm32f303/mcuconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 MaiTheSan
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next
+
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
diff --git a/keyboards/sawnsprojects/okayu/stm32f303/rules.mk b/keyboards/sawnsprojects/okayu/stm32f303/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/tgr/alice/info.json b/keyboards/tgr/alice/info.json
index 21932cebc63c..722de6251ab6 100644
--- a/keyboards/tgr/alice/info.json
+++ b/keyboards/tgr/alice/info.json
@@ -41,11 +41,90 @@
},
"processor": "atmega32a",
"bootloader": "bootloadhid",
- "community_layouts": ["alice_split_bs"],
+ "community_layouts": ["alice", "alice_split_bs"],
"layout_aliases": {
"LAYOUT": "LAYOUT_alice_split_bs"
},
"layouts": {
+ "LAYOUT_alice": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+
+ {"matrix": [0, 7], "x": 10.25, "y": 0},
+ {"matrix": [0, 8], "x": 11.25, "y": 0},
+ {"matrix": [0, 9], "x": 12.25, "y": 0},
+ {"matrix": [0, 10], "x": 13.25, "y": 0},
+ {"matrix": [0, 11], "x": 14.25, "y": 0},
+ {"matrix": [0, 12], "x": 15.25, "y": 0},
+ {"matrix": [0, 13], "x": 16.25, "y": 0, "w": 2},
+
+ {"matrix": [5, 1], "x": 0, "y": 1},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 2.75, "y": 1},
+ {"matrix": [1, 2], "x": 3.75, "y": 1},
+ {"matrix": [1, 3], "x": 4.75, "y": 1},
+ {"matrix": [1, 4], "x": 5.75, "y": 1},
+ {"matrix": [1, 5], "x": 6.75, "y": 1},
+
+ {"matrix": [1, 6], "x": 9.75, "y": 1},
+ {"matrix": [1, 7], "x": 10.75, "y": 1},
+ {"matrix": [1, 8], "x": 11.75, "y": 1},
+ {"matrix": [1, 9], "x": 12.75, "y": 1},
+ {"matrix": [1, 10], "x": 13.75, "y": 1},
+ {"matrix": [1, 11], "x": 14.75, "y": 1},
+ {"matrix": [1, 12], "x": 15.75, "y": 1},
+ {"matrix": [1, 13], "x": 16.75, "y": 1, "w": 1.5},
+
+ {"matrix": [5, 2], "x": 0, "y": 2},
+ {"matrix": [2, 0], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 3, "y": 2},
+ {"matrix": [2, 2], "x": 4, "y": 2},
+ {"matrix": [2, 3], "x": 5, "y": 2},
+ {"matrix": [2, 4], "x": 6, "y": 2},
+ {"matrix": [2, 5], "x": 7, "y": 2},
+
+ {"matrix": [2, 6], "x": 10, "y": 2},
+ {"matrix": [2, 7], "x": 11, "y": 2},
+ {"matrix": [2, 8], "x": 12, "y": 2},
+ {"matrix": [2, 9], "x": 13, "y": 2},
+ {"matrix": [2, 10], "x": 14, "y": 2},
+ {"matrix": [2, 11], "x": 15, "y": 2},
+ {"matrix": [2, 12], "x": 16, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 1], "x": 3.5, "y": 3},
+ {"matrix": [3, 2], "x": 4.5, "y": 3},
+ {"matrix": [3, 3], "x": 5.5, "y": 3},
+ {"matrix": [3, 4], "x": 6.5, "y": 3},
+ {"matrix": [3, 5], "x": 7.5, "y": 3},
+
+ {"matrix": [3, 6], "x": 9.5, "y": 3},
+ {"matrix": [3, 7], "x": 10.5, "y": 3},
+ {"matrix": [3, 8], "x": 11.5, "y": 3},
+ {"matrix": [3, 9], "x": 12.5, "y": 3},
+ {"matrix": [3, 10], "x": 13.5, "y": 3},
+ {"matrix": [3, 11], "x": 14.5, "y": 3},
+ {"matrix": [3, 12], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 17.25, "y": 3},
+
+ {"matrix": [4, 0], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 5.75, "y": 4, "w": 2},
+ {"matrix": [4, 3], "x": 7.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 7], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 8], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
"LAYOUT_alice_split_bs": {
"layout": [
{"matrix": [5, 0], "x": 0, "y": 0},
diff --git a/keyboards/vinhcatba/uncertainty/bongo.c b/keyboards/vinhcatba/uncertainty/bongo.c
new file mode 100644
index 000000000000..707955ee8810
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/bongo.c
@@ -0,0 +1,506 @@
+// Copyright 2022 Parker Levin (@pedker)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#define ANIM_FRAME_DURATION 75 // how long each frame lasts in ms
+#define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024
+#define IDLE_FRAMES 5
+#define IDLE_TIMEOUT 750 // the amount of time it takes to return to idle
+#define TAP_FRAMES 2
+#define KEYS_SIZE 104 // the number of keys stored in the array that tracks keypresses; how many keys are on the board?
+
+enum anim_states
+{
+ Idle,
+ Prep,
+ Tap
+};
+uint8_t anim_state = Idle;
+uint32_t idle_timeout_timer = 0;
+uint32_t anim_timer = 0;
+uint8_t current_idle_frame = 0;
+uint8_t current_tap_frame = 0;
+
+struct pair_int_int
+{
+ uint8_t first;
+ uint8_t second;
+};
+struct pair_int_int pressed_keys[KEYS_SIZE];
+struct pair_int_int pressed_keys_prev[KEYS_SIZE];
+uint8_t pressed_keys_index = 0;
+
+bool key_down = 0;
+char wpm[42];
+
+static const char PROGMEM idle[IDLE_FRAMES][ANIM_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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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
+ }
+};
+
+static const char PROGMEM idle_minimal[IDLE_FRAMES][ANIM_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, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+};
+
+static const char PROGMEM prep[][ANIM_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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 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 prep_minimal[][ANIM_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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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][ANIM_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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 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_minimal[TAP_FRAMES][ANIM_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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x40, 0x20, 0x20, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+};
+
+bool detect_key_down(void)
+{
+ // store the previous cycle's cache
+ for (uint8_t i = 0; i < KEYS_SIZE; ++i)
+ {
+ pressed_keys_prev[i].first = pressed_keys[i].first;
+ pressed_keys_prev[i].second = pressed_keys[i].second;
+ }
+
+ // fill cache with currently pressed keys
+ pressed_keys_index = 0;
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++)
+ {
+ for (uint8_t y = 0; y < MATRIX_COLS; y++)
+ {
+ // is this key is currently down?
+ if (((matrix_get_row(x) & (1 << y)) > 0))
+ {
+ pressed_keys[pressed_keys_index].first = x+1; // adding 1 to the row/col so that we can use 0 as a null-check
+ pressed_keys[pressed_keys_index].second = y+1;
+ }
+ else
+ {
+ pressed_keys[pressed_keys_index].first = 0;
+ pressed_keys[pressed_keys_index].second = 0;
+ }
+ pressed_keys_index++;
+ }
+ }
+
+ // check for a new key down compared to last cycle
+ for (uint8_t i = 0; i < KEYS_SIZE; ++i)
+ {
+ if (pressed_keys[i].first && pressed_keys[i].second && !pressed_keys_prev[i].first && !pressed_keys_prev[i].second)
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+void eval_anim_state(void)
+{
+ key_down = detect_key_down();
+
+ switch (anim_state)
+ {
+ case Idle:
+ if (key_down) // Idle to Tap
+ {
+ anim_state = Tap;
+ }
+ break;
+
+ case Prep:
+ if (key_down) // Prep to Tap
+ {
+ anim_state = Tap;
+ }
+ else if (timer_elapsed32(idle_timeout_timer) >= IDLE_TIMEOUT) // Prep to Idle
+ {
+ anim_state = Idle;
+ current_idle_frame = 0;
+ }
+ break;
+
+ case Tap:
+ if (!key_down) // Tap to Prep
+ {
+ anim_state = Prep;
+ idle_timeout_timer = timer_read32();
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+void draw_bongo(bool minimal)
+{
+ eval_anim_state();
+
+ oled_set_cursor(0, 0);
+
+ switch (anim_state)
+ {
+ case Idle:
+ if (minimal)
+ oled_write_raw_P(idle_minimal[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE);
+ else
+ oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE);
+ if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION)
+ {
+ current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
+ anim_timer = timer_read32();
+ }
+ break;
+
+ case Prep:
+ if (minimal)
+ oled_write_raw_P(prep_minimal[0], ANIM_SIZE);
+ else
+ oled_write_raw_P(prep[0], ANIM_SIZE);
+ break;
+
+ case Tap:
+ if (minimal)
+ oled_write_raw_P(tap_minimal[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE);
+ else
+ oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE);
+ current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
+ break;
+
+ default:
+ break;
+ }
+
+ if (!minimal)
+ {
+ // print wpm
+ oled_set_cursor(0, 0);
+ oled_write("WPM:", false);
+ oled_write(get_u8_str(get_current_wpm(),'0'), false);
+ }
+}
diff --git a/keyboards/vinhcatba/uncertainty/bongo.h b/keyboards/vinhcatba/uncertainty/bongo.h
new file mode 100644
index 000000000000..d1cecbc61972
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/bongo.h
@@ -0,0 +1,6 @@
+// Copyright 2022 Parker Levin (@pedker)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+void draw_bongo(bool minimal);
diff --git a/keyboards/vinhcatba/uncertainty/config.h b/keyboards/vinhcatba/uncertainty/config.h
new file mode 100644
index 000000000000..288f1d81a947
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/config.h
@@ -0,0 +1,30 @@
+// Copyright 2023 Vinh Le (@vinhcatba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* WS2812 driver config specifically for STM32F401 */
+// DI pin = PB1, which is AF02, TIM3_CH4 (table 9 in datasheet)
+#define RGBLIGHT_LED_MAP { 2, 3, 4, 5, 6, 0, 1, 7, 8, 9, 10, 11, 12, 13} // index 5 = CAPS; index 6 = NUM
+
+#define WS2812_PWM_DRIVER PWMD3 // TIM3
+#define WS2812_PWM_CHANNEL 4 // CH4
+#define WS2812_PWM_PAL_MODE 2 // AF2
+
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA1 Stream 2 for TIM3_UP (table 28 in reference manual)
+#define WS2812_DMA_CHANNEL 5 // DMA Channel 5 for TIM3_UP (table 28 in reference manual)
+
+
+#define I2C1_CLOCK_SPEED 400000
+#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_16_9
+
+/* eeprom i2c driver config */
+#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10100000
+#define EXTERNAL_EEPROM_BYTE_COUNT 4096
+#define EXTERNAL_EEPROM_PAGE_SIZE 32
+#define EXTERNAL_EEPROM_WRITE_TIME 10
+//#define EEPROM_I2C_24LC32
+
+/* OLED config */
+#define OLED_UPDATE_INTERVAL 100
+#define OLED_BRIGHTNESS 200
diff --git a/keyboards/vinhcatba/uncertainty/halconf.h b/keyboards/vinhcatba/uncertainty/halconf.h
new file mode 100644
index 000000000000..0b105e29b8a3
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/halconf.h
@@ -0,0 +1,11 @@
+// Copyright 2023 Vinh Le (@vinhcatba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#undef HAL_USE_PWM
+#define HAL_USE_PWM TRUE
+
+#undef HAL_USE_I2C
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/vinhcatba/uncertainty/info.json b/keyboards/vinhcatba/uncertainty/info.json
new file mode 100644
index 000000000000..fc0e69ad19fb
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/info.json
@@ -0,0 +1,170 @@
+{
+ "manufacturer": "Vinh Le",
+ "keyboard_name": "Uncertainty",
+ "maintainer": "vinhcatba",
+ "development_board": "blackpill_f401",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "A13", "pin_b": "A14"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "wpm": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true,
+ "oled": true
+ },
+ "matrix_pins": {
+ "cols": ["A15", "B3", "B4", "B5", "B8", "B9", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "C15", "C14", "C13"],
+ "rows": ["B12", "B13", "B14", "B15", "A8", "A10"]
+ },
+ "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": 10,
+ "layers": {
+ "enabled": true,
+ "override_rgb": true
+ },
+ "led_count": 14,
+ "max_brightness": 255,
+ "sleep": true
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0x564C"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B1"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 1.25, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 2.25, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 3.25, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 4.25, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 5.25, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 6.25, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 7.25, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 8.25, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 9.25, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 10.25, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 11.25, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 12.25, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 13.25, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 14.25, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "0,15", "matrix": [0, 15], "x": 16.25, "y": 0},
+ {"label": "0,16", "matrix": [0, 16], "x": 17.25, "y": 0},
+ {"label": "0,17", "matrix": [0, 17], "x": 18.25, "y": 0},
+ {"label": "1,17", "matrix": [1, 17], "x": 19.25, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 1.25, "y": 1},
+ {"label": "1,1", "matrix": [1, 1], "x": 2.25, "y": 1},
+ {"label": "1,2", "matrix": [1, 2], "x": 3.25, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 4.25, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 5.25, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 6.25, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 7.25, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 8.25, "y": 1},
+ {"label": "1,8", "matrix": [1, 8], "x": 9.25, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 10.25, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 11.25, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 12.25, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 13.25, "y": 1},
+ {"label": "1,13", "matrix": [1, 13], "x": 14.25, "y": 1, "w": 2},
+ {"label": "1,14", "matrix": [1, 14], "x": 16.25, "y": 1},
+ {"label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 1},
+ {"label": "1,16", "matrix": [1, 16], "x": 18.25, "y": 1},
+ {"label": "3,17", "matrix": [3, 17], "x": 19.25, "y": 1},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 1.75},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.5},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "2,13", "matrix": [2, 13], "x": 13.75, "y": 2},
+ {"label": "2,14", "matrix": [2, 14], "x": 14.75, "y": 2, "w": 1.5},
+ {"label": "2,15", "matrix": [2, 15], "x": 16.25, "y": 2},
+ {"label": "2,16", "matrix": [2, 16], "x": 17.25, "y": 2},
+ {"label": "2,17", "matrix": [2, 17], "x": 18.25, "y": 2},
+ {"label": "4,17", "matrix": [4, 17], "x": 19.25, "y": 2, "h": 2},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "3,1", "matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.75},
+ {"label": "3,2", "matrix": [3, 2], "x": 3, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 4, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 5, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 6, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 7, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 8, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 9, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 10, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 11, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 12, "y": 3},
+ {"label": "3,12", "matrix": [3, 12], "x": 13, "y": 3},
+ {"label": "3,13", "matrix": [3, 13], "x": 14, "y": 3, "w": 2.25},
+ {"label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 3},
+ {"label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 3},
+ {"label": "3,16", "matrix": [3, 16], "x": 18.25, "y": 3},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 2.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 3.5, "y": 4},
+ {"label": "4,3", "matrix": [4, 3], "x": 4.5, "y": 4},
+ {"label": "4,4", "matrix": [4, 4], "x": 5.5, "y": 4},
+ {"label": "4,5", "matrix": [4, 5], "x": 6.5, "y": 4},
+ {"label": "4,6", "matrix": [4, 6], "x": 7.5, "y": 4},
+ {"label": "4,7", "matrix": [4, 7], "x": 8.5, "y": 4},
+ {"label": "4,8", "matrix": [4, 8], "x": 9.5, "y": 4},
+ {"label": "4,9", "matrix": [4, 9], "x": 10.5, "y": 4},
+ {"label": "4,10", "matrix": [4, 10], "x": 11.5, "y": 4},
+ {"label": "4,11", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "4,12", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.75},
+ {"label": "4,13", "matrix": [4, 13], "x": 15.25, "y": 4},
+ {"label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4},
+ {"label": "4,15", "matrix": [4, 15], "x": 17.25, "y": 4},
+ {"label": "4,16", "matrix": [4, 16], "x": 18.25, "y": 4},
+ {"label": "5,17", "matrix": [5, 17], "x": 19.25, "y": 4, "h": 2},
+ {"label": "5,0", "matrix": [5, 0], "x": 0, "y": 5},
+ {"label": "5,1", "matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"label": "5,2", "matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"label": "5,3", "matrix": [5, 3], "x": 3.75, "y": 5, "w": 1.25},
+ {"label": "5,6", "matrix": [5, 6], "x": 5, "y": 5, "w": 6.25},
+ {"label": "5,7", "matrix": [5, 7], "x": 11.25, "y": 5},
+ {"label": "5,10", "matrix": [5, 10], "x": 12.25, "y": 5},
+ {"label": "5,11", "matrix": [5, 11], "x": 13.25, "y": 5},
+ {"label": "5,12", "matrix": [5, 12], "x": 14.25, "y": 5},
+ {"label": "5,13", "matrix": [5, 13], "x": 15.25, "y": 5},
+ {"label": "5,14", "matrix": [5, 14], "x": 16.25, "y": 5},
+ {"label": "5,15", "matrix": [5, 15], "x": 17.25, "y": 5},
+ {"label": "5,16", "matrix": [5, 16], "x": 18.25, "y": 5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/vinhcatba/uncertainty/keymaps/default/keymap.c b/keyboards/vinhcatba/uncertainty/keymaps/default/keymap.c
new file mode 100644
index 000000000000..910453e76d9d
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/keymaps/default/keymap.c
@@ -0,0 +1,89 @@
+// Copyright 2023 Vinh Le (@vinhcatba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* 0
+ * ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐
+ * │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │PrtScn│ Del │ Home │ End │ PgUp │ PgDn │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┴──────┼──────┼──────┼──────┼──────┤
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Bksp │ # Lk │ / │ * │ - │
+ * ┌──────┼──────┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬─────────┼──────┼──────┼──────┼──────┤
+ * │ Mute │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ 7 │ 8 │ 9 │ │
+ * ├──────┼──────────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─────────┼──────┼──────┼──────┤ + |
+ * │ Null │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ 4 │ 5 │ 6 │ |
+ * ├──────┼────────────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴───────┬──────┼──────┤──────┼──────┼──────┤
+ * │ Null │ Shft │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shft │ Up │ 1 │ 2 │ 3 │ │
+ * ├──────┼───────┬──────┴┬─────┴─┬────┴──────┴──────┴──────┴──────┴──────┴─────┬┴─────┬┴─────┬┴─────┬──────┼──────┼──────┼──────┼──────┤ Entr |
+ * │ Null │ Ctrl │ Gui │ Alt │ Space │ Alt │ Fn │ Ctrl │ Left │ Down │ Right│ 0 │ . │ │
+ * └──────┴───────┴───────┴───────┴─────────────────────────────────────────────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘
+ */
+ [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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_MUTE, 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_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CALC, 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,
+ C(KC_V), 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,
+ C(KC_C), KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+ [1] = LAYOUT(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS , KC_SCRL, _______, _______, EE_CLR ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ OLED_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______ , _______, _______, _______,RGB_RMOD, RGB_VAD, RGB_MOD, _______, _______
+ )
+};
+
+#ifdef 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_BRID, KC_BRIU) }
+};
+#endif // endif ENCODER_MAP_ENABLE
+
+#ifdef RGBLIGHT_ENABLE
+# define HSV_PASTEL_BLUE 150, 155, 51
+
+const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 1, HSV_PASTEL_BLUE} // Light 1 LED, starting with LED 0
+);
+
+const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {1, 1, HSV_PASTEL_BLUE} // Light 1 LED, starting with LED 1
+);
+
+const rgblight_segment_t PROGMEM indicators_off_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 2, HSV_OFF} // Turn off 2 LEDs, starting with LED 0
+);
+
+// Now define the array of layers. Later layers take precedence
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+ indicators_off_layer,
+ my_capslock_layer,
+ my_numlock_layer
+);
+
+bool led_update_user(led_t led_state) {
+ rgblight_set_layer_state(1, led_state.caps_lock);
+ rgblight_set_layer_state(2, led_state.num_lock);
+ return true;
+}
+
+void keyboard_post_init_user(void) {
+ // debug_enable=true;
+ // debug_matrix=true;
+
+ // Enable the LED layers
+ rgblight_layers = my_rgb_layers;
+ rgblight_set_layer_state(0, 1);
+ rgblight_set_effect_range(2, 12);
+ rgblight_enable();
+}
+#endif // endif RGBLIGHT_ENABLE
+
+
diff --git a/keyboards/vinhcatba/uncertainty/keymaps/default/rules.mk b/keyboards/vinhcatba/uncertainty/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/vinhcatba/uncertainty/keymaps/via/keymap.c b/keyboards/vinhcatba/uncertainty/keymaps/via/keymap.c
new file mode 100644
index 000000000000..2427393be72d
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/keymaps/via/keymap.c
@@ -0,0 +1,88 @@
+// Copyright 2023 Vinh Le (@vinhcatba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* 0
+ * ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐
+ * │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │PrtScn│ Del │ Home │ End │ PgUp │ PgDn │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┴──────┼──────┼──────┼──────┼──────┤
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Bksp │ # Lk │ / │ * │ - │
+ * ┌──────┼──────┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬──┴───┬─────────┼──────┼──────┼──────┼──────┤
+ * │ Mute │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ 7 │ 8 │ 9 │ │
+ * ├──────┼──────────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─────────┼──────┼──────┼──────┤ + |
+ * │ Null │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ 4 │ 5 │ 6 │ |
+ * ├──────┼────────────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴─┬────┴───────┬──────┼──────┤──────┼──────┼──────┤
+ * │ Null │ Shft │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shft │ Up │ 1 │ 2 │ 3 │ │
+ * ├──────┼───────┬──────┴┬─────┴─┬────┴──────┴──────┴──────┴──────┴──────┴─────┬┴─────┬┴─────┬┴─────┬──────┼──────┼──────┼──────┼──────┤ Entr |
+ * │ Null │ Ctrl │ Gui │ Alt │ Space │ Alt │ Fn │ Ctrl │ Left │ Down │ Right│ 0 │ . │ │
+ * └──────┴───────┴───────┴───────┴─────────────────────────────────────────────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘
+ */
+ [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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_MUTE, 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_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CALC, 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,
+ C(KC_V), 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,
+ C(KC_C), KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+ [1] = LAYOUT(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS , KC_SCRL, _______, _______, EE_CLR ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ OLED_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______ , _______, _______, _______,RGB_RMOD, RGB_VAD, RGB_MOD, _______, _______
+ )
+};
+
+#ifdef 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_BRID, KC_BRIU) }
+};
+#endif // endif ENCODER_MAP_ENABLE
+
+#ifdef RGBLIGHT_ENABLE
+#define HSV_PASTEL_BLUE 150, 155, 51
+
+const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 1, HSV_PASTEL_BLUE} // Light 1 LED, starting with LED 0
+);
+
+const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {1, 1, HSV_PASTEL_BLUE} // Light 1 LED, starting with LED 1
+);
+
+const rgblight_segment_t PROGMEM indicators_off_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 2, HSV_OFF} // Turn off 2 LEDs, starting with LED 0
+);
+
+// Now define the array of layers. Later layers take precedence
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+ indicators_off_layer,
+ my_capslock_layer,
+ my_numlock_layer
+);
+
+bool led_update_user(led_t led_state) {
+ rgblight_set_layer_state(1, led_state.caps_lock);
+ rgblight_set_layer_state(2, led_state.num_lock);
+ return true;
+}
+
+void keyboard_post_init_user(void) {
+ // debug_enable=true;
+ // debug_matrix=true;
+
+ // Enable the LED layers
+ rgblight_layers = my_rgb_layers;
+ rgblight_set_layer_state(0, 1);
+ rgblight_set_effect_range(2, 12);
+ rgblight_enable();
+}
+#endif // endif RGBLIGHT_ENABLE
+
diff --git a/keyboards/vinhcatba/uncertainty/keymaps/via/rules.mk b/keyboards/vinhcatba/uncertainty/keymaps/via/rules.mk
new file mode 100644
index 000000000000..f1adcab005e8
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/vinhcatba/uncertainty/mcuconf.h b/keyboards/vinhcatba/uncertainty/mcuconf.h
new file mode 100644
index 000000000000..313f8dd06a69
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/mcuconf.h
@@ -0,0 +1,10 @@
+// Copyright 2023 Vinh Le (@vinhcatba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#include_next
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/vinhcatba/uncertainty/readme.md b/keyboards/vinhcatba/uncertainty/readme.md
new file mode 100644
index 000000000000..ead5d17c5403
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/readme.md
@@ -0,0 +1,26 @@
+# uncertainty
+
+![uncertainty](https://i.imgur.com/IKrn37Bh.jpeg)
+
+*This is an open source keyboard with exposed-component design. It has 96% (1800) layout with extra 3 keys on the left for custom macro (default are Copy, Paste and open Calculator). It features OLED screen, RGB Backlight, Encoder and VIA-supported. Powered by a STM32F401 Blackpill.*
+
+* Keyboard Maintainer: [Vinh Le](https://github.com/vinhcatba)
+* Hardware Supported: The PCB is [here](https://github.com/vinhcatba/uncertainty), controller supported: STM32F401 Blackpill, SSD1306 128x32 OLED, WS2812B RGB, External EEPROM, Rotary Encoder.
+* Hardware Availability: [Open-source hardware](https://github.com/vinhcatba/uncertainty)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make vinhcatba/uncertainty:default
+
+Flashing example for this keyboard:
+
+ make vinhcatba/uncertainty: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. This will also clear EEPROM, so it is a good first step if the keyboard is misbehaving.
+* **Physical reset button**: On Blackpill board: Hold `NRST` and `BOOT0` -> Release `NRST` first and **quickly** release `BOOT0` right after.
+* **Keycode in layout**: `QK_BOOT` is on the second layer, replacing Escape (top left key).
diff --git a/keyboards/vinhcatba/uncertainty/rules.mk b/keyboards/vinhcatba/uncertainty/rules.mk
new file mode 100644
index 000000000000..6255f6529472
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/rules.mk
@@ -0,0 +1,3 @@
+SRC += bongo.c
+# using external i2c eeprom
+EEPROM_DRIVER = i2c
diff --git a/keyboards/vinhcatba/uncertainty/uncertainty.c b/keyboards/vinhcatba/uncertainty/uncertainty.c
new file mode 100644
index 000000000000..19e5a5cfd537
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/uncertainty.c
@@ -0,0 +1,32 @@
+// Copyright 2023 Vinh Le (@vinhcatba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+#include "bongo.h"
+// Used to draw on to the oled screen
+bool oled_minimal = true;
+bool oled_task_kb(void) {
+ if(!oled_task_user()) { return false; }
+ draw_bongo(oled_minimal);
+ return false;
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case OLED_TOG:
+ if (record->event.pressed) {
+ oled_minimal = !oled_minimal;
+ }
+ return false;
+ default:
+ return true;
+ }
+}
+#endif // endif OLED_ENABLE
diff --git a/keyboards/vinhcatba/uncertainty/uncertainty.h b/keyboards/vinhcatba/uncertainty/uncertainty.h
new file mode 100644
index 000000000000..91a3500b0889
--- /dev/null
+++ b/keyboards/vinhcatba/uncertainty/uncertainty.h
@@ -0,0 +1,10 @@
+// Copyright 2023 Vinh Le (@vinhcatba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+#include "quantum.h"
+
+enum my_keycodes {
+ OLED_TOG = QK_KB
+};
+
diff --git a/keyboards/westm/westmergo/info.json b/keyboards/westm/westmergo/info.json
index 6c2a87df222c..de733b988a8f 100644
--- a/keyboards/westm/westmergo/info.json
+++ b/keyboards/westm/westmergo/info.json
@@ -33,6 +33,7 @@
"diode_direction": "COL2ROW",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
+ "community_layouts": ["alice"],
"layouts": {
"LAYOUT_alice": {
"layout": [
diff --git a/keyboards/xelus/valor/rev1/info.json b/keyboards/xelus/valor/rev1/info.json
index 324a57d180bd..a07e426978e7 100644
--- a/keyboards/xelus/valor/rev1/info.json
+++ b/keyboards/xelus/valor/rev1/info.json
@@ -34,11 +34,91 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["alice_split_bs"],
+ "community_layouts": ["alice", "alice_split_bs"],
"layout_aliases": {
"LAYOUT_all": "LAYOUT_alice_split_bs"
},
"layouts": {
+ "LAYOUT_alice": {
+ "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": [0, 8], "x": 10.25, "y": 0},
+ {"matrix": [0, 9], "x": 11.25, "y": 0},
+ {"matrix": [0, 10], "x": 12.25, "y": 0},
+ {"matrix": [0, 11], "x": 13.25, "y": 0},
+ {"matrix": [0, 12], "x": 14.25, "y": 0},
+ {"matrix": [0, 13], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+
+ {"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 2.75, "y": 1},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+
+ {"matrix": [1, 7], "x": 9.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.75, "y": 1},
+ {"matrix": [1, 9], "x": 11.75, "y": 1},
+ {"matrix": [1, 10], "x": 12.75, "y": 1},
+ {"matrix": [1, 11], "x": 13.75, "y": 1},
+ {"matrix": [1, 12], "x": 14.75, "y": 1},
+ {"matrix": [1, 13], "x": 15.75, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3, "y": 2},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+
+ {"matrix": [2, 7], "x": 10, "y": 2},
+ {"matrix": [2, 8], "x": 11, "y": 2},
+ {"matrix": [2, 9], "x": 12, "y": 2},
+ {"matrix": [2, 10], "x": 13, "y": 2},
+ {"matrix": [2, 11], "x": 14, "y": 2},
+ {"matrix": [2, 12], "x": 15, "y": 2},
+ {"matrix": [2, 13], "x": 16, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.5, "y": 3},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+
+ {"matrix": [3, 7], "x": 9.5, "y": 3},
+ {"matrix": [3, 8], "x": 10.5, "y": 3},
+ {"matrix": [3, 9], "x": 11.5, "y": 3},
+ {"matrix": [3, 10], "x": 12.5, "y": 3},
+ {"matrix": [3, 11], "x": 13.5, "y": 3},
+ {"matrix": [3, 12], "x": 14.5, "y": 3},
+ {"matrix": [3, 13], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 17.25, "y": 3},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 5.75, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 7.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
"LAYOUT_alice_split_bs": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
diff --git a/keyboards/xelus/valor/rev1/matrix_diagram.md b/keyboards/xelus/valor/rev1/matrix_diagram.md
new file mode 100644
index 000000000000..2c4e53a40bf5
--- /dev/null
+++ b/keyboards/xelus/valor/rev1/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Xelus Valor Rev. 1
+
+```
+ ┌───────┐
+ 2u Backspace │0E │
+ └───────┘
+ ┌───┐ ┌───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┐
+ │00 │ │01 │02 │03 │04 │05 │06 │07 │ │08 │09 │0A │0B │0C │0D │0E │2E │
+ ┌┴──┬┘ ┌┴───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┘ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┐
+ │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 │
+└───┘ ┌┴──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───────┬──┴┐
+ │31 │32 │33 │34 │35 │36 │ │37 │38 │39 │3A │3B │3C │3D │3E │
+ ├─────┬──┴──┬┴───┴┬──┴───┴┬──┴──┐ ├───┴───┴──┬┴───┴┬──┴───┴──────┬──┴──┬┘
+ │41 │ │43 │45 │46 │ │48 │4A │ │4D │
+ └─────┘ └─────┴───────┴─────┘ └──────────┴─────┘ └─────┘
+ ┌────────────┐
+ 2.75u RShift │3D │
+ └────────────┘
+ ┌─────────┬───┐
+ │45 │46 │ 2.25u-1u Left Space
+ └─────────┴───┘
+```
diff --git a/keyboards/xelus/valor/rev2/info.json b/keyboards/xelus/valor/rev2/info.json
index a8068eff8974..cdb3bb994766 100644
--- a/keyboards/xelus/valor/rev2/info.json
+++ b/keyboards/xelus/valor/rev2/info.json
@@ -22,11 +22,90 @@
"diode_direction": "COL2ROW",
"processor": "STM32L422",
"bootloader": "stm32-dfu",
- "community_layouts": ["alice_split_bs"],
+ "community_layouts": ["alice", "alice_split_bs"],
"layout_aliases": {
"LAYOUT_all": "LAYOUT_alice_split_bs"
},
"layouts": {
+ "LAYOUT_alice": {
+ "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": [0, 8], "x": 10.25, "y": 0},
+ {"matrix": [0, 9], "x": 11.25, "y": 0},
+ {"matrix": [0, 10], "x": 12.25, "y": 0},
+ {"matrix": [0, 11], "x": 13.25, "y": 0},
+ {"matrix": [0, 12], "x": 14.25, "y": 0},
+ {"matrix": [0, 13], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+
+ {"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 2.75, "y": 1},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+
+ {"matrix": [1, 7], "x": 9.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.75, "y": 1},
+ {"matrix": [1, 9], "x": 11.75, "y": 1},
+ {"matrix": [1, 10], "x": 12.75, "y": 1},
+ {"matrix": [1, 11], "x": 13.75, "y": 1},
+ {"matrix": [1, 12], "x": 14.75, "y": 1},
+ {"matrix": [1, 13], "x": 15.75, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3, "y": 2},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+
+ {"matrix": [2, 7], "x": 10, "y": 2},
+ {"matrix": [2, 8], "x": 11, "y": 2},
+ {"matrix": [2, 9], "x": 12, "y": 2},
+ {"matrix": [2, 10], "x": 13, "y": 2},
+ {"matrix": [2, 11], "x": 14, "y": 2},
+ {"matrix": [2, 12], "x": 15, "y": 2},
+ {"matrix": [2, 13], "x": 16, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.5, "y": 3},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+
+ {"matrix": [3, 7], "x": 9.5, "y": 3},
+ {"matrix": [3, 8], "x": 10.5, "y": 3},
+ {"matrix": [3, 9], "x": 11.5, "y": 3},
+ {"matrix": [3, 10], "x": 12.5, "y": 3},
+ {"matrix": [3, 11], "x": 13.5, "y": 3},
+ {"matrix": [3, 12], "x": 14.5, "y": 3},
+ {"matrix": [3, 13], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 17.25, "y": 3},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 5.75, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 7.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
"LAYOUT_alice_split_bs": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
diff --git a/keyboards/xelus/valor/rev2/matrix_diagram.md b/keyboards/xelus/valor/rev2/matrix_diagram.md
new file mode 100644
index 000000000000..b8a071af530b
--- /dev/null
+++ b/keyboards/xelus/valor/rev2/matrix_diagram.md
@@ -0,0 +1,21 @@
+# Matrix Diagram for Xelus Valor Rev. 2
+
+```
+ ┌───────┐
+ 2u Backspace │0E │
+ └───────┘
+ ┌───┐ ┌───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┐
+ │00 │ │01 │02 │03 │04 │05 │06 │07 │ │08 │09 │0A │0B │0C │0D │0E │2E │
+ ┌┴──┬┘ ┌┴───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┘ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┐
+ │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 │
+└───┘ ┌┴──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───────┬──┴┐
+ │31 │32 │33 │34 │35 │36 │ │37 │38 │39 │3A │3B │3C │3D │3E │
+ ├─────┬──┴──┬┴───┴┬──┴───┴──┬┴──┐ ├───┴───┴──┬┴───┴┬──┴───┴──────┬──┴──┬┘
+ │41 │ │43 │45 │46 │ │48 │4A │ │4D │
+ └─────┘ └─────┴─────────┴───┘ └──────────┴─────┘ └─────┘
+ ┌────────────┐
+ 2.75u RShift │3D │
+ └────────────┘
+```
diff --git a/keyboards/yampad/keymaps/default/keymap.c b/keyboards/yampad/keymaps/default/keymap.c
index f54d4f33b07a..61e6d8ff7467 100644
--- a/keyboards/yampad/keymaps/default/keymap.c
+++ b/keyboards/yampad/keymaps/default/keymap.c
@@ -22,6 +22,7 @@ SOFTWARE.
*/
#include QMK_KEYBOARD_H
+#include
// 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.
diff --git a/keyboards/yampad/keymaps/via/keymap.c b/keyboards/yampad/keymaps/via/keymap.c
index f54d4f33b07a..61e6d8ff7467 100644
--- a/keyboards/yampad/keymaps/via/keymap.c
+++ b/keyboards/yampad/keymaps/via/keymap.c
@@ -22,6 +22,7 @@ SOFTWARE.
*/
#include QMK_KEYBOARD_H
+#include
// 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.
diff --git a/keyboards/yampad/yampad.c b/keyboards/yampad/yampad.c
index 45b0c42484c3..94eac85089ea 100644
--- a/keyboards/yampad/yampad.c
+++ b/keyboards/yampad/yampad.c
@@ -15,6 +15,7 @@
* along with this program. If not, see .
*/
#include "quantum.h"
+#include
#if defined(OLED_ENABLE)
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
diff --git a/keyboards/yiancardesigns/seigaiha/info.json b/keyboards/yiancardesigns/seigaiha/info.json
index 26ab6ab528aa..91a0529e88a9 100644
--- a/keyboards/yiancardesigns/seigaiha/info.json
+++ b/keyboards/yiancardesigns/seigaiha/info.json
@@ -14,8 +14,247 @@
},
"processor": "atmega328p",
"bootloader": "usbasploader",
- "community_layouts": ["alice_split_bs"],
+ "community_layouts": ["alice", "alice_split_bs"],
"layouts": {
+ "LAYOUT_alice": {
+ "layout": [
+ {"matrix": [1, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+
+ {"matrix": [0, 7], "x": 10.25, "y": 0},
+ {"matrix": [0, 8], "x": 11.25, "y": 0},
+ {"matrix": [0, 9], "x": 12.25, "y": 0},
+ {"matrix": [0, 10], "x": 13.25, "y": 0},
+ {"matrix": [0, 11], "x": 14.25, "y": 0},
+ {"matrix": [0, 12], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0, "w": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 1},
+
+ {"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 2.75, "y": 1},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+
+ {"matrix": [1, 7], "x": 9.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.75, "y": 1},
+ {"matrix": [1, 9], "x": 11.75, "y": 1},
+ {"matrix": [1, 10], "x": 12.75, "y": 1},
+ {"matrix": [1, 11], "x": 13.75, "y": 1},
+ {"matrix": [1, 12], "x": 14.75, "y": 1},
+ {"matrix": [1, 13], "x": 15.75, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1, "w": 1.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3, "y": 2},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+
+ {"matrix": [2, 7], "x": 10, "y": 2},
+ {"matrix": [2, 8], "x": 11, "y": 2},
+ {"matrix": [2, 9], "x": 12, "y": 2},
+ {"matrix": [2, 10], "x": 13, "y": 2},
+ {"matrix": [2, 11], "x": 14, "y": 2},
+ {"matrix": [2, 12], "x": 15, "y": 2},
+ {"matrix": [2, 14], "x": 16, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.5, "y": 3},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+
+ {"matrix": [3, 7], "x": 9.5, "y": 3},
+ {"matrix": [3, 8], "x": 10.5, "y": 3},
+ {"matrix": [3, 9], "x": 11.5, "y": 3},
+ {"matrix": [3, 10], "x": 12.5, "y": 3},
+ {"matrix": [3, 11], "x": 13.5, "y": 3},
+ {"matrix": [3, 12], "x": 14.5, "y": 3},
+ {"matrix": [3, 13], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 17.25, "y": 3},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 5.75, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 7.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_alice_rshift": {
+ "layout": [
+ {"matrix": [1, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+
+ {"matrix": [0, 7], "x": 10.25, "y": 0},
+ {"matrix": [0, 8], "x": 11.25, "y": 0},
+ {"matrix": [0, 9], "x": 12.25, "y": 0},
+ {"matrix": [0, 10], "x": 13.25, "y": 0},
+ {"matrix": [0, 11], "x": 14.25, "y": 0},
+ {"matrix": [0, 12], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0, "w": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 1},
+
+ {"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 2.75, "y": 1},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+
+ {"matrix": [1, 7], "x": 9.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.75, "y": 1},
+ {"matrix": [1, 9], "x": 11.75, "y": 1},
+ {"matrix": [1, 10], "x": 12.75, "y": 1},
+ {"matrix": [1, 11], "x": 13.75, "y": 1},
+ {"matrix": [1, 12], "x": 14.75, "y": 1},
+ {"matrix": [1, 13], "x": 15.75, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1, "w": 1.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3, "y": 2},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+
+ {"matrix": [2, 7], "x": 10, "y": 2},
+ {"matrix": [2, 8], "x": 11, "y": 2},
+ {"matrix": [2, 9], "x": 12, "y": 2},
+ {"matrix": [2, 10], "x": 13, "y": 2},
+ {"matrix": [2, 11], "x": 14, "y": 2},
+ {"matrix": [2, 12], "x": 15, "y": 2},
+ {"matrix": [2, 14], "x": 16, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.5, "y": 3},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+
+ {"matrix": [3, 7], "x": 9.5, "y": 3},
+ {"matrix": [3, 8], "x": 10.5, "y": 3},
+ {"matrix": [3, 9], "x": 11.5, "y": 3},
+ {"matrix": [3, 10], "x": 12.5, "y": 3},
+ {"matrix": [3, 11], "x": 13.5, "y": 3},
+ {"matrix": [3, 12], "x": 14.5, "y": 3},
+ {"matrix": [3, 13], "x": 15.5, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 5.75, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 7.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_alice_rshift_split_bs": {
+ "layout": [
+ {"matrix": [1, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+
+ {"matrix": [0, 7], "x": 10.25, "y": 0},
+ {"matrix": [0, 8], "x": 11.25, "y": 0},
+ {"matrix": [0, 9], "x": 12.25, "y": 0},
+ {"matrix": [0, 10], "x": 13.25, "y": 0},
+ {"matrix": [0, 11], "x": 14.25, "y": 0},
+ {"matrix": [0, 12], "x": 15.25, "y": 0},
+ {"matrix": [0, 13], "x": 16.25, "y": 0},
+ {"matrix": [0, 14], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1},
+
+ {"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 2.75, "y": 1},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+
+ {"matrix": [1, 7], "x": 9.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.75, "y": 1},
+ {"matrix": [1, 9], "x": 11.75, "y": 1},
+ {"matrix": [1, 10], "x": 12.75, "y": 1},
+ {"matrix": [1, 11], "x": 13.75, "y": 1},
+ {"matrix": [1, 12], "x": 14.75, "y": 1},
+ {"matrix": [1, 13], "x": 15.75, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1, "w": 1.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3, "y": 2},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+
+ {"matrix": [2, 7], "x": 10, "y": 2},
+ {"matrix": [2, 8], "x": 11, "y": 2},
+ {"matrix": [2, 9], "x": 12, "y": 2},
+ {"matrix": [2, 10], "x": 13, "y": 2},
+ {"matrix": [2, 11], "x": 14, "y": 2},
+ {"matrix": [2, 12], "x": 15, "y": 2},
+ {"matrix": [2, 14], "x": 16, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.5, "y": 3},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+
+ {"matrix": [3, 7], "x": 9.5, "y": 3},
+ {"matrix": [3, 8], "x": 10.5, "y": 3},
+ {"matrix": [3, 9], "x": 11.5, "y": 3},
+ {"matrix": [3, 10], "x": 12.5, "y": 3},
+ {"matrix": [3, 11], "x": 13.5, "y": 3},
+ {"matrix": [3, 12], "x": 14.5, "y": 3},
+ {"matrix": [3, 13], "x": 15.5, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 5.75, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 7.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
"LAYOUT_alice_split_bs": {
"layout": [
{"matrix": [1, 0], "x": 0, "y": 0},
diff --git a/keyboards/yiancardesigns/seigaiha/matrix_diagram.md b/keyboards/yiancardesigns/seigaiha/matrix_diagram.md
new file mode 100644
index 000000000000..7ab40f87f004
--- /dev/null
+++ b/keyboards/yiancardesigns/seigaiha/matrix_diagram.md
@@ -0,0 +1,21 @@
+# Matrix Diagram for Yiancar-Designs Seigaiha
+
+```
+ ┌───────┐
+ 2u Backspace │0E │
+ └───────┘
+ ┌───┐ ┌───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┐
+ │10 │ │00 │01 │02 │03 │04 │05 │06 │ │07 │08 │09 │0A │0B │0C │0D │0E │
+ ┌┴──┬┘ ┌┴───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┘ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┐
+ │20 │ │11 │12 │13 │14 │15 │16 │ │17 │18 │19 │1A │1B │1C │1D │1E │
+┌┴──┬┘ ┌┴─────┼───┼───┼───┼───┼───┤ └┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴──────┴┐
+│30 │ │21 │22 │23 │24 │25 │26 │ │27 │28 │29 │2A │2B │2C │2E │
+└───┘ ┌┴──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───────┬──┴┐
+ │31 │32 │33 │34 │35 │36 │ │37 │38 │39 │3A │3B │3C │3D │3E │
+ ├─────┬──┴──┬┴───┴┬──┴───┴┬──┴──┐ ├───┴───┴──┬┴───┴┬──┴───┴──────┬──┴──┬┘
+ │41 │ │43 │45 │46 │ │48 │4A │ │4E │
+ └─────┘ └─────┴───────┴─────┘ └──────────┴─────┘ └─────┘
+ ┌────────────┐
+ 2.75u RShift │3D │
+ └────────────┘
+```
diff --git a/keyboards/yushakobo/navpad/10/keymaps/via/keymap.c b/keyboards/yushakobo/navpad/10/keymaps/via/keymap.c
index 790ac9dd838b..0f9065a63485 100644
--- a/keyboards/yushakobo/navpad/10/keymaps/via/keymap.c
+++ b/keyboards/yushakobo/navpad/10/keymaps/via/keymap.c
@@ -53,17 +53,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-#ifdef ENCODER_ENABLE
-bool encoder_update_user(uint8_t index, bool clockwise) {
- if (index == 0) { /* First encoder */
- if (clockwise) {
- tap_code16(KC_WH_U);
- } else {
- tap_code16(KC_WH_D);
- }
- }
- return false;
-}
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_BASE] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) },
+ [_FN1] = { ENCODER_CCW_CW(KC_NO, KC_NO) },
+ [_FN2] = { ENCODER_CCW_CW(KC_NO, KC_NO) },
+ [_FN3] = { ENCODER_CCW_CW(KC_NO, KC_NO) },
+};
#endif
#ifdef RGBLIGHT_LAYERS
diff --git a/keyboards/yushakobo/navpad/10/keymaps/via/rules.mk b/keyboards/yushakobo/navpad/10/keymaps/via/rules.mk
index 036bd6d1c3ec..715838ecc5d9 100644
--- a/keyboards/yushakobo/navpad/10/keymaps/via/rules.mk
+++ b/keyboards/yushakobo/navpad/10/keymaps/via/rules.mk
@@ -1 +1,2 @@
-VIA_ENABLE = yes
\ No newline at end of file
+ENCODER_MAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/layouts/default/60_ansi_wkl/default_60_ansi_wkl/keymap.c b/layouts/default/60_ansi_wkl/default_60_ansi_wkl/keymap.c
new file mode 100644
index 000000000000..1307ae1600da
--- /dev/null
+++ b/layouts/default/60_ansi_wkl/default_60_ansi_wkl/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] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ` │ 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 │ , │ . │ / │ Shift │
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤
+ * │Ctrl │ │ Alt │ │ Alt │ │ Ctrl│
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘
+ */
+ [0] = LAYOUT_60_ansi_wkl(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ )
+};
diff --git a/layouts/default/60_ansi_wkl/info.json b/layouts/default/60_ansi_wkl/info.json
new file mode 100644
index 000000000000..9d502e41687c
--- /dev/null
+++ b/layouts/default/60_ansi_wkl/info.json
@@ -0,0 +1,73 @@
+{
+ "keyboard_name": "60% ANSI Winkeyless layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_ansi_wkl": {
+ "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, "w":2},
+
+ {"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.5, "y":1, "w":1.5},
+
+ {"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, "w":2.25},
+
+ {"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, "w":2.75},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_ansi_wkl/layout.json b/layouts/default/60_ansi_wkl/layout.json
new file mode 100644
index 000000000000..19f5466dde29
--- /dev/null
+++ b/layouts/default/60_ansi_wkl/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","",{w:2},""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
+[{w:2.25},"","","","","","","","","","","",{w:2.75},""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},""]
diff --git a/layouts/default/60_ansi_wkl/readme.md b/layouts/default/60_ansi_wkl/readme.md
new file mode 100644
index 000000000000..c4c7e5541f3e
--- /dev/null
+++ b/layouts/default/60_ansi_wkl/readme.md
@@ -0,0 +1,3 @@
+# 60_ansi_wkl
+
+ LAYOUT_60_ansi_wkl
diff --git a/layouts/default/60_ansi_wkl_split_bs_rshift/default_60_ansi_wkl_split_bs_rshift/keymap.c b/layouts/default/60_ansi_wkl_split_bs_rshift/default_60_ansi_wkl_split_bs_rshift/keymap.c
new file mode 100644
index 000000000000..4fddeeb4c5df
--- /dev/null
+++ b/layouts/default/60_ansi_wkl_split_bs_rshift/default_60_ansi_wkl_split_bs_rshift/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] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Del│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ 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 │ , │ . │ / │Shift │Sft│
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+ * │Ctrl │ │ Alt │ │ Alt │ │ Ctrl│
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘
+ */
+ [0] = LAYOUT_60_ansi_wkl_split_bs_rshift(
+ 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_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_RSFT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ )
+};
diff --git a/layouts/default/60_ansi_wkl_split_bs_rshift/info.json b/layouts/default/60_ansi_wkl_split_bs_rshift/info.json
new file mode 100644
index 000000000000..8cc625781654
--- /dev/null
+++ b/layouts/default/60_ansi_wkl_split_bs_rshift/info.json
@@ -0,0 +1,75 @@
+{
+ "keyboard_name": "60% ANSI Winkeyless layout with split Backspace and split Right Shift",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_ansi_wkl_split_bs_rshift": {
+ "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.5, "y":1, "w":1.5},
+
+ {"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, "w":2.25},
+
+ {"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, "w":1.75},
+ {"x":14, "y":3},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_ansi_wkl_split_bs_rshift/layout.json b/layouts/default/60_ansi_wkl_split_bs_rshift/layout.json
new file mode 100644
index 000000000000..e333df5e0b37
--- /dev/null
+++ b/layouts/default/60_ansi_wkl_split_bs_rshift/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","","",""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
+[{w:2.25},"","","","","","","","","","","",{w:1.75},"",""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},""]
diff --git a/layouts/default/60_ansi_wkl_split_bs_rshift/readme.md b/layouts/default/60_ansi_wkl_split_bs_rshift/readme.md
new file mode 100644
index 000000000000..c34c18a0ec0a
--- /dev/null
+++ b/layouts/default/60_ansi_wkl_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# 60_ansi_wkl_split_bs_rshift
+
+ LAYOUT_60_ansi_wkl_split_bs_rshift
diff --git a/layouts/default/60_iso_tsangan_split_bs_rshift/default_60_iso_tsangan_split_bs_rshift/keymap.c b/layouts/default/60_iso_tsangan_split_bs_rshift/default_60_iso_tsangan_split_bs_rshift/keymap.c
new file mode 100644
index 000000000000..2f63749755bf
--- /dev/null
+++ b/layouts/default/60_iso_tsangan_split_bs_rshift/default_60_iso_tsangan_split_bs_rshift/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] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Sft│
+ * ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+ * │Ctrl │GUI│ Alt │ │ Alt │GUI│ Ctrl│
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+ */
+ [0] = LAYOUT_60_iso_tsangan_split_bs_rshift(
+ 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ )
+};
diff --git a/layouts/default/60_iso_tsangan_split_bs_rshift/info.json b/layouts/default/60_iso_tsangan_split_bs_rshift/info.json
new file mode 100644
index 000000000000..277afd9d5c86
--- /dev/null
+++ b/layouts/default/60_iso_tsangan_split_bs_rshift/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "60% ISO layout with split Backspace, split Right Shift, and Tsangan Bottom Row",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "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":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":13.75, "y":1, "w":1.25, "h":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"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, "w":1.75},
+ {"x":14, "y":3},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":1.5, "y":4},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":12.5, "y":4},
+ {"x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_iso_tsangan_split_bs_rshift/layout.json b/layouts/default/60_iso_tsangan_split_bs_rshift/layout.json
new file mode 100644
index 000000000000..99f729bda1a5
--- /dev/null
+++ b/layouts/default/60_iso_tsangan_split_bs_rshift/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:1.25},"","","","","","","","","","","","",{w:1.75},"",""],
+[{w:1.5},"","",{w:1.5},"",{w:7},"",{w:1.5},"","",{w:1.5},""]
diff --git a/layouts/default/60_iso_tsangan_split_bs_rshift/readme.md b/layouts/default/60_iso_tsangan_split_bs_rshift/readme.md
new file mode 100644
index 000000000000..4313926ca191
--- /dev/null
+++ b/layouts/default/60_iso_tsangan_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# 60_iso_tsangan_split_bs_rshift
+
+ LAYOUT_60_iso_tsangan_split_bs_rshift
diff --git a/layouts/default/60_iso_wkl/default_60_iso_wkl/keymap.c b/layouts/default/60_iso_wkl/default_60_iso_wkl/keymap.c
new file mode 100644
index 000000000000..a46aaf226c72
--- /dev/null
+++ b/layouts/default/60_iso_wkl/default_60_iso_wkl/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] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ` │ 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 │ ; │ ' │ # │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │
+ * ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤
+ * │Ctrl │ │ Alt │ │ Alt │ │ Ctrl│
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘
+ */
+ [0] = LAYOUT_60_iso_wkl(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ )
+};
diff --git a/layouts/default/60_iso_wkl/info.json b/layouts/default/60_iso_wkl/info.json
new file mode 100644
index 000000000000..2dab40bd818f
--- /dev/null
+++ b/layouts/default/60_iso_wkl/info.json
@@ -0,0 +1,74 @@
+{
+ "keyboard_name": "60% ISO Winkeyless layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_iso_wkl": {
+ "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, "w":2},
+
+ {"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":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":13.75, "y":1, "w":1.25, "h":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"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, "w":2.75},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_iso_wkl/layout.json b/layouts/default/60_iso_wkl/layout.json
new file mode 100644
index 000000000000..84e7431988e6
--- /dev/null
+++ b/layouts/default/60_iso_wkl/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","",{w:2},""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:1.25},"","","","","","","","","","","","",{w:2.75},""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},""]
diff --git a/layouts/default/60_iso_wkl/readme.md b/layouts/default/60_iso_wkl/readme.md
new file mode 100644
index 000000000000..f109450c9bc4
--- /dev/null
+++ b/layouts/default/60_iso_wkl/readme.md
@@ -0,0 +1,3 @@
+# 60_iso_wkl
+
+ LAYOUT_60_iso_wkl
diff --git a/layouts/default/60_iso_wkl_split_bs_rshift/default_60_iso_wkl_split_bs_rshift/keymap.c b/layouts/default/60_iso_wkl_split_bs_rshift/default_60_iso_wkl_split_bs_rshift/keymap.c
new file mode 100644
index 000000000000..b07d56ea2062
--- /dev/null
+++ b/layouts/default/60_iso_wkl_split_bs_rshift/default_60_iso_wkl_split_bs_rshift/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] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Del│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Sft│
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+ * │Ctrl │ │ Alt │ │ Alt │ │ Ctrl│
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘
+ */
+ [0] = LAYOUT_60_iso_wkl_split_bs_rshift(
+ 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_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_RSFT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ )
+};
diff --git a/layouts/default/60_iso_wkl_split_bs_rshift/info.json b/layouts/default/60_iso_wkl_split_bs_rshift/info.json
new file mode 100644
index 000000000000..b5a745dd4526
--- /dev/null
+++ b/layouts/default/60_iso_wkl_split_bs_rshift/info.json
@@ -0,0 +1,76 @@
+{
+ "keyboard_name": "60% ISO Winkeyless with split Backspace and split Right Shift",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_iso_wkl_split_bs_rshift": {
+ "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":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":13.75, "y":1, "w":1.25, "h":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"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, "w":1.75},
+ {"x":14, "y":3},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_iso_wkl_split_bs_rshift/layout.json b/layouts/default/60_iso_wkl_split_bs_rshift/layout.json
new file mode 100644
index 000000000000..92837c330b72
--- /dev/null
+++ b/layouts/default/60_iso_wkl_split_bs_rshift/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:1.25},"","","","","","","","","","","","",{w:1.75},"",""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},""]
diff --git a/layouts/default/60_iso_wkl_split_bs_rshift/readme.md b/layouts/default/60_iso_wkl_split_bs_rshift/readme.md
new file mode 100644
index 000000000000..c1f4df013bd1
--- /dev/null
+++ b/layouts/default/60_iso_wkl_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# 60_iso_wkl_split_bs_rshift
+
+ LAYOUT_60_iso_wkl_split_bs_rshift
diff --git a/layouts/default/readme.md b/layouts/default/readme.md
index 439613911aca..361fa86792cb 100644
--- a/layouts/default/readme.md
+++ b/layouts/default/readme.md
@@ -94,6 +94,36 @@ LAYOUT_60_ansi_tsangan
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
```
+```
+LAYOUT_60_ansi_wkl
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤
+│ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘
+```
+
+```
+LAYOUT_60_ansi_wkl_split_bs_rshift
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+│ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘
+```
+
```
LAYOUT_60_hhkb
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
@@ -154,6 +184,51 @@ LAYOUT_60_iso_tsangan
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
```
+```
+LAYOUT_60_iso_tsangan_split_bs_rshift
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+│ │ │ │ │ │ │ │
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
+
+```
+LAYOUT_60_iso_wkl
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤
+│ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘
+```
+
+```
+LAYOUT_60_iso_wkl_split_bs_rshift
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+│ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘
+```
+
```
LAYOUT_60_jis
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
diff --git a/lib/python/qmk/build_targets.py b/lib/python/qmk/build_targets.py
new file mode 100644
index 000000000000..721892306075
--- /dev/null
+++ b/lib/python/qmk/build_targets.py
@@ -0,0 +1,189 @@
+# Copyright 2023 Nick Brassel (@tzarc)
+# SPDX-License-Identifier: GPL-2.0-or-later
+import json
+import shutil
+from typing import List
+from pathlib import Path
+from milc import cli
+from qmk.constants import QMK_FIRMWARE, INTERMEDIATE_OUTPUT_PREFIX
+from qmk.commands import find_make, get_make_parallel_args, parse_configurator_json
+from qmk.cli.generate.compilation_database import write_compilation_database
+
+
+class BuildTarget:
+ def __init__(self, keyboard: str, keymap: str):
+ self._keyboard = keyboard
+ self._keyboard_safe = keyboard.replace('/', '_')
+ self._keymap = keymap
+ self._parallel = 1
+ self._clean = False
+ self._compiledb = False
+ self._target = f'{self._keyboard_safe}_{self.keymap}'
+ self._intermediate_output = Path(f'{INTERMEDIATE_OUTPUT_PREFIX}{self._target}')
+ self._generated_files_path = self._intermediate_output / 'src'
+
+ def __str__(self):
+ return f'{self.keyboard}:{self.keymap}'
+
+ def __repr__(self):
+ return f'BuildTarget(keyboard={self.keyboard}, keymap={self.keymap})'
+
+ def configure(self, parallel: int = None, clean: bool = None, compiledb: bool = None) -> None:
+ if parallel is not None:
+ self._parallel = parallel
+ if clean is not None:
+ self._clean = clean
+ if compiledb is not None:
+ self._compiledb = compiledb
+
+ @property
+ def keyboard(self) -> str:
+ return self._keyboard
+
+ @property
+ def keymap(self) -> str:
+ return self._keymap
+
+ def _common_make_args(self, dry_run: bool = False, build_target: str = None):
+ compile_args = [
+ find_make(),
+ *get_make_parallel_args(self._parallel),
+ '-r',
+ '-R',
+ '-f',
+ 'builddefs/build_keyboard.mk',
+ ]
+
+ if not cli.config.general.verbose:
+ compile_args.append('-s')
+
+ verbose = 'true' if cli.config.general.verbose else 'false'
+ color = 'true' if cli.config.general.color else 'false'
+
+ if dry_run:
+ compile_args.append('-n')
+
+ if build_target:
+ compile_args.append(build_target)
+
+ compile_args.extend([
+ f'KEYBOARD={self.keyboard}',
+ f'KEYMAP={self.keymap}',
+ f'KEYBOARD_FILESAFE={self._keyboard_safe}',
+ f'TARGET={self._target}',
+ f'INTERMEDIATE_OUTPUT={self._intermediate_output}',
+ f'VERBOSE={verbose}',
+ f'COLOR={color}',
+ 'SILENT=false',
+ 'QMK_BIN="qmk"',
+ ])
+
+ return compile_args
+
+ def prepare_build(self, build_target: str = None, dry_run: bool = False, **env_vars) -> None:
+ raise NotImplementedError("prepare_build() not implemented in base class")
+
+ def compile_command(self, build_target: str = None, dry_run: bool = False, **env_vars) -> List[str]:
+ raise NotImplementedError("compile_command() not implemented in base class")
+
+ def generate_compilation_database(self, build_target: str = None, skip_clean: bool = False, **env_vars) -> None:
+ self.prepare_build(build_target=build_target, **env_vars)
+ command = self.compile_command(build_target=build_target, dry_run=True, **env_vars)
+ write_compilation_database(command=command, output_path=QMK_FIRMWARE / 'compile_commands.json', skip_clean=skip_clean, **env_vars)
+
+ def compile(self, build_target: str = None, dry_run: bool = False, **env_vars) -> None:
+ if self._clean or self._compiledb:
+ command = [find_make(), "clean"]
+ if dry_run:
+ command.append('-n')
+ cli.log.info('Cleaning with {fg_cyan}%s', ' '.join(command))
+ cli.run(command, capture_output=False)
+
+ if self._compiledb and not dry_run:
+ self.generate_compilation_database(build_target=build_target, skip_clean=True, **env_vars)
+
+ self.prepare_build(build_target=build_target, dry_run=dry_run, **env_vars)
+ command = self.compile_command(build_target=build_target, **env_vars)
+ cli.log.info('Compiling keymap with {fg_cyan}%s', ' '.join(command))
+ if not dry_run:
+ cli.echo('\n')
+ ret = cli.run(command, capture_output=False)
+ if ret.returncode:
+ return ret.returncode
+
+
+class KeyboardKeymapBuildTarget(BuildTarget):
+ def __init__(self, keyboard: str, keymap: str):
+ super().__init__(keyboard, keymap)
+
+ def __repr__(self):
+ return f'KeyboardKeymapTarget(keyboard={self.keyboard}, keymap={self.keymap})'
+
+ def prepare_build(self, build_target: str = None, dry_run: bool = False, **env_vars) -> None:
+ pass
+
+ def compile_command(self, build_target: str = None, dry_run: bool = False, **env_vars) -> List[str]:
+ compile_args = self._common_make_args(dry_run=dry_run, build_target=build_target)
+
+ for key, value in env_vars.items():
+ compile_args.append(f'{key}={value}')
+
+ return compile_args
+
+
+class JsonKeymapBuildTarget(BuildTarget):
+ def __init__(self, json_path):
+ if isinstance(json_path, Path):
+ self.json_path = json_path
+ else:
+ self.json_path = None
+
+ self.json = parse_configurator_json(json_path) # Will load from stdin if provided
+
+ # In case the user passes a keymap.json from a keymap directory directly to the CLI.
+ # e.g.: qmk compile - < keyboards/clueboard/california/keymaps/default/keymap.json
+ self.json["keymap"] = self.json.get("keymap", "default_json")
+
+ super().__init__(self.json['keyboard'], self.json['keymap'])
+
+ self._keymap_json = self._generated_files_path / 'keymap.json'
+
+ def __repr__(self):
+ return f'JsonKeymapTarget(keyboard={self.keyboard}, keymap={self.keymap}, path={self.json_path})'
+
+ def prepare_build(self, build_target: str = None, dry_run: bool = False, **env_vars) -> None:
+ if self._clean:
+ if self._intermediate_output.exists():
+ shutil.rmtree(self._intermediate_output)
+
+ # begin with making the deepest folder in the tree
+ self._generated_files_path.mkdir(exist_ok=True, parents=True)
+
+ # Compare minified to ensure consistent comparison
+ new_content = json.dumps(self.json, separators=(',', ':'))
+ if self._keymap_json.exists():
+ old_content = json.dumps(json.loads(self._keymap_json.read_text(encoding='utf-8')), separators=(',', ':'))
+ if old_content == new_content:
+ new_content = None
+
+ # Write the keymap.json file if different so timestamps are only updated
+ # if the content changes -- running `make` won't treat it as modified.
+ if new_content:
+ self._keymap_json.write_text(new_content, encoding='utf-8')
+
+ def compile_command(self, build_target: str = None, dry_run: bool = False, **env_vars) -> List[str]:
+ compile_args = self._common_make_args(dry_run=dry_run, build_target=build_target)
+ compile_args.extend([
+ f'MAIN_KEYMAP_PATH_1={self._intermediate_output}',
+ f'MAIN_KEYMAP_PATH_2={self._intermediate_output}',
+ f'MAIN_KEYMAP_PATH_3={self._intermediate_output}',
+ f'MAIN_KEYMAP_PATH_4={self._intermediate_output}',
+ f'MAIN_KEYMAP_PATH_5={self._intermediate_output}',
+ f'KEYMAP_JSON={self._keymap_json}',
+ f'KEYMAP_PATH={self._generated_files_path}',
+ ])
+
+ for key, value in env_vars.items():
+ compile_args.append(f'{key}={value}')
+
+ return compile_args
diff --git a/lib/python/qmk/cli/clean.py b/lib/python/qmk/cli/clean.py
index 72b7ffe81071..bdec01e4b663 100644
--- a/lib/python/qmk/cli/clean.py
+++ b/lib/python/qmk/cli/clean.py
@@ -2,7 +2,7 @@
"""
from subprocess import DEVNULL
-from qmk.commands import create_make_target
+from qmk.commands import find_make
from milc import cli
@@ -11,4 +11,4 @@
def clean(cli):
"""Runs `make clean` (or `make distclean` if --all is passed)
"""
- cli.run(create_make_target('distclean' if cli.args.all else 'clean'), capture_output=False, stdin=DEVNULL)
+ cli.run([find_make(), 'distclean' if cli.args.all else 'clean'], capture_output=False, stdin=DEVNULL)
diff --git a/lib/python/qmk/cli/compile.py b/lib/python/qmk/cli/compile.py
index 308be31c206c..3c8f3664ea95 100755
--- a/lib/python/qmk/cli/compile.py
+++ b/lib/python/qmk/cli/compile.py
@@ -7,12 +7,11 @@
from milc import cli
import qmk.path
-from qmk.constants import QMK_FIRMWARE
from qmk.decorators import automagic_keyboard, automagic_keymap
-from qmk.commands import compile_configurator_json, create_make_command, create_make_target, parse_configurator_json, build_environment
+from qmk.commands import build_environment
from qmk.keyboard import keyboard_completer, keyboard_folder_or_all, is_all_keyboards
-from qmk.keymap import keymap_completer, is_keymap_target
-from qmk.cli.generate.compilation_database import write_compilation_database
+from qmk.keymap import keymap_completer, locate_keymap
+from qmk.build_targets import KeyboardKeymapBuildTarget, JsonKeymapBuildTarget
@cli.argument('filename', nargs='?', arg_only=True, type=qmk.path.FileType('r'), completer=FilesCompleter('.json'), help='The configurator export to compile')
@@ -38,53 +37,35 @@ def compile(cli):
from .mass_compile import mass_compile
cli.args.builds = []
cli.args.filter = []
- cli.args.no_temp = False
+ cli.config.mass_compile.keymap = cli.config.compile.keymap
+ cli.config.mass_compile.parallel = cli.config.compile.parallel
+ cli.config.mass_compile.no_temp = False
return mass_compile(cli)
# Build the environment vars
envs = build_environment(cli.args.env)
- # Determine the compile command
- commands = []
-
- current_keyboard = None
- current_keymap = None
+ # Handler for the build target
+ target = None
if cli.args.filename:
- # If a configurator JSON was provided generate a keymap and compile it
- user_keymap = parse_configurator_json(cli.args.filename)
- commands = [compile_configurator_json(user_keymap, target=cli.args.target, parallel=cli.config.compile.parallel, clean=cli.args.clean, **envs)]
+ # if we were given a filename, assume we have a json build target
+ target = JsonKeymapBuildTarget(cli.args.filename)
elif cli.config.compile.keyboard and cli.config.compile.keymap:
- # Generate the make command for a specific keyboard/keymap.
- if not is_keymap_target(cli.config.compile.keyboard, cli.config.compile.keymap):
+ # if we got a keyboard and keymap, attempt to find it
+ if not locate_keymap(cli.config.compile.keyboard, cli.config.compile.keymap):
cli.log.error('Invalid keymap argument.')
cli.print_help()
return False
- if cli.args.clean:
- commands.append(create_make_target('clean'))
- commands.append(create_make_command(cli.config.compile.keyboard, cli.config.compile.keymap, target=cli.args.target, parallel=cli.config.compile.parallel, **envs))
-
- current_keyboard = cli.config.compile.keyboard
- current_keymap = cli.config.compile.keymap
+ # If we got here, then we have a valid keyboard and keymap for a build target
+ target = KeyboardKeymapBuildTarget(cli.config.compile.keyboard, cli.config.compile.keymap)
- if not commands:
+ if not target:
cli.log.error('You must supply a configurator export, both `--keyboard` and `--keymap`, or be in a directory for a keyboard or keymap.')
cli.print_help()
return False
- if cli.args.compiledb:
- if current_keyboard is None or current_keymap is None:
- cli.log.error('You must supply both `--keyboard` and `--keymap` or be in a directory with a keymap to generate a compile_commands.json file.')
- cli.print_help()
- return False
- write_compilation_database(current_keyboard, current_keymap, QMK_FIRMWARE / 'compile_commands.json')
-
- cli.log.info('Compiling keymap with {fg_cyan}%s', ' '.join(commands[-1]))
- if not cli.args.dry_run:
- cli.echo('\n')
- for command in commands:
- ret = cli.run(command, capture_output=False)
- if ret.returncode:
- return ret.returncode
+ target.configure(parallel=cli.config.compile.parallel, clean=cli.args.clean, compiledb=cli.args.compiledb)
+ target.compile(cli.args.target, dry_run=cli.args.dry_run, **envs)
diff --git a/lib/python/qmk/cli/find.py b/lib/python/qmk/cli/find.py
index f2135bbc16c8..83dad6c7a5fa 100644
--- a/lib/python/qmk/cli/find.py
+++ b/lib/python/qmk/cli/find.py
@@ -24,8 +24,8 @@ def find(cli):
cli.log.warning('No filters supplied -- keymaps not parsed, unable to print requested values.')
targets = search_keymap_targets([('all', cli.config.find.keymap)], cli.args.filter, cli.args.print)
- for keyboard, keymap, print_vals in targets:
- print(f'{keyboard}:{keymap}')
+ for target, print_vals in targets:
+ print(f'{target}')
for key, val in print_vals:
print(f' {key}={val}')
diff --git a/lib/python/qmk/cli/flash.py b/lib/python/qmk/cli/flash.py
index 73dea40e95a9..5df31e4781bc 100644
--- a/lib/python/qmk/cli/flash.py
+++ b/lib/python/qmk/cli/flash.py
@@ -4,15 +4,17 @@
A bootloader must be specified.
"""
from argcomplete.completers import FilesCompleter
+from pathlib import Path
from milc import cli
import qmk.path
from qmk.decorators import automagic_keyboard, automagic_keymap
-from qmk.commands import compile_configurator_json, create_make_command, parse_configurator_json, build_environment
+from qmk.commands import build_environment
from qmk.keyboard import keyboard_completer, keyboard_folder
-from qmk.keymap import keymap_completer, is_keymap_target
+from qmk.keymap import keymap_completer, locate_keymap
from qmk.flashers import flasher
+from qmk.build_targets import KeyboardKeymapBuildTarget, JsonKeymapBuildTarget
def _list_bootloaders():
@@ -79,7 +81,7 @@ def flash(cli):
If bootloader is omitted the make system will use the configured bootloader for that keyboard.
"""
- if cli.args.filename and cli.args.filename.suffix in ['.bin', '.hex', '.uf2']:
+ if cli.args.filename and isinstance(cli.args.filename, Path) and cli.args.filename.suffix in ['.bin', '.hex', '.uf2']:
return _flash_binary(cli.args.filename, cli.args.mcu)
if cli.args.bootloaders:
@@ -88,34 +90,27 @@ def flash(cli):
# Build the environment vars
envs = build_environment(cli.args.env)
- # Determine the compile command
- commands = []
+ # Handler for the build target
+ target = None
if cli.args.filename:
- # If a configurator JSON was provided generate a keymap and compile it
- user_keymap = parse_configurator_json(cli.args.filename)
- commands = [compile_configurator_json(user_keymap, cli.args.bootloader, parallel=cli.config.flash.parallel, clean=cli.args.clean, **envs)]
+ # if we were given a filename, assume we have a json build target
+ target = JsonKeymapBuildTarget(cli.args.filename)
elif cli.config.flash.keyboard and cli.config.flash.keymap:
- # Generate the make command for a specific keyboard/keymap.
- if not is_keymap_target(cli.config.flash.keyboard, cli.config.flash.keymap):
+ # if we got a keyboard and keymap, attempt to find it
+ if not locate_keymap(cli.config.flash.keyboard, cli.config.flash.keymap):
cli.log.error('Invalid keymap argument.')
cli.print_help()
return False
- if cli.args.clean:
- commands.append(create_make_command(cli.config.flash.keyboard, cli.config.flash.keymap, 'clean', **envs))
- commands.append(create_make_command(cli.config.flash.keyboard, cli.config.flash.keymap, cli.args.bootloader, parallel=cli.config.flash.parallel, **envs))
+ # If we got here, then we have a valid keyboard and keymap for a build target
+ target = KeyboardKeymapBuildTarget(cli.config.flash.keyboard, cli.config.flash.keymap)
- if not commands:
+ if not target:
cli.log.error('You must supply a configurator export, both `--keyboard` and `--keymap`, or be in a directory for a keyboard or keymap.')
cli.print_help()
return False
- cli.log.info('Compiling keymap with {fg_cyan}%s', ' '.join(commands[-1]))
- if not cli.args.dry_run:
- cli.echo('\n')
- for command in commands:
- ret = cli.run(command, capture_output=False)
- if ret.returncode:
- return ret.returncode
+ target.configure(parallel=cli.config.flash.parallel, clean=cli.args.clean)
+ target.compile(cli.args.bootloader, dry_run=cli.args.dry_run, **envs)
diff --git a/lib/python/qmk/cli/generate/compilation_database.py b/lib/python/qmk/cli/generate/compilation_database.py
index 9e5c266516d0..d25cf0af4af2 100755
--- a/lib/python/qmk/cli/generate/compilation_database.py
+++ b/lib/python/qmk/cli/generate/compilation_database.py
@@ -12,7 +12,7 @@
from milc import cli, MILC
-from qmk.commands import create_make_command
+from qmk.commands import find_make
from qmk.constants import QMK_FIRMWARE
from qmk.decorators import automagic_keyboard, automagic_keymap
from qmk.keyboard import keyboard_completer, keyboard_folder
@@ -76,9 +76,12 @@ def parse_make_n(f: Iterator[str]) -> List[Dict[str, str]]:
return records
-def write_compilation_database(keyboard: str, keymap: str, output_path: Path) -> bool:
+def write_compilation_database(keyboard: str = None, keymap: str = None, output_path: Path = QMK_FIRMWARE / 'compile_commands.json', skip_clean: bool = False, command: List[str] = None) -> bool:
# Generate the make command for a specific keyboard/keymap.
- command = create_make_command(keyboard, keymap, dry_run=True)
+ if not command:
+ from qmk.build_targets import KeyboardKeymapBuildTarget # Lazy load due to circular references
+ target = KeyboardKeymapBuildTarget(keyboard, keymap)
+ command = target.compile_command(dry_run=True)
if not command:
cli.log.error('You must supply both `--keyboard` and `--keymap`, or be in a directory for a keyboard or keymap.')
@@ -90,9 +93,10 @@ def write_compilation_database(keyboard: str, keymap: str, output_path: Path) ->
env.pop("MAKEFLAGS", None)
# re-use same executable as the main make invocation (might be gmake)
- clean_command = [command[0], 'clean']
- cli.log.info('Making clean with {fg_cyan}%s', ' '.join(clean_command))
- cli.run(clean_command, capture_output=False, check=True, env=env)
+ if not skip_clean:
+ clean_command = [find_make(), "clean"]
+ cli.log.info('Making clean with {fg_cyan}%s', ' '.join(clean_command))
+ cli.run(clean_command, capture_output=False, check=True, env=env)
cli.log.info('Gathering build instructions from {fg_cyan}%s', ' '.join(command))
diff --git a/lib/python/qmk/cli/lint.py b/lib/python/qmk/cli/lint.py
index 897a6c4c0d0d..a7c85b5643d9 100644
--- a/lib/python/qmk/cli/lint.py
+++ b/lib/python/qmk/cli/lint.py
@@ -20,6 +20,9 @@ def _list_defaultish_keymaps(kb):
"""
defaultish = ['ansi', 'iso', 'via']
+ # This is only here to flag it as "testable", so it doesn't fly under the radar during PR
+ defaultish.append('vial')
+
keymaps = set()
for x in list_keymaps(kb):
if x in defaultish or x.startswith('default'):
diff --git a/lib/python/qmk/cli/mass_compile.py b/lib/python/qmk/cli/mass_compile.py
index 0142711041a8..d5306c8fe429 100755
--- a/lib/python/qmk/cli/mass_compile.py
+++ b/lib/python/qmk/cli/mass_compile.py
@@ -8,22 +8,21 @@
from milc import cli
from qmk.constants import QMK_FIRMWARE
-from qmk.commands import _find_make, get_make_parallel_args
+from qmk.commands import find_make, get_make_parallel_args, build_environment
from qmk.search import search_keymap_targets, search_make_targets
-from qmk.commands import _find_make, get_make_parallel_args, create_make_command, build_environment
-def mass_compile_targets(targets, clean, dry_run, no_temp, parallel, env):
+def mass_compile_targets(targets, clean, dry_run, no_temp, parallel, **env):
if len(targets) == 0:
return
- make_cmd = _find_make()
+ make_cmd = find_make()
builddir = Path(QMK_FIRMWARE) / '.build'
makefile = builddir / 'parallel_kb_builds.mk'
if dry_run:
cli.log.info('Compilation targets:')
- for target in sorted(targets):
+ for target in sorted(targets, key=lambda t: f'{t}'):
cli.log.info(f"{{fg_cyan}}qmk compile -kb {target[0]} -km {target[1]}{{fg_reset}}")
else:
if clean:
@@ -31,18 +30,16 @@ def mass_compile_targets(targets, clean, dry_run, no_temp, parallel, env):
builddir.mkdir(parents=True, exist_ok=True)
with open(makefile, "w") as f:
-
- envs = build_environment(env)
-
- for target in sorted(targets):
- keyboard_name = target[0]
- keymap_name = target[1]
+ for target, _ in sorted(targets, key=lambda t: f'{t[0]}'):
+ keyboard_name = target.keyboard
+ keymap_name = target.keymap
+ target.configure(parallel=1) # We ignore parallelism on a per-build basis as we defer to the parent make invocation
+ target.prepare_build(**env) # If we've got json targets, allow them to write out any extra info to .build before we kick off `make`
+ command = target.compile_command(**env)
+ command[0] = '+@$(MAKE)' # Override the make so that we can use jobserver to handle parallelism
keyboard_safe = keyboard_name.replace('/', '_')
build_log = f"{QMK_FIRMWARE}/.build/build.log.{os.getpid()}.{keyboard_safe}.{keymap_name}"
failed_log = f"{QMK_FIRMWARE}/.build/failed.log.{os.getpid()}.{keyboard_safe}.{keymap_name}"
-
- make_command = create_make_command(keyboard_name, keymap_name, make_override='+@$(MAKE)', **envs)
- command_text = ' '.join(make_command)
# yapf: disable
f.write(
f"""\
@@ -50,7 +47,7 @@ def mass_compile_targets(targets, clean, dry_run, no_temp, parallel, env):
{keyboard_safe}_{keymap_name}_binary:
@rm -f "{build_log}" || true
@echo "Compiling QMK Firmware for target: '{keyboard_name}:{keymap_name}'..." >>"{build_log}"
- {command_text} \\
+ {' '.join(command)} \\
>>"{build_log}" 2>&1 \\
|| cp "{build_log}" "{failed_log}"
@{{ grep '\[ERRORS\]' "{build_log}" >/dev/null 2>&1 && printf "Build %-64s \e[1;31m[ERRORS]\e[0m\\n" "{keyboard_name}:{keymap_name}" ; }} \\
@@ -73,7 +70,7 @@ def mass_compile_targets(targets, clean, dry_run, no_temp, parallel, env):
# yapf: enable
f.write('\n')
- cli.run([make_cmd, *get_make_parallel_args(parallel), '-f', makefile.as_posix(), 'all'], capture_output=False, stdin=DEVNULL)
+ cli.run([find_make(), *get_make_parallel_args(parallel), '-f', makefile.as_posix(), 'all'], capture_output=False, stdin=DEVNULL)
# Check for failures
failures = [f for f in builddir.glob(f'failed.log.{os.getpid()}.*')]
@@ -106,4 +103,4 @@ def mass_compile(cli):
else:
targets = search_keymap_targets([('all', cli.config.mass_compile.keymap)], cli.args.filter)
- return mass_compile_targets(targets, cli.args.clean, cli.args.dry_run, cli.config.mass_compile.no_temp, cli.config.mass_compile.parallel, cli.args.env)
+ return mass_compile_targets(targets, cli.args.clean, cli.args.dry_run, cli.config.mass_compile.no_temp, cli.config.mass_compile.parallel, **build_environment(cli.args.env))
diff --git a/lib/python/qmk/cli/userspace/compile.py b/lib/python/qmk/cli/userspace/compile.py
index b24a2d7fd6f0..d21886e9080b 100644
--- a/lib/python/qmk/cli/userspace/compile.py
+++ b/lib/python/qmk/cli/userspace/compile.py
@@ -1,6 +1,7 @@
from milc import cli
from qmk.constants import QMK_USERSPACE, HAS_QMK_USERSPACE
+from qmk.commands import build_environment
from qmk.userspace import UserspaceDefs
from qmk.search import search_keymap_targets
from qmk.cli.mass_compile import mass_compile_targets
@@ -22,4 +23,4 @@ def userspace_compile(cli):
build_targets = [(e['keyboard'], e['keymap']) for e in userspace.build_targets]
build_targets = search_keymap_targets(build_targets)
- mass_compile_targets(build_targets, cli.args.clean, cli.args.dry_run, cli.config.userspace_compile.no_temp, cli.config.userspace_compile.parallel, cli.args.env)
+ mass_compile_targets(build_targets, cli.args.clean, cli.args.dry_run, cli.config.userspace_compile.no_temp, cli.config.userspace_compile.parallel, **build_environment(cli.args.env))
diff --git a/lib/python/qmk/commands.py b/lib/python/qmk/commands.py
index f64e30c39758..31e6e9e703c0 100644
--- a/lib/python/qmk/commands.py
+++ b/lib/python/qmk/commands.py
@@ -2,7 +2,6 @@
"""
import os
import sys
-import json
import shutil
from pathlib import Path
@@ -13,12 +12,9 @@
from qmk.json_schema import json_load, validate
-def _find_make(make_override=None):
+def find_make():
"""Returns the correct make command for this environment.
"""
- if make_override:
- return make_override
-
make_cmd = os.environ.get('MAKE')
if not make_cmd:
@@ -27,231 +23,24 @@ def _find_make(make_override=None):
return make_cmd
-def create_make_target(target, dry_run=False, parallel=1, make_override=None, **env_vars):
- """Create a make command
-
- Args:
-
- target
- Usually a make rule, such as 'clean' or 'all'.
-
- dry_run
- make -n -- don't actually build
-
- parallel
- The number of make jobs to run in parallel
-
- **env_vars
- Environment variables to be passed to make.
-
- Returns:
-
- A command that can be run to make the specified keyboard and keymap
- """
- env = []
- make_cmd = _find_make(make_override=make_override)
-
- for key, value in env_vars.items():
- env.append(f'{key}={value}')
-
- if HAS_QMK_USERSPACE:
- env.append(f'QMK_USERSPACE={Path(QMK_USERSPACE).resolve()}')
-
- if cli.config.general.verbose:
- env.append('VERBOSE=true')
-
- return [make_cmd, *(['-n'] if dry_run else []), *get_make_parallel_args(parallel), *env, target]
-
-
-def create_make_command(keyboard, keymap, target=None, dry_run=False, parallel=1, make_override=None, **env_vars):
- """Create a make compile command
-
- Args:
-
- keyboard
- The path of the keyboard, for example 'plank'
-
- keymap
- The name of the keymap, for example 'algernon'
-
- target
- The build target to compile; usually the bootloader parameter to flash.
-
- dry_run
- make -n -- don't actually build
-
- parallel
- The number of make jobs to run in parallel
-
- **env_vars
- Environment variables to be passed to make.
-
- Returns:
-
- A command that can be run to make the specified keyboard and keymap
- """
- # Return a command that can be run to make the keymap and flash if given
- make_command = [_find_make(make_override=make_override)]
-
- if not cli.config.general.verbose:
- make_command.append('-s')
-
- if dry_run:
- make_command.append('-n')
-
- from qmk.keymap import locate_keymap
- keymap_location = locate_keymap(keyboard, keymap)
- keymap_path = keymap_location.parent
-
- make_command.extend([
- *get_make_parallel_args(parallel),
- '-r',
- '-R',
- '-f',
- 'builddefs/build_keyboard.mk',
- ])
-
- if target:
- make_command.append(target)
-
- make_command.extend([
- f'KEYBOARD={keyboard}',
- f'KEYMAP={keymap}',
- 'SILENT=false',
- 'QMK_BIN="qmk"',
- f'MAIN_KEYMAP_PATH_1={keymap_path}',
- f'MAIN_KEYMAP_PATH_2={keymap_path}',
- f'MAIN_KEYMAP_PATH_3={keymap_path}',
- f'MAIN_KEYMAP_PATH_4={keymap_path}',
- f'MAIN_KEYMAP_PATH_5={keymap_path}',
- ])
-
- if cli.config.general.verbose:
- make_command.append('VERBOSE=true')
-
- if HAS_QMK_USERSPACE:
- make_command.append(f'QMK_USERSPACE={Path(QMK_USERSPACE).resolve()}')
-
- for key, value in env_vars.items():
- make_command.append(f'{key}={value}')
-
- return make_command
-
-
def get_make_parallel_args(parallel=1):
"""Returns the arguments for running the specified number of parallel jobs.
"""
parallel_args = []
+ if int(parallel) <= 0:
+ # 0 or -1 means -j without argument (unlimited jobs)
+ parallel_args.append('--jobs')
+ elif int(parallel) > 1:
+ parallel_args.append('--jobs=' + str(parallel))
+
if int(parallel) != 1:
- if int(parallel) <= 0:
- # 0 or -1 means -j without argument (unlimited jobs)
- parallel_args.append('--jobs')
- elif int(parallel) > 1:
- parallel_args.append('--jobs=' + str(parallel))
- # If more than 1 job is used, synchronize parallel output by target
+ # If more than 1 job is used, synchronize parallel output by target
parallel_args.append('--output-sync=target')
return parallel_args
-def compile_configurator_json(user_keymap, target=None, parallel=1, make_override=None, clean=False, **env_vars):
- """Convert a configurator export JSON file into a C file and then compile it.
-
- Args:
-
- user_keymap
- A deserialized keymap export
-
- target
- The build target to compile; usually the bootloader parameter to flash.
-
- parallel
- The number of make jobs to run in parallel
-
- Returns:
-
- A command to run to compile and flash the C file.
- """
- # NOTE: this doesn't just generate the GNU Make command to execute, it also dumps the
- # keymap.json file to the correct location for the build system to find it.
- # Beware of using this func before executing a `make clean` -- it'll get nuked.
- #
- # In case the user passes a keymap.json from a keymap directory directly to the CLI.
- # e.g.: qmk compile - < keyboards/clueboard/california/keymaps/default/keymap.json
- user_keymap["keymap"] = user_keymap.get("keymap", "default_json")
-
- keyboard_filesafe = user_keymap['keyboard'].replace('/', '_')
- compile_target = f'{keyboard_filesafe}_{user_keymap["keymap"]}'
- intermediate_output = Path(f'{INTERMEDIATE_OUTPUT_PREFIX}{keyboard_filesafe}_{user_keymap["keymap"]}')
- keymap_dir = intermediate_output / 'src'
- keymap_json = keymap_dir / 'keymap.json'
-
- if clean:
- if intermediate_output.exists():
- shutil.rmtree(intermediate_output)
-
- # begin with making the deepest folder in the tree
- keymap_dir.mkdir(exist_ok=True, parents=True)
-
- # Compare minified to ensure consistent comparison
- new_content = json.dumps(user_keymap, separators=(',', ':'))
- if keymap_json.exists():
- old_content = json.dumps(json.loads(keymap_json.read_text(encoding='utf-8')), separators=(',', ':'))
- if old_content == new_content:
- new_content = None
-
- # Write the keymap.json file if different
- if new_content:
- keymap_json.write_text(new_content, encoding='utf-8')
-
- # Return a command that can be run to make the keymap and flash if given
- verbose = 'true' if cli.config.general.verbose else 'false'
- color = 'true' if cli.config.general.color else 'false'
- make_command = [_find_make(make_override)]
-
- if not cli.config.general.verbose:
- make_command.append('-s')
-
- make_command.extend([
- *get_make_parallel_args(parallel),
- '-r',
- '-R',
- '-f',
- 'builddefs/build_keyboard.mk',
- ])
-
- if target:
- make_command.append(target)
-
- make_command.extend([
- f'KEYBOARD={user_keymap["keyboard"]}',
- f'KEYMAP={user_keymap["keymap"]}',
- f'KEYBOARD_FILESAFE={keyboard_filesafe}',
- f'TARGET={compile_target}',
- f'INTERMEDIATE_OUTPUT={intermediate_output}',
- f'MAIN_KEYMAP_PATH_1={intermediate_output}',
- f'MAIN_KEYMAP_PATH_2={intermediate_output}',
- f'MAIN_KEYMAP_PATH_3={intermediate_output}',
- f'MAIN_KEYMAP_PATH_4={intermediate_output}',
- f'MAIN_KEYMAP_PATH_5={intermediate_output}',
- f'KEYMAP_JSON={keymap_json}',
- f'KEYMAP_PATH={keymap_dir}',
- f'VERBOSE={verbose}',
- f'COLOR={color}',
- 'SILENT=false',
- 'QMK_BIN="qmk"',
- ])
-
- if HAS_QMK_USERSPACE:
- make_command.append(f'QMK_USERSPACE={Path(QMK_USERSPACE).resolve()}')
-
- for key, value in env_vars.items():
- make_command.append(f'{key}={value}')
-
- return make_command
-
-
def parse_configurator_json(configurator_file):
"""Open and parse a configurator json export
"""
@@ -287,6 +76,10 @@ def build_environment(args):
envs[key] = value
else:
cli.log.warning('Invalid environment variable: %s', env)
+
+ if HAS_QMK_USERSPACE:
+ envs['QMK_USERSPACE'] = Path(QMK_USERSPACE).resolve()
+
return envs
diff --git a/lib/python/qmk/search.py b/lib/python/qmk/search.py
index 12b239ac6722..aaa41641ba31 100644
--- a/lib/python/qmk/search.py
+++ b/lib/python/qmk/search.py
@@ -13,6 +13,7 @@
from qmk.info import keymap_json
import qmk.keyboard
import qmk.keymap
+from qmk.build_targets import KeyboardKeymapBuildTarget, BuildTarget
def _set_log_level(level):
@@ -181,13 +182,13 @@ def f(e):
return targets
-def search_keymap_targets(targets: List[Tuple[str, str]] = [('all', 'default')], filters: List[str] = [], print_vals: List[str] = []) -> List[Tuple[str, str, List[Tuple[str, str]]]]:
+def search_keymap_targets(targets: List[Tuple[str, str]] = [('all', 'default')], filters: List[str] = [], print_vals: List[str] = []) -> List[Tuple[BuildTarget, List[Tuple[str, str]]]]:
"""Search for build targets matching the supplied criteria.
"""
- return list(sorted(_filter_keymap_targets(expand_keymap_targets(targets), filters, print_vals), key=lambda e: (e[0], e[1])))
+ return [(KeyboardKeymapBuildTarget(e[0], e[1]), e[2]) for e in sorted(_filter_keymap_targets(expand_keymap_targets(targets), filters, print_vals), key=lambda e: (e[0], e[1]))]
-def search_make_targets(targets: List[str], filters: List[str] = [], print_vals: List[str] = []) -> List[Tuple[str, str, List[Tuple[str, str]]]]:
+def search_make_targets(targets: List[str], filters: List[str] = [], print_vals: List[str] = []) -> List[Tuple[BuildTarget, List[Tuple[str, str]]]]:
"""Search for build targets matching the supplied criteria.
"""
- return list(sorted(_filter_keymap_targets(expand_make_targets(targets), filters, print_vals), key=lambda e: (e[0], e[1])))
+ return [(KeyboardKeymapBuildTarget(e[0], e[1]), e[2]) for e in sorted(_filter_keymap_targets(expand_make_targets(targets), filters, print_vals), key=lambda e: (e[0], e[1]))]
diff --git a/lib/python/qmk/util.py b/lib/python/qmk/util.py
index 0fcab3d413fb..b1c4c7366b1a 100644
--- a/lib/python/qmk/util.py
+++ b/lib/python/qmk/util.py
@@ -30,7 +30,7 @@ def parallelize():
cli.save_config()
cli.config.user.parallel_search = parallel_search
- # Non-parallel searches use use `map()`
+ # Non-parallel searches use `map()`
if not parallel_search:
yield map
return
diff --git a/quantum/pointing_device/pointing_device.c b/quantum/pointing_device/pointing_device.c
index abb3817b5f65..17dc701a4154 100644
--- a/quantum/pointing_device/pointing_device.c
+++ b/quantum/pointing_device/pointing_device.c
@@ -19,6 +19,8 @@
#include "pointing_device.h"
#include
#include "timer.h"
+#include "gpio.h"
+
#ifdef MOUSEKEY_ENABLE
# include "mousekey.h"
#endif
diff --git a/quantum/pointing_device/pointing_device_auto_mouse.c b/quantum/pointing_device/pointing_device_auto_mouse.c
index fc3106e37e9a..3135b9e531bf 100644
--- a/quantum/pointing_device/pointing_device_auto_mouse.c
+++ b/quantum/pointing_device/pointing_device_auto_mouse.c
@@ -17,6 +17,7 @@
#ifdef POINTING_DEVICE_AUTO_MOUSE_ENABLE
+# include
# include "pointing_device_auto_mouse.h"
# include "debug.h"
# include "action_util.h"