diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 52dfd718c41b..39a8e396becd 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -37,7 +37,7 @@ jobs:
qmk --verbose generate-docs
- name: Deploy
- uses: JamesIves/github-pages-deploy-action@v4.4.2
+ uses: JamesIves/github-pages-deploy-action@v4.4.3
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BASE_BRANCH: master
diff --git a/.github/workflows/feature_branch_update.yml b/.github/workflows/feature_branch_update.yml
index bfc4c7d65e56..097605516093 100644
--- a/.github/workflows/feature_branch_update.yml
+++ b/.github/workflows/feature_branch_update.yml
@@ -18,6 +18,7 @@ jobs:
matrix:
branch:
- xap
+ - riot
steps:
- uses: actions/checkout@v3
diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
index af4fe6abde89..3652071ed6e9 100644
--- a/.github/workflows/format.yml
+++ b/.github/workflows/format.yml
@@ -35,7 +35,7 @@ jobs:
- name: Get changed files
id: file_changes
- uses: tj-actions/changed-files@v36
+ uses: tj-actions/changed-files@v37
- name: Run qmk formatters
shell: 'bash {0}'
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 2b77e29a2838..1c0667abbacd 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -27,7 +27,7 @@ jobs:
- name: Get changed files
id: file_changes
- uses: tj-actions/changed-files@v36
+ uses: tj-actions/changed-files@v37
- name: Print info
run: |
@@ -36,6 +36,7 @@ jobs:
echo '${{ steps.file_changes.outputs.all_changed_files}}'
- name: Run qmk lint
+ if: always()
shell: 'bash {0}'
run: |
QMK_CHANGES=$(echo -e '${{ steps.file_changes.outputs.all_changed_files}}' | sed 's/ /\n/g')
@@ -72,3 +73,32 @@ jobs:
exit 255
fi
exit $exit_code
+
+ - name: Verify at most one added keyboard
+ if: always()
+ shell: 'bash {0}'
+ run: |
+ git reset --hard
+ git clean -xfd
+
+ # Get the keyboard list and count for the target branch
+ git checkout -f ${{ github.base_ref }}
+ git pull --ff-only
+ QMK_KEYBOARDS_BASE=$(qmk list-keyboards)
+ QMK_KEYBOARDS_BASE_COUNT=$(qmk list-keyboards | wc -l)
+
+ # Get the keyboard list and count for the PR
+ git checkout -f ${{ github.head_ref }}
+ git merge --no-commit --squash ${{ github.base_ref }}
+ QMK_KEYBOARDS_PR=$(qmk list-keyboards)
+ QMK_KEYBOARDS_PR_COUNT=$(qmk list-keyboards | wc -l)
+
+ echo "::group::Keyboards changes in this PR"
+ diff -d -U 0 <(echo "$QMK_KEYBOARDS_BASE") <(echo "$QMK_KEYBOARDS_PR") | grep -vE '^(---|\+\+\+|@@)' | sed -e 's@^-@Removed: @g' -e 's@^+@ Added: @g'
+ echo "::endgroup::"
+
+ if [[ $QMK_KEYBOARDS_PR_COUNT -gt $(($QMK_KEYBOARDS_BASE_COUNT + 1)) ]]; then
+ echo "More than one keyboard added in this PR -- see the PR Checklist."
+ echo "::error::More than one keyboard added in this PR -- see the PR Checklist."
+ exit 1
+ fi
diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson
index a656288a8fb6..f1c1f81e9ad6 100644
--- a/data/mappings/keyboard_aliases.hjson
+++ b/data/mappings/keyboard_aliases.hjson
@@ -305,6 +305,9 @@
"kbdfans/kbd67/mkiirgb": {
"target": "kbdfans/kbd67/mkiirgb/v1"
},
+ "keebio/chocopad": {
+ "target": "keebio/chocopad/rev1"
+ },
"keebio/dsp40": {
"target": "keebio/dsp40/rev1"
},
diff --git a/docs/coding_conventions_c.md b/docs/coding_conventions_c.md
index 3f44da713d48..32f6de7ff75f 100644
--- a/docs/coding_conventions_c.md
+++ b/docs/coding_conventions_c.md
@@ -8,8 +8,8 @@ Most of our style is pretty easy to pick up on, but right now it's not entirely
* Closing Brace: Lined up with the first character of the statement that opens the block
* Else If: Place the closing brace at the beginning of the line and the next opening brace at the end of the same line.
* Optional Braces: Always include optional braces.
- * Good: if (condition) { return false; }
- * Bad: if (condition) return false;
+ * Good: `if (condition) { return false; }`
+ * Bad: `if (condition) return false;`
* We encourage use of C style comments: `/* */`
* Think of them as a story describing the feature
* Use them liberally to explain why particular decisions were made.
diff --git a/docs/contributing.md b/docs/contributing.md
index bb46add7892b..4801bb8224a4 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -63,6 +63,7 @@ Most of our style is pretty easy to pick up on. If you are familiar with either
We have a few different types of changes in QMK, each requiring a different level of rigor. We'd like you to keep the following guidelines in mind no matter what type of change you're making.
+* **Before you contribute:** Please make sure your fork is up to date with the upstream `qmk_firmware` repo. This will help minimize CI failures that may not occur for you when compiling locally.
* Separate PRs into logical units. For example, do not submit one PR covering two separate features, instead submit a separate PR for each feature.
* Check for unnecessary whitespace with `git diff --check` before committing.
* Make sure your code change actually compiles.
diff --git a/docs/feature_layers.md b/docs/feature_layers.md
index 697064b49aee..e57642071f4a 100644
--- a/docs/feature_layers.md
+++ b/docs/feature_layers.md
@@ -64,7 +64,7 @@ There are a number of functions (and variables) related to how you can use or ma
| `layer_move(layer)` | Turns specified layer on, and all other layers off. |
| `layer_on(layer)` | Turns specified layer on, leaves all other layers in existing state. |
| `layer_off(layer)` | Turns specified layer off, leaves all other layers in existing state. |
-| `layer_invert(layer)` | Interverts/toggles the state of the specified layer |
+| `layer_invert(layer)` | Inverts/toggles the state of the specified layer |
| `layer_or(layer_mask)` | Turns on layers based on matching bits between specifed layer and existing layer state. |
| `layer_and(layer_mask)` | Turns on layers based on matching enabled bits between specifed layer and existing layer state. |
| `layer_xor(layer_mask)` | Turns on layers based on non-matching bits between specifed layer and existing layer state. |
diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md
index bc86099f1ffe..86dff89eca94 100644
--- a/docs/feature_led_matrix.md
+++ b/docs/feature_led_matrix.md
@@ -433,7 +433,7 @@ The EEPROM for it is currently shared with the RGB Matrix system (it's generally
### Indicators :id=indicators
-If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, you can use the `led_matrix_indicators_kb` or `led_matrix_indicators_user` function for that:
+If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, then you can use the `led_matrix_indicators_kb` function on the keyboard level source file, or `led_matrix_indicators_user` function in the user `keymap.c`.
```c
bool led_matrix_indicators_kb(void) {
if (!led_matrix_indicators_user()) {
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index 75f07b5e64cf..822bc8f73485 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -964,7 +964,7 @@ The EEPROM for it is currently shared with the LED Matrix system (it's generally
### Indicators :id=indicators
-If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, you can use the `rgb_matrix_indicators_kb` or `rgb_matrix_indicators_user` function for that:
+If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, then you can use the `rgb_matrix_indicators_kb` function on the keyboard level source file, or `rgb_matrix_indicators_user` function in the user `keymap.c`.
```c
bool rgb_matrix_indicators_kb(void) {
if (!rgb_matrix_indicators_user()) {
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index 5131658ae158..948bbb241e3a 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -90,7 +90,7 @@ Your RGB lighting can be configured by placing these `#define`s in your `config.
|Define |Default |Description |
|---------------------------|----------------------------|---------------------------------------------------------------------------------------------------------------------------|
-|`RGBLIGHT_HUE_STEP` |`10` |The number of steps to cycle through the hue by |
+|`RGBLIGHT_HUE_STEP` |`8` |The number of steps to cycle through the hue by |
|`RGBLIGHT_SAT_STEP` |`17` |The number of steps to increment the saturation by |
|`RGBLIGHT_VAL_STEP` |`17` |The number of steps to increment the brightness by |
|`RGBLIGHT_LIMIT_VAL` |`255` |The maximum brightness level |
diff --git a/docs/other_vscode.md b/docs/other_vscode.md
index 83ae6e6ed060..49d5035b08eb 100644
--- a/docs/other_vscode.md
+++ b/docs/other_vscode.md
@@ -96,7 +96,7 @@ There are a number of extensions that you may want to install:
* [clangd](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) - _[Optional]_ - This is the language server for C/C++ that VS Code uses. It provides IntelliSense and other features.
* [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) - _[Optional]_ - Helps to keep the code to the QMK Coding Conventions.
* [GitHub Markdown Preview](https://marketplace.visualstudio.com/items?itemName=bierner.github-markdown-preview) - _[Optional]_ - Makes the markdown preview in VS Code more like GitHub's.
-* [VS Live Share Extension Pack](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack) - _[Optional]_ - This extension allows somebody else to access your workspace (or you to access somebody else's workspace) and help out. This is great if you're having issues and need some help from somebody.
+* [VS Live Share Extension Pack](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - _[Optional]_ - This extension allows somebody else to access your workspace (or you to access somebody else's workspace) and help out. This is great if you're having issues and need some help from somebody.
Restart once you've installed any extensions.
diff --git a/docs/pr_checklist.md b/docs/pr_checklist.md
index 65584a953812..0d6b4db206a1 100644
--- a/docs/pr_checklist.md
+++ b/docs/pr_checklist.md
@@ -42,7 +42,7 @@ If there are any inconsistencies with these recommendations, you're best off [cr
- `#include QMK_KEYBOARD_H` preferred to including specific board files
- prefer layer `enum`s to `#define`s
-- require custom keycode `enum`s to `#define`s, first entry must have ` = SAFE_RANGE`
+- custom keycode `enum`s must have first entry `= SAFE_RANGE`
- terminating backslash (`\`) in lines of LAYOUT macro parameters is superfluous and should be removed
- some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap
@@ -132,6 +132,7 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- if using `MO(1)` and `MO(2)` keycodes together to access a third layer, the [Tri Layer](https://docs.qmk.fm/#/feature_tri_layer) feature should be used, rather than manually implementing this using `layer_on/off()` and `update_tri_layer()` functions in the keymap's `process_record_user()`.
- default (and via) keymaps should be "pristine"
- bare minimum to be used as a "clean slate" for another user to develop their own user-specific keymap
+ - what does pristine mean? no custom keycodes. no advanced features like tap dance or macros. basic mod taps and home row mods would be acceptable where their use is necessary
- standard layouts preferred in these keymaps, if possible
- should use [encoder map feature](https://docs.qmk.fm/#/feature_encoders?id=encoder-map), rather than `encoder_update_user()`
- default keymap should not enable VIA -- the VIA integration documentation requires a keymap called `via`
diff --git a/docs/quantum_keycodes.md b/docs/quantum_keycodes.md
index bc68cbc92212..a41681ac85f9 100644
--- a/docs/quantum_keycodes.md
+++ b/docs/quantum_keycodes.md
@@ -15,3 +15,5 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are
|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory) |
|`QK_MAKE` | |Sends `qmk compile -kb (keyboard) -km (keymap)`, or `qmk flash` if shift is held. Puts keyboard into bootloader mode if shift & control are held |
|`QK_REBOOT` |`QK_RBT` |Resets the keyboard. Does not load the bootloader |
+
+!> Note: `QK_MAKE` requires `#define ENABLE_COMPILE_KEYCODE` in your config.h to function.
diff --git a/docs/quantum_painter.md b/docs/quantum_painter.md
index 317a9d9f1a25..5e399183f8b2 100644
--- a/docs/quantum_painter.md
+++ b/docs/quantum_painter.md
@@ -40,7 +40,7 @@ Supported devices:
| `QUANTUM_PAINTER_NUM_FONTS` | `4` | The maximum number of fonts that can be loaded at any one time. |
| `QUANTUM_PAINTER_CONCURRENT_ANIMATIONS` | `4` | The maximum number of animations that can be executed at the same time. |
| `QUANTUM_PAINTER_LOAD_FONTS_TO_RAM` | `FALSE` | Whether or not fonts should be loaded to RAM. Relevant for fonts stored in off-chip persistent storage, such as external flash. |
-| `QUANTUM_PAINTER_PIXDATA_BUFFER_SIZE` | `32` | The limit of the amount of pixel data that can be transmitted in one transaction to the display. Higher values require more RAM on the MCU. |
+| `QUANTUM_PAINTER_PIXDATA_BUFFER_SIZE` | `1024` | The limit of the amount of pixel data that can be transmitted in one transaction to the display. Higher values require more RAM on the MCU. |
| `QUANTUM_PAINTER_SUPPORTS_256_PALETTE` | `FALSE` | If 256-color palettes are supported. Requires significantly more RAM on the MCU. |
| `QUANTUM_PAINTER_SUPPORTS_NATIVE_COLORS` | `FALSE` | If native color range is supported. Requires significantly more RAM on the MCU. |
| `QUANTUM_PAINTER_DEBUG` | _unset_ | Prints out significant amounts of debugging information to CONSOLE output. Significant performance degradation, use only for debugging. |
diff --git a/docs/squeezing_avr.md b/docs/squeezing_avr.md
index ce9e43cdaea1..241b3e7826be 100644
--- a/docs/squeezing_avr.md
+++ b/docs/squeezing_avr.md
@@ -75,7 +75,7 @@ MUSIC_ENABLE = no
There are also some options for layers, that can reduce the firmware size. All of these settings are for your `config.h`.
-You can limit the number of layers that the firmware uses -- if you're using less than 8 layers in total:
+You can limit the number of layers that the firmware uses -- if you're using up to 8 layers in total:
```c
#define LAYER_STATE_8BIT
```
@@ -88,6 +88,21 @@ Or if you're not using layers at all, you can outright remove the functionality
#define NO_ACTION_LAYER
```
+## Magic keycodes
+
+There are two `__attribute__ ((weak))` placeholder functions available to customize magic keycodes. If you are not using that feature to swap keycodes, such as backslash with backspace, add the following to your `keymap.c` or user space code:
+```c
+uint16_t keycode_config(uint16_t keycode) {
+ return keycode;
+}
+```
+Likewise, if you are not using magic keycodes to swap modifiers, such as Control with GUI, add the following to your `keymap.c` or user space code:
+```c
+uint8_t mod_config(uint8_t mod) {
+ return mod;
+}
+```
+Both of them will overwrite the placeholder functions with a simple return statement to reduce firmware size.
## OLED tweaks
diff --git a/keyboards/1upkeyboards/1upocarina/config.h b/keyboards/1upkeyboards/1upocarina/config.h
new file mode 100644
index 000000000000..4431ef6bdbcf
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/config.h
@@ -0,0 +1,70 @@
+/* Copyright 2023 Ziptyze
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define RGB_MATRIX_LED_COUNT 32
+#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+
+# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+// # define ENABLE_RGB_MATRIX_ALPHAS_MODS
+// # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_BAND_SAT
+# define ENABLE_RGB_MATRIX_BAND_VAL
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM
+# define ENABLE_RGB_MATRIX_HUE_WAVE
+// # define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// # define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// # define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+// # define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/1upkeyboards/1upocarina/info.json b/keyboards/1upkeyboards/1upocarina/info.json
new file mode 100644
index 000000000000..6b37eef2b5e1
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/info.json
@@ -0,0 +1,96 @@
+{
+ "manufacturer": "1upkeyboards",
+ "keyboard_name": "1upocarina",
+ "maintainer": "ziptyze",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "board": "GENERIC_RP_RP2040",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x5607",
+ "vid": "0x6F75"
+ },
+ "dynamic_keymap": {
+ "layer_count": 10
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "rgb_matrix": true
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {
+ "pin_a": "GP25", "pin_b": "GP26"
+ }
+ ]
+ },
+ "matrix_pins": {
+ "direct": [
+ ["GP28", "GP29", "GP27", "GP1", "GP2"]
+ ]
+ },
+ "ws2812": {
+ "pin": "GP24"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "layout": [
+ { "flags": 4, "matrix": [0, 0], "x": 23, "y": 26 },
+ { "flags": 4, "matrix": [0, 1], "x": 62, "y": 26 },
+ { "flags": 4, "matrix": [0, 2], "x": 112, "y": 34 },
+ { "flags": 4, "matrix": [0, 3], "x": 161, "y": 26 },
+ { "flags": 4, "matrix": [0, 4], "x": 200, "y": 26 },
+
+ { "flags": 2, "x": 133, "y": 3 },
+ { "flags": 2, "x": 154, "y": 3 },
+ { "flags": 2, "x": 174, "y": 3 },
+ { "flags": 2, "x": 194, "y": 3 },
+ { "flags": 2, "x": 218, "y": 5 },
+
+ { "flags": 2, "x": 221, "y": 19 },
+ { "flags": 2, "x": 221, "y": 31 },
+ { "flags": 2, "x": 221, "y": 44 },
+ { "flags": 2, "x": 217, "y": 58 },
+ { "flags": 2, "x": 195, "y": 61 },
+
+ { "flags": 2, "x": 174, "y": 61 },
+ { "flags": 2, "x": 154, "y": 61 },
+ { "flags": 2, "x": 133, "y": 61 },
+ { "flags": 2, "x": 112, "y": 61 },
+ { "flags": 2, "x": 91, "y": 61 },
+
+ { "flags": 2, "x": 70, "y": 61 },
+ { "flags": 2, "x": 49, "y": 61 },
+ { "flags": 2, "x": 28, "y": 61 },
+ { "flags": 2, "x": 5, "y": 58 },
+ { "flags": 2, "x": 2, "y": 44 },
+
+ { "flags": 2, "x": 2, "y": 31 },
+ { "flags": 2, "x": 2, "y": 19 },
+ { "flags": 2, "x": 5, "y": 5 },
+ { "flags": 2, "x": 28, "y": 3 },
+ { "flags": 2, "x": 49, "y": 3 },
+
+ { "flags": 2, "x": 70, "y": 3 },
+ { "flags": 2, "x": 91, "y": 3 }
+ ]
+ },
+ "layouts": {
+ "LAYOUT_1x5": {
+ "layout": [
+ { "label": "z", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
+ { "label": "x", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
+ { "label": "esc", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
+ { "label": "c", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
+ { "label": "v", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/1upkeyboards/1upocarina/keymaps/default/keymap.c b/keyboards/1upkeyboards/1upocarina/keymaps/default/keymap.c
new file mode 100644
index 000000000000..86e3f440feee
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 ziptyze
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_1x5(
+ KC_Z, KC_X, LT(1, KC_ESC), KC_C, KC_V
+ ),
+
+ [1] = LAYOUT_1x5(
+ RGB_TOG, RGB_MOD, KC_TRNS, RGB_VAD, RGB_VAI
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS)}
+};
+#endif
diff --git a/keyboards/1upkeyboards/1upocarina/keymaps/default/rules.mk b/keyboards/1upkeyboards/1upocarina/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/1upkeyboards/1upocarina/keymaps/via/keymap.c b/keyboards/1upkeyboards/1upocarina/keymaps/via/keymap.c
new file mode 100644
index 000000000000..86e3f440feee
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 ziptyze
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_1x5(
+ KC_Z, KC_X, LT(1, KC_ESC), KC_C, KC_V
+ ),
+
+ [1] = LAYOUT_1x5(
+ RGB_TOG, RGB_MOD, KC_TRNS, RGB_VAD, RGB_VAI
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS)}
+};
+#endif
diff --git a/keyboards/1upkeyboards/1upocarina/keymaps/via/rules.mk b/keyboards/1upkeyboards/1upocarina/keymaps/via/rules.mk
new file mode 100644
index 000000000000..bf70b1f3e09f
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/keymaps/via/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/1upocarina/readme.md b/keyboards/1upkeyboards/1upocarina/readme.md
new file mode 100644
index 000000000000..280c9f01d6df
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/readme.md
@@ -0,0 +1,22 @@
+# 1upocarina
+
+This keyboard is the Ocarina from 1upkeyboards. It is a five button keypad designed for osu. There is an option to add an encoder to the center position, and the keypad features in-switch per-key addressable RGB leds, as well as 27 right angle underglow RGB leds for very bright and smooth lighting effects.
+
+* Keyboard Maintainer: [ziptyze](https://github.com/ziptyze)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 1upkeyboards/1upocarina:default
+
+Flashing example for this keyboard:
+
+ make 1upkeyboards/1upocarina:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Hold the button on the back of the PCB and plug in the keyboard
diff --git a/keyboards/1upkeyboards/1upocarina/rules.mk b/keyboards/1upkeyboards/1upocarina/rules.mk
new file mode 100644
index 000000000000..8e853e0af70b
--- /dev/null
+++ b/keyboards/1upkeyboards/1upocarina/rules.mk
@@ -0,0 +1 @@
+WS2812_DRIVER = vendor
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/config.h b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/config.h
new file mode 100644
index 000000000000..834b7ee0ab23
--- /dev/null
+++ b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+
+# define TAPPING_TERM 160
+# define TAPPING_TERM_PER_KEY
+# define HOLD_ON_OTHER_KEY_PRESS
+# define QUICK_TAP_TERM TAPPING_TERM / 2
+# define QUICK_TAP_TERM_PER_KEY
+
+
+
diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/keymap.c b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/keymap.c
new file mode 100644
index 000000000000..636aad675bc7
--- /dev/null
+++ b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/keymap.c
@@ -0,0 +1,290 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+
+
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Workman
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ TAB │ Q │ D │ R │ W │ B │ │ J │ F │ U │ P │ BSPC│ BSPC│
+ * │ ESC │ ESC │ │ │ │ SYM │ │ SYM │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │ TAB │ A │ S │ H ┃ T ┃ G │ │ Y ┃ N ┃ E │ O │ I │ │
+ * │SHIFT│ │ │ ┃ EX ┃ │ │ ┃ ┃ │ │ENTER│ENTER│
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │SHIFT| Z │ X │ M │ C │ V │ │ K │ L │ SPC │ SPC │ / │ UP |
+ * │ │ │ │ │ │ │ │ │ │ , │ . │ │RIGHT|
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ FN │CTRL │ OS │ ALT │LOWER│ │ │ │RAISE│ SS │CLIP │COPY │ DN │
+ * │ │ │ │ │ │ │ │ │ │ │ │PASTE│LEFT │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [_WM] = LAYOUT_ortho_4x12_wrapper (
+ RGB_TOG,
+ _____________WORKMAN_412_001_L_____________, _____________WORKMAN_412_001_R_____________,
+ _____________WORKMAN_412_002_L_____________, _____________WORKMAN_412_002_R_____________,
+ _____________WORKMAN_412_003_L_____________, _____________WORKMAN_412_003_R_____________,
+ _____________WORKMAN_412_004_L_____________, _____________WORKMAN_412_004_R_____________
+ ),
+
+ [_QW] = LAYOUT_ortho_4x12_wrapper (
+ RGB_TOG,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
+ KC_ESC, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_ENT,
+ _____________WORKMAN_412_004_L_____________, _____________WORKMAN_412_004_R_____________
+ ),
+
+
+
+
+ /* Lower
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ │ () │ [] │ /\ │ │ │ │ │ 7 │ 8 │ 9 │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │ │ @ # │ & % │ ┃ ┃ │ │ ┃ 4 ┃ 5 │ 6 │ │ │
+ * │ │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │ │
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ 0 │ 1 │ 2 │ 3 │ │ UP │
+ * │ │ │ │ │ │ │ │ │ │ 0 │ │ │RIGHT│
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │LOWER│ │ │ │BPSC │ SPC │ . │ │ DN │
+ * │ │ │ │ │ │ │ │ │ │ │ ENT │ │LEFT │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [_LOWER] = LAYOUT_ortho_4x12_wrapper (
+ KC_MUTE,
+ _______________LOWER_412_L1________________, _______________LOWER_412_R1________________,
+ _______________LOWER_412_L2________________, _______________LOWER_412_R2________________,
+ _______________LOWER_412_L3________________, _______________LOWER_412_R3________________,
+ _______________LOWER_412_L4________________, _______________LOWER_412_R4________________
+ ),
+
+
+ /* RAISE
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │BOOT │DEBUG│ │ │ │MAKE │ │ │ │ F7 │ F8 │ F9 │ F10 │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │ │ RGB | RGB | RGB ┃ RGB ┃ WM │ │ ┃ / \ ┃ F4 │ F5 │ F6 │ F11 │
+ * │ │ TOG │ MOD │ HUI ┃ HUD ┃ │ │ ┃ ┃ │ │ │ │
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ │ RGB │ RGB │ RGB │ RGB │ QW │ │ │ _ │ F1 | F2 | F3 │ F12 │
+ * │ │ SAI │ SAD │ VAI │ VAD │ │ │ │ - │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │RAISE│ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [_RAISE] = LAYOUT_ortho_4x12_wrapper (
+ KC_MUTE,
+ _______________RAISE_412_L1________________, _______________RAISE_412_R1________________,
+ _______________RAISE_412_L2________________, _______________RAISE_412_R2________________,
+ _______________RAISE_412_L3________________, _______________RAISE_412_R3________________,
+ _________________BLANK_6___________________, _________________BLANK_6___________________
+ ),
+
+
+ /* EXTRAS
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ │ ! │ │ │ │ │ │ │ /\ | [ | ] | ; │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │SHIFT│ | |EXTRA┃ ┃ │ │ ┃ @ # ┃ & % | | ' | │
+ * │ │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │ │
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ , | . | ? │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [_EX] = LAYOUT_ortho_4x12_wrapper (
+ KC_MUTE,
+ ______________EXTRAS_412_L1________________, ______________EXTRAS_412_R1________________,
+ ______________EXTRAS_412_L2________________, ______________EXTRAS_412_R2________________,
+ ______________EXTRAS_412_L3________________, ______________EXTRAS_412_R3________________,
+ ______________EXTRAS_412_L4________________, ______________EXTRAS_412_R4________________
+ ),
+
+
+
+ /* FUNCTION
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │COPY │CLIP │ SS │ │ │ │ │ │ /\ │ UP │ │ │ DEL │
+ * │PASTE│ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │TAB │ M05 | M06 | M07 ┃ M08 ┃ │ │ ┃LEFT ┃DOWN │RIGHT│ │UP │
+ * │SHIFT│ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │RIGHT│
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ │ M01 │ M02 │ M03 │ M04 │ │ │ │ │ , | . | ? │DOWN │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │LEFT │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │RGB1 │RGB2 │RGB3 │RGB4 │ │ │ │ │ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [_FN] = LAYOUT_ortho_4x12_wrapper (
+ KC_MUTE,
+ _____________FUNCTION_412_L1_______________, _____________FUNCTION_412_R1_______________,
+ _____________FUNCTION_412_L2_______________, _____________FUNCTION_412_R2_______________,
+ _____________FUNCTION_412_L3_______________, _____________FUNCTION_412_R3_______________,
+ _____________FUNCTION_412_L4_______________, _____________FUNCTION_412_R4_______________
+ ),
+
+
+ /* SYMBOLS
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ | $ | ^ | < | > │ SYMB│ │ SYMB│ | | [ | ] | - | |
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │ | % | : | ; ┃ + ┃ = │ │ ┃ ┃ ( | ) | _ | |
+ * │ │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │ │
+ * ├─────┼─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * | | & | ' | " | * | # │ │ ! | ? | / | \ | @ | |
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [_SYMB] = LAYOUT_ortho_4x12_wrapper (
+ KC_MUTE,
+ _______, _____________SYMBOLS_310_L1________________, _____________SYMBOLS_310_R1________________, _______,
+ _______, _____________SYMBOLS_310_L2________________, _____________SYMBOLS_310_R2________________, _______,
+ _______, _____________SYMBOLS_310_L3________________, _____________SYMBOLS_310_R3________________, _______,
+ _________________BLANK_6___________________, _________________BLANK_6___________________
+ )
+
+};
+
+#ifndef NUM_DIRECTIONS
+# define NUM_DIRECTIONS 2
+#endif
+
+#if defined(ENCODER_MAP_ENABLE) && defined(KEYBOARD_1upkeyboards_pi40_mit_v1_0)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_WM] = { ENCODER_CCW_CW(LCTL(KC_V), LCTL(KC_C)) },
+ [_QW] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_LOWER] = { ENCODER_CCW_CW(____, ____) },
+ [_RAISE] = { ENCODER_CCW_CW(____, ____) },
+ [_EX] = { ENCODER_CCW_CW(____, ____) },
+ [_FN] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD) },
+ [_SYMB] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
+
+
+#ifdef OLED_ENABLE
+bool oled_task_user(void) {
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("Layer: "), false);
+
+ switch (get_highest_layer(layer_state)) {
+ case _LOWER:
+ oled_write_P(PSTR("LOWER"), false);
+ break;
+ case _RAISE:
+ oled_write_P(PSTR("RAISE"), false);
+ break;
+ case _EX:
+ oled_write_P(PSTR("EXTRA"), false);
+ break;
+ case _FN:
+ oled_write_P(PSTR("FUNCTION"), false);
+ break;
+ case _WM:
+ oled_write_P(PSTR("WORKMAN"), false);
+ break;
+ case _SYMB:
+ oled_write_P(PSTR("SYMBOLS"), false);
+ break;
+ default:
+ // Or use the write_ln shortcut over adding '\n' to the end of your string
+ oled_write_ln_P(PSTR("HOME"), false);
+ }
+
+// Host Keyboard LED Status
+ // led_t led_state = host_keyboard_led_state();
+ // oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
+ // oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
+ // oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
+
+ return false;
+}
+#endif
+
+
+bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_A):
+ // Do not force the mod-tap key press to be handled as a modifier
+ // if any other key was pressed while the mod-tap key is held down.
+ return false;
+ case TEX:
+ return false;
+ case CTRLX:
+ return false;
+ case FNZ:
+ return false;
+ case MGUI:
+ return false;
+ case VLOWER:
+ return false;
+ case KRAISE:
+ return false;
+ default:
+ // Force the dual-role key press to be handled as a modifier if any
+ // other key was pressed while the mod-tap key is held down.
+ return true;
+ }
+}
+
+#ifdef AUDIO_ENABLE
+float leader_start_song[][2] = SONG(ONE_UP_SOUND);
+float leader_succeed_song[][2] = SONG(ALL_STAR);
+float leader_fail_song[][2] = SONG(RICK_ROLL);
+#endif
+
+void matrix_scan_user(void);
+
+void leader_start_user(void) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(leader_start_song);
+#endif
+}
+
+bool did_leader_succeed;
+
+void leader_end_user(void) {
+ did_leader_succeed = false;
+
+ if (leader_sequence_one_key(KC_E)) {
+ SEND_STRING(SS_LCTL(SS_LSFT("t")));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_E, KC_D)) {
+ SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_A, KC_T)) {
+ SEND_STRING("@guidehouse.com");
+ did_leader_succeed = true;
+ }
+
+
+#ifdef AUDIO_ENABLE
+ if (did_leader_succeed) {
+ PLAY_SONG(leader_succeed_song);
+ } else {
+ PLAY_SONG(leader_fail_song);
+ }
+#endif
+}
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk
new file mode 100644
index 000000000000..96f930ffa10a
--- /dev/null
+++ b/keyboards/1upkeyboards/pi40/mit_v1_0/keymaps/miketronic/rules.mk
@@ -0,0 +1,25 @@
+# Common feature for all keyboards
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+EXTRAKEY_ENABLE = yes # Audio control and System control
+TAP_DANCE_ENABLE = yes # Tap Dance keys
+NKRO_ENABLE = yes # Enable N-Key Rollover
+MACROS_ENABLED = yes
+
+
+# Keyboard specific
+AUTO_SHIFT_ENABLE = no
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+MOUSEKEY_ENABLE = no # Mouse keys
+
+LEADER_ENABLE = yes
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = WS2812
+WS2812_DRIVER = vendor
+ENCODER_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+OLED_ENABLE = yes
+OLED_DRIVER = SSD1306
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/pi60/info.json b/keyboards/1upkeyboards/pi60/info.json
index 00d32ec973bb..f599446e20e8 100644
--- a/keyboards/1upkeyboards/pi60/info.json
+++ b/keyboards/1upkeyboards/pi60/info.json
@@ -112,7 +112,7 @@
{"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
{"label": "ISO'", "matrix": [2, 12], "x": 12.75, "y": 2},
{"label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2},
- {"label": "LShift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3},
+ {"label": "LShift", "matrix": [3, 15], "w": 1.25, "x": 0, "y": 3},
{"label": "ISO<>", "matrix": [3, 1], "x": 1.25, "y": 3},
{"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
{"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
diff --git a/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c b/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c
index 15b593362d0d..acf9ce1adb38 100644
--- a/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c
+++ b/keyboards/1upkeyboards/pi60/keymaps/default/keymap.c
@@ -17,12 +17,12 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
+
[0] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_TRNS, KC_ENT,
- KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, MO(1),
+ KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_TRNS, KC_APP, KC_RCTL
),
diff --git a/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c b/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c
index f9187727eb3d..80f9d3a9f6b4 100644
--- a/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c
+++ b/keyboards/1upkeyboards/pi60/keymaps/via/keymap.c
@@ -17,12 +17,12 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
+
[0] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_TRNS, KC_ENT,
- KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, MO(1),
+ KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_TRNS, KC_APP, KC_RCTL
),
diff --git a/keyboards/4pplet/eagle_viper_rep/rev_b/info.json b/keyboards/4pplet/eagle_viper_rep/rev_b/info.json
index 82d6349dc72b..73a2053979ef 100644
--- a/keyboards/4pplet/eagle_viper_rep/rev_b/info.json
+++ b/keyboards/4pplet/eagle_viper_rep/rev_b/info.json
@@ -114,7 +114,7 @@
{"label": "Alt", "matrix": [9, 4], "x": 10, "y": 4, "w": 1.25},
{"label": "Alt", "matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
{"label": "GUI", "matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
- {"label": "Fn", "matrix": [8, 6], "x": 13.75, "y": 9, "w": 1.25}
+ {"label": "Fn", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi": {
diff --git a/keyboards/4pplet/waffling60/rev_d_iso/info.json b/keyboards/4pplet/waffling60/rev_d_iso/info.json
index cab2fa1c0791..fdcf9d0bdee1 100644
--- a/keyboards/4pplet/waffling60/rev_d_iso/info.json
+++ b/keyboards/4pplet/waffling60/rev_d_iso/info.json
@@ -15,8 +15,11 @@
"diode_direction": "COL2ROW",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -47,21 +50,21 @@
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
- {"matrix": [2, 0], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
-
- {"matrix": [2, 1], "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, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
@@ -88,6 +91,284 @@
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
+ },
+ "LAYOUT_60_iso_tsangan_split_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [1, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": [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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": [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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl_split_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [1, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"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, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"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, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
}
}
}
diff --git a/keyboards/4pplet/waffling60/rev_d_iso/keymaps/default/keymap.c b/keyboards/4pplet/waffling60/rev_d_iso/keymaps/default/keymap.c
index 563c3838d10f..7536b7f3a1a6 100644
--- a/keyboards/4pplet/waffling60/rev_d_iso/keymaps/default/keymap.c
+++ b/keyboards/4pplet/waffling60/rev_d_iso/keymaps/default/keymap.c
@@ -18,14 +18,14 @@ along with this program. If not, see .
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// main layer
-[0] = LAYOUT(
+[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_NO, 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, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
// basic function layer
-[1] = LAYOUT(
+[1] = LAYOUT_all(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NUHS, KC_TRNS,
diff --git a/keyboards/4pplet/waffling60/rev_d_iso/keymaps/via/keymap.c b/keyboards/4pplet/waffling60/rev_d_iso/keymaps/via/keymap.c
index 18c291226904..b6945a706d81 100644
--- a/keyboards/4pplet/waffling60/rev_d_iso/keymaps/via/keymap.c
+++ b/keyboards/4pplet/waffling60/rev_d_iso/keymaps/via/keymap.c
@@ -18,28 +18,28 @@ along with this program. If not, see .
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// main layer
-[0] = LAYOUT(
+[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
// basic function layer
-[1] = LAYOUT(
+[1] = LAYOUT_all(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
// extra layer for VIA
-[2] = LAYOUT(
+[2] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
// extra layer for VIA
-[3] = LAYOUT(
+[3] = 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,
diff --git a/keyboards/4pplet/waffling60/rev_d_iso/matrix_diagram.md b/keyboards/4pplet/waffling60/rev_d_iso/matrix_diagram.md
new file mode 100644
index 000000000000..781000ec413f
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_d_iso/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for 4pplet Waffling60 Rev D ISO
+
+```
+ ┌───────┐
+ 2u Backspace │1D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │1D │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2D │
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │
+├────┴┬──┴┬──┴──┬┴───┴───┴──┬┴──┬┴───┴───┴──┬┴───┴┬───┬─┴───┤
+│40 │41 │42 │44 │46 │48 │4B │4C │4D │
+└─────┴───┴─────┴───────────┴───┴───────────┴─────┴───┴─────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │46 │4B │4C │4D │ Tsangan/WKL/HHKB
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+┌─────┬───┬───────────────────────────────────────┬───┬─────┐
+│40 │41 │46 │4C │4D │ 10u Spacebar
+└─────┴───┴───────────────────────────────────────┴───┴─────┘
+```
diff --git a/keyboards/abko/ak84bt/ak84bt.c b/keyboards/abko/ak84bt/ak84bt.c
new file mode 100644
index 000000000000..0ecd06b177e8
--- /dev/null
+++ b/keyboards/abko/ak84bt/ak84bt.c
@@ -0,0 +1,110 @@
+/* Copyright 2023 temp4gh
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+ {0, G_1, I_1, H_1},
+ {0, G_3, I_3, H_3},
+ {0, G_4, I_4, H_4},
+ {0, G_5, I_5, H_5},
+ {0, G_6, I_6, H_6},
+ {0, G_7, I_7, H_7},
+ {0, G_8, I_8, H_8},
+ {0, G_9, I_9, H_9},
+ {0, G_10, I_10, H_10},
+ {0, G_11, I_11, H_11},
+ {0, G_12, I_12, H_12},
+ {0, G_13, I_13, H_13},
+ {0, G_14, I_14, H_14},
+ {0, G_15, I_15, H_15},
+ {0, D_1, F_1, E_1},
+ {0, D_2, F_2, E_2},
+ {0, D_3, F_3, E_3},
+ {0, D_4, F_4, E_4},
+ {0, D_5, F_5, E_5},
+ {0, D_6, F_6, E_6},
+ {0, D_7, F_7, E_7},
+ {0, D_8, F_8, E_8},
+ {0, D_9, F_9, E_9},
+ {0, D_10, F_10, E_10},
+ {0, D_11, F_11, E_11},
+ {0, D_12, F_12, E_12},
+ {0, D_13, F_13, E_13},
+ {0, D_14, F_14, E_14},
+ {0, D_15, F_15, E_15},
+ {0, A_1, C_1, B_1},
+ {0, A_2, C_2, B_2},
+ {0, A_3, C_3, B_3},
+ {0, A_4, C_4, B_4},
+ {0, A_5, C_5, B_5},
+ {0, A_6, C_6, B_6},
+ {0, A_7, C_7, B_7},
+ {0, A_8, C_8, B_8},
+ {0, A_9, C_9, B_9},
+ {0, A_10, C_10, B_10},
+ {0, A_11, C_11, B_11},
+ {0, A_12, C_12, B_12},
+ {0, A_13, C_13, B_13},
+ {0, A_14, C_14, B_14},
+ {0, A_15, C_15, B_15},
+ {1, G_1, I_1, H_1},
+ {1, G_2, I_2, H_2},
+ {1, G_3, I_3, H_3},
+ {1, G_4, I_4, H_4},
+ {1, G_5, I_5, H_5},
+ {1, G_6, I_6, H_6},
+ {1, G_7, I_7, H_7},
+ {1, G_8, I_8, H_8},
+ {1, G_9, I_9, H_9},
+ {1, G_10, I_10, H_10},
+ {1, G_11, I_11, H_11},
+ {1, G_12, I_12, H_12},
+ {1, G_13, I_13, H_13},
+ {1, G_14, I_14, H_14},
+ {1, G_15, I_15, H_15},
+ {1, D_1, F_1, E_1},
+ {1, D_2, F_2, E_2},
+ {1, D_3, F_3, E_3},
+ {1, D_4, F_4, E_4},
+ {1, D_5, F_5, E_5},
+ {1, D_6, F_6, E_6},
+ {1, D_7, F_7, E_7},
+ {1, D_8, F_8, E_8},
+ {1, D_9, F_9, E_9},
+ {1, D_10, F_10, E_10},
+ {1, D_11, F_11, E_11},
+ {1, D_12, F_12, E_12},
+ {1, D_13, F_13, E_13},
+ {1, D_14, F_14, E_14},
+ {1, D_15, F_15, E_15},
+ {1, A_1, C_1, B_1},
+ {1, A_2, C_2, B_2},
+ {1, A_3, C_3, B_3},
+ {1, A_5, C_5, B_5},
+ {1, A_6, C_6, B_6},
+ {1, A_7, C_7, B_7},
+ {1, A_8, C_8, B_8},
+ {1, A_9, C_9, B_9},
+ {1, A_10, C_10, B_10},
+ {1, A_11, C_11, B_11},
+ {1, A_12, C_12, B_12},
+ {1, A_13, C_13, B_13},
+ {1, A_14, C_14, B_14},
+ {1, A_15, C_15, B_15},
+ {0, G_2, I_2, H_2},
+ {1, A_4, C_4, B_4}
+};
diff --git a/keyboards/abko/ak84bt/config.h b/keyboards/abko/ak84bt/config.h
new file mode 100644
index 000000000000..f6a3b55851fc
--- /dev/null
+++ b/keyboards/abko/ak84bt/config.h
@@ -0,0 +1,41 @@
+/* Copyright 2023 temp4gh
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+
+#define DRIVER_ADDR_1 0b1010000
+#define DRIVER_ADDR_2 0b1010011
+
+#define DRIVER_COUNT 2
+#define DRIVER_1_LED_TOTAL 45
+#define DRIVER_2_LED_TOTAL 45
+
+#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL+DRIVER_2_LED_TOTAL)
+
+#define ENABLE_RGB_MATRIX_SOLID_COLOR
+#define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+#define ENABLE_RGB_MATRIX_BAND_SAT
+#define ENABLE_RGB_MATRIX_BAND_VAL
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_FLOW
diff --git a/keyboards/abko/ak84bt/halconf.h b/keyboards/abko/ak84bt/halconf.h
new file mode 100644
index 000000000000..f1dae7232ed1
--- /dev/null
+++ b/keyboards/abko/ak84bt/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 temp4gh
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef HAL_USE_I2C
+#define HAL_USE_I2C TRUE
diff --git a/keyboards/abko/ak84bt/info.json b/keyboards/abko/ak84bt/info.json
new file mode 100644
index 000000000000..30dd823575d0
--- /dev/null
+++ b/keyboards/abko/ak84bt/info.json
@@ -0,0 +1,217 @@
+{
+ "manufacturer": "abko",
+ "keyboard_name": "ak84bt",
+ "bootloader": "stm32duino",
+ "bootmagic": {
+ "matrix": [1, 0]
+ },
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 2
+ },
+ "features": {
+ "bootmagic": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "indicators": {
+ "caps_lock": "B8",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["A6", "A7", "C4", "C5", "B0", "B1", "C6", "C7", "C8", "C9", "A8", "A9", "A10", "A13", "A14", "A15"],
+ "rows": ["A0", "A1", "A2", "A3", "A4", "A5"]
+ },
+ "processor": "STM32F103",
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "layout": [
+ {"matrix": [0, 0], "x": 7, "y": 2, "flags": 4},
+ {"matrix": [0, 2], "x": 34, "y": 2, "flags": 4},
+ {"matrix": [0, 3], "x": 48, "y": 2, "flags": 4},
+ {"matrix": [0, 4], "x": 61, "y": 2, "flags": 4},
+ {"matrix": [0, 5], "x": 75, "y": 2, "flags": 4},
+ {"matrix": [0, 6], "x": 95, "y": 2, "flags": 4},
+ {"matrix": [0, 7], "x": 109, "y": 2, "flags": 4},
+ {"matrix": [0, 8], "x": 122, "y": 2, "flags": 4},
+ {"matrix": [0, 9], "x": 136, "y": 2, "flags": 4},
+ {"matrix": [0, 10], "x": 157, "y": 2, "flags": 4},
+ {"matrix": [0, 11], "x": 170, "y": 2, "flags": 4},
+ {"matrix": [0, 12], "x": 184, "y": 2, "flags": 4},
+ {"matrix": [0, 13], "x": 198, "y": 2, "flags": 4},
+ {"matrix": [0, 14], "x": 217, "y": 2, "flags": 4},
+ {"matrix": [1, 0], "x": 7, "y": 14, "flags": 4},
+ {"matrix": [1, 1], "x": 20, "y": 14, "flags": 4},
+ {"matrix": [1, 2], "x": 34, "y": 14, "flags": 4},
+ {"matrix": [1, 3], "x": 48, "y": 14, "flags": 4},
+ {"matrix": [1, 4], "x": 61, "y": 14, "flags": 4},
+ {"matrix": [1, 5], "x": 75, "y": 14, "flags": 4},
+ {"matrix": [1, 6], "x": 89, "y": 14, "flags": 4},
+ {"matrix": [1, 7], "x": 102, "y": 14, "flags": 4},
+ {"matrix": [1, 8], "x": 116, "y": 14, "flags": 4},
+ {"matrix": [1, 9], "x": 129, "y": 14, "flags": 4},
+ {"matrix": [1, 10], "x": 143, "y": 14, "flags": 4},
+ {"matrix": [1, 11], "x": 157, "y": 14, "flags": 4},
+ {"matrix": [1, 12], "x": 170, "y": 14, "flags": 4},
+ {"matrix": [1, 13], "x": 190, "y": 14, "flags": 4},
+ {"matrix": [1, 14], "x": 217, "y": 14, "flags": 4},
+ {"matrix": [2, 0], "x": 10, "y": 24, "flags": 4},
+ {"matrix": [2, 1], "x": 27, "y": 24, "flags": 4},
+ {"matrix": [2, 2], "x": 40, "y": 24, "flags": 4},
+ {"matrix": [2, 3], "x": 54, "y": 24, "flags": 4},
+ {"matrix": [2, 4], "x": 68, "y": 24, "flags": 4},
+ {"matrix": [2, 5], "x": 81, "y": 24, "flags": 4},
+ {"matrix": [2, 6], "x": 95, "y": 24, "flags": 4},
+ {"matrix": [2, 7], "x": 109, "y": 24, "flags": 4},
+ {"matrix": [2, 8], "x": 122, "y": 24, "flags": 4},
+ {"matrix": [2, 9], "x": 136, "y": 24, "flags": 4},
+ {"matrix": [2, 10], "x": 150, "y": 24, "flags": 4},
+ {"matrix": [2, 11], "x": 163, "y": 24, "flags": 4},
+ {"matrix": [2, 12], "x": 177, "y": 24, "flags": 4},
+ {"matrix": [2, 13], "x": 194, "y": 24, "flags": 4},
+ {"matrix": [2, 14], "x": 217, "y": 24, "flags": 4},
+ {"matrix": [3, 0], "x": 12, "y": 34, "flags": 4},
+ {"matrix": [3, 1], "x": 30, "y": 34, "flags": 4},
+ {"matrix": [3, 2], "x": 44, "y": 34, "flags": 4},
+ {"matrix": [3, 3], "x": 58, "y": 34, "flags": 4},
+ {"matrix": [3, 4], "x": 71, "y": 34, "flags": 4},
+ {"matrix": [3, 5], "x": 85, "y": 34, "flags": 4},
+ {"matrix": [3, 6], "x": 99, "y": 34, "flags": 4},
+ {"matrix": [3, 7], "x": 112, "y": 34, "flags": 4},
+ {"matrix": [3, 8], "x": 126, "y": 34, "flags": 4},
+ {"matrix": [3, 9], "x": 140, "y": 34, "flags": 4},
+ {"matrix": [3, 10], "x": 153, "y": 34, "flags": 4},
+ {"matrix": [3, 11], "x": 167, "y": 34, "flags": 4},
+ {"x": 180, "y": 34, "flags": 4},
+ {"matrix": [3, 13], "x": 189, "y": 34, "flags": 4},
+ {"matrix": [3, 14], "x": 217, "y": 34, "flags": 4},
+ {"matrix": [4, 0], "x": 8, "y": 44, "flags": 4},
+ {"x": 24, "y": 44, "flags": 4},
+ {"matrix": [4, 2], "x": 38, "y": 44, "flags": 4},
+ {"matrix": [4, 3], "x": 51, "y": 44, "flags": 4},
+ {"matrix": [4, 4], "x": 65, "y": 44, "flags": 4},
+ {"matrix": [4, 5], "x": 78, "y": 44, "flags": 4},
+ {"matrix": [4, 6], "x": 92, "y": 44, "flags": 4},
+ {"matrix": [4, 7], "x": 106, "y": 44, "flags": 4},
+ {"matrix": [4, 8], "x": 119, "y": 44, "flags": 4},
+ {"matrix": [4, 9], "x": 133, "y": 44, "flags": 4},
+ {"matrix": [4, 10], "x": 147, "y": 44, "flags": 4},
+ {"matrix": [4, 11], "x": 160, "y": 44, "flags": 4},
+ {"matrix": [4, 12], "x": 179, "y": 44, "flags": 4},
+ {"matrix": [4, 13], "x": 201, "y": 46, "flags": 4},
+ {"matrix": [4, 14], "x": 217, "y": 44, "flags": 4},
+ {"matrix": [5, 0], "x": 8, "y": 54, "flags": 4},
+ {"matrix": [5, 1], "x": 25, "y": 54, "flags": 4},
+ {"matrix": [5, 2], "x": 43, "y": 54, "flags": 4},
+ {"x": 67, "y": 57, "flags": 4},
+ {"x": 80, "y": 57, "flags": 4},
+ {"x": 94, "y": 54, "flags": 4},
+ {"matrix": [5, 6], "x": 107, "y": 57, "flags": 4},
+ {"x": 120, "y": 57, "flags": 4},
+ {"matrix": [5, 9], "x": 143, "y": 54, "flags": 4},
+ {"matrix": [5, 10], "x": 157, "y": 54, "flags": 4},
+ {"matrix": [5, 11], "x": 170, "y": 54, "flags": 4},
+ {"matrix": [5, 12], "x": 187, "y": 56, "flags": 4},
+ {"matrix": [5, 13], "x": 201, "y": 56, "flags": 4},
+ {"matrix": [5, 14], "x": 214, "y": 56, "flags": 4},
+ {"x": 207, "y": 23, "flags": 8},
+ {"x": 207, "y": 27, "flags": 8}
+ ]
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x4321",
+ "vid": "0x7654"
+ },
+ "layouts": {
+ "LAYOUT_75_ansi": {
+ "layout": [
+ {"label": "ESC", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "F2", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "F3", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "F4", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "F5", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F6", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F7", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F8", "matrix": [0, 9], "x": 9.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 11, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 12, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 13, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 14, "y": 0},
+ {"label": "END", "matrix": [0, 15], "x": 16.5, "y": 0},
+ {"label": "GRV", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "MINS", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "EQL", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "BSPC", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"label": "HOME", "matrix": [1, 14], "x": 16.5, "y": 1.25},
+ {"label": "TAB", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "LBRC", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "RBRC", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "BSLS", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"label": "DEL", "matrix": [2, 14], "x": 16.5, "y": 2.25},
+ {"label": "CAPS", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": "SCLN", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "QUOT", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "ENT", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+ {"label": "PGUP", "matrix": [3, 14], "x": 16.5, "y": 3.25},
+ {"label": "LSFT", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "COMM", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": "DOT", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "SLSH", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "RSFT", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "UP", "matrix": [4, 13], "x": 15.25, "y": 4.25},
+ {"label": "PGDN", "matrix": [4, 14], "x": 16.5, "y": 4.25},
+ {"label": "LCTL", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "LGUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "LALT", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "SPC", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "RALT", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "MO(1)", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "RCTL", "matrix": [5, 11], "x": 13, "y": 5.25, "w": 1.25},
+ {"label": "LEFT", "matrix": [5, 12], "x": 14.25, "y": 5.25},
+ {"label": "DOWN", "matrix": [5, 13], "x": 15.25, "y": 5.25},
+ {"label": "RGHT", "matrix": [5, 14], "x": 16.5, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/abko/ak84bt/keymaps/default/keymap.c b/keyboards/abko/ak84bt/keymaps/default/keymap.c
new file mode 100644
index 000000000000..6a57c4422a70
--- /dev/null
+++ b/keyboards/abko/ak84bt/keymaps/default/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2023 temp4gh
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layer_names
+{
+ _BASE,
+ _FnLay,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_75_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_END,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FnLay), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [_FnLay] = LAYOUT_75_ansi(
+ QK_BOOT, KC_MY_COMPUTER, KC_WWW_HOME, KC_CALCULATOR, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, KC_MAIL, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAI, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, XXXXXXX, _______, XXXXXXX, RGB_SPD, RGB_VAD, RGB_SPI
+ )
+};
diff --git a/keyboards/abko/ak84bt/mcuconf.h b/keyboards/abko/ak84bt/mcuconf.h
new file mode 100644
index 000000000000..9187c76aad0d
--- /dev/null
+++ b/keyboards/abko/ak84bt/mcuconf.h
@@ -0,0 +1,22 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#pragma once
+
+#include_next
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/abko/ak84bt/readme.md b/keyboards/abko/ak84bt/readme.md
new file mode 100644
index 000000000000..68269604cc28
--- /dev/null
+++ b/keyboards/abko/ak84bt/readme.md
@@ -0,0 +1,21 @@
+# AK84BT
+
+![ak84bt](https://i.imgur.com/tQJ19vxh.jpg)
+
+A customizable 80% keyboard.
+
+- Keyboard Maintainer: [temp4gh](https://github.com/temp4gh)
+- Hardware Supported: AK84BT PCB
+- Hardware Availability: www.abko.co.kr
+
+Make example for this keyboard (after setting up your build environment):
+
+ make abko/ak84bt:default
+
+Flashing example for this keyboard:
+
+ make abko/ak84bt:default:flash
+
+**Reset Key**: Hold down the key located at *K10*, commonly programmed as *Grave* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/abko/ak84bt/rules.mk b/keyboards/abko/ak84bt/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/abko/ak84bt/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/config.h b/keyboards/adpenrose/mine/config.h
new file mode 100644
index 000000000000..cc05ddf8f17e
--- /dev/null
+++ b/keyboards/adpenrose/mine/config.h
@@ -0,0 +1,9 @@
+// Copyright 2022 Arturo Avila (@Arturo Avila)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Solenoid pin */
+#define SOLENOID_PIN A7
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 2
diff --git a/keyboards/adpenrose/mine/info.json b/keyboards/adpenrose/mine/info.json
new file mode 100644
index 000000000000..5010485602d0
--- /dev/null
+++ b/keyboards/adpenrose/mine/info.json
@@ -0,0 +1,357 @@
+{
+ "manufacturer": "ADPenrose",
+ "keyboard_name": "Mine",
+ "maintainer": "Arturo Avila",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0006",
+ "vid": "0x4450"
+ },
+ "features": {
+ "encoder": true,
+ "bootmagic": true,
+ "extrakey": true
+ },
+ "build": {
+ "lto": true
+ },
+ "encoder": {
+ "rotary": [{ "pin_a": "C4", "pin_b": "C3" }]
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "rows": ["A0", "A1", "A4", "A3", "C7", "B4", "B5", "B6", "A6", "A2", "A5"],
+ "cols": ["B0", "B1", "B2", "B3", "D0", "D1", "D5", "D6", "C6", "C5"]
+ },
+ "processor": "atmega32a",
+ "bootloader": "usbasploader",
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "label": "Enc", "matrix": [0, 9], "x": 20.75, "y": 0 },
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [1, 1], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 2], "x": 3.5, "y": 0 },
+ { "label": "F4", "matrix": [1, 2], "x": 4.5, "y": 0 },
+ { "label": "F5", "matrix": [0, 3], "x": 5.75, "y": 0 },
+ { "label": "F6", "matrix": [1, 3], "x": 6.75, "y": 0 },
+ { "label": "F7", "matrix": [9, 3], "x": 9.25, "y": 0 },
+ { "label": "F8", "matrix": [10, 3], "x": 10.25, "y": 0 },
+ { "label": "F9", "matrix": [0, 4], "x": 11.5, "y": 0 },
+ { "label": "F10", "matrix": [0, 5], "x": 12.5, "y": 0 },
+ { "label": "F11", "matrix": [0, 6], "x": 13.75, "y": 0 },
+ { "label": "F12", "matrix": [1, 6], "x": 14.75, "y": 0 },
+ { "label": "M1", "matrix": [10, 6], "x": 16, "y": 0 },
+ { "label": "M2", "matrix": [0, 7], "x": 17, "y": 0 },
+ { "label": "Num Lock", "matrix": [1, 7], "x": 17.75, "y": 1.25 },
+ { "label": "/", "matrix": [0, 8], "x": 18.75, "y": 1.25 },
+ { "label": "*", "matrix": [10, 8], "x": 19.75, "y": 1.25 },
+ { "label": "-", "matrix": [1, 9], "x": 20.75, "y": 1.25 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [10, 0], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [2, 1], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [10, 1], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [2, 2], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [10, 2], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [2, 3], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [8, 3], "x": 9.25, "y": 1.25 },
+ { "label": "*", "matrix": [1, 4], "x": 10.25, "y": 1.25 },
+ { "label": "(", "matrix": [10, 4], "x": 11.25, "y": 1.25 },
+ { "label": ")", "matrix": [1, 5], "x": 12.25, "y": 1.25 },
+ { "label": "_", "matrix": [10, 5], "x": 13.25, "y": 1.25 },
+ { "label": "+", "matrix": [2, 6], "x": 14.25, "y": 1.25 },
+ { "label": "Backspace", "matrix": [9, 6], "w": 2, "x": 15.25, "y": 1.25 },
+ { "label": "7", "matrix": [2, 7], "x": 17.75, "y": 2.25 },
+ { "label": "8", "matrix": [1, 8], "x": 18.75, "y": 2.25 },
+ { "label": "9", "matrix": [9, 8], "x": 19.75, "y": 2.25 },
+ { "h": 2, "label": "+", "matrix": [8, 8], "x": 20.75, "y": 2.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [9, 0], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [3, 1], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [9, 1], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [3, 2], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [9, 2], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [7, 3], "x": 8.75, "y": 2.25 },
+ { "label": "U", "matrix": [2, 4], "x": 9.75, "y": 2.25 },
+ { "label": "I", "matrix": [9, 4], "x": 10.75, "y": 2.25 },
+ { "label": "O", "matrix": [2, 5], "x": 11.75, "y": 2.25 },
+ { "label": "P", "matrix": [9, 5], "x": 12.75, "y": 2.25 },
+ { "label": "{", "matrix": [3, 6], "x": 13.75, "y": 2.25 },
+ { "label": "}", "matrix": [8, 6], "x": 14.75, "y": 2.25 },
+ { "label": "|", "matrix": [7, 7], "w": 1.5, "x": 15.75, "y": 2.25 },
+ { "label": "4", "matrix": [3, 7], "x": 17.75, "y": 3.25 },
+ { "label": "5", "matrix": [2, 8], "x": 18.75, "y": 3.25 },
+ { "label": "6", "matrix": [7, 8], "x": 19.75, "y": 3.25 },
+
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [8, 0], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [4, 1], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [8, 1], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [4, 2], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [8, 2], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [6, 3], "x": 9, "y": 3.25 },
+ { "label": "J", "matrix": [3, 4], "x": 10, "y": 3.25 },
+ { "label": "K", "matrix": [8, 4], "x": 11, "y": 3.25 },
+ { "label": "L", "matrix": [3, 5], "x": 12, "y": 3.25 },
+ { "label": ":", "matrix": [8, 5], "x": 13, "y": 3.25 },
+ { "label": "\\", "matrix": [4, 6], "x": 14, "y": 3.25 },
+ { "label": "#", "matrix": [6, 6], "x": 15, "y": 3.25 },
+ { "label": "Enter", "matrix": [7, 6], "w": 2.25, "x": 15, "y": 3.25 },
+ { "label": "1", "matrix": [4, 7], "x": 17.75, "y": 4.25 },
+ { "label": "2", "matrix": [3, 8], "x": 18.75, "y": 4.25 },
+ { "label": "3", "matrix": [6, 8], "x": 19.75, "y": 4.25 },
+ { "h": 2, "label": "Enter", "matrix": [5, 8], "x": 20.75, "y": 4.25 },
+
+ { "label": "Shift", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "label": "~", "matrix": [7, 0], "x": 1.25, "y": 4.25 },
+ { "label": "Z", "matrix": [5, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [7, 1], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [5, 2], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [7, 2], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [3, 3], "x": 6.25, "y": 4.25 },
+ { "label": "B", "matrix": [5, 3], "x": 8.5, "y": 4.25 },
+ { "label": "N", "matrix": [4, 4], "x": 9.5, "y": 4.25 },
+ { "label": "M", "matrix": [5, 4], "x": 10.5, "y": 4.25 },
+ { "label": "<", "matrix": [7, 4], "x": 11.5, "y": 4.25 },
+ { "label": ">", "matrix": [4, 5], "x": 12.5, "y": 4.25 },
+ { "label": "?", "matrix": [7, 5], "x": 13.5, "y": 4.25 },
+ { "label": "Shift", "matrix": [5, 6], "w": 2.75, "x": 14.5, "y": 4.25 },
+ { "label": "Up", "matrix": [5, 7], "x": 17.5, "y": 5.5 },
+ { "label": "0", "matrix": [10, 7], "x": 18.75, "y": 5.25 },
+ { "label": ".", "matrix": [4, 8], "x": 19.75, "y": 5.25 },
+
+ { "label": "LCtrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "LWin", "matrix": [6, 0], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "LAlt", "matrix": [6, 1], "w": 1.25, "x": 3.25, "y": 5.25 },
+ { "label": "LSpacebar", "matrix": [6, 2], "w": 2.75, "x": 4.5, "y": 5.25 },
+ { "label": "RSpacebar", "matrix": [4, 3], "w": 2.25, "x": 8.5, "y": 5.25 },
+ { "label": "RAlt", "matrix": [6, 4], "w": 1.25, "x": 10.75, "y": 5.25 },
+ { "label": "RWin", "matrix": [5, 5], "w": 1.25, "x": 14.75, "y": 5.25 },
+ { "label": "RCtrl", "matrix": [6, 5], "w": 1.25, "x": 16, "y": 5.25 },
+ { "label": "Left", "matrix": [6, 7], "x": 16.5, "y": 6.5 },
+ { "label": "Down", "matrix": [8, 7], "x": 17.5, "y": 6.5 },
+ { "label": "Right", "matrix": [9, 7], "x": 18.5, "y": 6.5 }
+ ]
+ },
+ "LAYOUT_1800_alice_ansi": {
+ "layout": [
+ { "label": "Enc", "matrix": [0, 9], "x": 20.75, "y": 0 },
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [1, 1], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 2], "x": 3.5, "y": 0 },
+ { "label": "F4", "matrix": [1, 2], "x": 4.5, "y": 0 },
+ { "label": "F5", "matrix": [0, 3], "x": 5.75, "y": 0 },
+ { "label": "F6", "matrix": [1, 3], "x": 6.75, "y": 0 },
+ { "label": "F7", "matrix": [9, 3], "x": 9.25, "y": 0 },
+ { "label": "F8", "matrix": [10, 3], "x": 10.25, "y": 0 },
+ { "label": "F9", "matrix": [0, 4], "x": 11.5, "y": 0 },
+ { "label": "F10", "matrix": [0, 5], "x": 12.5, "y": 0 },
+ { "label": "F11", "matrix": [0, 6], "x": 13.75, "y": 0 },
+ { "label": "F12", "matrix": [1, 6], "x": 14.75, "y": 0 },
+ { "label": "M1", "matrix": [10, 6], "x": 16, "y": 0 },
+ { "label": "M2", "matrix": [0, 7], "x": 17, "y": 0 },
+ { "label": "Num Lock", "matrix": [1, 7], "x": 17.75, "y": 1.25 },
+ { "label": "/", "matrix": [0, 8], "x": 18.75, "y": 1.25 },
+ { "label": "*", "matrix": [10, 8], "x": 19.75, "y": 1.25 },
+ { "label": "-", "matrix": [1, 9], "x": 20.75, "y": 1.25 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [10, 0], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [2, 1], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [10, 1], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [2, 2], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [10, 2], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [2, 3], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [8, 3], "x": 9.25, "y": 1.25 },
+ { "label": "*", "matrix": [1, 4], "x": 10.25, "y": 1.25 },
+ { "label": "(", "matrix": [10, 4], "x": 11.25, "y": 1.25 },
+ { "label": ")", "matrix": [1, 5], "x": 12.25, "y": 1.25 },
+ { "label": "_", "matrix": [10, 5], "x": 13.25, "y": 1.25 },
+ { "label": "+", "matrix": [2, 6], "x": 14.25, "y": 1.25 },
+ { "label": "Backspace", "matrix": [9, 6], "w": 2, "x": 15.25, "y": 1.25 },
+ { "label": "7", "matrix": [2, 7], "x": 17.75, "y": 2.25 },
+ { "label": "8", "matrix": [1, 8], "x": 18.75, "y": 2.25 },
+ { "label": "9", "matrix": [9, 8], "x": 19.75, "y": 2.25 },
+ { "h": 2, "label": "+", "matrix": [8, 8], "x": 20.75, "y": 2.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [9, 0], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [3, 1], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [9, 1], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [3, 2], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [9, 2], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [7, 3], "x": 8.75, "y": 2.25 },
+ { "label": "U", "matrix": [2, 4], "x": 9.75, "y": 2.25 },
+ { "label": "I", "matrix": [9, 4], "x": 10.75, "y": 2.25 },
+ { "label": "O", "matrix": [2, 5], "x": 11.75, "y": 2.25 },
+ { "label": "P", "matrix": [9, 5], "x": 12.75, "y": 2.25 },
+ { "label": "{", "matrix": [3, 6], "x": 13.75, "y": 2.25 },
+ { "label": "}", "matrix": [8, 6], "x": 14.75, "y": 2.25 },
+ { "label": "|", "matrix": [7, 7], "w": 1.5, "x": 15.75, "y": 2.25 },
+ { "label": "4", "matrix": [3, 7], "x": 17.75, "y": 3.25 },
+ { "label": "5", "matrix": [2, 8], "x": 18.75, "y": 3.25 },
+ { "label": "6", "matrix": [7, 8], "x": 19.75, "y": 3.25 },
+
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [8, 0], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [4, 1], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [8, 1], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [4, 2], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [8, 2], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [6, 3], "x": 9, "y": 3.25 },
+ { "label": "J", "matrix": [3, 4], "x": 10, "y": 3.25 },
+ { "label": "K", "matrix": [8, 4], "x": 11, "y": 3.25 },
+ { "label": "L", "matrix": [3, 5], "x": 12, "y": 3.25 },
+ { "label": ":", "matrix": [8, 5], "x": 13, "y": 3.25 },
+ { "label": "\\", "matrix": [4, 6], "x": 14, "y": 3.25 },
+ { "label": "Enter", "matrix": [7, 6], "w": 2.25, "x": 15, "y": 3.25 },
+ { "label": "1", "matrix": [4, 7], "x": 17.75, "y": 4.25 },
+ { "label": "2", "matrix": [3, 8], "x": 18.75, "y": 4.25 },
+ { "label": "3", "matrix": [6, 8], "x": 19.75, "y": 4.25 },
+ { "h": 2, "label": "Enter", "matrix": [5, 8], "x": 20.75, "y": 4.25 },
+
+ { "label": "Shift", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "Z", "matrix": [5, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [7, 1], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [5, 2], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [7, 2], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [3, 3], "x": 6.25, "y": 4.25 },
+ { "label": "B", "matrix": [5, 3], "x": 8.5, "y": 4.25 },
+ { "label": "N", "matrix": [4, 4], "x": 9.5, "y": 4.25 },
+ { "label": "M", "matrix": [5, 4], "x": 10.5, "y": 4.25 },
+ { "label": "<", "matrix": [7, 4], "x": 11.5, "y": 4.25 },
+ { "label": ">", "matrix": [4, 5], "x": 12.5, "y": 4.25 },
+ { "label": "?", "matrix": [7, 5], "x": 13.5, "y": 4.25 },
+ { "label": "Shift", "matrix": [5, 6], "w": 2.75, "x": 14.5, "y": 4.25 },
+ { "label": "Up", "matrix": [5, 7], "x": 17.5, "y": 5.5 },
+ { "label": "0", "matrix": [10, 7], "x": 18.75, "y": 5.25 },
+ { "label": ".", "matrix": [4, 8], "x": 19.75, "y": 5.25 },
+
+ { "label": "LCtrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "LWin", "matrix": [6, 0], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "LAlt", "matrix": [6, 1], "w": 1.25, "x": 3.25, "y": 5.25 },
+ { "label": "LSpacebar", "matrix": [6, 2], "w": 2.75, "x": 4.5, "y": 5.25 },
+ { "label": "RSpacebar", "matrix": [4, 3], "w": 2.25, "x": 8.5, "y": 5.25 },
+ { "label": "RAlt", "matrix": [6, 4], "w": 1.25, "x": 10.75, "y": 5.25 },
+ { "label": "RWin", "matrix": [5, 5], "w": 1.25, "x": 14.75, "y": 5.25 },
+ { "label": "RCtrl", "matrix": [6, 5], "w": 1.25, "x": 16, "y": 5.25 },
+ { "label": "Left", "matrix": [6, 7], "x": 16.5, "y": 6.5 },
+ { "label": "Down", "matrix": [8, 7], "x": 17.5, "y": 6.5 },
+ { "label": "Right", "matrix": [9, 7], "x": 18.5, "y": 6.5 }
+ ]
+ },
+ "LAYOUT_1800_alice_iso": {
+ "layout": [
+ { "label": "Enc", "matrix": [0, 9], "x": 20.75, "y": 0 },
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [1, 1], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 2], "x": 3.5, "y": 0 },
+ { "label": "F4", "matrix": [1, 2], "x": 4.5, "y": 0 },
+ { "label": "F5", "matrix": [0, 3], "x": 5.75, "y": 0 },
+ { "label": "F6", "matrix": [1, 3], "x": 6.75, "y": 0 },
+ { "label": "F7", "matrix": [9, 3], "x": 9.25, "y": 0 },
+ { "label": "F8", "matrix": [10, 3], "x": 10.25, "y": 0 },
+ { "label": "F9", "matrix": [0, 4], "x": 11.5, "y": 0 },
+ { "label": "F10", "matrix": [0, 5], "x": 12.5, "y": 0 },
+ { "label": "F11", "matrix": [0, 6], "x": 13.75, "y": 0 },
+ { "label": "F12", "matrix": [1, 6], "x": 14.75, "y": 0 },
+ { "label": "M1", "matrix": [10, 6], "x": 16, "y": 0 },
+ { "label": "M2", "matrix": [0, 7], "x": 17, "y": 0 },
+ { "label": "Num Lock", "matrix": [1, 7], "x": 17.75, "y": 1.25 },
+ { "label": "/", "matrix": [0, 8], "x": 18.75, "y": 1.25 },
+ { "label": "*", "matrix": [10, 8], "x": 19.75, "y": 1.25 },
+ { "label": "-", "matrix": [1, 9], "x": 20.75, "y": 1.25 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [10, 0], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [2, 1], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [10, 1], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [2, 2], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [10, 2], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [2, 3], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [8, 3], "x": 9.25, "y": 1.25 },
+ { "label": "*", "matrix": [1, 4], "x": 10.25, "y": 1.25 },
+ { "label": "(", "matrix": [10, 4], "x": 11.25, "y": 1.25 },
+ { "label": ")", "matrix": [1, 5], "x": 12.25, "y": 1.25 },
+ { "label": "_", "matrix": [10, 5], "x": 13.25, "y": 1.25 },
+ { "label": "+", "matrix": [2, 6], "x": 14.25, "y": 1.25 },
+ { "label": "Backspace", "matrix": [9, 6], "w": 2, "x": 15.25, "y": 1.25 },
+ { "label": "7", "matrix": [2, 7], "x": 17.75, "y": 2.25 },
+ { "label": "8", "matrix": [1, 8], "x": 18.75, "y": 2.25 },
+ { "label": "9", "matrix": [9, 8], "x": 19.75, "y": 2.25 },
+ { "h": 2, "label": "+", "matrix": [8, 8], "x": 20.75, "y": 2.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [9, 0], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [3, 1], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [9, 1], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [3, 2], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [9, 2], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [7, 3], "x": 8.75, "y": 2.25 },
+ { "label": "U", "matrix": [2, 4], "x": 9.75, "y": 2.25 },
+ { "label": "I", "matrix": [9, 4], "x": 10.75, "y": 2.25 },
+ { "label": "O", "matrix": [2, 5], "x": 11.75, "y": 2.25 },
+ { "label": "P", "matrix": [9, 5], "x": 12.75, "y": 2.25 },
+ { "label": "{", "matrix": [3, 6], "x": 13.75, "y": 2.25 },
+ { "label": "}", "matrix": [8, 6], "x": 14.75, "y": 2.25 },
+ { "label": "4", "matrix": [3, 7], "x": 17.75, "y": 3.25 },
+ { "label": "5", "matrix": [2, 8], "x": 18.75, "y": 3.25 },
+ { "label": "6", "matrix": [7, 8], "x": 19.75, "y": 3.25 },
+
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [8, 0], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [4, 1], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [8, 1], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [4, 2], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [8, 2], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [6, 3], "x": 9, "y": 3.25 },
+ { "label": "J", "matrix": [3, 4], "x": 10, "y": 3.25 },
+ { "label": "K", "matrix": [8, 4], "x": 11, "y": 3.25 },
+ { "label": "L", "matrix": [3, 5], "x": 12, "y": 3.25 },
+ { "label": ":", "matrix": [8, 5], "x": 13, "y": 3.25 },
+ { "label": "\\", "matrix": [4, 6], "x": 14, "y": 3.25 },
+ { "label": "#", "matrix": [6, 6], "x": 15, "y": 3.25 },
+ { "h": 2, "label": "Enter", "matrix": [7, 6], "w": 1.25, "x": 16, "y": 2.25 },
+ { "label": "1", "matrix": [4, 7], "x": 17.75, "y": 4.25 },
+ { "label": "2", "matrix": [3, 8], "x": 18.75, "y": 4.25 },
+ { "label": "3", "matrix": [6, 8], "x": 19.75, "y": 4.25 },
+ { "h": 2, "label": "Enter", "matrix": [5, 8], "x": 20.75, "y": 4.25 },
+
+ { "label": "Shift", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "label": "~", "matrix": [7, 0], "x": 1.25, "y": 4.25 },
+ { "label": "Z", "matrix": [5, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [7, 1], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [5, 2], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [7, 2], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [3, 3], "x": 6.25, "y": 4.25 },
+ { "label": "B", "matrix": [5, 3], "x": 8.5, "y": 4.25 },
+ { "label": "N", "matrix": [4, 4], "x": 9.5, "y": 4.25 },
+ { "label": "M", "matrix": [5, 4], "x": 10.5, "y": 4.25 },
+ { "label": "<", "matrix": [7, 4], "x": 11.5, "y": 4.25 },
+ { "label": ">", "matrix": [4, 5], "x": 12.5, "y": 4.25 },
+ { "label": "?", "matrix": [7, 5], "x": 13.5, "y": 4.25 },
+ { "label": "Shift", "matrix": [5, 6], "w": 2.75, "x": 14.5, "y": 4.25 },
+ { "label": "Up", "matrix": [5, 7], "x": 17.5, "y": 5.5 },
+ { "label": "0", "matrix": [10, 7], "x": 18.75, "y": 5.25 },
+ { "label": ".", "matrix": [4, 8], "x": 19.75, "y": 5.25 },
+
+ { "label": "LCtrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "LWin", "matrix": [6, 0], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "LAlt", "matrix": [6, 1], "w": 1.25, "x": 3.25, "y": 5.25 },
+ { "label": "LSpacebar", "matrix": [6, 2], "w": 2.75, "x": 4.5, "y": 5.25 },
+ { "label": "RSpacebar", "matrix": [4, 3], "w": 2.25, "x": 8.5, "y": 5.25 },
+ { "label": "RAlt", "matrix": [6, 4], "w": 1.25, "x": 10.75, "y": 5.25 },
+ { "label": "RWin", "matrix": [5, 5], "w": 1.25, "x": 14.75, "y": 5.25 },
+ { "label": "RCtrl", "matrix": [6, 5], "w": 1.25, "x": 16, "y": 5.25 },
+ { "label": "Left", "matrix": [6, 7], "x": 16.5, "y": 6.5 },
+ { "label": "Down", "matrix": [8, 7], "x": 17.5, "y": 6.5 },
+ { "label": "Right", "matrix": [9, 7], "x": 18.5, "y": 6.5 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/adpenrose/mine/keymaps/default/keymap.c b/keyboards/adpenrose/mine/keymaps/default/keymap.c
new file mode 100644
index 000000000000..3d6cf31bd865
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+// Copyright 2022 Arturo Avila (@Arturo Avila)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_1800_alice_ansi(
+ KC_MUTE,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P4, KC_P5, KC_P6,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P0, KC_PDOT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [1] = LAYOUT_1800_alice_ansi(
+ KC_TRNS,
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/keymaps/default/rules.mk b/keyboards/adpenrose/mine/keymaps/default/rules.mk
new file mode 100644
index 000000000000..4769500eb06f
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes # Encoder mapping functionality
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/keymaps/iso/keymap.c b/keyboards/adpenrose/mine/keymaps/iso/keymap.c
new file mode 100644
index 000000000000..988330c979ff
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/iso/keymap.c
@@ -0,0 +1,33 @@
+// Copyright 2022 Arturo Avila (@Arturo Avila)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_1800_alice_iso(
+ KC_MUTE,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LSFT, MO(1), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P0, KC_PDOT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [1] = LAYOUT_1800_alice_iso(
+ KC_TRNS,
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/keymaps/iso/rules.mk b/keyboards/adpenrose/mine/keymaps/iso/rules.mk
new file mode 100644
index 000000000000..4769500eb06f
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/iso/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes # Encoder mapping functionality
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/keymaps/solenoid/keymap.c b/keyboards/adpenrose/mine/keymaps/solenoid/keymap.c
new file mode 100644
index 000000000000..cd9e1768eb6e
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/solenoid/keymap.c
@@ -0,0 +1,43 @@
+// Copyright 2022 Arturo Avila (@Arturo Avila)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ HF_TOGG,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P4, KC_P5, KC_P6,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LSFT, MO(1), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P0, KC_PDOT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [1] = LAYOUT_all(
+ KC_TRNS,
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
+};
+#endif
+
+#ifdef HAPTIC_ENABLE
+bool get_haptic_enabled_key(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_VOLU ... KC_VOLD:
+ return false;
+ }
+ return true;
+}
+#endif
diff --git a/keyboards/adpenrose/mine/keymaps/solenoid/rules.mk b/keyboards/adpenrose/mine/keymaps/solenoid/rules.mk
new file mode 100644
index 000000000000..2a1e874d82f0
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/solenoid/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+HAPTIC_ENABLE = yes
+HAPTIC_DRIVER += SOLENOID
+ENCODER_MAP_ENABLE = yes # Encoder mapping functionality
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/keymaps/via/keymap.c b/keyboards/adpenrose/mine/keymaps/via/keymap.c
new file mode 100644
index 000000000000..776ed893d54c
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+// Copyright 2022 Arturo Avila (@Arturo Avila)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_MUTE,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P4, KC_P5, KC_P6,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P0, KC_PDOT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [1] = LAYOUT_all(
+ KC_TRNS,
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
+};
+#endif
diff --git a/keyboards/adpenrose/mine/keymaps/via/rules.mk b/keyboards/adpenrose/mine/keymaps/via/rules.mk
new file mode 100644
index 000000000000..4253f570f0bb
--- /dev/null
+++ b/keyboards/adpenrose/mine/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/matrix_diagram.md b/keyboards/adpenrose/mine/matrix_diagram.md
new file mode 100644
index 000000000000..05d34fb066e7
--- /dev/null
+++ b/keyboards/adpenrose/mine/matrix_diagram.md
@@ -0,0 +1,78 @@
+# Matrix Diagram for the Mine Keyboard
+## Matrix for "LAYOUT_all":
+```
+┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐
+│0A│ │0B││1B│ │0C││1C│ │0D││1D│ │9D││AD│ │0E││0F│ │0G││1G│ │AG││0H│ │0J│
+└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘
+┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──────┐ ┌──┐┌──┐┌──┐┌──┐
+│1A││AA││2B││AB││2C││AC││2D│ │8D││1E││AE││1F││AF││2G││9G │ │1H││0I││AI││1J│
+└──┘└──┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──────┘ └──┘└──┘└──┘└──┘
+┌────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌────┐ ┌──┐┌──┐┌──┐┌──┐
+│2A ││9A││3B││9B││3C││9C│ │7D││2E││9E││2F││9F││3G││8G││7H │ │2H││1I││9I││8I│
+└────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──┘└────┘ └──┘└──┘└──┘│ │
+┌─────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌───────┐ ┌──┐┌──┐┌──┐│ │
+│3A ││8A││4B││8B││4C││8C│ │6D││3E││8E││3F││8F││4G││7G │ │3H││2I││7I││ │
+└─────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└───────┘ └──┘└──┘└──┘└──┘
+┌───┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─────────┐ ┌──┐┌──┐┌──┐┌──┐
+│4A ││7A││5B││7B││5C││7C││3D│ │5D││4E││5E││7E││4F││7F││5G │ │4H││3I││6I││5I│
+└───┘└──┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└─────────┘ └──┘└──┘└──┘│ │
+┌───┐┌───┐ ┌───┐┌─────────┐ ┌───────┐┌───┐ ┌───┐┌───┐ ┌──┐┌──┐│ │
+│5A ││6A │ │6B ││6C │ │4D ││6E │ │5F ││6F │ ┌──┐ │AH││4I││ │
+└───┘└───┘ └───┘└─────────┘ └───────┘└───┘ └───┘└───┘ │5H│ └──┘└──┘└──┘
+ └──┘
+ ┌──┐┌──┐┌──┐
+ │6H││8H││9H│
+ └──┘└──┘└──┘
+```
+
+## Matrix for "LAYOUT_1800_alice_ansi":
+```
+┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐
+│0A│ │0B││1B│ │0C││1C│ │0D││1D│ │9D││AD│ │0E││0F│ │0G││1G│ │AG││0H│ │0J│
+└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘
+┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──────┐ ┌──┐┌──┐┌──┐┌──┐
+│1A││AA││2B││AB││2C││AC││2D│ │8D││1E││AE││1F││AF││2G││9G │ │1H││0I││AI││1J│
+└──┘└──┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──────┘ └──┘└──┘└──┘└──┘
+┌────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌────┐ ┌──┐┌──┐┌──┐┌──┐
+│2A ││9A││3B││9B││3C││9C│ │7D││2E││9E││2F││9F││3G││8G││7H │ │2H││1I││9I││8I│
+└────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──┘└────┘ └──┘└──┘└──┘│ │
+┌─────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌───────┐ ┌──┐┌──┐┌──┐│ │
+│3A ││8A││4B││8B││4C││8C│ │6D││3E││8E││3F││8F││4G││7G │ │3H││2I││7I││ │
+└─────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└───────┘ └──┘└──┘└──┘└──┘
+┌───────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─────────┐ ┌──┐┌──┐┌──┐┌──┐
+│4A ││5B││7B││5C││7C││3D│ │5D││4E││5E││7E││4F││7F││5G │ │4H││3I││6I││5I│
+└───────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└─────────┘ └──┘└──┘└──┘│ │
+┌───┐┌───┐ ┌───┐┌─────────┐ ┌───────┐┌───┐ ┌───┐┌───┐ ┌──┐┌──┐│ │
+│5A ││6A │ │6B ││6C │ │4D ││6E │ │5F ││6F │ ┌──┐ │AH││4I││ │
+└───┘└───┘ └───┘└─────────┘ └───────┘└───┘ └───┘└───┘ │5H│ └──┘└──┘└──┘
+ └──┘
+ ┌──┐┌──┐┌──┐
+ │6H││8H││9H│
+ └──┘└──┘└──┘
+```
+
+## Matrix for "LAYOUT_1800_alice_iso":
+```
+┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐┌──┐ ┌──┐
+│0A│ │0B││1B│ │0C││1C│ │0D││1D│ │9D││AD│ │0E││0F│ │0G││1G│ │AG││0H│ │0J│
+└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘└──┘ └──┘
+┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──────┐ ┌──┐┌──┐┌──┐┌──┐
+│1A││AA││2B││AB││2C││AC││2D│ │8D││1E││AE││1F││AF││2G││9G │ │1H││0I││AI││1J│
+└──┘└──┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──────┘ └──┘└──┘└──┘└──┘
+┌────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌────┐ ┌──┐┌──┐┌──┐┌──┐
+│2A ││9A││3B││9B││3C││9C│ │7D││2E││9E││2F││9F││3G││8G││7G │ │2H││1I││9I││8I│
+└────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──┘└┐ │ └──┘└──┘└──┘│ │
+┌─────┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐│ │ ┌──┐┌──┐┌──┐│ │
+│3A ││8A││4B││8B││4C││8C│ │6D││3E││8E││3F││8F││4G││6G││ │ │3H││2I││7I││ │
+└─────┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└──┘└───┘ └──┘└──┘└──┘└──┘
+┌───┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─────────┐ ┌──┐┌──┐┌──┐┌──┐
+│4A ││7A││5B││7B││5C││7C││3D│ │5D││4E││5E││7E││4F││7F││5G │ │4H││3I││6I││5I│
+└───┘└──┘└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘└──┘└─────────┘ └──┘└──┘└──┘│ │
+┌───┐┌───┐ ┌───┐┌─────────┐ ┌───────┐┌───┐ ┌───┐┌───┐ ┌──┐┌──┐│ │
+│5A ││6A │ │6B ││6C │ │4D ││6E │ │5F ││6F │ ┌──┐ │AH││4I││ │
+└───┘└───┘ └───┘└─────────┘ └───────┘└───┘ └───┘└───┘ │5H│ └──┘└──┘└──┘
+ └──┘
+ ┌──┐┌──┐┌──┐
+ │6H││8H││9H│
+ └──┘└──┘└──┘
+```
\ No newline at end of file
diff --git a/keyboards/adpenrose/mine/readme.md b/keyboards/adpenrose/mine/readme.md
new file mode 100644
index 000000000000..266fe1ddd5b6
--- /dev/null
+++ b/keyboards/adpenrose/mine/readme.md
@@ -0,0 +1,27 @@
+# Mine
+
+![mine](https://i.imgur.com/P9s2cI8h.jpg)
+
+A hotswap ISO/ANSI-compatible 1800 alice, assembled only with THT components, including a solenoid and a chunky encoder.
+
+* Keyboard Maintainer: [Arturo Avila](https://github.com/ADPenrose)
+* Hardware Supported: Mine v1 PCB
+* Hardware Availability: [Arturo Avila](https://github.com/ADPenrose)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make adpenrose/mine:default
+
+Flashing example for this keyboard:
+
+ make adpenrose/mine:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Hold down the button labeled "BOOT" and briefly press the button labeled "RESET" on the front of the PCB. To exit the bootloader mode, briefly press the button labeled "RESET" once more.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/adpenrose/mine/rules.mk b/keyboards/adpenrose/mine/rules.mk
new file mode 100644
index 000000000000..93ae8d898f2d
--- /dev/null
+++ b/keyboards/adpenrose/mine/rules.mk
@@ -0,0 +1,2 @@
+# Processor frequency
+F_CPU = 16000000
\ No newline at end of file
diff --git a/keyboards/ah/haven65/haven65.c b/keyboards/ah/haven65/haven65.c
new file mode 100644
index 000000000000..b4077b1a63a3
--- /dev/null
+++ b/keyboards/ah/haven65/haven65.c
@@ -0,0 +1,29 @@
+/* Copyright 2023 CMM.S Freather
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res) {
+ if (led_state.caps_lock) {
+ rgblight_sethsv_at(0, 0, 255, 0);
+ } else {
+ rgblight_sethsv_at(0, 0, 0, 0);
+ }
+ }
+ return res;
+}
diff --git a/keyboards/ah/haven65/info.json b/keyboards/ah/haven65/info.json
new file mode 100644
index 000000000000..43214e50089c
--- /dev/null
+++ b/keyboards/ah/haven65/info.json
@@ -0,0 +1,124 @@
+{
+ "keyboard_name": "HAVEN65",
+ "manufacturer": "Atelier_Haven",
+ "url": "https://keyspensory.store/products/gb-haven65-by-atelier-haven",
+ "maintainer": "Freather",
+ "usb": {
+ "vid": "0x4446",
+ "pid": "0x4665",
+ "device_version": "1.0.0"
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "matrix_pins": {
+ "rows": ["B5", "B6", "C6", "F1", "D6"],
+ "cols": ["F7", "F6", "F5", "F4", "F0", "B4", "D0", "D1", "D2", "D3", "D5", "B0", "B1", "B2", "B3"]
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "command": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "ws2812": {
+ "pin": "C7",
+ },
+ "rgblight": {
+ "led_count": 1,
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix":[0,0],"x": 0, "y": 0 },
+ { "label": "1", "matrix":[0,1],"x": 1, "y": 0 },
+ { "label": "2", "matrix":[0,2],"x": 2, "y": 0 },
+ { "label": "3", "matrix":[0,3],"x": 3, "y": 0 },
+ { "label": "4", "matrix":[0,4],"x": 4, "y": 0 },
+ { "label": "5", "matrix":[0,5],"x": 5, "y": 0 },
+ { "label": "6", "matrix":[0,6],"x": 6, "y": 0 },
+ { "label": "7", "matrix":[0,7],"x": 7, "y": 0 },
+ { "label": "8", "matrix":[0,8],"x": 8, "y": 0 },
+ { "label": "9", "matrix":[0,9],"x": 9, "y": 0 },
+ { "label": "0", "matrix":[0,10],"x": 10, "y": 0 },
+ { "label": "-", "matrix":[0,11],"x": 11, "y": 0 },
+ { "label": "=", "matrix":[0,12],"x": 12, "y": 0 },
+ { "label": "backspace", "matrix":[0,13],"x": 13, "y": 0, "w": 2 },
+ { "label": "home", "matrix":[0,14],"x": 15, "y": 0 },
+
+ { "label": "tab", "matrix":[1,0],"x": 0, "y": 1, "w": 1.5 },
+ { "label": "q", "matrix":[1,1],"x": 1.5, "y": 1 },
+ { "label": "w", "matrix":[1,2],"x": 2.5, "y": 1 },
+ { "label": "e", "matrix":[1,3],"x": 3.5, "y": 1 },
+ { "label": "r", "matrix":[1,4],"x": 4.5, "y": 1 },
+ { "label": "t", "matrix":[1,5],"x": 5.5, "y": 1 },
+ { "label": "y", "matrix":[1,6],"x": 6.5, "y": 1 },
+ { "label": "u", "matrix":[1,7],"x": 7.5, "y": 1 },
+ { "label": "i", "matrix":[1,8],"x": 8.5, "y": 1 },
+ { "label": "o", "matrix":[1,9],"x": 9.5, "y": 1 },
+ { "label": "p", "matrix":[1,10],"x": 10.5, "y": 1 },
+ { "label": "{", "matrix":[1,11],"x": 11.5, "y": 1 },
+ { "label": "}", "matrix":[1,12],"x": 12.5, "y": 1 },
+ { "label": "|", "matrix":[2,13],"x": 13.5, "y": 1, "w": 1.5 },
+ { "label": "insert", "matrix":[1,14],"x": 15, "y": 1 },
+
+ { "label": "capslock", "matrix":[2,0],"x": 0, "y": 2, "w": 1.75 },
+ { "label": "a", "matrix":[2,1],"x": 1.75, "y": 2 },
+ { "label": "s", "matrix":[2,2],"x": 2.75, "y": 2 },
+ { "label": "d", "matrix":[2,3],"x": 3.75, "y": 2 },
+ { "label": "f", "matrix":[2,4],"x": 4.75, "y": 2 },
+ { "label": "g", "matrix":[2,5],"x": 5.75, "y": 2 },
+ { "label": "h", "matrix":[2,6],"x": 6.75, "y": 2 },
+ { "label": "j", "matrix":[2,7],"x": 7.75, "y": 2 },
+ { "label": "k", "matrix":[2,8],"x": 8.75, "y": 2 },
+ { "label": "l", "matrix":[2,9],"x": 9.75, "y": 2 },
+ { "label": ";", "matrix":[2,10],"x": 10.75, "y": 2 },
+ { "label": "'", "matrix":[2,11],"x": 11.75, "y": 2 },
+ { "label": "enter", "matrix":[2,12],"x": 12.75, "y": 2, "w": 2.25 },
+ { "label": "delete", "matrix":[2,14],"x": 15, "y": 2 },
+
+ { "label": "leftshift", "matrix":[3,0],"x": 0, "y": 3, "w": 2.25 },
+ { "label": "z", "matrix":[3,2],"x": 2.25, "y": 3 },
+ { "label": "x", "matrix":[3,3],"x": 3.25, "y": 3 },
+ { "label": "c", "matrix":[3,4],"x": 4.25, "y": 3 },
+ { "label": "v", "matrix":[3,5],"x": 5.25, "y": 3 },
+ { "label": "b", "matrix":[3,6],"x": 6.25, "y": 3 },
+ { "label": "n", "matrix":[3,7],"x": 7.25, "y": 3 },
+ { "label": "m", "matrix":[3,8],"x": 8.25, "y": 3 },
+ { "label": ",", "matrix":[3,9],"x": 9.25, "y": 3 },
+ { "label": ".", "matrix":[3,10],"x": 10.25, "y": 3 },
+ { "label": "/", "matrix":[3,11],"x": 11.25, "y": 3 },
+ { "label": "rightshift", "matrix":[3,12],"x": 12.25, "y": 3, "w": 1.75 },
+ { "label": "up", "matrix":[3,13],"x": 14, "y": 3 },
+ { "label": "end", "matrix":[3,14],"x": 15, "y": 3 },
+
+ { "label": "lctrl", "matrix":[4,0],"x": 0, "y": 4, "w": 1.25 },
+ { "label": "lwin", "matrix":[4,1],"x": 1.25, "y": 4, "w": 1.25 },
+ { "label": "lalt", "matrix":[4,2],"x": 2.5, "y": 4, "w": 1.25 },
+ { "label": "space", "matrix":[4,6],"x": 3.75, "y": 4, "w": 6.25 },
+ { "label": "ralt", "matrix":[4,9],"x": 10, "y": 4, "w": 1.25 },
+ { "label": "MO(1)", "matrix":[4,10],"x": 11.25, "y": 4, "w": 1.25 },
+ { "label": "left", "matrix":[4,11],"x": 13, "y": 4 },
+ { "label": "down", "matrix":[4,12],"x": 14, "y": 4 },
+ { "label": "right", "matrix":[4,13],"x": 15, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/ah/haven65/keymaps/default/keymap.c b/keyboards/ah/haven65/keymaps/default/keymap.c
new file mode 100644
index 000000000000..1d3e67b78bb3
--- /dev/null
+++ b/keyboards/ah/haven65/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Freather
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BACKSPACE, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/ah/haven65/keymaps/via/keymap.c b/keyboards/ah/haven65/keymaps/via/keymap.c
new file mode 100644
index 000000000000..c42231995fb1
--- /dev/null
+++ b/keyboards/ah/haven65/keymaps/via/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 Freather
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BACKSPACE, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS , KC_TRNS , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+
+ )
+};
diff --git a/keyboards/ah/haven65/keymaps/via/rules.mk b/keyboards/ah/haven65/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/ah/haven65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/ah/haven65/readme.md b/keyboards/ah/haven65/readme.md
new file mode 100644
index 000000000000..bf29ca0810bd
--- /dev/null
+++ b/keyboards/ah/haven65/readme.md
@@ -0,0 +1,21 @@
+#Haven65
+
+![haven 65](https://i.imgur.com/M1l1DaOh.png)
+
+
+* Keyboard Maintainer: [Freather](https://github.com/CMMS-Freather)
+* Hardware Supported: PCB, Atmega32u4
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ah/haven65:default
+
+Flashing example for this keyboard:
+
+ make ah/haven65:default:flash
+
+##Bootloader Atmel-DFU
+
+For reset instruction, use the physical reset button on the back of the keyboard to enter bootloader mode
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ah/haven65/rules.mk b/keyboards/ah/haven65/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/ah/haven65/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/ah/haven80/haven80.c b/keyboards/ah/haven80/haven80.c
new file mode 100644
index 000000000000..d02130cfe9ef
--- /dev/null
+++ b/keyboards/ah/haven80/haven80.c
@@ -0,0 +1,29 @@
+/* Copyright 2023 CMM.S Freather
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res) {
+ if (led_state.caps_lock) {
+ rgblight_sethsv_range(0, 0, 255, 0,20);
+ } else {
+ rgblight_sethsv_range(0, 0, 0, 0, 20);
+ }
+ }
+ return res;
+}
diff --git a/keyboards/ah/haven80/hotswap/info.json b/keyboards/ah/haven80/hotswap/info.json
new file mode 100644
index 000000000000..4ec292ef9655
--- /dev/null
+++ b/keyboards/ah/haven80/hotswap/info.json
@@ -0,0 +1,110 @@
+{
+ "keyboard_name": "haven80_hotswap",
+ "usb": {
+ "vid": "0x4446",
+ "pid": "0x4680",
+ "device_version": "1.0.0"
+ },
+ "matrix_pins": {
+ "rows": ["F0", "F1", "F4", "F5", "F6", "B1", "B2", "B3", "D3", "D5", "F7"],
+ "cols": ["D0", "D1", "D2", "B0", "D4", "B4", "D6", "D7", "B5"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix":[0,0],"x": 0, "y": 0 },
+ { "label": "F1", "matrix":[0,1],"x": 1.25, "y": 0 },
+ { "label": "F2", "matrix":[0,2],"x": 2.25, "y": 0 },
+ { "label": "F3", "matrix":[0,3],"x": 3.25, "y": 0 },
+ { "label": "F4", "matrix":[0,4],"x": 4.25, "y": 0 },
+ { "label": "F5", "matrix":[0,5],"x": 5.5, "y": 0 },
+ { "label": "F6", "matrix":[0,6],"x": 6.5, "y": 0 },
+ { "label": "F7", "matrix":[0,7],"x": 7.5, "y": 0 },
+ { "label": "F8", "matrix":[5,8],"x": 8.5, "y": 0 },
+ { "label": "F9", "matrix":[5,7],"x": 9.5, "y": 0 },
+ { "label": "F10", "matrix":[5,6],"x": 10.75, "y": 0 },
+ { "label": "F11", "matrix":[5,5],"x": 11.75, "y": 0 },
+ { "label": "F12", "matrix":[5,4],"x": 12.75, "y": 0 },
+ { "label": "F13", "matrix":[5,3],"x": 13.75, "y": 0 },
+ { "label": "Prtsc", "matrix":[5,2],"x": 15.25, "y": 0 },
+ { "label": "Scrlk", "matrix":[5,1],"x": 16.25, "y": 0 },
+ { "label": "Pause", "matrix":[5,0],"x": 17.25, "y": 0 },
+
+ { "label": "~", "matrix":[1,0],"x": 0, "y": 1.5 },
+ { "label": "1", "matrix":[1,1],"x": 1, "y": 1.5 },
+ { "label": "2", "matrix":[1,2],"x": 2, "y": 1.5 },
+ { "label": "3", "matrix":[1,3],"x": 3, "y": 1.5 },
+ { "label": "4", "matrix":[1,4],"x": 4, "y": 1.5 },
+ { "label": "5", "matrix":[1,5],"x": 5, "y": 1.5 },
+ { "label": "6", "matrix":[1,6],"x": 6, "y": 1.5 },
+ { "label": "7", "matrix":[1,7],"x": 7, "y": 1.5 },
+ { "label": "8", "matrix":[1,8],"x": 8, "y": 1.5 },
+ { "label": "9", "matrix":[6,8],"x": 9, "y": 1.5 },
+ { "label": "0", "matrix":[6,7],"x": 10, "y": 1.5 },
+ { "label": "-", "matrix":[6,6],"x": 11, "y": 1.5 },
+ { "label": "=", "matrix":[6,5],"x": 12, "y": 1.5 },
+ { "label": "backspace", "matrix":[6,4],"x": 13, "y": 1.5, "w": 2 },
+ { "label": "insert", "matrix":[6,2],"x": 15.25, "y": 1.5 },
+ { "label": "home", "matrix":[6,1],"x": 16.25, "y": 1.5 },
+ { "label": "pg up", "matrix":[6,0],"x": 17.25, "y": 1.5 },
+
+ { "label": "tab", "matrix":[2,0],"x": 0, "y": 2.5, "w": 1.5 },
+ { "label": "q", "matrix":[2,1],"x": 1.5, "y": 2.5 },
+ { "label": "w", "matrix":[2,2],"x": 2.5, "y": 2.5 },
+ { "label": "e", "matrix":[2,3],"x": 3.5, "y": 2.5 },
+ { "label": "r", "matrix":[2,4],"x": 4.5, "y": 2.5 },
+ { "label": "t", "matrix":[2,5],"x": 5.5, "y": 2.5 },
+ { "label": "y", "matrix":[2,6],"x": 6.5, "y": 2.5 },
+ { "label": "u", "matrix":[2,7],"x": 7.5, "y": 2.5 },
+ { "label": "i", "matrix":[2,8],"x": 8.5, "y": 2.5 },
+ { "label": "o", "matrix":[7,8],"x": 9.5, "y": 2.5 },
+ { "label": "p", "matrix":[7,7],"x": 10.5, "y": 2.5 },
+ { "label": "{", "matrix":[7,6],"x": 11.5, "y": 2.5 },
+ { "label": "}", "matrix":[7,5],"x": 12.5, "y": 2.5 },
+ { "label": "|", "matrix":[7,4],"x": 13.5, "y": 2.5, "w": 1.5 },
+ { "label": "delete", "matrix":[7,2],"x": 15.25, "y": 2.5 },
+ { "label": "end", "matrix":[7,1],"x": 16.25, "y": 2.5 },
+ { "label": "pg dn", "matrix":[7,0],"x": 17.25, "y": 2.5 },
+
+ { "label": "capslock", "matrix":[3,0],"x": 0, "y": 3.5, "w": 1.75 },
+ { "label": "a", "matrix":[3,1],"x": 1.75, "y": 3.5 },
+ { "label": "s", "matrix":[3,2],"x": 2.75, "y": 3.5 },
+ { "label": "d", "matrix":[3,3],"x": 3.75, "y": 3.5 },
+ { "label": "f", "matrix":[3,4],"x": 4.75, "y": 3.5 },
+ { "label": "g", "matrix":[3,5],"x": 5.75, "y": 3.5 },
+ { "label": "h", "matrix":[3,6],"x": 6.75, "y": 3.5 },
+ { "label": "j", "matrix":[3,7],"x": 7.75, "y": 3.5 },
+ { "label": "k", "matrix":[3,8],"x": 8.75, "y": 3.5 },
+ { "label": "l", "matrix":[8,8],"x": 9.75, "y": 3.5 },
+ { "label": ";", "matrix":[8,7],"x": 10.75, "y": 3.5 },
+ { "label": "'", "matrix":[8,6],"x": 11.75, "y": 3.5 },
+ { "label": "enter", "matrix":[8,5],"x": 12.75, "y": 3.5, "w": 2.25 },
+
+ { "label": "leftshift", "matrix":[4,0],"x": 0, "y": 4.5, "w": 2.25 },
+ { "label": "z", "matrix":[4,1],"x": 2.25, "y": 4.5 },
+ { "label": "x", "matrix":[4,2],"x": 3.25, "y": 4.5 },
+ { "label": "c", "matrix":[4,3],"x": 4.25, "y": 4.5 },
+ { "label": "v", "matrix":[4,4],"x": 5.25, "y": 4.5 },
+ { "label": "b", "matrix":[4,5],"x": 6.25, "y": 4.5 },
+ { "label": "n", "matrix":[4,6],"x": 7.25, "y": 4.5 },
+ { "label": "m", "matrix":[4,7],"x": 8.25, "y": 4.5 },
+ { "label": ",", "matrix":[4,8],"x": 9.25, "y": 4.5 },
+ { "label": ".", "matrix":[9,8],"x": 10.25, "y": 4.5 },
+ { "label": "/", "matrix":[9,7],"x": 11.25, "y": 4.5 },
+ { "label": "rightshift", "matrix":[9,6],"x": 12.25, "y": 4.5, "w": 2.75 },
+ { "label": "up", "matrix":[8,1],"x": 16.25, "y": 4.5 },
+
+ { "label": "lctrl", "matrix":[10,0],"x": 0, "y": 5.5, "w": 1.5 },
+ { "label": "lwin", "matrix":[10,1],"x": 1.5, "y": 5.5 },
+ { "label": "lalt", "matrix":[10,2],"x": 2.5, "y": 5.5, "w": 1.5 },
+ { "label": "space", "matrix":[10,3],"x": 4, "y": 5.5, "w": 7 },
+ { "label": "ralt", "matrix":[10,5],"x": 11, "y": 5.5, "w": 1.5 },
+ { "label": "rwin", "matrix":[10,6],"x": 12.5, "y": 5.5, "w": 1 },
+ { "label": "rctrl", "matrix":[10,7],"x": 13.5, "y": 5.5, "w":1.5},
+ { "label": "left", "matrix":[9,2],"x": 15.25, "y": 5.5 },
+ { "label": "down", "matrix":[9,1],"x": 16.25, "y": 5.5 },
+ { "label": "right", "matrix":[9,0],"x": 17.25, "y": 5.5 }
+ ]
+ }
+ },
+}
diff --git a/keyboards/ah/haven80/hotswap/readme.md b/keyboards/ah/haven80/hotswap/readme.md
new file mode 100644
index 000000000000..a43054863c33
--- /dev/null
+++ b/keyboards/ah/haven80/hotswap/readme.md
@@ -0,0 +1,21 @@
+#Haven80 Hotswap
+
+![haven 80 hotswap](https://i.imgur.com/lXKf8Cih.png)
+
+
+* Keyboard Maintainer: [Freather](https://github.com/CMMS-Freather)
+* Hardware Supported: PCB, Atmega32u4
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ah/haven80/hotswap:default
+
+Flashing example for this keyboard:
+
+ make ah/haven80/hotswap:default:flash
+
+##Bootloader Atmel-DFU
+
+For reset instruction, use the physical reset button on the back of the keyboard to enter bootloader mode
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ah/haven80/hotswap/rules.mk b/keyboards/ah/haven80/hotswap/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/ah/haven80/hotswap/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/ah/haven80/info.json b/keyboards/ah/haven80/info.json
new file mode 100644
index 000000000000..bd8781515495
--- /dev/null
+++ b/keyboards/ah/haven80/info.json
@@ -0,0 +1,34 @@
+{
+ "manufacturer": "Atelier_Haven",
+ "url": "",
+ "maintainer": "Freather",
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "ws2812": {
+ "pin": "E6",
+ },
+ "rgblight": {
+ "led_count": 21,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ }
+}
diff --git a/keyboards/ah/haven80/keymaps/default/keymap.c b/keyboards/ah/haven80/keymaps/default/keymap.c
new file mode 100644
index 000000000000..cbcc6bef38e2
--- /dev/null
+++ b/keyboards/ah/haven80/keymaps/default/keymap.c
@@ -0,0 +1,15 @@
+// Copyright 2023 Freather
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/ah/haven80/keymaps/via/keymap.c b/keyboards/ah/haven80/keymaps/via/keymap.c
new file mode 100644
index 000000000000..03b98293fcd2
--- /dev/null
+++ b/keyboards/ah/haven80/keymaps/via/keymap.c
@@ -0,0 +1,16 @@
+// Copyright 2023 Freather
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+};
diff --git a/keyboards/ah/haven80/keymaps/via/rules.mk b/keyboards/ah/haven80/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/ah/haven80/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/ah/haven80/solder/info.json b/keyboards/ah/haven80/solder/info.json
new file mode 100644
index 000000000000..db9eb015de11
--- /dev/null
+++ b/keyboards/ah/haven80/solder/info.json
@@ -0,0 +1,110 @@
+{
+ "keyboard_name": "haven80_solder",
+ "usb": {
+ "vid": "0x4446",
+ "pid": "0x4681",
+ "device_version": "1.0.0"
+ },
+ "matrix_pins": {
+ "rows": ["F0", "F1", "F4", "F5", "C6", "B1", "B2", "B3", "D3", "D5", "D6"],
+ "cols": ["D0", "D1", "D2", "B0", "C7", "B5", "D7", "B4", "B6"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix":[0,0],"x": 0, "y": 0 },
+ { "label": "F1", "matrix":[0,1],"x": 1.25, "y": 0 },
+ { "label": "F2", "matrix":[0,2],"x": 2.25, "y": 0 },
+ { "label": "F3", "matrix":[0,3],"x": 3.25, "y": 0 },
+ { "label": "F4", "matrix":[0,4],"x": 4.25, "y": 0 },
+ { "label": "F5", "matrix":[0,5],"x": 5.5, "y": 0 },
+ { "label": "F6", "matrix":[0,6],"x": 6.5, "y": 0 },
+ { "label": "F7", "matrix":[0,7],"x": 7.5, "y": 0 },
+ { "label": "F8", "matrix":[5,8],"x": 8.5, "y": 0 },
+ { "label": "F9", "matrix":[5,7],"x": 9.5, "y": 0 },
+ { "label": "F10", "matrix":[5,6],"x": 10.75, "y": 0 },
+ { "label": "F11", "matrix":[5,5],"x": 11.75, "y": 0 },
+ { "label": "F12", "matrix":[5,4],"x": 12.75, "y": 0 },
+ { "label": "F13", "matrix":[5,3],"x": 13.75, "y": 0 },
+ { "label": "Prtsc", "matrix":[5,2],"x": 15.25, "y": 0 },
+ { "label": "Scrlk", "matrix":[5,1],"x": 16.25, "y": 0 },
+ { "label": "Pause", "matrix":[5,0],"x": 17.25, "y": 0 },
+
+ { "label": "~", "matrix":[1,0],"x": 0, "y": 1.5 },
+ { "label": "1", "matrix":[1,1],"x": 1, "y": 1.5 },
+ { "label": "2", "matrix":[1,2],"x": 2, "y": 1.5 },
+ { "label": "3", "matrix":[1,3],"x": 3, "y": 1.5 },
+ { "label": "4", "matrix":[1,4],"x": 4, "y": 1.5 },
+ { "label": "5", "matrix":[1,5],"x": 5, "y": 1.5 },
+ { "label": "6", "matrix":[1,6],"x": 6, "y": 1.5 },
+ { "label": "7", "matrix":[1,7],"x": 7, "y": 1.5 },
+ { "label": "8", "matrix":[1,8],"x": 8, "y": 1.5 },
+ { "label": "9", "matrix":[6,8],"x": 9, "y": 1.5 },
+ { "label": "0", "matrix":[6,7],"x": 10, "y": 1.5 },
+ { "label": "-", "matrix":[6,6],"x": 11, "y": 1.5 },
+ { "label": "=", "matrix":[6,5],"x": 12, "y": 1.5 },
+ { "label": "backspace", "matrix":[6,4],"x": 13, "y": 1.5, "w": 2 },
+ { "label": "insert", "matrix":[6,2],"x": 15.25, "y": 1.5 },
+ { "label": "home", "matrix":[6,1],"x": 16.25, "y": 1.5 },
+ { "label": "pg up", "matrix":[6,0],"x": 17.25, "y": 1.5 },
+
+ { "label": "tab", "matrix":[2,0],"x": 0, "y": 2.5, "w": 1.5 },
+ { "label": "q", "matrix":[2,1],"x": 1.5, "y": 2.5 },
+ { "label": "w", "matrix":[2,2],"x": 2.5, "y": 2.5 },
+ { "label": "e", "matrix":[2,3],"x": 3.5, "y": 2.5 },
+ { "label": "r", "matrix":[2,4],"x": 4.5, "y": 2.5 },
+ { "label": "t", "matrix":[2,5],"x": 5.5, "y": 2.5 },
+ { "label": "y", "matrix":[2,6],"x": 6.5, "y": 2.5 },
+ { "label": "u", "matrix":[2,7],"x": 7.5, "y": 2.5 },
+ { "label": "i", "matrix":[2,8],"x": 8.5, "y": 2.5 },
+ { "label": "o", "matrix":[7,8],"x": 9.5, "y": 2.5 },
+ { "label": "p", "matrix":[7,7],"x": 10.5, "y": 2.5 },
+ { "label": "{", "matrix":[7,6],"x": 11.5, "y": 2.5 },
+ { "label": "}", "matrix":[7,5],"x": 12.5, "y": 2.5 },
+ { "label": "|", "matrix":[7,4],"x": 13.5, "y": 2.5, "w": 1.5 },
+ { "label": "delete", "matrix":[7,2],"x": 15.25, "y": 2.5 },
+ { "label": "end", "matrix":[7,1],"x": 16.25, "y": 2.5 },
+ { "label": "pg dn", "matrix":[7,0],"x": 17.25, "y": 2.5 },
+
+ { "label": "capslock", "matrix":[3,0],"x": 0, "y": 3.5, "w": 1.75 },
+ { "label": "a", "matrix":[3,1],"x": 1.75, "y": 3.5 },
+ { "label": "s", "matrix":[3,2],"x": 2.75, "y": 3.5 },
+ { "label": "d", "matrix":[3,3],"x": 3.75, "y": 3.5 },
+ { "label": "f", "matrix":[3,4],"x": 4.75, "y": 3.5 },
+ { "label": "g", "matrix":[3,5],"x": 5.75, "y": 3.5 },
+ { "label": "h", "matrix":[3,6],"x": 6.75, "y": 3.5 },
+ { "label": "j", "matrix":[3,7],"x": 7.75, "y": 3.5 },
+ { "label": "k", "matrix":[3,8],"x": 8.75, "y": 3.5 },
+ { "label": "l", "matrix":[8,8],"x": 9.75, "y": 3.5 },
+ { "label": ";", "matrix":[8,7],"x": 10.75, "y": 3.5 },
+ { "label": "'", "matrix":[8,6],"x": 11.75, "y": 3.5 },
+ { "label": "enter", "matrix":[8,5],"x": 12.75, "y": 3.5, "w": 2.25 },
+
+ { "label": "leftshift", "matrix":[4,0],"x": 0, "y": 4.5, "w": 2.25 },
+ { "label": "z", "matrix":[4,1],"x": 2.25, "y": 4.5 },
+ { "label": "x", "matrix":[4,2],"x": 3.25, "y": 4.5 },
+ { "label": "c", "matrix":[4,3],"x": 4.25, "y": 4.5 },
+ { "label": "v", "matrix":[4,4],"x": 5.25, "y": 4.5 },
+ { "label": "b", "matrix":[4,5],"x": 6.25, "y": 4.5 },
+ { "label": "n", "matrix":[4,6],"x": 7.25, "y": 4.5 },
+ { "label": "m", "matrix":[4,7],"x": 8.25, "y": 4.5 },
+ { "label": ",", "matrix":[4,8],"x": 9.25, "y": 4.5 },
+ { "label": ".", "matrix":[9,8],"x": 10.25, "y": 4.5 },
+ { "label": "/", "matrix":[9,7],"x": 11.25, "y": 4.5 },
+ { "label": "rightshift", "matrix":[9,6],"x": 12.25, "y": 4.5, "w": 2.75 },
+ { "label": "up", "matrix":[8,1],"x": 16.25, "y": 4.5 },
+
+ { "label": "lctrl", "matrix":[10,0],"x": 0, "y": 5.5, "w": 1.5 },
+ { "label": "lwin", "matrix":[10,1],"x": 1.5, "y": 5.5 },
+ { "label": "lalt", "matrix":[10,2],"x": 2.5, "y": 5.5, "w": 1.5 },
+ { "label": "space", "matrix":[10,3],"x": 4, "y": 5.5, "w": 7 },
+ { "label": "ralt", "matrix":[10,5],"x": 11, "y": 5.5, "w": 1.5 },
+ { "label": "rwin", "matrix":[10,6],"x": 12.5, "y": 5.5, "w": 1 },
+ { "label": "rctrl", "matrix":[10,7],"x": 13.5, "y": 5.5, "w":1.5},
+ { "label": "left", "matrix":[9,2],"x": 15.25, "y": 5.5 },
+ { "label": "down", "matrix":[9,1],"x": 16.25, "y": 5.5 },
+ { "label": "right", "matrix":[9,0],"x": 17.25, "y": 5.5 }
+ ]
+ }
+ },
+}
diff --git a/keyboards/ah/haven80/solder/readme.md b/keyboards/ah/haven80/solder/readme.md
new file mode 100644
index 000000000000..670e760682ce
--- /dev/null
+++ b/keyboards/ah/haven80/solder/readme.md
@@ -0,0 +1,21 @@
+# Haven80 Solder
+
+![haven 80 hotswap](https://i.imgur.com/TBXFqE5h.png)
+
+
+* Keyboard Maintainer: [Freather](https://github.com/CMMS-Freather)
+* Hardware Supported: PCB, Atmega32u4
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ah/haven80/solder:default
+
+Flashing example for this keyboard:
+
+ make ah/haven80/solder:default:flash
+
+## Bootloader
+
+For reset instruction, use the physical reset button on the back of the keyboard to enter bootloader mode
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ah/haven80/solder/rules.mk b/keyboards/ah/haven80/solder/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/ah/haven80/solder/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/akko/5108/5108.c b/keyboards/akko/5108/5108.c
new file mode 100644
index 000000000000..a14f02bc76e8
--- /dev/null
+++ b/keyboards/akko/5108/5108.c
@@ -0,0 +1,162 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ /*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},
+ {1, D_11, E_11, F_11},
+ {1, D_12, E_12, F_12},
+ {1, D_13, E_13, F_13},
+ {1, D_14, E_14, F_14},
+
+ /*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},
+ {1, D_4, E_4, F_4},
+ {1, D_5, E_5, F_5},
+ {1, D_6, E_6, F_6},
+ {1, D_7, E_7, F_7},
+
+ /*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},
+ {1, D_8, E_8, F_8},
+ {1, D_9, E_9, F_9},
+ {1, D_10, E_10, F_10},
+ {1, G_7, H_7, I_7},
+
+ /*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},
+ {1, G_4, H_4, I_4},
+ {1, G_5, H_5, I_5},
+ {1, G_6, H_6, I_6},
+
+ /*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},
+ {1, J_7, K_7, L_7},
+ {1, J_8, K_8, L_8},
+ {1, J_9, K_9, L_9},
+ {1, J_10, K_10, L_10},
+
+ /*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},
+ {1, J_5, K_5, L_5},
+ {1, J_6, K_6, L_6},
+
+};
+#endif
+
+void keyboard_pre_init_kb(void) {
+ setPinOutput(LED_WIN_LOCK_PIN); // LED3 Win Lock
+ writePinLow(LED_WIN_LOCK_PIN);
+ keyboard_pre_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res) {
+ writePin(LED_WIN_LOCK_PIN, keymap_config.no_gui);
+ }
+ return res;
+}
diff --git a/keyboards/akko/5108/config.h b/keyboards/akko/5108/config.h
new file mode 100644
index 000000000000..f56e825e0501
--- /dev/null
+++ b/keyboards/akko/5108/config.h
@@ -0,0 +1,54 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Use 5 dynamic keymap layers */
+#define DYNAMIC_KEYMAP_LAYER_COUNT 6
+
+/* LED Indicators */
+#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_SCL_PAL_MODE 4
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000 /* 400000 */
+
+#define RGB_MATRIX_LED_COUNT 108
+
+#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
+#define RGB_MATRIX_KEYRELEASES
diff --git a/keyboards/akko/5108/halconf.h b/keyboards/akko/5108/halconf.h
new file mode 100644
index 000000000000..2f64e65393a5
--- /dev/null
+++ b/keyboards/akko/5108/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/akko/5108/info.json b/keyboards/akko/5108/info.json
new file mode 100644
index 000000000000..e9e99be69e3f
--- /dev/null
+++ b/keyboards/akko/5108/info.json
@@ -0,0 +1,290 @@
+{
+ "keyboard_name": "5108",
+ "manufacturer": "Akko",
+ "url":"https://www.akkogear.com",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "vid": "0xFFFE",
+ "pid": "0x000D",
+ "device_version": "1.0.3",
+ "suspend_wakeup_delay": 400,
+ "force_nkro": true
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": [ "C1", "C2", "C3", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B2", "B10", "B11", "B12", "B13", "B14"],
+ "rows": ["B15", "C6", "C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "indicators": {
+ "num_lock": "A15",
+ "caps_lock": "C10"
+ },
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "max_brightness": 180,
+ "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": 20, "y": 0 },
+ { "flags": 4, "matrix": [0, 2], "x": 30, "y": 0 },
+ { "flags": 4, "matrix": [0, 3], "x": 40, "y": 0 },
+ { "flags": 4, "matrix": [0, 4], "x": 50, "y": 0 },
+ { "flags": 4, "matrix": [0, 5], "x": 70, "y": 0 },
+ { "flags": 4, "matrix": [0, 6], "x": 80, "y": 0 },
+ { "flags": 4, "matrix": [0, 7], "x": 90, "y": 0 },
+ { "flags": 4, "matrix": [0, 8], "x": 100, "y": 0 },
+ { "flags": 4, "matrix": [0, 9], "x": 110, "y": 0 },
+ { "flags": 4, "matrix": [0, 10], "x": 120, "y": 0 },
+ { "flags": 4, "matrix": [0, 11], "x": 130, "y": 0 },
+ { "flags": 4, "matrix": [0, 12], "x": 140, "y": 0 },
+ { "flags": 4, "matrix": [0, 14], "x": 156, "y": 0 },
+ { "flags": 4, "matrix": [0, 15], "x": 166, "y": 0 },
+ { "flags": 4, "matrix": [0, 16], "x": 176, "y": 0 },
+ { "flags": 4, "matrix": [0, 17], "x": 194, "y": 0 },
+ { "flags": 4, "matrix": [0, 18], "x": 204, "y": 0 },
+ { "flags": 4, "matrix": [0, 19], "x": 214, "y": 0 },
+ { "flags": 4, "matrix": [0, 20], "x": 224, "y": 0 },
+
+ { "flags": 4, "matrix": [1, 0], "x": 0, "y": 13 },
+ { "flags": 4, "matrix": [1, 1], "x": 10, "y": 13 },
+ { "flags": 4, "matrix": [1, 2], "x": 20, "y": 13 },
+ { "flags": 4, "matrix": [1, 3], "x": 30, "y": 13 },
+ { "flags": 4, "matrix": [1, 4], "x": 40, "y": 13 },
+ { "flags": 4, "matrix": [1, 5], "x": 50, "y": 13 },
+ { "flags": 4, "matrix": [1, 6], "x": 60, "y": 13 },
+ { "flags": 4, "matrix": [1, 7], "x": 70, "y": 13 },
+ { "flags": 4, "matrix": [1, 8], "x": 80, "y": 13 },
+ { "flags": 4, "matrix": [1, 9], "x": 90, "y": 13 },
+ { "flags": 4, "matrix": [1, 10], "x": 100, "y": 13 },
+ { "flags": 4, "matrix": [1, 11], "x": 110, "y": 13 },
+ { "flags": 4, "matrix": [1, 12], "x": 120, "y": 13 },
+ { "flags": 4, "matrix": [1, 13], "x": 140, "y": 13 },
+ { "flags": 4, "matrix": [1, 14], "x": 156, "y": 13 },
+ { "flags": 4, "matrix": [1, 15], "x": 166, "y": 13 },
+ { "flags": 4, "matrix": [1, 16], "x": 176, "y": 13 },
+ { "flags": 4, "matrix": [1, 17], "x": 194, "y": 13 },
+ { "flags": 4, "matrix": [1, 18], "x": 204, "y": 13 },
+ { "flags": 4, "matrix": [1, 19], "x": 214, "y": 13 },
+ { "flags": 4, "matrix": [1, 20], "x": 224, "y": 13 },
+
+ { "flags": 4, "matrix": [2, 0], "x": 0, "y": 26 },
+ { "flags": 4, "matrix": [2, 1], "x": 10, "y": 26 },
+ { "flags": 4, "matrix": [2, 2], "x": 20, "y": 26 },
+ { "flags": 4, "matrix": [2, 3], "x": 30, "y": 26 },
+ { "flags": 4, "matrix": [2, 4], "x": 40, "y": 26 },
+ { "flags": 4, "matrix": [2, 5], "x": 50, "y": 26 },
+ { "flags": 4, "matrix": [2, 6], "x": 60, "y": 26 },
+ { "flags": 4, "matrix": [2, 7], "x": 70, "y": 26 },
+ { "flags": 4, "matrix": [2, 8], "x": 80, "y": 26 },
+ { "flags": 4, "matrix": [2, 9], "x": 90, "y": 26 },
+ { "flags": 4, "matrix": [2, 10], "x": 100, "y": 26 },
+ { "flags": 4, "matrix": [2, 11], "x": 110, "y": 26 },
+ { "flags": 4, "matrix": [2, 12], "x": 128, "y": 26 },
+ { "flags": 4, "matrix": [2, 13], "x": 140, "y": 26 },
+ { "flags": 4, "matrix": [2, 14], "x": 156, "y": 26 },
+ { "flags": 4, "matrix": [2, 15], "x": 166, "y": 26 },
+ { "flags": 4, "matrix": [2, 16], "x": 176, "y": 26 },
+ { "flags": 4, "matrix": [2, 17], "x": 194, "y": 26 },
+ { "flags": 4, "matrix": [2, 18], "x": 204, "y": 26 },
+ { "flags": 4, "matrix": [2, 19], "x": 214, "y": 26 },
+ { "flags": 4, "matrix": [2, 20], "x": 224, "y": 26 },
+
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 38 },
+ { "flags": 4, "matrix": [3, 1], "x": 10, "y": 38 },
+ { "flags": 4, "matrix": [3, 2], "x": 20, "y": 38 },
+ { "flags": 4, "matrix": [3, 3], "x": 30, "y": 38 },
+ { "flags": 4, "matrix": [3, 4], "x": 40, "y": 38 },
+ { "flags": 4, "matrix": [3, 5], "x": 50, "y": 38 },
+ { "flags": 4, "matrix": [3, 6], "x": 60, "y": 38 },
+ { "flags": 4, "matrix": [3, 7], "x": 70, "y": 38 },
+ { "flags": 4, "matrix": [3, 8], "x": 80, "y": 38 },
+ { "flags": 4, "matrix": [3, 9], "x": 90, "y": 38 },
+ { "flags": 4, "matrix": [3, 10], "x": 100, "y": 38 },
+ { "flags": 4, "matrix": [3, 11], "x": 110, "y": 38 },
+ { "flags": 4, "matrix": [3, 13], "x": 135, "y": 38 },
+ { "flags": 4, "matrix": [3, 17], "x": 194, "y": 38 },
+ { "flags": 4, "matrix": [3, 18], "x": 204, "y": 38 },
+ { "flags": 4, "matrix": [3, 19], "x": 214, "y": 38 },
+
+ { "flags": 4, "matrix": [4, 0], "x": 5, "y": 51 },
+ { "flags": 4, "matrix": [4, 1], "x": 20, "y": 51 },
+ { "flags": 4, "matrix": [4, 2], "x": 30, "y": 51 },
+ { "flags": 4, "matrix": [4, 3], "x": 40, "y": 51 },
+ { "flags": 4, "matrix": [4, 4], "x": 50, "y": 51 },
+ { "flags": 4, "matrix": [4, 5], "x": 60, "y": 51 },
+ { "flags": 4, "matrix": [4, 6], "x": 70, "y": 51 },
+ { "flags": 4, "matrix": [4, 7], "x": 80, "y": 51 },
+ { "flags": 4, "matrix": [4, 8], "x": 90, "y": 51 },
+ { "flags": 4, "matrix": [4, 9], "x": 100, "y": 51 },
+ { "flags": 4, "matrix": [4, 10], "x": 110, "y": 51 },
+ { "flags": 4, "matrix": [4, 13], "x": 135, "y": 51 },
+ { "flags": 4, "matrix": [4, 15], "x": 166, "y": 51 },
+ { "flags": 4, "matrix": [4, 17], "x": 194, "y": 51 },
+ { "flags": 4, "matrix": [4, 18], "x": 204, "y": 51 },
+ { "flags": 4, "matrix": [4, 19], "x": 214, "y": 51 },
+ { "flags": 4, "matrix": [4, 20], "x": 224, "y": 51 },
+
+ { "flags": 4, "matrix": [5, 0], "x": 0, "y": 64 },
+ { "flags": 4, "matrix": [5, 1], "x": 10, "y": 64 },
+ { "flags": 4, "matrix": [5, 2], "x": 20, "y": 64 },
+ { "flags": 4, "matrix": [5, 5], "x": 60, "y": 64 },
+ { "flags": 4, "matrix": [5, 9], "x": 100, "y": 64 },
+ { "flags": 4, "matrix": [5, 10], "x": 110, "y": 64 },
+ { "flags": 4, "matrix": [5, 11], "x": 130, "y": 64 },
+ { "flags": 4, "matrix": [5, 13], "x": 140, "y": 64 },
+ { "flags": 4, "matrix": [5, 14], "x": 156, "y": 64 },
+ { "flags": 4, "matrix": [5, 15], "x": 166, "y": 64 },
+ { "flags": 4, "matrix": [5, 16], "x": 176, "y": 64 },
+ { "flags": 4, "matrix": [5, 18], "x": 199, "y": 64 },
+ { "flags": 4, "matrix": [5, 19], "x": 214, "y": 64 }
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "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": "Cal", "matrix": [0, 17], "x": 18.5, "y": 0 },
+ { "label": "Mute", "matrix": [0, 18], "x": 19.5, "y": 0 },
+ { "label": "Vold", "matrix": [0, 19], "x": 20.5, "y": 0 },
+ { "label": "Volu", "matrix": [0, 20], "x": 21.5, "y": 0 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "*", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "(", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": ")", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "_", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "+", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "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": "Num", "matrix": [1, 17], "x": 18.5, "y": 1.25 },
+ { "label": "/", "matrix": [1, 18], "x": 19.5, "y": 1.25 },
+ { "label": "*", "matrix": [1, 19], "x": 20.5, "y": 1.25 },
+ { "label": "-", "matrix": [1, 20], "x": 21.5, "y": 1.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5 },
+ { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "{", "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": "7", "matrix": [2, 17], "x": 18.5, "y": 2.25 },
+ { "label": "8", "matrix": [2, 18], "x": 19.5, "y": 2.25 },
+ { "label": "9", "matrix": [2, 19], "x": 20.5, "y": 2.25 },
+ { "label": "+", "matrix": [2, 20], "x": 21.5, "y": 2.25, "h": 2 },
+
+ { "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": "4", "matrix": [3, 17], "x": 18.5, "y": 3.25 },
+ { "label": "5", "matrix": [3, 18], "x": 19.5, "y": 3.25 },
+ { "label": "6", "matrix": [3, 19], "x": 20.5, "y": 3.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": "1", "matrix": [4, 17], "x": 18.5, "y": 4.25 },
+ { "label": "2", "matrix": [4, 18], "x": 19.5, "y": 4.25 },
+ { "label": "3", "matrix": [4, 19], "x": 20.5, "y": 4.25 },
+ { "label": "Enter", "matrix": [4, 20], "x": 21.5, "y": 4.25, "h": 2 },
+
+ { "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 },
+ { "label": "0", "matrix": [5, 18], "x": 18.5, "y": 5.25, "w": 2 },
+ { "label": ".", "matrix": [5, 19], "x": 20.5, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/akko/5108/keymaps/default/keymap.c b/keyboards/akko/5108/keymaps/default/keymap.c
new file mode 100644
index 000000000000..ef92432ff57f
--- /dev/null
+++ b/keyboards/akko/5108/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( /* 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_CALC, KC_MUTE, KC_VOLD, KC_VOLU,
+ 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, KC_RGUI, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
+
+ [WIN_W] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(WIN_FN), _______, KC_A, KC_S, KC_D, _______, _______),
+
+ [WIN_FN] = LAYOUT( /* 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI, _______, _______),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_SCRL, KC_PAUS, KC_CALC, KC_MUTE, KC_VOLD, KC_VOLU,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
+
+ [MAC_W] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D, _______, _______),
+
+ [MAC_FN] = LAYOUT( /* 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI, _______, _______)
+};
+// clang-format on
diff --git a/keyboards/akko/5108/keymaps/via/keymap.c b/keyboards/akko/5108/keymaps/via/keymap.c
new file mode 100644
index 000000000000..ef92432ff57f
--- /dev/null
+++ b/keyboards/akko/5108/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( /* 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_CALC, KC_MUTE, KC_VOLD, KC_VOLU,
+ 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, KC_RGUI, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
+
+ [WIN_W] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(WIN_FN), _______, KC_A, KC_S, KC_D, _______, _______),
+
+ [WIN_FN] = LAYOUT( /* 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI, _______, _______),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_SCRL, KC_PAUS, KC_CALC, KC_MUTE, KC_VOLD, KC_VOLU,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
+
+ [MAC_W] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D, _______, _______),
+
+ [MAC_FN] = LAYOUT( /* 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI, _______, _______)
+};
+// clang-format on
diff --git a/keyboards/akko/5108/keymaps/via/rules.mk b/keyboards/akko/5108/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/akko/5108/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/akko/5108/mcuconf.h b/keyboards/akko/5108/mcuconf.h
new file mode 100644
index 000000000000..0d16f4f04e46
--- /dev/null
+++ b/keyboards/akko/5108/mcuconf.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#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/akko/5108/readme.md b/keyboards/akko/5108/readme.md
new file mode 100644
index 000000000000..c7140deb5c7a
--- /dev/null
+++ b/keyboards/akko/5108/readme.md
@@ -0,0 +1,20 @@
+# 5108
+
+A customizable 100% keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: Akko 5108
+* Hardware Availability: [akko](https://www.akkogear.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make akko/5108:default
+
+Flashing example for this keyboard:
+
+ make akko/5108:default:flash
+
+## Bootloader
+**Reset Key**: Hold down the key located at *K000*, which programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/akko/5108/rules.mk b/keyboards/akko/5108/rules.mk
new file mode 100644
index 000000000000..24d5f6f52ecc
--- /dev/null
+++ b/keyboards/akko/5108/rules.mk
@@ -0,0 +1,2 @@
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/akko/acr87/acr87.c b/keyboards/akko/acr87/acr87.c
new file mode 100644
index 000000000000..e175e21368ef
--- /dev/null
+++ b/keyboards/akko/acr87/acr87.c
@@ -0,0 +1,217 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ /*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},
+
+ {2, J_12, K_12, L_12},
+ {2, J_11, K_11, L_11},
+ {2, J_10, K_10, L_10},
+ {2, J_9, K_9, L_9},
+ {2, J_8, K_8, L_8},
+ {2, J_7, K_7, L_7},
+ {2, J_6, K_6, L_6},
+ {2, J_5, K_5, L_5},
+ {2, J_4, K_4, L_4},
+ {2, J_3, K_3, L_3},
+ {2, J_2, K_2, L_2},
+ {2, J_1, K_1, L_1},
+ {2, G_12, H_12, I_12},
+ {2, G_11, H_11, I_11},
+ {2, G_10, H_10, I_10},
+ {2, G_9, H_9, I_9},
+
+ {2, A_1, B_1, C_1},
+ {2, G_8, H_8, I_8},
+
+ {2, A_2, B_2, C_2},
+ {2, G_7, H_7, I_7},
+
+ {2, A_3, B_3, C_3},
+ {2, G_6, H_6, I_6},
+
+ {2, A_4, B_4, C_4},
+ {2, G_5, H_5, I_5},
+
+ {2, A_5, B_5, C_5},
+ {2, G_4, H_4, I_4},
+
+ {2, A_6, B_6, C_6},
+ {2, G_3, H_3, I_3},
+
+ {2, A_7, B_7, C_7},
+ {2, G_2, H_2, I_2},
+
+ {2, A_8, B_8, C_8},
+ {2, A_9, B_9, C_9},
+ {2, A_10, B_10, C_10},
+ {2, A_11, B_11, C_11},
+ {2, A_12, B_12, C_12},
+ {2, D_1, E_1, F_1},
+ {2, D_2, E_2, F_2},
+ {2, D_3, E_3, F_3},
+ {2, D_4, E_4, F_4},
+ {2, D_5, E_5, F_5},
+ {2, D_6, E_6, F_6},
+ {2, D_7, E_7, F_7},
+ {2, D_8, E_8, F_8},
+ {2, D_9, E_9, F_9},
+ {2, D_10, E_10, F_10},
+ {2, D_11, E_11, F_11},
+ {2, D_12, E_12, F_12},
+ {2, G_1, H_1, I_1},
+};
+
+// clang-format on
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max)
+{
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max))
+ {
+ return false;
+ }
+ if (host_keyboard_led_state().caps_lock)
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(50, 255, 255, 255);
+ }
+ else
+ {
+ if (!rgb_matrix_get_flags())
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(50, 0, 0, 0);
+ }
+ }
+ if (keymap_config.no_gui)
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(77, 255, 255, 255);
+ }
+ else
+ {
+ if (!rgb_matrix_get_flags())
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(77, 0, 0, 0);
+ }
+ }
+
+ return true;
+}
+
+#endif
diff --git a/keyboards/akko/acr87/config.h b/keyboards/akko/acr87/config.h
new file mode 100644
index 000000000000..221cad86ad1c
--- /dev/null
+++ b/keyboards/akko/acr87/config.h
@@ -0,0 +1,53 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Use 5 dynamic keymap layers */
+#define DYNAMIC_KEYMAP_LAYER_COUNT 6
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
+#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
+
+/* I2C Config for LED Driver */
+#define DRIVER_COUNT 3
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define DRIVER_ADDR_3 0b1110110
+
+#define I2C1_SCL_PAL_MODE 4
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000 /* 400000 */
+
+#define RGB_MATRIX_LED_COUNT 135
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_TRIGGER_ON_KEYDOWN
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
diff --git a/keyboards/akko/acr87/halconf.h b/keyboards/akko/acr87/halconf.h
new file mode 100644
index 000000000000..2f64e65393a5
--- /dev/null
+++ b/keyboards/akko/acr87/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/akko/acr87/info.json b/keyboards/akko/acr87/info.json
new file mode 100644
index 000000000000..bcc6b23cb003
--- /dev/null
+++ b/keyboards/akko/acr87/info.json
@@ -0,0 +1,294 @@
+{
+ "keyboard_name": "ACR87",
+ "manufacturer": "Akko",
+ "url":"https://www.akkogear.com",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "vid": "0xFFFE",
+ "pid": "0x0010",
+ "device_version": "1.0.1",
+ "suspend_wakeup_delay": 400,
+ "force_nkro": true
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": [ "C1", "C2", "C3", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B2", "B10"],
+ "rows": [ "B15", "C6", "C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "max_brightness": 180,
+ "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},
+
+ {"flags": 2, "x":13, "y":0},
+ {"flags": 2, "x":24, "y":0},
+ {"flags": 2, "x":38, "y":0},
+ {"flags": 2, "x":52, "y":0},
+ {"flags": 2, "x":66, "y":0},
+ {"flags": 2, "x":82, "y":0},
+ {"flags": 2, "x":96, "y":0},
+ {"flags": 2, "x":110, "y":0},
+ {"flags": 2, "x":124, "y":0},
+ {"flags": 2, "x":140, "y":0},
+ {"flags": 2, "x":154, "y":0},
+ {"flags": 2, "x":168, "y":0},
+ {"flags": 2, "x":182, "y":0},
+ {"flags": 2, "x":196, "y":0},
+ {"flags": 2, "x":210, "y":0},
+ {"flags": 2, "x":224, "y":0},
+ {"flags": 2, "x":0, "y":8},
+ {"flags": 2, "x":224, "y":8},
+ {"flags": 2, "x":0, "y":16},
+ {"flags": 2, "x":224, "y":16},
+ {"flags": 2, "x":0, "y":24},
+ {"flags": 2, "x":224, "y":24},
+ {"flags": 2, "x":0, "y":32},
+ {"flags": 2, "x":224, "y":32},
+ {"flags": 2, "x":0, "y":40},
+ {"flags": 2, "x":224, "y":40},
+ {"flags": 2, "x":0, "y":48},
+ {"flags": 2, "x":224, "y":48},
+ {"flags": 2, "x":0, "y":56},
+ {"flags": 2, "x":224, "y":56},
+ {"flags": 2, "x":0, "y":64},
+ {"flags": 2, "x":13, "y":64},
+ {"flags": 2, "x":25, "y":64},
+ {"flags": 2, "x":37, "y":64},
+ {"flags": 2, "x":49, "y":64},
+ {"flags": 2, "x":61, "y":64},
+ {"flags": 2, "x":73, "y":64},
+ {"flags": 2, "x":85, "y":64},
+ {"flags": 2, "x":97, "y":64},
+ {"flags": 2, "x":109, "y":64},
+ {"flags": 2, "x":121, "y":64},
+ {"flags": 2, "x":133, "y":64},
+ {"flags": 2, "x":145, "y":64},
+ {"flags": 2, "x":157, "y":64},
+ {"flags": 2, "x":170, "y":64},
+ {"flags": 2, "x":196, "y":64},
+ {"flags": 2, "x":210, "y":64},
+ {"flags": 2, "x":224, "y":64}
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "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/akko/acr87/keymaps/default/keymap.c b/keyboards/akko/acr87/keymaps/default/keymap.c
new file mode 100644
index 000000000000..88bfbc8e1fdc
--- /dev/null
+++ b/keyboards/akko/acr87/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( /* 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( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(WIN_FN), _______, KC_A, KC_S, KC_D),
+
+
+ [WIN_FN] = LAYOUT( /* 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( /* 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( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D),
+ [MAC_FN] = LAYOUT( /* 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/akko/acr87/keymaps/via/keymap.c b/keyboards/akko/acr87/keymaps/via/keymap.c
new file mode 100644
index 000000000000..88bfbc8e1fdc
--- /dev/null
+++ b/keyboards/akko/acr87/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( /* 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( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(WIN_FN), _______, KC_A, KC_S, KC_D),
+
+
+ [WIN_FN] = LAYOUT( /* 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( /* 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( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D),
+ [MAC_FN] = LAYOUT( /* 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/akko/acr87/keymaps/via/rules.mk b/keyboards/akko/acr87/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/akko/acr87/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/akko/acr87/mcuconf.h b/keyboards/akko/acr87/mcuconf.h
new file mode 100644
index 000000000000..0d16f4f04e46
--- /dev/null
+++ b/keyboards/akko/acr87/mcuconf.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#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/akko/acr87/readme.md b/keyboards/akko/acr87/readme.md
new file mode 100644
index 000000000000..a4f400ce761c
--- /dev/null
+++ b/keyboards/akko/acr87/readme.md
@@ -0,0 +1,19 @@
+# acr87
+
+A customizable 80% encoder keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: acr87
+* Hardware Availability: [akko](https://www.akkogear.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make akko/acr87:default
+
+Flashing example for this keyboard:
+
+ make akko/acr87:default:flash
+
+**Reset Key**: Hold down the key located at *K000*, which programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/akko/acr87/rules.mk b/keyboards/akko/acr87/rules.mk
new file mode 100644
index 000000000000..0dc7a3314204
--- /dev/null
+++ b/keyboards/akko/acr87/rules.mk
@@ -0,0 +1,3 @@
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
+
diff --git a/keyboards/akko/top40/config.h b/keyboards/akko/top40/config.h
new file mode 100644
index 000000000000..bd849292e6af
--- /dev/null
+++ b/keyboards/akko/top40/config.h
@@ -0,0 +1,52 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Use 5 dynamic keymap layers */
+#define DYNAMIC_KEYMAP_LAYER_COUNT 6
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
+#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
+
+/* I2C Config for LED Driver */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define I2C1_SCL_PAL_MODE 4
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000 /* 400000 */
+
+#define RGB_MATRIX_LED_COUNT 76
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
+#define RGB_TRIGGER_ON_KEYDOWN
+
diff --git a/keyboards/akko/top40/halconf.h b/keyboards/akko/top40/halconf.h
new file mode 100644
index 000000000000..2f64e65393a5
--- /dev/null
+++ b/keyboards/akko/top40/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/akko/top40/info.json b/keyboards/akko/top40/info.json
new file mode 100644
index 000000000000..8649ecb37596
--- /dev/null
+++ b/keyboards/akko/top40/info.json
@@ -0,0 +1,188 @@
+{
+ "keyboard_name": "TOP40",
+ "manufacturer": "Akko",
+ "url":"https://www.akkogear.com",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "vid": "0xFFFE",
+ "pid": "0x000E",
+ "device_version": "1.0.2",
+ "suspend_wakeup_delay": 400,
+ "force_nkro": true
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C1", "C2", "C3", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C4"],
+ "rows": ["C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "max_brightness": 180,
+ "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": 10, "y":10 },
+ { "flags": 4, "matrix": [0, 1], "x": 20, "y":10 },
+ { "flags": 4, "matrix": [0, 2], "x": 40, "y":10 },
+ { "flags": 4, "matrix": [0, 3], "x": 60, "y":10 },
+ { "flags": 4, "matrix": [0, 4], "x": 80, "y":10 },
+ { "flags": 4, "matrix": [0, 5], "x":100 , "y":10 },
+ { "flags": 4, "matrix": [0, 6], "x":120 , "y":10 },
+ { "flags": 4, "matrix": [0, 7], "x":140 , "y":10 },
+ { "flags": 4, "matrix": [0, 8], "x":160 , "y":10 },
+ { "flags": 4, "matrix": [0, 9], "x":180 , "y":10 },
+ { "flags": 4, "matrix": [0, 10], "x":200 , "y":10 },
+ { "flags": 4, "matrix": [0, 11], "x":218 , "y":10 },
+
+ { "flags": 4, "matrix": [1, 0], "x": 10, "y":24 },
+ { "flags": 4, "matrix": [1, 1], "x": 20, "y":24 },
+ { "flags": 4, "matrix": [1, 2], "x": 40, "y":24 },
+ { "flags": 4, "matrix": [1, 3], "x": 60, "y":24 },
+ { "flags": 4, "matrix": [1, 4], "x": 80, "y":24 },
+ { "flags": 4, "matrix": [1, 5], "x":100 , "y":24 },
+ { "flags": 4, "matrix": [1, 6], "x":120 , "y":24 },
+ { "flags": 4, "matrix": [1, 7], "x":140 , "y":24 },
+ { "flags": 4, "matrix": [1, 8], "x":160 , "y":24 },
+ { "flags": 4, "matrix": [1, 9], "x":180 , "y":24 },
+ { "flags": 4, "matrix": [1, 10], "x":200 , "y":24 },
+ { "flags": 4, "matrix": [1, 11], "x":218 , "y":24 },
+
+ { "flags": 4, "matrix": [2, 0], "x": 10, "y":39 },
+ { "flags": 4, "matrix": [2, 1], "x": 20, "y":39 },
+ { "flags": 4, "matrix": [2, 2], "x": 40, "y":39 },
+ { "flags": 4, "matrix": [2, 3], "x": 60, "y":39 },
+ { "flags": 4, "matrix": [2, 4], "x": 80, "y":39 },
+ { "flags": 4, "matrix": [2, 5], "x":100 , "y":39 },
+ { "flags": 4, "matrix": [2, 6], "x":120 , "y":39 },
+ { "flags": 4, "matrix": [2, 7], "x":140 , "y":39 },
+ { "flags": 4, "matrix": [2, 8], "x":160 , "y":39 },
+ { "flags": 4, "matrix": [2, 9], "x":180 , "y":39 },
+ { "flags": 4, "matrix": [2, 10], "x":200 , "y":39 },
+ { "flags": 4, "matrix": [2, 11], "x":218 , "y":39 },
+
+ { "flags": 4, "matrix": [3, 0], "x": 10, "y":54 },
+ { "flags": 4, "matrix": [3, 1], "x": 20, "y":54 },
+ { "flags": 4, "matrix": [3, 2], "x": 40, "y":54 },
+ { "flags": 4, "matrix": [3, 4], "x": 80, "y":54 },
+ { "flags": 4, "matrix": [3, 6], "x":120 , "y":54 },
+ { "flags": 4, "matrix": [3, 8], "x":160 , "y":54 },
+ { "flags": 4, "matrix": [3, 9], "x":180 , "y":54 },
+ { "flags": 4, "matrix": [3, 10], "x":200 , "y":54 },
+ { "flags": 4, "matrix": [3, 11], "x":218 , "y":54 },
+
+ {"flags": 2, "x":0, "y":0},
+ {"flags": 2, "x":15, "y":0},
+ {"flags": 2, "x":25, "y":0},
+ {"flags": 2, "x":45, "y":0},
+ {"flags": 2, "x":65, "y":0},
+ {"flags": 2, "x":85, "y":0},
+ {"flags": 2, "x":105, "y":0},
+ {"flags": 2, "x":125, "y":0},
+ {"flags": 2, "x":145, "y":0},
+ {"flags": 2, "x":165, "y":0},
+ {"flags": 2, "x":185, "y":0},
+ {"flags": 2, "x":205, "y":0},
+ {"flags": 2, "x":224, "y":0},
+ {"flags": 2, "x":0, "y":16},
+ {"flags": 2, "x":224, "y":16},
+ {"flags": 2, "x":0, "y":32},
+ {"flags": 2, "x":224, "y":32},
+ {"flags": 2, "x":0, "y":48},
+ {"flags": 2, "x":224, "y":48},
+ {"flags": 2, "x":0, "y":64},
+ {"flags": 2, "x":15, "y":64},
+ {"flags": 2, "x":40, "y":64},
+ {"flags": 2, "x":62, "y":64},
+ {"flags": 2, "x":80, "y":64},
+ {"flags": 2, "x":100, "y":64},
+ {"flags": 2, "x":125, "y":64},
+ {"flags": 2, "x":145, "y":64},
+ {"flags": 2, "x":165, "y":64},
+ {"flags": 2, "x":185, "y":64},
+ {"flags": 2, "x":205, "y":64},
+ {"flags": 2, "x":224, "y":64}
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Ese", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "Q", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "W", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "E", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "R", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "T", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "Y", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "U", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "I", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "O", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "P", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "BackSpace", "matrix": [0, 11], "x": 11, "y": 0 , "w": 1.75},
+
+ { "label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.25 },
+ { "label": "A", "matrix": [1, 1], "x": 1.25, "y": 1 },
+ { "label": "S", "matrix": [1, 2], "x": 2.25, "y": 1 },
+ { "label": "D", "matrix": [1, 3], "x": 3.25, "y": 1 },
+ { "label": "F", "matrix": [1, 4], "x": 4.25, "y": 1 },
+ { "label": "G", "matrix": [1, 5], "x": 5.25, "y": 1 },
+ { "label": "H", "matrix": [1, 6], "x": 6.25, "y": 1 },
+ { "label": "J", "matrix": [1, 7], "x": 7.25, "y": 1 },
+ { "label": "K", "matrix": [1, 8], "x": 8.25, "y": 1 },
+ { "label": "L", "matrix": [1, 9], "x": 9.25, "y": 1 },
+ { "label": ":", "matrix": [1, 10], "x": 10.25, "y": 1 },
+ { "label": "Enter", "matrix": [1, 11], "x": 11.25, "y": 1, "w": 1.5 },
+
+ { "label": "Shift", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75 },
+ { "label": "Z", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "X", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "C", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "V", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "B", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "N", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "M", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "<", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": ">", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": "Up", "matrix": [2, 10], "x": 10.75, "y": 2},
+ { "label": "Shift", "matrix": [2, 11], "x": 11.75, "y": 2 },
+
+ { "label": "Ctrl", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25 },
+ { "label": "Win", "matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25 },
+ { "label": "Alt", "matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25 },
+ { "label": "Space", "matrix": [3, 4], "x": 3.75, "y": 3, "w": 2.25 },
+ { "label": "Space", "matrix": [3, 6], "x": 6, "y": 3, "w": 2.75 },
+ { "label": "Fn", "matrix": [3, 8], "x": 8.75, "y": 3 },
+ { "label": "Left", "matrix": [3, 9], "x": 9.75, "y": 3 },
+ { "label": "Down", "matrix": [3, 10], "x": 10.75, "y": 3 },
+ { "label": "Right", "matrix": [3, 11], "x": 11.75, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/akko/top40/keymaps/default/keymap.c b/keyboards/akko/top40/keymaps/default/keymap.c
new file mode 100644
index 000000000000..fb9df1623552
--- /dev/null
+++ b/keyboards/akko/top40/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* 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
+// clang-format off
+enum __layers {
+ _Base,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_Base] = LAYOUT( /* Base */
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, MO(_FN),KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_FN] = LAYOUT( /* Fn */
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END, RGB_TOG, RGB_MOD,
+ _______, _______, _______, KC_CALC, _______, AG_TOGG, _______, KC_MUTE, KC_VOLD, KC_VOLU, RGB_VAI, _______,
+ _______, GU_TOGG, _______, _______, _______, _______, RGB_SPI, RGB_VAD, RGB_SAI)
+};
diff --git a/keyboards/akko/top40/keymaps/via/keymap.c b/keyboards/akko/top40/keymaps/via/keymap.c
new file mode 100644
index 000000000000..fb9df1623552
--- /dev/null
+++ b/keyboards/akko/top40/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/* 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
+// clang-format off
+enum __layers {
+ _Base,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_Base] = LAYOUT( /* Base */
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, MO(_FN),KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_FN] = LAYOUT( /* Fn */
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END, RGB_TOG, RGB_MOD,
+ _______, _______, _______, KC_CALC, _______, AG_TOGG, _______, KC_MUTE, KC_VOLD, KC_VOLU, RGB_VAI, _______,
+ _______, GU_TOGG, _______, _______, _______, _______, RGB_SPI, RGB_VAD, RGB_SAI)
+};
diff --git a/keyboards/akko/top40/keymaps/via/rules.mk b/keyboards/akko/top40/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/akko/top40/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/akko/top40/mcuconf.h b/keyboards/akko/top40/mcuconf.h
new file mode 100644
index 000000000000..0d16f4f04e46
--- /dev/null
+++ b/keyboards/akko/top40/mcuconf.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#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/akko/top40/readme.md b/keyboards/akko/top40/readme.md
new file mode 100644
index 000000000000..87a2287b934f
--- /dev/null
+++ b/keyboards/akko/top40/readme.md
@@ -0,0 +1,19 @@
+# top40
+
+A customizable 40% keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: top40
+* Hardware Availability: [akko](https://www.akkogear.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make akko/top40:default
+
+Flashing example for this keyboard:
+
+ make akko/top40:default:flash
+
+**Reset Key**: Hold down the key located at *K01*, which programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/akko/top40/rules.mk b/keyboards/akko/top40/rules.mk
new file mode 100644
index 000000000000..b753f0682e56
--- /dev/null
+++ b/keyboards/akko/top40/rules.mk
@@ -0,0 +1,6 @@
+# Build Options
+# change yes to no to disable
+#
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
+
diff --git a/keyboards/akko/top40/top40.c b/keyboards/akko/top40/top40.c
new file mode 100644
index 000000000000..7fe193447dc6
--- /dev/null
+++ b/keyboards/akko/top40/top40.c
@@ -0,0 +1,125 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, A_1, B_1, C_1},
+ {0, A_2, B_2, C_2},
+ {0, A_3, B_3, C_3},
+ {0, A_4, B_4, C_4},
+ {0, A_5, B_5, C_5},
+ {0, A_6, B_6, C_6},
+ {0, A_7, B_7, C_7},
+ {0, A_8, B_8, C_8},
+ {0, A_9, B_9, C_9},
+ {0, A_10, B_10, C_10},
+ {0, A_11, B_11, C_11},
+ {0, A_12, B_12, C_12},
+
+ {0, 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, 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, J_1, K_1, L_1},
+ {0, J_2, K_2, L_2},
+ {0, J_3, K_3, L_3},
+ {0, J_5, K_5, L_5},
+ {0, J_7, K_7, L_7},
+ {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, A_1, B_1, C_1},
+ {1, A_2, B_2, C_2},
+ {1, A_3, B_3, C_3},
+ {1, J_7, K_7, L_7},
+ {1, J_6, K_6, L_6},
+ {1, J_5, K_5, L_5},
+ {1, J_4, K_4, L_4},
+ {1, J_3, K_3, L_3},
+ {1, J_2, K_2, L_2},
+ {1, J_1, K_1, L_1},
+ {1, G_8, H_8, I_8},
+ {1, G_7, H_7, I_7},
+ {1, G_6, H_6, I_6},
+
+ {1, A_4, B_4, C_4},
+ {1, G_5, H_5, I_5},
+
+ {1, A_5, B_5, C_5},
+ {1, G_4, H_4, I_4},
+
+ {1, A_6, B_6, C_6},
+ {1, G_3, H_3, I_3},
+
+ {1, A_7, B_7, C_7},
+ {1, A_8, B_8, C_8},
+ {1, D_1, E_1, F_1},
+ {1, D_2, E_2, F_2},
+ {1, D_3, E_3, F_3},
+ {1, D_4, E_4, F_4},
+ {1, D_5, E_5, F_5},
+ {1, D_6, E_6, F_6},
+ {1, D_7, E_7, F_7},
+ {1, D_8, E_8, F_8},
+ {1, G_2, H_2, I_2},
+ {1, G_1, H_1, I_1},
+
+};
+
+// clang-format on
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
+ return false;
+ }
+ if (keymap_config.no_gui) {
+ rgb_matrix_set_color(37, 200, 200, 200);
+ }
+ return true;
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/alas/info.json b/keyboards/alas/info.json
index b3db25d2d815..6c2beff27ebf 100755
--- a/keyboards/alas/info.json
+++ b/keyboards/alas/info.json
@@ -326,21 +326,21 @@
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
- {"matrix": [2, 0], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
-
- {"matrix": [2, 1], "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": [1, 13], "x": 11.75, "y": 2},
- {"matrix": [2, 13], "x": 12.75, "y": 2},
+
+ {"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": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
@@ -397,21 +397,21 @@
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
- {"matrix": [2, 0], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
-
- {"matrix": [2, 1], "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": [1, 13], "x": 11.75, "y": 2},
- {"matrix": [2, 13], "x": 12.75, "y": 2},
+
+ {"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": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
@@ -468,21 +468,21 @@
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
- {"matrix": [2, 0], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
-
- {"matrix": [2, 1], "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": [1, 13], "x": 11.75, "y": 2},
- {"matrix": [2, 13], "x": 12.75, "y": 2},
+
+ {"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": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
diff --git a/keyboards/alas/matrix_diagram.md b/keyboards/alas/matrix_diagram.md
new file mode 100644
index 000000000000..87e5844f55af
--- /dev/null
+++ b/keyboards/alas/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Yiancar-Designs Alas
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │2C │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ┌──┴┐2D │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2D │ │1D │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
+│40 │41 │42 │46 │4A │4B │4C │4D │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌────────┐ ┌──────────┐
+│30 │ 2.25u LShift 2.75u RShift │3C │
+└────────┘ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │46 │4B │4C │4D │ Tsangan/WKL/HHKB
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/aliceh66/pianoforte/info.json b/keyboards/aliceh66/pianoforte/info.json
index d645ddf5f6b8..6cc2546794c8 100644
--- a/keyboards/aliceh66/pianoforte/info.json
+++ b/keyboards/aliceh66/pianoforte/info.json
@@ -15,7 +15,11 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["tkl_f13_ansi", "tkl_f13_iso"],
+ "community_layouts": ["tkl_f13_ansi", "tkl_f13_ansi_split_bs_rshift", "tkl_f13_iso", "tkl_f13_iso_split_bs_rshift", "tkl_f13_ansi_tsangan", "tkl_f13_ansi_tsangan_split_bs_rshift", "tkl_f13_iso_tsangan", "tkl_f13_iso_tsangan_split_bs_rshift"],
+ "layout_aliases": {
+ "LAYOUT_tkl_ansi_7u": "LAYOUT_tkl_f13_ansi_tsangan",
+ "LAYOUT_tkl_iso_7u": "LAYOUT_tkl_f13_iso_tsangan"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -56,72 +60,72 @@
{"matrix": [3, 5], "x": 11, "y": 1.25},
{"matrix": [2, 6], "x": 12, "y": 1.25},
{"matrix": [3, 6], "x": 13, "y": 1.25},
- {"matrix": [2, 7], "x": 14, "y": 1.25},
-
- {"matrix": [3, 7], "x": 15.25, "y": 1.25},
- {"matrix": [2, 8], "x": 16.25, "y": 1.25},
- {"matrix": [4, 0], "x": 17.25, "y": 1.25},
-
- {"matrix": [5, 0], "x": 0, "y": 2.25, "w": 1.5},
- {"matrix": [4, 1], "x": 1.5, "y": 2.25},
- {"matrix": [5, 1], "x": 2.5, "y": 2.25},
- {"matrix": [4, 2], "x": 3.5, "y": 2.25},
- {"matrix": [5, 2], "x": 4.5, "y": 2.25},
- {"matrix": [4, 3], "x": 5.5, "y": 2.25},
- {"matrix": [5, 3], "x": 6.5, "y": 2.25},
- {"matrix": [4, 4], "x": 7.5, "y": 2.25},
- {"matrix": [5, 4], "x": 8.5, "y": 2.25},
- {"matrix": [4, 5], "x": 9.5, "y": 2.25},
- {"matrix": [5, 5], "x": 10.5, "y": 2.25},
- {"matrix": [4, 6], "x": 11.5, "y": 2.25},
- {"matrix": [5, 6], "x": 12.5, "y": 2.25},
- {"matrix": [4, 7], "x": 13.5, "y": 2.25, "w": 1.5},
-
- {"matrix": [5, 7], "x": 15.25, "y": 2.25},
- {"matrix": [4, 8], "x": 16.25, "y": 2.25},
- {"matrix": [6, 0], "x": 17.25, "y": 2.25},
-
- {"matrix": [7, 0], "x": 0, "y": 3.25, "w": 1.75},
- {"matrix": [6, 1], "x": 1.75, "y": 3.25},
- {"matrix": [7, 1], "x": 2.75, "y": 3.25},
- {"matrix": [6, 2], "x": 3.75, "y": 3.25},
- {"matrix": [7, 2], "x": 4.75, "y": 3.25},
- {"matrix": [6, 3], "x": 5.75, "y": 3.25},
- {"matrix": [7, 3], "x": 6.75, "y": 3.25},
- {"matrix": [6, 4], "x": 7.75, "y": 3.25},
- {"matrix": [7, 4], "x": 8.75, "y": 3.25},
- {"matrix": [6, 5], "x": 9.75, "y": 3.25},
- {"matrix": [7, 5], "x": 10.75, "y": 3.25},
- {"matrix": [6, 6], "x": 11.75, "y": 3.25},
- {"matrix": [7, 6], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [6, 7], "x": 14, "y": 1.25},
+
+ {"matrix": [2, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [3, 7], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+ {"matrix": [5, 6], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [4, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.75, "w": 1.75, "h": 0.5},
+ {"matrix": [9, 6], "x": 12.25, "y": 4.25, "w": 2.75, "h": 0.5},
+ {"matrix": [8, 7], "x": 14, "y": 4.75, "h": 0.5},
- {"matrix": [6, 7], "x": 0, "y": 4.25, "w": 1.25},
- {"matrix": [8, 0], "x": 1.25, "y": 4.25},
- {"matrix": [9, 0], "x": 2.25, "y": 4.25},
- {"matrix": [8, 1], "x": 3.25, "y": 4.25},
- {"matrix": [9, 1], "x": 4.25, "y": 4.25},
- {"matrix": [8, 2], "x": 5.25, "y": 4.25},
- {"matrix": [9, 2], "x": 6.25, "y": 4.25},
- {"matrix": [8, 3], "x": 7.25, "y": 4.25},
- {"matrix": [9, 3], "x": 8.25, "y": 4.25},
- {"matrix": [8, 4], "x": 9.25, "y": 4.25},
- {"matrix": [9, 4], "x": 10.25, "y": 4.25},
- {"matrix": [8, 5], "x": 11.25, "y": 4.25},
- {"matrix": [9, 5], "x": 12.25, "y": 4.25, "w": 1.75},
- {"matrix": [8, 6], "x": 12.24, "y": 4.25, "w": 1.75},
- {"matrix": [9, 6], "x": 14, "y": 4.25},
-
- {"matrix": [8, 7], "x": 16.25, "y": 4.25},
-
- {"matrix": [9, 7], "x": 0, "y": 5.25, "w": 1.25},
- {"matrix": [10, 0], "x": 1.25, "y": 5.25, "w": 1.25},
- {"matrix": [11, 0], "x": 2.5, "y": 5.25, "w": 1.25},
- {"matrix": [10, 1], "x": 3.75, "y": 5.25, "w": 6.25},
- {"matrix": [11, 3], "x": 10, "y": 5.25},
- {"matrix": [10, 5], "x": 11, "y": 5.25},
- {"matrix": [11, 5], "x": 12, "y": 5.25},
- {"matrix": [10, 6], "x": 13, "y": 5.25},
- {"matrix": [11, 6], "x": 14, "y": 5.25},
+ {"matrix": [9, 7], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 3], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 6], "x": 13.75, "y": 5.25, "w": 1.25},
{"matrix": [10, 7], "x": 15.25, "y": 5.25},
{"matrix": [11, 7], "x": 16.25, "y": 5.25},
@@ -234,6 +238,114 @@
{"matrix": [10, 8], "x": 17.25, "y": 5.25}
]
},
+ "LAYOUT_tkl_f13_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [1, 1], "x": 3.25, "y": 0},
+ {"matrix": [0, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [1, 2], "x": 5.5, "y": 0},
+ {"matrix": [0, 3], "x": 6.5, "y": 0},
+ {"matrix": [1, 3], "x": 7.5, "y": 0},
+ {"matrix": [0, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [1, 4], "x": 9.75, "y": 0},
+ {"matrix": [0, 5], "x": 10.75, "y": 0},
+ {"matrix": [1, 5], "x": 11.75, "y": 0},
+ {"matrix": [0, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [1, 6], "x": 14, "y": 0},
+
+ {"matrix": [0, 7], "x": 15.25, "y": 0},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
+ {"matrix": [0, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25},
+ {"matrix": [6, 7], "x": 14, "y": 1.25},
+
+ {"matrix": [2, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [3, 7], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+ {"matrix": [5, 6], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [4, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [8, 7], "x": 14, "y": 4.25},
+
+ {"matrix": [9, 7], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 3], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 6], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 17.25, "y": 5.25}
+ ]
+ },
"LAYOUT_tkl_f13_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -341,7 +453,116 @@
{"matrix": [10, 8], "x": 17.25, "y": 5.25}
]
},
- "LAYOUT_tkl_ansi_7u": {
+ "LAYOUT_tkl_f13_iso_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [1, 1], "x": 3.25, "y": 0},
+ {"matrix": [0, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [1, 2], "x": 5.5, "y": 0},
+ {"matrix": [0, 3], "x": 6.5, "y": 0},
+ {"matrix": [1, 3], "x": 7.5, "y": 0},
+ {"matrix": [0, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [1, 4], "x": 9.75, "y": 0},
+ {"matrix": [0, 5], "x": 10.75, "y": 0},
+ {"matrix": [1, 5], "x": 11.75, "y": 0},
+ {"matrix": [0, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [1, 6], "x": 14, "y": 0},
+
+ {"matrix": [0, 7], "x": 15.25, "y": 0},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
+ {"matrix": [0, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25},
+ {"matrix": [6, 7], "x": 14, "y": 1.25},
+
+ {"matrix": [2, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [3, 7], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+
+ {"matrix": [4, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [8, 7], "x": 14, "y": 4.25},
+
+ {"matrix": [9, 7], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 3], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 6], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -446,7 +667,114 @@
{"matrix": [10, 8], "x": 17.25, "y": 5.25}
]
},
- "LAYOUT_tkl_iso_7u": {
+ "LAYOUT_tkl_f13_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [1, 1], "x": 3.25, "y": 0},
+ {"matrix": [0, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [1, 2], "x": 5.5, "y": 0},
+ {"matrix": [0, 3], "x": 6.5, "y": 0},
+ {"matrix": [1, 3], "x": 7.5, "y": 0},
+ {"matrix": [0, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [1, 4], "x": 9.75, "y": 0},
+ {"matrix": [0, 5], "x": 10.75, "y": 0},
+ {"matrix": [1, 5], "x": 11.75, "y": 0},
+ {"matrix": [0, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [1, 6], "x": 14, "y": 0},
+
+ {"matrix": [0, 7], "x": 15.25, "y": 0},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
+ {"matrix": [0, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25},
+ {"matrix": [6, 7], "x": 14, "y": 1.25},
+
+ {"matrix": [2, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [3, 7], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+ {"matrix": [5, 6], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [4, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [8, 7], "x": 14, "y": 4.25},
+
+ {"matrix": [9, 7], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 0], "x": 1.5, "y": 5.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 3], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [11, 5], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25},
+ {"matrix": [11, 6], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [10, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -547,6 +875,114 @@
{"matrix": [10, 6], "x": 12.5, "y": 5.25},
{"matrix": [11, 6], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [1, 1], "x": 3.25, "y": 0},
+ {"matrix": [0, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [1, 2], "x": 5.5, "y": 0},
+ {"matrix": [0, 3], "x": 6.5, "y": 0},
+ {"matrix": [1, 3], "x": 7.5, "y": 0},
+ {"matrix": [0, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [1, 4], "x": 9.75, "y": 0},
+ {"matrix": [0, 5], "x": 10.75, "y": 0},
+ {"matrix": [1, 5], "x": 11.75, "y": 0},
+ {"matrix": [0, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [1, 6], "x": 14, "y": 0},
+
+ {"matrix": [0, 7], "x": 15.25, "y": 0},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
+ {"matrix": [0, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25},
+ {"matrix": [6, 7], "x": 14, "y": 1.25},
+
+ {"matrix": [2, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [3, 7], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+
+ {"matrix": [4, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [8, 7], "x": 14, "y": 4.25},
+
+ {"matrix": [9, 7], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 0], "x": 1.5, "y": 5.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 3], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [11, 5], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25},
+ {"matrix": [11, 6], "x": 13.5, "y": 5.25, "w": 1.5},
+
{"matrix": [10, 7], "x": 15.25, "y": 5.25},
{"matrix": [11, 7], "x": 16.25, "y": 5.25},
{"matrix": [10, 8], "x": 17.25, "y": 5.25}
diff --git a/keyboards/aliceh66/pianoforte/keymaps/default/keymap.c b/keyboards/aliceh66/pianoforte/keymaps/default/keymap.c
index 8762ce72d002..a5e41c2e0f71 100644
--- a/keyboards/aliceh66/pianoforte/keymaps/default/keymap.c
+++ b/keyboards/aliceh66/pianoforte/keymaps/default/keymap.c
@@ -21,13 +21,13 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_all(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
-)
+ [_LAYER0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
};
diff --git a/keyboards/aliceh66/pianoforte/keymaps/iso/keymap.c b/keyboards/aliceh66/pianoforte/keymaps/iso/keymap.c
index c6db4637897c..a4d4a5127446 100644
--- a/keyboards/aliceh66/pianoforte/keymaps/iso/keymap.c
+++ b/keyboards/aliceh66/pianoforte/keymaps/iso/keymap.c
@@ -21,13 +21,13 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_tkl_f13_iso(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC , KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
-)
+ [_LAYER0] = LAYOUT_tkl_f13_iso(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
};
diff --git a/keyboards/aliceh66/pianoforte/keymaps/via/keymap.c b/keyboards/aliceh66/pianoforte/keymaps/via/keymap.c
index 9c9dc9ffbd99..e0579044b9bd 100644
--- a/keyboards/aliceh66/pianoforte/keymaps/via/keymap.c
+++ b/keyboards/aliceh66/pianoforte/keymaps/via/keymap.c
@@ -20,24 +20,24 @@ enum layer_names {
_LAYER1,
};
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_all(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
+ [_LAYER0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
- [_LAYER1] = LAYOUT_all(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
};
diff --git a/keyboards/aliceh66/pianoforte/matrix_diagram.md b/keyboards/aliceh66/pianoforte/matrix_diagram.md
new file mode 100644
index 000000000000..058f31322c73
--- /dev/null
+++ b/keyboards/aliceh66/pianoforte/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for AliceH Pianoforte Solder
+
+```
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+│00 ││10 │01 │11 │02 ││12 │03 │13 │04 ││14 │05 │15 │06 ││16 ││07 │17 │08 │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐ ┌───────┐
+│20 │30 │21 │31 │22 │32 │23 │33 │24 │34 │25 │35 │26 │36 │67 ││27 │37 │28 │ │36 │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ └─┬─────┤
+│40 │50 │41 │51 │42 │52 │43 │53 │44 │54 │45 │55 │46 │56 ││47 │57 │48 │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘ ┌──┴┐76 │ ISO Enter
+│60 │70 │61 │71 │62 │72 │63 │73 │64 │74 │65 │75 │76 │ │66 │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ └───┴────┘
+│80 │90 │81 │91 │82 │92 │83 │93 │84 │94 │85 │95 │86 │87 │ │97 │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
+│A0 │B0 │A1 │B3 │A5 │B5 │A6 │B6 ││A7 │B7 │A8 │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌────────┐ ┌──────────┐
+│80 │ 2.25u LShift 2.75u RShift │96 │
+└────────┘ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│A0 │B0 │A1 │B3 │B5 │A6 │B6 │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/aliceh66/pianoforte_hs/info.json b/keyboards/aliceh66/pianoforte_hs/info.json
index eea0bc06b536..7366e961c1fa 100644
--- a/keyboards/aliceh66/pianoforte_hs/info.json
+++ b/keyboards/aliceh66/pianoforte_hs/info.json
@@ -15,8 +15,12 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT_tkl_ansi": "LAYOUT_tkl_f13_ansi"
+ },
+ "community_layouts": ["tkl_f13_ansi"],
"layouts": {
- "LAYOUT_tkl_ansi": {
+ "LAYOUT_tkl_f13_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -111,7 +115,7 @@
{"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
- {"matrix": [11, 2], "x": 4, "y": 5.25, "w": 6.25},
+ {"matrix": [11, 2], "x": 3.75, "y": 5.25, "w": 6.25},
{"matrix": [10, 4], "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
{"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
diff --git a/keyboards/aliceh66/pianoforte_hs/keymaps/default/keymap.c b/keyboards/aliceh66/pianoforte_hs/keymaps/default/keymap.c
index 17aa2ae0e899..279b0f1170cb 100644
--- a/keyboards/aliceh66/pianoforte_hs/keymaps/default/keymap.c
+++ b/keyboards/aliceh66/pianoforte_hs/keymaps/default/keymap.c
@@ -21,7 +21,7 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_tkl_ansi(
+ [_LAYER0] = LAYOUT_tkl_f13_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
diff --git a/keyboards/aliceh66/pianoforte_hs/keymaps/via/keymap.c b/keyboards/aliceh66/pianoforte_hs/keymaps/via/keymap.c
index ddbaa3a8effa..6bcfa56fca96 100644
--- a/keyboards/aliceh66/pianoforte_hs/keymaps/via/keymap.c
+++ b/keyboards/aliceh66/pianoforte_hs/keymaps/via/keymap.c
@@ -23,7 +23,7 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_tkl_ansi(
+ [_LAYER0] = LAYOUT_tkl_f13_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [_LAYER1] = LAYOUT_tkl_ansi(
+ [_LAYER1] = LAYOUT_tkl_f13_ansi(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/amjkeyboard/amj84/info.json b/keyboards/amjkeyboard/amj84/info.json
index 98c4a7e44798..0b4d614c6eb3 100644
--- a/keyboards/amjkeyboard/amj84/info.json
+++ b/keyboards/amjkeyboard/amj84/info.json
@@ -20,100 +20,288 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 15, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 12], "x": 12.75, "y": 3},
+ {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 8], "x": 14, "y": 0},
+ {"matrix": [5, 9], "x": 10, "y": 5},
+ {"matrix": [5, 10], "x": 11, "y": 5},
+ {"matrix": [5, 11], "x": 12, "y": 5},
+ {"matrix": [5, 12], "x": 13, "y": 5},
+ {"matrix": [5, 13], "x": 14, "y": 5},
+ {"matrix": [5, 14], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_ansi_rwkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [5, 8], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 13], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5},
+ {"matrix": [5, 13], "x": 14, "y": 5},
+ {"matrix": [5, 14], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_iso_rwkl": {
"layout": [
- {"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
- {"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
- {"label": "K02", "matrix": [0, 2], "x": 2, "y": 0},
- {"label": "K03", "matrix": [0, 3], "x": 3, "y": 0},
- {"label": "K04", "matrix": [0, 4], "x": 4, "y": 0},
- {"label": "K05", "matrix": [0, 5], "x": 5, "y": 0},
- {"label": "K06", "matrix": [0, 6], "x": 6, "y": 0},
- {"label": "K07", "matrix": [0, 7], "x": 7, "y": 0},
- {"label": "K08", "matrix": [0, 8], "x": 8, "y": 0},
- {"label": "K09", "matrix": [0, 9], "x": 9, "y": 0},
- {"label": "K0A", "matrix": [0, 10], "x": 10, "y": 0},
- {"label": "K0B", "matrix": [0, 11], "x": 11, "y": 0},
- {"label": "K0C", "matrix": [0, 12], "x": 12, "y": 0},
- {"label": "K0D", "matrix": [0, 13], "x": 13, "y": 0},
- {"label": "K0E", "matrix": [0, 14], "x": 14, "y": 0},
- {"label": "K10", "matrix": [1, 0], "x": 15, "y": 0},
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [5, 8], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15, "y": 0},
- {"label": "K11", "matrix": [1, 1], "x": 0, "y": 1},
- {"label": "K12", "matrix": [1, 2], "x": 1, "y": 1},
- {"label": "K13", "matrix": [1, 3], "x": 2, "y": 1},
- {"label": "K14", "matrix": [1, 4], "x": 3, "y": 1},
- {"label": "K15", "matrix": [1, 5], "x": 4, "y": 1},
- {"label": "K16", "matrix": [1, 6], "x": 5, "y": 1},
- {"label": "K17", "matrix": [1, 7], "x": 6, "y": 1},
- {"label": "K18", "matrix": [1, 8], "x": 7, "y": 1},
- {"label": "K19", "matrix": [1, 9], "x": 8, "y": 1},
- {"label": "K1A", "matrix": [1, 10], "x": 9, "y": 1},
- {"label": "K1B", "matrix": [1, 11], "x": 10, "y": 1},
- {"label": "K1C", "matrix": [1, 12], "x": 11, "y": 1},
- {"label": "K1D", "matrix": [1, 13], "x": 12, "y": 1},
- {"label": "K1E", "matrix": [1, 14], "x": 13, "y": 1, "w": 2},
- {"label": "K20", "matrix": [2, 0], "x": 15, "y": 1},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+ {"matrix": [1, 14], "x": 15, "y": 1},
- {"label": "K21", "matrix": [2, 1], "x": 0, "y": 2, "w": 1.5},
- {"label": "K22", "matrix": [2, 2], "x": 1.5, "y": 2},
- {"label": "K23", "matrix": [2, 3], "x": 2.5, "y": 2},
- {"label": "K24", "matrix": [2, 4], "x": 3.5, "y": 2},
- {"label": "K25", "matrix": [2, 5], "x": 4.5, "y": 2},
- {"label": "K26", "matrix": [2, 6], "x": 5.5, "y": 2},
- {"label": "K27", "matrix": [2, 7], "x": 6.5, "y": 2},
- {"label": "K28", "matrix": [2, 8], "x": 7.5, "y": 2},
- {"label": "K29", "matrix": [2, 9], "x": 8.5, "y": 2},
- {"label": "K2A", "matrix": [2, 10], "x": 9.5, "y": 2},
- {"label": "K2B", "matrix": [2, 11], "x": 10.5, "y": 2},
- {"label": "K2C", "matrix": [2, 12], "x": 11.5, "y": 2},
- {"label": "K2D", "matrix": [2, 13], "x": 12.5, "y": 2},
- {"label": "K2E", "matrix": [2, 14], "x": 13.5, "y": 2, "w": 1.5},
- {"label": "K30", "matrix": [3, 0], "x": 15, "y": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
- {"label": "K31", "matrix": [3, 1], "x": 0, "y": 3, "w": 1.75},
- {"label": "K32", "matrix": [3, 2], "x": 1.75, "y": 3},
- {"label": "K33", "matrix": [3, 3], "x": 2.75, "y": 3},
- {"label": "K34", "matrix": [3, 4], "x": 3.75, "y": 3},
- {"label": "K35", "matrix": [3, 5], "x": 4.75, "y": 3},
- {"label": "K36", "matrix": [3, 6], "x": 5.75, "y": 3},
- {"label": "K37", "matrix": [3, 7], "x": 6.75, "y": 3},
- {"label": "K38", "matrix": [3, 8], "x": 7.75, "y": 3},
- {"label": "K39", "matrix": [3, 9], "x": 8.75, "y": 3},
- {"label": "K3A", "matrix": [3, 10], "x": 9.75, "y": 3},
- {"label": "K3B", "matrix": [3, 11], "x": 10.75, "y": 3},
- {"label": "K3C", "matrix": [3, 12], "x": 11.75, "y": 3},
- {"label": "K3D", "matrix": [3, 13], "x": 12.75, "y": 3},
- {"label": "K3E", "matrix": [3, 14], "x": 13.75, "y": 3, "w": 1.25},
- {"label": "K40", "matrix": [4, 0], "x": 15, "y": 3},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 12], "x": 12.75, "y": 3},
+ {"matrix": [3, 13], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+ {"matrix": [3, 14], "x": 15, "y": 3},
- {"label": "K41", "matrix": [4, 1], "x": 0, "y": 4, "w": 2.25},
- {"label": "K42", "matrix": [4, 2], "x": 2.25, "y": 4},
- {"label": "K43", "matrix": [4, 3], "x": 3.25, "y": 4},
- {"label": "K44", "matrix": [4, 4], "x": 4.25, "y": 4},
- {"label": "K45", "matrix": [4, 5], "x": 5.25, "y": 4},
- {"label": "K46", "matrix": [4, 6], "x": 6.25, "y": 4},
- {"label": "K47", "matrix": [4, 7], "x": 7.25, "y": 4},
- {"label": "K48", "matrix": [4, 8], "x": 8.25, "y": 4},
- {"label": "K49", "matrix": [4, 9], "x": 9.25, "y": 4},
- {"label": "K4A", "matrix": [4, 10], "x": 10.25, "y": 4},
- {"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 4},
- {"label": "K4C", "matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
- {"label": "K4D", "matrix": [4, 13], "x": 14, "y": 4},
- {"label": "K4E", "matrix": [4, 14], "x": 15, "y": 4},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4},
- {"label": "K50", "matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
- {"label": "K51", "matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"label": "K52", "matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"label": "K55", "matrix": [5, 5], "x": 3.75, "y": 5, "w": 5.25},
- {"label": "K58", "matrix": [5, 8], "x": 9, "y": 5},
- {"label": "K59", "matrix": [5, 9], "x": 10, "y": 5},
- {"label": "K5A", "matrix": [5, 10], "x": 11, "y": 5},
- {"label": "K5B", "matrix": [5, 11], "x": 12, "y": 5},
- {"label": "K5C", "matrix": [5, 12], "x": 13, "y": 5},
- {"label": "K5D", "matrix": [5, 13], "x": 14, "y": 5},
- {"label": "K5E", "matrix": [5, 14], "x": 15, "y": 5}
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5},
+ {"matrix": [5, 13], "x": 14, "y": 5},
+ {"matrix": [5, 14], "x": 15, "y": 5}
]
}
}
diff --git a/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c b/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
index bf5a8deb0569..c6a4747a831c 100644
--- a/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
+++ b/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl|Win |Alt | Space |END|Alt |Ctrl|Left |Down|Rig|
* `----------------------------------------------------------------'
*/
- [0] = LAYOUT(
+ [0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME,KC_DEL,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC,KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,KC_PGDN,
@@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |
* `-----------------------------------------------------------'
*/
- [1] = LAYOUT(
+ [1] = LAYOUT_all(
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_UP, KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_TRNS,KC_INS, KC_TRNS,KC_PSCR,KC_SCRL,KC_PAUS,KC_TRNS,KC_TRNS,
diff --git a/keyboards/amjkeyboard/amj84/keymaps/default_ansi_rwkl/keymap.c b/keyboards/amjkeyboard/amj84/keymaps/default_ansi_rwkl/keymap.c
new file mode 100644
index 000000000000..973679d6f562
--- /dev/null
+++ b/keyboards/amjkeyboard/amj84/keymaps/default_ansi_rwkl/keymap.c
@@ -0,0 +1,57 @@
+// Copyright 2022 peepeetee (@peepeetee)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base */
+ /* Keymap 0: Default Layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Hm │End│Del│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bkspc │PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │Enter │Ins│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Up │Fn │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │Space │Alt │Ctrl │Lft│Dwn│Rig│
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+ */
+ [0] = LAYOUT_75_ansi_rwkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_INS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap 1: Fn Layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │Up │ │ │ │Cal│ │Ins│ │PSc│SLk│Pau│ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │BL Brt│Lft│Dwn│Rgt│ │ │ │ │ │ │Hm │PUp│ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │BL Step │ │App│ │ │ │Vl-│Vl+│Mut│End│PDn│ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+ * │Slp │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+ */
+ [1] = LAYOUT_75_ansi_rwkl(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, _______,
+ BL_STEP, _______, KC_APP, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, _______, _______, _______,
+ KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/amjkeyboard/amj84/keymaps/default_iso_rwkl/keymap.c b/keyboards/amjkeyboard/amj84/keymaps/default_iso_rwkl/keymap.c
new file mode 100644
index 000000000000..d64dfffea096
--- /dev/null
+++ b/keyboards/amjkeyboard/amj84/keymaps/default_iso_rwkl/keymap.c
@@ -0,0 +1,57 @@
+// Copyright 2022 peepeetee (@peepeetee)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base */
+ /* Keymap 0: Default Layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Hm │End│Del│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bkspc │PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐Ent ├───┤
+ * │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │Ins│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Up │Fn │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │Space │Alt │Ctrl │Lft│Dwn│Rig│
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+ */
+ [0] = LAYOUT_75_iso_rwkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_INS,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap 1: Fn Layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │Up │ │ │ │Cal│ │Ins│ │PSc│SLk│Pau│ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┤
+ * │BL Brt│Lft│Dwn│Rgt│ │ │ │ │ │ │Hm │PUp│ │ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │BL Step │ │App│ │ │ │Vl-│Vl+│Mut│End│PDn│ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+ * │Slp │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+ */
+ [1] = LAYOUT_75_iso_rwkl(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, _______, _______,
+ BL_STEP, _______, _______, KC_APP, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, _______, _______, _______,
+ KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/amjkeyboard/amj84/matrix_diagram.md b/keyboards/amjkeyboard/amj84/matrix_diagram.md
new file mode 100644
index 000000000000..c09506c3a528
--- /dev/null
+++ b/keyboards/amjkeyboard/amj84/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for AMJKeyboard AMJ84
+
+```
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │58 │0E │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ ┌─────┐
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │2E │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐3D │ ISO Enter
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3E │ │3C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4E │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+│50 │51 │52 │55 │59 │5A │5B │5C │5D │5E │
+└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+┌────────┐ └─────┬─────┘
+│40 │ 2.25u LShift │
+└────────┘ ┌─────┴─────┐
+┌─────┬───┬─────┬───────────────────────┬─────┬─────┐
+│50 │51 │52 │55 │5A │5B │ RWKL
+└─────┴───┴─────┴───────────────────────┴─────┴─────┘
+ 1.5u 1u 1.5u 6u
+```
diff --git a/keyboards/anavi/macropad12/config.h b/keyboards/anavi/macropad12/config.h
new file mode 100644
index 000000000000..02e7781e5707
--- /dev/null
+++ b/keyboards/anavi/macropad12/config.h
@@ -0,0 +1,25 @@
+// Copyright 2023 Leon Anavi
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_MOOD
+
+/* Double tap reset button to enter bootloader */
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+#ifdef BACKLIGHT_ENABLE
+# define BACKLIGHT_PWM_DRIVER PWMD5
+# define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A
+#endif
+
+#define I2C1_SDA_PIN GP6
+#define I2C1_SCL_PIN GP7
+
+#ifdef OLED_ENABLE
+# define OLED_DISPLAY_128X64
+# define OLED_TIMEOUT 60000
+# define OLED_BRIGHTNESS 128
+#endif
diff --git a/keyboards/anavi/macropad12/halconf.h b/keyboards/anavi/macropad12/halconf.h
new file mode 100644
index 000000000000..8a17a5c1676b
--- /dev/null
+++ b/keyboards/anavi/macropad12/halconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 Leon Anavi
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/anavi/macropad12/info.json b/keyboards/anavi/macropad12/info.json
new file mode 100644
index 000000000000..a5ed9857cad9
--- /dev/null
+++ b/keyboards/anavi/macropad12/info.json
@@ -0,0 +1,69 @@
+{
+ "keyboard_name": "Macro Pad 12",
+ "manufacturer": "ANAVI",
+ "url": "https://github.com/AnaviTechnology/anavi-macro-pad-12",
+ "maintainer": "leon-anavi",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP0", "GP2", "GP4"],
+ "rows": ["GP27", "GP28", "GP29", "GP1"]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true,
+ "backlight": true,
+ "oled": true
+ },
+ "rgblight": {
+ "led_count": 6,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "pin": "GP3",
+ "driver": "vendor"
+ },
+ "backlight": {
+ "pin": "GP26"
+ },
+ "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": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3}
+ ]
+ }
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x9A25",
+ "vid": "0xFEED"
+ }
+}
diff --git a/keyboards/anavi/macropad12/keymaps/default/keymap.c b/keyboards/anavi/macropad12/keymaps/default/keymap.c
new file mode 100644
index 000000000000..054322cb64d0
--- /dev/null
+++ b/keyboards/anavi/macropad12/keymaps/default/keymap.c
@@ -0,0 +1,17 @@
+// Copyright 2023 Leon Anavi
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_1, KC_2, KC_3,
+ KC_4, KC_5, KC_6,
+ KC_7, KC_8, KC_9,
+ BL_STEP, RGB_MOD, RGB_TOG
+ )
+};
diff --git a/keyboards/anavi/macropad12/macropad12.c b/keyboards/anavi/macropad12/macropad12.c
new file mode 100644
index 000000000000..de371dd988af
--- /dev/null
+++ b/keyboards/anavi/macropad12/macropad12.c
@@ -0,0 +1,38 @@
+// Copyright 2023 Leon Anavi
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+
+bool oled_task_kb(void) {
+
+ if (!oled_task_user()) {
+ return false;
+ }
+
+ // Host Keyboard Layer Status
+ oled_write_ln_P(PSTR("ANAVI Macro Pad 12"), false);
+ oled_write_ln_P(PSTR("Keymap: Default"), false);
+
+ // Host Keyboard LED Status
+ led_t led_state = host_keyboard_led_state();
+ oled_write_P(PSTR("Num Lock: "), false);
+ oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
+ oled_write_P(PSTR("Caps Lock: "), false);
+ oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
+ oled_write_P(PSTR("Scroll Lock: "), false);
+ oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
+# ifdef RGBLIGHT_ENABLE
+ oled_write_P(PSTR("RGB Mode: "), false);
+ oled_write_ln(get_u8_str(rgblight_get_mode(), ' '), false);
+ oled_write_P(PSTR("h: "), false);
+ oled_write(get_u8_str(rgblight_get_hue(), ' '), false);
+ oled_write_P(PSTR("s: "), false);
+ oled_write(get_u8_str(rgblight_get_sat(), ' '), false);
+ oled_write_P(PSTR("v: "), false);
+ oled_write_ln(get_u8_str(rgblight_get_val(), ' '), false);
+# endif
+ return false;
+}
+#endif
diff --git a/keyboards/anavi/macropad12/mcuconf.h b/keyboards/anavi/macropad12/mcuconf.h
new file mode 100644
index 000000000000..23519c8977cb
--- /dev/null
+++ b/keyboards/anavi/macropad12/mcuconf.h
@@ -0,0 +1,15 @@
+// Copyright 2023 Leon Anavi (@leon-anavi)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_I2C_USE_I2C0
+#define RP_I2C_USE_I2C0 FALSE
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
+
+#undef RP_PWM_USE_PWM5
+#define RP_PWM_USE_PWM5 TRUE
diff --git a/keyboards/anavi/macropad12/readme.md b/keyboards/anavi/macropad12/readme.md
new file mode 100644
index 000000000000..d926aa8eb053
--- /dev/null
+++ b/keyboards/anavi/macropad12/readme.md
@@ -0,0 +1,21 @@
+# ANAVI Macro Pad 12
+
+ANAVI Macro Pad 12 is a compact mechanical keyboard with hot-swappable Cherry MX compatible mechanical switches, translucent keycaps, USB-C, RP2040 microcontroller, backlighting and under lighting.
+
+* Keyboard Maintainer: [Leon Anavi](https://github.com/leon-anavi)
+* Hardware Supported: ANAVI Macro Pad 12
+* Hardware Availability: [Crowd Supply](https://www.crowdsupply.com/anavi-technology/anavi-macro-pad-12-and-arrows), [GitHub repository](https://github.com/AnaviTechnology/anavi-macro-pad-12)
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile -kb anavi/macropad12 -km default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the top left key on the left half, or top right key on the right half, and then plug in the USB cable on that keyboard half.
+* **Physical reset button**: Double tap the reset button on the XIAO RP2040.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.
diff --git a/keyboards/anavi/macropad12/rules.mk b/keyboards/anavi/macropad12/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/anavi/macropad12/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/artemis/paragon/hotswap/info.json b/keyboards/artemis/paragon/hotswap/info.json
new file mode 100644
index 000000000000..d70625c1d6c7
--- /dev/null
+++ b/keyboards/artemis/paragon/hotswap/info.json
@@ -0,0 +1,364 @@
+{
+ "matrix_pins": {
+ "cols": ["F7", "F6", "F5", "F4", "F1", "F0", "C7", "E6", "B0", "B3", "B6", "B5", "B4", "D7", "D4", "D6"],
+ "rows": ["D2", "D1", "D0", "B2", "B1", "C6"]
+ },
+ "layouts": {
+ "LAYOUT_ansi_rwkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_rwkl_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 2], "x": 1.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 6], "x": 3, "y": 5.5, "w": 7},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_wkl_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 2], "x": 1.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 6], "x": 3, "y": 5.5, "w": 7},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/artemis/paragon/hotswap/matrix_diagram.md b/keyboards/artemis/paragon/hotswap/matrix_diagram.md
new file mode 100644
index 000000000000..215d44642a25
--- /dev/null
+++ b/keyboards/artemis/paragon/hotswap/matrix_diagram.md
@@ -0,0 +1,21 @@
+# Matrix Diagram for Artemis Paragon Hotswap
+
+```
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┐
+│00 │ │02 │03 │04 │05 │ │06 │07 │08 │09 │ │0A │0B │0C │0D │ │Rot│
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │1F │ │1E │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ └───────┘
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │2F │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3F │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+│40 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4F │
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+│50 │52 │53 │56 │5A │5B │5C │5D │5F │
+└────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+┌─────┬─────┬───────────────────────────┬─────┬─────┐
+│50 │52 │56 │5A │5B │ WKL
+└─────┴─────┴───────────────────────────┴─────┴─────┘
+```
diff --git a/keyboards/artemis/paragon/hotswap/rules.mk b/keyboards/artemis/paragon/hotswap/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/artemis/paragon/hotswap/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/artemis/paragon/info.json b/keyboards/artemis/paragon/info.json
new file mode 100644
index 000000000000..b18b3b28db2c
--- /dev/null
+++ b/keyboards/artemis/paragon/info.json
@@ -0,0 +1,125 @@
+{
+ "manufacturer": "Artemis",
+ "keyboard_name": "Paragon",
+ "maintainer": "Sleepdealr",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "encoder": true
+ },
+ "build": {
+ "lto": true
+ },
+ "processor": "atmega32u4",
+ "url": "",
+ "encoder": {
+ "rotary": [
+ { "pin_a": "D3", "pin_b": "D5", "resolution": 2 }
+ ]
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x3449",
+ "vid": "0x8C27"
+ },
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 1.5, "y": 0 },
+ { "matrix": [0, 3], "x": 2.5, "y": 0 },
+ { "matrix": [0, 4], "x": 3.5, "y": 0 },
+ { "matrix": [0, 5], "x": 4.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10.5, "y": 0 },
+ { "matrix": [0, 11], "x": 11.5, "y": 0 },
+ { "matrix": [0, 12], "x": 12.5, "y": 0 },
+ { "matrix": [0, 13], "x": 13.5, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.5 },
+ { "matrix": [1, 1], "x": 1, "y": 1.5 },
+ { "matrix": [1, 2], "x": 2, "y": 1.5 },
+ { "matrix": [1, 3], "x": 3, "y": 1.5 },
+ { "matrix": [1, 4], "x": 4, "y": 1.5 },
+ { "matrix": [1, 5], "x": 5, "y": 1.5 },
+ { "matrix": [1, 6], "x": 6, "y": 1.5 },
+ { "matrix": [1, 7], "x": 7, "y": 1.5 },
+ { "matrix": [1, 8], "x": 8, "y": 1.5 },
+ { "matrix": [1, 9], "x": 9, "y": 1.5 },
+ { "matrix": [1, 10], "x": 10, "y": 1.5 },
+ { "matrix": [1, 11], "x": 11, "y": 1.5 },
+ { "matrix": [1, 12], "x": 12, "y": 1.5 },
+ { "matrix": [1, 13], "x": 13, "y": 1.5 },
+ { "matrix": [1, 14], "x": 14, "y": 1.5 },
+ { "matrix": [1, 15], "x": 15, "y": 1.5 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.5 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.5 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.5 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.5 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.5 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.5 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.5 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.5 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.5 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.5 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.5 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.5 },
+ { "matrix": [2, 12], "x": 12.5, "y": 2.5 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.5 },
+ { "matrix": [2, 15], "x": 15, "y": 2.5 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.5 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.5 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.5 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.5 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.5 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.5 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.5 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.5 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.5 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.5 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.5 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.5 },
+ { "matrix": [3, 12], "x": 12.75, "y": 3.5 },
+ { "matrix": [3, 13], "w": 1.25, "x": 13.75, "y": 3.5 },
+ { "matrix": [3, 15], "x": 15, "y": 3.5 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.5 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.5 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.5 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.5 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.5 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.5 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.5 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.5 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.5 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.5 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.5 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.5 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.5 },
+ { "matrix": [4, 13], "x": 14, "y": 4.5 },
+ { "matrix": [4, 15], "x": 15, "y": 4.5 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.5 },
+ { "matrix": [5, 2], "w": 1.25, "x": 1.25, "y": 5.5 },
+ { "matrix": [5, 3], "w": 1.25, "x": 2.5, "y": 5.5 },
+ { "matrix": [5, 4], "w": 2.25, "x": 3.75, "y": 5.5 },
+ { "matrix": [5, 6], "w": 1.25, "x": 6, "y": 5.5 },
+ { "matrix": [5, 8], "w": 2.75, "x": 7.25, "y": 5.5 },
+ { "matrix": [5, 10], "w": 1.5, "x": 10, "y": 5.5 },
+ { "matrix": [5, 11], "w": 1.5, "x": 11.5, "y": 5.5 },
+ { "matrix": [5, 12], "x": 13, "y": 5.5 },
+ { "matrix": [5, 13], "x": 14, "y": 5.5 },
+ { "matrix": [5, 15], "x": 15, "y": 5.5 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/artemis/paragon/keymaps/default/keymap.c b/keyboards/artemis/paragon/keymaps/default/keymap.c
new file mode 100644
index 000000000000..fc55fb1c85b3
--- /dev/null
+++ b/keyboards/artemis/paragon/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/*
+Copyright 2023 Sleepdealer
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ 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_NUBS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }
+};
+#endif
diff --git a/keyboards/artemis/paragon/keymaps/default/rules.mk b/keyboards/artemis/paragon/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/artemis/paragon/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/artemis/paragon/keymaps/via/keymap.c b/keyboards/artemis/paragon/keymaps/via/keymap.c
new file mode 100644
index 000000000000..47e269c78ab7
--- /dev/null
+++ b/keyboards/artemis/paragon/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/*
+Copyright 2023 Sleepdealer
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ 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_NUBS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUHS, 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_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }
+};
+#endif
diff --git a/keyboards/artemis/paragon/keymaps/via/rules.mk b/keyboards/artemis/paragon/keymaps/via/rules.mk
new file mode 100644
index 000000000000..f1adcab005e8
--- /dev/null
+++ b/keyboards/artemis/paragon/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/artemis/paragon/readme.md b/keyboards/artemis/paragon/readme.md
new file mode 100644
index 000000000000..287d141ccc67
--- /dev/null
+++ b/keyboards/artemis/paragon/readme.md
@@ -0,0 +1,23 @@
+# Artemis/Paragon
+
+* Keyboard Maintainer: [Sleepdealer](https://github.com/Sleepdealr)
+* Hardware Supported: Paragon PCB
+* Hardware Availability: GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make artemis/paragon/hotswap:default
+
+Flashing example for this keyboard:
+
+ make artemis/paragon/hotswap:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+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/artemis/paragon/soldered/info.json b/keyboards/artemis/paragon/soldered/info.json
new file mode 100644
index 000000000000..b531b22f807b
--- /dev/null
+++ b/keyboards/artemis/paragon/soldered/info.json
@@ -0,0 +1,736 @@
+{
+ "matrix_pins": {
+ "cols": ["E6", "F0", "F1", "F4", "F5", "F6", "F7", "B0", "B1", "B3", "D0", "D1", "D2", "D3", "D7", "D5"],
+ "rows": ["B2", "C7", "C6", "B6", "B5", "B4"]
+ },
+ "layouts": {
+ "LAYOUT_ansi_rwkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_rwkl_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_rwkl_split_space": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 4], "x": 3.75, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 6], "x": 6, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 8], "x": 7.25, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi_rwkl_split_space_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 4], "x": 3.75, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 6], "x": 6, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 8], "x": 7.25, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_iso_rwkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_iso_rwkl_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_iso_rwkl_split_space": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 14], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 4], "x": 3.75, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 6], "x": 6, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 8], "x": 7.25, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ },
+ "LAYOUT_iso_rwkl_split_space_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10.5, "y": 0},
+ {"matrix": [0, 11], "x": 11.5, "y": 0},
+ {"matrix": [0, 12], "x": 12.5, "y": 0},
+ {"matrix": [0, 13], "x": 13.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 15], "x": 15, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3.5},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.5},
+ {"matrix": [4, 15], "x": 15, "y": 4.5},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 2], "x": 1.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 4], "x": 3.75, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 6], "x": 6, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 8], "x": 7.25, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 12], "x": 13, "y": 5.5},
+ {"matrix": [5, 13], "x": 14, "y": 5.5},
+ {"matrix": [5, 15], "x": 15, "y": 5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/artemis/paragon/soldered/matrix_diagram.md b/keyboards/artemis/paragon/soldered/matrix_diagram.md
new file mode 100644
index 000000000000..6fa5ad6cf88c
--- /dev/null
+++ b/keyboards/artemis/paragon/soldered/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Artemis Paragon Soldered
+
+```
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┐
+│00 │ │02 │03 │04 │05 │ │06 │07 │08 │09 │ │0A │0B │0C │0D │ │Rot│
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │1F │ │1E │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ └─┬─────┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │2F │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐3D │ ISO Enter
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3F │ │3C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4F │
+├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+│50 │52 │53 │54 │56 │58 │5A │5B │5C │5D │5F │
+└────┴────┴────┴────────┴────┴──────────┴─────┴─────┴───┴───┴───┘
+┌────────┐
+│40 │ 2.25u LShift
+└────────┘
+┌────┬────┬────┬────────────────────────┬─────┬─────┐
+│50 │52 │53 │56 │5A │5B │ RWKL
+└────┴────┴────┴────────────────────────┴─────┴─────┘
+```
diff --git a/keyboards/artemis/paragon/soldered/rules.mk b/keyboards/artemis/paragon/soldered/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/artemis/paragon/soldered/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/automata02/alisaie/info.json b/keyboards/automata02/alisaie/info.json
new file mode 100644
index 000000000000..6e4c007e00a2
--- /dev/null
+++ b/keyboards/automata02/alisaie/info.json
@@ -0,0 +1,96 @@
+{
+ "manufacturer": "Automata02",
+ "keyboard_name": "Alisaie",
+ "maintainer": "qmk",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B6", "F0", "F1", "F4", "F5", "B5", "B7", "D3", "D2", "D1", "D0", "B3", "B2", "B0"],
+ "rows": ["E6", "F6", "D5", "D4", "B1"]
+ },
+ "processor": "atmega32u4",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x2012",
+ "vid": "0xBABE"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 8.5, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 9.5, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 10.5, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 11.5, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 12.5, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 13.5, "y": 0},
+ {"label": "\\", "matrix": [0, 13], "x": 14.5, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 8, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 9, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 10, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 11, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 12, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 13, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 14, "y": 1},
+ {"label": "Backspace", "matrix": [1, 13], "x": 15, "y": 1, "w": 1.5},
+
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 8.25, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 9.25, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 10.25, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 11.25, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 12.25, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 13.25, "y": 2},
+ {"label": "Enter", "matrix": [2, 12], "x": 14.25, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 1], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 2], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 3], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 4], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 5], "x": 6.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 7.75, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 8.75, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 9.75, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 10.75, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 11.75, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 12.75, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Alt", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "GUI", "matrix": [4, 2], "x": 3.25, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 3], "x": 4.75, "y": 4, "w": 2.75},
+ {"label": "Space", "matrix": [4, 8], "x": 7.75, "y": 4, "w": 2.25},
+ {"label": "GUI", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.5},
+ {"label": "`", "matrix": [4, 11], "x": 15.5, "y": 0},
+ {"label": "Alt", "matrix": [4, 12], "x": 14, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 15, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/automata02/alisaie/keymaps/default/keymap.c b/keyboards/automata02/alisaie/keymaps/default/keymap.c
new file mode 100644
index 000000000000..4b88bd30b5bc
--- /dev/null
+++ b/keyboards/automata02/alisaie/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/*
+Copyright 2022 Automata
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ 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_LGUI, KC_SPC, KC_SPC, KC_RGUI, KC_GRV, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_PGUP, _______, _______, _______, _______, _______, KC_UP, _______, KC_MPRV, KC_UP, KC_MNXT, _______,
+ _______, KC_HOME, KC_PGDN, KC_END, _______, KC_VOLD, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, KC_LEFT, KC_RGHT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/automata02/alisaie/keymaps/via/keymap.c b/keyboards/automata02/alisaie/keymaps/via/keymap.c
new file mode 100644
index 000000000000..eee1a8dd387c
--- /dev/null
+++ b/keyboards/automata02/alisaie/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+/*
+Copyright 2022 Automata
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ 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_LGUI, KC_SPC, KC_SPC, KC_RGUI, KC_GRV, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT(
+ QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_PGUP, _______, _______, _______, _______, _______, KC_UP, _______, KC_MPRV, KC_UP, KC_MNXT, _______,
+ _______, KC_HOME, KC_PGDN, KC_END, _______, KC_VOLD, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, KC_LEFT, KC_RGHT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/automata02/alisaie/keymaps/via/rules.mk b/keyboards/automata02/alisaie/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/automata02/alisaie/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/automata02/alisaie/readme.md b/keyboards/automata02/alisaie/readme.md
new file mode 100644
index 000000000000..8bfcae86f128
--- /dev/null
+++ b/keyboards/automata02/alisaie/readme.md
@@ -0,0 +1,24 @@
+# Alisaie
+
+![Alisaie layout](https://i.imgur.com/0YsrKvw.png)
+
+A 60% alice like keyboard sharing the same footprint and 8 degree alpha rotation as Meridian but with a tsangan bottom row.
+
+* Keyboard Maintainer: [Automata02](https://github.com/Automata02/)
+* Hardware Supported: Alisaie PCB version 0.0.4b
+
+Make example for this keyboard (after setting up your build environment):
+
+ make automata02/alisaie:default
+
+Flashing example for this keyboard:
+
+ make automata02/alisaie: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:
+
+* **Physical reset button**: Briefly press the button on the backside of the PCB located bellow the Y keyswitch.
\ No newline at end of file
diff --git a/keyboards/automata02/alisaie/rules.mk b/keyboards/automata02/alisaie/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/automata02/alisaie/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/b_sides/rev41lp/info.json b/keyboards/b_sides/rev41lp/info.json
index 8a1c538a7198..9d121083bd41 100644
--- a/keyboards/b_sides/rev41lp/info.json
+++ b/keyboards/b_sides/rev41lp/info.json
@@ -4,7 +4,7 @@
"url": "https://github.com/cyril279/keyboards/tree/main/revlp/41_1350",
"maintainer": "cyril279",
"usb": {
- "vid": "0xFEED",
+ "vid": "0xFA9D",
"pid": "0x5F10",
"device_version": "0.0.1"
},
diff --git a/keyboards/b_sides/rev41lp/keymaps/via/keymap.c b/keyboards/b_sides/rev41lp/keymaps/via/keymap.c
new file mode 100644
index 000000000000..a873433953cb
--- /dev/null
+++ b/keyboards/b_sides/rev41lp/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+/*
+Copyright 2021 @cyril279
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT),
+ KC_LALT, MO(1), KC_SPC, MO(2), KC_LGUI
+ ),
+
+ [1] = LAYOUT(
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_GRV, KC_TILD,
+ _______, KC_ESC, KC_LGUI, KC_LALT, KC_CAPS, KC_DQUO, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_PSCR, RSFT_T(KC_SPC),
+ _______, _______, KC_ENT, MO(3), _______
+ ),
+
+ [2] = LAYOUT(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ _______, KC_ESC, KC_RGUI, KC_RALT, KC_CAPS, KC_QUOT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, MO(3), KC_BSPC, _______, _______
+ ),
+
+ [3] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, BL_TOGG, BL_BRTG, BL_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, _______, _______, _______, _______
+ )
+};
+
diff --git a/keyboards/b_sides/rev41lp/keymaps/via/rules.mk b/keyboards/b_sides/rev41lp/keymaps/via/rules.mk
new file mode 100644
index 000000000000..36b7ba9cbc98
--- /dev/null
+++ b/keyboards/b_sides/rev41lp/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/binepad/bn009/keymaps/default/keymap.json b/keyboards/binepad/bn009/keymaps/default/keymap.json
index 2d5410de04fb..bcce7475c6d1 100644
--- a/keyboards/binepad/bn009/keymaps/default/keymap.json
+++ b/keyboards/binepad/bn009/keymaps/default/keymap.json
@@ -1,5 +1,5 @@
{
- "keyboard": "binepad/bn009r2",
+ "keyboard": "binepad/bn009/r2",
"version": 1,
"author": "binepad",
"notes": "This file is a keymap.json file for binepad/bn009r2",
diff --git a/keyboards/binepad/bn009/keymaps/via/keymap.json b/keyboards/binepad/bn009/keymaps/via/keymap.json
index 414859ec9609..1790cf9328a2 100644
--- a/keyboards/binepad/bn009/keymaps/via/keymap.json
+++ b/keyboards/binepad/bn009/keymaps/via/keymap.json
@@ -4,7 +4,7 @@
"via": true
}
},
- "keyboard": "binepad/bn009r2",
+ "keyboard": "binepad/bn009/r2",
"version": 1,
"author": "binepad",
"notes": "This file is a keymap.json file for binepad/bn009r2",
diff --git a/keyboards/boardsource/unicorne/config.h b/keyboards/boardsource/unicorne/config.h
new file mode 100644
index 000000000000..d0d466bb54aa
--- /dev/null
+++ b/keyboards/boardsource/unicorne/config.h
@@ -0,0 +1,26 @@
+// Copyright 2023 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define RGB_MATRIX_LED_COUNT 54
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_ALPHAS_MODS
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+
+#define SPLIT_LAYER_STATE_ENABLE
+
+#define I2C_DRIVER I2CD1
+#define I2C1_SDA_PIN GP22
+#define I2C1_SCL_PIN GP23
+
+#define AUDIO_PIN GP28
+#define AUDIO_PWM_DRIVER PWMD6
+#define AUDIO_INIT_DELAY
+#define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_A
+#define STARTUP_SONG SONG(ODE_TO_JOY)
+
+#define ANALOG_JOYSTICK_Y_AXIS_PIN GP26
+#define ANALOG_JOYSTICK_X_AXIS_PIN GP27
+#define POINTING_DEVICE_INVERT_Y
+#define POINTING_DEVICE_INVERT_X
diff --git a/keyboards/boardsource/unicorne/halconf.h b/keyboards/boardsource/unicorne/halconf.h
new file mode 100644
index 000000000000..21ed454e5069
--- /dev/null
+++ b/keyboards/boardsource/unicorne/halconf.h
@@ -0,0 +1,9 @@
+// Copyright 2022 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_PWM TRUE
+#define HAL_USE_ADC TRUE
+
+#include_next
diff --git a/keyboards/boardsource/unicorne/info.json b/keyboards/boardsource/unicorne/info.json
new file mode 100644
index 000000000000..fe46ec13a697
--- /dev/null
+++ b/keyboards/boardsource/unicorne/info.json
@@ -0,0 +1,161 @@
+{
+ "manufacturer": "Boardsource",
+ "maintainer": "waffle87",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "audio": true,
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true,
+ "pointing_device": true,
+ "rgb_matrix": true
+ },
+ "indicators": {
+ "caps": "GP24"
+ },
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "GP0"
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x7563",
+ "vid": "0x4273"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP29"
+ },
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7"],
+ "rows": ["GP14", "GP15", "GP16", "GP17"]
+ },
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP8", "pin_b": "GP9"}
+ ]
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_sat": true,
+ "band_val": true,
+ "breathing": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true
+ },
+ "max_brightness": 150,
+ "split_count": [27, 27],
+ "driver": "WS2812",
+ "layout": [
+ {"x": 85, "y": 16, "flags": 2},
+ {"x": 50, "y": 13, "flags": 2},
+ {"x": 16, "y": 20, "flags": 2},
+ {"x": 16, "y": 38, "flags": 2},
+ {"x": 50, "y": 48, "flags": 2},
+ {"x": 85, "y": 52, "flags": 2},
+ {"matrix": [3, 5], "x": 95, "y": 63, "flags": 1},
+ {"matrix": [2, 5], "x": 85, "y": 39, "flags": 4},
+ {"matrix": [1, 5], "x": 85, "y": 21, "flags": 4},
+ {"matrix": [0, 5], "x": 85, "y": 4, "flags": 4},
+ {"matrix": [0, 4], "x": 68, "y": 2, "flags": 4},
+ {"matrix": [1, 4], "x": 68, "y": 19, "flags": 4},
+ {"matrix": [2, 4], "x": 68, "y": 37, "flags": 4},
+ {"matrix": [3, 4], "x": 80, "y": 58, "flags": 1},
+ {"matrix": [3, 3], "x": 60, "y": 55, "flags": 1},
+ {"matrix": [2, 3], "x": 50, "y": 35, "flags": 4},
+ {"matrix": [1, 3], "x": 50, "y": 13, "flags": 4},
+ {"matrix": [0, 3], "x": 50, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 33, "y": 3, "flags": 4},
+ {"matrix": [1, 2], "x": 33, "y": 20, "flags": 4},
+ {"matrix": [2, 2], "x": 33, "y": 37, "flags": 4},
+ {"matrix": [2, 1], "x": 16, "y": 42, "flags": 4},
+ {"matrix": [1, 1], "x": 16, "y": 24, "flags": 4},
+ {"matrix": [0, 1], "x": 16, "y": 7, "flags": 4},
+ {"matrix": [0, 0], "x": 0, "y": 7, "flags": 1},
+ {"matrix": [1, 0], "x": 0, "y": 24, "flags": 1},
+ {"matrix": [2, 0], "x": 0, "y": 41, "flags": 1},
+ {"x": 139, "y": 16, "flags": 2},
+ {"x": 174, "y": 13, "flags": 2},
+ {"x": 208, "y": 20, "flags": 2},
+ {"x": 208, "y": 38, "flags": 2},
+ {"x": 174, "y": 48, "flags": 2},
+ {"x": 139, "y": 52, "flags": 2},
+ {"matrix": [7, 5], "x": 129, "y": 63, "flags": 1},
+ {"matrix": [6, 5], "x": 139, "y": 39, "flags": 4},
+ {"matrix": [5, 5], "x": 139, "y": 21, "flags": 4},
+ {"matrix": [4, 5], "x": 139, "y": 4, "flags": 4},
+ {"matrix": [4, 4], "x": 156, "y": 2, "flags": 4},
+ {"matrix": [5, 4], "x": 156, "y": 19, "flags": 4},
+ {"matrix": [6, 4], "x": 156, "y": 37, "flags": 4},
+ {"matrix": [7, 4], "x": 144, "y": 58, "flags": 1},
+ {"matrix": [7, 3], "x": 164, "y": 55, "flags": 1},
+ {"matrix": [6, 3], "x": 174, "y": 35, "flags": 4},
+ {"matrix": [5, 3], "x": 174, "y": 13, "flags": 4},
+ {"matrix": [4, 3], "x": 174, "y": 0, "flags": 4},
+ {"matrix": [4, 2], "x": 191, "y": 3, "flags": 4},
+ {"matrix": [5, 2], "x": 191, "y": 20, "flags": 4},
+ {"matrix": [6, 2], "x": 191, "y": 37, "flags": 4},
+ {"matrix": [6, 1], "x": 208, "y": 42, "flags": 4},
+ {"matrix": [5, 1], "x": 208, "y": 24, "flags": 4},
+ {"matrix": [4, 1], "x": 208, "y": 7, "flags": 4},
+ {"matrix": [4, 0], "x": 0, "y": 7, "flags": 1},
+ {"matrix": [5, 0], "x": 0, "y": 24, "flags": 1},
+ {"matrix": [6, 0], "x": 0, "y": 41, "flags": 1}
+ ]
+ },
+ "community_layouts": ["split_3x6_3"],
+ "layouts": {
+ "LAYOUT_split_3x6_3": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.3},
+ {"matrix": [0, 1], "x": 1, "y": 0.3},
+ {"matrix": [0, 2], "x": 2, "y": 0.1},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.1},
+ {"matrix": [0, 5], "x": 5, "y": 0.2},
+ {"matrix": [4, 5], "x": 9, "y": 0.2},
+ {"matrix": [4, 4], "x": 10, "y": 0.1},
+ {"matrix": [4, 3], "x": 11, "y": 0},
+ {"matrix": [4, 2], "x": 12, "y": 0.1},
+ {"matrix": [4, 1], "x": 13, "y": 0.3},
+ {"matrix": [4, 0], "x": 14, "y": 0.3},
+ {"matrix": [1, 0], "x": 0, "y": 1.3},
+ {"matrix": [1, 1], "x": 1, "y": 1.3},
+ {"matrix": [1, 2], "x": 2, "y": 1.1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.1},
+ {"matrix": [1, 5], "x": 5, "y": 1.2},
+ {"matrix": [5, 5], "x": 9, "y": 1.2},
+ {"matrix": [5, 4], "x": 10, "y": 1.1},
+ {"matrix": [5, 3], "x": 11, "y": 1},
+ {"matrix": [5, 2], "x": 12, "y": 1.1},
+ {"matrix": [5, 1], "x": 13, "y": 1.3},
+ {"matrix": [5, 0], "x": 14, "y": 1.3},
+ {"matrix": [2, 0], "x": 0, "y": 2.3},
+ {"matrix": [2, 1], "x": 1, "y": 2.3},
+ {"matrix": [2, 2], "x": 2, "y": 2.1},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.1},
+ {"matrix": [2, 5], "x": 5, "y": 2.2},
+ {"matrix": [6, 5], "x": 9, "y": 2.2},
+ {"matrix": [6, 4], "x": 10, "y": 2.1},
+ {"matrix": [6, 3], "x": 11, "y": 2},
+ {"matrix": [6, 2], "x": 12, "y": 2.1},
+ {"matrix": [6, 1], "x": 13, "y": 2.3},
+ {"matrix": [6, 0], "x": 14, "y": 2.3},
+ {"matrix": [3, 3], "x": 4, "y": 3.7},
+ {"matrix": [3, 4], "x": 5, "y": 3.7},
+ {"matrix": [3, 5], "x": 6, "y": 3.2, "h": 1.5},
+ {"matrix": [7, 5], "x": 8, "y": 3.2, "h": 1.5},
+ {"matrix": [7, 4], "x": 9, "y": 3.7},
+ {"matrix": [7, 3], "x": 10, "y": 3.7}
+ ]
+ }
+ }
+}
diff --git a/keyboards/boardsource/unicorne/keymaps/default/keymap.json b/keyboards/boardsource/unicorne/keymaps/default/keymap.json
new file mode 100644
index 000000000000..1980bc3c873e
--- /dev/null
+++ b/keyboards/boardsource/unicorne/keymaps/default/keymap.json
@@ -0,0 +1,25 @@
+{
+ "keyboard": "boardsource/unicorne",
+ "keymap": "default",
+ "layout": "LAYOUT_split_3x6_3",
+ "layers": [
+ [
+ "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSPC",
+ "KC_LCTL", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
+ "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_ESC",
+ "KC_LGUI", "MO(1)", "KC_SPC", "KC_ENT", "MO(2)", "KC_RALT"
+ ],
+ [
+ "_______", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "_______",
+ "_______", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_LPRN", "KC_RPRN", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______"
+ ],
+ [
+ "QK_BOOT", "_______", "_______", "_______", "_______", "_______", "RGB_VAI", "RGB_HUI", "RGB_SAI", "RGB_MOD", "RGB_TOG", "_______",
+ "EE_CLR", "_______", "_______", "_______", "_______", "_______", "RGB_VAD", "RGB_HUD", "RGB_SAD", "RGB_RMOD", "CK_TOGG", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______"
+ ]
+ ]
+}
diff --git a/keyboards/boardsource/unicorne/keymaps/via/keymap.json b/keyboards/boardsource/unicorne/keymaps/via/keymap.json
new file mode 100644
index 000000000000..230fc6e36204
--- /dev/null
+++ b/keyboards/boardsource/unicorne/keymaps/via/keymap.json
@@ -0,0 +1,30 @@
+{
+ "keyboard": "boardsource/unicorne",
+ "keymap": "via",
+ "layout": "LAYOUT_split_3x6_3",
+ "config": {
+ "features": {
+ "via": true
+ }
+ },
+ "layers": [
+ [
+ "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSPC",
+ "KC_LCTL", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
+ "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_ESC",
+ "KC_LGUI", "MO(1)", "KC_SPC", "KC_ENT", "MO(2)", "KC_RALT"
+ ],
+ [
+ "_______", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "_______",
+ "_______", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_LPRN", "KC_RPRN", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______"
+ ],
+ [
+ "QK_BOOT", "_______", "_______", "_______", "_______", "_______", "RGB_VAI", "RGB_HUI", "RGB_SAI", "RGB_MOD", "RGB_TOG", "_______",
+ "EE_CLR", "_______", "_______", "_______", "_______", "_______", "RGB_VAD", "RGB_HUD", "RGB_SAD", "RGB_RMOD", "CK_TOGG", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______"
+ ]
+ ]
+}
diff --git a/keyboards/boardsource/unicorne/mcuconf.h b/keyboards/boardsource/unicorne/mcuconf.h
new file mode 100644
index 000000000000..60e7b5812f8e
--- /dev/null
+++ b/keyboards/boardsource/unicorne/mcuconf.h
@@ -0,0 +1,13 @@
+// Copyright 2022 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#include_next
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
+
+#undef RP_PWM_USE_PWM6
+#define RP_PWM_USE_PWM6 TRUE
+
+#undef RP_ADC_USE_ADC1
+#define RP_ADC_USE_ADC1 TRUE
diff --git a/keyboards/boardsource/unicorne/readme.md b/keyboards/boardsource/unicorne/readme.md
new file mode 100644
index 000000000000..3f4472b882c4
--- /dev/null
+++ b/keyboards/boardsource/unicorne/readme.md
@@ -0,0 +1,25 @@
+# Unicorne
+
+![image](https://i.imgur.com/akJJFUmh.jpeg)
+
+* Keyboard Maintainer: [waffle87](https://github.com/waffle87)
+* Hardware Supported: Unicorne PCBs w/ integrated RP2040 microcontroller
+* Hardware Availability: [boardsource.xyz](https://boardsource.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make boardsource/unicorne:default
+
+Flashing example for this keyboard:
+
+ make boardsource/unicorne:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the top left key) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/boardsource/unicorne/rules.mk b/keyboards/boardsource/unicorne/rules.mk
new file mode 100644
index 000000000000..d123b2a2fa80
--- /dev/null
+++ b/keyboards/boardsource/unicorne/rules.mk
@@ -0,0 +1,3 @@
+SERIAL_DRIVER = vendor
+AUDIO_DRIVER = pwm_hardware
+POINTING_DEVICE_DRIVER = analog_joystick
diff --git a/keyboards/boardsource/unicorne/unicorne.c b/keyboards/boardsource/unicorne/unicorne.c
new file mode 100644
index 000000000000..0c443722e027
--- /dev/null
+++ b/keyboards/boardsource/unicorne/unicorne.c
@@ -0,0 +1,37 @@
+// Copyright 2023 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "unicorne.h"
+
+#ifdef OLED_ENABLE
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ if (!is_keyboard_master()) {
+ return OLED_ROTATION_180;
+ }
+ return rotation;
+}
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ if (is_keyboard_master()) {
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write_raw(layer_zero, sizeof(layer_zero));
+ break;
+ case 1:
+ oled_write_raw(layer_zero, sizeof(layer_zero));
+ break;
+ case 2:
+ oled_write_raw(layer_zero, sizeof(layer_zero));
+ break;
+ case 3:
+ oled_write_raw(layer_zero, sizeof(layer_zero));
+ break;
+ }
+ } else {
+ oled_write_raw(logo, sizeof(logo));
+ }
+ return false;
+}
+#endif
diff --git a/keyboards/boardsource/unicorne/unicorne.h b/keyboards/boardsource/unicorne/unicorne.h
new file mode 100644
index 000000000000..68bbeeb18ab1
--- /dev/null
+++ b/keyboards/boardsource/unicorne/unicorne.h
@@ -0,0 +1,194 @@
+// Copyright 2023 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+// clang-format off
+static const char PROGMEM logo[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
+ 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x01, 0xe3, 0xe7, 0xe7, 0xe3,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00,
+ 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0xe0,
+ 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0,
+ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x7e, 0xff, 0xff, 0xff, 0xe7, 0xc1, 0x81, 0x81, 0x81, 0xc1, 0x00, 0x00, 0x7f,
+ 0xff, 0xff, 0xff, 0xe3, 0xc1, 0x81, 0x81, 0xc1, 0xe3, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x03, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff,
+ 0xcd, 0x8c, 0x8c, 0x8c, 0x8d, 0xcf, 0xcf, 0xcf, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const char PROGMEM layer_zero[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x18, 0x30, 0x60, 0xe0, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc8, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x0f, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03,
+ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0xfc, 0x0e, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x80, 0x00,
+ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf0, 0x60,
+ 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x01, 0x03, 0x07,
+ 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00,
+ 0x00, 0x01, 0x03, 0x07, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+
+static const char PROGMEM layer_one[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x18, 0x30, 0x60, 0xe0, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc8, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x0f, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03,
+ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x80, 0x00,
+ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
+ 0x3f, 0x70, 0xe0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf0, 0x60,
+ 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x01, 0x03, 0x07,
+ 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00,
+ 0x00, 0x01, 0x03, 0x07, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+
+static const char PROGMEM layer_two[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x18, 0x30, 0x60, 0xe0, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc8, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x0f, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03,
+ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x80, 0x00,
+ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0x70, 0x38, 0x1f, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf0, 0x60,
+ 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x01, 0x03, 0x07,
+ 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00,
+ 0x00, 0x01, 0x03, 0x07, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+
+static const char PROGMEM layer_three[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x18, 0x30, 0x60, 0xe0, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc8, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x0f, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03,
+ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x07, 0x0e, 0xfc, 0xf0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x80, 0x00,
+ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf0, 0x60,
+ 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x01, 0x03, 0x07,
+ 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00,
+ 0x00, 0x01, 0x03, 0x07, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+// clang-format on
+#endif
diff --git a/keyboards/bpiphany/pegasushoof/2013/info.json b/keyboards/bpiphany/pegasushoof/2013/info.json
index 585d417688bd..abbeeb0f3649 100644
--- a/keyboards/bpiphany/pegasushoof/2013/info.json
+++ b/keyboards/bpiphany/pegasushoof/2013/info.json
@@ -6,7 +6,7 @@
"scroll_lock": "C5",
"on_state": 0
},
- "community_layouts": ["tkl_ansi"],
+ "community_layouts": ["tkl_ansi", "tkl_jis"],
"layouts": {
"LAYOUT": {
"layout": [
diff --git a/keyboards/bpiphany/pegasushoof/2015/info.json b/keyboards/bpiphany/pegasushoof/2015/info.json
index bed39668e8c8..a3b5f667844e 100644
--- a/keyboards/bpiphany/pegasushoof/2015/info.json
+++ b/keyboards/bpiphany/pegasushoof/2015/info.json
@@ -6,7 +6,7 @@
"scroll_lock": "C5",
"on_state": 0
},
- "community_layouts": ["tkl_ansi"],
+ "community_layouts": ["tkl_ansi", "tkl_jis"],
"layouts": {
"LAYOUT": {
"layout": [
diff --git a/keyboards/bschwind/key_ripper/info.json b/keyboards/bschwind/key_ripper/info.json
new file mode 100644
index 000000000000..ee30687d4f18
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/info.json
@@ -0,0 +1,112 @@
+{
+ "manufacturer": "bschwind",
+ "keyboard_name": "key-ripper",
+ "maintainer": "bschwind",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP16", "GP17", "GP18", "GP9", "GP10", "GP19", "GP11", "GP12", "GP13", "GP14", "GP20", "GP22", "GP23"],
+ "rows": ["GP26", "GP25", "GP27", "GP28", "GP15", "GP24"]
+ },
+ "processor": "RP2040",
+ "url": "https://github.com/bschwind/key-ripper",
+ "usb": {
+ "device_version": "0.2.0",
+ "pid": "0x0001",
+ "vid": "0xB501"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "ESC", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.875, "y": 0 },
+ { "label": "F2", "matrix": [0, 2], "x": 2.875, "y": 0 },
+ { "label": "F3", "matrix": [0, 3], "x": 3.875, "y": 0 },
+ { "label": "F4", "matrix": [0, 4], "x": 4.875, "y": 0 },
+ { "label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "F6", "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "label": "F7", "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "label": "F8", "matrix": [0, 9], "x": 9.5, "y": 0 },
+ { "label": "F9", "matrix": [0, 10], "x": 11, "y": 0 },
+ { "label": "F10", "matrix": [0, 11], "x": 12, "y": 0 },
+ { "label": "F11", "matrix": [0, 12], "x": 13, "y": 0 },
+ { "label": "F12", "matrix": [0, 13], "x": 14, "y": 0 },
+
+ { "label": "`", "matrix": [1, 0], "x": 0, "y": 1 },
+ { "label": "1", "matrix": [1, 1], "x": 1, "y": 1 },
+ { "label": "2", "matrix": [1, 2], "x": 2, "y": 1 },
+ { "label": "3", "matrix": [1, 3], "x": 3, "y": 1 },
+ { "label": "4", "matrix": [1, 4], "x": 4, "y": 1 },
+ { "label": "5", "matrix": [1, 5], "x": 5, "y": 1 },
+ { "label": "6", "matrix": [1, 6], "x": 6, "y": 1 },
+ { "label": "7", "matrix": [1, 7], "x": 7, "y": 1 },
+ { "label": "8", "matrix": [1, 8], "x": 8, "y": 1 },
+ { "label": "9", "matrix": [1, 9], "x": 9, "y": 1 },
+ { "label": "0", "matrix": [1, 10], "x": 10, "y": 1 },
+ { "label": "-", "matrix": [1, 11], "x": 11, "y": 1 },
+ { "label": "=", "matrix": [1, 12], "x": 12, "y": 1 },
+ { "label": "BACKSPACE", "matrix": [1, 13], "x": 13, "y": 1, "w": 2.00 },
+
+ { "label": "TAB", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.5 },
+ { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2 },
+ { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2 },
+ { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2 },
+ { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2 },
+ { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2 },
+ { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2 },
+ { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2 },
+ { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2 },
+ { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2 },
+ { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2 },
+ { "label": "[", "matrix": [2, 11], "x": 11.5, "y": 2 },
+ { "label": "]", "matrix": [2, 12], "x": 12.5, "y": 2 },
+ { "label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5 },
+
+ { "label": "CAPS", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.75 },
+ { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3 },
+ { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3 },
+ { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3 },
+ { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3 },
+ { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3 },
+ { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3 },
+ { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3 },
+ { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3 },
+ { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3 },
+ { "label": ";", "matrix": [3, 10], "x": 10.75, "y": 3 },
+ { "label": "'", "matrix": [3, 11], "x": 11.75, "y": 3 },
+ { "label": "RETURN", "matrix": [3, 12], "x": 12.75, "y": 3, "w": 2.25 },
+
+ { "label": "SHIFT", "matrix": [4, 0], "x": 0, "y": 4, "w": 2.25 },
+ { "label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4 },
+ { "label": "X", "matrix": [4, 3], "x": 3.25, "y": 4 },
+ { "label": "C", "matrix": [4, 4], "x": 4.25, "y": 4 },
+ { "label": "V", "matrix": [4, 5], "x": 5.25, "y": 4 },
+ { "label": "B", "matrix": [4, 6], "x": 6.25, "y": 4 },
+ { "label": "N", "matrix": [4, 7], "x": 7.25, "y": 4 },
+ { "label": "M", "matrix": [4, 8], "x": 8.25, "y": 4 },
+ { "label": ",", "matrix": [4, 9], "x": 9.25, "y": 4 },
+ { "label": ".", "matrix": [4, 10], "x": 10.25, "y": 4 },
+ { "label": "/", "matrix": [4, 11], "x": 11.25, "y": 4 },
+ { "label": "UP", "matrix": [4, 12], "x": 13, "y": 4 },
+
+ { "label": "FN", "matrix": [5, 0], "x": 0, "y": 5 },
+ { "label": "CTRL", "matrix": [5, 1], "x": 1, "y": 5 },
+ { "label": "ALT", "matrix": [5, 2], "x": 2, "y": 5 },
+ { "label": "GUI", "matrix": [5, 3], "x": 3, "y": 5, "w": 1.25 },
+ { "label": "SPACE", "matrix": [5, 6], "x": 4.25, "y": 5, "w": 6.25 },
+ { "label": "GUI", "matrix": [5, 10], "x": 10.5, "y": 5, "w": 1.25 },
+ { "label": "LEFT", "matrix": [5, 11], "x": 12, "y": 5 },
+ { "label": "DOWN", "matrix": [5, 12], "x": 13, "y": 5 },
+ { "label": "RIGHT", "matrix": [5, 13], "x": 14, "y": 5 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/bschwind/key_ripper/keymaps/default/keymap.c b/keyboards/bschwind/key_ripper/keymaps/default/keymap.c
new file mode 100644
index 000000000000..3a8107ad67ac
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2023 bschwind
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP,
+ MO(1), KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/bschwind/key_ripper/keymaps/via/keymap.c b/keyboards/bschwind/key_ripper/keymaps/via/keymap.c
new file mode 100644
index 000000000000..3a8107ad67ac
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2023 bschwind
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP,
+ MO(1), KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/bschwind/key_ripper/keymaps/via/rules.mk b/keyboards/bschwind/key_ripper/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/bschwind/key_ripper/readme.md b/keyboards/bschwind/key_ripper/readme.md
new file mode 100644
index 000000000000..84306af968a5
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/readme.md
@@ -0,0 +1,29 @@
+# key_ripper
+
+A 75-key keyboard which has a similar layout to a MacBook keyboard, and sacrifices
+the right shift key to keep a compact size. Based on the RP2040 microcontroller.
+
+![key_ripper](https://imgur.com/pL26kVSh.png)
+![key_ripper](https://imgur.com/FnvZREyh.png)
+![key_ripper](https://imgur.com/xe8wImMh.png)
+
+* Keyboard Maintainer: [Brian Schwind](https://github.com/bschwind)
+* Hardware Supported: The key-ripper PCB
+* Hardware Availability: You can find production files in the [releases](https://github.com/bschwind/key-ripper/releases) page used for ordering from JLCPCB.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bschwind/key_ripper:default
+
+Flashing example for this keyboard:
+
+ make bschwind/key_ripper:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the Escape key and plug in the keyboard
+* **Physical reset button**: Hold down the USB BOOT button on the PCB, and briefly press the RESET button on the PCB.
diff --git a/keyboards/bschwind/key_ripper/rules.mk b/keyboards/bschwind/key_ripper/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/bschwind/key_ripper/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/butterkeebs/pocketpad/info.json b/keyboards/butterkeebs/pocketpad/info.json
index db5258283043..0b42d5fb17ec 100644
--- a/keyboards/butterkeebs/pocketpad/info.json
+++ b/keyboards/butterkeebs/pocketpad/info.json
@@ -25,28 +25,28 @@
"layouts": {
"LAYOUT": {
"layout": [
- {"x": 0, "y": 0, "matrix": [0, 0]},
- {"x": 1, "y": 0, "matrix": [0, 1]},
- {"x": 2, "y": 0, "matrix": [0, 2]},
- {"x": 3, "y": 0, "matrix": [0, 3]},
+ {"x": 1, "y": 0, "matrix": [0, 0]},
+ {"x": 2, "y": 0, "matrix": [0, 1]},
+ {"x": 3, "y": 0, "matrix": [0, 2]},
+ {"x": 4, "y": 0, "matrix": [0, 3]},
- {"x": 0, "y": 1, "matrix": [1, 0]},
- {"x": 1, "y": 1, "matrix": [1, 1]},
- {"x": 2, "y": 1, "matrix": [1, 2]},
- {"x": 3, "y": 1, "matrix": [1, 3]},
+ {"x": 1, "y": 1, "matrix": [1, 0]},
+ {"x": 2, "y": 1, "matrix": [1, 1]},
+ {"x": 3, "y": 1, "matrix": [1, 2]},
+ {"x": 4, "y": 1.5, "matrix": [1, 3]},
- {"x": 0, "y": 2, "matrix": [2, 0]},
- {"x": 1, "y": 2, "matrix": [2, 1]},
- {"x": 2, "y": 2, "matrix": [2, 2]},
- {"x": 3, "y": 2, "matrix": [2, 3]},
+ {"x": 1, "y": 2, "matrix": [2, 0]},
+ {"x": 2, "y": 2, "matrix": [2, 1]},
+ {"x": 3, "y": 2, "matrix": [2, 2]},
+ {"x": 4, "y": 3.5, "matrix": [2, 3]},
- {"x": 0, "y": 3, "matrix": [3, 0]},
- {"x": 1, "y": 3, "matrix": [3, 1]},
- {"x": 2, "y": 3, "matrix": [3, 2]},
- {"x": 3, "y": 3, "matrix": [3, 3]},
+ {"x": 1, "y": 3, "matrix": [3, 0]},
+ {"x": 2, "y": 3, "matrix": [3, 1]},
+ {"x": 3, "y": 3, "matrix": [3, 2]},
+ {"x": 3, "y": 4, "matrix": [3, 3]},
{"x": 0, "y": 4, "matrix": [4, 0]},
- {"x": 1, "y": 4, "matrix": [4, 1]}
+ {"x": 1.5, "y": 4, "matrix": [4, 1]}
]
}
}
diff --git a/keyboards/cannonkeys/bastion60/config.h b/keyboards/cannonkeys/bastion60/config.h
new file mode 100644
index 000000000000..206ca9cf564f
--- /dev/null
+++ b/keyboards/cannonkeys/bastion60/config.h
@@ -0,0 +1,14 @@
+// Copyright 2023 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
+
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A
+
+#define WS2812_PIO_USE_PIO1
diff --git a/keyboards/cannonkeys/bastion60/halconf.h b/keyboards/cannonkeys/bastion60/halconf.h
new file mode 100644
index 000000000000..8c1197b84c63
--- /dev/null
+++ b/keyboards/cannonkeys/bastion60/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/cannonkeys/bastion60/info.json b/keyboards/cannonkeys/bastion60/info.json
new file mode 100644
index 000000000000..b6ecc9c3b3fa
--- /dev/null
+++ b/keyboards/cannonkeys/bastion60/info.json
@@ -0,0 +1,322 @@
+{
+ "manufacturer": "CannonKeys",
+ "keyboard_name": "Bastion60",
+ "maintainer": "awkannan",
+ "backlight": {
+ "breathing": true,
+ "breathing_period": 5,
+ "levels": 15,
+ "pin": "GP22"
+ },
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "indicators": {
+ "caps_lock": "GP29",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["GP28", "GP8", "GP14", "GP13", "GP12", "GP11", "GP10", "GP9", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1"],
+ "rows": ["GP26", "GP27", "GP15", "GP16", "GP17"]
+ },
+ "processor": "RP2040",
+ "rgblight": {
+ "animations": {
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "hue_steps": 17,
+ "led_count": 20
+ },
+ "url": "https://cannonkeys.com",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0020",
+ "vid": "0xCA04"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP7"
+ },
+ "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_iso_tsangan"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [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": [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": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 12], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [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": [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": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"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": [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": 2.75},
+ {"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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "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": [2, 12], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [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": [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": [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, 5], "x": 3.75, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 6, "y": 4, "w": 1.25},
+ {"matrix": [4, 9], "x": 7.25, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cannonkeys/bastion60/keymaps/default/keymap.c b/keyboards/cannonkeys/bastion60/keymaps/default/keymap.c
new file mode 100644
index 000000000000..9dbc210e199c
--- /dev/null
+++ b/keyboards/cannonkeys/bastion60/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_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_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_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL
+ ),
+
+ [_FN1] = LAYOUT_all(
+ QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, _______, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/cannonkeys/bastion60/keymaps/via/keymap.c b/keyboards/cannonkeys/bastion60/keymaps/via/keymap.c
new file mode 100644
index 000000000000..9dbc210e199c
--- /dev/null
+++ b/keyboards/cannonkeys/bastion60/keymaps/via/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_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_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_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL
+ ),
+
+ [_FN1] = LAYOUT_all(
+ QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, _______, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/cannonkeys/bastion60/keymaps/via/rules.mk b/keyboards/cannonkeys/bastion60/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/cannonkeys/bastion60/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/bastion60/mcuconf.h b/keyboards/cannonkeys/bastion60/mcuconf.h
new file mode 100644
index 000000000000..49015d4dbf56
--- /dev/null
+++ b/keyboards/cannonkeys/bastion60/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2022 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_PWM_USE_PWM3
+#define RP_PWM_USE_PWM3 TRUE
diff --git a/keyboards/cannonkeys/bastion60/readme.md b/keyboards/cannonkeys/bastion60/readme.md
new file mode 100644
index 000000000000..1fee68cdc841
--- /dev/null
+++ b/keyboards/cannonkeys/bastion60/readme.md
@@ -0,0 +1,26 @@
+# Bastion60 PCB
+
+Bastion60 PCB from CannonKeys
+
+* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
+* Hardware Supported: RP2040
+* Hardware Availability: [CannonKeys](https://cannonkeys.com)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cannonkeys/bastion60:default
+
+Flashing example for this keyboard:
+
+ make cannonkeys/bastion60:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Hold the "BOOTMODE" button on the back of the PCB and briefly press the "RESET" button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cannonkeys/bastion60/rules.mk b/keyboards/cannonkeys/bastion60/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/cannonkeys/bastion60/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/cannonkeys/bastion65/config.h b/keyboards/cannonkeys/bastion65/config.h
new file mode 100644
index 000000000000..0b93d1434be9
--- /dev/null
+++ b/keyboards/cannonkeys/bastion65/config.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2015 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
+
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A
+
+#define WS2812_PIO_USE_PIO1
diff --git a/keyboards/cannonkeys/bastion65/halconf.h b/keyboards/cannonkeys/bastion65/halconf.h
new file mode 100644
index 000000000000..8c1197b84c63
--- /dev/null
+++ b/keyboards/cannonkeys/bastion65/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/cannonkeys/bastion65/info.json b/keyboards/cannonkeys/bastion65/info.json
new file mode 100644
index 000000000000..83b4f1081775
--- /dev/null
+++ b/keyboards/cannonkeys/bastion65/info.json
@@ -0,0 +1,129 @@
+{
+ "manufacturer": "CannonKeys",
+ "keyboard_name": "Bastion65",
+ "maintainer": "awkannan",
+ "backlight": {
+ "breathing": true,
+ "breathing_period": 5,
+ "levels": 15,
+ "pin": "GP22"
+ },
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "indicators": {
+ "caps_lock": "GP29",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["GP28", "GP8", "GP14", "GP13", "GP12", "GP11", "GP10", "GP9", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0"],
+ "rows": ["GP26", "GP27", "GP15", "GP16", "GP17"]
+ },
+ "processor": "RP2040",
+ "rgblight": {
+ "animations": {
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "hue_steps": 17,
+ "led_count": 20
+ },
+ "url": "https://cannonkeys.com",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0021",
+ "vid": "0xCA04"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "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": [2, 12], "x": 14, "y": 0},
+ {"matrix": [0, 14], "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, 14], "x": 15, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 6, "y": 4, "w": 1.25},
+ {"matrix": [4, 9], "x": 7.25, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cannonkeys/bastion65/keymaps/default/keymap.c b/keyboards/cannonkeys/bastion65/keymaps/default/keymap.c
new file mode 100644
index 000000000000..6ee4a5f71edd
--- /dev/null
+++ b/keyboards/cannonkeys/bastion65/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(_FN1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [_FN1] = LAYOUT(
+ QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, _______, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/cannonkeys/bastion65/keymaps/via/keymap.c b/keyboards/cannonkeys/bastion65/keymaps/via/keymap.c
new file mode 100644
index 000000000000..4ce1aebed34b
--- /dev/null
+++ b/keyboards/cannonkeys/bastion65/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(_FN1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [_FN1] = LAYOUT(
+ QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, _______, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+
+};
diff --git a/keyboards/cannonkeys/bastion65/keymaps/via/rules.mk b/keyboards/cannonkeys/bastion65/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/cannonkeys/bastion65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/bastion65/mcuconf.h b/keyboards/cannonkeys/bastion65/mcuconf.h
new file mode 100644
index 000000000000..49015d4dbf56
--- /dev/null
+++ b/keyboards/cannonkeys/bastion65/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2022 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_PWM_USE_PWM3
+#define RP_PWM_USE_PWM3 TRUE
diff --git a/keyboards/cannonkeys/bastion65/readme.md b/keyboards/cannonkeys/bastion65/readme.md
new file mode 100644
index 000000000000..da2d79b3bc1f
--- /dev/null
+++ b/keyboards/cannonkeys/bastion65/readme.md
@@ -0,0 +1,26 @@
+# Bastion65 PCB
+
+Bastion65 PCB from CannonKeys
+
+* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
+* Hardware Supported: RP2040
+* Hardware Availability: [CannonKeys](https://cannonkeys.com)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cannonkeys/bastion65:default
+
+Flashing example for this keyboard:
+
+ make cannonkeys/bastion65:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Hold the "BOOTMODE" button on the back of the PCB and briefly press the "RESET" button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cannonkeys/bastion65/rules.mk b/keyboards/cannonkeys/bastion65/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/cannonkeys/bastion65/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/cannonkeys/bastion75/config.h b/keyboards/cannonkeys/bastion75/config.h
new file mode 100644
index 000000000000..0b93d1434be9
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/config.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2015 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
+
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A
+
+#define WS2812_PIO_USE_PIO1
diff --git a/keyboards/cannonkeys/bastion75/halconf.h b/keyboards/cannonkeys/bastion75/halconf.h
new file mode 100644
index 000000000000..8c1197b84c63
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/cannonkeys/bastion75/info.json b/keyboards/cannonkeys/bastion75/info.json
new file mode 100644
index 000000000000..64243257aec4
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/info.json
@@ -0,0 +1,143 @@
+{
+ "keyboard_name": "Bastion75",
+ "maintainer": "awkannan",
+ "manufacturer": "CannonKeys",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "vid": "0xCA04",
+ "pid": "0x0022",
+ "device_version": "0.0.1"
+ },
+ "url": "https://cannonkeys.com",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP28", "GP8", "GP14", "GP13", "GP12", "GP11", "GP10", "GP9", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0"],
+ "rows": ["GP25", "GP26", "GP27", "GP15", "GP16", "GP17"]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true
+ },
+ "indicators": {
+ "caps_lock": "GP29",
+ "on_state": 0
+ },
+ "backlight": {
+ "breathing": true,
+ "breathing_period": 5,
+ "levels": 15,
+ "pin": "GP22"
+ },
+ "ws2812": {
+ "pin": "GP7",
+ "driver": "vendor"
+ },
+ "rgblight": {
+ "led_count": 20,
+ "hue_steps": 17,
+ "animations": {
+ "static_gradient": true,
+ "twinkle": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1.5, "y": 0 },
+ { "matrix": [0, 2], "x": 2.5, "y": 0 },
+ { "matrix": [0, 3], "x": 3.5, "y": 0 },
+ { "matrix": [0, 4], "x": 4.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10.5, "y": 0 },
+ { "matrix": [0, 11], "x": 11.5, "y": 0 },
+ { "matrix": [0, 12], "x": 12.5, "y": 0 },
+ { "matrix": [0, 13], "x": 13.5, "y": 0 },
+ { "matrix": [0, 14], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [1, 13], "x": 13, "y": 1.25 },
+ { "matrix": [3, 12], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [3, 14], "x": 15, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 14], "x": 15, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 5], "w": 2.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 6], "w": 1.25, "x": 6, "y": 5.25 },
+ { "matrix": [5, 9], "w": 2.75, "x": 7.25, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "x": 13, "y": 5.25 },
+ { "matrix": [5, 13], "x": 14, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15, "y": 5.25 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/cannonkeys/bastion75/keymaps/default/keymap.c b/keyboards/cannonkeys/bastion75/keymaps/default/keymap.c
new file mode 100644
index 000000000000..9b3d00ade259
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/keymaps/default/keymap.c
@@ -0,0 +1,47 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPLY,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(_FN1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [_FN1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, _______, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/cannonkeys/bastion75/keymaps/via/keymap.c b/keyboards/cannonkeys/bastion75/keymaps/via/keymap.c
new file mode 100644
index 000000000000..a4c9bf120c43
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPLY,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(_FN1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [_FN1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, _______, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+
+};
diff --git a/keyboards/cannonkeys/bastion75/keymaps/via/rules.mk b/keyboards/cannonkeys/bastion75/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/bastion75/mcuconf.h b/keyboards/cannonkeys/bastion75/mcuconf.h
new file mode 100644
index 000000000000..49015d4dbf56
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2022 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_PWM_USE_PWM3
+#define RP_PWM_USE_PWM3 TRUE
diff --git a/keyboards/cannonkeys/bastion75/readme.md b/keyboards/cannonkeys/bastion75/readme.md
new file mode 100644
index 000000000000..06674d847bbd
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/readme.md
@@ -0,0 +1,26 @@
+# Bastion75 PCB
+
+Bastion75 PCB from CannonKeys
+
+* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
+* Hardware Supported: RP2040
+* Hardware Availability: [CannonKeys](https://cannonkeys.com)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cannonkeys/bastion75:default
+
+Flashing example for this keyboard:
+
+ make cannonkeys/bastion75:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Hold the "BOOTMODE" button on the back of the PCB and briefly press the "RESET" button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cannonkeys/bastion75/rules.mk b/keyboards/cannonkeys/bastion75/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/cannonkeys/bastion75/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/cannonkeys/bastiontkl/config.h b/keyboards/cannonkeys/bastiontkl/config.h
new file mode 100644
index 000000000000..8b8e7f9aa557
--- /dev/null
+++ b/keyboards/cannonkeys/bastiontkl/config.h
@@ -0,0 +1,10 @@
+// Copyright 2023 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
+
diff --git a/keyboards/cannonkeys/bastiontkl/info.json b/keyboards/cannonkeys/bastiontkl/info.json
new file mode 100644
index 000000000000..d06f134fec3c
--- /dev/null
+++ b/keyboards/cannonkeys/bastiontkl/info.json
@@ -0,0 +1,405 @@
+{
+ "manufacturer": "CannonKeys",
+ "keyboard_name": "BastionTKL",
+ "maintainer": "awkannan",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "GP27",
+ "on_state": 0,
+ "scroll_lock": "GP1"
+ },
+ "matrix_pins": {
+ "cols": ["GP14", "GP13", "GP12", "GP17", "GP18", "GP19", "GP20", "GP21", "GP26", "GP25", "GP24", "GP23", "GP22", "GP29", "GP16", "GP5", "GP4"],
+ "rows": ["GP0", "GP2", "GP3", "GP28", "GP10", "GP11"]
+ },
+ "processor": "RP2040",
+ "url": "https://cannonkeys.com",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0023",
+ "vid": "0xCA04"
+ },
+ "community_layouts": ["tkl_ansi", "tkl_iso", "tkl_f13_ansi_tsangan_split_bs_rshift"],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.75, "y": 0},
+ {"matrix": [0, 10], "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [3, 12], "x": 14, "y": 1.25},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.25},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.75, "y": 0},
+ {"matrix": [0, 10], "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [3, 12], "x": 14, "y": 1.25},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.25},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [2, 13], "x": 12.75, "y": 3.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cannonkeys/bastiontkl/keymaps/default/keymap.c b/keyboards/cannonkeys/bastiontkl/keymaps/default/keymap.c
new file mode 100644
index 000000000000..6daafc751f2b
--- /dev/null
+++ b/keyboards/cannonkeys/bastiontkl/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+// Copyright 2023 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BASE] = 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_MPLY, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_FN1] = LAYOUT_all(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_MPLY, KC_MNXT, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/cannonkeys/bastiontkl/keymaps/via/keymap.c b/keyboards/cannonkeys/bastiontkl/keymaps/via/keymap.c
new file mode 100644
index 000000000000..0d57c828c2b3
--- /dev/null
+++ b/keyboards/cannonkeys/bastiontkl/keymaps/via/keymap.c
@@ -0,0 +1,28 @@
+// Copyright 2023 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BASE] = 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_MPLY, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_FN1] = LAYOUT_all(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_MPLY, KC_MNXT, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+
+};
diff --git a/keyboards/cannonkeys/bastiontkl/keymaps/via/rules.mk b/keyboards/cannonkeys/bastiontkl/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/cannonkeys/bastiontkl/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/bastiontkl/readme.md b/keyboards/cannonkeys/bastiontkl/readme.md
new file mode 100644
index 000000000000..c28083f53e2a
--- /dev/null
+++ b/keyboards/cannonkeys/bastiontkl/readme.md
@@ -0,0 +1,26 @@
+# BastionTKL PCB
+
+BastionTKL PCB from CannonKeys
+
+* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
+* Hardware Supported: RP2040
+* Hardware Availability: [CannonKeys](https://cannonkeys.com)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cannonkeys/bastiontkl:default
+
+Flashing example for this keyboard:
+
+ make cannonkeys/bastiontkl:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Hold the "BOOTMODE" button on the back of the PCB and briefly press the "RESET" button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cannonkeys/bastiontkl/rules.mk b/keyboards/cannonkeys/bastiontkl/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/cannonkeys/bastiontkl/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/cannonkeys/leviatan/info.json b/keyboards/cannonkeys/leviatan/info.json
new file mode 100644
index 000000000000..7e8d6c6fdd12
--- /dev/null
+++ b/keyboards/cannonkeys/leviatan/info.json
@@ -0,0 +1,311 @@
+{
+ "manufacturer": "CannonKeys",
+ "url": "https://cannonkeys.com",
+ "maintainer": "awkannan",
+ "keyboard_name": "Leviatan",
+ "usb": {
+ "vid": "0xCA04",
+ "pid": "0x0024",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B11", "B10", "B2", "A9", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "C13", "C14", "C15"],
+ "rows": ["B1", "B0", "A7", "A5", "A4"]
+ },
+ "diode_direction": "COL2ROW",
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu",
+ "community_layouts": ["60_ansi", "60_tsangan_hhkb", "60_iso"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"x": 0, "y": 0, "matrix": [0, 0]},
+ {"x": 1, "y": 0, "matrix": [0, 1]},
+ {"x": 2, "y": 0, "matrix": [0, 2]},
+ {"x": 3, "y": 0, "matrix": [0, 3]},
+ {"x": 4, "y": 0, "matrix": [0, 4]},
+ {"x": 5, "y": 0, "matrix": [0, 5]},
+ {"x": 6, "y": 0, "matrix": [0, 6]},
+ {"x": 7, "y": 0, "matrix": [0, 7]},
+ {"x": 8, "y": 0, "matrix": [0, 8]},
+ {"x": 9, "y": 0, "matrix": [0, 9]},
+ {"x": 10, "y": 0, "matrix": [0, 10]},
+ {"x": 11, "y": 0, "matrix": [0, 11]},
+ {"x": 12, "y": 0, "matrix": [0, 12]},
+ {"x": 13, "y": 0, "w": 2, "matrix": [0, 13]},
+
+ {"x": 0, "y": 1, "w": 1.5, "matrix": [1, 0]},
+ {"x": 1.5, "y": 1, "matrix": [1, 1]},
+ {"x": 2.5, "y": 1, "matrix": [1, 2]},
+ {"x": 3.5, "y": 1, "matrix": [1, 3]},
+ {"x": 4.5, "y": 1, "matrix": [1, 4]},
+ {"x": 5.5, "y": 1, "matrix": [1, 5]},
+ {"x": 6.5, "y": 1, "matrix": [1, 6]},
+ {"x": 7.5, "y": 1, "matrix": [1, 7]},
+ {"x": 8.5, "y": 1, "matrix": [1, 8]},
+ {"x": 9.5, "y": 1, "matrix": [1, 9]},
+ {"x": 10.5, "y": 1, "matrix": [1, 10]},
+ {"x": 11.5, "y": 1, "matrix": [1, 11]},
+ {"x": 12.5, "y": 1, "matrix": [1, 12]},
+ {"x": 13.5, "y": 1, "w": 1.5, "matrix": [1, 14]},
+
+ {"x": 0, "y": 2, "w": 1.75, "matrix": [2, 0]},
+ {"x": 1.75, "y": 2, "matrix": [2, 1]},
+ {"x": 2.75, "y": 2, "matrix": [2, 2]},
+ {"x": 3.75, "y": 2, "matrix": [2, 3]},
+ {"x": 4.75, "y": 2, "matrix": [2, 4]},
+ {"x": 5.75, "y": 2, "matrix": [2, 5]},
+ {"x": 6.75, "y": 2, "matrix": [2, 6]},
+ {"x": 7.75, "y": 2, "matrix": [2, 7]},
+ {"x": 8.75, "y": 2, "matrix": [2, 8]},
+ {"x": 9.75, "y": 2, "matrix": [2, 9]},
+ {"x": 10.75, "y": 2, "matrix": [2, 10]},
+ {"x": 11.75, "y": 2, "matrix": [2, 11]},
+ {"x": 12.75, "y": 2, "w": 2.25, "matrix": [2, 14]},
+
+ {"x": 0, "y": 3, "w": 2.25, "matrix": [3, 0]},
+ {"x": 2.25, "y": 3, "matrix": [3, 2]},
+ {"x": 3.25, "y": 3, "matrix": [3, 3]},
+ {"x": 4.25, "y": 3, "matrix": [3, 4]},
+ {"x": 5.25, "y": 3, "matrix": [3, 5]},
+ {"x": 6.25, "y": 3, "matrix": [3, 6]},
+ {"x": 7.25, "y": 3, "matrix": [3, 7]},
+ {"x": 8.25, "y": 3, "matrix": [3, 8]},
+ {"x": 9.25, "y": 3, "matrix": [3, 9]},
+ {"x": 10.25, "y": 3, "matrix": [3, 10]},
+ {"x": 11.25, "y": 3, "matrix": [3, 11]},
+ {"x": 12.25, "y": 3, "w": 2.75, "matrix": [3, 12]},
+
+ {"x": 0, "y": 4, "w": 1.25, "matrix": [4, 0]},
+ {"x": 1.25, "y": 4, "w": 1.25, "matrix": [4, 1]},
+ {"x": 2.5, "y": 4, "w": 1.25, "matrix": [4, 2]},
+ {"x": 3.75, "y": 4, "w": 6.25, "matrix": [4, 6]},
+ {"x": 10, "y": 4, "w": 1.25, "matrix": [4, 10]},
+ {"x": 11.25, "y": 4, "w": 1.25, "matrix": [4, 11]},
+ {"x": 12.5, "y": 4, "w": 1.25, "matrix": [4, 12]},
+ {"x": 13.75, "y": 4, "w": 1.25, "matrix": [4, 14]}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"x": 0, "y": 0, "matrix": [0, 0]},
+ {"x": 1, "y": 0, "matrix": [0, 1]},
+ {"x": 2, "y": 0, "matrix": [0, 2]},
+ {"x": 3, "y": 0, "matrix": [0, 3]},
+ {"x": 4, "y": 0, "matrix": [0, 4]},
+ {"x": 5, "y": 0, "matrix": [0, 5]},
+ {"x": 6, "y": 0, "matrix": [0, 6]},
+ {"x": 7, "y": 0, "matrix": [0, 7]},
+ {"x": 8, "y": 0, "matrix": [0, 8]},
+ {"x": 9, "y": 0, "matrix": [0, 9]},
+ {"x": 10, "y": 0, "matrix": [0, 10]},
+ {"x": 11, "y": 0, "matrix": [0, 11]},
+ {"x": 12, "y": 0, "matrix": [0, 12]},
+ {"x": 13, "y": 0, "matrix": [0, 13]},
+ {"x": 14, "y": 0, "matrix": [0, 14]},
+
+ {"x": 0, "y": 1, "w": 1.5, "matrix": [1, 0]},
+ {"x": 1.5, "y": 1, "matrix": [1, 1]},
+ {"x": 2.5, "y": 1, "matrix": [1, 2]},
+ {"x": 3.5, "y": 1, "matrix": [1, 3]},
+ {"x": 4.5, "y": 1, "matrix": [1, 4]},
+ {"x": 5.5, "y": 1, "matrix": [1, 5]},
+ {"x": 6.5, "y": 1, "matrix": [1, 6]},
+ {"x": 7.5, "y": 1, "matrix": [1, 7]},
+ {"x": 8.5, "y": 1, "matrix": [1, 8]},
+ {"x": 9.5, "y": 1, "matrix": [1, 9]},
+ {"x": 10.5, "y": 1, "matrix": [1, 10]},
+ {"x": 11.5, "y": 1, "matrix": [1, 11]},
+ {"x": 12.5, "y": 1, "matrix": [1, 12]},
+ {"x": 13.5, "y": 1, "w": 1.5, "matrix": [1, 14]},
+
+ {"x": 0, "y": 2, "w": 1.75, "matrix": [2, 0]},
+ {"x": 1.75, "y": 2, "matrix": [2, 1]},
+ {"x": 2.75, "y": 2, "matrix": [2, 2]},
+ {"x": 3.75, "y": 2, "matrix": [2, 3]},
+ {"x": 4.75, "y": 2, "matrix": [2, 4]},
+ {"x": 5.75, "y": 2, "matrix": [2, 5]},
+ {"x": 6.75, "y": 2, "matrix": [2, 6]},
+ {"x": 7.75, "y": 2, "matrix": [2, 7]},
+ {"x": 8.75, "y": 2, "matrix": [2, 8]},
+ {"x": 9.75, "y": 2, "matrix": [2, 9]},
+ {"x": 10.75, "y": 2, "matrix": [2, 10]},
+ {"x": 11.75, "y": 2, "matrix": [2, 11]},
+ {"x": 12.75, "y": 2, "w": 2.25, "matrix": [2, 14]},
+
+ {"x": 0, "y": 3, "w": 2.25, "matrix": [3, 0]},
+ {"x": 2.25, "y": 3, "matrix": [3, 2]},
+ {"x": 3.25, "y": 3, "matrix": [3, 3]},
+ {"x": 4.25, "y": 3, "matrix": [3, 4]},
+ {"x": 5.25, "y": 3, "matrix": [3, 5]},
+ {"x": 6.25, "y": 3, "matrix": [3, 6]},
+ {"x": 7.25, "y": 3, "matrix": [3, 7]},
+ {"x": 8.25, "y": 3, "matrix": [3, 8]},
+ {"x": 9.25, "y": 3, "matrix": [3, 9]},
+ {"x": 10.25, "y": 3, "matrix": [3, 10]},
+ {"x": 11.25, "y": 3, "matrix": [3, 11]},
+ {"x": 12.25, "y": 3, "w": 1.75, "matrix": [3, 12]},
+ {"x": 14, "y": 3, "matrix": [3, 14]},
+
+ {"x": 0, "y": 4, "w": 1.5, "matrix": [4, 0]},
+ {"x": 1.5, "y": 4, "matrix": [4, 1]},
+ {"x": 2.5, "y": 4, "w": 1.5, "matrix": [4, 2]},
+ {"x": 4, "y": 4, "w": 7, "matrix": [4, 6]},
+ {"x": 11, "y": 4, "w": 1.5, "matrix": [4, 11]},
+ {"x": 12.5, "y": 4, "matrix": [4, 12]},
+ {"x": 13.5, "y": 4, "w": 1.5, "matrix": [4, 14]}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"x": 0, "y": 0, "matrix": [0, 0]},
+ {"x": 1, "y": 0, "matrix": [0, 1]},
+ {"x": 2, "y": 0, "matrix": [0, 2]},
+ {"x": 3, "y": 0, "matrix": [0, 3]},
+ {"x": 4, "y": 0, "matrix": [0, 4]},
+ {"x": 5, "y": 0, "matrix": [0, 5]},
+ {"x": 6, "y": 0, "matrix": [0, 6]},
+ {"x": 7, "y": 0, "matrix": [0, 7]},
+ {"x": 8, "y": 0, "matrix": [0, 8]},
+ {"x": 9, "y": 0, "matrix": [0, 9]},
+ {"x": 10, "y": 0, "matrix": [0, 10]},
+ {"x": 11, "y": 0, "matrix": [0, 11]},
+ {"x": 12, "y": 0, "matrix": [0, 12]},
+ {"x": 13, "y": 0, "w": 2, "matrix": [0, 13]},
+
+ {"x": 0, "y": 1, "w": 1.5, "matrix": [1, 0]},
+ {"x": 1.5, "y": 1, "matrix": [1, 1]},
+ {"x": 2.5, "y": 1, "matrix": [1, 2]},
+ {"x": 3.5, "y": 1, "matrix": [1, 3]},
+ {"x": 4.5, "y": 1, "matrix": [1, 4]},
+ {"x": 5.5, "y": 1, "matrix": [1, 5]},
+ {"x": 6.5, "y": 1, "matrix": [1, 6]},
+ {"x": 7.5, "y": 1, "matrix": [1, 7]},
+ {"x": 8.5, "y": 1, "matrix": [1, 8]},
+ {"x": 9.5, "y": 1, "matrix": [1, 9]},
+ {"x": 10.5, "y": 1, "matrix": [1, 10]},
+ {"x": 11.5, "y": 1, "matrix": [1, 11]},
+ {"x": 12.5, "y": 1, "matrix": [1, 12]},
+
+ {"x": 0, "y": 2, "w": 1.75, "matrix": [2, 0]},
+ {"x": 1.75, "y": 2, "matrix": [2, 1]},
+ {"x": 2.75, "y": 2, "matrix": [2, 2]},
+ {"x": 3.75, "y": 2, "matrix": [2, 3]},
+ {"x": 4.75, "y": 2, "matrix": [2, 4]},
+ {"x": 5.75, "y": 2, "matrix": [2, 5]},
+ {"x": 6.75, "y": 2, "matrix": [2, 6]},
+ {"x": 7.75, "y": 2, "matrix": [2, 7]},
+ {"x": 8.75, "y": 2, "matrix": [2, 8]},
+ {"x": 9.75, "y": 2, "matrix": [2, 9]},
+ {"x": 10.75, "y": 2, "matrix": [2, 10]},
+ {"x": 11.75, "y": 2, "matrix": [2, 11]},
+ {"x": 12.75, "y": 2, "matrix": [2, 12]},
+ {"x": 13.75, "y": 1, "w": 1.25, "h": 2, "matrix": [2, 14]},
+
+ {"x": 0, "y": 3, "w": 1.25, "matrix": [3, 0]},
+ {"x": 1.25, "y": 3, "matrix": [3, 1]},
+ {"x": 2.25, "y": 3, "matrix": [3, 2]},
+ {"x": 3.25, "y": 3, "matrix": [3, 3]},
+ {"x": 4.25, "y": 3, "matrix": [3, 4]},
+ {"x": 5.25, "y": 3, "matrix": [3, 5]},
+ {"x": 6.25, "y": 3, "matrix": [3, 6]},
+ {"x": 7.25, "y": 3, "matrix": [3, 7]},
+ {"x": 8.25, "y": 3, "matrix": [3, 8]},
+ {"x": 9.25, "y": 3, "matrix": [3, 9]},
+ {"x": 10.25, "y": 3, "matrix": [3, 10]},
+ {"x": 11.25, "y": 3, "matrix": [3, 11]},
+ {"x": 12.25, "y": 3, "w": 2.75, "matrix": [3, 12]},
+
+ {"x": 0, "y": 4, "w": 1.25, "matrix": [4, 0]},
+ {"x": 1.25, "y": 4, "w": 1.25, "matrix": [4, 1]},
+ {"x": 2.5, "y": 4, "w": 1.25, "matrix": [4, 2]},
+ {"x": 3.75, "y": 4, "w": 6.25, "matrix": [4, 6]},
+ {"x": 10, "y": 4, "w": 1.25, "matrix": [4, 10]},
+ {"x": 11.25, "y": 4, "w": 1.25, "matrix": [4, 11]},
+ {"x": 12.5, "y": 4, "w": 1.25, "matrix": [4, 12]},
+ {"x": 13.75, "y": 4, "w": 1.25, "matrix": [4, 14]}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"x": 0, "y": 0, "matrix": [0, 0]},
+ {"x": 1, "y": 0, "matrix": [0, 1]},
+ {"x": 2, "y": 0, "matrix": [0, 2]},
+ {"x": 3, "y": 0, "matrix": [0, 3]},
+ {"x": 4, "y": 0, "matrix": [0, 4]},
+ {"x": 5, "y": 0, "matrix": [0, 5]},
+ {"x": 6, "y": 0, "matrix": [0, 6]},
+ {"x": 7, "y": 0, "matrix": [0, 7]},
+ {"x": 8, "y": 0, "matrix": [0, 8]},
+ {"x": 9, "y": 0, "matrix": [0, 9]},
+ {"x": 10, "y": 0, "matrix": [0, 10]},
+ {"x": 11, "y": 0, "matrix": [0, 11]},
+ {"x": 12, "y": 0, "matrix": [0, 12]},
+ {"x": 13, "y": 0, "matrix": [0, 13]},
+ {"x": 14, "y": 0, "matrix": [0, 14]},
+
+ {"x": 0, "y": 1, "w": 1.5, "matrix": [1, 0]},
+ {"x": 1.5, "y": 1, "matrix": [1, 1]},
+ {"x": 2.5, "y": 1, "matrix": [1, 2]},
+ {"x": 3.5, "y": 1, "matrix": [1, 3]},
+ {"x": 4.5, "y": 1, "matrix": [1, 4]},
+ {"x": 5.5, "y": 1, "matrix": [1, 5]},
+ {"x": 6.5, "y": 1, "matrix": [1, 6]},
+ {"x": 7.5, "y": 1, "matrix": [1, 7]},
+ {"x": 8.5, "y": 1, "matrix": [1, 8]},
+ {"x": 9.5, "y": 1, "matrix": [1, 9]},
+ {"x": 10.5, "y": 1, "matrix": [1, 10]},
+ {"x": 11.5, "y": 1, "matrix": [1, 11]},
+ {"x": 12.5, "y": 1, "matrix": [1, 12]},
+ {"x": 13.5, "y": 1, "w": 1.5, "matrix": [1, 14]},
+
+ {"x": 0, "y": 2, "w": 1.75, "matrix": [2, 0]},
+ {"x": 1.75, "y": 2, "matrix": [2, 1]},
+ {"x": 2.75, "y": 2, "matrix": [2, 2]},
+ {"x": 3.75, "y": 2, "matrix": [2, 3]},
+ {"x": 4.75, "y": 2, "matrix": [2, 4]},
+ {"x": 5.75, "y": 2, "matrix": [2, 5]},
+ {"x": 6.75, "y": 2, "matrix": [2, 6]},
+ {"x": 7.75, "y": 2, "matrix": [2, 7]},
+ {"x": 8.75, "y": 2, "matrix": [2, 8]},
+ {"x": 9.75, "y": 2, "matrix": [2, 9]},
+ {"x": 10.75, "y": 2, "matrix": [2, 10]},
+ {"x": 11.75, "y": 2, "matrix": [2, 11]},
+ {"x": 12.75, "y": 2, "matrix": [2, 12]},
+ {"x": 13.75, "y": 2, "w": 1.25, "matrix": [2, 14]},
+
+ {"x": 0, "y": 3, "w": 1.25, "matrix": [3, 0]},
+ {"x": 1.25, "y": 3, "matrix": [3, 1]},
+ {"x": 2.25, "y": 3, "matrix": [3, 2]},
+ {"x": 3.25, "y": 3, "matrix": [3, 3]},
+ {"x": 4.25, "y": 3, "matrix": [3, 4]},
+ {"x": 5.25, "y": 3, "matrix": [3, 5]},
+ {"x": 6.25, "y": 3, "matrix": [3, 6]},
+ {"x": 7.25, "y": 3, "matrix": [3, 7]},
+ {"x": 8.25, "y": 3, "matrix": [3, 8]},
+ {"x": 9.25, "y": 3, "matrix": [3, 9]},
+ {"x": 10.25, "y": 3, "matrix": [3, 10]},
+ {"x": 11.25, "y": 3, "matrix": [3, 11]},
+ {"x": 12.25, "y": 3, "w": 1.75, "matrix": [3, 12]},
+ {"x": 14, "y": 3, "matrix": [3, 14]},
+
+ {"x": 0, "y": 4, "w": 1.25, "matrix": [4, 0]},
+ {"x": 1.25, "y": 4, "w": 1.25, "matrix": [4, 1]},
+ {"x": 2.5, "y": 4, "w": 1.25, "matrix": [4, 2]},
+ {"x": 3.75, "y": 4, "w": 6.25, "matrix": [4, 6]},
+ {"x": 10, "y": 4, "w": 1.25, "matrix": [4, 10]},
+ {"x": 11.25, "y": 4, "w": 1.25, "matrix": [4, 11]},
+ {"x": 12.5, "y": 4, "w": 1.25, "matrix": [4, 12]},
+ {"x": 13.75, "y": 4, "w": 1.25, "matrix": [4, 14]}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cannonkeys/leviatan/keymaps/default/keymap.c b/keyboards/cannonkeys/leviatan/keymaps/default/keymap.c
new file mode 100644
index 000000000000..317eeab093dc
--- /dev/null
+++ b/keyboards/cannonkeys/leviatan/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_60_ansi(
+ 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_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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL
+ ),
+
+ [_FN1] = LAYOUT_60_ansi(
+ QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/cannonkeys/leviatan/keymaps/iso/keymap.c b/keyboards/cannonkeys/leviatan/keymaps/iso/keymap.c
new file mode 100644
index 000000000000..a0cacca0f5ca
--- /dev/null
+++ b/keyboards/cannonkeys/leviatan/keymaps/iso/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_60_iso(
+ 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_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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL
+ ),
+
+ [_FN1] = LAYOUT_60_iso(
+ QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, _______, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/cannonkeys/leviatan/keymaps/tsangan/keymap.c b/keyboards/cannonkeys/leviatan/keymaps/tsangan/keymap.c
new file mode 100644
index 000000000000..d280f72d1ecd
--- /dev/null
+++ b/keyboards/cannonkeys/leviatan/keymaps/tsangan/keymap.c
@@ -0,0 +1,46 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_60_tsangan_hhkb(
+ 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_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_BSPC,
+ 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(_FN1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+
+ [_FN1] = LAYOUT_60_tsangan_hhkb(
+ 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, _______,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/cannonkeys/leviatan/keymaps/via/keymap.c b/keyboards/cannonkeys/leviatan/keymaps/via/keymap.c
new file mode 100644
index 000000000000..b3b684cf198f
--- /dev/null
+++ b/keyboards/cannonkeys/leviatan/keymaps/via/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_all(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL
+ ),
+
+ [_FN1] = 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,
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_BRTG, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_UP, BL_DOWN, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/cannonkeys/leviatan/keymaps/via/rules.mk b/keyboards/cannonkeys/leviatan/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/cannonkeys/leviatan/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/leviatan/readme.md b/keyboards/cannonkeys/leviatan/readme.md
new file mode 100644
index 000000000000..70b90e95516c
--- /dev/null
+++ b/keyboards/cannonkeys/leviatan/readme.md
@@ -0,0 +1,25 @@
+# CannonKeys Leviatan for LaminarDesigns
+
+Leviatan Keyboard
+
+* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
+* Hardware Supported: STM32F072CBT6 (or equivalent)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cannonkeys/leviatan:default
+
+
+Flashing example for this keyboard:
+
+ make cannonkeys/leviatan: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**: Toggle the switch on the back of the pcb to "0" and 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/cannonkeys/leviatan/rules.mk b/keyboards/cannonkeys/leviatan/rules.mk
new file mode 100644
index 000000000000..2a5031cd3205
--- /dev/null
+++ b/keyboards/cannonkeys/leviatan/rules.mk
@@ -0,0 +1,5 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/chosfox/cf81/cf81.c b/keyboards/chosfox/cf81/cf81.c
new file mode 100644
index 000000000000..ab8afd0c636b
--- /dev/null
+++ b/keyboards/chosfox/cf81/cf81.c
@@ -0,0 +1,188 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {1, A_1, B_1, C_1},
+ {1, A_2, B_2, C_2},
+ {1, A_3, B_3, C_3},
+ {1, A_4, B_4, C_4},
+ {1, A_5, B_5, C_5},
+ {1, A_6, B_6, C_6},
+ {1, A_7, B_7, C_7},
+ {1, A_8, B_8, C_8},
+ {1, A_9, B_9, C_9},
+ {1, A_10, B_10, C_10},
+ {1, A_11, B_11, C_11},
+ {1, A_12, B_12, C_12},
+ {1, A_13, B_13, C_13},
+ {1, A_14, B_14, C_14},
+
+ {0, A_1, B_1, C_1},
+ {0, A_2, B_2, C_2},
+ {0, A_3, B_3, C_3},
+ {0, A_4, B_4, C_4},
+ {0, A_5, B_5, C_5},
+ {0, A_6, B_6, C_6},
+ {0, A_7, B_7, C_7},
+ {0, A_8, B_8, C_8},
+ {0, A_9, B_9, C_9},
+ {0, A_10, B_10, C_10},
+ {0, A_11, B_11, C_11},
+ {0, A_12, B_12, C_12},
+ {0, A_13, B_13, C_13},
+ {0, A_14, B_14, C_14},
+ {1, D_1, E_1, F_1},
+
+ {0, D_1, E_1, F_1},
+ {0, D_2, E_2, F_2},
+ {0, D_3, E_3, F_3},
+ {0, D_4, E_4, F_4},
+ {0, D_5, E_5, F_5},
+ {0, D_6, E_6, F_6},
+ {0, D_7, E_7, F_7},
+ {0, D_8, E_8, F_8},
+ {0, D_9, E_9, F_9},
+ {0, D_10, E_10, F_10},
+ {0, D_11, E_11, F_11},
+ {0, D_12, E_12, F_12},
+ {0, D_13, E_13, F_13},
+ {0, D_14, E_14, F_14},
+ {1, D_2, E_2, F_2},
+
+ {0, G_1, H_1, I_1},
+ {0, G_2, H_2, I_2},
+ {0, G_3, H_3, I_3},
+ {0, G_4, H_4, I_4},
+ {0, G_5, H_5, I_5},
+ {0, G_6, H_6, I_6},
+ {0, G_7, H_7, I_7},
+ {0, G_8, H_8, I_8},
+ {0, G_9, H_9, I_9},
+ {0, G_10, H_10, I_10},
+ {0, G_11, H_11, I_11},
+ {0, G_12, H_12, I_12},
+ {0, A_15, B_15, C_15},
+ {0, G_13, H_13, I_13},
+ {1, D_3, E_3, F_3},
+
+ {0, J_1, K_1, L_1},
+ {0, A_16, B_16, C_16},
+ {0, J_2, K_2, L_2},
+ {0, J_3, K_3, L_3},
+ {0, J_4, K_4, L_4},
+ {0, J_5, K_5, L_5},
+ {0, J_6, K_6, L_6},
+ {0, J_7, K_7, L_7},
+ {0, J_8, K_8, L_8},
+ {0, J_9, K_9, L_9},
+ {0, J_10, K_10, L_10},
+ {0, J_11, K_11, L_11},
+ {0, J_12, K_12, L_12},
+ {1, D_7, E_7, F_7},
+
+
+ {0, J_13, K_13, L_13},
+ {0, J_14, K_14, L_14},
+ {0, J_15, K_15, L_15},
+ {0, J_16, K_16, L_16},
+
+ {0, G_14, H_14, I_14},
+ {0, G_15, H_15, I_15},
+ {0, G_16, H_16, I_16},
+
+ {0, D_15, E_15, F_15},
+ {1, D_6, E_6, F_6},
+ {1, D_5, E_5, F_5},
+
+
+ {1, G_1, H_1, I_1},
+ {1, G_2, H_2, I_2},
+ {1, G_3, H_3, I_3},
+ {1, G_4, H_4, I_4},
+ {1, G_5, H_5, I_5},
+ {1, G_6, H_6, I_6},
+ {1, G_7, H_7, I_7},
+ {1, G_8, H_8, I_8},
+ {1, G_9, H_9, I_9},
+ {1, G_10, H_10, I_10},
+ {1, G_11, H_11, I_11},
+
+ {1, J_1, K_1, L_1},
+ {1, J_2, K_2, L_2},
+ {1, J_3, K_3, L_3},
+ {1, J_4, K_4, L_4},
+ {1, J_5, K_5, L_5},
+ {1, J_6, K_6, L_6},
+ {1, J_7, K_7, L_7},
+ {1, J_8, K_8, L_8},
+ {1, J_9, K_9, L_9},
+ {1, J_10, K_10, L_10},
+ {1, J_11, K_11, L_11},
+};
+// clang-format on
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
+ return false;
+ }
+ if (host_keyboard_led_state().caps_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(44, 255, 255, 255);
+ }
+ if (keymap_config.no_gui) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(74, 255, 255, 255);
+ }
+ return true;
+}
+
+#endif
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+ switch (keycode) {
+#ifdef RGB_MATRIX_ENABLE
+ case RGB_TOG:
+ if (record->event.pressed) {
+ switch (rgb_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ rgb_matrix_set_color_all(0, 0, 0);
+ } break;
+ default: {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ } break;
+ }
+ }
+ if (!rgb_matrix_is_enabled()) {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ rgb_matrix_enable();
+ }
+ return false;
+#endif
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/chosfox/cf81/config.h b/keyboards/chosfox/cf81/config.h
new file mode 100644
index 000000000000..b1ea8bba2003
--- /dev/null
+++ b/keyboards/chosfox/cf81/config.h
@@ -0,0 +1,52 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Use 4 dynamic keymap layers */
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
+#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
+
+/* I2C Config for LED Driver */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000 /* 400000 */
+
+#define DRIVER_1_LED_TOTAL 63
+#define DRIVER_2_LED_TOTAL 20
+#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL + 22)
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_TRIGGER_ON_KEYDOWN
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
diff --git a/keyboards/chosfox/cf81/halconf.h b/keyboards/chosfox/cf81/halconf.h
new file mode 100644
index 000000000000..2f64e65393a5
--- /dev/null
+++ b/keyboards/chosfox/cf81/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/chosfox/cf81/info.json b/keyboards/chosfox/cf81/info.json
new file mode 100644
index 000000000000..8b09d5daf614
--- /dev/null
+++ b/keyboards/chosfox/cf81/info.json
@@ -0,0 +1,270 @@
+{
+ "keyboard_name": "CHOSFOX CF81",
+ "manufacturer": "CHOSFOX",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "force_nkro": true,
+ "vid": "0xFFFE",
+ "pid": "0x0012",
+ "device_version": "1.0.0",
+ "suspend_wakeup_delay": 400
+ },
+ "eeprom": {
+ "driver": "wear_leveling"
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "encoder": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C1","C2","C3","A0","A1","A2","A3","A4","A5","A6","A7","C4","C5","B0","B1","B2"],
+ "rows": ["B15", "C6", "C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "encoder": {
+ "rotary": [
+ { "pin_a": "B14", "pin_b": "B13" }
+ ]
+ },
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "animations": {
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "raindrops": true,
+ "typing_heatmap": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "multisplash": true
+ },
+ "max_brightness": 200,
+ "val_steps": 20,
+ "layout":[
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 0 },
+ { "flags": 4, "matrix": [0, 1], "x": 14, "y": 0 },
+ { "flags": 4, "matrix": [0, 2], "x": 29, "y": 0 },
+ { "flags": 4, "matrix": [0, 3], "x": 44, "y": 0 },
+ { "flags": 4, "matrix": [0, 4], "x": 59, "y": 0 },
+ { "flags": 4, "matrix": [0, 5], "x": 74, "y": 0 },
+ { "flags": 4, "matrix": [0, 6], "x": 89, "y": 0 },
+ { "flags": 4, "matrix": [0, 7], "x":104, "y": 0 },
+ { "flags": 4, "matrix": [0, 8], "x":119, "y": 0 },
+ { "flags": 4, "matrix": [0, 9], "x":134, "y": 0 },
+ { "flags": 4, "matrix": [0, 10], "x":149, "y": 0 },
+ { "flags": 4, "matrix": [0, 11], "x":164, "y": 0 },
+ { "flags": 4, "matrix": [0, 12], "x":179, "y": 0 },
+ { "flags": 4, "matrix": [0, 13], "x":196, "y": 0 },
+
+ { "flags": 4, "matrix": [1, 0], "x": 0, "y": 12},
+ { "flags": 4, "matrix": [1, 1], "x": 14, "y": 12},
+ { "flags": 4, "matrix": [1, 2], "x": 28, "y": 12},
+ { "flags": 4, "matrix": [1, 3], "x": 42, "y": 12},
+ { "flags": 4, "matrix": [1, 4], "x": 56, "y": 12},
+ { "flags": 4, "matrix": [1, 5], "x": 70, "y": 12},
+ { "flags": 4, "matrix": [1, 6], "x": 84, "y": 12},
+ { "flags": 4, "matrix": [1, 7], "x": 98, "y": 12},
+ { "flags": 4, "matrix": [1, 8], "x":112, "y": 12},
+ { "flags": 4, "matrix": [1, 9], "x":126, "y": 12},
+ { "flags": 4, "matrix": [1, 10], "x":140, "y": 12},
+ { "flags": 4, "matrix": [1, 11], "x":154, "y": 12},
+ { "flags": 4, "matrix": [1, 12], "x":168, "y": 12},
+ { "flags": 4, "matrix": [1, 13], "x":182, "y": 12},
+ { "flags": 4, "matrix": [1, 15], "x":224, "y": 12},
+
+ { "flags": 4, "matrix": [2, 0], "x": 0, "y": 25},
+ { "flags": 4, "matrix": [2, 1], "x": 14, "y": 25},
+ { "flags": 4, "matrix": [2, 2], "x": 28, "y": 25},
+ { "flags": 4, "matrix": [2, 3], "x": 42, "y": 25},
+ { "flags": 4, "matrix": [2, 4], "x": 56, "y": 25},
+ { "flags": 4, "matrix": [2, 5], "x": 70, "y": 25},
+ { "flags": 4, "matrix": [2, 6], "x": 84, "y": 25},
+ { "flags": 4, "matrix": [2, 7], "x": 98, "y": 25},
+ { "flags": 4, "matrix": [2, 8], "x":112, "y": 25},
+ { "flags": 4, "matrix": [2, 9], "x":126, "y": 25},
+ { "flags": 4, "matrix": [2, 10], "x":140, "y": 25},
+ { "flags": 4, "matrix": [2, 11], "x":154, "y": 25},
+ { "flags": 4, "matrix": [2, 12], "x":168, "y": 25},
+ { "flags": 4, "matrix": [2, 13], "x":182, "y": 25},
+ { "flags": 4, "matrix": [2, 15], "x":224, "y": 25},
+
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 38},
+ { "flags": 4, "matrix": [3, 1], "x": 28, "y": 38},
+ { "flags": 4, "matrix": [3, 2], "x": 42, "y": 38},
+ { "flags": 4, "matrix": [3, 3], "x": 56, "y": 38},
+ { "flags": 4, "matrix": [3, 4], "x": 70, "y": 38},
+ { "flags": 4, "matrix": [3, 5], "x": 84, "y": 38},
+ { "flags": 4, "matrix": [3, 6], "x": 98, "y": 38},
+ { "flags": 4, "matrix": [3, 7], "x":112, "y": 38},
+ { "flags": 4, "matrix": [3, 8], "x":126, "y": 38},
+ { "flags": 4, "matrix": [3, 9], "x":140, "y": 38},
+ { "flags": 4, "matrix": [3, 10], "x":154, "y": 38},
+ { "flags": 4, "matrix": [3, 11], "x":168, "y": 38},
+ { "flags": 4, "matrix": [3, 12], "x":182, "y": 38},
+ { "flags": 4, "matrix": [3, 13], "x":196, "y": 38},
+ { "flags": 4, "matrix": [3, 15], "x":224, "y": 38},
+
+ { "flags": 4, "matrix": [4, 0], "x": 0, "y": 51},
+ { "flags": 4, "matrix": [4, 11], "x": 14, "y": 51},
+ { "flags": 4, "matrix": [4, 1], "x": 28, "y": 51},
+ { "flags": 4, "matrix": [4, 2], "x": 37, "y": 51},
+ { "flags": 4, "matrix": [4, 3], "x": 56, "y": 51},
+ { "flags": 4, "matrix": [4, 4], "x": 74, "y": 51},
+ { "flags": 4, "matrix": [4, 5], "x": 93, "y": 51},
+ { "flags": 4, "matrix": [4, 6], "x":112, "y": 51},
+ { "flags": 4, "matrix": [4, 7], "x":130, "y": 51},
+ { "flags": 4, "matrix": [4, 8], "x":149, "y": 51},
+ { "flags": 4, "matrix": [4, 9], "x":168, "y": 51},
+ { "flags": 4, "matrix": [4, 10], "x":186, "y": 51},
+ { "flags": 4, "matrix": [4, 13], "x":200, "y": 51},
+ { "flags": 4, "matrix": [4, 14], "x":214, "y": 51},
+
+ { "flags": 4, "matrix": [5, 0], "x": 0, "y": 64},
+ { "flags": 4, "matrix": [5, 1], "x": 18, "y": 64},
+ { "flags": 4, "matrix": [5, 2], "x": 37, "y": 64},
+ { "flags": 4, "matrix": [5, 5], "x": 92, "y": 64},
+ { "flags": 4, "matrix": [5, 9], "x":140, "y": 64},
+ { "flags": 4, "matrix": [5, 10], "x":154, "y": 64},
+ { "flags": 4, "matrix": [5, 11], "x":168, "y": 64},
+ { "flags": 4, "matrix": [5, 13], "x":196, "y": 64},
+ { "flags": 4, "matrix": [5, 14], "x":210, "y": 64},
+ { "flags": 4, "matrix": [5, 15], "x":224, "y": 64},
+
+ { "flags": 2, "x":0, "y":0},
+ { "flags": 2, "x":0, "y":6},
+ { "flags": 2, "x":0, "y":13},
+ { "flags": 2, "x":0, "y":19},
+ { "flags": 2, "x":0, "y":25},
+ { "flags": 2, "x":0, "y":32},
+ { "flags": 2, "x":0, "y":38},
+ { "flags": 2, "x":0, "y":45},
+ { "flags": 2, "x":0, "y":51},
+ { "flags": 2, "x":0, "y":57},
+ { "flags": 2, "x":0, "y":64},
+
+ { "flags": 2, "x":224, "y":0},
+ { "flags": 2, "x":224, "y":6},
+ { "flags": 2, "x":224, "y":13},
+ { "flags": 2, "x":224, "y":19},
+ { "flags": 2, "x":224, "y":25},
+ { "flags": 2, "x":224, "y":32},
+ { "flags": 2, "x":224, "y":38},
+ { "flags": 2, "x":224, "y":45},
+ { "flags": 2, "x":224, "y":51},
+ { "flags": 2, "x":224, "y":57},
+ { "flags": 2, "x":224, "y":64}
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "label": "Del", "matrix": [0, 13], "x": 14, "y": 0 },
+ { "label": "Mute", "matrix": [0, 15], "x": 15.5, "y": 0 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "*", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "(", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": ")", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "_", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "+", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "Bksp", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "Home", "matrix": [1, 15], "x": 15.5, "y": 1.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "{", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "}", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "|", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "PageUp", "matrix": [2, 15], "x": 15.5, "y": 2.25 },
+
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": ":", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "\"", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": ":", "matrix": [3, 12], "x": 12.75, "y": 3.25 },
+ { "label": "Enter", "matrix": [3, 13], "w": 1.25, "x": 13.75, "y": 3.25 },
+ { "label": "PageDn", "matrix": [3, 15], "x": 15.5, "y": 3.25 },
+
+ { "label": "Shift", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "label": ":", "matrix": [4, 11], "x": 1.25, "y": 4.25 },
+ { "label": "Z", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "N", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "M", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "<", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": ">", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "?", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "Shift", "matrix": [4, 13], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "label": "Up", "matrix": [4, 14], "x": 14.25, "y": 4.25 },
+
+ { "label": "Ctrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "Win", "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "Alt", "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "label": "Space", "matrix": [5, 5], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25 },
+ { "label": "Fn", "matrix": [5, 10], "x": 11, "y": 5.25 },
+ { "label": "Ctrl", "matrix": [5, 11], "x": 12, "y": 5.25 },
+ { "label": "Left", "matrix": [5, 13], "x": 13.25, "y": 5.25 },
+ { "label": "Down", "matrix": [5, 14], "x": 14.25, "y": 5.25 },
+ { "label": "Right", "matrix": [5, 15], "x": 15.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/chosfox/cf81/keymaps/default/keymap.c b/keyboards/chosfox/cf81/keymaps/default/keymap.c
new file mode 100644
index 000000000000..753bdebc0a49
--- /dev/null
+++ b/keyboards/chosfox/cf81/keymaps/default/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_FN,
+ MAC_B,
+ MAC_FN
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT( /* Base */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+
+ [WIN_FN] = LAYOUT( /* FN */
+ _______, KC_MSEL, KC_VOLD, KC_VOLU, KC_MUTE, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MAIL, KC_WHOM, KC_CALC, KC_WSCH, KC_INS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, RGB_TOG, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, RGB_MOD, _______,
+ _______, _______,DF(MAC_B),_______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, GU_TOGG, _______, EE_CLR, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUD),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, KC_DEL, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT( /* FN */
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, RGB_TOG, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, RGB_MOD, _______,
+ _______,DF(WIN_B),_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, _______, _______, EE_CLR, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUD)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [WIN_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [WIN_FN] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_FN] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }
+};
+#endif
+
diff --git a/keyboards/chosfox/cf81/keymaps/default/rules.mk b/keyboards/chosfox/cf81/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/chosfox/cf81/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/chosfox/cf81/keymaps/via/keymap.c b/keyboards/chosfox/cf81/keymaps/via/keymap.c
new file mode 100644
index 000000000000..753bdebc0a49
--- /dev/null
+++ b/keyboards/chosfox/cf81/keymaps/via/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_FN,
+ MAC_B,
+ MAC_FN
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT( /* Base */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+
+ [WIN_FN] = LAYOUT( /* FN */
+ _______, KC_MSEL, KC_VOLD, KC_VOLU, KC_MUTE, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MAIL, KC_WHOM, KC_CALC, KC_WSCH, KC_INS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, RGB_TOG, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, RGB_MOD, _______,
+ _______, _______,DF(MAC_B),_______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, GU_TOGG, _______, EE_CLR, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUD),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, KC_DEL, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT( /* FN */
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, RGB_TOG, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, RGB_MOD, _______,
+ _______,DF(WIN_B),_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, _______, _______, EE_CLR, _______, _______, _______, RGB_HUD, RGB_VAD, RGB_HUD)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [WIN_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [WIN_FN] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_FN] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }
+};
+#endif
+
diff --git a/keyboards/chosfox/cf81/keymaps/via/rules.mk b/keyboards/chosfox/cf81/keymaps/via/rules.mk
new file mode 100644
index 000000000000..f1adcab005e8
--- /dev/null
+++ b/keyboards/chosfox/cf81/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/chosfox/cf81/mcuconf.h b/keyboards/chosfox/cf81/mcuconf.h
new file mode 100644
index 000000000000..e2884f3828f6
--- /dev/null
+++ b/keyboards/chosfox/cf81/mcuconf.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include_next
+
+#undef WB32_SPI_USE_QSPI
+#define WB32_SPI_USE_QSPI TRUE
+
+#undef WB32_I2C_USE_I2C1
+#define WB32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/chosfox/cf81/readme.md b/keyboards/chosfox/cf81/readme.md
new file mode 100644
index 000000000000..06522836fd87
--- /dev/null
+++ b/keyboards/chosfox/cf81/readme.md
@@ -0,0 +1,19 @@
+# CHOSFOX CF81 keyboard
+
+A customizable 75% encoder keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: CF81
+* Hardware Availability: [CHOSFOX](https://chosfox.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make chosfox/cf81:default
+
+Flashing example for this keyboard:
+
+ make chosfox/cf81:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, which programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chosfox/cf81/rules.mk b/keyboards/chosfox/cf81/rules.mk
new file mode 100644
index 000000000000..002458405eed
--- /dev/null
+++ b/keyboards/chosfox/cf81/rules.mk
@@ -0,0 +1 @@
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/chouchou/config.h b/keyboards/chouchou/config.h
new file mode 100644
index 000000000000..405bd8b5ff42
--- /dev/null
+++ b/keyboards/chouchou/config.h
@@ -0,0 +1,7 @@
+// Copyright 2023 Dane Lipscombe (@dlip)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
diff --git a/keyboards/chouchou/info.json b/keyboards/chouchou/info.json
new file mode 100644
index 000000000000..726f190aab1f
--- /dev/null
+++ b/keyboards/chouchou/info.json
@@ -0,0 +1,52 @@
+{
+ "manufacturer": "dlip",
+ "keyboard_name": "chouchou",
+ "maintainer": "dlip",
+ "bootloader": "rp2040",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": false,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "direct": [
+ ["GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP26", "GP27", "GP28", "GP29"]
+ ]
+ },
+ "processor": "RP2040",
+ "url": "https://github.com/dlip/chouchou",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0117",
+ "vid": "0xFABE"
+ },
+ "layouts": {
+ "LAYOUT_split_2x4_2": {
+ "layout": [
+ {"matrix": [0, 16], "x": 0, "y": 0.88},
+ {"matrix": [0, 17], "x": 1, "y": 0.38},
+ {"matrix": [0, 18], "x": 2, "y": 0},
+ {"matrix": [0, 19], "x": 3, "y": 0.38},
+ {"matrix": [0, 0], "x": 4, "y": 0.38},
+ {"matrix": [0, 1], "x": 5, "y": 0},
+ {"matrix": [0, 2], "x": 6, "y": 0.38},
+ {"matrix": [0, 3], "x": 7, "y": 0.88},
+ {"matrix": [0, 12], "x": 0, "y": 1.88},
+ {"matrix": [0, 13], "x": 1, "y": 1.38},
+ {"matrix": [0, 14], "x": 2, "y": 1},
+ {"matrix": [0, 15], "x": 3, "y": 1.38},
+ {"matrix": [0, 4], "x": 4, "y": 1.38},
+ {"matrix": [0, 5], "x": 5, "y": 1},
+ {"matrix": [0, 6], "x": 6, "y": 1.38},
+ {"matrix": [0, 7], "x": 7, "y": 1.88},
+ {"matrix": [0, 11], "x": 2, "y": 2.38},
+ {"matrix": [0, 10], "x": 3, "y": 2.5},
+ {"matrix": [0, 9], "x": 4, "y": 2.5},
+ {"matrix": [0, 8], "x": 5, "y": 2.38}
+ ]
+ }
+ }
+}
diff --git a/keyboards/chouchou/keymaps/default/keymap.c b/keyboards/chouchou/keymaps/default/keymap.c
new file mode 100644
index 000000000000..7a20b6e21593
--- /dev/null
+++ b/keyboards/chouchou/keymaps/default/keymap.c
@@ -0,0 +1,11 @@
+// Copyright 2023 Dane Lipscombe (@dlip)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_2x4_2(
+ KC_A, KC_B, KC_C, KC_D, KC_N, KC_M, KC_L, KC_K,
+ KC_E, KC_F, KC_G, KC_H, KC_R, KC_Q, KC_P, KC_O,
+ KC_I, KC_J, KC_T, KC_S
+ ),
+};
diff --git a/keyboards/chouchou/readme.md b/keyboards/chouchou/readme.md
new file mode 100644
index 000000000000..dcd0c9031419
--- /dev/null
+++ b/keyboards/chouchou/readme.md
@@ -0,0 +1,26 @@
+# Chouchou
+
+![Chouchou](https://i.imgur.com/BYk2n5Ch.jpeg)
+
+Chouchou (Japanese for butterfly) is a minimalist unibody keyboard designed to be used with the [Taipo](https://inkeys.wiki/en/keymaps/taipo) layout.
+
+- [Github repo](https://github.com/dlip/chouchou)
+- Keyboard Maintainer: [Dane Lipscombe](https://github.com/dlip)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make chouchou:default
+
+Flashing example for this keyboard:
+
+ make chouchou:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/chouchou/rules.mk b/keyboards/chouchou/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/cipulot/common/via_apc.c b/keyboards/cipulot/common/via_apc.c
new file mode 100644
index 000000000000..2a92052d8832
--- /dev/null
+++ b/keyboards/cipulot/common/via_apc.c
@@ -0,0 +1,158 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "ec_switch_matrix.h"
+#include "action.h"
+#include "via.h"
+
+#ifdef VIA_ENABLE
+
+void apc_init_thresholds(void);
+void apc_set_threshold(bool is_for_actuation);
+
+// Declaring an _apc_config_t struct that will store our data
+typedef struct _apc_config_t {
+ uint16_t actuation_threshold;
+ uint16_t release_threshold;
+} apc_config;
+
+// Check if the size of the reserved persistent memory is the same as the size of struct apc_config
+_Static_assert(sizeof(apc_config) == EECONFIG_USER_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data");
+
+// Declaring a new variable apc of type apc_config
+apc_config apc;
+
+// Declaring enums for VIA config menu
+enum via_apc_enums {
+ // clang-format off
+ id_apc_actuation_threshold = 1,
+ id_apc_release_threshold = 2
+ // clang-format on
+};
+
+// Initializing persistent memory configuration: default values are declared and stored in PMEM
+void eeconfig_init_user(void) {
+ // Default values
+ apc.actuation_threshold = DEFAULT_ACTUATION_LEVEL;
+ apc.release_threshold = DEFAULT_RELEASE_LEVEL;
+ // Write default value to EEPROM now
+ eeconfig_update_user_datablock(&apc);
+}
+
+// On Keyboard startup
+void keyboard_post_init_user(void) {
+ // Read custom menu variables from memory
+ eeconfig_read_user_datablock(&apc);
+ apc_init_thresholds();
+}
+
+// Handle the data received by the keyboard from the VIA menus
+void apc_config_set_value(uint8_t *data) {
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch (*value_id) {
+ case id_apc_actuation_threshold: {
+ apc.actuation_threshold = value_data[1] | (value_data[0] << 8);
+ apc_set_threshold(true);
+ break;
+ }
+ case id_apc_release_threshold: {
+ apc.release_threshold = value_data[1] | (value_data[0] << 8);
+ apc_set_threshold(false);
+ break;
+ }
+ }
+}
+
+// Handle the data sent by the keyboard to the VIA menus
+void apc_config_get_value(uint8_t *data) {
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch (*value_id) {
+ case id_apc_actuation_threshold: {
+ value_data[0] = apc.actuation_threshold >> 8;
+ value_data[1] = apc.actuation_threshold & 0xFF;
+ break;
+ }
+ case id_apc_release_threshold: {
+ value_data[0] = apc.release_threshold >> 8;
+ value_data[1] = apc.release_threshold & 0xFF;
+ break;
+ }
+ }
+}
+
+// Save the data to persistent memory after changes are made
+void apc_config_save(void) {
+ eeconfig_update_user_datablock(&apc);
+}
+
+void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
+ // data = [ command_id, channel_id, value_id, value_data ]
+ uint8_t *command_id = &(data[0]);
+ uint8_t *channel_id = &(data[1]);
+ uint8_t *value_id_and_data = &(data[2]);
+
+ if (*channel_id == id_custom_channel) {
+ switch (*command_id) {
+ case id_custom_set_value: {
+ apc_config_set_value(value_id_and_data);
+ break;
+ }
+ case id_custom_get_value: {
+ apc_config_get_value(value_id_and_data);
+ break;
+ }
+ case id_custom_save: {
+ apc_config_save();
+ break;
+ }
+ default: {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+ return;
+ }
+
+ *command_id = id_unhandled;
+}
+
+// Initialize the thresholds
+void apc_init_thresholds(void) {
+ ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold;
+ ecsm_config.ecsm_release_threshold = apc.release_threshold;
+
+ // Update the ecsm_config
+ ecsm_update(&ecsm_config);
+}
+
+// Set the thresholds
+void apc_set_threshold(bool is_for_actuation) {
+ if (is_for_actuation) {
+ ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold;
+
+ } else {
+ ecsm_config.ecsm_release_threshold = apc.release_threshold;
+ }
+ // Update the ecsm_config
+ ecsm_update(&ecsm_config);
+}
+#endif // VIA_ENABLE
diff --git a/keyboards/cipulot/ec_theca/config.h b/keyboards/cipulot/ec_theca/config.h
new file mode 100644
index 000000000000..481183b80c14
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/config.h
@@ -0,0 +1,45 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 16
+
+/* Custom matrix pins and port select array */
+#define MATRIX_ROW_PINS \
+ { B4, A14, B3, A15, B6, B5 }
+#define MATRIX_COL_CHANNELS \
+ { 3, 0, 1, 2, 6, 5, 7, 4 }
+#define MUX_SEL_PINS \
+ { B7, B8, B9 }
+
+/* Hardware peripherals pins */
+#define APLEX_EN_PIN_0 C13
+#define APLEX_EN_PIN_1 C14
+#define DISCHARGE_PIN B1
+#define ANALOG_PORT A3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#define DEFAULT_ACTUATION_LEVEL 550
+#define DEFAULT_RELEASE_LEVEL 500
+
+#define DISCHARGE_TIME 10
diff --git a/keyboards/cipulot/ec_theca/ec_switch_matrix.c b/keyboards/cipulot/ec_theca/ec_switch_matrix.c
new file mode 100644
index 000000000000..fdf4479423f9
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/ec_switch_matrix.c
@@ -0,0 +1,191 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "ec_switch_matrix.h"
+#include "analog.h"
+#include "atomic_util.h"
+#include "print.h"
+#include "wait.h"
+
+/* Pin and port array */
+const uint32_t row_pins[] = MATRIX_ROW_PINS;
+const uint8_t col_channels[] = MATRIX_COL_CHANNELS;
+const uint32_t mux_sel_pins[] = MUX_SEL_PINS;
+
+static ecsm_config_t config;
+static uint16_t ecsm_sw_value[MATRIX_ROWS][MATRIX_COLS];
+
+static adc_mux adcMux;
+
+static inline void discharge_capacitor(void) {
+ writePinLow(DISCHARGE_PIN);
+}
+static inline void charge_capacitor(uint8_t row) {
+ writePinHigh(DISCHARGE_PIN);
+ writePinHigh(row_pins[row]);
+}
+
+static inline void init_mux_sel(void) {
+ for (int idx = 0; idx < 3; idx++) {
+ setPinOutput(mux_sel_pins[idx]);
+ }
+}
+
+static inline void select_mux(uint8_t col) {
+ uint8_t ch = col_channels[col];
+ writePin(mux_sel_pins[0], ch & 1);
+ writePin(mux_sel_pins[1], ch & 2);
+ writePin(mux_sel_pins[2], ch & 4);
+}
+
+static inline void init_row(void) {
+ for (int idx = 0; idx < MATRIX_ROWS; idx++) {
+ setPinOutput(row_pins[idx]);
+ writePinLow(row_pins[idx]);
+ }
+}
+
+static inline void clear_row(void) {
+ for (int idx = 0; idx < MATRIX_ROWS; idx++) {
+ setPinOutput(row_pins[idx]);
+ writePinLow(row_pins[idx]);
+ }
+}
+
+/* Initialize the peripherals pins */
+int ecsm_init(ecsm_config_t const* const ecsm_config) {
+ // Initialize config
+ config = *ecsm_config;
+
+ palSetLineMode(ANALOG_PORT, PAL_MODE_INPUT_ANALOG);
+ adcMux = pinToMux(ANALOG_PORT);
+
+ // Dummy call to make sure that adcStart() has been called in the appropriate state
+ adc_read(adcMux);
+
+ // Initialize discharge pin as discharge mode
+ writePinLow(DISCHARGE_PIN);
+ setPinOutputOpenDrain(DISCHARGE_PIN);
+
+ // Initialize drive lines
+ init_row();
+
+ // Initialize multiplexer select pin
+ init_mux_sel();
+
+ // Enable AMUX
+ setPinOutput(APLEX_EN_PIN_0);
+ writePinLow(APLEX_EN_PIN_0);
+ setPinOutput(APLEX_EN_PIN_1);
+ writePinLow(APLEX_EN_PIN_1);
+
+ return 0;
+}
+
+int ecsm_update(ecsm_config_t const* const ecsm_config) {
+ // Save config
+ config = *ecsm_config;
+ return 0;
+}
+
+// Read the capacitive sensor value
+uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col) {
+ uint16_t sw_value = 0;
+
+ // Select the multiplexer
+ if (channel == 0) {
+ writePinHigh(APLEX_EN_PIN_0);
+ select_mux(col);
+ writePinLow(APLEX_EN_PIN_0);
+ } else {
+ writePinHigh(APLEX_EN_PIN_1);
+ select_mux(col);
+ writePinLow(APLEX_EN_PIN_1);
+ }
+
+ // Set strobe pins to low state
+ //writePinLow(row_pins[row]);
+ clear_row();
+ ATOMIC_BLOCK_FORCEON {
+ // Set the row pin to high state and have capacitor charge
+ charge_capacitor(row);
+ // Read the ADC value
+ sw_value = adc_read(adcMux);
+ }
+ // Discharge peak hold capacitor
+ discharge_capacitor();
+ // Waiting for the ghost capacitor to discharge fully
+ wait_us(DISCHARGE_TIME);
+
+ return sw_value;
+}
+
+// Update press/release state of key
+bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value) {
+ bool current_state = (*current_row >> col) & 1;
+
+ // Press to release
+ if (current_state && sw_value < config.ecsm_actuation_threshold) {
+ *current_row &= ~(1 << col);
+ return true;
+ }
+
+ // Release to press
+ if ((!current_state) && sw_value > config.ecsm_release_threshold) {
+ *current_row |= (1 << col);
+ return true;
+ }
+
+ return false;
+}
+
+// Scan key values and update matrix state
+bool ecsm_matrix_scan(matrix_row_t current_matrix[]) {
+ bool updated = false;
+
+ // Disable AMUX of channel 1
+ writePinHigh(APLEX_EN_PIN_1);
+ for (int col = 0; col < sizeof(col_channels); col++) {
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ ecsm_sw_value[row][col] = ecsm_readkey_raw(0, row, col);
+ updated |= ecsm_update_key(¤t_matrix[row], row, col, ecsm_sw_value[row][col]);
+ }
+ }
+
+ // Disable AMUX of channel 1
+ writePinHigh(APLEX_EN_PIN_0);
+ for (int col = 0; col < sizeof(col_channels); col++) {
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ ecsm_sw_value[row][col + 8] = ecsm_readkey_raw(1, row, col);
+ updated |= ecsm_update_key(¤t_matrix[row], row, col + 8, ecsm_sw_value[row][col + 8]);
+ }
+ }
+ return updated;
+}
+
+// Debug print key values
+void ecsm_print_matrix(void) {
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ uprintf("%4d", ecsm_sw_value[row][col]);
+ if (col < (MATRIX_COLS - 1)) {
+ print(",");
+ }
+ }
+ print("\n");
+ }
+ print("\n");
+}
diff --git a/keyboards/cipulot/ec_theca/ec_switch_matrix.h b/keyboards/cipulot/ec_theca/ec_switch_matrix.h
new file mode 100644
index 000000000000..9dcb216caa3f
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/ec_switch_matrix.h
@@ -0,0 +1,36 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include
+#include
+
+#include "matrix.h"
+
+typedef struct {
+ uint16_t ecsm_actuation_threshold; // threshold for key release
+ uint16_t ecsm_release_threshold; // threshold for key press
+} ecsm_config_t;
+
+ecsm_config_t ecsm_config;
+
+int ecsm_init(ecsm_config_t const* const ecsm_config);
+int ecsm_update(ecsm_config_t const* const ecsm_config);
+bool ecsm_matrix_scan(matrix_row_t current_matrix[]);
+uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col);
+bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value);
+void ecsm_print_matrix(void);
diff --git a/keyboards/cipulot/ec_theca/halconf.h b/keyboards/cipulot/ec_theca/halconf.h
new file mode 100644
index 000000000000..5b71acecbbc8
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+
+#include_next
diff --git a/keyboards/cipulot/ec_theca/info.json b/keyboards/cipulot/ec_theca/info.json
new file mode 100644
index 000000000000..8aa2933892f1
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/info.json
@@ -0,0 +1,388 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "EC Theca",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "processor": "STM32F401",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6B7E",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 2, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 3, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 4, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 5, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 11, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 12, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 13, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 14, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "1,13", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "label": "1,15", "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1.25 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "2,14", "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 2.25 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 },
+ { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "label": "4,0", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "4,1", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "4,2", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "4,3", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "4,4", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "4,5", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "4,6", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "4,7", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "4,8", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": "4,9", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "4,10", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4.25 },
+ { "label": "5,0", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "5,1", "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "5,2", "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "label": "5,5", "matrix": [5, 5], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "label": "5,10", "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "label": "5,11", "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "label": "5,12", "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "label": "5,13", "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "label": "5,14", "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "label": "5,15", "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "label": "4,15", "matrix": [4, 15], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 2, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 3, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 4, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 5, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 11, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 12, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 13, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 14, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "1,13", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "label": "1,15", "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1.25 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "2,14", "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 2.25 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 },
+ { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "label": "4,0", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "4,1", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "4,2", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "4,3", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "4,4", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "4,5", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "4,6", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "4,7", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "4,8", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": "4,9", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "4,10", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4.25 },
+ { "label": "5,0", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "5,1", "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "5,2", "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "label": "5,5", "matrix": [5, 5], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "label": "5,10", "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "label": "5,11", "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "label": "5,12", "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "label": "5,13", "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "label": "5,14", "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "label": "5,15", "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "label": "4,15", "matrix": [4, 15], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 2, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 3, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 4, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 5, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 11, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 12, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 13, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 14, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "1,13", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "label": "1,15", "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1.25 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "2,14", "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 2.25 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 },
+ { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "label": "4,0", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "4,1", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "4,2", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "4,3", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "4,4", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "4,5", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "4,6", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "4,7", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "4,8", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": "4,9", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "4,10", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4.25 },
+ { "label": "5,0", "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "label": "5,1", "matrix": [5, 1], "x": 1.5, "y": 5.25 },
+ { "label": "5,2", "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "label": "5,5", "matrix": [5, 5], "w": 7, "x": 4, "y": 5.25 },
+ { "label": "5,11", "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "label": "5,12", "matrix": [5, 12], "x": 12.5, "y": 5.25 },
+ { "label": "5,13", "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "label": "5,14", "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "label": "5,15", "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "label": "4,15", "matrix": [4, 15], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_wkl": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 2, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 3, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 4, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 5, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 11, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 12, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 13, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 14, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "1,13", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "label": "1,15", "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1.25 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "2,14", "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 2.25 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25 },
+ { "label": "3,0", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "label": "4,0", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "4,1", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "4,2", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "4,3", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "4,4", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "4,5", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "4,6", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "4,7", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "4,8", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": "4,9", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "4,10", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "4,13", "matrix": [4, 13], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "label": "4,14", "matrix": [4, 14], "x": 16.25, "y": 4.25 },
+ { "label": "5,0", "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "label": "5,2", "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "label": "5,5", "matrix": [5, 5], "w": 7, "x": 4, "y": 5.25 },
+ { "label": "5,11", "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "label": "5,13", "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "label": "5,14", "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "label": "5,15", "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "label": "4,15", "matrix": [4, 15], "x": 17.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_theca/keymaps/default/keymap.c b/keyboards/cipulot/ec_theca/keymaps/default/keymap.c
new file mode 100644
index 000000000000..2ad75a0f3e49
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan/keymap.c b/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan/keymap.c
new file mode 100644
index 000000000000..a8f569b189dd
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_tkl_ansi_tsangan(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_ansi_tsangan(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan_wkl/keymap.c b/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan_wkl/keymap.c
new file mode 100644
index 000000000000..f5b25db22813
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/tkl_ansi_tsangan_wkl/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_tkl_ansi_tsangan_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_ansi_tsangan_wkl(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_theca/keymaps/via/config.h b/keyboards/cipulot/ec_theca/keymaps/via/config.h
new file mode 100644
index 000000000000..ebf954d07aca
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/via/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// This is the size of the EEPROM for the custom VIA-specific data
+#define EECONFIG_USER_DATA_SIZE 4
diff --git a/keyboards/cipulot/ec_theca/keymaps/via/keymap.c b/keyboards/cipulot/ec_theca/keymaps/via/keymap.c
new file mode 100644
index 000000000000..a8fc1b961a6f
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_theca/keymaps/via/rules.mk b/keyboards/cipulot/ec_theca/keymaps/via/rules.mk
new file mode 100644
index 000000000000..72e314e69462
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+
+SRC += keyboards/cipulot/common/via_apc.c
diff --git a/keyboards/cipulot/ec_theca/matrix.c b/keyboards/cipulot/ec_theca/matrix.c
new file mode 100644
index 000000000000..1850acf26414
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/matrix.c
@@ -0,0 +1,44 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "ec_switch_matrix.h"
+#include "matrix.h"
+
+/* matrix state(1:on, 0:off) */
+extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
+extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values
+
+void matrix_init_custom(void) {
+ // Default values, overwritten by VIA if enabled later
+ ecsm_config.ecsm_actuation_threshold = DEFAULT_ACTUATION_LEVEL;
+ ecsm_config.ecsm_release_threshold = DEFAULT_RELEASE_LEVEL;
+
+ ecsm_init(&ecsm_config);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool updated = ecsm_matrix_scan(current_matrix);
+
+// RAW matrix values on console
+#ifdef CONSOLE_ENABLE
+ static int cnt = 0;
+ if (cnt++ == 350) {
+ cnt = 0;
+ ecsm_print_matrix();
+ }
+#endif
+ return updated;
+}
diff --git a/keyboards/cipulot/ec_theca/mcuconf.h b/keyboards/cipulot/ec_theca/mcuconf.h
new file mode 100644
index 000000000000..d91f576bd48b
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_ADC_USE_ADC1
+#define STM32_ADC_USE_ADC1 TRUE
diff --git a/keyboards/cipulot/ec_theca/readme.md b/keyboards/cipulot/ec_theca/readme.md
new file mode 100644
index 000000000000..c25e498434ca
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/readme.md
@@ -0,0 +1,25 @@
+# EC Theca
+
+![EC Theca](https://i.imgur.com/ZdeJLVdh.png)
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: EC Theca
+* Hardware Availability: [KLC](https://klc-playground.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_theca:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_theca:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset**: Long short the exposed pads on the top of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cipulot/ec_theca/rules.mk b/keyboards/cipulot/ec_theca/rules.mk
new file mode 100644
index 000000000000..b8929fa590d7
--- /dev/null
+++ b/keyboards/cipulot/ec_theca/rules.mk
@@ -0,0 +1,3 @@
+CUSTOM_MATRIX = lite
+QUANTUM_LIB_SRC += analog.c
+SRC += matrix.c ec_switch_matrix.c
diff --git a/keyboards/cipulot/rf_r1_8_9xu/info.json b/keyboards/cipulot/rf_r1_8_9xu/info.json
index badf092c87ee..eb0220f6779a 100644
--- a/keyboards/cipulot/rf_r1_8_9xu/info.json
+++ b/keyboards/cipulot/rf_r1_8_9xu/info.json
@@ -53,6 +53,7 @@
},
"vid": "0x6369"
},
+ "community_layouts": ["tkl_jis", "tkl_iso_tsangan", "tkl_ansi_tsangan"],
"layouts": {
"LAYOUT_all": {
"layout": [
diff --git a/keyboards/clueboard/2x1800/2021/keymaps/default/keymap.json b/keyboards/clueboard/2x1800/2021/keymaps/default/keymap.json
index 1227020b2971..10f557d72975 100644
--- a/keyboards/clueboard/2x1800/2021/keymaps/default/keymap.json
+++ b/keyboards/clueboard/2x1800/2021/keymaps/default/keymap.json
@@ -2,7 +2,7 @@
"version": 1,
"author": "skullydazed",
"notes": "",
- "keyboard": "clueboard/2x1800/2018",
+ "keyboard": "clueboard/2x1800/2021",
"keymap": "default",
"layout": "LAYOUT_all",
"layers": [
diff --git a/keyboards/cmm_studio/fuji65/info.json b/keyboards/cmm_studio/fuji65/info.json
index 2225bedad3dd..cf5a137b34b0 100644
--- a/keyboards/cmm_studio/fuji65/info.json
+++ b/keyboards/cmm_studio/fuji65/info.json
@@ -18,8 +18,86 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_ansi_blocker_split_bs"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_ansi_blocker": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_split_bs": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -90,6 +168,459 @@
{"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+
+ {"matrix": [4, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+
{"matrix": [4, 11], "x": 13, "y": 4},
{"matrix": [4, 12], "x": 14, "y": 4},
{"matrix": [4, 13], "x": 15, "y": 4}
diff --git a/keyboards/cmm_studio/fuji65/keymaps/default/keymap.c b/keyboards/cmm_studio/fuji65/keymaps/default/keymap.c
index da0538c82e96..ba93e7ae1e00 100644
--- a/keyboards/cmm_studio/fuji65/keymaps/default/keymap.c
+++ b/keyboards/cmm_studio/fuji65/keymaps/default/keymap.c
@@ -17,7 +17,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_ansi_blocker_split_bs(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSLS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_TRNS,
@@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_ansi_blocker_split_bs(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/cmm_studio/fuji65/keymaps/via/keymap.c b/keyboards/cmm_studio/fuji65/keymaps/via/keymap.c
index 6b37798c9d5a..88b3fa1f57fd 100644
--- a/keyboards/cmm_studio/fuji65/keymaps/via/keymap.c
+++ b/keyboards/cmm_studio/fuji65/keymaps/via/keymap.c
@@ -18,7 +18,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_ansi_blocker_split_bs(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSLS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_TRNS,
@@ -26,21 +26,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_ansi_blocker_split_bs(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [2] = LAYOUT(
+ [2] = LAYOUT_ansi_blocker_split_bs(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [3] = LAYOUT(
+ [3] = LAYOUT_ansi_blocker_split_bs(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/cmm_studio/fuji65/matrix_diagram.md b/keyboards/cmm_studio/fuji65/matrix_diagram.md
new file mode 100644
index 000000000000..b98ef38fa5f6
--- /dev/null
+++ b/keyboards/cmm_studio/fuji65/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for CMM.Studio Fuji65
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┐ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐2C │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2E │ │1D │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+│40 │41 │42 │46 │49 │4A │ │4B │4C │4D │
+└────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+┌────────┐
+│30 │ 2.25u LShift
+└────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┐
+│40 │41 │42 │46 │4A │ Blocker Tsangan
+└─────┴───┴─────┴───────────────────────────┴─────┘
+```
diff --git a/keyboards/coarse/cordillera/config.h b/keyboards/coarse/cordillera/config.h
index ef26abfc02f5..4282937c7cdc 100644
--- a/keyboards/coarse/cordillera/config.h
+++ b/keyboards/coarse/cordillera/config.h
@@ -19,7 +19,6 @@ along with this program. If not, see .
#define BACKLIGHT_PWM_DRIVER PWMD1
#define BACKLIGHT_PWM_CHANNEL 1
-#define BACKLIGHT_PAL_MODE 1
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
diff --git a/keyboards/converter/usb_usb/info.json b/keyboards/converter/usb_usb/info.json
index 2f3e8913c5a2..63c02322a2e4 100644
--- a/keyboards/converter/usb_usb/info.json
+++ b/keyboards/converter/usb_usb/info.json
@@ -9,7 +9,7 @@
"device_version": "0.0.1"
},
"processor": "atmega32u4",
- "community_layouts": ["fullsize_ansi", "fullsize_iso"],
+ "community_layouts": ["fullsize_ansi", "fullsize_iso", "fullsize_jis"],
"layouts": {
"LAYOUT_all": {
"layout": [
diff --git a/keyboards/crkbd/keymaps/colemad/config.h b/keyboards/crkbd/keymaps/colemad/config.h
index b52c669ea9ed..f23a3a4177f1 100644
--- a/keyboards/crkbd/keymaps/colemad/config.h
+++ b/keyboards/crkbd/keymaps/colemad/config.h
@@ -2,6 +2,8 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
+#define SPLIT_USB_DETECT // Added for Elite-C to work
+
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 200
diff --git a/keyboards/crkbd/keymaps/colemad/keycodes.h b/keyboards/crkbd/keymaps/colemad/keycodes.h
index 6497f1662b1c..0f75dabef6ab 100644
--- a/keyboards/crkbd/keymaps/colemad/keycodes.h
+++ b/keyboards/crkbd/keymaps/colemad/keycodes.h
@@ -19,6 +19,6 @@
/* Macros */
enum custom_keycodes {
- VSCTERM = SAFE_RANGE,
+ VSCTERM = QK_USER,
CHNLANG
};
diff --git a/keyboards/crkbd/keymaps/colemad/keymap.c b/keyboards/crkbd/keymaps/colemad/keymap.c
index fb951370f2c3..888499f5a2dd 100644
--- a/keyboards/crkbd/keymaps/colemad/keymap.c
+++ b/keyboards/crkbd/keymaps/colemad/keymap.c
@@ -50,9 +50,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = LAYOUT(
//,-----------------------------------------------------. ,-----------------------------------------------------.
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI,
+ XXXXXXX, XXXXXXX, KC_F13, KC_F14, KC_F15, XXXXXXX, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- XXXXXXX, XXXXXXX, VSCTERM, KC_PSCR, CHNLANG, XXXXXXX, XXXXXXX,RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD,
+ XXXXXXX, KC_F16, KC_F17, KC_F18, KC_F19, XXXXXXX, XXXXXXX,RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
diff --git a/keyboards/crkbd/keymaps/colemad/readme.md b/keyboards/crkbd/keymaps/colemad/readme.md
index 404fa9e79808..fd216bea36a8 100644
--- a/keyboards/crkbd/keymaps/colemad/readme.md
+++ b/keyboards/crkbd/keymaps/colemad/readme.md
@@ -1,21 +1,29 @@
# **COLEMAD**
+Compiled and tested: `July 12, 2023`
+
## Corne Keyboard (CRKBD) **Colemak** layout by [ACortesDev](https://github.com/ACortesDev)
-1. **Fast navigation**.
-2. **Fast symbols**.
-3. **Fast numbers**.
+1. **Ergonomic navigation keys**.
+2. **Symbols where expected to be**.
+3. **Numbers (numpad)**.
Using the Telephone/ATM numpad layout. Easier to memorize/visualize as numbers follow *left-to-right, top-to-bottom* order.
-4. **Fast capital letters**.
+4. **Easy Capital letters**.
Added a *CAPS Lock* key because... [There is no *CAPS Lock* key in the Colemak Layout](https://colemak.com/FAQ#Where_is_the_Caps_Lock_key.3F).
---
### **Flashing**
-For *Pro Micro* execute: `sudo make crkbd:colemad:avrdude`
+~~For *Pro Micro* execute: `sudo make crkbd:colemad:avrdude`~~
+
+~~For *Elite-C* execute: `sudo make crkbd:colemad:dfu`~~
-For *Elite-C* execute: `sudo make crkbd:colemad:dfu`
+For *Pro Micro* and *Elite-C* run:
+
+```sh
+qmk flash -kb crkbd -km colemad -bl dfu
+```
---
@@ -87,11 +95,15 @@ Notes:
##### Macros + Settings
+Notes:
+
+- Function keys (from F13 to F19) to use for Linux/MacOS shortcuts.
+
```text
,-----------------------------------------------------. ,-----------------------------------------------------.
- | | | | | | | |RGB_TOG |RGB_MOD |RGB_VAI |RGB_HUI |RGB_SAI |RGB_SPI |
+ | | | F13 | F14 | F15 | | |RGB_TOG |RGB_MOD |RGB_VAI |RGB_HUI |RGB_SAI |RGB_SPI |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- | | |VSCTERM | PSCR |CHNLANG | | | |RGB_RMOD|RGB_VAD |RGB_HUD |RGB_SAD |RGB_SPD |
+ | | F16 | F17 | F18 | F19 | | | |RGB_RMOD|RGB_VAD |RGB_HUD |RGB_SAD |RGB_SPD |
|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| | | | | | | | | | | | | |
`--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------'
@@ -102,5 +114,9 @@ Notes:
`--------+--------+--------' `--------+--------+--------'
```
+##### Ready to use Macro examples
+
+Checkout `keycodes.h` and `process_records.c/h` files.
+
- Macro **VSCTERM**: Toggles the vscode terminal (Ctrl + `)
- Macro **CHNLANG**: Changes the OS keyboard layout (Ctrl + Shift + N)
diff --git a/keyboards/crkbd/keymaps/rpbaptist/config.h b/keyboards/crkbd/keymaps/rpbaptist/config.h
index d0cda9579460..82064abb5758 100644
--- a/keyboards/crkbd/keymaps/rpbaptist/config.h
+++ b/keyboards/crkbd/keymaps/rpbaptist/config.h
@@ -20,115 +20,103 @@ along with this program. If not, see .
#pragma once
-//#define USE_MATRIX_I2C
-
/* Select hand configuration */
#define EE_HANDS
-#ifdef OLED_ENABLE
-# define OLED_TIMEOUT 600000
-#endif
-
-// #define FORCE_NKRO
+#define NO_ACTION_ONESHOT
+#define NO_USB_STARTUP_CHECK
-#define QMK_ESC_OUTPUT F4 // usually COL
-#define QMK_ESC_INPUT D4 // usually ROW
-#define QMK_LED B0
+#define LAYER_STATE_8BIT // 8 layer limit
-#define NO_ACTION_ONESHOT
+#define SPLIT_ACTIVITY_ENABLE
+#define SPLIT_LAYER_STATE_ENABLE
#ifdef RGB_MATRIX_ENABLE
-# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
-# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
-
-# define RGB_MATRIX_HUE_STEP 8
-# define RGB_MATRIX_SAT_STEP 12
-# define RGB_MATRIX_VAL_STEP 10
-# define RGB_MATRIX_SPD_STEP 10
+// Undefine r2g effects
# undef ENABLE_RGB_MATRIX_ALPHAS_MODS
-# undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
# undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-# undef ENABLE_RGB_MATRIX_BREATHING
+# undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
# undef ENABLE_RGB_MATRIX_BAND_SAT
# undef ENABLE_RGB_MATRIX_BAND_VAL
-# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-
-// #undef ENABLE_RGB_MATRIX_CYCLE_ALL
-// # undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
# undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-# undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
# undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-# undef ENABLE_RGB_MATRIX_DUAL_BEACON
-# undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
-// #undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
# undef ENABLE_RGB_MATRIX_RAINDROPS
-# undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# undef ENABLE_RGB_MATRIX_HUE_BREATHING
+# undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
+# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# undef ENABLE_RGB_MATRIX_SPLASH
+# undef ENABLE_RGB_MATRIX_SOLID_SPLASH
-# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-// #undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
-# undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
+# define SPLIT_TRANSACTION_IDS_USER USER_CONFIG_SYNC
-# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+# define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
+# define IDLE_TIMEOUT 60000 * 4
+# define GAMING_IDLE_TIMEOUT 10000
+# define RGB_MATRIX_TYPING_ACTIVE RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define RGB_MATRIX_TYPING_PASSIVE RGB_MATRIX_CYCLE_ALL
+# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 135
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-// # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define RGB_MATRIX_HUE_STEP 6
+# define RGB_MATRIX_SAT_STEP 8
+# define RGB_MATRIX_VAL_STEP 10
+# define RGB_MATRIX_SPD_STEP 10
-# undef ENABLE_RGB_MATRIX_SPLASH
-# undef ENABLE_RGB_MATRIX_MULTISPLASH
-# undef ENABLE_RGB_MATRIX_SOLID_SPLASH
-# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-# define RGB_MATRIX_ANIMATION_SPEED_DEFAULT UINT8_MAX / 2
-# define RGB_MATRIX_ANIMATION_SPEED_SLOW RGB_MATRIX_ANIMATION_SPEED_DEFAULT / 4
-# define RGB_MATRIX_ANIMATION_SPEED_SLOWER RGB_MATRIX_ANIMATION_SPEED_SLOW / 3
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+
+# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+
+# define RGB_MATRIX_ANIMATION_SPEED_FAST UINT8_MAX / 2
+# define RGB_MATRIX_ANIMATION_SPEED_MEDIUM UINT8_MAX / 4
+# define RGB_MATRIX_ANIMATION_SPEED_SLOW UINT8_MAX / 8
+# define RGB_MATRIX_ANIMATION_SPEED_SLOWER UINT8_MAX / 24
+
+# if defined(THEME_GODSPEED)
+# define THEME_HSV 132, 255, 125
+# elif defined(THEME_GODSPEED_ARES)
+# define THEME_HSV HSV_ORANGE
+# elif defined(THEME_LASER)
+# undef RGB_MATRIX_TYPING_ACTIVE
+# undef RGB_MATRIX_TYPING_PASSIVE
+# define THEME_HSV HSV_PURPLE
+# define RGB_MATRIX_TYPING_ACTIVE RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define RGB_MATRIX_TYPING_PASSIVE RGB_MATRIX_CYCLE_LEFT_RIGHT
+# elif defined(THEME_MILKSHAKE)
+# undef RGB_MATRIX_TYPING_ACTIVE
+# undef RGB_MATRIX_TYPING_PASSIVE
+# define THEME_HSV 30, 255, 218
+# define RGB_MATRIX_TYPING_ACTIVE RGB_MATRIX_TYPING_HEATMAP
+# define RGB_MATRIX_TYPING_PASSIVE RGB_MATRIX_CYCLE_LEFT_RIGHT
+# else
+# define THEME_HSV 123, 255, 125 // default to PULSE
+# endif
#endif
#define TAPPING_TERM 140
#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
+#define TAP_CODE_DELAY 10
#define TAPPING_TOGGLE 2
-#ifdef MOUSEKEY_ENABLE
-# define MOUSEKEY_DELAY 0
-# define MOUSEKEY_INTERVAL 16
-# define MOUSEKEY_MAX_SPEED 6
-# define MOUSEKEY_TIME_TO_MAX 36
-# define MOUSEKEY_WHEEL_MAX_SPEED 4
-# define MOUSEKEY_WHEEL_TIME_TO_MAX 100
-#endif
-
-#ifdef THEME_GODSPEED
-# define OLED_FONT_H "keyboards/crkbd/keymaps/rpbaptist/glcdfont_godspeed.c"
-# define THEME_HSV 132, 255, 125
-#endif
-
-#ifdef THEME_PULSE
-# define OLED_FONT_H "keyboards/crkbd/keymaps/rpbaptist/glcdfont_pulse.c"
-# define THEME_HSV 123, 255, 125
-#endif
-
-#ifdef THEME_LASER
-# define OLED_FONT_H "keyboards/crkbd/keymaps/rpbaptist/glcdfont_laser.c"
-# define THEME_HSV HSV_MAGENTA
+#ifdef OLED_ENABLE
+# define SPLIT_OLED_ENABLE
+# define OLED_TIMEOUT 60000 * 10
+# define OLED_FONT_H "glcdfont_multi.c"
#endif
-#define NO_ACTION_ONESHOT
-
#undef PRODUCT
#define PRODUCT "Corne Keyboard"
-
-#define LCPC_KEYS KC_LCTL, KC_LSFT, KC_9
-#define RCPC_KEYS KC_RCTL, KC_RSFT, KC_0
diff --git a/keyboards/crkbd/keymaps/rpbaptist/glcdfont_godspeed.c b/keyboards/crkbd/keymaps/rpbaptist/glcdfont_godspeed.c
deleted file mode 100644
index ac1f11dbbe2b..000000000000
--- a/keyboards/crkbd/keymaps/rpbaptist/glcdfont_godspeed.c
+++ /dev/null
@@ -1,231 +0,0 @@
-#include "progmem.h"
-
-// Helidox 8x6 font with QMK Firmware Logo
-// Online editor: http://teripom.x0.com/
-
-const unsigned char font[] PROGMEM = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
-0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
-0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
-0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
-0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
-0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
-0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
-0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
-0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
-0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
-0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
-0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
-0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
-0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
-0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
-0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
-0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
-0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
-0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
-0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
-0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
-0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
-0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
-0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
-0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
-0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
-0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
-0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
-0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
-0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
-0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
-0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
-0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
-0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
-0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
-0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
-0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
-0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
-0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
-0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
-0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
-0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
-0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
-0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
-0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
-0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
-0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
-0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
-0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
-0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
-0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
-0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
-0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
-0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
-0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
-0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
-0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
-0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
-0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
-0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
-0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
-0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
-0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
-0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
-0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
-0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
-0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
-0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
-0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
-0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
-0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
-0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
-0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
-0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
-0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
-0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
-0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
-0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
-0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
-0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
-0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
-0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
-0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
-0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
-0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
-0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
-0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
-0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
-0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
-0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
-0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
-0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
-0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
-0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
-0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
-0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
-0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
-0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
-0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
-0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
-0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
-0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
-0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
-0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
-0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
-0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
-0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
-0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
-0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
-0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
-0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
-0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
-0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
-0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
-0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
-0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
-0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
-0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
-0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
-0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
-0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
-0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
-0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
-0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
-0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
-0x38, 0x1C, 0x0C, 0x06, 0x03, 0x03,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x03, 0x03, 0x82, 0x86, 0xCC, 0xF8,
-0xF0, 0xF0, 0x38, 0x1C, 0x0C, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0xC0, 0x70,
-0xF8, 0x0C, 0x04, 0xC6, 0xA2, 0xB3,
-0x9F, 0x87, 0x01, 0x01, 0x1F, 0x66,
-0x66, 0x44, 0x4C, 0x58, 0x70, 0xE0,
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
-0xE0, 0x78, 0x18, 0x8C, 0xC6, 0xE6,
-0xE3, 0xE3, 0xC3, 0x83, 0x03, 0x03,
-0x73, 0x76, 0x76, 0x0C, 0x18, 0xF8,
-0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
-0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
-0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
-0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
-0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
-0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
-0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
-0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x80, 0xC0, 0x40, 0x7F, 0xF3,
-0x60, 0x20, 0x30, 0x30, 0x38, 0x18,
-0x9C, 0xCC, 0x6C, 0x6E, 0x3E, 0x3E,
-0x1F, 0x0F, 0x0F, 0x03, 0x03, 0x01,
-0xC0, 0xFF, 0x3E, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x7F, 0xC1, 0x00,
-0x1D, 0x67, 0xC0, 0x80, 0x01, 0x00,
-0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00,
-0x0C, 0x1A, 0x32, 0xC2, 0x01, 0xC1,
-0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x7E, 0xFF,
-0x80, 0x00, 0x00, 0xC3, 0xC7, 0xC7,
-0x8F, 0x0F, 0x07, 0x03, 0x80, 0xC0,
-0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x07,
-0x0F, 0xFF, 0x7F, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
-0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
-0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
-0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
-0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
-0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
-0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
-0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x01, 0x00, 0x40, 0x60, 0x31,
-0x3B, 0x1E, 0x0C, 0x1E, 0x36, 0x23,
-0x61, 0x60, 0x60, 0x60, 0x60, 0x60,
-0x60, 0x30, 0x1C, 0x3E, 0x3E, 0x3F,
-0x1D, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
-0x0C, 0x18, 0x10, 0x33, 0x3E, 0x38,
-0x6E, 0x67, 0x60, 0x60, 0x60, 0x20,
-0x30, 0x18, 0x08, 0x0F, 0x06, 0x03,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x03, 0x06, 0x0C, 0x19, 0x31, 0x21,
-0x60, 0x60, 0x60, 0x60, 0x61, 0x63,
-0x67, 0x67, 0x33, 0x39, 0x18, 0x0E,
-0x07, 0x03, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
diff --git a/keyboards/crkbd/keymaps/rpbaptist/glcdfont_laser.c b/keyboards/crkbd/keymaps/rpbaptist/glcdfont_laser.c
deleted file mode 100644
index 612b7123b093..000000000000
--- a/keyboards/crkbd/keymaps/rpbaptist/glcdfont_laser.c
+++ /dev/null
@@ -1,231 +0,0 @@
-#include "progmem.h"
-
-// Helidox 8x6 font with QMK Firmware Logo
-// Online editor: http://teripom.x0.com/
-
-const unsigned char font[] PROGMEM = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
-0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
-0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
-0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
-0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
-0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
-0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
-0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
-0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
-0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
-0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
-0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
-0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
-0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
-0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
-0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
-0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
-0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
-0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
-0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
-0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
-0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
-0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
-0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
-0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
-0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
-0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
-0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
-0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
-0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
-0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
-0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
-0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
-0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
-0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
-0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
-0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
-0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
-0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
-0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
-0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
-0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
-0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
-0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
-0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
-0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
-0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
-0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
-0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
-0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
-0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
-0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
-0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
-0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
-0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
-0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
-0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
-0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
-0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
-0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
-0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
-0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
-0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
-0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
-0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
-0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
-0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
-0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
-0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
-0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
-0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
-0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
-0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
-0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
-0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
-0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
-0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
-0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
-0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
-0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
-0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
-0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
-0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
-0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
-0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
-0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
-0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
-0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
-0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
-0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
-0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
-0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
-0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
-0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
-0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
-0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
-0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
-0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
-0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
-0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
-0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
-0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
-0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
-0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
-0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
-0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
-0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
-0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
-0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
-0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
-0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
-0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
-0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
-0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
-0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
-0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
-0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
-0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
-0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
-0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
-0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
-0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
-0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
-0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
-0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 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,
-0xE0, 0xF8, 0x3E, 0x0F, 0x03, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
-0xE0, 0xF0, 0xF8, 0xFC, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0xE0, 0xF0, 0x7C,
-0x3F, 0x0F, 0x03, 0x03, 0x03, 0x03,
-0x03, 0x03, 0x1B, 0x1F, 0x1F, 0x07,
-0x03, 0xC0, 0xE0, 0xFC, 0x1C, 0x0F,
-0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-0xE7, 0xFF, 0xFF, 0x0F, 0x03, 0x03,
-0x03, 0x03, 0x83, 0x83, 0xE3, 0xE7,
-0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
-0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
-0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
-0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
-0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
-0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
-0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
-0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x80, 0xC0, 0xF0, 0x7C, 0x1F, 0x07,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
-0x80, 0x90, 0x98, 0x9C, 0x8C, 0x80,
-0x80, 0x80, 0x9C, 0x9C, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
-0x10, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
-0x1C, 0x1C, 0x9C, 0x9C, 0x1C, 0x1C,
-0x0C, 0x0C, 0x80, 0x90, 0x90, 0x10,
-0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
-0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0C,
-0x00, 0x00, 0x90, 0x90, 0x9C, 0x9C,
-0x1C, 0x1C, 0x1C, 0x1C, 0x9C, 0x9C,
-0x9C, 0x0C, 0x0C, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
-0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
-0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
-0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
-0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
-0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
-0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
-0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x70, 0x7C, 0x7E,
-0x6F, 0x63, 0x60, 0x60, 0x60, 0x60,
-0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
-0x60, 0x70, 0x78, 0x3C, 0x1E, 0x0F,
-0x07, 0x03, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x01, 0x7F, 0x7F, 0x00, 0x00,
-0x60, 0x70, 0x7C, 0x7C, 0x6C, 0x60,
-0x60, 0x60, 0x60, 0x60, 0x60, 0x78,
-0x3E, 0x0F, 0x03, 0x01, 0x00, 0x60,
-0x78, 0x7E, 0x67, 0x61, 0x60, 0x60,
-0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
-0x70, 0x00, 0x00, 0x00, 0x00, 0x60,
-0x78, 0x7E, 0x0F, 0x07, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x03, 0x0F,
-0x7F, 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, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
diff --git a/keyboards/crkbd/keymaps/rpbaptist/glcdfont_multi.c b/keyboards/crkbd/keymaps/rpbaptist/glcdfont_multi.c
new file mode 100644
index 000000000000..28d228190cb9
--- /dev/null
+++ b/keyboards/crkbd/keymaps/rpbaptist/glcdfont_multi.c
@@ -0,0 +1,36 @@
+// Copyright 2023 Your Name (@rpbaptist)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "progmem.h"
+
+// Helidox 8x6 font with QMK Firmware Logo
+// Online editor: https://joric.github.io/qle/
+
+const unsigned char font[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
+ 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
+ 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
+ 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x03, 0x07, 0x08, 0x00, 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
+ 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+#if defined(THEME_GODSPEED) || defined(THEME_GODSPEED_ARES)
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x38, 0x1C, 0x0C, 0x06, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x82, 0x86, 0xCC, 0xF8, 0xF0, 0xF0, 0x38, 0x1C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x70, 0xF8, 0x0C, 0x04, 0xC6, 0xA2, 0xB3, 0x9F, 0x87, 0x01, 0x01, 0x1F, 0x66, 0x66, 0x44, 0x4C, 0x58, 0x70, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x78, 0x18, 0x8C, 0xC6, 0xE6, 0xE3, 0xE3, 0xC3, 0x83, 0x03, 0x03, 0x73, 0x76, 0x76, 0x0C, 0x18, 0xF8, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+ 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x40, 0x7F, 0xF3, 0x60, 0x20, 0x30, 0x30, 0x38, 0x18, 0x9C, 0xCC, 0x6C, 0x6E, 0x3E, 0x3E, 0x1F, 0x0F, 0x0F, 0x03, 0x03, 0x01, 0xC0, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC1, 0x00, 0x1D, 0x67, 0xC0, 0x80, 0x01, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x0C, 0x1A, 0x32, 0xC2, 0x01, 0xC1, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFF,
+ 0x80, 0x00, 0x00, 0xC3, 0xC7, 0xC7, 0x8F, 0x0F, 0x07, 0x03, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x07, 0x0F, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x40, 0x60, 0x31, 0x3B, 0x1E, 0x0C, 0x1E, 0x36, 0x23, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x1C, 0x3E, 0x3E, 0x3F, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0C, 0x18, 0x10, 0x33, 0x3E, 0x38, 0x6E, 0x67, 0x60, 0x60, 0x60, 0x20, 0x30, 0x18, 0x08, 0x0F, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x19, 0x31, 0x21, 0x60, 0x60, 0x60, 0x60, 0x61, 0x63, 0x67, 0x67, 0x33, 0x39, 0x18, 0x0E, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+#elif defined(THEME_LASER)
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xE0, 0xF8, 0x3E, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0x7C, 0x3F, 0x0F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1F, 0x1F, 0x07, 0x03, 0xC0, 0xE0, 0xFC, 0x1C, 0x0F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xE7, 0xFF, 0xFF, 0x0F, 0x03, 0x03, 0x03, 0x03, 0x83, 0x83, 0xE3, 0xE7, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+ 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xF0, 0x7C, 0x1F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x90, 0x98, 0x9C, 0x8C, 0x80, 0x80, 0x80, 0x9C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x9C, 0x9C, 0x1C, 0x1C, 0x0C, 0x0C, 0x80, 0x90, 0x90, 0x10, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0C,
+ 0x00, 0x00, 0x90, 0x90, 0x9C, 0x9C, 0x1C, 0x1C, 0x1C, 0x1C, 0x9C, 0x9C, 0x9C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x7C, 0x7E, 0x6F, 0x63, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x7F, 0x7F, 0x00, 0x00, 0x60, 0x70, 0x7C, 0x7C, 0x6C, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x3E, 0x0F, 0x03, 0x01, 0x00, 0x60, 0x78, 0x7E, 0x67, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x00, 0x00, 0x00, 0x00, 0x60, 0x78, 0x7E, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x7F, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+#elif defined(THEME_MILKSHAKE)
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFC, 0xFE, 0xFE, 0xFE, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xFC, 0x7C, 0x7C, 0x7C, 0xFC, 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+ 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xF8, 0xFC, 0xFE, 0xFF, 0xDF, 0x8F, 0x07, 0x03, 0x00, 0x00, 0x70, 0xF8, 0xF8, 0xF8, 0xF8, 0xFC, 0x7C, 0x7E, 0x3F, 0x3F, 0x1F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF1, 0xFB, 0xFF, 0xFF, 0x7F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFB, 0xF1, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x0E, 0x1F, 0x1F, 0x1F, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xF0, 0xF0, 0xF0, 0xE0, 0xC1, 0x83, 0x03, 0x83, 0xC1, 0xE0, 0xF0, 0xF0, 0xF0, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x1F, 0x1F, 0x1F, 0x0E, 0x00, 0x00, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xF1, 0xE0, 0xC0, 0xC0, 0xC0, 0xE0, 0xF1, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+#else // default PULSE
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xF0, 0xF8, 0xF8, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xFE, 0x7F, 0x7F, 0xFE, 0xF0, 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, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+ 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x0F, 0x03, 0x03, 0x1F, 0xFF, 0xFC, 0xE0, 0xE0, 0xFC, 0xFF, 0x1F, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xFF, 0xFC, 0xE0, 0xE0, 0xF8, 0xFC, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+#endif
+};
diff --git a/keyboards/crkbd/keymaps/rpbaptist/glcdfont_pulse.c b/keyboards/crkbd/keymaps/rpbaptist/glcdfont_pulse.c
deleted file mode 100644
index 3699f4500b76..000000000000
--- a/keyboards/crkbd/keymaps/rpbaptist/glcdfont_pulse.c
+++ /dev/null
@@ -1,231 +0,0 @@
-#include "progmem.h"
-
-// Helidox 8x6 font with QMK Firmware Logo
-// Online editor: http://teripom.x0.com/
-
-const unsigned char font[] PROGMEM = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
- 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
- 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
- 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
- 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
- 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
- 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
- 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
- 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
- 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
- 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
- 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
- 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
- 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
- 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
- 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
- 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
- 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
- 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
- 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
- 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
- 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
- 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
- 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
- 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
- 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
- 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
- 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
- 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
- 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
- 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
- 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
- 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
- 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
- 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
- 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
- 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
- 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
- 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
- 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
- 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
- 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
- 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
- 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
- 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
- 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
- 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
- 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
- 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
- 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
- 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
- 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
- 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
- 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
- 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
- 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
- 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
- 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
- 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
- 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
- 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
- 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
- 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
- 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
- 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
- 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
- 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
- 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
- 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
- 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
- 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
- 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
- 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
- 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
- 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
- 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
- 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
- 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
- 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
- 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
- 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
- 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
- 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
- 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
- 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
- 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
- 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
- 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
- 0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
- 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
- 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
- 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
- 0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
- 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
- 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
- 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
- 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
- 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
- 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
- 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
- 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
- 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
- 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
- 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
- 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
- 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
- 0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
- 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
- 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
- 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
- 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
- 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
- 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
- 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
- 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
- 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
- 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
- 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
- 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 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, 0xF0, 0xF8, 0xF8, 0xF0,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xF0, 0xFE, 0x7F, 0x7F, 0xFE, 0xF0,
- 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,
- 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
- 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
- 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
- 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
- 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
- 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
- 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
- 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1F, 0x0F, 0x03, 0x03, 0x1F,
- 0xFF, 0xFC, 0xE0, 0xE0, 0xFC, 0xFF,
- 0x1F, 0x03, 0x00, 0x00, 0x03, 0x1F,
- 0xFF, 0xFC, 0xE0, 0xE0, 0xF8, 0xFC,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
- 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
- 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
- 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
- 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
- 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
- 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
- 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x0F, 0x0F, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x0F, 0x0F, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
diff --git a/keyboards/crkbd/keymaps/rpbaptist/keymap.c b/keyboards/crkbd/keymaps/rpbaptist/keymap.c
index aeeae2cbd82f..fc05a554036e 100644
--- a/keyboards/crkbd/keymaps/rpbaptist/keymap.c
+++ b/keyboards/crkbd/keymaps/rpbaptist/keymap.c
@@ -1,474 +1,152 @@
-#include QMK_KEYBOARD_H
+// Copyright 2023 Your Name (@rpbaptist)
+// SPDX-License-Identifier: GPL-2.0-or-later
-static uint32_t oled_timer = 0;
-
-#ifdef RGB_MATRIX_ENABLE
- static uint32_t hypno_timer;
-#endif
-
-enum layer_names {
- _COLEMAKDHM,
- _GAMING,
- _GAMING_EXT,
- _NUMPAD,
- _SYM,
- _NAV,
- _UTIL
-};
-
-enum custom_keycodes {
- BSP_DEL = SAFE_RANGE,
- RGB_RST, // Reset RGB
- RGB_UND, // Toggle RGB underglow as layer indicator
- RGB_IDL, // RGB Idling animations
- RGB_MAP, // RGB_MATRIX_TYPING_HEATMAP
- RGB_NXS, // RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
- RGB_SOL, // RGB_MATRIX_SOLID_COLOR
- RGB_CYC, // RGB_MATRIX_CYCLE_ALL
- RGB_DUO, // RGB_MATRIX_RAINBOW_PINWHEELS
- RGB_SCR // RGB_MATRIX_CYCLE_LEFT_RIGHT
-};
-
-typedef union {
- uint32_t raw;
- struct {
- bool rgb_layer_change : 1;
- bool rgb_matrix_idle_anim : 1;
- uint8_t rgb_matrix_active_mode : 4;
- uint8_t rgb_matrix_idle_mode : 4;
- uint8_t rgb_matrix_active_speed : 8;
- uint8_t rgb_matrix_idle_speed : 8;
- uint16_t rgb_matrix_idle_timeout : 16;
- };
-} user_config_t;
-
-user_config_t user_config;
-
-// Base layers
-#define COLEMAK DF(_COLEMAKDHM)
-#define GAMING DF(_GAMING)
-
-// Layer toggle and switch
-#define T_NAV TT(_NAV)
-#define S_NAV MO(_NAV)
-
-#define T_SYM TT(_SYM)
-#define S_SYM MO(_SYM)
-
-// Layer keys with functionality on tap
-#define NAV_0 LT(_NAV, KC_0)
-#define TAB_NUM LT(_NUMPAD, KC_TAB)
-
-#define EXT_SF LT(_GAMING_EXT, KC_LSFT)
-
-// Tap/mod keys
-#define RCTL_BR RCTL_T(KC_RBRC)
-#define LCTL_BR LCTL_T(KC_LBRC)
-
-#define SFT_SPC LSFT_T(KC_SPACE)
-#define SFT_ENT RSFT_T(KC_ENTER)
-
-// Global tab forward and backward
-#define TAB_FWD LCTL(KC_TAB)
-#define TAB_BCK LCTL(LSFT(KC_TAB))
-#define TAB_CLS LCTL(KC_W)
-
-#define WIN_CLS LALT(KC_F4)
-
-// CTRL become parens keys on NAV and NUM layers
-#define LCT_PRN SC_LCPO
-#define RCT_PRN SC_RCPC
-
-// €
-#define KC_EUR ALGR(KC_5)
+#include "rpbaptist.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_COLEMAKDHM] = LAYOUT_split_3x6_3(
+ [_COLEMAKDH] = LAYOUT_split_3x6_3( \
//,-----------------------------------------------------. ,-----------------------------------------------------.
- KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, BSP_DEL,
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, BSP_DEL,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- TAB_NUM, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ TAB_NUM, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- LCTL_BR, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, RCTL_BR,
+ LCTL_BR, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, RCTL_BR,\
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
- KC_LALT, T_SYM, SFT_SPC, SFT_ENT, T_NAV, KC_RGUI
+ KC_LALT, T_SYM, SFT_SPC, SFT_ENT, T_NAV, KC_RGUI \
//`--------------------------' `--------------------------'
),
- [_GAMING] = LAYOUT_split_3x6_3(
+ [_GAMING] = LAYOUT_split_3x6_3( \
//,-----------------------------------------------------. ,-----------------------------------------------------.
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RCTL,
+ KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RCTL,\
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
- _______, EXT_SF, KC_SPC, _______, _______, _______
+ EXTALT, KC_LSFT, KC_SPC, _______, _______, _______ \
//`--------------------------' `--------------------------'
),
- [_GAMING_EXT] = LAYOUT_split_3x6_3(
+ [_WASD] = LAYOUT_split_3x6_3( \
//,-----------------------------------------------------. ,-----------------------------------------------------.
- KC_GRV, KC_1, KC_2, _______, KC_3, KC_4, _______, _______, _______, _______, _______, KC_DEL,
+ _______, KC_T, KC_Q, KC_W, KC_E, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- KC_LBRC, KC_RBRC, _______, _______, _______, KC_BSLS, _______, _______, _______, _______, _______, _______,
+ KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_SCLN, _______,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, _______, _______, _______,
+ KC_LCTL, KC_B, KC_Z, KC_X, KC_C, KC_V, KC_N, KC_M, _______, _______, _______, KC_RCTL,\
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
- _______, _______, _______, KC_ENT, _______, _______
+ EXTALT, KC_LSFT, KC_SPC, _______, _______, _______ \
//`--------------------------' `--------------------------'
),
- [_NUMPAD] = LAYOUT_split_3x6_3(
+ [_GAMING_EXT] = LAYOUT_split_3x6_3( \
//,-----------------------------------------------------. ,-----------------------------------------------------.
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_EUR, KC_P7, KC_P8, KC_P9, XXXXXXX, _______,
+ KC_GRV, KC_Y, KC_I, KC_J, KC_M, KC_N, _______, _______, _______, _______, _______, KC_DEL,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PPLS,
+ KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NUM, KC_EQL, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_PAST,
+ KC_CAPS, KC_6, KC_7, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______, _______, _______,\
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
- _______, _______, _______, _______, KC_P0, KC_DOT
+ _______, KC_LALT, KC_ENT, KC_ENT, _______, _______ \
//`--------------------------' `--------------------------'
),
- [_SYM] = LAYOUT_split_3x6_3(
+ [_NUMPAD] = LAYOUT_split_3x6_3( \
//,-----------------------------------------------------. ,-----------------------------------------------------.
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, XXXXXXX, KC_MPRV, KC_VOLU, KC_MNXT, XXXXXXX, KC_EUR, KC_7, KC_8, KC_9, _______, _______,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_MINS, KC_PLUS,
+ S_NUM, XXXXXXX, KC_MSTP, KC_VOLD, KC_MPLY, XXXXXXX, KC_UNDS, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- LCT_PRN, XXXXXXX, XXXXXXX, XXXXXXX, KC_EUR, XXXXXXX, KC_EQL, KC_PIPE, KC_LT, KC_GT, KC_BSLS, RCT_PRN,
+ SC_LCPO, XXXXXXX, XXXXXXX, KC_MUTE, KC_PSCR, KC_NUM, KC_EQL, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR,\
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
- _______, S_SYM, _______, _______, _______, _______
+ _______, _______, _______, _______, KC_0, KC_DOT \
//`--------------------------' `--------------------------'
),
- [_NAV] = LAYOUT_split_3x6_3(
+ [_SYM] = LAYOUT_split_3x6_3( \
//,-----------------------------------------------------. ,-----------------------------------------------------.
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX, 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_TILD, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX,
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_MINS, KC_PLUS,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- LCT_PRN, KC_F11, KC_F12, KC_INS, KC_PSCR, KC_CAPS, WIN_CLS, TAB_BCK, TAB_CLS, TAB_FWD, XXXXXXX, RCT_PRN,
+ SC_LCPO, XXXXXXX, XXXXXXX, XXXXXXX, KC_EUR, XXXXXXX, KC_EQL, KC_PIPE, KC_LT, KC_GT, KC_EXLM, SC_RCPC,\
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, S_SYM, _______, _______, _______, _______ \
+ //`--------------------------' `--------------------------'
+ ),
+
+ [_NAV] = LAYOUT_split_3x6_3( \
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_INS, KC_BSPC,\
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_TILD, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_RSFT,\
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ SC_LCPO, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_CAPS, WIN_CLS, TAB_BCK, TAB_CLS, TAB_FWD, KC_BSLS, SC_RCPC,\
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+---------|
- _______, _______, _______, _______, S_NAV, _______
+ _______, _______, _______, _______, S_NAV, _______ \
//`--------------------------' `--------------------------'
),
- [_UTIL] = LAYOUT_split_3x6_3(
+ [_UTIL] = LAYOUT_split_3x6_3( \
//,-----------------------------------------------------. ,-----------------------------------------------------.
- QK_BOOT, XXXXXXX, KC_MPRV, KC_VOLU, KC_MNXT, COLEMAK, RGB_IDL, RGB_MAP, RGB_NXS, XXXXXXX, RGB_HUD, RGB_HUI,
+ QK_BOOT, RGB_RST, XXXXXXX, XXXXXXX, XXXXXXX, TYPING, RGB_ATG, XXXXXXX, XXXXXXX, RGB_IDL, RGB_UND, RGB_TOG,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- RGB_RST, XXXXXXX, KC_MSTP, KC_VOLD, KC_MPLY, GAMING, RGB_UND, RGB_DUO, RGB_SCR, RGB_SPI, RGB_SAD, RGB_SAI,
+ LCK_NMP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, GAMING, RGB_PST, XXXXXXX, RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI,\
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
- EE_CLR, KC_SLEP, XXXXXXX, KC_MUTE, XXXXXXX, XXXXXXX, RGB_TOG, RGB_SOL, RGB_CYC, RGB_SPD, RGB_VAD, RGB_VAI,
+ EE_CLR, KC_SLEP, XXXXXXX, XXXXXXX, XXXXXXX, WASD, RGB_PCT, XXXXXXX, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD,\
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
- _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______ \
//`--------------------------' `--------------------------'
)
};
layer_state_t layer_state_set_user(layer_state_t state) {
switch (get_highest_layer(default_layer_state)) {
- case _COLEMAKDHM:
+ case _COLEMAKDH:
state = update_tri_layer_state(state, _SYM, _NAV, _UTIL);
break;
case _GAMING:
+ case _WASD:
state = update_tri_layer_state(state, _GAMING_EXT, _NAV, _UTIL);
break;
}
return state;
}
+void suspend_power_down_keymap(void) {
#ifdef OLED_ENABLE
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- if (is_keyboard_master()) {
- return OLED_ROTATION_270;
- } else {
- return OLED_ROTATION_180;
- }
-}
-
-void render_crkbd_logo(void) {
- static const char PROGMEM crkbd_logo[] = {
- 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
- 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
- 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
- 0};
- oled_write_P(crkbd_logo, false);
-}
-
-# ifdef RGB_MATRIX_ENABLE
-const char *rgb_matrix_anim_oled_text(uint8_t mode) {
- switch (mode) {
- case RGB_MATRIX_TYPING_HEATMAP:
- return PSTR("Heat ");
- case RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS:
- return PSTR("Nexus");
- case RGB_MATRIX_SOLID_COLOR:
- return PSTR("Solid");
- case RGB_MATRIX_CYCLE_ALL:
- return PSTR("Cycle");
- case RGB_MATRIX_RAINBOW_PINWHEELS:
- return PSTR("Wheel");
- case RGB_MATRIX_CYCLE_LEFT_RIGHT:
- return PSTR("Wave ");
- default:
- return PSTR("");
- }
-}
-# endif
-
-void render_status(void) {
- // oled_write_P(PSTR("Layout: "), false);
- switch (get_highest_layer(default_layer_state)) {
- case _COLEMAKDHM:
- oled_write_P(PSTR("TYPE "), false);
- break;
- case _GAMING:
- oled_write_P(PSTR("GAME "), false);
- break;
- }
-
- oled_write_P(PSTR("\n"), false);
-
- switch (get_highest_layer(layer_state)) {
- case 0:
- oled_write_P(PSTR(" "), false);
- break;
- case _SYM:
- oled_write_P(PSTR("Sym "), false);
- break;
- case _NAV:
- oled_write_P(PSTR("Nav "), false);
- break;
- case _GAMING_EXT:
- oled_write_P(PSTR("Ext "), false);
- break;
- case _NUMPAD:
- oled_write_P(PSTR("Num "), false);
- break;
- case _UTIL:
- oled_write_P(PSTR("Util "), false);
- break;
- default:
- oled_write_P(PSTR("Unkn "), false);
- break;
- }
- oled_write_P(PSTR("\n"), false);
-
- uint8_t modifiers = get_mods();
-
- oled_write_P((modifiers & MOD_MASK_SHIFT) ? PSTR("SHIFT") : PSTR("\n"), false);
- oled_write_P((modifiers & MOD_MASK_CTRL) ? PSTR("CTRL ") : PSTR("\n"), false);
- oled_write_P((modifiers & MOD_MASK_ALT) ? PSTR("ALT ") : PSTR("\n"), false);
- oled_write_P((modifiers & MOD_MASK_GUI) ? PSTR("SUPER") : PSTR("\n"), false);
-
- oled_write_P(PSTR("\n"), false);
-
- uint8_t led_usb_state = host_keyboard_leds();
- oled_write_P(PSTR("Mode:"), false);
- oled_write_P(IS_LED_ON(led_usb_state, USB_LED_NUM_LOCK) ? PSTR(" NUM ") : PSTR("\n"), false);
- oled_write_P(IS_LED_ON(led_usb_state, USB_LED_CAPS_LOCK) ? PSTR(" CAPS") : PSTR("\n"), false);
-
-# ifdef RGB_MATRIX_ENABLE
- oled_write_P(PSTR("\n"), false);
- oled_write_P(PSTR("\n"), false);
-
- if (rgb_matrix_config.enable) {
- if (user_config.rgb_matrix_idle_anim) {
- oled_write_P(rgb_matrix_anim_oled_text(user_config.rgb_matrix_active_mode), false);
- oled_write_P(rgb_matrix_anim_oled_text(user_config.rgb_matrix_idle_mode), false);
- } else {
- oled_write_P(PSTR("\n"), false);
- oled_write_P(rgb_matrix_anim_oled_text(rgb_matrix_get_mode()), false);
- }
- } else {
- oled_write_P(PSTR("\n"), false);
- oled_write_P(PSTR("\n"), false);
- }
-# endif
-}
-
-bool oled_task_user(void) {
- if (timer_elapsed32(oled_timer) > OLED_TIMEOUT) {
- oled_off();
- return;
- } else {
- oled_on();
- }
-
- if (is_keyboard_master()) {
- render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
- } else {
- render_crkbd_logo();
- #ifdef RGB_MATRIX_ENABLE
- if (user_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == user_config.rgb_matrix_idle_mode) {
- oled_scroll_left(); // Turns on scrolling
- } else {
- oled_scroll_off();
- }
- #endif
- }
- return false;
-}
+ oled_off();
#endif
-
#ifdef RGB_MATRIX_ENABLE
-
-extern led_config_t g_led_config;
-void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t led_type) {
- HSV hsv = {hue, sat, val};
- if (hsv.v > rgb_matrix_config.hsv.v) {
- hsv.v = rgb_matrix_config.hsv.v;
- }
-
- RGB rgb = hsv_to_rgb(hsv);
- for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; i++) {
- if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
- rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
- }
- }
-}
-
-void check_default_layer(uint8_t type) {
- switch (get_highest_layer(default_layer_state)) {
- case _COLEMAKDHM:
- rgb_matrix_layer_helper(THEME_HSV, type);
- break;
- case _GAMING:
- rgb_matrix_layer_helper(HSV_RED, type);
- break;
- }
-}
-
-bool rgb_matrix_indicators_user(void) {
- if (
- user_config.rgb_layer_change && rgb_matrix_config.enable &&
- (!user_config.rgb_matrix_idle_anim || rgb_matrix_get_mode() != user_config.rgb_matrix_idle_mode)
- )
- {
- switch (get_highest_layer(layer_state)) {
- case _GAMING_EXT:
- rgb_matrix_layer_helper(HSV_PURPLE, LED_FLAG_UNDERGLOW);
- break;
- case _SYM:
- rgb_matrix_layer_helper(HSV_GOLDENROD, LED_FLAG_UNDERGLOW);
- break;
- case _NAV:
- rgb_matrix_layer_helper(HSV_SPRINGGREEN, LED_FLAG_UNDERGLOW);
- break;
- case _UTIL:
- rgb_matrix_layer_helper(HSV_PINK, LED_FLAG_UNDERGLOW);
- break;
- case _NUMPAD:
- rgb_matrix_layer_helper(HSV_CORAL, LED_FLAG_UNDERGLOW);
- break;
- default: {
- check_default_layer(LED_FLAG_UNDERGLOW);
- break;
- }
- }
- }
- return false;
-}
-
-void rgb_matrix_update_current_mode(uint8_t mode, uint8_t speed) {
- rgb_matrix_config.speed = speed;
- rgb_matrix_mode_noeeprom(mode);
- eeconfig_update_user(user_config.raw);
-}
-
-void rgb_matrix_update_dynamic_mode(uint8_t mode, uint8_t speed, bool active) {
- if (active) {
- user_config.rgb_matrix_active_speed = speed;
- user_config.rgb_matrix_active_mode = mode;
- } else {
- user_config.rgb_matrix_idle_speed = speed;
- user_config.rgb_matrix_idle_mode = mode;
- }
-}
-
-void rgb_matrix_update_mode(uint8_t mode, uint8_t speed, bool active) {
- if (user_config.rgb_matrix_idle_anim) {
- rgb_matrix_update_dynamic_mode(mode, speed, active);
- }
- if (active || !user_config.rgb_matrix_idle_anim) {
- rgb_matrix_update_current_mode(mode, speed);
- }
-}
-
-void rgb_matrix_set_defaults(void) {
- rgb_matrix_config.enable = 1;
- rgb_matrix_sethsv_noeeprom(THEME_HSV);
-
- user_config.rgb_layer_change = false;
- user_config.rgb_matrix_idle_anim = true;
- user_config.rgb_matrix_idle_timeout = 60000;
-
- rgb_matrix_update_dynamic_mode(RGB_MATRIX_CYCLE_ALL, RGB_MATRIX_ANIMATION_SPEED_SLOWER, false);
- rgb_matrix_update_dynamic_mode(RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS, RGB_MATRIX_ANIMATION_SPEED_DEFAULT, true);
-
- eeprom_update_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config));
-}
-
-void matrix_scan_rgb(void) {
- if (user_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == user_config.rgb_matrix_active_mode && timer_elapsed32(hypno_timer) > user_config.rgb_matrix_idle_timeout) {
- if (user_config.rgb_layer_change) {
- rgb_matrix_layer_helper(0, 0, 0, LED_FLAG_UNDERGLOW);
- }
- rgb_matrix_update_current_mode(user_config.rgb_matrix_idle_mode, user_config.rgb_matrix_idle_speed);
- }
-}
-
-void matrix_scan_user(void) {
- static bool has_ran_yet;
- if (!has_ran_yet) {
- has_ran_yet = true;
- startup_user();
- }
- matrix_scan_rgb();
-}
-
-void eeconfig_init_user(void) {
- user_config.raw = 0;
- rgb_matrix_mode_noeeprom(user_config.rgb_matrix_active_mode);
- keyboard_init();
-}
-
-void keyboard_post_init_user(void) {
- user_config.raw = eeconfig_read_user();
- rgb_matrix_set_defaults();
- rgb_matrix_enable_noeeprom();
-}
-#endif
-
-void suspend_power_down_keymap(void) {
- oled_off();
rgb_matrix_set_suspend_state(true);
+#endif
}
void suspend_wakeup_init_keymap(void) {
+#ifdef OLED_ENABLE
oled_on();
+#endif
+#ifdef RGB_MATRIX_ENABLE
rgb_matrix_set_suspend_state(false);
+#endif
+}
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_ENT:
+ return TAPPING_TERM - 20;
+ default:
+ return TAPPING_TERM;
+ }
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
static uint8_t saved_mods = 0;
uint16_t temp_keycode = keycode;
- oled_timer = timer_read32();
-
#ifdef RGB_MATRIX_ENABLE
- if (user_config.rgb_matrix_idle_anim) {
- hypno_timer = timer_read32();
- if (rgb_matrix_get_mode() == user_config.rgb_matrix_idle_mode) {
- rgb_matrix_update_current_mode(user_config.rgb_matrix_active_mode, user_config.rgb_matrix_active_speed);
- if (!user_config.rgb_layer_change) {
- rgb_matrix_layer_helper(0, 0, 0, LED_FLAG_UNDERGLOW);
- }
- }
- }
+ process_record_user_rgb_matrix(temp_keycode, record);
#endif
// Filter out the actual keycode from MT and LT keys.
@@ -481,12 +159,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
saved_mods = get_mods() & MOD_MASK_SHIFT;
- if (saved_mods == MOD_MASK_SHIFT) { // Both shifts pressed
+ if (saved_mods == MOD_MASK_SHIFT) { // Both shifts pressed
register_code(KC_DEL);
- } else if (saved_mods) { // One shift pressed
- del_mods(saved_mods); // Remove any Shifts present
+ } else if (saved_mods) { // One shift pressed
+ del_mods(saved_mods); // Remove any Shifts present
register_code(KC_DEL);
- add_mods(saved_mods); // Add shifts again
+ add_mods(saved_mods); // Add shifts again
} else {
register_code(KC_BSPC);
}
@@ -495,80 +173,40 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
unregister_code(KC_BSPC);
}
return false;
-#ifdef RGB_MATRIX_ENABLE
- case COLEMAK:
+ case TYPING:
if (record->event.pressed) {
- user_config.rgb_matrix_idle_timeout = 60000;
- rgb_matrix_update_mode(RGB_MATRIX_CYCLE_ALL, RGB_MATRIX_ANIMATION_SPEED_SLOWER, false);
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_set_typing_defaults();
+#endif
+ default_layer_set(1U << _COLEMAKDH);
}
return true;
case GAMING:
if (record->event.pressed) {
- if (!user_config.rgb_layer_change) {
- user_config.rgb_layer_change = true;
- }
- user_config.rgb_matrix_idle_timeout = 10000;
- rgb_matrix_update_mode(RGB_MATRIX_RAINBOW_PINWHEELS, RGB_MATRIX_ANIMATION_SPEED_SLOW, false);
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_set_gaming_defaults();
+#endif
+ default_layer_set(1U << _GAMING);
}
return true;
- case RGB_RST:
- if (record->event.pressed) {
- rgb_matrix_set_defaults();
- rgb_matrix_enable();
- }
- break;
- case RGB_UND: // Toggle separate underglow status
- if (record->event.pressed) {
- user_config.rgb_layer_change ^= 1;
- eeconfig_update_user(user_config.raw);
- if (user_config.rgb_layer_change) {
- layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
- } else {
- rgb_matrix_layer_helper(0, 0, 0, LED_FLAG_UNDERGLOW);
- }
- }
- break;
- case RGB_IDL: // Toggle idle/heatmap animation
- if (record->event.pressed) {
- user_config.rgb_matrix_idle_anim ^= 1;
- if (user_config.rgb_matrix_idle_anim) {
- rgb_matrix_update_mode(user_config.rgb_matrix_active_mode, user_config.rgb_matrix_active_speed, true);
- } else {
- rgb_matrix_update_current_mode(user_config.rgb_matrix_idle_mode, user_config.rgb_matrix_idle_speed);
- }
- }
- break;
- case RGB_MAP:
- if (record->event.pressed) {
- rgb_matrix_update_mode(RGB_MATRIX_TYPING_HEATMAP, rgb_matrix_config.speed, true);
- }
- break;
- case RGB_NXS:
+ case WASD:
if (record->event.pressed) {
- rgb_matrix_update_mode(RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS, RGB_MATRIX_ANIMATION_SPEED_DEFAULT, true);
- }
- break;
- case RGB_SOL:
- if (record->event.pressed) {
- rgb_matrix_update_mode(RGB_MATRIX_SOLID_COLOR, rgb_matrix_config.speed, false);
- }
- break;
- case RGB_CYC:
- if (record->event.pressed) {
- rgb_matrix_update_mode(RGB_MATRIX_CYCLE_ALL, RGB_MATRIX_ANIMATION_SPEED_SLOWER, false);
- }
- break;
- case RGB_DUO:
- if (record->event.pressed) {
- rgb_matrix_update_mode(RGB_MATRIX_RAINBOW_PINWHEELS, RGB_MATRIX_ANIMATION_SPEED_SLOW, false);
- }
- break;
- case RGB_SCR:
- if (record->event.pressed) {
- rgb_matrix_update_mode(RGB_MATRIX_CYCLE_LEFT_RIGHT, RGB_MATRIX_ANIMATION_SPEED_SLOW, false);
- }
- break;
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_set_gaming_defaults();
#endif
+ default_layer_set(1U << _WASD);
+ }
+ return true;
}
return true;
}
+
+// Override functions to save memory
+// https://docs.qmk.fm/#/squeezing_avr?id=magic-keycodes
+uint16_t keycode_config(uint16_t keycode) {
+ return keycode;
+}
+
+uint8_t mod_config(uint8_t mod) {
+ return mod;
+}
diff --git a/keyboards/crkbd/keymaps/rpbaptist/oled.c b/keyboards/crkbd/keymaps/rpbaptist/oled.c
new file mode 100644
index 000000000000..a2cc43c37365
--- /dev/null
+++ b/keyboards/crkbd/keymaps/rpbaptist/oled.c
@@ -0,0 +1,112 @@
+// Copyright 2023 Your Name (@rpbaptist)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "rpbaptist.h"
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (is_keyboard_master()) {
+ return OLED_ROTATION_270;
+ } else {
+ return OLED_ROTATION_180;
+ }
+}
+
+void render_crkbd_logo(void) {
+ static const char PROGMEM crkbd_logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
+ 0};
+ oled_write_P(crkbd_logo, false);
+}
+
+user_config_t user_config;
+
+void render_status(void) {
+ switch (get_highest_layer(default_layer_state)) {
+ case _COLEMAKDH:
+ oled_write_P(PSTR("TYPE "), false);
+ break;
+ case _GAMING:
+ oled_write_P(PSTR("GAME "), false);
+ break;
+ case _WASD:
+ oled_write_P(PSTR("WASD "), false);
+ break;
+ }
+
+ oled_write_P(PSTR("\n"), false);
+
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write_P(PSTR(" "), false);
+ break;
+ case _SYM:
+ oled_write_P(PSTR("Sym "), false);
+ break;
+ case _NAV:
+ oled_write_P(PSTR("Nav "), false);
+ break;
+ case _GAMING_EXT:
+ oled_write_P(PSTR("Ext "), false);
+ break;
+ case _NUMPAD:
+ oled_write_P(PSTR("Num "), false);
+ break;
+ case _UTIL:
+ oled_write_P(PSTR("Util "), false);
+ break;
+ default:
+ oled_write_P(PSTR("Unkn "), false);
+ break;
+ }
+ oled_write_P(PSTR("\n"), false);
+
+ uint8_t modifiers = get_mods();
+
+ oled_write_P((modifiers & MOD_MASK_SHIFT) ? PSTR("SHIFT") : PSTR("\n"), false);
+ oled_write_P((modifiers & MOD_MASK_CTRL) ? PSTR("CTRL ") : PSTR("\n"), false);
+ oled_write_P((modifiers & MOD_MASK_ALT) ? PSTR("ALT ") : PSTR("\n"), false);
+ oled_write_P((modifiers & MOD_MASK_GUI) ? PSTR("SUPER") : PSTR("\n"), false);
+
+ oled_write_P(PSTR("\n"), false);
+
+ uint8_t led_usb_state = host_keyboard_leds();
+ oled_write_P(PSTR("Mode:"), false);
+ oled_write_P(IS_LED_ON(led_usb_state, USB_LED_NUM_LOCK) ? PSTR(" NUM ") : PSTR("\n"), false);
+ oled_write_P(IS_LED_ON(led_usb_state, USB_LED_CAPS_LOCK) ? PSTR(" CAPS") : PSTR("\n"), false);
+
+#ifdef RGB_MATRIX_ENABLE
+ oled_write_P(PSTR("\n"), false);
+ oled_write_P(PSTR("\n"), false);
+
+ if (rgb_matrix_config.enable) {
+ if (user_config.rgb_matrix_idle_anim) {
+ oled_write_P(rgb_matrix_anim_oled_text(user_config.rgb_matrix_active_mode), false);
+ oled_write_P(rgb_matrix_anim_oled_text(user_config.rgb_matrix_idle_mode), false);
+ } else {
+ oled_write_P(PSTR("\n"), false);
+ oled_write_P(rgb_matrix_anim_oled_text(rgb_matrix_get_mode()), false);
+ }
+ } else {
+ oled_write_P(PSTR("\n"), false);
+ oled_write_P(PSTR("\n"), false);
+ }
+#endif
+}
+
+bool oled_task_user(void) {
+ if (is_keyboard_master()) {
+ render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
+ } else {
+ render_crkbd_logo();
+#ifdef RGB_MATRIX_ENABLE
+ if (user_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == user_config.rgb_matrix_idle_mode) {
+ oled_scroll_left(); // Turns on scrolling
+ } else {
+ oled_scroll_off();
+ }
+#endif
+ }
+ return false;
+}
diff --git a/keyboards/crkbd/keymaps/rpbaptist/oled.h b/keyboards/crkbd/keymaps/rpbaptist/oled.h
new file mode 100644
index 000000000000..d4a73992e0ed
--- /dev/null
+++ b/keyboards/crkbd/keymaps/rpbaptist/oled.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Your Name (@rpbaptist)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "oled_driver.h"
+
+void render_crkbd_logo(void);
diff --git a/keyboards/crkbd/keymaps/rpbaptist/readme.md b/keyboards/crkbd/keymaps/rpbaptist/readme.md
index 9525cf7cfe3b..2312ec8c4982 100644
--- a/keyboards/crkbd/keymaps/rpbaptist/readme.md
+++ b/keyboards/crkbd/keymaps/rpbaptist/readme.md
@@ -1,6 +1,6 @@
# Corne keyboard layout
-This is my highly personalized CRKBD layout. I use Colemak DHm as main typing layer. I use this keyboard and layout in my daily programming job and for everything at home, including gaming.
+This is my highly personalized CRKBD layout. I use Colemak DH as main typing layer. I use this keyboard and layout in my daily programming job and for everything at home, including gaming.
This keymap is the result of an evolution from Ultimate Hacking Keyboard to Iris, to Corne. It took many iterations and changes and only now I feel this is ready to be merged into the main QMK repository, because I think further changes will be minor. This is my 1.0 release so to speak.
@@ -8,7 +8,7 @@ Many thanks to foostan for the keyboard, all QMK contributors and drashna specif
## Layers
-### COLEMAKDHM
+### COLEMAKDH
Main typing layer. I really love having SHIFT available on thumbs. I am a left thumb space bar person, so I put SPACE there and ENTER on right. I use CTRL key combos lot in my text editor and desktop environment. That's why I have two of them. I also found them to be a great position for the square brackets. (`[` and `]`). These become parenthesis (`(` and `)`) on either of the layers.
@@ -16,23 +16,23 @@ Holding SHIFT while tapping BACKSPACE will output DEL. Holding both SHIFT keys w
I don't know about you but "lower" and "raise" don't mean that much to me. I named my layers `SYM`, short for symbols and `NAV`, short for navigation. Holding the key will activate the layer for as long as it is held, double tapping it will switch to it. Single tapping it once will switch to main layer again.
-Holding TAB will access `NUM` layer which features a numpad.
+Holding TAB will access `NUMPAD` layer which features a numpad. This is lockable by going to `ADJUST` layer and pressing the same key.
### SYM
-Includes a number row, the symbols normally on SHIFT and numbers, as well as a numpad under right side homing keys.
+Includes a number row, the symbols normally on SHIFT and numbers and a variety of other symbols used mostly for programming.
### NAV
-This is where I access arrow keys, page up, down, home, end and F keys. I also added general tab forward and backward keys. Tab close and window close. I primarily use these in my browser, terminal and text editor.
+This is where I access F keys, arrow keys, page up, down, home, end and F keys. I also added general tab forward and backward keys. Tab close and window close. I primarily use these in my browser, terminal and text editor.
### UTIL
-Short for utility. This is accessed by pressing both `SYM` and `NAV` at the same time. It has a software `RESET` key, media keys, RGB control and switches main layer between Colemak and a gaming layer.
+Short for utility. This is accessed by pressing both `SYM` and `NAV` at the same time. It has a software `QK_BOOT` key, control for RGB and switching the main layer. More on the RGB below.
-### NUMPAD
+### NUMPAD"
-This gives access to a numpad on the right half with some additional symbols I find useful when using the numpad.
+This gives access to a numpad on the right half with some additional symbols I find useful when using the numpad. The left half has media control.
### GAMING
@@ -42,31 +42,41 @@ I put movement on FRST (would be ESDF on QWERTY), because it lines up more comfo
Most notable here is that there are no tap and hold differences anymore on left hand side besides the new layer key. This is a different layer than `SYM`.
+### WASD
+
+This is functionally the same as the `GAMING` layer, but uses traditional WASD layout. This is done for games where I don't need to type and want to just jump in without rebinding everything.
+
### GAMING_EXT
-This is the gaming extended layer where movement keys remain the same. This means I can keep moving while accessing second layer keys. All other keys are keys on which I can easily rebind something. Besides that it gives me an ENTER key which does not switch. This is good when a game requires you to hold ENTER.
+This is the gaming extended layer. I moved this to most inner thumb instead of mid thumb position. Num row is now moved to the home row. Besides that it gives me an ENTER key which does not switch. This is good when a game requires you to hold ENTER.
## RGB
I took a big inspiration from Drashna's RGB configuration and tweaked it.
- `RGB_UND`: Toggles underglow indicators on and off. Each layer has its own color.
-- `RGB_IDL`: This will enable/disable idle mode. By default, when typing, the `ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS` will be used. When the idle timeout has exceeded the secondary animation will be activated, which is `RGB_MATRIX_CYCLE_ALL` by default. When switching to `GAMING` layer the timeout will be reduced and the idle animation changed to `RGB_MATRIX_RAINBOW_PINWHEELS`.
- When idle mode is enabled, `RGB_MATRIX_TYPING_HEATMAP` and `RGB_MATRIX_MULTISPLASH` will be used for active animation. All others for idle animation. When disabling idle mode, the current idle animation will be activated. Additionally, on idling, the underglow layer indication will be deactivated.
-- There are no RGB mode cycle keys, but instead several keys to use a specific RGB directly. Each has their own default speed, although this can be changed.
+- `RGB_IDL`: This will enable/disable idle mode. By default an "active" RGB mode will be used. When the idle timeout has exceeded the secondary animation will be activated, which is a passive animation. When switching to `GAMING` layer the timeout will be reduced and the idle animation changed to `RGB_MATRIX_RAINBOW_PINWHEELS`.
+ When disabling idle mode, the current idle animation will be activated.
+ On idling, on idling, the underglow layer indication will be deactivated and the animation RGB will be set instead.
+- `RGB_ATG`: Cylces through three active modes: `RGB_MATRIX_SOLID_REACTIVE_SIMPLE` -> `RGB_MATRIX_TYPING_HEATMAP` -> `RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS`
+- `RGB_PST`: Cycles through three passive modes: `RGB_MATRIX_SOLID_COLOR` -> `RGB_MATRIX_BREATHING` -> `RGB_MATRIX_CYCLE_ALL`
+- `RGB_PCT`: Cycles through two, more colorful, passive modes: `RGB_MATRIX_RAINBOW_PINWHEELS` -> `RGB_MATRIX_CYCLE_LEFT_RIGHT`
## Building
-`make crkbd/rev1:rpbaptist:dfu`
+`qmk flash -bl dfu -kb crkbd -km rpbaptist`
## Notes
I use several OLED slave side images, depending on the keycaps I am using. These also determine the default LED color and underglow.
-`make crkbd/rev1:rpbaptist:dfu THEME=pulse`
+Provide the theme like this:
+
+`THEME=laser qmk flash -bl dfu -kb crkbd -km rpbaptist`
Current supported themes are:
+- pulse (default)
- godspeed
- laser
-- pulse
+- milkshake
diff --git a/keyboards/crkbd/keymaps/rpbaptist/rgb.c b/keyboards/crkbd/keymaps/rpbaptist/rgb.c
new file mode 100644
index 000000000000..7f87d0a9eaa4
--- /dev/null
+++ b/keyboards/crkbd/keymaps/rpbaptist/rgb.c
@@ -0,0 +1,350 @@
+// Copyright 2023 Your Name (@rpbaptist)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "rpbaptist.h"
+
+uint32_t transport_user_config = 0;
+
+void user_config_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
+ if (initiator2target_buffer_size == sizeof(transport_user_config)) {
+ memcpy(&transport_user_config, initiator2target_buffer, initiator2target_buffer_size);
+ }
+}
+
+#ifdef OLED_ENABLE
+const char* rgb_matrix_anim_oled_text(uint8_t mode) {
+ switch (mode) {
+ case RGB_MATRIX_TYPING_HEATMAP:
+ return PSTR("Heat ");
+ case RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS:
+ return PSTR("Nexus");
+ case RGB_MATRIX_SOLID_REACTIVE_SIMPLE:
+ return PSTR("Ease ");
+ case RGB_MATRIX_SOLID_COLOR:
+ return PSTR("Solid");
+ case RGB_MATRIX_BREATHING:
+ return PSTR("Fade ");
+ case RGB_MATRIX_CYCLE_ALL:
+ return PSTR("Cycle");
+ case RGB_MATRIX_RAINBOW_PINWHEELS:
+ return PSTR("Wheel");
+ case RGB_MATRIX_CYCLE_LEFT_RIGHT:
+ return PSTR("Wave ");
+ default:
+ return PSTR("");
+ }
+}
+#endif
+
+extern led_config_t g_led_config;
+
+void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t led_min, uint8_t led_max) {
+ HSV hsv = {hue, sat, val};
+ if (hsv.v > rgb_matrix_get_val()) {
+ hsv.v = rgb_matrix_get_val();
+ }
+
+ RGB rgb = hsv_to_rgb(hsv);
+ for (uint8_t i = 0; i < led_max; i++) {
+ if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) {
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+ }
+}
+
+extern user_config_t user_config;
+
+bool rgb_matrix_in_idle(void) {
+ return (user_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == user_config.rgb_matrix_idle_mode);
+}
+
+bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
+ if (user_config.rgb_layer_indicator && !rgb_matrix_in_idle()) {
+ switch (get_highest_layer(layer_state | default_layer_state)) {
+ case _GAMING_EXT:
+ rgb_matrix_layer_helper(HSV_PURPLE, led_min, led_max);
+ break;
+ case _SYM:
+ rgb_matrix_layer_helper(HSV_YELLOW, led_min, led_max);
+ break;
+ case _NAV:
+ rgb_matrix_layer_helper(HSV_SPRINGGREEN, led_min, led_max);
+ break;
+ case _UTIL:
+ rgb_matrix_layer_helper(HSV_PINK, led_min, led_max);
+ break;
+ case _NUMPAD:
+ rgb_matrix_layer_helper(HSV_CORAL, led_min, led_max);
+ break;
+ case _GAMING:
+ case _WASD:
+ rgb_matrix_layer_helper(HSV_RED, led_min, led_max);
+ break;
+ default:
+ rgb_matrix_layer_helper(THEME_HSV, led_min, led_max);
+ break;
+ }
+ }
+ return false;
+}
+
+void rgb_matrix_turn_off_underglow(void) {
+ rgb_matrix_layer_helper(0, 0, 0, 0, 54);
+}
+
+uint8_t rgb_matrix_speed_for_mode(uint8_t mode) {
+ switch (mode) {
+ case RGB_MATRIX_SOLID_REACTIVE_SIMPLE:
+ case RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS:
+ return RGB_MATRIX_ANIMATION_SPEED_FAST;
+ case RGB_MATRIX_BREATHING:
+ case RGB_MATRIX_CYCLE_LEFT_RIGHT:
+ case RGB_MATRIX_RAINBOW_PINWHEELS:
+ return RGB_MATRIX_ANIMATION_SPEED_SLOW;
+ case RGB_MATRIX_CYCLE_ALL:
+ return RGB_MATRIX_ANIMATION_SPEED_SLOWER;
+ default:
+ return RGB_MATRIX_ANIMATION_SPEED_MEDIUM;
+ }
+}
+
+bool rgb_matrix_mode_active(uint8_t mode) {
+ return (mode == RGB_MATRIX_SOLID_REACTIVE_SIMPLE || mode == RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS || mode == RGB_MATRIX_TYPING_HEATMAP);
+}
+
+void rgb_matrix_update_current_mode(uint8_t mode) {
+ rgb_matrix_config.speed = rgb_matrix_speed_for_mode(mode);
+ rgb_matrix_mode_noeeprom(mode);
+}
+
+void rgb_matrix_update_dynamic_mode(uint8_t mode) {
+ uint8_t speed;
+ speed = rgb_matrix_speed_for_mode(mode);
+
+ if (rgb_matrix_mode_active(mode)) {
+ user_config.rgb_matrix_active_speed = speed;
+ user_config.rgb_matrix_active_mode = mode;
+ } else {
+ user_config.rgb_matrix_idle_speed = speed;
+ user_config.rgb_matrix_idle_mode = mode;
+ }
+}
+
+void rgb_matrix_update_mode(uint8_t mode) {
+ if (user_config.rgb_matrix_idle_anim) {
+ rgb_matrix_update_dynamic_mode(mode);
+ }
+ if (rgb_matrix_mode_active(mode) || !user_config.rgb_matrix_idle_anim) {
+ rgb_matrix_update_current_mode(mode);
+ }
+}
+
+uint8_t get_rgb_matrix_active_mode(void) {
+ if (user_config.rgb_matrix_idle_anim) {
+ return user_config.rgb_matrix_active_mode;
+ } else {
+ return rgb_matrix_get_mode();
+ }
+}
+
+void rgb_matrix_toggle_active_mode(void) {
+ switch (get_rgb_matrix_active_mode()) {
+ case RGB_MATRIX_SOLID_REACTIVE_SIMPLE:
+ rgb_matrix_update_mode(RGB_MATRIX_TYPING_HEATMAP);
+ break;
+ case RGB_MATRIX_TYPING_HEATMAP:
+ rgb_matrix_update_mode(RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS);
+ break;
+ default:
+ rgb_matrix_update_mode(RGB_MATRIX_SOLID_REACTIVE_SIMPLE);
+ break;
+ }
+}
+
+uint8_t get_rgb_matrix_idle_mode(void) {
+ if (user_config.rgb_matrix_idle_anim) {
+ return user_config.rgb_matrix_idle_mode;
+ } else {
+ return rgb_matrix_get_mode();
+ }
+}
+
+void rgb_matrix_toggle_simple_passive_mode(void) {
+ switch (get_rgb_matrix_idle_mode()) {
+ case RGB_MATRIX_SOLID_COLOR:
+ rgb_matrix_update_mode(RGB_MATRIX_BREATHING);
+ break;
+ case RGB_MATRIX_BREATHING:
+ rgb_matrix_update_mode(RGB_MATRIX_CYCLE_ALL);
+ break;
+ default:
+ rgb_matrix_update_mode(RGB_MATRIX_SOLID_COLOR);
+ break;
+ }
+}
+
+void rgb_matrix_toggle_color_passive_mode(void) {
+ switch (get_rgb_matrix_idle_mode()) {
+ case RGB_MATRIX_RAINBOW_PINWHEELS:
+ rgb_matrix_update_mode(RGB_MATRIX_CYCLE_LEFT_RIGHT);
+ break;
+ default:
+ rgb_matrix_update_mode(RGB_MATRIX_RAINBOW_PINWHEELS);
+ break;
+ }
+}
+
+void rgb_matrix_toggle_underglow_layer_indicator(void) {
+ user_config.rgb_layer_indicator ^= 1;
+ if (user_config.rgb_layer_indicator) {
+ layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
+ } else {
+ rgb_matrix_turn_off_underglow();
+ }
+}
+
+void rgb_matrix_toggle_idle_animation_change(void) {
+ user_config.rgb_matrix_idle_anim ^= 1;
+ if (user_config.rgb_matrix_idle_anim) {
+ rgb_matrix_update_mode(user_config.rgb_matrix_active_mode);
+ } else {
+ rgb_matrix_update_current_mode(user_config.rgb_matrix_idle_mode);
+ }
+}
+
+void rgb_matrix_set_gaming_defaults(void) {
+ if (!user_config.rgb_layer_indicator) {
+ user_config.rgb_layer_indicator = true;
+ }
+ user_config.rgb_matrix_idle_timeout = GAMING_IDLE_TIMEOUT;
+ rgb_matrix_update_mode(RGB_MATRIX_RAINBOW_PINWHEELS);
+ rgb_matrix_update_mode(RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS);
+}
+
+void rgb_matrix_set_typing_defaults(void) {
+ user_config.rgb_matrix_idle_timeout = IDLE_TIMEOUT;
+ rgb_matrix_update_mode(RGB_MATRIX_TYPING_PASSIVE);
+ rgb_matrix_update_mode(RGB_MATRIX_TYPING_ACTIVE);
+}
+
+void rgb_matrix_set_defaults(void) {
+ rgb_matrix_enable_noeeprom();
+ rgb_matrix_sethsv_noeeprom(THEME_HSV);
+
+ user_config.rgb_layer_indicator = true;
+ user_config.rgb_matrix_idle_anim = true;
+
+ rgb_matrix_set_typing_defaults();
+
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_SIMPLE);
+}
+
+void matrix_scan_rgb(void) {
+ if (user_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == user_config.rgb_matrix_active_mode && last_input_activity_elapsed() > user_config.rgb_matrix_idle_timeout) {
+ if (user_config.rgb_layer_indicator) {
+ rgb_matrix_turn_off_underglow();
+ }
+ rgb_matrix_update_current_mode(user_config.rgb_matrix_idle_mode);
+ }
+}
+
+void user_transport_sync(void) {
+ // Keep track of the last state, so that we can tell if we need to propagate to slave
+ static uint32_t last_config = 0, last_sync = 0;
+
+ // Check if the state values are different
+ // or if sync timer elapsed
+ if (memcmp(&user_config, &last_config, sizeof(transport_user_config)) || (timer_elapsed32(last_sync) > 250)) {
+ memcpy(&last_config, &user_config, sizeof(transport_user_config));
+
+ if (transaction_rpc_send(USER_CONFIG_SYNC, sizeof(transport_user_config), &transport_user_config)) {
+ last_sync = timer_read32();
+ }
+ }
+}
+
+void user_transport_update(void) {
+ if (is_keyboard_master()) {
+ transport_user_config = user_config.raw;
+ user_transport_sync();
+ } else {
+ user_config.raw = transport_user_config;
+ }
+}
+
+void housekeeping_task_user(void) {
+ static bool has_ran_yet;
+ if (!has_ran_yet) {
+ has_ran_yet = true;
+ startup_user();
+ }
+ matrix_scan_rgb();
+
+ // Update config to slave
+ user_transport_update();
+}
+
+void eeconfig_init_user(void) {
+ user_config.raw = 0;
+ user_config.rgb_layer_indicator = true;
+ user_config.rgb_matrix_idle_anim = true;
+
+ rgb_matrix_enable();
+ rgb_matrix_sethsv(THEME_HSV);
+ rgb_matrix_mode(RGB_MATRIX_SOLID_REACTIVE_SIMPLE);
+
+ eeconfig_update_user(user_config.raw);
+}
+
+void keyboard_post_init_user(void) {
+ set_single_persistent_default_layer(_COLEMAKDH);
+ rgb_matrix_set_defaults();
+
+ // Register user config sync
+ transaction_register_rpc(USER_CONFIG_SYNC, user_config_sync);
+}
+
+bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t* record) {
+ if (user_config.rgb_matrix_idle_anim) {
+ if (rgb_matrix_get_mode() == user_config.rgb_matrix_idle_mode) {
+ rgb_matrix_update_current_mode(user_config.rgb_matrix_active_mode);
+ if (!user_config.rgb_layer_indicator) {
+ rgb_matrix_turn_off_underglow();
+ }
+ }
+ }
+
+ switch (keycode) {
+ case RGB_RST:
+ if (record->event.pressed) {
+ rgb_matrix_set_defaults();
+ }
+ break;
+ case RGB_UND: // Toggle separate underglow status
+ if (record->event.pressed) {
+ rgb_matrix_toggle_underglow_layer_indicator();
+ }
+ break;
+ case RGB_IDL: // Toggle idle/heatmap animation
+ if (record->event.pressed) {
+ rgb_matrix_toggle_idle_animation_change();
+ }
+ break;
+ case RGB_ATG:
+ if (record->event.pressed) {
+ rgb_matrix_toggle_active_mode();
+ }
+ break;
+ case RGB_PST:
+ if (record->event.pressed) {
+ rgb_matrix_toggle_simple_passive_mode();
+ }
+ break;
+ case RGB_PCT:
+ if (record->event.pressed) {
+ rgb_matrix_toggle_color_passive_mode();
+ }
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/crkbd/keymaps/rpbaptist/rgb.h b/keyboards/crkbd/keymaps/rpbaptist/rgb.h
new file mode 100644
index 000000000000..91c25f5c2872
--- /dev/null
+++ b/keyboards/crkbd/keymaps/rpbaptist/rgb.h
@@ -0,0 +1,28 @@
+// Copyright 2023 Your Name (@rpbaptist)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "transactions.h"
+
+typedef union {
+ uint32_t raw;
+ struct {
+ bool rgb_layer_indicator : 1;
+ bool rgb_matrix_idle_anim : 1;
+ uint8_t rgb_matrix_active_mode : 4;
+ uint8_t rgb_matrix_idle_mode : 4;
+ uint8_t rgb_matrix_active_speed : 2;
+ uint8_t rgb_matrix_idle_speed : 2;
+ uint32_t rgb_matrix_idle_timeout : 18;
+ };
+} user_config_t;
+
+extern user_config_t user_config;
+
+_Static_assert(sizeof(user_config_t) == sizeof(uint32_t), "Userspace EECONFIG out of spec.");
+
+const char *rgb_matrix_anim_oled_text(uint8_t mode);
+void rgb_matrix_set_gaming_defaults(void);
+void rgb_matrix_set_typing_defaults(void);
+bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record);
diff --git a/keyboards/crkbd/keymaps/rpbaptist/rpbaptist.h b/keyboards/crkbd/keymaps/rpbaptist/rpbaptist.h
new file mode 100644
index 000000000000..630ab5df49c1
--- /dev/null
+++ b/keyboards/crkbd/keymaps/rpbaptist/rpbaptist.h
@@ -0,0 +1,73 @@
+// Copyright 2023 Your Name (@rpbaptist)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+#include QMK_KEYBOARD_H
+
+#include "quantum.h"
+
+#if defined(RGB_MATRIX_ENABLE)
+# include "rgb.h"
+#endif
+
+#if defined(OLED_ENABLE)
+# include "oled.h"
+#endif
+
+enum layer_names {
+ _COLEMAKDH,
+ _GAMING,
+ _WASD,
+ _GAMING_EXT,
+ _NUMPAD,
+ _SYM,
+ _NAV,
+ _UTIL
+};
+
+enum custom_keycodes {
+ BSP_DEL = SAFE_RANGE,
+#if defined(RGB_MATRIX_ENABLE)
+ RGB_RST, // Reset RGB
+ RGB_UND, // Toggle RGB underglow as layer indicator
+ RGB_ATG, // Toggle active RGB mode
+ RGB_PST, // Toggle simple passive RGB mode
+ RGB_PCT, // Toggle colorful passive RGB mode
+ RGB_IDL, // RGB Idling animations
+#endif
+ TYPING, // Switch to Colemak layer
+ GAMING, // Switch to gaming Colemak layer
+ WASD // Switch to gaming with WASD positions
+};
+
+// Layer toggle and switch
+#define T_NAV TT(_NAV)
+#define S_NAV MO(_NAV)
+
+#define T_SYM TT(_SYM)
+#define S_SYM MO(_SYM)
+
+// Layer keys with functionality on tap
+#define NAV_0 LT(_NAV, KC_0)
+#define TAB_NUM LT(_NUMPAD, KC_TAB)
+#define LCK_NMP TG(_NUMPAD)
+#define S_NUM MO(_NUMPAD)
+
+#define EXTALT LT(_GAMING_EXT, KC_LALT)
+
+// Tap/mod keys
+#define RCTL_BR RCTL_T(KC_RBRC)
+#define LCTL_BR LCTL_T(KC_LBRC)
+
+#define SFT_SPC LSFT_T(KC_SPACE)
+#define SFT_ENT RSFT_T(KC_ENTER)
+
+// Global tab forward and backward
+#define TAB_FWD LCTL(KC_TAB)
+#define TAB_BCK LCTL(LSFT(KC_TAB))
+#define TAB_CLS LCTL(KC_W)
+
+#define WIN_CLS LALT(KC_F4)
+
+// €
+#define KC_EUR ALGR(KC_5)
diff --git a/keyboards/crkbd/keymaps/rpbaptist/rules.mk b/keyboards/crkbd/keymaps/rpbaptist/rules.mk
index 2366f669a0d2..21b8fd312786 100644
--- a/keyboards/crkbd/keymaps/rpbaptist/rules.mk
+++ b/keyboards/crkbd/keymaps/rpbaptist/rules.mk
@@ -7,11 +7,11 @@ LTO_ENABLE = yes
#
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-# DYNAMIC_MACRO_ENABLE = yes
+DYNAMIC_MACRO_ENABLE = no
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
@@ -20,6 +20,9 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
SWAP_HANDS_ENABLE = no # Enable one-hand typing
+GRAVE_ESC_ENABLE = no
+MAGIC_ENABLE = no
+MUSIC_ENABLE = no
RGB_MATRIX_ENABLE = yes
@@ -31,10 +34,16 @@ BOOTLOADER = qmk-dfu
OLED_ENABLE = yes
OLED_DRIVER = SSD1306
+DEBOUNCE_TYPE = sym_eager_pk
+
ifeq ($(strip $(THEME)), godspeed)
OPT_DEFS += -DTHEME_GODSPEED
endif
+ifeq ($(strip $(THEME)), godspeed_ares)
+ OPT_DEFS += -DTHEME_GODSPEED_ARES
+endif
+
ifeq ($(strip $(THEME)), pulse)
OPT_DEFS += -DTHEME_PULSE
endif
@@ -42,3 +51,15 @@ endif
ifeq ($(strip $(THEME)), laser)
OPT_DEFS += -DTHEME_LASER
endif
+
+ifeq ($(strip $(THEME)), milkshake)
+ OPT_DEFS += -DTHEME_MILKSHAKE
+endif
+
+ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
+ SRC += rgb.c
+endif
+
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ SRC+= oled.c
+endif
diff --git a/keyboards/custommk/evo70_r2/config.h b/keyboards/custommk/evo70_r2/config.h
new file mode 100644
index 000000000000..25ab789d75fb
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/config.h
@@ -0,0 +1,90 @@
+/* Copyright 2023 David Hoelscher (@customMK)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// No VBUS sense needed
+#define BOARD_OTG_NOVBUSSENS 1
+
+#define STM32_LSECLK 32768
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+#define MATRIX_ROW_PINS { A8, A1, A2, B1, A7 }
+
+// FRAM configuration
+#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A0
+#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 4 // 48MHz / 4 = 12MHz; max supported by MB85R64 is 20MHz
+
+// External flash configuration
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B12
+#define EXTERNAL_FLASH_SPI_CLOCK_DIVISOR 1 // 48MHz; max supported by W25Q128JV is 133MHz
+#define EXTERNAL_FLASH_SIZE (16 * 1024 * 1024) //128Mbit or 16MByte
+#define EXTERNAL_FLASH_SPI_TIMEOUT 200000 //datasheet max is 200seconds for flash chip erase
+
+// SPI Configuration
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN B3
+#define SPI_SCK_PAL_MODE 5
+#define SPI_MOSI_PIN B5
+#define SPI_MOSI_PAL_MODE 5
+#define SPI_MISO_PIN B4
+#define SPI_MISO_PAL_MODE 5
+
+
+// SPI LCD Configuration
+#define LCD_RST_PIN B2
+#define LCD_CS_PIN A9
+#define LCD_DC_PIN B0
+#ifndef LCD_ACTIVITY_TIMEOUT
+ #define LCD_ACTIVITY_TIMEOUT 30000
+#endif
+
+// I2C OLED Configuration
+#define I2C1_SCL_PIN B6
+#define I2C1_SDA_PIN B9
+
+#define I2C1_CLOCK_SPEED 400000
+#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
+
+#define OLED_DISABLE_TIMEOUT
+
+#define COL_SHIFT_IN_PIN B14
+#define COL_SHIFT_CLK_PIN B15
+
+#define QUANTUM_PAINTER_SUPPORTS_256_PALETTE TRUE
+#define QUANTUM_PAINTER_SUPPORTS_NATIVE_COLORS TRUE
+
+#define OLED_UPDATE_INTERVAL 66
+
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL 1
+#define BACKLIGHT_PAL_MODE 2
+
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
+#define WS2812_DMA_CHANNEL 6
+
+#define TAP_CODE_DELAY 10
+
+#define AUDIO_PIN B8
+#define AUDIO_PWM_DRIVER PWMD4
+#define AUDIO_PWM_CHANNEL 3
+#define AUDIO_PWM_PAL_MODE 2
+#define AUDIO_STATE_TIMER GPTD5
+#define AUDIO_INIT_DELAY
diff --git a/keyboards/custommk/evo70_r2/halconf.h b/keyboards/custommk/evo70_r2/halconf.h
new file mode 100644
index 000000000000..5268fe5de6f8
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/halconf.h
@@ -0,0 +1,36 @@
+/* Copyright 2023 David Hoelscher (@customMK)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#define HAL_USE_PWM TRUE
+
+#define HAL_USE_RTC TRUE
+
+#define HAL_USE_SPI TRUE
+
+#define HAL_USE_GPT TRUE
+
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#define SERIAL_BUFFERS_SIZE 256
+
+// This enables interrupt-driven mode
+#define SPI_USE_WAIT TRUE
+
+#include_next
diff --git a/keyboards/custommk/evo70_r2/info.json b/keyboards/custommk/evo70_r2/info.json
new file mode 100644
index 000000000000..772325e7f82d
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/info.json
@@ -0,0 +1,152 @@
+{
+ "keyboard_name": "EVO70 R2",
+ "url": "https://shop.custommk.com/collections/evo70/products/evo70",
+ "maintainer": "customMK",
+ "manufacturer": "customMK",
+ "tags": ["70%", "encoder", "underglow", "backlight"],
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "encoder": true,
+ "quantum_painter": true,
+ "oled": true,
+ "rgblight": true,
+ "backlight": true,
+ "audio": true
+ },
+ "usb": {
+ "vid": "0xF35B",
+ "pid": "0xFAB6",
+ "device_version": "1.0.0"
+ },
+ "diode_direction": "ROW2COL",
+ "processor": "STM32F411",
+ "bootloader": "stm32-dfu",
+ "rgblight": {
+ "led_count": 48,
+ "hue_steps": 4,
+ "saturation_steps": 8,
+ "brightness_steps": 4,
+ "max_brightness": 128,
+ "layers": {
+ "enabled": true
+ },
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbo_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "A10"
+ },
+ "backlight": {
+ "driver": "pwm",
+ "breathing": true,
+ "breathing_period": 6,
+ "levels": 17,
+ "pin": "A6"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Encoder", "matrix": [1, 0], "x":0.5, "y":0},
+ {"label":"Esc", "matrix": [0, 0], "x":2.5, "y":0},
+ {"label":"1", "matrix": [0, 2], "x":3.5, "y":0},
+ {"label":"2", "matrix": [0, 3], "x":4.5, "y":0},
+ {"label":"3", "matrix": [0, 4], "x":5.5, "y":0},
+ {"label":"4", "matrix": [0, 5], "x":6.5, "y":0},
+ {"label":"5", "matrix": [0, 6], "x":7.5, "y":0},
+ {"label":"6", "matrix": [0, 7], "x":8.5, "y":0},
+ {"label":"7", "matrix": [0, 8], "x":9.5, "y":0},
+ {"label":"8", "matrix": [0, 9], "x":10.5, "y":0},
+ {"label":"9", "matrix": [0, 10], "x":11.5, "y":0},
+ {"label":"0", "matrix": [0, 11], "x":12.5, "y":0},
+ {"label":"-", "matrix": [0, 12], "x":13.5, "y":0},
+ {"label":"=", "matrix": [0, 13], "x":14.5, "y":0},
+ {"label":"Backspace", "matrix": [0, 14], "x":15.5, "y":0, "w":2},
+ {"label":"Delete", "matrix": [0, 15], "x":17.5, "y":0},
+
+ {"label":"Tab", "matrix": [1, 1], "x":2.5, "y":1, "w":1.5},
+ {"label":"Q", "matrix": [1, 2], "x":4, "y":1},
+ {"label":"W", "matrix": [1, 3], "x":5, "y":1},
+ {"label":"E", "matrix": [1, 4], "x":6, "y":1},
+ {"label":"R", "matrix": [1, 5], "x":7, "y":1},
+ {"label":"T", "matrix": [1, 6], "x":8, "y":1},
+ {"label":"Y", "matrix": [1, 7], "x":9, "y":1},
+ {"label":"U", "matrix": [1, 8], "x":10, "y":1},
+ {"label":"I", "matrix": [1, 9], "x":11, "y":1},
+ {"label":"O", "matrix": [1, 10], "x":12, "y":1},
+ {"label":"P", "matrix": [1, 11], "x":13, "y":1},
+ {"label":"[", "matrix": [1, 12], "x":14, "y":1},
+ {"label":"]", "matrix": [1, 13], "x":15, "y":1},
+ {"label":"\\", "matrix": [1, 14], "x":16, "y":1, "w":1.5},
+ {"label":"PgUp", "matrix": [1, 15], "x":17.5, "y":1},
+
+ {"label":"F1", "matrix": [2, 2], "x":0, "y":2},
+ {"label":"F2", "matrix": [2, 0], "x":1, "y":2},
+ {"label":"Caps Lock", "matrix": [2, 1], "x":2.5, "y":2, "w":1.75},
+ {"label":"A", "matrix": [2, 3], "x":4.25, "y":2},
+ {"label":"S", "matrix": [2, 4], "x":5.25, "y":2},
+ {"label":"D", "matrix": [2, 5], "x":6.25, "y":2},
+ {"label":"F", "matrix": [2, 6], "x":7.25, "y":2},
+ {"label":"G", "matrix": [2, 7], "x":8.25, "y":2},
+ {"label":"H", "matrix": [2, 8], "x":9.25, "y":2},
+ {"label":"J", "matrix": [2, 9], "x":10.25, "y":2},
+ {"label":"K", "matrix": [2, 10], "x":11.25, "y":2},
+ {"label":"L", "matrix": [2, 11], "x":12.25, "y":2},
+ {"label":";", "matrix": [2, 12], "x":13.25, "y":2},
+ {"label":"'", "matrix": [2, 13], "x":14.25, "y":2},
+ {"label":"Enter", "matrix": [2, 14], "x":15.25, "y":2, "w":2.25},
+ {"label":"PgDn", "matrix": [2, 15], "x":17.5, "y":2},
+
+ {"label":"F3", "matrix": [3, 1], "x":0, "y":3},
+ {"label":"F4", "matrix": [3, 0], "x":1, "y":3},
+ {"label":"Shift", "matrix": [3, 2], "x":2.5, "y":3, "w":1.25},
+ {"label":"\u2298", "matrix": [0, 1], "x":3.75, "y":3, "w":1},
+ {"label":"Z", "matrix": [3, 3], "x":4.75, "y":3},
+ {"label":"X", "matrix": [3, 4], "x":5.75, "y":3},
+ {"label":"C", "matrix": [3, 5], "x":6.75, "y":3},
+ {"label":"V", "matrix": [3, 6], "x":7.75, "y":3},
+ {"label":"B", "matrix": [3, 7], "x":8.75, "y":3},
+ {"label":"N", "matrix": [3, 8], "x":9.75, "y":3},
+ {"label":"M", "matrix": [3, 9], "x":10.75, "y":3},
+ {"label":",", "matrix": [3, 10], "x":11.75, "y":3},
+ {"label":".", "matrix": [3, 11], "x":12.75, "y":3},
+ {"label":"/", "matrix": [3, 12], "x":13.75, "y":3},
+ {"label":"Shift", "matrix": [3, 13], "x":14.75, "y":3, "w":1.75},
+ {"label":"Up", "matrix": [3, 14], "x":16.5, "y":3},
+ {"label":"End", "matrix": [3, 15], "x":17.5, "y":3},
+
+ {"label":"F5", "matrix": [4, 3], "x":0, "y":4},
+ {"label":"F6", "matrix": [4, 0], "x":1, "y":4},
+ {"label":"Ctrl", "matrix": [4, 1], "x":2.5, "y":4, "w":1.25},
+ {"label":"GUI", "matrix": [4, 2], "x":3.75, "y":4, "w":1.25},
+ {"label":"Alt", "matrix": [4, 4], "x":5, "y":4, "w":1.25},
+ {"label":"Space", "matrix": [4, 7], "x":6.25, "y":4, "w":6.25},
+ {"label":"Alt", "matrix": [4, 10], "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "matrix": [4, 11], "x":13.75, "y":4, "w":1.25},
+ {"label":"Left", "matrix": [4, 13], "x":15.5, "y":4},
+ {"label":"Down", "matrix": [4, 14], "x":16.5, "y":4},
+ {"label":"Right", "matrix": [4, 15], "x":17.5, "y":4}
+ ]
+ }
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "B7", "pin_b": "A4", "resolution": 2}
+ ]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/keymaps/default/keymap.c b/keyboards/custommk/evo70_r2/keymaps/default/keymap.c
new file mode 100644
index 000000000000..9dc7beabdda4
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2023 David Hoelscher (@customMK)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F1, KC_F2, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F3, KC_F4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F5, KC_F6, KC_LCTL, KC_LWIN, KC_LALT, KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU),
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/keymaps/via/config.h b/keyboards/custommk/evo70_r2/keymaps/via/config.h
new file mode 100644
index 000000000000..52e3afa69f32
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/via/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 David Hoelscher (@customMK)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// With 8k FRAM, max out dynamic keymap layers and macros
+// 5x16 matrix (160 bytes) and one encoder (4 bytes) consume 164 bytes per layer
+// 32 layers consumes 5248 bytes
+#define DYNAMIC_KEYMAP_LAYER_COUNT 32
+
+// Most of the remaining space can be used for macros
+// QMK Macro keycode range allows up to 128 macros
+#define DYNAMIC_KEYMAP_MACRO_COUNT 128
diff --git a/keyboards/custommk/evo70_r2/keymaps/via/keymap.c b/keyboards/custommk/evo70_r2/keymaps/via/keymap.c
new file mode 100644
index 000000000000..a971aa4e28b2
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2023 David Hoelscher (@customMK)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F1, KC_F2, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F3, KC_F4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F5, KC_F6, KC_LCTL, KC_LWIN, KC_LALT, KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/keymaps/via/rules.mk b/keyboards/custommk/evo70_r2/keymaps/via/rules.mk
new file mode 100644
index 000000000000..4253f570f0bb
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/matrix.c b/keyboards/custommk/evo70_r2/matrix.c
new file mode 100644
index 000000000000..99a23a4542e4
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/matrix.c
@@ -0,0 +1,117 @@
+// Copyright 2023 David Hoelscher (@customMK)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "quantum.h"
+
+// Pin definitions
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+
+void matrix_wait_for_pin(pin_t pin, uint8_t target_state) {
+ rtcnt_t start = chSysGetRealtimeCounterX();
+ rtcnt_t end = start + 5000;
+ while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
+ if (readPin(pin) == target_state) {
+ break;
+ }
+ }
+}
+
+void matrix_wait_for_port(stm32_gpio_t *port, uint32_t target_bitmask) {
+ rtcnt_t start = chSysGetRealtimeCounterX();
+ rtcnt_t end = start + 5000;
+ while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
+ if ((palReadPort(port) & target_bitmask) == target_bitmask) {
+ break;
+ }
+ }
+}
+
+void shift_pulse_clock(void) {
+ writePinHigh(COL_SHIFT_CLK_PIN);
+ matrix_wait_for_pin(COL_SHIFT_CLK_PIN, 1);
+ writePinLow(COL_SHIFT_CLK_PIN);
+}
+
+void matrix_init_custom(void) {
+ //set all row pins as input with pullups
+ for (int i = 0; i < MATRIX_ROWS; ++i) {
+ writePinHigh(row_pins[i]);
+ setPinInputHigh(row_pins[i]);
+ }
+
+ //set all column pins high in ROW2COL matrix
+ setPinOutput(COL_SHIFT_IN_PIN);
+ setPinOutput(COL_SHIFT_CLK_PIN);
+ writePinHigh(COL_SHIFT_IN_PIN);
+ matrix_wait_for_pin(COL_SHIFT_IN_PIN, 1);
+
+ for (int i = 0; i < MATRIX_COLS; ++i) {
+ shift_pulse_clock();
+ }
+
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ static matrix_row_t temp_matrix[MATRIX_ROWS] = {0};
+
+ writePinLow(COL_SHIFT_IN_PIN);
+ matrix_wait_for_pin(COL_SHIFT_IN_PIN, 0);
+
+ // Setup the output column pin
+ shift_pulse_clock();
+
+ writePinHigh(COL_SHIFT_IN_PIN);
+ for (int current_col = 0; current_col < MATRIX_COLS; ++current_col) {
+
+ // Read the column ports
+ uint32_t gpio_a = palReadPort(GPIOA);
+ uint32_t gpio_b = palReadPort(GPIOB);
+
+ // row 0, pin A8
+ int current_row = 0;
+ if ((gpio_a & (1 << 8)) >> 8) {
+ temp_matrix[current_row] &= ~(1ul << current_col);
+ } else {
+ temp_matrix[current_row] |= (1ul << current_col);
+ }
+ // row 1, pin A1
+ current_row = 1;
+ if ((gpio_a & (1 << 1)) >> 1) {
+ temp_matrix[current_row] &= ~(1ul << current_col);
+ } else {
+ temp_matrix[current_row] |= (1ul << current_col);
+ }
+ // row 2, pin A2
+ current_row = 2;
+ if ((gpio_a & (1 << 2)) >> 2) {
+ temp_matrix[current_row] &= ~(1ul << current_col);
+ } else {
+ temp_matrix[current_row] |= (1ul << current_col);
+ }
+ // row 3, pin B3
+ current_row = 3;
+ if ((gpio_b & (1 << 1)) >> 1) {
+ temp_matrix[current_row] &= ~(1ul << current_col);
+ } else {
+ temp_matrix[current_row] |= (1ul << current_col);
+ }
+ // row 4, pin A7
+ current_row = 4;
+ if ((gpio_a & (1 << 7)) >> 7) {
+ temp_matrix[current_row] &= ~(1ul << current_col);
+ } else {
+ temp_matrix[current_row] |= (1ul << current_col);
+ }
+
+ // Setup the output column pin
+ shift_pulse_clock();
+
+ }
+
+ // Check if matrix has changed, return the last-read data
+ bool changed = memcmp(current_matrix, temp_matrix, sizeof(temp_matrix)) != 0;
+ if (changed) {
+ memcpy(current_matrix, temp_matrix, sizeof(temp_matrix));
+ }
+ shift_pulse_clock();
+ return changed;
+}
diff --git a/keyboards/custommk/evo70_r2/mcuconf.h b/keyboards/custommk/evo70_r2/mcuconf.h
new file mode 100644
index 000000000000..afaa692ab857
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/mcuconf.h
@@ -0,0 +1,58 @@
+/* Copyright 2023 David Hoelscher (@customMK)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_LSE_ENABLED
+#define STM32_LSE_ENABLED TRUE
+
+#undef STM32_RTCSEL
+#define STM32_RTCSEL STM32_RTCSEL_LSE
+
+// Used for underglow
+#undef STM32_PWM_USE_TIM1 //timer 1 channel 3
+#define STM32_PWM_USE_TIM1 TRUE
+
+// Used for backlight
+//#undef STM32_PWM_USE_TIM2 //timer 2 channel ?
+//#define STM32_PWM_USE_TIM2 TRUE
+
+// Used for backlight
+#undef STM32_PWM_USE_TIM3 //timer 3 channel 1
+#define STM32_PWM_USE_TIM3 TRUE
+
+// Used for backlight
+//#undef STM32_GPT_USE_TIM3 //timer 3 channel 1
+//#define STM32_GPT_USE_TIM3 TRUE
+
+// Used for backlight
+#undef STM32_PWM_USE_TIM4 //timer 4 channel ?
+#define STM32_PWM_USE_TIM4 TRUE
+
+// Used for backlight
+#undef STM32_GPT_USE_TIM5 //timer 5 channel ?
+#define STM32_GPT_USE_TIM5 TRUE
+
+// Used for FRAM and flash in example code
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
+
+// Used for OLED
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
+
diff --git a/keyboards/custommk/evo70_r2/readme.md b/keyboards/custommk/evo70_r2/readme.md
new file mode 100644
index 000000000000..ac2f638cb26d
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/readme.md
@@ -0,0 +1,21 @@
+# EVO70 R2
+
+EVO70 R2 is a 70% keyboard (65% w/left side function cluster) designed and produced by customMK.
+
+![EVO70 R2](https://i.imgur.com/B1QMuIxh.jpeg)
+
+* Keyboard Maintainer: [customMK](https://github.com/customMK)
+* Hardware Supported: EVO70 R2
+* Hardware Availability: [customMK](https://shop.custommk.com/collections/evo70/products/evo70)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make custommk/evo70_r2:default
+
+Flashing example for this keyboard:
+
+ make custommk/evo70_r2:default:flash
+
+To enter the bootloader, run the flashing command above, and then either plug in the USB connection while holding the top-left key, or alternatively, plug in the USB connection and then press the reset button on the PCB located under the space bar.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/custommk/evo70_r2/rules.mk b/keyboards/custommk/evo70_r2/rules.mk
new file mode 100644
index 000000000000..b79d08c6b759
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/rules.mk
@@ -0,0 +1,11 @@
+AUDIO_DRIVER = pwm_hardware
+
+# project specific files
+SRC += matrix.c
+
+EEPROM_DRIVER = spi
+
+QUANTUM_PAINTER_DRIVERS = st7735_spi
+
+CUSTOM_MATRIX = lite
+CIE1931_CURVE = yes
\ No newline at end of file
diff --git a/keyboards/cutie_club/fidelity/config.h b/keyboards/cutie_club/fidelity/config.h
new file mode 100644
index 000000000000..6615bd2ab72e
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2023 Cutie Club
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cutie_club/fidelity/info.json b/keyboards/cutie_club/fidelity/info.json
new file mode 100644
index 000000000000..0b06e1e56725
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/info.json
@@ -0,0 +1,102 @@
+{
+ "keyboard_name": "Fidelity",
+ "manufacturer": "HAND x KOEN",
+ "maintainer": "Cutie Club",
+ "url": "",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "command": false,
+ "console": false
+ },
+ "usb": {
+ "vid": "0xFB9C",
+ "pid": "0x4D1B",
+ "device_version": "0.0.1"
+ },
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": [ "A7", "A6", "A5", "A4", "A3", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B2", "B1", "B0" ],
+ "rows": [ "A15", "B3", "B5", "B6", "B7" ]
+ },
+ "indicators": {
+ "caps_lock": "B4"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [0, 14], "x": 14, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2, "w": 1.25 },
+ { "matrix": [1, 14], "x": 14, "y": 2 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75 },
+ { "matrix": [3, 14], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5 },
+ { "matrix": [4, 7], "x": 3.75, "y": 4, "w": 7 },
+ { "matrix": [4, 11], "x": 10.75, "y": 4, "w": 1.5 },
+ { "matrix": [4, 13], "x": 13, "y": 4 },
+ { "matrix": [4, 14], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/cutie_club/fidelity/keymaps/default/keymap.c b/keyboards/cutie_club/fidelity/keymaps/default/keymap.c
new file mode 100644
index 000000000000..1f076a0e7d17
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 Cutie Club
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/cutie_club/fidelity/keymaps/via/keymap.c b/keyboards/cutie_club/fidelity/keymaps/via/keymap.c
new file mode 100644
index 000000000000..1f076a0e7d17
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 Cutie Club
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/cutie_club/fidelity/keymaps/via/rules.mk b/keyboards/cutie_club/fidelity/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cutie_club/fidelity/readme.md b/keyboards/cutie_club/fidelity/readme.md
new file mode 100644
index 000000000000..9cec49d2cf2f
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/readme.md
@@ -0,0 +1,26 @@
+# Fidelity
+
+![Fidelity](https://i.imgur.com/6xelfJeh.jpeg)
+
+The Fidelity is a custom 65% keyboard, a collaboration between HAND Engineering and Koen.
+
+* Keyboard Maintainer: [Cutie Club](https://github.com/cutie-club/)
+* Hardware Supported: STM32F072 based PCB for the Fidelity keyboard
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cutie_club/fidelity:default
+
+Flashing example for this keyboard:
+
+ make cutie_club/fidelity:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the top left key) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the front of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cutie_club/fidelity/rules.mk b/keyboards/cutie_club/fidelity/rules.mk
new file mode 100644
index 000000000000..79986c3cedea
--- /dev/null
+++ b/keyboards/cutie_club/fidelity/rules.mk
@@ -0,0 +1 @@
+# Intentionally left blank, please see info.json
diff --git a/keyboards/cxt_studio/info.json b/keyboards/cxt_studio/info.json
index 036794843046..07b5ff17ea9d 100644
--- a/keyboards/cxt_studio/info.json
+++ b/keyboards/cxt_studio/info.json
@@ -50,8 +50,8 @@
"url": "",
"usb": {
"device_version": "1.0.0",
- "pid": "0x0000",
- "vid": "0xFEED"
+ "pid": "0xC401",
+ "vid": "0x5754"
},
"layouts": {
"LAYOUT": {
diff --git a/keyboards/cxt_studio/keymaps/via/keymap.c b/keyboards/cxt_studio/keymaps/via/keymap.c
new file mode 100644
index 000000000000..1d58a60471c7
--- /dev/null
+++ b/keyboards/cxt_studio/keymaps/via/keymap.c
@@ -0,0 +1,38 @@
+/* Copyright 2023 Brian McKenna
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F11, KC_NO, KC_MSTP,
+ KC_NO, KC_NO, KC_MRWD, KC_MFFD,
+ KC_NO, KC_MPLY, KC_MPLY, KC_MNXT,
+
+ KC_MUTE, KC_NO, KC_NO, RGB_TOG
+ )
+};
+
+#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU),
+ ENCODER_CCW_CW(RGB_HUD, RGB_HUI),
+ ENCODER_CCW_CW(RGB_VAD, RGB_VAI),
+ ENCODER_CCW_CW(RGB_MODE_REVERSE, RGB_MODE_FORWARD)
+ },
+};
+#endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
diff --git a/keyboards/cxt_studio/keymaps/via/rules.mk b/keyboards/cxt_studio/keymaps/via/rules.mk
new file mode 100644
index 000000000000..70cf4224c01f
--- /dev/null
+++ b/keyboards/cxt_studio/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/densus/alveus/mx/info.json b/keyboards/densus/alveus/mx/info.json
new file mode 100644
index 000000000000..839c84fb4539
--- /dev/null
+++ b/keyboards/densus/alveus/mx/info.json
@@ -0,0 +1,355 @@
+{
+ "keyboard_name": "Alveus",
+ "manufacturer": "Mechlovin Studio",
+ "url": "",
+ "usb": {
+ "vid": "0xDE00",
+ "pid": "0x0F70",
+ "device_version": "0.0.1"
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "rows": ["B12", "B13", "B14", "A8", "A2"],
+ "cols": ["B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A15", "B9", "B8", "B7", "B6", "B5", "B4", "B3"]
+ },
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "A1",
+ "on_state": 0
+ },
+ "processor": "STM32F103",
+ "bootloader": "stm32duino",
+ "layout_aliases": {
+ "LAYOUT_tkl_nofrow_ansi": "LAYOUT_ansi",
+ "LAYOUT_tkl_nofrow_iso": "LAYOUT_iso",
+ "LAYOUT_tkl_nofrow_tsangan": "LAYOUT_tsangan"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 14], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15.25, "y": 1},
+ {"matrix": [1, 15], "x": 16.25, "y": 1},
+ {"matrix": [1, 16], "x": 17.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "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, 13], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 16.25, "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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 15.25, "y": 4},
+ {"matrix": [4, 15], "x": 16.25, "y": 4},
+ {"matrix": [4, 16], "x": 17.25, "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": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15.25, "y": 1},
+ {"matrix": [1, 15], "x": 16.25, "y": 1},
+ {"matrix": [1, 16], "x": 17.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 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": [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": 2.75},
+ {"matrix": [3, 15], "x": 16.25, "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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 15.25, "y": 4},
+ {"matrix": [4, 15], "x": 16.25, "y": 4},
+ {"matrix": [4, 16], "x": 17.25, "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": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1},
+ {"matrix": [1, 15], "x": 16.25, "y": 1},
+ {"matrix": [1, 16], "x": 17.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+
+ {"matrix": [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": 2.75},
+ {"matrix": [3, 15], "x": 16.25, "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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 15.25, "y": 4},
+ {"matrix": [4, 15], "x": 16.25, "y": 4},
+ {"matrix": [4, 16], "x": 17.25, "y": 4}
+ ]
+ },
+ "LAYOUT_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 14], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15.25, "y": 1},
+ {"matrix": [1, 15], "x": 16.25, "y": 1},
+ {"matrix": [1, 16], "x": 17.25, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 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": [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": 16.25, "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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 15.25, "y": 4},
+ {"matrix": [4, 15], "x": 16.25, "y": 4},
+ {"matrix": [4, 16], "x": 17.25, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/densus/alveus/mx/keymaps/default/keymap.c b/keyboards/densus/alveus/mx/keymaps/default/keymap.c
new file mode 100644
index 000000000000..c785b42a7dfa
--- /dev/null
+++ b/keyboards/densus/alveus/mx/keymaps/default/keymap.c
@@ -0,0 +1,26 @@
+/* Copyright 2023 Mechlovin' Studio
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi(
+ KC_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_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, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/densus/alveus/mx/keymaps/via/keymap.c b/keyboards/densus/alveus/mx/keymaps/via/keymap.c
new file mode 100644
index 000000000000..9106258c0272
--- /dev/null
+++ b/keyboards/densus/alveus/mx/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Mechlovin' Studio
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_HASH, KC_ENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+
diff --git a/keyboards/densus/alveus/mx/keymaps/via/rules.mk b/keyboards/densus/alveus/mx/keymaps/via/rules.mk
new file mode 100644
index 000000000000..43061db1dd46
--- /dev/null
+++ b/keyboards/densus/alveus/mx/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/densus/alveus/mx/readme.md b/keyboards/densus/alveus/mx/readme.md
new file mode 100644
index 000000000000..3a90c9b0f33c
--- /dev/null
+++ b/keyboards/densus/alveus/mx/readme.md
@@ -0,0 +1,26 @@
+# Alveus
+
+![Alveus PCB](https://i.imgur.com/tZKcLiMh.png)
+
+A MX PCB for Alveus FRL keyboard.
+
+* Keyboard Maintainer: [Mechlovin' Studio](https://mechlovin.studio/)
+* Hardware Supported: Alveus, APM32F103
+* Hardware Availability: [Densus](https://www.instagram.com/densusdesign/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make densus/alveus/mx:default
+
+Flashing example for this keyboard:
+
+ make densus/alveus/mx: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).
+
+Enter the bootloader in 4 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Bootloader reset**: Hold down the key at (0,13) in the matrix (Backspace) and plug in the keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
+* **Hardware reset**: Press reset button (located on the bottom side of the PCB)
\ No newline at end of file
diff --git a/keyboards/densus/alveus/mx/rules.mk b/keyboards/densus/alveus/mx/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/densus/alveus/mx/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/dnworks/frltkl/config.h b/keyboards/dnworks/frltkl/config.h
new file mode 100644
index 000000000000..77970ce4d344
--- /dev/null
+++ b/keyboards/dnworks/frltkl/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2023 zeix (@itsme-zeix)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
diff --git a/keyboards/dnworks/frltkl/info.json b/keyboards/dnworks/frltkl/info.json
new file mode 100644
index 000000000000..dda394649b24
--- /dev/null
+++ b/keyboards/dnworks/frltkl/info.json
@@ -0,0 +1,113 @@
+{
+ "keyboard_name": "DN FRLTKL",
+ "maintainer": "itsme-zeix",
+ "manufacturer": "dnworks",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "vid": "0x4C23",
+ "pid": "0x2935",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "GP27",
+ "on_state": 1
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "rows": ["GP4","GP3","GP2","GP1","GP29","GP28","GP19","GP20","GP10","GP11"],
+ "cols": ["GP26","GP25","GP24","GP23","GP22","GP21","GP6","GP5","GP0"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [1, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 0], "x": 1, "y": 0 },
+ { "matrix": [1, 1], "x": 2, "y": 0 },
+ { "matrix": [0, 1], "x": 3, "y": 0 },
+ { "matrix": [1, 2], "x": 4, "y": 0 },
+ { "matrix": [0, 2], "x": 5, "y": 0 },
+ { "matrix": [1, 3], "x": 6, "y": 0 },
+ { "matrix": [0, 3], "x": 7, "y": 0 },
+ { "matrix": [1, 4], "x": 8, "y": 0 },
+ { "matrix": [0, 4], "x": 9, "y": 0 },
+ { "matrix": [1, 5], "x": 10, "y": 0 },
+ { "matrix": [0, 5], "x": 11, "y": 0 },
+ { "matrix": [1, 6], "x": 12, "y": 0 },
+ { "matrix": [0, 6], "x": 13, "y": 0 },
+ { "matrix": [1, 7], "x": 14, "y": 0 },
+ { "matrix": [0, 7], "x": 15.25, "y": 0 },
+ { "matrix": [1, 8], "x": 16.25, "y": 0 },
+ { "matrix": [0, 8], "x": 17.25, "y": 0 },
+
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [3, 0], "x": 1.5, "y": 1 },
+ { "matrix": [2, 1], "x": 2.5, "y": 1 },
+ { "matrix": [3, 1], "x": 3.5, "y": 1 },
+ { "matrix": [2, 2], "x": 4.5, "y": 1 },
+ { "matrix": [3, 2], "x": 5.5, "y": 1 },
+ { "matrix": [2, 3], "x": 6.5, "y": 1 },
+ { "matrix": [3, 3], "x": 7.5, "y": 1 },
+ { "matrix": [2, 4], "x": 8.5, "y": 1 },
+ { "matrix": [3, 4], "x": 9.5, "y": 1 },
+ { "matrix": [2, 5], "x": 10.5, "y": 1 },
+ { "matrix": [3, 5], "x": 11.5, "y": 1 },
+ { "matrix": [2, 6], "x": 12.5, "y": 1 },
+ { "matrix": [3, 7], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 7], "x": 15.25, "y": 1 },
+ { "matrix": [3, 8], "x": 16.25, "y": 1 },
+ { "matrix": [2, 8], "x": 17.25, "y": 1 },
+
+ { "matrix": [4, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [5, 0], "x": 1.75, "y": 2 },
+ { "matrix": [4, 1], "x": 2.75, "y": 2 },
+ { "matrix": [5, 1], "x": 3.75, "y": 2 },
+ { "matrix": [4, 2], "x": 4.75, "y": 2 },
+ { "matrix": [5, 2], "x": 5.75, "y": 2 },
+ { "matrix": [4, 3], "x": 6.75, "y": 2 },
+ { "matrix": [5, 3], "x": 7.75, "y": 2 },
+ { "matrix": [4, 4], "x": 8.75, "y": 2 },
+ { "matrix": [5, 4], "x": 9.75, "y": 2 },
+ { "matrix": [4, 5], "x": 10.75, "y": 2 },
+ { "matrix": [5, 5], "x": 11.75, "y": 2 },
+ { "matrix": [4, 6], "w": 2.25, "x": 12.75, "y": 2 },
+
+ { "matrix": [6, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [7, 0], "x": 1.25, "y": 3 },
+ { "matrix": [6, 1], "x": 2.25, "y": 3 },
+ { "matrix": [7, 1], "x": 3.25, "y": 3 },
+ { "matrix": [6, 2], "x": 4.25, "y": 3 },
+ { "matrix": [7, 2], "x": 5.25, "y": 3 },
+ { "matrix": [6, 3], "x": 6.25, "y": 3 },
+ { "matrix": [7, 3], "x": 7.25, "y": 3 },
+ { "matrix": [6, 4], "x": 8.25, "y": 3 },
+ { "matrix": [7, 4], "x": 9.25, "y": 3 },
+ { "matrix": [6, 5], "x": 10.25, "y": 3 },
+ { "matrix": [7, 5], "x": 11.25, "y": 3 },
+ { "matrix": [6, 6], "w": 1.75, "x": 12.25, "y": 3 },
+
+ { "matrix": [7, 7], "x": 14, "y": 3 },
+ { "matrix": [6, 8], "x": 16.25, "y": 3 },
+ { "matrix": [8, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [9, 0], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [8, 1], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [9, 3], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [8, 5], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [9, 5], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [8, 6], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [9, 7], "w": 1.25, "x": 13.75, "y": 4 },
+ { "matrix": [8, 7], "x": 15.25, "y": 4 },
+ { "matrix": [9, 8], "x": 16.25, "y": 4 },
+ { "matrix": [8, 8], "x": 17.25, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/dnworks/frltkl/keymaps/default/keymap.c b/keyboards/dnworks/frltkl/keymaps/default/keymap.c
new file mode 100644
index 000000000000..295066696d4c
--- /dev/null
+++ b/keyboards/dnworks/frltkl/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/*
+Copyright 2023 zeix (@itsme-zeix)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSLS, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+[1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/dnworks/frltkl/keymaps/via/keymap.c b/keyboards/dnworks/frltkl/keymaps/via/keymap.c
new file mode 100644
index 000000000000..295066696d4c
--- /dev/null
+++ b/keyboards/dnworks/frltkl/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/*
+Copyright 2023 zeix (@itsme-zeix)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSLS, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+[1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/dnworks/frltkl/keymaps/via/rules.mk b/keyboards/dnworks/frltkl/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/dnworks/frltkl/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/dnworks/frltkl/readme.md b/keyboards/dnworks/frltkl/readme.md
new file mode 100644
index 000000000000..cc9946284a7e
--- /dev/null
+++ b/keyboards/dnworks/frltkl/readme.md
@@ -0,0 +1,25 @@
+# FRLTKL
+
+PCB that supports FRLTKLs designed by dnworks, such as DNDD and HITC.
+
+* Keyboard Maintainer: [Zeix](https://github.com/itsme-zeix)
+* Hardware Supported: DNDD Solder PCB rev1 & HITC Solder PCB rev1
+* Hardware Availability: [dnworks.co](https://dnworks.co/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dnworks/frltkl:default
+
+Flashing example for this keyboard:
+
+ make dnworks/frltkl:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the `RESET` button twice or short the `USB_BOOT` and `GND` pads and plug in the keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/dnworks/frltkl/rules.mk b/keyboards/dnworks/frltkl/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/dnworks/frltkl/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/dnworks/sbl/info.json b/keyboards/dnworks/sbl/info.json
index cf9f4a2dfdce..81461ead4d5e 100644
--- a/keyboards/dnworks/sbl/info.json
+++ b/keyboards/dnworks/sbl/info.json
@@ -1,6 +1,6 @@
{
"keyboard_name": "SBL",
- "maintainer": "zeix",
+ "maintainer": "itsme-zeix",
"manufacturer": "dnworks",
"processor": "RP2040",
"bootloader": "rp2040",
@@ -26,76 +26,921 @@
"rows": ["GP6","GP5","GP4","GP0","GP12"],
"cols": ["GP28","GP27","GP26","GP25","GP24","GP23","GP22","GP3","GP2","GP1","GP8","GP9","GP10","GP11","GP7"]
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_tsangan_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "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, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [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": [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": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [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": [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": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [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": [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": 2.75},
+
+ {"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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [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": [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": [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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl": {
+ "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": [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": [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": [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": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"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, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [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": [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": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"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, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": 2.75},
+
+ {"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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": [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": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl": {
+ "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": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"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, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl_split_bs_rshift": {
"layout": [
- { "matrix": [0, 0], "x": 0, "y": 0 },
- { "matrix": [0, 1], "x": 1, "y": 0 },
- { "matrix": [0, 2], "x": 2, "y": 0 },
- { "matrix": [0, 3], "x": 3, "y": 0 },
- { "matrix": [0, 4], "x": 4, "y": 0 },
- { "matrix": [0, 5], "x": 5, "y": 0 },
- { "matrix": [0, 6], "x": 6, "y": 0 },
- { "matrix": [0, 7], "x": 7, "y": 0 },
- { "matrix": [0, 8], "x": 8, "y": 0 },
- { "matrix": [0, 9], "x": 9, "y": 0 },
- { "matrix": [0, 10], "x": 10, "y": 0 },
- { "matrix": [0, 11], "x": 11, "y": 0 },
- { "matrix": [0, 12], "x": 12, "y": 0 },
- { "matrix": [0, 13], "x": 13, "y": 0 },
- { "matrix": [0, 14], "x": 14, "y": 0 },
- { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
- { "matrix": [1, 1], "x": 1.5, "y": 1 },
- { "matrix": [1, 2], "x": 2.5, "y": 1 },
- { "matrix": [1, 3], "x": 3.5, "y": 1 },
- { "matrix": [1, 4], "x": 4.5, "y": 1 },
- { "matrix": [1, 5], "x": 5.5, "y": 1 },
- { "matrix": [1, 6], "x": 6.5, "y": 1 },
- { "matrix": [1, 7], "x": 7.5, "y": 1 },
- { "matrix": [1, 8], "x": 8.5, "y": 1 },
- { "matrix": [1, 9], "x": 9.5, "y": 1 },
- { "matrix": [1, 10], "x": 10.5, "y": 1 },
- { "matrix": [1, 11], "x": 11.5, "y": 1 },
- { "matrix": [1, 12], "x": 12.5, "y": 1 },
- { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
- { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
- { "matrix": [2, 1], "x": 1.75, "y": 2 },
- { "matrix": [2, 2], "x": 2.75, "y": 2 },
- { "matrix": [2, 3], "x": 3.75, "y": 2 },
- { "matrix": [2, 4], "x": 4.75, "y": 2 },
- { "matrix": [2, 5], "x": 5.75, "y": 2 },
- { "matrix": [2, 6], "x": 6.75, "y": 2 },
- { "matrix": [2, 7], "x": 7.75, "y": 2 },
- { "matrix": [2, 8], "x": 8.75, "y": 2 },
- { "matrix": [2, 9], "x": 9.75, "y": 2 },
- { "matrix": [2, 10], "x": 10.75, "y": 2 },
- { "matrix": [2, 11], "x": 11.75, "y": 2 },
- { "matrix": [2, 12], "x": 16, "y": 2 },
- { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
- { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
- { "matrix": [3, 1], "x": 1.25, "y": 3 },
- { "matrix": [3, 2], "x": 2.25, "y": 3 },
- { "matrix": [3, 3], "x": 3.25, "y": 3 },
- { "matrix": [3, 4], "x": 4.25, "y": 3 },
- { "matrix": [3, 5], "x": 5.25, "y": 3 },
- { "matrix": [3, 6], "x": 6.25, "y": 3 },
- { "matrix": [3, 7], "x": 7.25, "y": 3 },
- { "matrix": [3, 8], "x": 8.25, "y": 3 },
- { "matrix": [3, 9], "x": 9.25, "y": 3 },
- { "matrix": [3, 10], "x": 10.25, "y": 3 },
- { "matrix": [3, 11], "x": 11.25, "y": 3 },
- { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
- { "matrix": [3, 13], "x": 14, "y": 3 },
- { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
- { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
- { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
- { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
- { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
- { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
- { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
- { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"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": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"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, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
-
}
}
diff --git a/keyboards/dnworks/sbl/keymaps/default/keymap.c b/keyboards/dnworks/sbl/keymaps/default/keymap.c
index 91c381d83272..f9b8bc13f48a 100644
--- a/keyboards/dnworks/sbl/keymaps/default/keymap.c
+++ b/keyboards/dnworks/sbl/keymaps/default/keymap.c
@@ -17,14 +17,14 @@ along with this program. If not, see .
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT(
+[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NONUS_HASH, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL),
-[1] = LAYOUT(
+[1] = LAYOUT_all(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/dnworks/sbl/keymaps/via/keymap.c b/keyboards/dnworks/sbl/keymaps/via/keymap.c
index 91c381d83272..f9b8bc13f48a 100644
--- a/keyboards/dnworks/sbl/keymaps/via/keymap.c
+++ b/keyboards/dnworks/sbl/keymaps/via/keymap.c
@@ -17,14 +17,14 @@ along with this program. If not, see .
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT(
+[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NONUS_HASH, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL),
-[1] = LAYOUT(
+[1] = LAYOUT_all(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/dnworks/sbl/matrix_diagram.md b/keyboards/dnworks/sbl/matrix_diagram.md
new file mode 100644
index 000000000000..a3993e18d0b5
--- /dev/null
+++ b/keyboards/dnworks/sbl/matrix_diagram.md
@@ -0,0 +1,27 @@
+# Matrix Diagram for dnworks SBL
+
+```
+ ┌───────┐
+ 2u Backspace │0E │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤ ┌──┴┐2D │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │ │2C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
+│40 │41 │42 │46 │4A │4B │4C │4D │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌────────┐ ┌──────────┐
+│30 │ 2.25u LShift 2.75u RShift │3C │
+└────────┘ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │46 │4B │4C │4D │ Tsangan/WKL/HHKB
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+ ┌───┬─────┬───────────────────────┬─────┬───┐
+ │41 │42 │46 │4A │4B │ True HHKB
+ └───┴─────┴───────────────────────┴─────┴───┘
+```
diff --git a/keyboards/doio/kb30/info.json b/keyboards/doio/kb30/info.json
index 3f3fa1c33270..71a300b9cd81 100644
--- a/keyboards/doio/kb30/info.json
+++ b/keyboards/doio/kb30/info.json
@@ -2,7 +2,7 @@
"keyboard_name": "KB30-01",
"manufacturer": "DOIO",
"url": "",
- "maintainer": "Alice",
+ "maintainer": "DOIO2022",
"usb": {
"vid": "0xD010",
"pid": "0x3001",
@@ -49,33 +49,31 @@
{"matrix": [1, 5], "x": 5.25, "y": 1},
{"matrix": [1, 6], "x": 6.25, "y": 1},
- {"matrix": [2, 0], "x": 8.25, "y": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
- {"matrix": [2, 1], "x": 0, "y": 2},
- {"matrix": [2, 2], "x": 1, "y": 2},
- {"matrix": [2, 3], "x": 2, "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, 4], "x": 4.25, "y": 2},
- {"matrix": [2, 5], "x": 5.25, "y": 2},
- {"matrix": [3, 0], "x": 6.25, "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, "h": 2},
- {"matrix": [3, 1], "x": 11, "y": 2},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
- {"matrix": [3, 2], "x": 0, "y": 3},
- {"matrix": [3, 3], "x": 1, "y": 3},
- {"matrix": [3, 5], "x": 2, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2},
+ {"matrix": [4, 1], "x": 2, "y": 4},
- {"matrix": [4, 0], "x": 4.25, "y": 3, "h": 2},
- {"matrix": [4, 1], "x": 5.25, "y": 3},
+ {"matrix": [4, 2], "x": 4.25, "y": 4},
+ {"matrix": [4, 3], "x": 5.25, "y": 4},
+ {"matrix": [4, 4], "x": 6.25, "y": 4},
- {"matrix": [4, 2], "x": 9, "y": 4},
-
- {"matrix": [4, 3], "x": 0, "y": 4, "w": 2},
- {"matrix": [4, 4], "x": 2, "y": 4},
-
- {"matrix": [5, 4], "x": 4.25, "y": 4},
- {"matrix": [5, 5], "x": 5.25, "y": 4},
- {"matrix": [5, 6], "x": 6.25, "y": 4}
+ {"matrix": [5, 4], "x": 7.75, "y": 1},
+ {"matrix": [5, 5], "x": 9.75, "y": 1},
+ {"matrix": [5, 6], "x": 7.75, "y": 2, "w": 3, "h": 3}
]
}
}
diff --git a/keyboards/doio/kb30/keymaps/default/keymap.c b/keyboards/doio/kb30/keymaps/default/keymap.c
index fb06acfd8034..2e385d24e308 100644
--- a/keyboards/doio/kb30/keymaps/default/keymap.c
+++ b/keyboards/doio/kb30/keymaps/default/keymap.c
@@ -15,65 +15,47 @@
* along with this program. If not, see .
*/
-
#include QMK_KEYBOARD_H
-
enum layer_names {
-_LAY0,
-_LAY1,
-_LAY2,
-_LAY3
+ _LAY0,
+ _LAY1,
+ _LAY2,
+ _LAY3
};
-
-
-
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAY0] = LAYOUT(
- KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PSCR, KC_SCRL, KC_PAUSE,
- KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
- KC_P4, KC_P5, KC_P6, KC_DEL, KC_END, KC_PGDN,
- KC_P1, KC_P2, KC_P3, LT(3,KC_PENT), KC_UP,
- KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT,
- KC_MPLY, TO(1), KC_TRNS),
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
+ KC_P4, KC_P5, KC_P6, KC_DEL, KC_END, KC_PGDN,
+ KC_P1, KC_P2, KC_P3, LT(3,KC_PENT), KC_UP,
+ KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT,
+ KC_MPLY, TO(1), KC_TRNS),
[_LAY1] = 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, KC_TRNS, KC_TRNS, KC_TRNS, 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(2), KC_TRNS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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(2), KC_TRNS),
[_LAY2] = 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, KC_TRNS, KC_TRNS, KC_TRNS, 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(3), KC_TRNS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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(3), KC_TRNS),
[_LAY3] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI, RGB_SAI, RGB_SPI,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_SPD,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD,
- KC_TRNS, KC_TRNS, RGB_VAD, RGB_TOG, RGB_VAI,
- KC_TRNS, TO(0), KC_TRNS)
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI, RGB_SAI, RGB_SPI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_SPD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD,
+ KC_TRNS, KC_TRNS, RGB_VAD, RGB_TOG, RGB_VAI,
+ KC_TRNS, TO(0), KC_TRNS)
};
-
-
-
-
-
-
-
-
-
-
-
-
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_LAY0] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
diff --git a/keyboards/doio/kb30/keymaps/via/keymap.c b/keyboards/doio/kb30/keymaps/via/keymap.c
index 2890fe604a1c..2e385d24e308 100644
--- a/keyboards/doio/kb30/keymaps/via/keymap.c
+++ b/keyboards/doio/kb30/keymaps/via/keymap.c
@@ -15,54 +15,47 @@
* along with this program. If not, see .
*/
-
#include QMK_KEYBOARD_H
-
enum layer_names {
-_LAY0,
-_LAY1,
-_LAY2,
-_LAY3
+ _LAY0,
+ _LAY1,
+ _LAY2,
+ _LAY3
};
-
-
-
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAY0] = LAYOUT(
- KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PSCR, KC_SCRL, KC_PAUSE,
- KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
- KC_P4, KC_P5, KC_P6, KC_DEL, KC_END, KC_PGDN,
- KC_P1, KC_P2, KC_P3, LT(3,KC_PENT), KC_UP,
- KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT,
- KC_MPLY, TO(1), KC_TRNS),
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
+ KC_P4, KC_P5, KC_P6, KC_DEL, KC_END, KC_PGDN,
+ KC_P1, KC_P2, KC_P3, LT(3,KC_PENT), KC_UP,
+ KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT,
+ KC_MPLY, TO(1), KC_TRNS),
[_LAY1] = 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, KC_TRNS, KC_TRNS, KC_TRNS, 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(2), KC_TRNS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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(2), KC_TRNS),
[_LAY2] = 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, KC_TRNS, KC_TRNS, KC_TRNS, 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(3), KC_TRNS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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(3), KC_TRNS),
[_LAY3] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI, RGB_SAI, RGB_SPI,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_SPD,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD,
- KC_TRNS, KC_TRNS, RGB_VAD, RGB_TOG, RGB_VAI,
- KC_TRNS, TO(0), KC_TRNS)
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUI, RGB_SAI, RGB_SPI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_SPD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD,
+ KC_TRNS, KC_TRNS, RGB_VAD, RGB_TOG, RGB_VAI,
+ KC_TRNS, TO(0), KC_TRNS)
};
-
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_LAY0] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
diff --git a/keyboards/doio/kb30/readme.md b/keyboards/doio/kb30/readme.md
new file mode 100644
index 000000000000..9e66c8993fa1
--- /dev/null
+++ b/keyboards/doio/kb30/readme.md
@@ -0,0 +1,27 @@
+# Megalodon DOIO 30% Designer Keyboard
+
+![Megalodon DOIO 30% Designer Keyboard](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/doio/kb30/KB30-01-_0000_778b3a43-228a-433d-94ae-9129f20b2ede_1024xc.jpg)
+
+A hotswappable 30-key macropad with 3 rotary encoders (2 are clickable), an OLED screen, and RGB lighting.
+
+* Keyboard Maintainer: [DOIO2022](https://github.com/DOIO2022)
+* Hardware Supported: Megalodon DOIO 30% Designer Keyboard with STM32F103
+* Hardware Availability: [KeebMonkey](https://www.keebmonkey.com/products/megalodon-doio-30-designer-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make doio/kb30:default
+
+## Accessing Bootloader Mode and Flashing
+
+To access Bootloader Mode, do one of the following:
+
+* **Bootmagic reset**: Hold the top left key of the keyboard while connecting the USB cable.
+* **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.
+
+Flashing example for this keyboard:
+
+ make doio/kb30:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/doio/kb38/info.json b/keyboards/doio/kb38/info.json
index 3f97ac6842a6..0601ba881ca5 100644
--- a/keyboards/doio/kb38/info.json
+++ b/keyboards/doio/kb38/info.json
@@ -94,51 +94,51 @@
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "label": "ESC", "x": 0, "y": 0},
- {"matrix": [0, 1], "label": "BSPC", "x": 1, "y": 0},
- {"matrix": [0, 2], "label": "RGB BACK", "x": 2, "y": 0},
- {"matrix": [0, 3], "label": "RGB OFF", "x": 3, "y": 0},
- {"matrix": [0, 4], "label": "RGB FORW", "x": 4, "y": 0},
- {"matrix": [0, 5], "label": "MAKE", "x": 5, "y": 0},
- {"matrix": [0, 6], "label": "REBOOT", "x": 6, "y": 0},
- {"matrix": [0, 7], "label": "BOOTLOAD", "x": 7, "y": 0},
+ {"matrix": [0, 1], "label": "BSPC", "x": 2, "y": 0, "w": 2},
+ {"matrix": [0, 2], "label": "RGB BACK", "x": 4.25, "y": 0},
+ {"matrix": [0, 3], "label": "RGB OFF", "x": 5.25, "y": 0},
+ {"matrix": [0, 4], "label": "RGB FORW", "x": 6.25, "y": 0},
+ {"matrix": [0, 5], "label": "MAKE", "x": 7.5, "y": 0},
+ {"matrix": [0, 6], "label": "REBOOT", "x": 8.5, "y": 0},
+ {"matrix": [0, 7], "label": "BOOTLOAD", "x": 9.5, "y": 0},
- {"matrix": [1, 0], "label": "NUMLOCK", "x": 0, "y": 1},
- {"matrix": [1, 1], "label": "PSLS", "x": 1, "y": 1},
- {"matrix": [1, 2], "label": "PAST", "x": 2, "y": 1},
- {"matrix": [1, 3], "label": "PMNS", "x": 3, "y": 1},
- {"matrix": [1, 4], "label": "PAUS", "x": 3, "y": 1},
- {"matrix": [1, 5], "label": "SCRL", "x": 3, "y": 1},
- {"matrix": [1, 6], "label": "PSCR", "x": 3, "y": 1},
+ {"matrix": [1, 0], "label": "NUMLOCK", "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "label": "PSLS", "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "label": "PAST", "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "label": "PMNS", "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "label": "PAUS", "x": 4.25, "y": 1.25},
+ {"matrix": [1, 5], "label": "SCRL", "x": 5.25, "y": 1.25},
+ {"matrix": [1, 6], "label": "PSCR", "x": 6.25, "y": 1.25},
- {"matrix": [2, 0], "label": "7", "x": 0, "y": 2},
- {"matrix": [2, 1], "label": "8", "x": 1, "y": 2},
- {"matrix": [2, 2], "label": "9", "x": 2, "y": 2},
- {"matrix": [2, 3], "label": "PPLS", "x": 3, "y": 2},
- {"matrix": [2, 4], "label": "INS", "x": 3, "y": 2},
- {"matrix": [2, 5], "label": "HOME", "x": 3, "y": 2},
- {"matrix": [2, 6], "label": "PGUP", "x": 3, "y": 2},
+ {"matrix": [2, 0], "label": "7", "x": 0, "y": 2.25},
+ {"matrix": [2, 1], "label": "8", "x": 1, "y": 2.25},
+ {"matrix": [2, 2], "label": "9", "x": 2, "y": 2.25},
+ {"matrix": [2, 3], "label": "PPLS", "x": 3, "y": 2.25, "h": 2},
+ {"matrix": [2, 4], "label": "INS", "x": 4.25, "y": 2.25},
+ {"matrix": [2, 5], "label": "HOME", "x": 5.25, "y": 2.25},
+ {"matrix": [2, 6], "label": "PGUP", "x": 6.25, "y": 2.25},
- {"matrix": [3, 0], "label": "4", "x": 0, "y": 3},
- {"matrix": [3, 1], "label": "5", "x": 1, "y": 3},
- {"matrix": [3, 2], "label": "6", "x": 2, "y": 3},
- {"matrix": [3, 3], "label": "END", "x": 3, "y": 3},
- {"matrix": [3, 4], "label": "DEL", "x": 3, "y": 3},
- {"matrix": [3, 5], "label": "PGDN", "x": 3, "y": 3},
+ {"matrix": [3, 0], "label": "4", "x": 0, "y": 3.25},
+ {"matrix": [3, 1], "label": "5", "x": 1, "y": 3.25},
+ {"matrix": [3, 2], "label": "6", "x": 2, "y": 3.25},
+ {"matrix": [3, 3], "label": "END", "x": 4.25, "y": 3.25},
+ {"matrix": [3, 4], "label": "DEL", "x": 5.25, "y": 3.25},
+ {"matrix": [3, 5], "label": "PGDN", "x": 6.25, "y": 3.25},
- {"matrix": [4, 0], "label": "1", "x": 0, "y": 4},
- {"matrix": [4, 1], "label": "2", "x": 1, "y": 4},
- {"matrix": [4, 2], "label": "3", "x": 2, "y": 4},
- {"matrix": [4, 3], "label": "PENT", "x": 3, "y": 4},
- {"matrix": [4, 5], "label": "UP", "x": 3, "y": 4},
+ {"matrix": [4, 0], "label": "1", "x": 0, "y": 4.25},
+ {"matrix": [4, 1], "label": "2", "x": 1, "y": 4.25},
+ {"matrix": [4, 2], "label": "3", "x": 2, "y": 4.25},
+ {"matrix": [4, 3], "label": "PENT", "x": 3, "y": 4.25, "h": 2},
+ {"matrix": [4, 5], "label": "UP", "x": 5.25, "y": 4.25},
- {"matrix": [5, 0], "label": "0", "x": 0, "y": 5},
- {"matrix": [5, 1], "label": "PDOT", "x": 1, "y": 5},
- {"matrix": [5, 2], "label": "LEFT", "x": 2, "y": 5},
- {"matrix": [5, 3], "label": "DOWN", "x": 3, "y": 5},
- {"matrix": [5, 4], "label": "RIGHT", "x": 4, "y": 5},
- {"matrix": [5, 5], "label": "KNOB_L", "x": 3, "y": 5},
- {"matrix": [5, 6], "label": "KNOB_R", "x": 3, "y": 5},
- {"matrix": [5, 7], "label": "KNOB_D", "x": 3, "y": 5}
+ {"matrix": [5, 0], "label": "0", "x": 0, "y": 5.25, "w": 2},
+ {"matrix": [5, 1], "label": "PDOT", "x": 2, "y": 5.25},
+ {"matrix": [5, 2], "label": "LEFT", "x": 4.25, "y": 5.25},
+ {"matrix": [5, 3], "label": "DOWN", "x": 5.25, "y": 5.25},
+ {"matrix": [5, 4], "label": "RIGHT", "x": 6.25, "y": 5.25},
+ {"matrix": [5, 5], "label": "KNOB_L", "x": 7.5, "y": 2.25},
+ {"matrix": [5, 6], "label": "KNOB_R", "x": 9.5, "y": 2.25},
+ {"matrix": [5, 7], "label": "KNOB_D", "x": 7.5, "y": 3.25, "w": 3, "h": 3}
]
}
}
diff --git a/keyboards/doio/kb38/keymaps/default/keymap.c b/keyboards/doio/kb38/keymaps/default/keymap.c
index 2496fef08315..b2fd7d2273d7 100644
--- a/keyboards/doio/kb38/keymaps/default/keymap.c
+++ b/keyboards/doio/kb38/keymaps/default/keymap.c
@@ -27,35 +27,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* └───┘ └───────┘└───┴───┴───┘└───┴───┴───┘
* ┌───┬───┬───┬───┐┌───┬───┬───┐
* │NUM│ / │ * │ - ││PAS│SCR│PSC│
- * ├───┼───┼───┼───┤├───┼───┼───│
+ * ├───┼───┼───┼───┤├───┼───┼───┤
* │ 7 │ 8 │ 9 │ ││INS│HOM│PGU│
- * ├───┼───┼───│ + │├───┼───┼───│
+ * ├───┼───┼───┤ + │├───┼───┼───┤
* │ 4 │ 5 │ 6 │ ││END│DEL│PGD│
* ├───┼───┼───┼───┤└───┼───┼───┘
- * │ 1 │ 2 │ 3 │ E │ │UP │
- * ├───┼───┼───│ N │┌───┼───┼───┐┌───┬───┬───┐
+ * │ 1 │ 2 │ 3 │ E │ │UP │
+ * ├───┴───┼───┤ N │┌───┼───┼───┐┌───┬───┬───┐
* │ 0 │DEL│ T ││LFT│DWN│RHT││ O │ O │ O │
- * └───┴───┴───┴───┘└───┴───┴───┘└───┴───┴───┘
+ * └───────┴───┴───┘└───┴───┴───┘└───┴───┴───┘
*/
[_QWERTY] = LAYOUT(
- MO(1), KC_BSPC, RGB_RMOD, RGB_TOG, RGB_MOD, KC_F1, KC_F2, KC_F3,
- KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PAUS, KC_SCRL, KC_PSCR,
- KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
- KC_P4, KC_P5, KC_P6, KC_END, KC_DEL, KC_PGDN,
- KC_P1, KC_P2, KC_P3, KC_PENT, KC_UP,
- KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, KC_B
+ MO(1), KC_BSPC, RGB_RMOD, RGB_TOG, RGB_MOD, KC_F1, KC_F2, KC_F3,
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PAUS, KC_SCRL, KC_PSCR,
+ KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
+ KC_P4, KC_P5, KC_P6, KC_END, KC_DEL, KC_PGDN,
+ KC_P1, KC_P2, KC_P3, KC_PENT, KC_UP,
+ KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, KC_B
),
[_LAYERTWO] = LAYOUT(
- _______, KC_BSPC, RGB_RMOD, RGB_TOG, RGB_MOD, KC_A, QK_REBOOT, QK_BOOTLOADER,
- KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PAUS, KC_SCRL, KC_PSCR,
- KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
- KC_P4, KC_P5, KC_P6, KC_END, KC_DEL, KC_PGDN,
- KC_P1, KC_P2, KC_P3, KC_PENT, KC_UP,
- KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, KC_B
+ _______, KC_BSPC, RGB_RMOD, RGB_TOG, RGB_MOD, KC_A, QK_RBT, QK_BOOT,
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PAUS, KC_SCRL, KC_PSCR,
+ KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
+ KC_P4, KC_P5, KC_P6, KC_END, KC_DEL, KC_PGDN,
+ KC_P1, KC_P2, KC_P3, KC_PENT, KC_UP,
+ KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, KC_B
)
};
/*NOTE FOR PERSON MODIFYING KEYMAP
The large knob press is mapped as KC_B, despite it not having one.
I'm not quite sure why, but the only reason it can't be clicked is because the potentiometer is different.
-If you were to replace it with one that can be clicked, it would work. I shorted it and it does work.*/
\ No newline at end of file
+If you were to replace it with one that can be clicked, it would work. I shorted it and it does work.*/
diff --git a/keyboards/doio/kb38/readme.md b/keyboards/doio/kb38/readme.md
index fef8a33f8f1e..7456316f1593 100644
--- a/keyboards/doio/kb38/readme.md
+++ b/keyboards/doio/kb38/readme.md
@@ -1,5 +1,7 @@
# doio/kb38
+![Megalodon DOIO Triple Knob 38%](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/doio/kb38/2022-06-2917-52-00_A_R8_S4_1024xc.jpg)
+
QMK for Megalodon DOIO Triple Knob 38% with OLED Screen.
* Keyboard Maintainer: [Katrina](https://github.com/PepperKats)
diff --git a/keyboards/dotmod/dymium65/info.json b/keyboards/dotmod/dymium65/info.json
index 5149dd897fc8..83e2951baa98 100644
--- a/keyboards/dotmod/dymium65/info.json
+++ b/keyboards/dotmod/dymium65/info.json
@@ -77,10 +77,10 @@
{"matrix": [1, 10], "x": 10, "y": 0},
{"matrix": [1, 11], "x": 11, "y": 0},
{"matrix": [1, 12], "x": 12, "y": 0},
- {"matrix": [1, 13], "w": 2, "x": 13, "y": 0},
- {"matrix": [4, 15], "x": 16, "y": 0},
+ {"matrix": [1, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [4, 15], "x": 15.25, "y": 0},
- {"matrix": [2, 0], "w": 1.5, "x": 0, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 1},
{"matrix": [2, 2], "x": 2.5, "y": 1},
{"matrix": [2, 3], "x": 3.5, "y": 1},
@@ -93,10 +93,10 @@
{"matrix": [2, 10], "x": 10.5, "y": 1},
{"matrix": [2, 11], "x": 11.5, "y": 1},
{"matrix": [2, 12], "x": 12.5, "y": 1},
- {"matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 1},
- {"matrix": [3, 14], "x": 16, "y": 1},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [3, 14], "x": 15.25, "y": 1.25},
- {"matrix": [3, 0], "w": 1.75, "x": 0, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 2},
{"matrix": [3, 2], "x": 2.75, "y": 2},
{"matrix": [3, 3], "x": 3.75, "y": 2},
@@ -108,10 +108,10 @@
{"matrix": [3, 9], "x": 9.75, "y": 2},
{"matrix": [3, 10], "x": 10.75, "y": 2},
{"matrix": [3, 11], "x": 11.75, "y": 2},
- {"matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 2},
- {"matrix": [3, 15], "x": 16, "y": 2},
+ {"matrix": [3, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 15], "x": 15.25, "y": 2.25},
- {"matrix": [4, 0], "w": 2.25, "x": 0, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 3},
{"matrix": [4, 3], "x": 3.25, "y": 3},
{"matrix": [4, 4], "x": 4.25, "y": 3},
@@ -122,19 +122,19 @@
{"matrix": [4, 9], "x": 9.25, "y": 3},
{"matrix": [4, 10], "x": 10.25, "y": 3},
{"matrix": [4, 11], "x": 11.25, "y": 3},
- {"matrix": [4, 13], "w": 1.75, "x": 12.25, "y": 3},
- {"matrix": [4, 14], "x": 15.25, "y": 3},
+ {"matrix": [4, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [4, 14], "x": 14.25, "y": 3.25},
- {"matrix": [5, 0], "w": 1.25, "x": 0, "y": 4},
- {"matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 4},
- {"matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 4},
- {"matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 4},
+ {"matrix": [5, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [5, 9], "x": 10, "y": 4},
{"matrix": [5, 10], "x": 11, "y": 4},
{"matrix": [5, 12], "x": 12, "y": 4},
- {"matrix": [5, 13], "x": 14.25, "y": 4},
- {"matrix": [5, 14], "x": 15.25, "y": 4},
- {"matrix": [5, 15], "x": 16.25, "y": 4}
+ {"matrix": [5, 13], "x": 13.25, "y": 4.25},
+ {"matrix": [5, 14], "x": 14.25, "y": 4.25},
+ {"matrix": [5, 15], "x": 15.25, "y": 4.25}
]
}
}
diff --git a/keyboards/dp3000/config.h b/keyboards/dp3000/config.h
new file mode 100644
index 000000000000..26e9f037f58d
--- /dev/null
+++ b/keyboards/dp3000/config.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2023 deddia permana (@depermana12)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define RGB_MATRIX_LED_COUNT 8
+#define RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
diff --git a/keyboards/dp3000/dp3000.c b/keyboards/dp3000/dp3000.c
new file mode 100644
index 000000000000..3d99670fe36d
--- /dev/null
+++ b/keyboards/dp3000/dp3000.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 deddia permana (@depermana12)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "quantum.h"
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ oled_write_P(PSTR("LAYER: "), false);
+ oled_write_char('0' + get_highest_layer(layer_state), false);
+
+ led_t led_state = host_keyboard_led_state();
+ oled_set_cursor(0, 1);
+ oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
+ oled_set_cursor(0, 2);
+ oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
+ oled_set_cursor(0, 3);
+ oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
+
+ return false;
+}
diff --git a/keyboards/dp3000/info.json b/keyboards/dp3000/info.json
new file mode 100644
index 000000000000..c7348c81a89f
--- /dev/null
+++ b/keyboards/dp3000/info.json
@@ -0,0 +1,98 @@
+{
+ "manufacturer": "depermana12",
+ "keyboard_name": "dp3000",
+ "maintainer": "depermana12",
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "encoder": true,
+ "rgb_matrix": true,
+ "oled": true,
+ "mousekey": false,
+ "nkro": false
+ },
+ "build": {
+ "lto": true
+ },
+ "url": "https://github.com/depermana12",
+ "usb": {
+ "device_version": "1.0.1",
+ "vid": "0x4450",
+ "pid": "0x6470"
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "B2", "pin_b": "B1"},
+ { "pin_a": "F4", "pin_b": "F5"}
+ ]
+ },
+ "ws2812": {
+ "pin": "B5"
+ },
+ "rgb_matrix":{
+ "driver":"WS2812",
+ "max_brightness": 180,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron":true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "typing_heatmap": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true
+ },
+ "layout":[
+ { "matrix": [1, 0], "x": 0, "y": 32, "flags":4 },
+ { "matrix": [1, 1], "x": 25, "y": 32, "flags":4 },
+ { "matrix": [1, 2], "x": 37, "y": 32, "flags":4 },
+ { "matrix": [1, 3], "x": 75, "y": 32, "flags":4 },
+ { "matrix": [2, 0], "x": 75, "y": 16, "flags":4 },
+ { "matrix": [2, 1], "x": 37, "y": 16, "flags":4 },
+ { "matrix": [2, 2], "x": 25, "y": 16, "flags":4 },
+ { "matrix": [2, 3], "x": 0, "y": 16, "flags":4 }
+ ]
+ },
+ "matrix_pins": {
+ "cols": ["D4", "D7", "B4", "C6"],
+ "rows": ["F6", "F7", "B3"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [1, 3], "x": 3, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [2, 3], "x": 3, "y": 2 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/dp3000/keymaps/default/keymap.c b/keyboards/dp3000/keymaps/default/keymap.c
new file mode 100644
index 000000000000..6d3561edbc54
--- /dev/null
+++ b/keyboards/dp3000/keymaps/default/keymap.c
@@ -0,0 +1,58 @@
+/*
+Copyright 2023 deddia permana (@depermana12)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌─────────┐ ┌─────────┐
+ * │ mute │ │ MO(1) │
+ * ├─────────┼─────────┬─────────┼─────────┤
+ * │ 1 │ 2 │ 3 │ 4 │
+ * ├─────────┼─────────┼─────────┼─────────┤
+ * │ 5 │ 6 │ 7 │ 8 │
+ * └─────────┴─────────┴─────────┴─────────┘
+ */
+ [0] = LAYOUT(
+ KC_MUTE, MO(1),
+ KC_1, KC_2, KC_3, KC_4,
+ KC_5, KC_6, KC_7, KC_8
+ ),
+ [1] = LAYOUT(
+ QK_BOOT, _______,
+ KC_1, KC_2, KC_3, KC_4,
+ TO(0), TO(2), TO(3), RGB_TOG
+ ),
+ [2] = LAYOUT(
+ _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ ),
+ [3] = LAYOUT(
+ _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ )
+ };
+#if defined (ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_HUD, RGB_HUI) },
+ [1] = { ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
+ [2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
+ [3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT)},
+};
+#endif
diff --git a/keyboards/dp3000/keymaps/default/rules.mk b/keyboards/dp3000/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/dp3000/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/dp3000/keymaps/via/keymap.c b/keyboards/dp3000/keymaps/via/keymap.c
new file mode 100644
index 000000000000..6d3561edbc54
--- /dev/null
+++ b/keyboards/dp3000/keymaps/via/keymap.c
@@ -0,0 +1,58 @@
+/*
+Copyright 2023 deddia permana (@depermana12)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌─────────┐ ┌─────────┐
+ * │ mute │ │ MO(1) │
+ * ├─────────┼─────────┬─────────┼─────────┤
+ * │ 1 │ 2 │ 3 │ 4 │
+ * ├─────────┼─────────┼─────────┼─────────┤
+ * │ 5 │ 6 │ 7 │ 8 │
+ * └─────────┴─────────┴─────────┴─────────┘
+ */
+ [0] = LAYOUT(
+ KC_MUTE, MO(1),
+ KC_1, KC_2, KC_3, KC_4,
+ KC_5, KC_6, KC_7, KC_8
+ ),
+ [1] = LAYOUT(
+ QK_BOOT, _______,
+ KC_1, KC_2, KC_3, KC_4,
+ TO(0), TO(2), TO(3), RGB_TOG
+ ),
+ [2] = LAYOUT(
+ _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ ),
+ [3] = LAYOUT(
+ _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ )
+ };
+#if defined (ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_HUD, RGB_HUI) },
+ [1] = { ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
+ [2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
+ [3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT)},
+};
+#endif
diff --git a/keyboards/dp3000/keymaps/via/rules.mk b/keyboards/dp3000/keymaps/via/rules.mk
new file mode 100644
index 000000000000..f1adcab005e8
--- /dev/null
+++ b/keyboards/dp3000/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/dp3000/readme.md b/keyboards/dp3000/readme.md
new file mode 100644
index 000000000000..3844a66757d0
--- /dev/null
+++ b/keyboards/dp3000/readme.md
@@ -0,0 +1,27 @@
+# DP3000
+
+![dp3000 macropad](https://i.imgur.com/uBHS8EYh.jpg)
+
+dp3000 is a simple yet elegant macropad, 2x4 (8 keys), dual encoder, embedded with an Atmel 32u4 chip, powered by QMK.
+
+* Keyboard Maintainer: [Deddia Permana](https://github.com/depermana12)
+* Hardware Supported: DP3000 PCB, ATmega32u4
+* Hardware Availability: [tokopedia.com/gundamtricks](https://www.tokopedia.com/gundamtricks)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dp3000:default
+
+Flashing example for this keyboard:
+
+ make dp3000:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* Bootmagic reset: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* Physical reset button: Briefly press reset button twice, located in front of the first rotary encoder (left rotary encoder)
+* Keycode in layout: Press the key mapped to QK_BOOT if it is available
diff --git a/keyboards/dp3000/rules.mk b/keyboards/dp3000/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/dp3000/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/drewkeys/mercury65/info.json b/keyboards/drewkeys/mercury65/info.json
new file mode 100644
index 000000000000..93f7b2ec3bc7
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/info.json
@@ -0,0 +1,99 @@
+{
+ "keyboard_name": "mercury65",
+ "maintainer": "Drewkeys",
+ "manufacturer": "RocketKeyboards",
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "url": "https://www.rocketkeyboards.com/collections/mercury65/products/gb-mercury65-keyboard",
+ "usb": {
+ "vid": "0xDE43",
+ "pid": "0x1034",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B0", "B1", "B2", "B3", "B7", "D1", "D2", "D3", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5"],
+ "rows": ["D5", "D4", "D6", "D0", "E6"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "label":"`", "x":0, "y":0},
+ {"matrix": [0, 1], "label":"!", "x":1, "y":0},
+ {"matrix": [0, 2], "label":"@", "x":2, "y":0},
+ {"matrix": [0, 3], "label":"#", "x":3, "y":0},
+ {"matrix": [0, 4], "label":"$", "x":4, "y":0},
+ {"matrix": [0, 5], "label":"%", "x":5, "y":0},
+ {"matrix": [0, 6], "label":"^", "x":6, "y":0},
+ {"matrix": [0, 7], "label":"&", "x":7, "y":0},
+ {"matrix": [0, 8], "label":"*", "x":8, "y":0},
+ {"matrix": [0, 9], "label":"(", "x":9, "y":0},
+ {"matrix": [0, 10], "label":")", "x":10, "y":0},
+ {"matrix": [0, 11], "label":"_", "x":11, "y":0},
+ {"matrix": [0, 12], "label":"+", "x":12, "y":0},
+ {"matrix": [0, 13], "label":"Del", "x":13, "y":0},
+ {"matrix": [0, 14], "label":"Bsp", "x":14, "y":0},
+ {"matrix": [1, 0], "label":"Tab", "x":0, "y":1, "w":1.5},
+ {"matrix": [1, 2], "label":"Q", "x":1.5, "y":1},
+ {"matrix": [1, 3], "label":"W", "x":2.5, "y":1},
+ {"matrix": [1, 4], "label":"E", "x":3.5, "y":1},
+ {"matrix": [1, 5], "label":"R", "x":4.5, "y":1},
+ {"matrix": [1, 6], "label":"T", "x":5.5, "y":1},
+ {"matrix": [1, 7], "label":"Y", "x":6.5, "y":1},
+ {"matrix": [1, 8], "label":"U", "x":7.5, "y":1},
+ {"matrix": [1, 9], "label":"I", "x":8.5, "y":1},
+ {"matrix": [1, 10], "label":"O", "x":9.5, "y":1},
+ {"matrix": [1, 11], "label":"P", "x":10.5, "y":1},
+ {"matrix": [1, 12], "label":"{", "x":11.5, "y":1},
+ {"matrix": [1, 13], "label":"}", "x":12.5, "y":1},
+ {"matrix": [1, 14], "label":"|", "x":13.5, "y":1, "w":1.5},
+ {"matrix": [1, 16], "label":"PgUp", "x":15.5, "y":1},
+ {"matrix": [2, 0], "label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"matrix": [2, 2], "label":"A", "x":1.75, "y":2},
+ {"matrix": [2, 3], "label":"S", "x":2.75, "y":2},
+ {"matrix": [2, 4], "label":"D", "x":3.75, "y":2},
+ {"matrix": [2, 5], "label":"F", "x":4.75, "y":2},
+ {"matrix": [2, 6], "label":"G", "x":5.75, "y":2},
+ {"matrix": [2, 7], "label":"H", "x":6.75, "y":2},
+ {"matrix": [2, 8], "label":"J", "x":7.75, "y":2},
+ {"matrix": [2, 9], "label":"K", "x":8.75, "y":2},
+ {"matrix": [2, 10], "label":"L", "x":9.75, "y":2},
+ {"matrix": [2, 11], "label":":", "x":10.75, "y":2},
+ {"matrix": [2, 12], "label":"@", "x":11.75, "y":2},
+ {"matrix": [2, 13], "label":"ISO", "x":12.75, "y":2},
+ {"matrix": [2, 14], "label":"Enter", "x":13.75, "y":2, "w":1.25},
+ {"matrix": [2, 16], "label":"Home", "x":15.5, "y":2},
+ {"matrix": [3, 0], "label":"Shift", "x":0, "y":3, "w":1.25},
+ {"matrix": [3, 1], "label":"\\", "x":1.25, "y":3},
+ {"matrix": [3, 2], "label":"Z", "x":2.25, "y":3},
+ {"matrix": [3, 3], "label":"X", "x":3.25, "y":3},
+ {"matrix": [3, 4], "label":"C", "x":4.25, "y":3},
+ {"matrix": [3, 5], "label":"V", "x":5.25, "y":3},
+ {"matrix": [3, 6], "label":"B", "x":6.25, "y":3},
+ {"matrix": [3, 7], "label":"N", "x":7.25, "y":3},
+ {"matrix": [3, 8], "label":"M", "x":8.25, "y":3},
+ {"matrix": [3, 9], "label":"<", "x":9.25, "y":3},
+ {"matrix": [3, 10], "label":">", "x":10.25, "y":3},
+ {"matrix": [3, 11], "label":"?", "x":11.25, "y":3},
+ {"matrix": [3, 13], "label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"matrix": [3, 14], "label":"End", "x":15.5, "y":3},
+ {"matrix": [3, 16], "label":"\u2191", "x":14.25, "y":3.25},
+ {"matrix": [4, 0], "label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"matrix": [4, 1], "label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"matrix": [4, 2], "label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"matrix": [4, 6], "x":3.75, "y":4, "w":6.25},
+ {"matrix": [4, 10], "label":"AltGr", "x":10, "y":4, "w":1.25},
+ {"matrix": [4, 11], "label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"matrix": [4, 13], "label":"\u2190", "x":13.25, "y":4.25},
+ {"matrix": [4, 14], "label":"\u2193", "x":14.25, "y":4.25},
+ {"matrix": [4, 15], "label":"\u2192", "x":15.25, "y":4.25}]
+ }
+ }
+
+}
diff --git a/keyboards/drewkeys/mercury65/keymaps/default/keymap.c b/keyboards/drewkeys/mercury65/keymaps/default/keymap.c
new file mode 100644
index 000000000000..2f9cc945c9d2
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2023 Drewkeys
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base https://i.imgur.com/viQdtbB.png */
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FN] = LAYOUT(
+ QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/drewkeys/mercury65/keymaps/via/keymap.c b/keyboards/drewkeys/mercury65/keymaps/via/keymap.c
new file mode 100644
index 000000000000..2af6a064f298
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/keymaps/via/keymap.c
@@ -0,0 +1,44 @@
+/* Copyright 2023 Drewkeys
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base https://i.imgur.com/viQdtbB.png */
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FN1] = LAYOUT(
+ QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/drewkeys/mercury65/keymaps/via/rules.mk b/keyboards/drewkeys/mercury65/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/drewkeys/mercury65/readme.md b/keyboards/drewkeys/mercury65/readme.md
new file mode 100644
index 000000000000..be8f4c17843e
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/readme.md
@@ -0,0 +1,23 @@
+# Mercury65
+
+![Mercury65](https://i.imgur.com/rjfARj3h.jpeg)
+
+*65% Form Factor with a Separated Arrow Cluster used for Mercury65*
+
+
+* Keyboard Maintainer: [Drewkeys](https://github.com/drewpyun)
+* Hardware Supported: Made specifically for Mercury65, 65% hotswap supported
+* Hardware Availability: https://www.rocketkeyboards.com/collections/mercury65/products/gb-mercury65-keyboard
+
+Make example for this keyboard (after setting up your build environment):
+
+ make drewkeys/mercury65:default
+
+Flashing example for this keyboard:
+
+ make drewkeys/mercury65:default:flash
+## Bootloader
+
+Resetting Board: Press the button on the PCB next to the spacebar to soft reset the board to reflash (bootloader mode).
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/drewkeys/mercury65/rules.mk b/keyboards/drewkeys/mercury65/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/drewkeys/mercury65/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/drop/alt/keymaps/default/keymap.c b/keyboards/drop/alt/keymaps/default/keymap.c
new file mode 100644
index 000000000000..28d7232bcfc8
--- /dev/null
+++ b/keyboards/drop/alt/keymaps/default/keymap.c
@@ -0,0 +1,20 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_ansi_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MUTE,
+ _______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, KC_END,
+ _______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD,
+ _______, _______, _______, EE_CLR, KC_APP, _______, KC_HOME, KC_PGDN, KC_END
+ )
+};
diff --git a/keyboards/drop/alt/keymaps/via/config.h b/keyboards/drop/alt/keymaps/via/config.h
new file mode 100644
index 000000000000..616f8e329102
--- /dev/null
+++ b/keyboards/drop/alt/keymaps/via/config.h
@@ -0,0 +1,5 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 8
diff --git a/keyboards/drop/alt/keymaps/via/keymap.c b/keyboards/drop/alt/keymaps/via/keymap.c
new file mode 100644
index 000000000000..28d7232bcfc8
--- /dev/null
+++ b/keyboards/drop/alt/keymaps/via/keymap.c
@@ -0,0 +1,20 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_ansi_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MUTE,
+ _______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, KC_END,
+ _______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD,
+ _______, _______, _______, EE_CLR, KC_APP, _______, KC_HOME, KC_PGDN, KC_END
+ )
+};
diff --git a/keyboards/drop/alt/keymaps/via/rules.mk b/keyboards/drop/alt/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/drop/alt/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/drop/alt/v2/board.h b/keyboards/drop/alt/v2/board.h
new file mode 100644
index 000000000000..ed3ea4b1f776
--- /dev/null
+++ b/keyboards/drop/alt/v2/board.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/drop/alt/v2/config.h b/keyboards/drop/alt/v2/config.h
new file mode 100644
index 000000000000..f3f432390e1a
--- /dev/null
+++ b/keyboards/drop/alt/v2/config.h
@@ -0,0 +1,29 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define ADC_BUFFER_DEPTH 4
+#define ADC_SAMPLING_RATE ADC_SMPR_SMP_601P5
+#define ADC_RESOLUTION ADC_CFGR_RES_12BITS
+
+#define I2C_DRIVER I2CD2
+#define I2C1_SCL_PIN A9
+#define I2C1_SDA_PIN A10
+
+#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10101000
+#define EXTERNAL_EEPROM_WP_PIN B5
+#define EEPROM_I2C_24LC256
+
+#define DRIVER_ADDR_1 0b1010011
+#define DRIVER_ADDR_2 0b1011111
+#define DRIVER_COUNT 2
+#define RGB_MATRIX_LED_COUNT 111
+#define ISSI_PWM_FREQUENCY 0b010 // 26k
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_DEFAULT_VAL 100
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+#define RGB_MATRIX_CYCLE_ZONES_ENABLE
+#define RGB_MATRIX_CAPS_LOCK_INDEX 30
diff --git a/keyboards/drop/alt/v2/halconf.h b/keyboards/drop/alt/v2/halconf.h
new file mode 100644
index 000000000000..77495ecfa0d0
--- /dev/null
+++ b/keyboards/drop/alt/v2/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define HAL_USE_ADC TRUE
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/drop/alt/v2/info.json b/keyboards/drop/alt/v2/info.json
new file mode 100644
index 000000000000..432dd4b2d1a1
--- /dev/null
+++ b/keyboards/drop/alt/v2/info.json
@@ -0,0 +1,261 @@
+{
+ "keyboard_name": "ALT v2",
+ "manufacturer": "Drop Inc.",
+ "maintainer": "zvecr",
+ "processor": "STM32F303",
+ "bootloader": "tinyuf2",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["C0", "C1", "C2", "C3", "B4", "B3", "C6", "C7", "C8", "C9", "C10", "C11", "C12", "C13", "C14"],
+ "rows": ["A0", "A1", "A2", "A3", "B10"]
+ },
+ "usb": {
+ "vid": "0x359B",
+ "pid": "0x0006",
+ "device_version": "2.0.0"
+ },
+ "eeprom": {
+ "driver": "i2c"
+ },
+ "features": {
+ "rgb_matrix": true,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "community_layouts": ["65_ansi_blocker"],
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_65_ansi_blocker"
+ },
+ "layouts": {
+ "LAYOUT_65_ansi_blocker": {
+ "layout": [
+ {"matrix": [0, 0], "label":"ESCAPE", "x":0, "y":0},
+ {"matrix": [0, 1], "label":"1", "x":1, "y":0},
+ {"matrix": [0, 2], "label":"2", "x":2, "y":0},
+ {"matrix": [0, 3], "label":"3", "x":3, "y":0},
+ {"matrix": [0, 4], "label":"4", "x":4, "y":0},
+ {"matrix": [0, 5], "label":"5", "x":5, "y":0},
+ {"matrix": [0, 6], "label":"6", "x":6, "y":0},
+ {"matrix": [0, 7], "label":"7", "x":7, "y":0},
+ {"matrix": [0, 8], "label":"8", "x":8, "y":0},
+ {"matrix": [0, 9], "label":"9", "x":9, "y":0},
+ {"matrix": [0, 10], "label":"0", "x":10, "y":0},
+ {"matrix": [0, 11], "label":"MINUS", "x":11, "y":0},
+ {"matrix": [0, 12], "label":"EQUALS", "x":12, "y":0},
+ {"matrix": [0, 13], "label":"BACKSPACE", "x":13, "y":0, "w":2},
+ {"matrix": [0, 14], "label":"DELETE", "x":15, "y":0},
+ {"matrix": [1, 0], "label":"TAB", "x":0, "y":1, "w":1.5},
+ {"matrix": [1, 1], "label":"Q", "x":1.5, "y":1},
+ {"matrix": [1, 2], "label":"W", "x":2.5, "y":1},
+ {"matrix": [1, 3], "label":"E", "x":3.5, "y":1},
+ {"matrix": [1, 4], "label":"R", "x":4.5, "y":1},
+ {"matrix": [1, 5], "label":"T", "x":5.5, "y":1},
+ {"matrix": [1, 6], "label":"Y", "x":6.5, "y":1},
+ {"matrix": [1, 7], "label":"U", "x":7.5, "y":1},
+ {"matrix": [1, 8], "label":"I", "x":8.5, "y":1},
+ {"matrix": [1, 9], "label":"O", "x":9.5, "y":1},
+ {"matrix": [1, 10], "label":"P", "x":10.5, "y":1},
+ {"matrix": [1, 11], "label":"LEFT BRACKET", "x":11.5, "y":1},
+ {"matrix": [1, 12], "label":"RIGHT BRACKET", "x":12.5, "y":1},
+ {"matrix": [1, 13], "label":"BACK SLASH", "x":13.5, "y":1, "w":1.5},
+ {"matrix": [1, 14], "label":"HOME", "x":15, "y":1},
+ {"matrix": [2, 0], "label":"CAPS LOCK", "x":0, "y":2, "w":1.75},
+ {"matrix": [2, 1], "label":"A", "x":1.75, "y":2},
+ {"matrix": [2, 2], "label":"S", "x":2.75, "y":2},
+ {"matrix": [2, 3], "label":"D", "x":3.75, "y":2},
+ {"matrix": [2, 4], "label":"F", "x":4.75, "y":2},
+ {"matrix": [2, 5], "label":"G", "x":5.75, "y":2},
+ {"matrix": [2, 6], "label":"H", "x":6.75, "y":2},
+ {"matrix": [2, 7], "label":"J", "x":7.75, "y":2},
+ {"matrix": [2, 8], "label":"K", "x":8.75, "y":2},
+ {"matrix": [2, 9], "label":"L", "x":9.75, "y":2},
+ {"matrix": [2, 10], "label":"SEMICOLON", "x":10.75, "y":2},
+ {"matrix": [2, 11], "label":"SINGLE TICK", "x":11.75, "y":2},
+ {"matrix": [2, 13], "label":"ENTER", "x":12.75, "y":2, "w":2.25},
+ {"matrix": [2, 14], "label":"PAGE UP", "x":15, "y":2},
+ {"matrix": [3, 0], "label":"LEFT SHIFT", "x":0, "y":3, "w":2.25},
+ {"matrix": [3, 2], "label":"Z", "x":2.25, "y":3},
+ {"matrix": [3, 3], "label":"X", "x":3.25, "y":3},
+ {"matrix": [3, 4], "label":"C", "x":4.25, "y":3},
+ {"matrix": [3, 5], "label":"V", "x":5.25, "y":3},
+ {"matrix": [3, 6], "label":"B", "x":6.25, "y":3},
+ {"matrix": [3, 7], "label":"N", "x":7.25, "y":3},
+ {"matrix": [3, 8], "label":"M", "x":8.25, "y":3},
+ {"matrix": [3, 9], "label":"COMMA", "x":9.25, "y":3},
+ {"matrix": [3, 10], "label":"PERIOD", "x":10.25, "y":3},
+ {"matrix": [3, 11], "label":"FORWARD SLASH", "x":11.25, "y":3},
+ {"matrix": [3, 12], "label":"RIGHT SHIFT", "x":12.25, "y":3, "w":1.75},
+ {"matrix": [3, 13], "label":"UP ARROW", "x":14, "y":3},
+ {"matrix": [3, 14], "label":"PAGE DOWN", "x":15, "y":3},
+ {"matrix": [4, 0], "label":"LEFT CTRL", "x":0, "y":4, "w":1.25},
+ {"matrix": [4, 1], "label":"LEFT WIN", "x":1.25, "y":4, "w":1.25},
+ {"matrix": [4, 2], "label":"LEFT ALT", "x":2.5, "y":4, "w":1.25},
+ {"matrix": [4, 6], "label":"SPACEBAR", "x":3.75, "y":4, "w":6.25},
+ {"matrix": [4, 10], "label":"RIGHT ALT", "x":10, "y":4, "w":1.25},
+ {"matrix": [4, 11], "label":"FN", "x":11.25, "y":4, "w":1.25},
+ {"matrix": [4, 12], "label":"LEFT ARROW", "x":13, "y":4},
+ {"matrix": [4, 13], "label":"DOWN ARROW", "x":14, "y":4},
+ {"matrix": [4, 14], "label":"RIGHT ARROW", "x":15, "y":4}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ { "flags": 4, "matrix": [0, 0], "x": 8, "y": 56 },
+ { "flags": 4, "matrix": [0, 1], "x": 22, "y": 56 },
+ { "flags": 4, "matrix": [0, 2], "x": 35, "y": 56 },
+ { "flags": 4, "matrix": [0, 3], "x": 49, "y": 56 },
+ { "flags": 4, "matrix": [0, 4], "x": 63, "y": 56 },
+ { "flags": 4, "matrix": [0, 5], "x": 77, "y": 56 },
+ { "flags": 4, "matrix": [0, 6], "x": 91, "y": 56 },
+ { "flags": 4, "matrix": [0, 7], "x": 105, "y": 56 },
+ { "flags": 4, "matrix": [0, 8], "x": 118, "y": 56 },
+ { "flags": 4, "matrix": [0, 9], "x": 132, "y": 56 },
+ { "flags": 4, "matrix": [0, 10], "x": 146, "y": 56 },
+ { "flags": 4, "matrix": [0, 11], "x": 160, "y": 56 },
+ { "flags": 4, "matrix": [0, 12], "x": 174, "y": 56 },
+ { "flags": 4, "matrix": [0, 13], "x": 195, "y": 56 },
+ { "flags": 4, "matrix": [0, 14], "x": 215, "y": 56 },
+ { "flags": 4, "matrix": [1, 0], "x": 11, "y": 44 },
+ { "flags": 4, "matrix": [1, 1], "x": 28, "y": 44 },
+ { "flags": 4, "matrix": [1, 2], "x": 42, "y": 44 },
+ { "flags": 4, "matrix": [1, 3], "x": 56, "y": 44 },
+ { "flags": 4, "matrix": [1, 4], "x": 70, "y": 44 },
+ { "flags": 4, "matrix": [1, 5], "x": 84, "y": 44 },
+ { "flags": 4, "matrix": [1, 6], "x": 98, "y": 44 },
+ { "flags": 4, "matrix": [1, 7], "x": 112, "y": 44 },
+ { "flags": 4, "matrix": [1, 8], "x": 125, "y": 44 },
+ { "flags": 4, "matrix": [1, 9], "x": 139, "y": 44 },
+ { "flags": 4, "matrix": [1, 10], "x": 153, "y": 44 },
+ { "flags": 4, "matrix": [1, 11], "x": 167, "y": 44 },
+ { "flags": 4, "matrix": [1, 12], "x": 181, "y": 44 },
+ { "flags": 4, "matrix": [1, 13], "x": 198, "y": 44 },
+ { "flags": 4, "matrix": [1, 14], "x": 215, "y": 44 },
+ { "flags": 4, "matrix": [2, 0], "x": 13, "y": 32 },
+ { "flags": 4, "matrix": [2, 1], "x": 32, "y": 32 },
+ { "flags": 4, "matrix": [2, 2], "x": 46, "y": 32 },
+ { "flags": 4, "matrix": [2, 3], "x": 60, "y": 32 },
+ { "flags": 4, "matrix": [2, 4], "x": 73, "y": 32 },
+ { "flags": 4, "matrix": [2, 5], "x": 87, "y": 32 },
+ { "flags": 4, "matrix": [2, 6], "x": 101, "y": 32 },
+ { "flags": 4, "matrix": [2, 7], "x": 115, "y": 32 },
+ { "flags": 4, "matrix": [2, 8], "x": 129, "y": 32 },
+ { "flags": 4, "matrix": [2, 9], "x": 143, "y": 32 },
+ { "flags": 4, "matrix": [2, 10], "x": 156, "y": 32 },
+ { "flags": 4, "matrix": [2, 11], "x": 170, "y": 32 },
+ { "flags": 4, "matrix": [2, 13], "x": 193, "y": 32 },
+ { "flags": 4, "matrix": [2, 14], "x": 215, "y": 32 },
+ { "flags": 4, "matrix": [3, 0], "x": 16, "y": 19 },
+ { "flags": 4, "matrix": [3, 2], "x": 39, "y": 19 },
+ { "flags": 4, "matrix": [3, 3], "x": 53, "y": 19 },
+ { "flags": 4, "matrix": [3, 4], "x": 67, "y": 19 },
+ { "flags": 4, "matrix": [3, 5], "x": 80, "y": 19 },
+ { "flags": 4, "matrix": [3, 6], "x": 94, "y": 19 },
+ { "flags": 4, "matrix": [3, 7], "x": 108, "y": 19 },
+ { "flags": 4, "matrix": [3, 8], "x": 122, "y": 19 },
+ { "flags": 4, "matrix": [3, 9], "x": 136, "y": 19 },
+ { "flags": 4, "matrix": [3, 10], "x": 150, "y": 19 },
+ { "flags": 4, "matrix": [3, 11], "x": 163, "y": 19 },
+ { "flags": 4, "matrix": [3, 12], "x": 182, "y": 19 },
+ { "flags": 4, "matrix": [3, 13], "x": 201, "y": 19 },
+ { "flags": 4, "matrix": [3, 14], "x": 215, "y": 19 },
+ { "flags": 4, "matrix": [4, 0], "x": 9, "y": 7 },
+ { "flags": 4, "matrix": [4, 1], "x": 27, "y": 7 },
+ { "flags": 4, "matrix": [4, 2], "x": 44, "y": 7 },
+ { "flags": 4, "matrix": [4, 6], "x": 96, "y": 7 },
+ { "flags": 4, "matrix": [4, 10], "x": 148, "y": 7 },
+ { "flags": 4, "matrix": [4, 11], "x": 165, "y": 7 },
+ { "flags": 4, "matrix": [4, 12], "x": 188, "y": 7 },
+ { "flags": 4, "matrix": [4, 13], "x": 201, "y": 7 },
+ { "flags": 4, "matrix": [4, 14], "x": 215, "y": 7 },
+ { "flags": 2, "x": 1, "y": 1 },
+ { "flags": 2, "x": 15, "y": 0 },
+ { "flags": 2, "x": 31, "y": 0 },
+ { "flags": 2, "x": 47, "y": 0 },
+ { "flags": 2, "x": 63, "y": 0 },
+ { "flags": 2, "x": 79, "y": 0 },
+ { "flags": 2, "x": 95, "y": 0 },
+ { "flags": 2, "x": 112, "y": 0 },
+ { "flags": 2, "x": 128, "y": 0 },
+ { "flags": 2, "x": 144, "y": 0 },
+ { "flags": 2, "x": 160, "y": 0 },
+ { "flags": 2, "x": 176, "y": 0 },
+ { "flags": 2, "x": 192, "y": 0 },
+ { "flags": 2, "x": 208, "y": 0 },
+ { "flags": 2, "x": 222, "y": 1 },
+ { "flags": 2, "x": 224, "y": 13 },
+ { "flags": 2, "x": 224, "y": 25 },
+ { "flags": 2, "x": 224, "y": 38 },
+ { "flags": 2, "x": 224, "y": 50 },
+ { "flags": 2, "x": 222, "y": 62 },
+ { "flags": 2, "x": 191, "y": 64 },
+ { "flags": 2, "x": 179, "y": 64 },
+ { "flags": 2, "x": 167, "y": 64 },
+ { "flags": 2, "x": 153, "y": 64 },
+ { "flags": 2, "x": 139, "y": 64 },
+ { "flags": 2, "x": 125, "y": 64 },
+ { "flags": 2, "x": 112, "y": 64 },
+ { "flags": 2, "x": 98, "y": 64 },
+ { "flags": 2, "x": 84, "y": 64 },
+ { "flags": 2, "x": 70, "y": 64 },
+ { "flags": 2, "x": 56, "y": 64 },
+ { "flags": 2, "x": 42, "y": 64 },
+ { "flags": 2, "x": 28, "y": 64 },
+ { "flags": 2, "x": 1, "y": 62 },
+ { "flags": 2, "x": 0, "y": 50 },
+ { "flags": 2, "x": 0, "y": 38 },
+ { "flags": 2, "x": 0, "y": 25 },
+ { "flags": 2, "x": 0, "y": 13 }
+ ]
+ }
+}
diff --git a/keyboards/drop/alt/v2/mcuconf.h b/keyboards/drop/alt/v2/mcuconf.h
new file mode 100644
index 000000000000..dc3e45dac054
--- /dev/null
+++ b/keyboards/drop/alt/v2/mcuconf.h
@@ -0,0 +1,20 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next
+
+#undef STM32_PLLM_VALUE
+#define STM32_PLLM_VALUE 16
+
+#undef STM32_PREDIV_VALUE
+#define STM32_PREDIV_VALUE 2
+
+#undef STM32_ADC_USE_ADC2
+#define STM32_ADC_USE_ADC2 TRUE
+
+#undef STM32_ADC_USE_ADC3
+#define STM32_ADC_USE_ADC3 TRUE
+
+#undef STM32_I2C_USE_I2C2
+#define STM32_I2C_USE_I2C2 TRUE
diff --git a/keyboards/drop/alt/v2/readme.md b/keyboards/drop/alt/v2/readme.md
new file mode 100644
index 000000000000..bf69d4b28967
--- /dev/null
+++ b/keyboards/drop/alt/v2/readme.md
@@ -0,0 +1,24 @@
+# ALT v2
+
+The Drop ALT v2 is a 65% mechanical keyboard featuring dual USB-C connectors, an integrated Hi-Speed USB 2.0 hub, and fully customizable RGB backlighting and underlighting.
+
+* Keyboard Maintainer: [zvecr](https://github.com/zvecr)
+* Hardware Availability: [Drop ALT Mechanical Keyboard](https://drop.com/buy/drop-alt-mechanical-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make drop/alt/v2:default
+
+Flashing example for this keyboard:
+
+ make drop/alt/v2: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**: Quickly double tap the button located under the spacebar
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/drop/alt/v2/rules.mk b/keyboards/drop/alt/v2/rules.mk
new file mode 100644
index 000000000000..a504f81cb146
--- /dev/null
+++ b/keyboards/drop/alt/v2/rules.mk
@@ -0,0 +1,4 @@
+UF2_DEVICE_TYPE_ID = 0x35446147
+UF2CONV_ARGS = --device-type $(UF2_DEVICE_TYPE_ID)
+
+SRC += analog.c lib/common.c lib/mux.c
diff --git a/keyboards/drop/alt/v2/v2.c b/keyboards/drop/alt/v2/v2.c
new file mode 100644
index 000000000000..2e183fe4d82b
--- /dev/null
+++ b/keyboards/drop/alt/v2/v2.c
@@ -0,0 +1,114 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#ifdef RGB_MATRIX_ENABLE
+# include "rgb_matrix.h"
+
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+ { 1, B_2, A_2, C_2 },
+ { 1, E_3, D_3, F_3 },
+ { 1, E_4, D_4, F_4 },
+ { 1, E_5, D_5, F_5 },
+ { 1, E_6, D_6, F_6 },
+ { 1, E_7, D_7, F_7 },
+ { 1, E_8, D_8, F_8 },
+ { 1, B_13, A_13, C_13 },
+ { 0, E_1, D_1, F_1 },
+ { 0, E_2, D_2, F_2 },
+ { 0, E_3, D_3, F_3 },
+ { 0, E_4, D_4, F_4 },
+ { 0, E_5, D_5, F_5 },
+ { 0, E_6, D_6, F_6 },
+ { 0, B_7, A_7, C_7 },
+ { 1, E_2, D_2, F_2 },
+ { 1, H_3, G_3, I_3 },
+ { 1, H_4, G_4, I_4 },
+ { 1, H_5, G_5, I_5 },
+ { 1, H_6, G_6, I_6 },
+ { 1, H_7, G_7, I_7 },
+ { 1, H_8, G_8, I_8 },
+ { 0, H_1, G_1, I_1 },
+ { 0, H_2, G_2, I_2 },
+ { 0, H_3, G_3, I_3 },
+ { 0, H_4, G_4, I_4 },
+ { 0, H_5, G_5, I_5 },
+ { 0, K_11, J_11, L_11 },
+ { 0, H_6, G_6, I_6 },
+ { 0, E_7, D_7, F_7 },
+ { 1, H_2, G_2, I_2 },
+ { 1, K_3, J_3, L_3 },
+ { 1, K_4, J_4, L_4 },
+ { 1, K_5, J_5, L_5 },
+ { 1, K_6, J_6, L_6 },
+ { 1, K_7, J_7, L_7 },
+ { 1, K_8, J_8, L_8 },
+ { 0, K_1, J_1, L_1 },
+ { 0, K_2, J_2, L_2 },
+ { 0, K_3, J_3, L_3 },
+ { 0, K_4, J_4, L_4 },
+ { 0, K_5, J_5, L_5 },
+ { 0, K_6, J_6, L_6 },
+ { 0, H_7, G_7, I_7 },
+ { 1, K_2, J_2, L_2 },
+ { 1, E_9, D_9, F_9 },
+ { 1, B_9, A_9, C_9 },
+ { 1, K_9, J_9, L_9 },
+ { 1, H_9, G_9, I_9 },
+ { 1, K_12, J_12, L_12 },
+ { 1, K_13, J_13, L_13 },
+ { 0, K_9, J_9, L_9 },
+ { 0, K_10, J_10, L_10 },
+ { 0, H_10, G_10, I_10 },
+ { 0, H_11, G_11, I_11 },
+ { 0, B_11, A_11, C_11 },
+ { 0, E_11, D_11, F_11 },
+ { 0, K_7, J_7, L_7 },
+ { 1, H_10, G_10, I_10 },
+ { 1, E_10, D_10, F_10 },
+ { 1, B_10, A_10, C_10 },
+ { 1, H_12, G_12, I_12 },
+ { 0, E_10, D_10, F_10 },
+ { 0, B_10, A_10, C_10 },
+ { 0, B_12, A_12, C_12 },
+ { 0, H_12, G_12, I_12 },
+ { 0, E_12, D_12, F_12 },
+ { 1, K_11, J_11, L_11 },
+ { 1, H_11, G_11, I_11 },
+ { 1, E_11, D_11, F_11 },
+ { 1, B_11, A_11, C_11 },
+ { 1, B_12, A_12, C_12 },
+ { 1, E_12, D_12, F_12 },
+ { 1, E_13, D_13, F_13 },
+ { 1, H_13, G_13, I_13 },
+ { 0, H_9, G_9, I_9 },
+ { 0, E_9, D_9, F_9 },
+ { 0, B_9, A_9, C_9 },
+ { 0, B_13, A_13, C_13 },
+ { 0, H_13, G_13, I_13 },
+ { 0, E_13, D_13, F_13 },
+ { 0, K_13, J_13, L_13 },
+ { 0, K_12, J_12, L_12 },
+ { 0, K_8, J_8, L_8 },
+ { 0, H_8, G_8, I_8 },
+ { 0, E_8, D_8, F_8 },
+ { 0, B_8, A_8, C_8 },
+ { 0, B_6, A_6, C_6 },
+ { 0, B_5, A_5, C_5 },
+ { 0, B_4, A_4, C_4 },
+ { 0, B_3, A_3, C_3 },
+ { 0, B_2, A_2, C_2 },
+ { 0, B_1, A_1, C_1 },
+ { 0, B_14, A_14, C_14 },
+ { 1, B_8, A_8, C_8 },
+ { 1, B_7, A_7, C_7 },
+ { 1, B_6, A_6, C_6 },
+ { 1, B_5, A_5, C_5 },
+ { 1, B_4, A_4, C_4 },
+ { 1, B_3, A_3, C_3 },
+ { 1, B_1, A_1, C_1 },
+ { 1, E_1, D_1, F_1 },
+ { 1, H_1, G_1, I_1 },
+ { 1, K_1, J_1, L_1 },
+ { 1, K_10, J_10, L_10 },
+};
+
+#endif
diff --git a/keyboards/drop/ctrl/keymaps/default/keymap.c b/keyboards/drop/ctrl/keymaps/default/keymap.c
new file mode 100644
index 000000000000..82b108892175
--- /dev/null
+++ b/keyboards/drop/ctrl/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU,
+ _______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD,
+ _______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, EE_CLR, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/drop/ctrl/keymaps/via/config.h b/keyboards/drop/ctrl/keymaps/via/config.h
new file mode 100644
index 000000000000..616f8e329102
--- /dev/null
+++ b/keyboards/drop/ctrl/keymaps/via/config.h
@@ -0,0 +1,5 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 8
diff --git a/keyboards/drop/ctrl/keymaps/via/keymap.c b/keyboards/drop/ctrl/keymaps/via/keymap.c
new file mode 100644
index 000000000000..82b108892175
--- /dev/null
+++ b/keyboards/drop/ctrl/keymaps/via/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU,
+ _______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD,
+ _______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, EE_CLR, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/drop/ctrl/keymaps/via/rules.mk b/keyboards/drop/ctrl/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/drop/ctrl/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/drop/ctrl/v2/board.h b/keyboards/drop/ctrl/v2/board.h
new file mode 100644
index 000000000000..ed3ea4b1f776
--- /dev/null
+++ b/keyboards/drop/ctrl/v2/board.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/drop/ctrl/v2/config.h b/keyboards/drop/ctrl/v2/config.h
new file mode 100644
index 000000000000..539c505cb38c
--- /dev/null
+++ b/keyboards/drop/ctrl/v2/config.h
@@ -0,0 +1,29 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define ADC_BUFFER_DEPTH 4
+#define ADC_SAMPLING_RATE ADC_SMPR_SMP_601P5
+#define ADC_RESOLUTION ADC_CFGR_RES_12BITS
+
+#define I2C_DRIVER I2CD2
+#define I2C1_SCL_PIN A9
+#define I2C1_SDA_PIN A10
+
+#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10101000
+#define EXTERNAL_EEPROM_WP_PIN B5
+#define EEPROM_I2C_24LC256
+
+#define DRIVER_ADDR_1 0b1010011
+#define DRIVER_ADDR_2 0b1011111
+#define DRIVER_COUNT 2
+#define RGB_MATRIX_LED_COUNT 119
+#define ISSI_PWM_FREQUENCY 0b010 // 26k
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_DEFAULT_VAL 100
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+#define RGB_MATRIX_CYCLE_ZONES_ENABLE
+#define RGB_MATRIX_CAPS_LOCK_INDEX 50
diff --git a/keyboards/drop/ctrl/v2/halconf.h b/keyboards/drop/ctrl/v2/halconf.h
new file mode 100644
index 000000000000..77495ecfa0d0
--- /dev/null
+++ b/keyboards/drop/ctrl/v2/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define HAL_USE_ADC TRUE
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/drop/ctrl/v2/info.json b/keyboards/drop/ctrl/v2/info.json
new file mode 100644
index 000000000000..30b86db9b5e9
--- /dev/null
+++ b/keyboards/drop/ctrl/v2/info.json
@@ -0,0 +1,295 @@
+{
+ "keyboard_name": "CTRL v2",
+ "manufacturer": "Drop Inc.",
+ "maintainer": "zvecr",
+ "processor": "STM32F303",
+ "bootloader": "tinyuf2",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["C0", "C1", "C2", "C3", "C6", "C7", "C8", "C9"],
+ "rows": ["A0", "A1", "A2", "A3", "C10", "C11", "C12", "B3", "C14", "C13", "C15"]
+ },
+ "usb": {
+ "vid": "0x359B",
+ "pid": "0x0009",
+ "device_version": "2.0.0"
+ },
+ "eeprom": {
+ "driver": "i2c"
+ },
+ "features": {
+ "rgb_matrix": true,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "community_layouts": ["tkl_ansi"],
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_tkl_ansi"
+ },
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "label":"ESCAPE", "x":0, "y":0},
+ {"matrix": [0, 1], "label":"F1", "x":2, "y":0},
+ {"matrix": [0, 2], "label":"F2", "x":3, "y":0},
+ {"matrix": [0, 3], "label":"F3", "x":4, "y":0},
+ {"matrix": [0, 4], "label":"F4", "x":5, "y":0},
+ {"matrix": [0, 5], "label":"F5", "x":6.5, "y":0},
+ {"matrix": [0, 6], "label":"F6", "x":7.5, "y":0},
+ {"matrix": [0, 7], "label":"F7", "x":8.5, "y":0},
+ {"matrix": [6, 0], "label":"F8", "x":9.5, "y":0},
+ {"matrix": [6, 1], "label":"F9", "x":11, "y":0},
+ {"matrix": [6, 2], "label":"F10", "x":12, "y":0},
+ {"matrix": [6, 3], "label":"F11", "x":13, "y":0},
+ {"matrix": [6, 4], "label":"F12", "x":14, "y":0},
+ {"matrix": [6, 5], "label":"PRINT SCREEN", "x":15.5, "y":0},
+ {"matrix": [6, 6], "label":"SCROLL LOCK", "x":16.5, "y":0},
+ {"matrix": [6, 7], "label":"PAUSE BREAK", "x":17.5, "y":0},
+ {"matrix": [1, 0], "label":"BACKTICK", "x":0, "y":1.5},
+ {"matrix": [1, 1], "label":"1", "x":1, "y":1.5},
+ {"matrix": [1, 2], "label":"2", "x":2, "y":1.5},
+ {"matrix": [1, 3], "label":"3", "x":3, "y":1.5},
+ {"matrix": [1, 4], "label":"4", "x":4, "y":1.5},
+ {"matrix": [1, 5], "label":"5", "x":5, "y":1.5},
+ {"matrix": [1, 6], "label":"6", "x":6, "y":1.5},
+ {"matrix": [1, 7], "label":"7", "x":7, "y":1.5},
+ {"matrix": [7, 0], "label":"8", "x":8, "y":1.5},
+ {"matrix": [7, 1], "label":"9", "x":9, "y":1.5},
+ {"matrix": [7, 2], "label":"0", "x":10, "y":1.5},
+ {"matrix": [7, 3], "label":"MINUS", "x":11, "y":1.5},
+ {"matrix": [7, 4], "label":"EQUALS", "x":12, "y":1.5},
+ {"matrix": [7, 5], "label":"BACKSPACE", "x":13, "y":1.5, "w":2},
+ {"matrix": [7, 6], "label":"INSERT", "x":15.5, "y":1.5},
+ {"matrix": [7, 7], "label":"HOME", "x":16.5, "y":1.5},
+ {"matrix": [9, 7], "label":"PAGE UP", "x":17.5, "y":1.5},
+ {"matrix": [2, 0], "label":"TAB", "x":0, "y":2.5, "w":1.5},
+ {"matrix": [2, 1], "label":"Q", "x":1.5, "y":2.5},
+ {"matrix": [2, 2], "label":"W", "x":2.5, "y":2.5},
+ {"matrix": [2, 3], "label":"E", "x":3.5, "y":2.5},
+ {"matrix": [2, 4], "label":"R", "x":4.5, "y":2.5},
+ {"matrix": [2, 5], "label":"T", "x":5.5, "y":2.5},
+ {"matrix": [2, 6], "label":"Y", "x":6.5, "y":2.5},
+ {"matrix": [2, 7], "label":"U", "x":7.5, "y":2.5},
+ {"matrix": [8, 0], "label":"I", "x":8.5, "y":2.5},
+ {"matrix": [8, 1], "label":"O", "x":9.5, "y":2.5},
+ {"matrix": [8, 2], "label":"P", "x":10.5, "y":2.5},
+ {"matrix": [8, 3], "label":"LEFT BRACKET", "x":11.5, "y":2.5},
+ {"matrix": [8, 4], "label":"RIGHT BRACKET", "x":12.5, "y":2.5},
+ {"matrix": [8, 5], "label":"BACK SLASH", "x":13.5, "y":2.5, "w":1.5},
+ {"matrix": [8, 6], "label":"DELETE", "x":15.5, "y":2.5},
+ {"matrix": [8, 7], "label":"END", "x":16.5, "y":2.5},
+ {"matrix": [9, 6], "label":"PAGE DOWN", "x":17.5, "y":2.5},
+ {"matrix": [3, 0], "label":"CAPS LOCK", "x":0, "y":3.5, "w":1.75},
+ {"matrix": [3, 1], "label":"A", "x":1.75, "y":3.5},
+ {"matrix": [3, 2], "label":"S", "x":2.75, "y":3.5},
+ {"matrix": [3, 3], "label":"D", "x":3.75, "y":3.5},
+ {"matrix": [3, 4], "label":"F", "x":4.75, "y":3.5},
+ {"matrix": [3, 5], "label":"G", "x":5.75, "y":3.5},
+ {"matrix": [3, 6], "label":"H", "x":6.75, "y":3.5},
+ {"matrix": [3, 7], "label":"J", "x":7.75, "y":3.5},
+ {"matrix": [9, 0], "label":"K", "x":8.75, "y":3.5},
+ {"matrix": [9, 1], "label":"L", "x":9.75, "y":3.5},
+ {"matrix": [9, 2], "label":"SEMICOLON", "x":10.75, "y":3.5},
+ {"matrix": [9, 3], "label":"SINGLE TICK", "x":11.75, "y":3.5},
+ {"matrix": [9, 4], "label":"ENTER", "x":12.75, "y":3.5, "w":2.25},
+ {"matrix": [4, 0], "label":"LEFT SHIFT", "x":0, "y":4.5, "w":2.25},
+ {"matrix": [4, 1], "label":"Z", "x":2.25, "y":4.5},
+ {"matrix": [4, 2], "label":"X", "x":3.25, "y":4.5},
+ {"matrix": [4, 3], "label":"C", "x":4.25, "y":4.5},
+ {"matrix": [4, 4], "label":"V", "x":5.25, "y":4.5},
+ {"matrix": [4, 5], "label":"B", "x":6.25, "y":4.5},
+ {"matrix": [4, 6], "label":"N", "x":7.25, "y":4.5},
+ {"matrix": [4, 7], "label":"M", "x":8.25, "y":4.5},
+ {"matrix": [10, 0], "label":"COMMA", "x":9.25, "y":4.5},
+ {"matrix": [10, 1], "label":"PERIOD", "x":10.25, "y":4.5},
+ {"matrix": [10, 2], "label":"FORWARD SLASH", "x":11.25, "y":4.5},
+ {"matrix": [10, 3], "label":"RIGHT SHIFT", "x":12.25, "y":4.5, "w":2.75},
+ {"matrix": [9, 5], "label":"UP ARROW", "x":16.5, "y":4.5},
+ {"matrix": [5, 0], "label":"LEFT CTRL", "x":0, "y":5.5, "w":1.25},
+ {"matrix": [5, 1], "label":"LEFT WIN", "x":1.25, "y":5.5, "w":1.25},
+ {"matrix": [5, 2], "label":"LEFT ALT", "x":2.5, "y":5.5, "w":1.25},
+ {"matrix": [5, 3], "label":"SPACEBAR", "x":3.75, "y":5.5, "w":6.25},
+ {"matrix": [5, 4], "label":"RIGHT ALT", "x":10, "y":5.5, "w":1.25},
+ {"matrix": [5, 5], "label":"FN", "x":11.25, "y":5.5, "w":1.25},
+ {"matrix": [5, 6], "label":"MENU", "x":12.5, "y":5.5, "w":1.25},
+ {"matrix": [5, 7], "label":"RIGHT CTRL", "x":13.75, "y":5.5, "w":1.25},
+ {"matrix": [10, 4], "label":"LEFT ARROW", "x":15.5, "y":5.5},
+ {"matrix": [10, 5], "label":"DOWN ARROW", "x":16.5, "y":5.5},
+ {"matrix": [10, 6], "label":"RIGHT ARROW", "x":17.5, "y":5.5}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ { "flags": 1, "matrix": [0, 0], "x": 7, "y": 5 },
+ { "flags": 4, "matrix": [0, 1], "x": 31, "y": 5 },
+ { "flags": 4, "matrix": [0, 2], "x": 43, "y": 5 },
+ { "flags": 4, "matrix": [0, 3], "x": 55, "y": 5 },
+ { "flags": 4, "matrix": [0, 4], "x": 67, "y": 5 },
+ { "flags": 1, "matrix": [0, 5], "x": 85, "y": 5 },
+ { "flags": 1, "matrix": [0, 6], "x": 97, "y": 5 },
+ { "flags": 1, "matrix": [0, 7], "x": 109, "y": 5 },
+ { "flags": 1, "matrix": [6, 0], "x": 121, "y": 5 },
+ { "flags": 4, "matrix": [6, 1], "x": 139, "y": 5 },
+ { "flags": 4, "matrix": [6, 2], "x": 151, "y": 5 },
+ { "flags": 4, "matrix": [6, 3], "x": 163, "y": 5 },
+ { "flags": 4, "matrix": [6, 4], "x": 175, "y": 5 },
+ { "flags": 1, "matrix": [6, 5], "x": 193, "y": 5 },
+ { "flags": 9, "matrix": [6, 6], "x": 205, "y": 5 },
+ { "flags": 1, "matrix": [6, 7], "x": 217, "y": 5 },
+ { "flags": 4, "matrix": [1, 0], "x": 7, "y": 20 },
+ { "flags": 4, "matrix": [1, 1], "x": 19, "y": 20 },
+ { "flags": 4, "matrix": [1, 2], "x": 31, "y": 20 },
+ { "flags": 4, "matrix": [1, 3], "x": 43, "y": 20 },
+ { "flags": 4, "matrix": [1, 4], "x": 55, "y": 20 },
+ { "flags": 4, "matrix": [1, 5], "x": 67, "y": 20 },
+ { "flags": 4, "matrix": [1, 6], "x": 79, "y": 20 },
+ { "flags": 4, "matrix": [1, 7], "x": 91, "y": 20 },
+ { "flags": 4, "matrix": [7, 0], "x": 103, "y": 20 },
+ { "flags": 4, "matrix": [7, 1], "x": 115, "y": 20 },
+ { "flags": 4, "matrix": [7, 2], "x": 127, "y": 20 },
+ { "flags": 4, "matrix": [7, 3], "x": 139, "y": 20 },
+ { "flags": 4, "matrix": [7, 4], "x": 151, "y": 20 },
+ { "flags": 1, "matrix": [7, 5], "x": 169, "y": 20 },
+ { "flags": 1, "matrix": [7, 6], "x": 193, "y": 20 },
+ { "flags": 1, "matrix": [7, 7], "x": 205, "y": 20 },
+ { "flags": 1, "matrix": [9, 7], "x": 217, "y": 20 },
+ { "flags": 1, "matrix": [2, 0], "x": 10, "y": 30 },
+ { "flags": 4, "matrix": [2, 1], "x": 25, "y": 30 },
+ { "flags": 4, "matrix": [2, 2], "x": 37, "y": 30 },
+ { "flags": 4, "matrix": [2, 3], "x": 49, "y": 30 },
+ { "flags": 4, "matrix": [2, 4], "x": 61, "y": 30 },
+ { "flags": 4, "matrix": [2, 5], "x": 73, "y": 30 },
+ { "flags": 4, "matrix": [2, 6], "x": 85, "y": 30 },
+ { "flags": 4, "matrix": [2, 7], "x": 97, "y": 30 },
+ { "flags": 4, "matrix": [8, 0], "x": 109, "y": 30 },
+ { "flags": 4, "matrix": [8, 1], "x": 121, "y": 30 },
+ { "flags": 4, "matrix": [8, 2], "x": 133, "y": 30 },
+ { "flags": 4, "matrix": [8, 3], "x": 145, "y": 30 },
+ { "flags": 4, "matrix": [8, 4], "x": 157, "y": 30 },
+ { "flags": 4, "matrix": [8, 5], "x": 172, "y": 30 },
+ { "flags": 1, "matrix": [8, 6], "x": 193, "y": 30 },
+ { "flags": 1, "matrix": [8, 7], "x": 205, "y": 30 },
+ { "flags": 1, "matrix": [9, 6], "x": 217, "y": 30 },
+ { "flags": 9, "matrix": [3, 0], "x": 11, "y": 39 },
+ { "flags": 4, "matrix": [3, 1], "x": 28, "y": 39 },
+ { "flags": 4, "matrix": [3, 2], "x": 40, "y": 39 },
+ { "flags": 4, "matrix": [3, 3], "x": 52, "y": 39 },
+ { "flags": 4, "matrix": [3, 4], "x": 64, "y": 39 },
+ { "flags": 4, "matrix": [3, 5], "x": 76, "y": 39 },
+ { "flags": 4, "matrix": [3, 6], "x": 88, "y": 39 },
+ { "flags": 4, "matrix": [3, 7], "x": 100, "y": 39 },
+ { "flags": 4, "matrix": [9, 0], "x": 112, "y": 39 },
+ { "flags": 4, "matrix": [9, 1], "x": 124, "y": 39 },
+ { "flags": 4, "matrix": [9, 2], "x": 136, "y": 39 },
+ { "flags": 4, "matrix": [9, 3], "x": 148, "y": 39 },
+ { "flags": 1, "matrix": [9, 4], "x": 168, "y": 39 },
+ { "flags": 1, "matrix": [4, 0], "x": 14, "y": 49 },
+ { "flags": 4, "matrix": [4, 1], "x": 34, "y": 49 },
+ { "flags": 4, "matrix": [4, 2], "x": 46, "y": 49 },
+ { "flags": 4, "matrix": [4, 3], "x": 58, "y": 49 },
+ { "flags": 4, "matrix": [4, 4], "x": 70, "y": 49 },
+ { "flags": 4, "matrix": [4, 5], "x": 82, "y": 49 },
+ { "flags": 4, "matrix": [4, 6], "x": 94, "y": 49 },
+ { "flags": 4, "matrix": [4, 7], "x": 106, "y": 49 },
+ { "flags": 4, "matrix": [10, 0], "x": 118, "y": 49 },
+ { "flags": 4, "matrix": [10, 1], "x": 130, "y": 49 },
+ { "flags": 4, "matrix": [10, 2], "x": 142, "y": 49 },
+ { "flags": 1, "matrix": [10, 3], "x": 165, "y": 49 },
+ { "flags": 1, "matrix": [9, 5], "x": 205, "y": 49 },
+ { "flags": 1, "matrix": [5, 0], "x": 8, "y": 59 },
+ { "flags": 1, "matrix": [5, 1], "x": 23, "y": 59 },
+ { "flags": 1, "matrix": [5, 2], "x": 38, "y": 59 },
+ { "flags": 4, "matrix": [5, 3], "x": 83, "y": 59 },
+ { "flags": 1, "matrix": [5, 4], "x": 129, "y": 59 },
+ { "flags": 1, "matrix": [5, 5], "x": 144, "y": 59 },
+ { "flags": 1, "matrix": [5, 6], "x": 159, "y": 59 },
+ { "flags": 1, "matrix": [5, 7], "x": 174, "y": 59 },
+ { "flags": 1, "matrix": [10, 4], "x": 193, "y": 59 },
+ { "flags": 1, "matrix": [10, 5], "x": 205, "y": 59 },
+ { "flags": 1, "matrix": [10, 6], "x": 217, "y": 59 },
+ { "flags": 2, "x": 224, "y": 64 },
+ { "flags": 2, "x": 204, "y": 64 },
+ { "flags": 2, "x": 186, "y": 64 },
+ { "flags": 2, "x": 167, "y": 64 },
+ { "flags": 2, "x": 149, "y": 64 },
+ { "flags": 2, "x": 130, "y": 64 },
+ { "flags": 2, "x": 112, "y": 64 },
+ { "flags": 2, "x": 94, "y": 64 },
+ { "flags": 2, "x": 75, "y": 64 },
+ { "flags": 2, "x": 57, "y": 64 },
+ { "flags": 2, "x": 38, "y": 64 },
+ { "flags": 2, "x": 20, "y": 64 },
+ { "flags": 2, "x": 0, "y": 64 },
+ { "flags": 2, "x": 0, "y": 47 },
+ { "flags": 2, "x": 0, "y": 32 },
+ { "flags": 2, "x": 0, "y": 17 },
+ { "flags": 2, "x": 0, "y": 0 },
+ { "flags": 2, "x": 20, "y": 0 },
+ { "flags": 2, "x": 38, "y": 0 },
+ { "flags": 2, "x": 57, "y": 0 },
+ { "flags": 2, "x": 75, "y": 0 },
+ { "flags": 2, "x": 94, "y": 0 },
+ { "flags": 2, "x": 112, "y": 0 },
+ { "flags": 2, "x": 130, "y": 0 },
+ { "flags": 2, "x": 149, "y": 0 },
+ { "flags": 2, "x": 167, "y": 0 },
+ { "flags": 2, "x": 186, "y": 0 },
+ { "flags": 2, "x": 204, "y": 0 },
+ { "flags": 2, "x": 224, "y": 0 },
+ { "flags": 2, "x": 224, "y": 17 },
+ { "flags": 2, "x": 224, "y": 32 },
+ { "flags": 2, "x": 224, "y": 47 }
+ ]
+ }
+}
diff --git a/keyboards/drop/ctrl/v2/mcuconf.h b/keyboards/drop/ctrl/v2/mcuconf.h
new file mode 100644
index 000000000000..dc3e45dac054
--- /dev/null
+++ b/keyboards/drop/ctrl/v2/mcuconf.h
@@ -0,0 +1,20 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next
+
+#undef STM32_PLLM_VALUE
+#define STM32_PLLM_VALUE 16
+
+#undef STM32_PREDIV_VALUE
+#define STM32_PREDIV_VALUE 2
+
+#undef STM32_ADC_USE_ADC2
+#define STM32_ADC_USE_ADC2 TRUE
+
+#undef STM32_ADC_USE_ADC3
+#define STM32_ADC_USE_ADC3 TRUE
+
+#undef STM32_I2C_USE_I2C2
+#define STM32_I2C_USE_I2C2 TRUE
diff --git a/keyboards/drop/ctrl/v2/readme.md b/keyboards/drop/ctrl/v2/readme.md
new file mode 100644
index 000000000000..8e5be108b6dd
--- /dev/null
+++ b/keyboards/drop/ctrl/v2/readme.md
@@ -0,0 +1,24 @@
+# CTRL v2
+
+The Drop CTRL v2 is a TKL mechanical keyboard featuring dual USB-C connectors, an integrated Hi-Speed USB 2.0 hub, and fully customizable RGB backlighting and underlighting.
+
+* Keyboard Maintainer: [zvecr](https://github.com/zvecr)
+* Hardware Availability: [Drop CTRL Mechanical Keyboard](https://drop.com/buy/drop-ctrl-mechanical-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make drop/ctrl/v2:default
+
+Flashing example for this keyboard:
+
+ make drop/ctrl/v2: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**: Quickly double tap the button located under the spacebar
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/drop/ctrl/v2/rules.mk b/keyboards/drop/ctrl/v2/rules.mk
new file mode 100644
index 000000000000..13c11c1833d2
--- /dev/null
+++ b/keyboards/drop/ctrl/v2/rules.mk
@@ -0,0 +1,4 @@
+UF2_DEVICE_TYPE_ID = 0x27b9a6ea
+UF2CONV_ARGS = --device-type $(UF2_DEVICE_TYPE_ID)
+
+SRC += analog.c lib/common.c lib/mux.c
diff --git a/keyboards/drop/ctrl/v2/v2.c b/keyboards/drop/ctrl/v2/v2.c
new file mode 100644
index 000000000000..6f3091035b7a
--- /dev/null
+++ b/keyboards/drop/ctrl/v2/v2.c
@@ -0,0 +1,128 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#ifdef RGB_MATRIX_ENABLE
+# include "rgb_matrix.h"
+
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+ { 1, B_2, A_2, C_2 },
+ { 1, E_3, D_3, F_3 },
+ { 1, E_4, D_4, F_4 },
+ { 1, E_5, D_5, F_5 },
+ { 1, B_6, A_6, C_6 },
+ { 1, E_7, D_7, F_7 },
+ { 1, E_8, D_8, F_8 },
+ { 0, E_1, D_1, F_1 },
+ { 0, E_2, D_2, F_2 },
+ { 0, E_3, D_3, F_3 },
+ { 0, E_4, D_4, F_4 },
+ { 0, E_5, D_5, F_5 },
+ { 0, E_6, D_6, F_6 },
+ { 0, E_7, D_7, F_7 },
+ { 0, E_8, D_8, F_8 },
+ { 0, E_9, D_9, F_9 },
+ { 1, H_1, G_1, I_1 },
+ { 1, H_2, G_2, I_2 },
+ { 1, H_3, G_3, I_3 },
+ { 1, H_4, G_4, I_4 },
+ { 1, H_5, G_5, I_5 },
+ { 1, H_6, G_6, I_6 },
+ { 1, H_7, G_7, I_7 },
+ { 1, H_8, G_8, I_8 },
+ { 0, H_1, G_1, I_1 },
+ { 0, H_2, G_2, I_2 },
+ { 0, H_3, G_3, I_3 },
+ { 0, H_4, G_4, I_4 },
+ { 0, H_5, G_5, I_5 },
+ { 0, H_6, G_6, I_6 },
+ { 0, H_7, G_7, I_7 },
+ { 0, H_8, G_8, I_8 },
+ { 0, H_9, G_9, I_9 },
+ { 1, K_1, J_1, L_1 },
+ { 1, K_2, J_2, L_2 },
+ { 1, K_3, J_3, L_3 },
+ { 1, K_4, J_4, L_4 },
+ { 1, K_5, J_5, L_5 },
+ { 1, K_6, J_6, L_6 },
+ { 1, K_7, J_7, L_7 },
+ { 1, K_8, J_8, L_8 },
+ { 0, K_1, J_1, L_1 },
+ { 0, K_2, J_2, L_2 },
+ { 0, K_3, J_3, L_3 },
+ { 0, K_4, J_4, L_4 },
+ { 0, K_5, J_5, L_5 },
+ { 0, K_6, J_6, L_6 },
+ { 0, K_7, J_7, L_7 },
+ { 0, K_8, J_8, L_8 },
+ { 0, K_9, J_9, L_9 },
+ { 1, E_1, D_1, F_1 },
+ { 1, E_2, D_2, F_2 },
+ { 1, K_13, J_13, L_13 },
+ { 1, K_12, J_12, L_12 },
+ { 1, K_11, J_11, L_11 },
+ { 1, E_6, D_6, F_6 },
+ { 1, K_10, J_10, L_10 },
+ { 1, K_9, J_9, L_9 },
+ { 0, K_16, J_16, L_16 },
+ { 0, K_15, J_15, L_15 },
+ { 0, K_14, J_14, L_14 },
+ { 0, K_13, J_13, L_13 },
+ { 0, K_12, J_12, L_12 },
+ { 1, E_14, D_14, F_14 },
+ { 1, E_13, D_13, F_13 },
+ { 1, H_12, G_12, I_12 },
+ { 1, E_12, D_12, F_12 },
+ { 1, E_11, D_11, F_11 },
+ { 1, E_10, D_10, F_10 },
+ { 1, E_9, D_9, F_9 },
+ { 1, H_9, G_9, I_9 },
+ { 0, H_16, G_16, I_16 },
+ { 0, H_15, G_15, I_15 },
+ { 0, H_14, G_14, I_14 },
+ { 0, H_13, G_13, I_13 },
+ { 0, H_11, G_11, I_11 },
+ { 1, K_14, J_14, L_14 },
+ { 1, H_14, G_14, I_14 },
+ { 1, H_13, G_13, I_13 },
+ { 1, H_10, G_10, I_10 },
+ { 0, E_16, D_16, F_16 },
+ { 0, E_15, D_15, F_15 },
+ { 0, E_14, D_14, F_14 },
+ { 0, E_13, D_13, F_13 },
+ { 0, H_12, G_12, I_12 },
+ { 0, E_12, D_12, F_12 },
+ { 0, E_11, D_11, F_11 },
+ { 0, B_11, A_11, C_11 },
+ { 0, B_12, A_12, C_12 },
+ { 0, B_13, A_13, C_13 },
+ { 0, B_14, A_14, C_14 },
+ { 0, B_15, A_15, C_15 },
+ { 0, B_16, A_16, C_16 },
+ { 1, B_9, A_9, C_9 },
+ { 1, B_10, A_10, C_10 },
+ { 1, B_11, A_11, C_11 },
+ { 1, B_12, A_12, C_12 },
+ { 1, B_13, A_13, C_13 },
+ { 1, B_14, A_14, C_14 },
+ { 1, B_15, A_15, C_15 },
+ { 1, K_15, J_15, L_15 },
+ { 1, E_15, D_15, F_15 },
+ { 1, H_15, G_15, I_15 },
+ { 1, B_1, A_1, C_1 },
+ { 1, B_3, A_3, C_3 },
+ { 1, B_4, A_4, C_4 },
+ { 1, B_5, A_5, C_5 },
+ { 1, B_7, A_7, C_7 },
+ { 1, B_8, A_8, C_8 },
+ { 0, B_1, A_1, C_1 },
+ { 0, B_2, A_2, C_2 },
+ { 0, B_3, A_3, C_3 },
+ { 0, B_5, A_5, C_5 },
+ { 0, B_6, A_6, C_6 },
+ { 0, B_8, A_8, C_8 },
+ { 0, B_10, A_10, C_10 },
+ { 0, H_10, G_10, I_10 },
+ { 0, K_10, J_10, L_10 },
+ { 0, E_10, D_10, F_10 },
+};
+
+#endif
diff --git a/keyboards/drop/lib/common.c b/keyboards/drop/lib/common.c
new file mode 100644
index 000000000000..515625a68637
--- /dev/null
+++ b/keyboards/drop/lib/common.c
@@ -0,0 +1,54 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#ifdef RGB_MATRIX_ENABLE
+# include "host.h"
+# include "rgb_matrix.h"
+
+# define LED_FLAG_ANY_SWITCH (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR)
+
+# ifdef RGB_MATRIX_CAPS_LOCK_INDEX
+bool rgb_matrix_indicators_kb(void) {
+ if (!rgb_matrix_indicators_user()) {
+ return false;
+ }
+
+ if (host_keyboard_led_state().caps_lock) {
+ rgb_matrix_set_color(RGB_MATRIX_CAPS_LOCK_INDEX, RGB_WHITE);
+ } else if ((rgb_matrix_get_flags() & LED_FLAG_ANY_SWITCH) == 0) {
+ rgb_matrix_set_color(RGB_MATRIX_CAPS_LOCK_INDEX, RGB_OFF);
+ }
+ return true;
+}
+# endif
+
+# ifdef RGB_MATRIX_CYCLE_ZONES_ENABLE
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+
+ if (!record->event.pressed) {
+ switch (keycode) {
+ case RGB_TOG:
+ switch (rgb_matrix_get_flags()) {
+ case LED_FLAG_ALL:
+ rgb_matrix_set_flags(LED_FLAG_ANY_SWITCH);
+ break;
+ case LED_FLAG_ANY_SWITCH:
+ rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
+ break;
+ case LED_FLAG_UNDERGLOW:
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ break;
+ default:
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ break;
+ }
+ return false;
+ }
+ }
+ return true;
+};
+# endif
+
+#endif
diff --git a/keyboards/drop/lib/mux.c b/keyboards/drop/lib/mux.c
new file mode 100644
index 000000000000..85a657544f65
--- /dev/null
+++ b/keyboards/drop/lib/mux.c
@@ -0,0 +1,94 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "keyboard.h"
+#include "analog.h"
+#include "gpio.h"
+#include "wait.h"
+
+#define S_UP B12
+#define E_UP_N B13
+#define S_DN1 B14
+#define E_DN1_N B15
+#define E_VBUS_1 A8
+#define E_VBUS_2 A15
+#define SRC_1 B8
+#define SRC_2 B9
+#define HUB_RESET_N D2
+#define IRST B1
+#define SDB_N B2
+#define C1_A5_SENSE A4
+#define C1_B5_SENSE A7
+#define C2_A5_SENSE C4
+#define C2_B5_SENSE B0
+
+static inline void digital_write(pin_t pin, uint8_t level) {
+ setPinOutput(pin);
+ writePin(pin, level);
+}
+
+uint16_t v_con_1 = 0;
+uint16_t v_con_2 = 0;
+uint16_t v_con_3 = 0;
+uint16_t v_con_4 = 0;
+
+void keyboard_USB_enable(void) {
+ // initial state
+ digital_write(S_UP, 0);
+ digital_write(E_UP_N, 1);
+ digital_write(S_DN1, 1);
+ digital_write(E_DN1_N, 1);
+ digital_write(E_VBUS_1, 0);
+ digital_write(E_VBUS_2, 0);
+ digital_write(SRC_1, 1);
+ digital_write(SRC_2, 1);
+
+ setPinInput(C1_A5_SENSE);
+ setPinInput(C1_B5_SENSE);
+ setPinInput(C2_A5_SENSE);
+ setPinInput(C2_B5_SENSE);
+
+ // reset hub
+ digital_write(HUB_RESET_N, 0);
+ wait_ms(100);
+ digital_write(HUB_RESET_N, 1);
+
+ wait_ms(500); // Allow power dissipation time on CC lines
+
+ v_con_1 = analogReadPin(C1_A5_SENSE);
+ v_con_2 = analogReadPin(C1_B5_SENSE);
+ v_con_3 = analogReadPin(C2_A5_SENSE);
+ v_con_4 = analogReadPin(C2_B5_SENSE);
+
+ // TODO: dynamic port port configure logic?
+ digital_write(E_UP_N, 0); // HOST enable
+ digital_write(E_DN1_N, 0); // EXTRA enable
+ digital_write(E_VBUS_1, 1); // USBC-1 enable full power I/O
+ digital_write(E_VBUS_2, 1); // USBC-2 enable full power I/O
+
+ if ((v_con_1 + v_con_2) > (v_con_3 + v_con_4)) {
+ digital_write(S_UP, 0); // HOST to USBC-1
+ digital_write(S_DN1, 1); // EXTRA to USBC-2
+ digital_write(SRC_1, 1); // HOST on USBC-1
+ digital_write(SRC_2, 0); // EXTRA available on USBC-2
+ } else {
+ digital_write(S_UP, 1); // EXTRA to USBC-1
+ digital_write(S_DN1, 0); // HOST to USBC-2
+ digital_write(SRC_1, 0); // EXTRA available on USBC-1
+ digital_write(SRC_2, 1); // HOST on USBC-2
+ }
+}
+
+void keyboard_ISSI_enable(void) {
+#ifdef RGB_MATRIX_ENABLE
+ digital_write(IRST, 0);
+ digital_write(SDB_N, 1);
+#endif
+}
+
+
+void keyboard_pre_init_kb(void) {
+ keyboard_USB_enable();
+ keyboard_ISSI_enable();
+
+ keyboard_pre_init_user();
+}
diff --git a/keyboards/drop/shift/keymaps/default/keymap.c b/keyboards/drop/shift/keymaps/default/keymap.c
new file mode 100644
index 000000000000..371908bb482a
--- /dev/null
+++ b/keyboards/drop/shift/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_1800_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_PSCR,
+ 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_PMNS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+ [1] = LAYOUT_1800_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_MPLY, KC_MSTP, KC_VOLU, KC_MUTE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_SCRL,
+ _______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, EE_CLR, KC_APP, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/drop/shift/keymaps/via/config.h b/keyboards/drop/shift/keymaps/via/config.h
new file mode 100644
index 000000000000..616f8e329102
--- /dev/null
+++ b/keyboards/drop/shift/keymaps/via/config.h
@@ -0,0 +1,5 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 8
diff --git a/keyboards/drop/shift/keymaps/via/keymap.c b/keyboards/drop/shift/keymaps/via/keymap.c
new file mode 100644
index 000000000000..371908bb482a
--- /dev/null
+++ b/keyboards/drop/shift/keymaps/via/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_1800_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_PSCR,
+ 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_PMNS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+ [1] = LAYOUT_1800_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_MPLY, KC_MSTP, KC_VOLU, KC_MUTE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_SCRL,
+ _______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, EE_CLR, KC_APP, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/drop/shift/keymaps/via/rules.mk b/keyboards/drop/shift/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/drop/shift/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/drop/shift/v2/board.h b/keyboards/drop/shift/v2/board.h
new file mode 100644
index 000000000000..ed3ea4b1f776
--- /dev/null
+++ b/keyboards/drop/shift/v2/board.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/drop/shift/v2/config.h b/keyboards/drop/shift/v2/config.h
new file mode 100644
index 000000000000..6c651d1f83a1
--- /dev/null
+++ b/keyboards/drop/shift/v2/config.h
@@ -0,0 +1,29 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define ADC_BUFFER_DEPTH 4
+#define ADC_SAMPLING_RATE ADC_SMPR_SMP_601P5
+#define ADC_RESOLUTION ADC_CFGR_RES_12BITS
+
+#define I2C_DRIVER I2CD2
+#define I2C1_SCL_PIN A9
+#define I2C1_SDA_PIN A10
+
+#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10101000
+#define EXTERNAL_EEPROM_WP_PIN B5
+#define EEPROM_I2C_24LC256
+
+#define DRIVER_ADDR_1 0b1010011
+#define DRIVER_ADDR_2 0b1011111
+#define DRIVER_ADDR_3 0b1010000
+#define DRIVER_COUNT 3
+#define RGB_MATRIX_LED_COUNT 166
+#define ISSI_PWM_FREQUENCY 0b010 // 26k
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_DEFAULT_VAL 100
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+#define RGB_MATRIX_CYCLE_ZONES_ENABLE
diff --git a/keyboards/drop/shift/v2/halconf.h b/keyboards/drop/shift/v2/halconf.h
new file mode 100644
index 000000000000..77495ecfa0d0
--- /dev/null
+++ b/keyboards/drop/shift/v2/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define HAL_USE_ADC TRUE
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/drop/shift/v2/info.json b/keyboards/drop/shift/v2/info.json
new file mode 100644
index 000000000000..f58b76e9d172
--- /dev/null
+++ b/keyboards/drop/shift/v2/info.json
@@ -0,0 +1,350 @@
+{
+ "keyboard_name": "SHIFT v2",
+ "manufacturer": "Drop Inc.",
+ "maintainer": "zvecr",
+ "processor": "STM32F303",
+ "bootloader": "tinyuf2",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["C0", "C1", "C2", "C3", "C6", "C7", "C8", "C9", "B3", "B4", "C13", "C14", "C15"],
+ "rows": ["A0", "A1", "A2", "A3", "B10", "C10", "C11", "C12"]
+ },
+ "usb": {
+ "vid": "0x359B",
+ "pid": "0x000C",
+ "device_version": "2.0.0"
+ },
+ "eeprom": {
+ "driver": "i2c"
+ },
+ "features": {
+ "rgb_matrix": true,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "layouts": {
+ "LAYOUT_1800_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": [1, 2], "x":3.25, "y":0},
+ {"matrix": [0, 3], "x":4.25, "y":0},
+ {"matrix": [0, 4], "x":5.5, "y":0},
+ {"matrix": [0, 5], "x":6.5, "y":0},
+ {"matrix": [0, 6], "x":7.5, "y":0},
+ {"matrix": [1, 6], "x":8.5, "y":0},
+ {"matrix": [0, 7], "x":9.75, "y":0},
+ {"matrix": [1, 7], "x":10.75, "y":0},
+ {"matrix": [0, 8], "x":11.75, "y":0},
+ {"matrix": [1, 8], "x":12.75, "y":0},
+ {"matrix": [1, 9], "x":14, "y":0},
+ {"matrix": [0, 10], "x":15.5, "y":0},
+ {"matrix": [1, 10], "x":16.5, "y":0},
+ {"matrix": [0, 11], "x":17.5, "y":0},
+ {"matrix": [1, 11], "x":18.5, "y":0},
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [2, 1], "x":2, "y":1.25},
+ {"matrix": [2, 2], "x":3, "y":1.25},
+ {"matrix": [3, 2], "x":4, "y":1.25},
+ {"matrix": [1, 3], "x":5, "y":1.25},
+ {"matrix": [2, 3], "x":6, "y":1.25},
+ {"matrix": [1, 4], "x":7, "y":1.25},
+ {"matrix": [1, 5], "x":8, "y":1.25},
+ {"matrix": [2, 5], "x":9, "y":1.25},
+ {"matrix": [2, 6], "x":10, "y":1.25},
+ {"matrix": [3, 6], "x":11, "y":1.25},
+ {"matrix": [2, 7], "x":12, "y":1.25},
+ {"matrix": [2, 8], "x":13, "y":1.25, "w":2},
+ {"matrix": [2, 9], "x":15.5, "y":1.25},
+ {"matrix": [2, 10], "x":16.5, "y":1.25},
+ {"matrix": [2, 11], "x":17.5, "y":1.25},
+ {"matrix": [2, 12], "x":18.5, "y":1.25},
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [3, 1], "x":1.5, "y":2.25},
+ {"matrix": [4, 1], "x":2.5, "y":2.25},
+ {"matrix": [4, 2], "x":3.5, "y":2.25},
+ {"matrix": [3, 3], "x":4.5, "y":2.25},
+ {"matrix": [4, 3], "x":5.5, "y":2.25},
+ {"matrix": [2, 4], "x":6.5, "y":2.25},
+ {"matrix": [3, 4], "x":7.5, "y":2.25},
+ {"matrix": [3, 5], "x":8.5, "y":2.25},
+ {"matrix": [4, 5], "x":9.5, "y":2.25},
+ {"matrix": [4, 6], "x":10.5, "y":2.25},
+ {"matrix": [3, 7], "x":11.5, "y":2.25},
+ {"matrix": [3, 8], "x":12.5, "y":2.25},
+ {"matrix": [4, 8], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [3, 9], "x":15.5, "y":2.25},
+ {"matrix": [3, 10], "x":16.5, "y":2.25},
+ {"matrix": [3, 11], "x":17.5, "y":2.25},
+ {"matrix": [3, 12], "x":18.5, "y":2.25},
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [5, 1], "x":1.75, "y":3.25},
+ {"matrix": [6, 1], "x":2.75, "y":3.25},
+ {"matrix": [5, 2], "x":3.75, "y":3.25},
+ {"matrix": [5, 3], "x":4.75, "y":3.25},
+ {"matrix": [6, 3], "x":5.75, "y":3.25},
+ {"matrix": [4, 4], "x":6.75, "y":3.25},
+ {"matrix": [5, 4], "x":7.75, "y":3.25},
+ {"matrix": [5, 5], "x":8.75, "y":3.25},
+ {"matrix": [5, 6], "x":9.75, "y":3.25},
+ {"matrix": [4, 7], "x":10.75, "y":3.25},
+ {"matrix": [5, 8], "x":11.75, "y":3.25},
+ {"matrix": [6, 8], "x":12.75, "y":3.25, "w":2.25},
+ {"matrix": [4, 9], "x":15.5, "y":3.25},
+ {"matrix": [4, 10], "x":16.5, "y":3.25},
+ {"matrix": [4, 11], "x":17.5, "y":3.25},
+ {"matrix": [4, 12], "x":18.5, "y":3.25},
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [7, 1], "x":2.25, "y":4.25},
+ {"matrix": [6, 2], "x":3.25, "y":4.25},
+ {"matrix": [7, 2], "x":4.25, "y":4.25},
+ {"matrix": [7, 3], "x":5.25, "y":4.25},
+ {"matrix": [6, 4], "x":6.25, "y":4.25},
+ {"matrix": [7, 5], "x":7.25, "y":4.25},
+ {"matrix": [6, 5], "x":8.25, "y":4.25},
+ {"matrix": [6, 6], "x":9.25, "y":4.25},
+ {"matrix": [5, 7], "x":10.25, "y":4.25},
+ {"matrix": [6, 7], "x":11.25, "y":4.25},
+ {"matrix": [7, 8], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [6, 9], "x":14.25, "y":4.5},
+ {"matrix": [5, 9], "x":15.5, "y":4.25},
+ {"matrix": [5, 10], "x":16.5, "y":4.25},
+ {"matrix": [5, 11], "x":17.5, "y":4.25},
+ {"matrix": [5, 12], "x":18.5, "y":4.25, "h":2},
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [6, 0], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [7, 0], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [7, 4], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [7, 6], "x":10, "y":5.25, "w":1.5},
+ {"matrix": [7, 7], "x":11.5, "y":5.25, "w":1.5},
+ {"matrix": [7, 9], "x":13.25, "y":5.5},
+ {"matrix": [7, 10], "x":14.25, "y":5.5},
+ {"matrix": [6, 10], "x":15.25, "y":5.5},
+ {"matrix": [6, 11], "x":16.5, "y":5.25},
+ {"matrix": [6, 12], "x":17.5, "y":5.25}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ { "flags": 4, "matrix": [0, 0], "x": 6, "y": 7 },
+ { "flags": 4, "matrix": [0, 1], "x": 20, "y": 7 },
+ { "flags": 4, "matrix": [0, 2], "x": 31, "y": 7 },
+ { "flags": 4, "matrix": [1, 2], "x": 43, "y": 7 },
+ { "flags": 4, "matrix": [0, 3], "x": 54, "y": 7 },
+ { "flags": 4, "matrix": [0, 4], "x": 69, "y": 7 },
+ { "flags": 4, "matrix": [0, 5], "x": 80, "y": 7 },
+ { "flags": 4, "matrix": [0, 6], "x": 91, "y": 7 },
+ { "flags": 4, "matrix": [1, 6], "x": 103, "y": 7 },
+ { "flags": 4, "matrix": [0, 7], "x": 117, "y": 7 },
+ { "flags": 4, "matrix": [1, 7], "x": 129, "y": 7 },
+ { "flags": 4, "matrix": [0, 8], "x": 140, "y": 7 },
+ { "flags": 4, "matrix": [1, 8], "x": 152, "y": 7 },
+ { "flags": 4, "matrix": [1, 9], "x": 166, "y": 7 },
+ { "flags": 4, "matrix": [0, 10], "x": 183, "y": 7 },
+ { "flags": 4, "matrix": [1, 10], "x": 194, "y": 7 },
+ { "flags": 4, "matrix": [0, 11], "x": 206, "y": 7 },
+ { "flags": 4, "matrix": [1, 11], "x": 217, "y": 7 },
+ { "flags": 4, "matrix": [1, 0], "x": 6, "y": 18 },
+ { "flags": 4, "matrix": [1, 1], "x": 17, "y": 18 },
+ { "flags": 4, "matrix": [2, 1], "x": 29, "y": 18 },
+ { "flags": 4, "matrix": [2, 2], "x": 40, "y": 18 },
+ { "flags": 4, "matrix": [3, 2], "x": 51, "y": 18 },
+ { "flags": 4, "matrix": [1, 3], "x": 63, "y": 18 },
+ { "flags": 4, "matrix": [2, 3], "x": 74, "y": 18 },
+ { "flags": 4, "matrix": [1, 4], "x": 86, "y": 18 },
+ { "flags": 4, "matrix": [1, 5], "x": 97, "y": 18 },
+ { "flags": 4, "matrix": [2, 5], "x": 109, "y": 18 },
+ { "flags": 4, "matrix": [2, 6], "x": 120, "y": 18 },
+ { "flags": 4, "matrix": [3, 6], "x": 132, "y": 18 },
+ { "flags": 4, "matrix": [2, 7], "x": 143, "y": 18 },
+ { "flags": 4, "matrix": [2, 8], "x": 160, "y": 18 },
+ { "flags": 4, "matrix": [2, 9], "x": 183, "y": 18 },
+ { "flags": 4, "matrix": [2, 10], "x": 194, "y": 18 },
+ { "flags": 4, "matrix": [2, 11], "x": 206, "y": 18 },
+ { "flags": 4, "matrix": [2, 12], "x": 217, "y": 18 },
+ { "flags": 4, "matrix": [2, 0], "x": 9, "y": 27 },
+ { "flags": 4, "matrix": [3, 1], "x": 23, "y": 27 },
+ { "flags": 4, "matrix": [4, 1], "x": 34, "y": 27 },
+ { "flags": 4, "matrix": [4, 2], "x": 46, "y": 27 },
+ { "flags": 4, "matrix": [3, 3], "x": 57, "y": 27 },
+ { "flags": 4, "matrix": [4, 3], "x": 69, "y": 27 },
+ { "flags": 4, "matrix": [2, 4], "x": 80, "y": 27 },
+ { "flags": 4, "matrix": [3, 4], "x": 91, "y": 27 },
+ { "flags": 4, "matrix": [3, 5], "x": 103, "y": 27 },
+ { "flags": 4, "matrix": [4, 5], "x": 114, "y": 27 },
+ { "flags": 4, "matrix": [4, 6], "x": 126, "y": 27 },
+ { "flags": 4, "matrix": [3, 7], "x": 137, "y": 27 },
+ { "flags": 4, "matrix": [3, 8], "x": 149, "y": 27 },
+ { "flags": 4, "matrix": [4, 8], "x": 163, "y": 27 },
+ { "flags": 4, "matrix": [3, 9], "x": 183, "y": 27 },
+ { "flags": 4, "matrix": [3, 10], "x": 194, "y": 27 },
+ { "flags": 4, "matrix": [3, 11], "x": 206, "y": 27 },
+ { "flags": 4, "matrix": [3, 12], "x": 217, "y": 27 },
+ { "flags": 4, "matrix": [3, 0], "x": 10, "y": 36 },
+ { "flags": 4, "matrix": [5, 1], "x": 26, "y": 36 },
+ { "flags": 4, "matrix": [6, 1], "x": 37, "y": 36 },
+ { "flags": 4, "matrix": [5, 2], "x": 49, "y": 36 },
+ { "flags": 4, "matrix": [5, 3], "x": 60, "y": 36 },
+ { "flags": 4, "matrix": [6, 3], "x": 71, "y": 36 },
+ { "flags": 4, "matrix": [4, 4], "x": 83, "y": 36 },
+ { "flags": 4, "matrix": [5, 4], "x": 94, "y": 36 },
+ { "flags": 4, "matrix": [5, 5], "x": 106, "y": 36 },
+ { "flags": 4, "matrix": [5, 6], "x": 117, "y": 36 },
+ { "flags": 4, "matrix": [4, 7], "x": 129, "y": 36 },
+ { "flags": 4, "matrix": [5, 8], "x": 140, "y": 36 },
+ { "flags": 4, "matrix": [6, 8], "x": 159, "y": 36 },
+ { "flags": 4, "matrix": [4, 9], "x": 183, "y": 36 },
+ { "flags": 4, "matrix": [4, 10], "x": 194, "y": 36 },
+ { "flags": 4, "matrix": [4, 11], "x": 206, "y": 36 },
+ { "flags": 4, "matrix": [4, 12], "x": 217, "y": 36 },
+ { "flags": 4, "matrix": [4, 0], "x": 13, "y": 46 },
+ { "flags": 4, "matrix": [7, 1], "x": 31, "y": 46 },
+ { "flags": 4, "matrix": [6, 2], "x": 43, "y": 46 },
+ { "flags": 4, "matrix": [7, 2], "x": 54, "y": 46 },
+ { "flags": 4, "matrix": [7, 3], "x": 66, "y": 46 },
+ { "flags": 4, "matrix": [6, 4], "x": 77, "y": 46 },
+ { "flags": 4, "matrix": [7, 5], "x": 89, "y": 46 },
+ { "flags": 4, "matrix": [6, 5], "x": 100, "y": 46 },
+ { "flags": 4, "matrix": [6, 6], "x": 112, "y": 46 },
+ { "flags": 4, "matrix": [5, 7], "x": 123, "y": 46 },
+ { "flags": 4, "matrix": [6, 7], "x": 134, "y": 46 },
+ { "flags": 4, "matrix": [7, 8], "x": 150, "y": 46 },
+ { "flags": 4, "matrix": [6, 9], "x": 169, "y": 48 },
+ { "flags": 4, "matrix": [5, 9], "x": 183, "y": 46 },
+ { "flags": 4, "matrix": [5, 10], "x": 194, "y": 46 },
+ { "flags": 4, "matrix": [5, 11], "x": 206, "y": 46 },
+ { "flags": 4, "matrix": [5, 12], "x": 214, "y": 50 },
+ { "flags": 4, "matrix": [5, 0], "x": 7, "y": 55 },
+ { "flags": 4, "matrix": [6, 0], "x": 21, "y": 55 },
+ { "flags": 4, "matrix": [7, 0], "x": 36, "y": 55 },
+ { "flags": 4, "matrix": [7, 4], "x": 79, "y": 55 },
+ { "flags": 4, "matrix": [7, 6], "x": 123, "y": 55 },
+ { "flags": 4, "matrix": [7, 7], "x": 140, "y": 55 },
+ { "flags": 4, "matrix": [7, 9], "x": 157, "y": 58 },
+ { "flags": 4, "matrix": [7, 10], "x": 169, "y": 58 },
+ { "flags": 4, "matrix": [6, 10], "x": 180, "y": 58 },
+ { "flags": 4, "matrix": [6, 11], "x": 194, "y": 55 },
+ { "flags": 4, "matrix": [6, 12], "x": 206, "y": 55 },
+ { "flags": 2, "x": 1, "y": 1 },
+ { "flags": 2, "x": 6, "y": 0 },
+ { "flags": 2, "x": 26, "y": 0 },
+ { "flags": 2, "x": 35, "y": 0 },
+ { "flags": 2, "x": 45, "y": 0 },
+ { "flags": 2, "x": 54, "y": 0 },
+ { "flags": 2, "x": 64, "y": 0 },
+ { "flags": 2, "x": 74, "y": 0 },
+ { "flags": 2, "x": 83, "y": 0 },
+ { "flags": 2, "x": 93, "y": 0 },
+ { "flags": 2, "x": 102, "y": 0 },
+ { "flags": 2, "x": 112, "y": 0 },
+ { "flags": 2, "x": 122, "y": 0 },
+ { "flags": 2, "x": 131, "y": 0 },
+ { "flags": 2, "x": 141, "y": 0 },
+ { "flags": 2, "x": 150, "y": 0 },
+ { "flags": 2, "x": 160, "y": 0 },
+ { "flags": 2, "x": 170, "y": 0 },
+ { "flags": 2, "x": 179, "y": 0 },
+ { "flags": 2, "x": 189, "y": 0 },
+ { "flags": 2, "x": 198, "y": 0 },
+ { "flags": 2, "x": 218, "y": 0 },
+ { "flags": 2, "x": 222, "y": 1 },
+ { "flags": 2, "x": 224, "y": 5 },
+ { "flags": 2, "x": 224, "y": 12 },
+ { "flags": 2, "x": 224, "y": 20 },
+ { "flags": 2, "x": 224, "y": 28 },
+ { "flags": 2, "x": 224, "y": 35 },
+ { "flags": 2, "x": 224, "y": 43 },
+ { "flags": 2, "x": 224, "y": 51 },
+ { "flags": 2, "x": 224, "y": 58 },
+ { "flags": 2, "x": 222, "y": 64 },
+ { "flags": 2, "x": 218, "y": 64 },
+ { "flags": 2, "x": 208, "y": 64 },
+ { "flags": 2, "x": 198, "y": 64 },
+ { "flags": 2, "x": 189, "y": 64 },
+ { "flags": 2, "x": 179, "y": 64 },
+ { "flags": 2, "x": 170, "y": 64 },
+ { "flags": 2, "x": 160, "y": 64 },
+ { "flags": 2, "x": 150, "y": 64 },
+ { "flags": 2, "x": 141, "y": 64 },
+ { "flags": 2, "x": 131, "y": 64 },
+ { "flags": 2, "x": 122, "y": 64 },
+ { "flags": 2, "x": 112, "y": 64 },
+ { "flags": 2, "x": 102, "y": 64 },
+ { "flags": 2, "x": 93, "y": 64 },
+ { "flags": 2, "x": 83, "y": 64 },
+ { "flags": 2, "x": 74, "y": 64 },
+ { "flags": 2, "x": 64, "y": 64 },
+ { "flags": 2, "x": 54, "y": 64 },
+ { "flags": 2, "x": 45, "y": 64 },
+ { "flags": 2, "x": 35, "y": 64 },
+ { "flags": 2, "x": 26, "y": 64 },
+ { "flags": 2, "x": 16, "y": 64 },
+ { "flags": 2, "x": 6, "y": 64 },
+ { "flags": 2, "x": 1, "y": 64 },
+ { "flags": 2, "x": 0, "y": 58 },
+ { "flags": 2, "x": 0, "y": 51 },
+ { "flags": 2, "x": 0, "y": 43 },
+ { "flags": 2, "x": 0, "y": 35 },
+ { "flags": 2, "x": 0, "y": 28 },
+ { "flags": 2, "x": 0, "y": 20 },
+ { "flags": 2, "x": 0, "y": 12 },
+ { "flags": 2, "x": 0, "y": 5 },
+ { "flags": 8, "x": 174, "y": 5 },
+ { "flags": 8, "x": 174, "y": 10 },
+ { "flags": 8, "x": 174, "y": 15 }
+ ]
+ }
+}
diff --git a/keyboards/drop/shift/v2/mcuconf.h b/keyboards/drop/shift/v2/mcuconf.h
new file mode 100644
index 000000000000..dc3e45dac054
--- /dev/null
+++ b/keyboards/drop/shift/v2/mcuconf.h
@@ -0,0 +1,20 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next
+
+#undef STM32_PLLM_VALUE
+#define STM32_PLLM_VALUE 16
+
+#undef STM32_PREDIV_VALUE
+#define STM32_PREDIV_VALUE 2
+
+#undef STM32_ADC_USE_ADC2
+#define STM32_ADC_USE_ADC2 TRUE
+
+#undef STM32_ADC_USE_ADC3
+#define STM32_ADC_USE_ADC3 TRUE
+
+#undef STM32_I2C_USE_I2C2
+#define STM32_I2C_USE_I2C2 TRUE
diff --git a/keyboards/drop/shift/v2/readme.md b/keyboards/drop/shift/v2/readme.md
new file mode 100644
index 000000000000..c9ebc63468f6
--- /dev/null
+++ b/keyboards/drop/shift/v2/readme.md
@@ -0,0 +1,24 @@
+# SHIFT v2
+
+The Drop SHIFT v2 is a compact 1800 layout mechanical keyboard featuring dual USB-C connectors, an integrated Hi-Speed USB 2.0 hub, and fully customizable RGB backlighting and underlighting.
+
+* Keyboard Maintainer: [zvecr](https://github.com/zvecr)
+* Hardware Availability: [Drop SHIFT Mechanical Keyboard](https://drop.com/buy/drop-shift-mechanical-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make drop/shift/v2:default
+
+Flashing example for this keyboard:
+
+ make drop/shift/v2: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**: Quickly double tap the button located under the spacebar
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/drop/shift/v2/rules.mk b/keyboards/drop/shift/v2/rules.mk
new file mode 100644
index 000000000000..aec83326d075
--- /dev/null
+++ b/keyboards/drop/shift/v2/rules.mk
@@ -0,0 +1,4 @@
+UF2_DEVICE_TYPE_ID = 0x9bc1e968
+UF2CONV_ARGS = --device-type $(UF2_DEVICE_TYPE_ID)
+
+SRC += analog.c lib/common.c lib/mux.c
diff --git a/keyboards/drop/shift/v2/v2.c b/keyboards/drop/shift/v2/v2.c
new file mode 100644
index 000000000000..3d96cdf7cba6
--- /dev/null
+++ b/keyboards/drop/shift/v2/v2.c
@@ -0,0 +1,189 @@
+// Copyright 2023 Massdrop, Inc.
+// SPDX-License-Identifier: GPL-2.0-or-later
+#ifdef RGB_MATRIX_ENABLE
+# include "rgb_matrix.h"
+
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+ { 0, K_1, J_1, L_1 },// LED1
+ { 0, K_2, J_2, L_2 },
+ { 0, K_3, J_3, L_3 },
+ { 0, K_4, J_4, L_4 },
+ { 0, K_5, J_5, L_5 },
+ { 0, K_7, J_7, L_7 },
+ { 0, K_8, J_8, L_8 },
+ { 0, K_9, J_9, L_9 },
+ { 0, K_10, J_10, L_10 },// LED9
+ { 1, K_1, J_1, L_1 },// LED10
+ { 1, K_2, J_2, L_2 },// LED11
+ { 1, K_3, J_3, L_3 },// LED12
+ { 1, K_4, J_4, L_4 },// LED13
+ { 1, K_9, J_9, L_9 },// LED18
+ { 1, K_5, J_5, L_5 },// LED15
+ { 1, K_6, J_6, L_6 },// LED19
+ { 1, K_7, J_7, L_7 },// LED16
+ { 1, K_8, J_8, L_8 },// LED20
+ { 0, H_1, G_1, I_1 },//start2
+ { 0, H_11, G_11, I_11 },
+ { 0, H_2, G_2, I_2 },
+ { 0, H_3, G_3, I_3 },
+ { 0, H_4, G_4, I_4 },
+ { 0, H_5, G_5, I_5 },
+ { 0, H_6, G_6, I_6 },
+ { 0, H_7, G_7, I_7 },
+ { 0, H_8, G_8, I_8 },
+ { 0, H_9, G_9, I_9 },
+ { 0, H_10, G_10, I_10 },
+ { 1, E_1, D_1, F_1 },
+ { 1, E_2, D_2, F_2 },
+ { 1, E_4, D_4, F_4 },
+ { 1, E_5, D_5, F_5 },
+ { 1, E_6, D_6, F_6 },
+ { 1, E_7, D_7, F_7 },
+ { 1, E_8, D_8, F_8 },
+ { 0, E_1, D_1, F_1 },
+ { 0, E_2, D_2, F_2 },
+ { 0, E_3, D_3, F_3 },
+ { 0, E_4, D_4, F_4 },
+ { 0, E_5, D_5, F_5 },
+ { 0, E_6, D_6, F_6 },
+ { 0, E_7, D_7, F_7 },
+ { 0, E_8, D_8, F_8 },
+ { 0, E_9, D_9, F_9 },
+ { 0, E_10, D_10, F_10 },
+ { 1, B_1, A_1, C_1 },
+ { 1, B_2, A_2, C_2 },
+ { 1, B_3, A_3, C_3 },
+ { 1, B_4, A_4, C_4 },
+ { 1, B_5, A_5, C_5 },
+ { 1, B_6, A_6, C_6 },
+ { 1, B_7, A_7, C_7 },
+ { 1, B_8, A_8, C_8 },
+ { 0, B_1, A_1, C_1 },
+ { 0, B_2, A_2, C_2 },
+ { 0, B_3, A_3, C_3 },
+ { 0, B_4, A_4, C_4 },
+ { 0, B_5, A_5, C_5 },
+ { 0, B_6, A_6, C_6 },
+ { 0, B_7, A_7, C_7 },
+ { 0, B_8, A_8, C_8 },
+ { 0, B_9, A_9, C_9 },
+ { 0, B_10, A_10, C_10 },
+ { 1, B_9, A_9, C_9 },
+ { 1, B_10, A_10, C_10 },
+ { 1, B_11, A_11, C_11 },
+ { 1, B_13, A_13, C_13 },
+ { 1, B_14, A_14, C_14 },
+ { 1, B_15, A_15, C_15 },
+ { 1, B_16, A_16, C_16 },
+ { 0, B_11, A_11, C_11 },
+ { 0, B_12, A_12, C_12 },
+ { 0, B_13, A_13, C_13 },
+ { 0, H_13, G_13, I_13 },
+ { 0, H_14, G_14, I_14 },
+ { 0, B_14, A_14, C_14 },
+ { 0, E_15, D_15, F_15 },
+ { 0, B_15, A_15, C_15 },
+ { 0, B_16, A_16, C_16 },
+ { 1, E_9, D_9, F_9 },
+ { 1, E_10, D_10, F_10 },
+ { 1, E_11, D_11, F_11 },
+ { 1, E_12, D_12, F_12 },
+ { 1, E_13, D_13, F_13 },
+ { 1, E_14, D_14, F_14 },
+ { 1, E_15, D_15, F_15 },
+ { 1, H_16, G_16, I_16 },
+ { 0, E_11, D_11, F_11 },//start6
+ { 0, E_12, D_12, F_12 },
+ { 0, E_13, D_13, F_13 },
+ { 0, E_14, D_14, F_14 },
+ { 1, H_9, G_9, I_9 },
+ { 1, H_10, G_10, I_10 },
+ { 1, H_11, G_11, I_11 },
+ { 1, H_12, G_12, I_12 },
+ { 1, H_13, G_13, I_13 },
+ { 1, H_14, G_14, I_14 },
+ { 1, H_15, G_15, I_15 },
+ { 2, H_1, G_1, I_1 },//start underglow
+ { 2, K_1, J_1, L_1 },
+ { 2, B_1, A_1, C_1 },
+ { 2, E_1, D_1, F_1 },
+ { 2, E_2, D_2, F_2 },
+ { 2, B_2, A_2, C_2 },
+ { 2, B_3, A_3, C_3 },
+ { 2, E_3, D_3, F_3 },
+ { 2, E_4, D_4, F_4 },
+ { 2, B_4, A_4, C_4 },
+ { 2, B_5, A_5, C_5 },
+ { 2, E_5, D_5, F_5 },
+ { 2, E_6, D_6, F_6 },
+ { 2, B_6, A_6, C_6 },
+ { 2, B_7, A_7, C_7 },
+ { 2, E_7, D_7, F_7 },
+ { 2, E_8, D_8, F_8 },
+ { 2, B_8, A_8, C_8 },
+ { 2, B_9, A_9, C_9 },
+ { 2, E_9, D_9, F_9 },
+ { 2, E_10, D_10, F_10 },
+ { 2, B_10, A_10, C_10 },
+ { 2, B_11, A_11, C_11 },//125
+ { 2, E_11, D_11, F_11 },
+ { 2, E_12, D_12, F_12 },
+ { 2, B_12, A_12, C_12 },
+ { 2, B_13, A_13, C_13 },
+ { 2, E_13, D_13, F_13 },
+ { 2, E_14, D_14, F_14 },
+ { 2, B_14, A_14, C_14 },
+ { 2, B_15, A_15, C_15 },
+ { 2, E_15, D_15, F_15 },
+ { 2, E_16, D_16, F_16 },
+ { 2, B_16, A_16, C_16 },
+ { 2, H_16, G_16, I_16 },
+ { 2, K_16, J_16, L_16 },
+ { 2, K_15, J_15, L_15 },
+ { 2, H_15, G_15, I_15 },
+ { 2, H_14, G_14, I_14 },
+ { 2, K_14, J_14, L_14 },
+ { 2, K_13, J_13, L_13 },
+ { 2, H_13, G_13, I_13 },
+ { 2, H_12, G_12, I_12 },
+ { 2, K_12, J_12, L_12 },
+ { 2, K_11, J_11, L_11 },
+ { 2, H_11, G_11, I_11 },
+ { 2, H_10, G_10, I_10 },
+ { 2, K_10, J_10, L_10 },
+ { 2, K_9, J_9, L_9 },
+ { 2, H_9, G_9, I_9 },
+ { 2, H_8, G_8, I_8 },
+ { 2, K_8, J_8, L_8 },
+ { 2, K_7, J_7, L_7 },
+ { 2, H_7, G_7, I_7 },
+ { 2, H_6, G_6, I_6 },
+ { 2, K_6, J_6, L_6 },
+ { 2, K_5, J_5, L_5 },
+ { 2, H_5, G_5, I_5 },
+ { 2, H_4, G_4, I_4 },
+ { 2, K_4, J_4, L_4 },
+ { 2, K_3, J_3, L_3 },
+ { 2, H_3, G_3, I_3 },
+ { 2, H_2, G_2, I_2 },
+ { 2, K_2, J_2, L_2 },
+ { 1, K_10, J_10, L_10 },
+ { 1, K_11, J_11, L_11 },
+ { 1, E_3, D_3, F_3 },
+};
+
+bool rgb_matrix_indicators_kb(void) {
+ if (!rgb_matrix_indicators_user()) {
+ return false;
+ }
+ uint8_t num_state = host_keyboard_led_state().num_lock ? 0xFF : 0;
+ uint8_t caps_state = host_keyboard_led_state().caps_lock ? 0xFF : 0;
+ uint8_t scroll_state = host_keyboard_led_state().scroll_lock ? 0xFF : 0;
+
+ rgb_matrix_set_color(163, num_state, num_state, num_state);
+ rgb_matrix_set_color(164, caps_state, caps_state, caps_state);
+ rgb_matrix_set_color(165, scroll_state, scroll_state, scroll_state);
+ return true;
+}
+
+#endif
diff --git a/keyboards/dtisaac/dtisaac01/info.json b/keyboards/dtisaac/dtisaac01/info.json
index 68f7221d31ed..3d16da6d222e 100644
--- a/keyboards/dtisaac/dtisaac01/info.json
+++ b/keyboards/dtisaac/dtisaac01/info.json
@@ -24,8 +24,224 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_tkl_ansi"
+ },
+ "community_layouts": [
+ "tkl_ansi",
+ "tkl_ansi_tsangan"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+
+ {"matrix": [5, 8], "x": 11, "y": 0},
+ {"matrix": [6, 1], "x": 12, "y": 0},
+ {"matrix": [6, 2], "x": 13, "y": 0},
+ {"matrix": [6, 3], "x": 14, "y": 0},
+
+ {"matrix": [6, 4], "x": 15.25, "y": 0},
+ {"matrix": [6, 5], "x": 16.25, "y": 0},
+ {"matrix": [6, 6], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [6, 8], "x": 9, "y": 1.25},
+ {"matrix": [6, 0], "x": 10, "y": 1.25},
+ {"matrix": [7, 1], "x": 11, "y": 1.25},
+ {"matrix": [7, 2], "x": 12, "y": 1.25},
+ {"matrix": [7, 3], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [7, 4], "x": 15.25, "y": 1.25},
+ {"matrix": [7, 5], "x": 16.25, "y": 1.25},
+ {"matrix": [7, 6], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 8], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 0], "x": 10.5, "y": 2.25},
+ {"matrix": [8, 1], "x": 11.5, "y": 2.25},
+ {"matrix": [8, 2], "x": 12.5, "y": 2.25},
+ {"matrix": [8, 3], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [8, 4], "x": 15.25, "y": 2.25},
+ {"matrix": [8, 5], "x": 16.25, "y": 2.25},
+ {"matrix": [8, 6], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 8], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 0], "x": 10.75, "y": 3.25},
+ {"matrix": [9, 1], "x": 11.75, "y": 3.25},
+ {"matrix": [9, 3], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 0], "x": 10.25, "y": 4.25},
+ {"matrix": [10, 1], "x": 11.25, "y": 4.25},
+ {"matrix": [10, 3], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [10, 5], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 0], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 1], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 2], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 3], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"matrix": [11, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 5], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 6], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+
+ {"matrix": [5, 8], "x": 11, "y": 0},
+ {"matrix": [6, 1], "x": 12, "y": 0},
+ {"matrix": [6, 2], "x": 13, "y": 0},
+ {"matrix": [6, 3], "x": 14, "y": 0},
+
+ {"matrix": [6, 4], "x": 15.25, "y": 0},
+ {"matrix": [6, 5], "x": 16.25, "y": 0},
+ {"matrix": [6, 6], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [6, 8], "x": 9, "y": 1.25},
+ {"matrix": [6, 0], "x": 10, "y": 1.25},
+ {"matrix": [7, 1], "x": 11, "y": 1.25},
+ {"matrix": [7, 2], "x": 12, "y": 1.25},
+ {"matrix": [7, 3], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [7, 4], "x": 15.25, "y": 1.25},
+ {"matrix": [7, 5], "x": 16.25, "y": 1.25},
+ {"matrix": [7, 6], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 8], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 0], "x": 10.5, "y": 2.25},
+ {"matrix": [8, 1], "x": 11.5, "y": 2.25},
+ {"matrix": [8, 2], "x": 12.5, "y": 2.25},
+ {"matrix": [8, 3], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [8, 4], "x": 15.25, "y": 2.25},
+ {"matrix": [8, 5], "x": 16.25, "y": 2.25},
+ {"matrix": [8, 6], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 8], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 0], "x": 10.75, "y": 3.25},
+ {"matrix": [9, 1], "x": 11.75, "y": 3.25},
+ {"matrix": [9, 3], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 0], "x": 10.25, "y": 4.25},
+ {"matrix": [10, 1], "x": 11.25, "y": 4.25},
+ {"matrix": [10, 3], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [10, 5], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 0], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 1], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 2], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 3], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"matrix": [11, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 5], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 6], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -48,85 +264,185 @@
{"matrix": [6, 5], "x": 16.25, "y": 0},
{"matrix": [6, 6], "x": 17.25, "y": 0},
- {"matrix": [1, 0], "x": 0, "y": 1.5},
- {"matrix": [1, 1], "x": 1, "y": 1.5},
- {"matrix": [1, 2], "x": 2, "y": 1.5},
- {"matrix": [1, 3], "x": 3, "y": 1.5},
- {"matrix": [1, 4], "x": 4, "y": 1.5},
- {"matrix": [1, 5], "x": 5, "y": 1.5},
- {"matrix": [1, 6], "x": 6, "y": 1.5},
- {"matrix": [1, 7], "x": 7, "y": 1.5},
- {"matrix": [1, 8], "x": 8, "y": 1.5},
- {"matrix": [6, 8], "x": 9, "y": 1.5},
- {"matrix": [6, 0], "x": 10, "y": 1.5},
- {"matrix": [7, 1], "x": 11, "y": 1.5},
- {"matrix": [7, 2], "x": 12, "y": 1.5},
- {"matrix": [7, 3], "x": 13, "y": 1.5, "w": 2},
-
- {"matrix": [7, 4], "x": 15.25, "y": 1.5},
- {"matrix": [7, 5], "x": 16.25, "y": 1.5},
- {"matrix": [7, 6], "x": 17.25, "y": 1.5},
-
- {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
- {"matrix": [2, 1], "x": 1.5, "y": 2.5},
- {"matrix": [2, 2], "x": 2.5, "y": 2.5},
- {"matrix": [2, 3], "x": 3.5, "y": 2.5},
- {"matrix": [2, 4], "x": 4.5, "y": 2.5},
- {"matrix": [2, 5], "x": 5.5, "y": 2.5},
- {"matrix": [2, 6], "x": 6.5, "y": 2.5},
- {"matrix": [2, 7], "x": 7.5, "y": 2.5},
- {"matrix": [2, 8], "x": 8.5, "y": 2.5},
- {"matrix": [7, 8], "x": 9.5, "y": 2.5},
- {"matrix": [7, 0], "x": 10.5, "y": 2.5},
- {"matrix": [8, 1], "x": 11.5, "y": 2.5},
- {"matrix": [8, 2], "x": 12.5, "y": 2.5},
- {"matrix": [8, 3], "x": 13.5, "y": 2.5, "w": 1.5},
-
- {"matrix": [8, 4], "x": 15.25, "y": 2.5},
- {"matrix": [8, 5], "x": 16.25, "y": 2.5},
- {"matrix": [8, 6], "x": 17.25, "y": 2.5},
-
- {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
- {"matrix": [3, 1], "x": 1.75, "y": 3.5},
- {"matrix": [3, 2], "x": 2.75, "y": 3.5},
- {"matrix": [3, 3], "x": 3.75, "y": 3.5},
- {"matrix": [3, 4], "x": 4.75, "y": 3.5},
- {"matrix": [3, 5], "x": 5.75, "y": 3.5},
- {"matrix": [3, 6], "x": 6.75, "y": 3.5},
- {"matrix": [3, 7], "x": 7.75, "y": 3.5},
- {"matrix": [3, 8], "x": 8.75, "y": 3.5},
- {"matrix": [8, 8], "x": 9.75, "y": 3.5},
- {"matrix": [8, 0], "x": 10.75, "y": 3.5},
- {"matrix": [9, 1], "x": 11.75, "y": 3.5},
- {"matrix": [9, 3], "x": 12.75, "y": 3.5, "w": 2.25},
-
- {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
- {"matrix": [4, 2], "x": 2.25, "y": 4.5},
- {"matrix": [4, 3], "x": 3.25, "y": 4.5},
- {"matrix": [4, 4], "x": 4.25, "y": 4.5},
- {"matrix": [4, 5], "x": 5.25, "y": 4.5},
- {"matrix": [4, 6], "x": 6.25, "y": 4.5},
- {"matrix": [4, 7], "x": 7.25, "y": 4.5},
- {"matrix": [4, 8], "x": 8.25, "y": 4.5},
- {"matrix": [9, 8], "x": 9.25, "y": 4.5},
- {"matrix": [9, 0], "x": 10.25, "y": 4.5},
- {"matrix": [10, 1], "x": 11.25, "y": 4.5},
- {"matrix": [10, 3], "x": 12.25, "y": 4.5, "w": 2.75},
-
- {"matrix": [10, 5], "x": 16.25, "y": 4.5},
-
- {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
- {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
- {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
- {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
- {"matrix": [10, 0], "x": 10, "y": 5.5, "w": 1.25},
- {"matrix": [11, 1], "x": 11.25, "y": 5.5, "w": 1.25},
- {"matrix": [11, 2], "x": 12.5, "y": 5.5, "w": 1.25},
- {"matrix": [11, 3], "x": 13.75, "y": 5.5, "w": 1.25},
-
- {"matrix": [11, 4], "x": 15.25, "y": 5.5},
- {"matrix": [11, 5], "x": 16.25, "y": 5.5},
- {"matrix": [11, 6], "x": 17.25, "y": 5.5}
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [6, 8], "x": 9, "y": 1.25},
+ {"matrix": [6, 0], "x": 10, "y": 1.25},
+ {"matrix": [7, 1], "x": 11, "y": 1.25},
+ {"matrix": [7, 2], "x": 12, "y": 1.25},
+ {"matrix": [7, 3], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [7, 4], "x": 15.25, "y": 1.25},
+ {"matrix": [7, 5], "x": 16.25, "y": 1.25},
+ {"matrix": [7, 6], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 8], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 0], "x": 10.5, "y": 2.25},
+ {"matrix": [8, 1], "x": 11.5, "y": 2.25},
+ {"matrix": [8, 2], "x": 12.5, "y": 2.25},
+ {"matrix": [8, 3], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [8, 4], "x": 15.25, "y": 2.25},
+ {"matrix": [8, 5], "x": 16.25, "y": 2.25},
+ {"matrix": [8, 6], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 8], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 0], "x": 10.75, "y": 3.25},
+ {"matrix": [9, 1], "x": 11.75, "y": 3.25},
+ {"matrix": [9, 3], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 0], "x": 10.25, "y": 4.25},
+ {"matrix": [10, 1], "x": 11.25, "y": 4.25},
+ {"matrix": [10, 3], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [10, 5], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [11, 1], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 2], "x": 12.5, "y": 5.25},
+ {"matrix": [11, 3], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [11, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 5], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 6], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+
+ {"matrix": [5, 8], "x": 11, "y": 0},
+ {"matrix": [6, 1], "x": 12, "y": 0},
+ {"matrix": [6, 2], "x": 13, "y": 0},
+ {"matrix": [6, 3], "x": 14, "y": 0},
+
+ {"matrix": [6, 4], "x": 15.25, "y": 0},
+ {"matrix": [6, 5], "x": 16.25, "y": 0},
+ {"matrix": [6, 6], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [6, 8], "x": 9, "y": 1.25},
+ {"matrix": [6, 0], "x": 10, "y": 1.25},
+ {"matrix": [7, 1], "x": 11, "y": 1.25},
+ {"matrix": [7, 2], "x": 12, "y": 1.25},
+ {"matrix": [7, 3], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [7, 4], "x": 15.25, "y": 1.25},
+ {"matrix": [7, 5], "x": 16.25, "y": 1.25},
+ {"matrix": [7, 6], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 8], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 0], "x": 10.5, "y": 2.25},
+ {"matrix": [8, 1], "x": 11.5, "y": 2.25},
+ {"matrix": [8, 2], "x": 12.5, "y": 2.25},
+ {"matrix": [8, 3], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [8, 4], "x": 15.25, "y": 2.25},
+ {"matrix": [8, 5], "x": 16.25, "y": 2.25},
+ {"matrix": [8, 6], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 8], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 0], "x": 10.75, "y": 3.25},
+ {"matrix": [9, 1], "x": 11.75, "y": 3.25},
+ {"matrix": [9, 3], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 0], "x": 10.25, "y": 4.25},
+ {"matrix": [10, 1], "x": 11.25, "y": 4.25},
+ {"matrix": [10, 3], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [10, 5], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [11, 1], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 3], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [11, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [11, 5], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 6], "x": 17.25, "y": 5.25}
]
}
}
diff --git a/keyboards/dtisaac/dtisaac01/keymaps/default/keymap.c b/keyboards/dtisaac/dtisaac01/keymaps/default/keymap.c
index 52cf6ef97cf1..3e87ebb2b35b 100644
--- a/keyboards/dtisaac/dtisaac01/keymaps/default/keymap.c
+++ b/keyboards/dtisaac/dtisaac01/keymaps/default/keymap.c
@@ -22,26 +22,20 @@ enum layer_names {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(1, KC_NO), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ [_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(1,KC_NO), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [_FN] = LAYOUT(
- QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_FN] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
-};
\ No newline at end of file
+};
diff --git a/keyboards/dtisaac/dtisaac01/keymaps/via/keymap.c b/keyboards/dtisaac/dtisaac01/keymaps/via/keymap.c
index b976dd03ad4c..e22205e0bd00 100644
--- a/keyboards/dtisaac/dtisaac01/keymaps/via/keymap.c
+++ b/keyboards/dtisaac/dtisaac01/keymaps/via/keymap.c
@@ -19,41 +19,41 @@
enum layers {
_LAYER0,
_LAYER1,
- _LAYER2,
- _LAYER3,
+ _LAYER2,
+ _LAYER3,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(1, KC_NO), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ [_LAYER0] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(1,KC_NO), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [_LAYER1] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLEP, KC_WAKE, KC_PWR,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, BL_ON, BL_UP,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_BRTG, BL_OFF, BL_DOWN,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ [_LAYER1] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLEP, KC_WAKE, KC_PWR,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, BL_ON, BL_UP,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_BRTG, BL_OFF, BL_DOWN,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
),
- [_LAYER2] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ [_LAYER2] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
- [_LAYER3] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ [_LAYER3] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-};
\ No newline at end of file
+};
diff --git a/keyboards/dtisaac/dtisaac01/keymaps/via/readme.md b/keyboards/dtisaac/dtisaac01/keymaps/via/readme.md
index 0407ae2339fe..aa2ec3fa2254 100644
--- a/keyboards/dtisaac/dtisaac01/keymaps/via/readme.md
+++ b/keyboards/dtisaac/dtisaac01/keymaps/via/readme.md
@@ -1 +1 @@
-# The default keymap for dtisaac01
+# The via keymap for dtisaac01
diff --git a/keyboards/dtisaac/dtisaac01/matrix_diagram.md b/keyboards/dtisaac/dtisaac01/matrix_diagram.md
new file mode 100644
index 000000000000..e1034cb589b8
--- /dev/null
+++ b/keyboards/dtisaac/dtisaac01/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for DTIsaac dtisaac01
+
+```
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
+│00 │ │01 │02 │03 │04 │ │05 │06 │07 │08 │ │58 │61 │62 │63 ││64 │65 │66 │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │68 │60 │71 │72 │73 ││74 │75 │76 │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │78 │70 │81 │82 │83 ││84 │85 │86 │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │88 │80 │91 │93 │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │98 │90 │A1 │A3 │ │A5 │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
+│50 │51 │52 │56 │A0 │B1 │B2 │B3 ││B4 │B5 │B6 │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌────────┐
+│40 │ 2.25u LShift
+└────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│50 │51 │52 │56 │B1 │B2 │B3 │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/durgod/dgk6x/hades_ansi/keymaps/default/keymap.json b/keyboards/durgod/dgk6x/hades_ansi/keymaps/default/keymap.json
index 6be76652800a..e3b969149ac9 100644
--- a/keyboards/durgod/dgk6x/hades_ansi/keymaps/default/keymap.json
+++ b/keyboards/durgod/dgk6x/hades_ansi/keymaps/default/keymap.json
@@ -1,5 +1,5 @@
{
- "keyboard": "durgod/dgk6x/hades",
+ "keyboard": "durgod/dgk6x/hades_ansi",
"keymap": "default",
"layout": "LAYOUT_65_ansi",
"layers": [
diff --git a/keyboards/durgod/dgk6x/hades_ansi/keymaps/via/keymap.json b/keyboards/durgod/dgk6x/hades_ansi/keymaps/via/keymap.json
index 0cef377c841a..7c25f6efb07b 100644
--- a/keyboards/durgod/dgk6x/hades_ansi/keymaps/via/keymap.json
+++ b/keyboards/durgod/dgk6x/hades_ansi/keymaps/via/keymap.json
@@ -1,5 +1,5 @@
{
- "keyboard": "durgod/dgk6x/hades",
+ "keyboard": "durgod/dgk6x/hades_ansi",
"keymap": "via",
"layout": "LAYOUT_65_ansi",
"layers": [
diff --git a/keyboards/durgod/k320/keymaps/default_mac/keymap.json b/keyboards/durgod/k320/keymaps/default_mac/keymap.json
index a0e83def3694..97fc214c7b73 100644
--- a/keyboards/durgod/k320/keymaps/default_mac/keymap.json
+++ b/keyboards/durgod/k320/keymaps/default_mac/keymap.json
@@ -1,5 +1,5 @@
{
- "keyboard": "durgod/k310/base",
+ "keyboard": "durgod/k320/base",
"keymap": "default_mac",
"layout": "LAYOUT_all",
"layers": [
diff --git a/keyboards/dztech/pluto/info.json b/keyboards/dztech/pluto/info.json
new file mode 100644
index 000000000000..ab201befa314
--- /dev/null
+++ b/keyboards/dztech/pluto/info.json
@@ -0,0 +1,191 @@
+{
+ "manufacturer": "DZTECH",
+ "keyboard_name": "PLUTO",
+ "maintainer": "moyi4681",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP16", "GP15", "GP14", "GP13", "GP0"],
+ "rows": ["GP1", "GP18", "GP17", "GP12", "GP11"]
+ },
+ "processor": "RP2040",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0006",
+ "vid": "0x445A"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [0, 14], "x": 14, "y": 0 },
+ { "matrix": [0, 15], "x": 15.25, "y": 0 },
+ { "matrix": [2, 12], "x": 16.25, "y": 0 },
+ { "matrix": [2, 13], "x": 17.25, "y": 0 },
+
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "x": 12.75, "y": 2 },
+ { "matrix": [1, 15], "x": 15.25, "y": 1 },
+ { "matrix": [2, 14], "x": 16.25, "y": 1 },
+ { "matrix": [2, 15], "x": 17.25, "y": 1 },
+
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [1, 14], "w": 1.25, "x": 12.75, "y": 1 },
+
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 15.25, "y": 3 },
+ { "matrix": [3, 14], "x": 16.25, "y": 3 },
+
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 },
+ { "matrix": [3, 15], "x": 15.25, "y": 4 },
+ { "matrix": [4, 14], "x": 16.25, "y": 4 },
+ { "matrix": [4, 15], "x": 17.25, "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 },
+ { "matrix": [0, 14], "x": 14, "y": 0 },
+ { "matrix": [0, 15], "x": 15.25, "y": 0 },
+ { "matrix": [2, 12], "x": 16.25, "y": 0 },
+ { "matrix": [2, 13], "x": 17.25, "y": 0 },
+
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "h": 2, "matrix": [1, 14], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [1, 15], "x": 15.25, "y": 1 },
+ { "matrix": [2, 14], "x": 16.25, "y": 1 },
+ { "matrix": [2, 15], "x": 17.25, "y": 1 },
+
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [1, 13], "x": 12.75, "y": 2 },
+
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 15.25, "y": 3 },
+ { "matrix": [3, 14], "x": 16.25, "y": 3 },
+
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 },
+ { "matrix": [3, 15], "x": 15.25, "y": 4 },
+ { "matrix": [4, 14], "x": 16.25, "y": 4 },
+ { "matrix": [4, 15], "x": 17.25, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/dztech/pluto/keymaps/default/keymap.c b/keyboards/dztech/pluto/keymaps/default/keymap.c
new file mode 100644
index 000000000000..9edd2f178f05
--- /dev/null
+++ b/keyboards/dztech/pluto/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 DZTECH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_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_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_NUHS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/dztech/pluto/keymaps/via/keymap.c b/keyboards/dztech/pluto/keymaps/via/keymap.c
new file mode 100644
index 000000000000..9edd2f178f05
--- /dev/null
+++ b/keyboards/dztech/pluto/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 DZTECH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_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_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_NUHS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/dztech/pluto/keymaps/via/rules.mk b/keyboards/dztech/pluto/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/dztech/pluto/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/dztech/pluto/readme.md b/keyboards/dztech/pluto/readme.md
new file mode 100644
index 000000000000..e4db0deb39fe
--- /dev/null
+++ b/keyboards/dztech/pluto/readme.md
@@ -0,0 +1,30 @@
+# PLUTO
+
+![PLUTO](https://i.imgur.com/BWVvKMO.jpg)
+
+The main purpose of this board is to introduce more people to the best layout.
+This board was originally designed to be O-ring gasket mount only, Top mount was added to make the board whole.
+Sticking with a mimal design, the engraving of planets was replaced with the Logo surrounding with pluto moons and planets.
+Pluto now also features an accent Piece with an engraving of Pluto Symbol below the nav cluster.
+
+* Keyboard Maintainer: [DZTECH](https://github.com/moyi4681)
+* Hardware Supported: DZTECH
+* Hardware Availability: KBDFANS
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dztech/pluto:default
+
+Flashing example for this keyboard:
+
+ make dztech/pluto: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/dztech/pluto/rules.mk b/keyboards/dztech/pluto/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/dztech/pluto/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/era/divine/info.json b/keyboards/era/divine/info.json
new file mode 100644
index 000000000000..de87fd83e22b
--- /dev/null
+++ b/keyboards/era/divine/info.json
@@ -0,0 +1,112 @@
+{
+ "manufacturer": "ERA",
+ "keyboard_name": "DIVINE 1.0.0",
+ "maintainer": "eerraa",
+ "bootloader": "rp2040",
+ "build": {
+ "debounce_type": "sym_defer_pk"
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "GP1",
+ "num_lock": "GP2",
+ "scroll_lock": "GP3",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["GP13", "GP12", "GP19", "GP20", "GP21", "GP22", "GP23", "GP24", "GP25", "GP26", "GP27", "GP28", "GP29", "GP18", "GP5", "GP6", "GP7"],
+ "rows": ["GP11", "GP10", "GP9", "GP8", "GP4"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0002",
+ "vid": "0x4552"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.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},
+ {"matrix": [0, 15], "x": 17.25, "y": 0},
+ {"matrix": [0, 16], "x": 18.5, "y": 0},
+ {"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, 8], "x": 9.75, "y": 1},
+ {"matrix": [1, 9], "x": 10.75, "y": 1},
+ {"matrix": [1, 10], "x": 11.75, "y": 1},
+ {"matrix": [1, 11], "x": 12.75, "y": 1},
+ {"matrix": [1, 12], "x": 13.75, "y": 1},
+ {"matrix": [1, 13], "x": 14.75, "y": 1},
+ {"matrix": [1, 14], "x": 15.75, "y": 1},
+ {"matrix": [1, 15], "x": 16.75, "y": 1, "w": 1.5},
+ {"matrix": [1, 16], "x": 18.5, "y": 1},
+ {"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, 8], "x": 10, "y": 2},
+ {"matrix": [2, 9], "x": 11, "y": 2},
+ {"matrix": [2, 10], "x": 12, "y": 2},
+ {"matrix": [2, 11], "x": 13, "y": 2},
+ {"matrix": [2, 12], "x": 14, "y": 2},
+ {"matrix": [2, 13], "x": 15, "y": 2},
+ {"matrix": [2, 15], "x": 16, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
+ {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 9.5, "y": 3},
+ {"matrix": [3, 9], "x": 10.5, "y": 3},
+ {"matrix": [3, 10], "x": 11.5, "y": 3},
+ {"matrix": [3, 11], "x": 12.5, "y": 3},
+ {"matrix": [3, 12], "x": 13.5, "y": 3},
+ {"matrix": [3, 13], "x": 14.5, "y": 3},
+ {"matrix": [3, 14], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 15], "x": 17.5, "y": 3.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 5.75, "y": 4, "w": 2.25},
+ {"matrix": [4, 7], "x": 8, "y": 4},
+ {"matrix": [4, 9], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 16.5, "y": 4.25},
+ {"matrix": [4, 15], "x": 17.5, "y": 4.25},
+ {"matrix": [4, 16], "x": 18.5, "y": 4.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/era/divine/keymaps/default/keymap.c b/keyboards/era/divine/keymaps/default/keymap.c
new file mode 100644
index 000000000000..a37cfdc059e4
--- /dev/null
+++ b/keyboards/era/divine/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_INS,
+ 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_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/divine/keymaps/via/keymap.c b/keyboards/era/divine/keymaps/via/keymap.c
new file mode 100644
index 000000000000..a37cfdc059e4
--- /dev/null
+++ b/keyboards/era/divine/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_INS,
+ 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_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/divine/keymaps/via/rules.mk b/keyboards/era/divine/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/era/divine/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/era/divine/readme.md b/keyboards/era/divine/readme.md
new file mode 100644
index 000000000000..decc7e3d31c6
--- /dev/null
+++ b/keyboards/era/divine/readme.md
@@ -0,0 +1,25 @@
+# DIVINE
+
+DIVINE Keyboard
+
+* Keyboard Maintainer: [ERA](https://github.com/eerraa)
+* Hardware Supported: RP2040
+* Hardware Availability: [ERA](https://github.com/eerraa)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make era/divine:default
+
+Flashing example for this keyboard:
+
+ make era/divine: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**: Short the reset hole of the PCB twice within 1 second.
+* **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/divine/rules.mk b/keyboards/era/divine/rules.mk
new file mode 100644
index 000000000000..3922c569c4ec
--- /dev/null
+++ b/keyboards/era/divine/rules.mk
@@ -0,0 +1 @@
+# File intentionally blank
\ No newline at end of file
diff --git a/keyboards/feker/ik75/keymaps/bkzshen/keymap.c b/keyboards/feker/ik75/keymaps/bkzshen/keymap.c
index f59617ddced6..53d8145b7ac3 100644
--- a/keyboards/feker/ik75/keymaps/bkzshen/keymap.c
+++ b/keyboards/feker/ik75/keymaps/bkzshen/keymap.c
@@ -195,8 +195,8 @@ bool rgb_matrix_indicators_user(void) {
rgb_matrix_set_color(104, 0, 0, 0);
uint8_t red = host_keyboard_led_state().caps_lock ? 255 : 0;
- uint8_t green = host_keyboard_led_state().scroll_lock ? 255 : 0;
- uint8_t blue = keymap_config.no_gui ? 255 : 0;
+ uint8_t blue = host_keyboard_led_state().scroll_lock ? 255 : 0;
+ uint8_t green = keymap_config.no_gui ? 255 : 0;
if ((rgb_matrix_get_flags() & LED_FLAG_KEYLIGHT)) {
diff --git a/keyboards/feker/ik75/keymaps/default/keymap.c b/keyboards/feker/ik75/keymaps/default/keymap.c
index fe4676b7f797..f6ca00552ec9 100644
--- a/keyboards/feker/ik75/keymaps/default/keymap.c
+++ b/keyboards/feker/ik75/keymaps/default/keymap.c
@@ -139,8 +139,8 @@ bool rgb_matrix_indicators_user(void) {
rgb_matrix_set_color(104, 0, 0, 0);
uint8_t red = host_keyboard_led_state().caps_lock ? 255 : 0;
- uint8_t green = host_keyboard_led_state().scroll_lock ? 255 : 0;
- uint8_t blue = keymap_config.no_gui ? 255 : 0;
+ uint8_t blue = host_keyboard_led_state().scroll_lock ? 255 : 0;
+ uint8_t green = keymap_config.no_gui ? 255 : 0;
if ((rgb_matrix_get_flags() & LED_FLAG_KEYLIGHT)) {
diff --git a/keyboards/feker/ik75/keymaps/via/keymap.c b/keyboards/feker/ik75/keymaps/via/keymap.c
index da87725d1901..e9a221cb3f92 100644
--- a/keyboards/feker/ik75/keymaps/via/keymap.c
+++ b/keyboards/feker/ik75/keymaps/via/keymap.c
@@ -195,8 +195,8 @@ bool rgb_matrix_indicators_user(void) {
rgb_matrix_set_color(104, 0, 0, 0);
uint8_t red = host_keyboard_led_state().caps_lock ? 255 : 0;
- uint8_t green = host_keyboard_led_state().scroll_lock ? 255 : 0;
- uint8_t blue = keymap_config.no_gui ? 255 : 0;
+ uint8_t blue = host_keyboard_led_state().scroll_lock ? 255 : 0;
+ uint8_t green = keymap_config.no_gui ? 255 : 0;
if ((rgb_matrix_get_flags() & LED_FLAG_KEYLIGHT)) {
diff --git a/keyboards/geistmaschine/geist/info.json b/keyboards/geistmaschine/geist/info.json
index 77a9a937e55b..571740b7163a 100644
--- a/keyboards/geistmaschine/geist/info.json
+++ b/keyboards/geistmaschine/geist/info.json
@@ -29,242 +29,246 @@
{"pin_a": "B0", "pin_b": "B7", "resolution": 2}
]
},
- "community_layouts": ["65_ansi", "65_iso"],
+ "layout_aliases": {
+ "LAYOUT_65_all": "LAYOUT_all",
+ "LAYOUT_65_ansi": "LAYOUT_ansi_blocker",
+ "LAYOUT_65_iso": "LAYOUT_iso_blocker"
+ },
"layouts": {
- "LAYOUT_65_all": {
+ "LAYOUT_all": {
"layout": [
- {"x": 0, "y": 0, "matrix": [9, 1]},
- {"x": 1.25, "y": 0, "matrix": [0, 0]},
- {"x": 2.25, "y": 0, "matrix": [1, 0]},
- {"x": 3.25, "y": 0, "matrix": [0, 1]},
- {"x": 4.25, "y": 0, "matrix": [1, 1]},
- {"x": 5.25, "y": 0, "matrix": [0, 2]},
- {"x": 6.25, "y": 0, "matrix": [1, 2]},
- {"x": 7.25, "y": 0, "matrix": [0, 3]},
- {"x": 8.25, "y": 0, "matrix": [1, 3]},
- {"x": 9.25, "y": 0, "matrix": [0, 4]},
- {"x": 10.25, "y": 0, "matrix": [1, 4]},
- {"x": 11.25, "y": 0, "matrix": [0, 5]},
- {"x": 12.25, "y": 0, "matrix": [1, 5]},
- {"x": 13.25, "y": 0, "matrix": [0, 6]},
- {"x": 14.25, "y": 0, "matrix": [1, 6]},
- {"x": 15.25, "y": 0, "matrix": [0, 7]},
- {"x": 16.25, "y": 0, "matrix": [1, 7]},
+ {"matrix": [9, 1], "x": 0, "y": 0},
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [1, 0], "x": 2.25, "y": 0},
+ {"matrix": [0, 1], "x": 3.25, "y": 0},
+ {"matrix": [1, 1], "x": 4.25, "y": 0},
+ {"matrix": [0, 2], "x": 5.25, "y": 0},
+ {"matrix": [1, 2], "x": 6.25, "y": 0},
+ {"matrix": [0, 3], "x": 7.25, "y": 0},
+ {"matrix": [1, 3], "x": 8.25, "y": 0},
+ {"matrix": [0, 4], "x": 9.25, "y": 0},
+ {"matrix": [1, 4], "x": 10.25, "y": 0},
+ {"matrix": [0, 5], "x": 11.25, "y": 0},
+ {"matrix": [1, 5], "x": 12.25, "y": 0},
+ {"matrix": [0, 6], "x": 13.25, "y": 0},
+ {"matrix": [1, 6], "x": 14.25, "y": 0},
+ {"matrix": [0, 7], "x": 15.25, "y": 0},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
- {"x": 1.25, "y": 1, "w": 1.5, "matrix": [2, 0]},
- {"x": 2.75, "y": 1, "matrix": [3, 0]},
- {"x": 3.75, "y": 1, "matrix": [2, 1]},
- {"x": 4.75, "y": 1, "matrix": [3, 1]},
- {"x": 5.75, "y": 1, "matrix": [2, 2]},
- {"x": 6.75, "y": 1, "matrix": [3, 2]},
- {"x": 7.75, "y": 1, "matrix": [2, 3]},
- {"x": 8.75, "y": 1, "matrix": [3, 3]},
- {"x": 9.75, "y": 1, "matrix": [2, 4]},
- {"x": 10.75, "y": 1, "matrix": [3, 4]},
- {"x": 11.75, "y": 1, "matrix": [2, 5]},
- {"x": 12.75, "y": 1, "matrix": [3, 5]},
- {"x": 13.75, "y": 1, "matrix": [2, 6]},
- {"x": 14.75, "y": 1, "w": 1.5, "matrix": [3, 6]},
- {"x": 16.25, "y": 1, "matrix": [3, 7]},
+ {"matrix": [2, 0], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 2.75, "y": 1},
+ {"matrix": [2, 1], "x": 3.75, "y": 1},
+ {"matrix": [3, 1], "x": 4.75, "y": 1},
+ {"matrix": [2, 2], "x": 5.75, "y": 1},
+ {"matrix": [3, 2], "x": 6.75, "y": 1},
+ {"matrix": [2, 3], "x": 7.75, "y": 1},
+ {"matrix": [3, 3], "x": 8.75, "y": 1},
+ {"matrix": [2, 4], "x": 9.75, "y": 1},
+ {"matrix": [3, 4], "x": 10.75, "y": 1},
+ {"matrix": [2, 5], "x": 11.75, "y": 1},
+ {"matrix": [3, 5], "x": 12.75, "y": 1},
+ {"matrix": [2, 6], "x": 13.75, "y": 1},
+ {"matrix": [3, 6], "x": 14.75, "y": 1, "w": 1.5},
+ {"matrix": [3, 7], "x": 16.25, "y": 1},
- {"x": 1.25, "y": 2, "w": 1.75, "matrix": [4, 0]},
- {"x": 3, "y": 2, "matrix": [5, 0]},
- {"x": 4, "y": 2, "matrix": [4, 1]},
- {"x": 5, "y": 2, "matrix": [5, 1]},
- {"x": 6, "y": 2, "matrix": [4, 2]},
- {"x": 7, "y": 2, "matrix": [5, 2]},
- {"x": 8, "y": 2, "matrix": [4, 3]},
- {"x": 9, "y": 2, "matrix": [5, 3]},
- {"x": 10, "y": 2, "matrix": [4, 4]},
- {"x": 11, "y": 2, "matrix": [5, 4]},
- {"x": 12, "y": 2, "matrix": [4, 5]},
- {"x": 13, "y": 2, "matrix": [5, 5]},
- {"x": 14, "y": 2, "matrix": [4, 6]},
- {"x": 14, "y": 2, "w": 2.25, "matrix": [5, 6]},
- {"x": 15, "y": 1, "w": 1.25, "h": 2, "matrix": [4, 7]},
- {"x": 16.25, "y": 2, "matrix": [5, 7]},
+ {"matrix": [4, 0], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 3, "y": 2},
+ {"matrix": [4, 1], "x": 4, "y": 2},
+ {"matrix": [5, 1], "x": 5, "y": 2},
+ {"matrix": [4, 2], "x": 6, "y": 2},
+ {"matrix": [5, 2], "x": 7, "y": 2},
+ {"matrix": [4, 3], "x": 8, "y": 2},
+ {"matrix": [5, 3], "x": 9, "y": 2},
+ {"matrix": [4, 4], "x": 10, "y": 2},
+ {"matrix": [5, 4], "x": 11, "y": 2},
+ {"matrix": [4, 5], "x": 12, "y": 2},
+ {"matrix": [5, 5], "x": 13, "y": 2},
+ {"matrix": [4, 6], "x": 18, "y": 2},
+ {"matrix": [5, 6], "x": 14, "y": 2, "w": 2.25},
+ {"matrix": [4, 7], "x": 19, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [5, 7], "x": 16.25, "y": 2},
- {"x": 1.25, "y": 3, "w": 1.25, "matrix": [6, 0]},
- {"x": 2.5, "y": 3, "matrix": [7, 0]},
- {"x": 3.5, "y": 3, "matrix": [6, 1]},
- {"x": 4.5, "y": 3, "matrix": [7, 1]},
- {"x": 5.5, "y": 3, "matrix": [6, 2]},
- {"x": 6.5, "y": 3, "matrix": [7, 2]},
- {"x": 7.5, "y": 3, "matrix": [6, 3]},
- {"x": 8.5, "y": 3, "matrix": [7, 3]},
- {"x": 9.5, "y": 3, "matrix": [6, 4]},
- {"x": 10.5, "y": 3, "matrix": [7, 4]},
- {"x": 11.5, "y": 3, "matrix": [6, 5]},
- {"x": 12.5, "y": 3, "matrix": [7, 5]},
- {"x": 13.5, "y": 3, "w": 1.75, "matrix": [6, 6]},
- {"x": 15.25, "y": 3, "matrix": [6, 7]},
- {"x": 16.25, "y": 3, "matrix": [7, 7]},
+ {"matrix": [6, 0], "x": 1.25, "y": 3, "w": 1.25},
+ {"matrix": [7, 0], "x": 2.5, "y": 3},
+ {"matrix": [6, 1], "x": 3.5, "y": 3},
+ {"matrix": [7, 1], "x": 4.5, "y": 3},
+ {"matrix": [6, 2], "x": 5.5, "y": 3},
+ {"matrix": [7, 2], "x": 6.5, "y": 3},
+ {"matrix": [6, 3], "x": 7.5, "y": 3},
+ {"matrix": [7, 3], "x": 8.5, "y": 3},
+ {"matrix": [6, 4], "x": 9.5, "y": 3},
+ {"matrix": [7, 4], "x": 10.5, "y": 3},
+ {"matrix": [6, 5], "x": 11.5, "y": 3},
+ {"matrix": [7, 5], "x": 12.5, "y": 3},
+ {"matrix": [6, 6], "x": 13.5, "y": 3, "w": 1.75},
+ {"matrix": [6, 7], "x": 15.25, "y": 3},
+ {"matrix": [7, 7], "x": 16.25, "y": 3},
- {"x": 1.25, "y": 4, "w": 1.25, "matrix": [8, 0]},
- {"x": 2.5, "y": 4, "w": 1.25, "matrix": [9, 0]},
- {"x": 3.75, "y": 4, "w": 1.25, "matrix": [8, 1]},
- {"x": 5, "y": 4, "w": 2.25, "matrix": [8, 2]},
- {"x": 7.25, "y": 4, "w": 1.25, "matrix": [8, 3]},
- {"x": 8.5, "y": 4, "w": 2.75, "matrix": [8, 4]},
- {"x": 11.25, "y": 4, "w": 1.25, "matrix": [8, 5]},
- {"x": 12.5, "y": 4, "w": 1.25, "matrix": [9, 5]},
- {"x": 14.25, "y": 4, "matrix": [9, 6]},
- {"x": 15.25, "y": 4, "matrix": [8, 7]},
- {"x": 16.25, "y": 4, "matrix": [9, 7]}
+ {"matrix": [8, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [9, 0], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [8, 1], "x": 3.75, "y": 4, "w": 1.25},
+ {"matrix": [8, 2], "x": 5, "y": 4, "w": 2.25},
+ {"matrix": [8, 3], "x": 7.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 4], "x": 8.5, "y": 4, "w": 2.75},
+ {"matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [9, 6], "x": 14.25, "y": 4},
+ {"matrix": [8, 7], "x": 15.25, "y": 4},
+ {"matrix": [9, 7], "x": 16.25, "y": 4}
]
},
- "LAYOUT_65_ansi": {
+ "LAYOUT_ansi_blocker": {
"layout": [
- {"x": 0, "y": 0, "matrix": [9, 1]},
- {"x": 1.25, "y": 0, "matrix": [0, 0]},
- {"x": 2.25, "y": 0, "matrix": [1, 0]},
- {"x": 3.25, "y": 0, "matrix": [0, 1]},
- {"x": 4.25, "y": 0, "matrix": [1, 1]},
- {"x": 5.25, "y": 0, "matrix": [0, 2]},
- {"x": 6.25, "y": 0, "matrix": [1, 2]},
- {"x": 7.25, "y": 0, "matrix": [0, 3]},
- {"x": 8.25, "y": 0, "matrix": [1, 3]},
- {"x": 9.25, "y": 0, "matrix": [0, 4]},
- {"x": 10.25, "y": 0, "matrix": [1, 4]},
- {"x": 11.25, "y": 0, "matrix": [0, 5]},
- {"x": 12.25, "y": 0, "matrix": [1, 5]},
- {"x": 13.25, "y": 0, "matrix": [0, 6]},
- {"x": 14.25, "y": 0, "w": 2, "matrix": [0, 7]},
- {"x": 16.25, "y": 0, "matrix": [1, 7]},
+ {"matrix": [9, 1], "x": 0, "y": 0},
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [1, 0], "x": 2.25, "y": 0},
+ {"matrix": [0, 1], "x": 3.25, "y": 0},
+ {"matrix": [1, 1], "x": 4.25, "y": 0},
+ {"matrix": [0, 2], "x": 5.25, "y": 0},
+ {"matrix": [1, 2], "x": 6.25, "y": 0},
+ {"matrix": [0, 3], "x": 7.25, "y": 0},
+ {"matrix": [1, 3], "x": 8.25, "y": 0},
+ {"matrix": [0, 4], "x": 9.25, "y": 0},
+ {"matrix": [1, 4], "x": 10.25, "y": 0},
+ {"matrix": [0, 5], "x": 11.25, "y": 0},
+ {"matrix": [1, 5], "x": 12.25, "y": 0},
+ {"matrix": [0, 6], "x": 13.25, "y": 0},
+ {"matrix": [0, 7], "x": 14.25, "y": 0, "w": 2},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
- {"x": 1.25, "y": 1, "w": 1.5, "matrix": [2, 0]},
- {"x": 2.75, "y": 1, "matrix": [3, 0]},
- {"x": 3.75, "y": 1, "matrix": [2, 1]},
- {"x": 4.75, "y": 1, "matrix": [3, 1]},
- {"x": 5.75, "y": 1, "matrix": [2, 2]},
- {"x": 6.75, "y": 1, "matrix": [3, 2]},
- {"x": 7.75, "y": 1, "matrix": [2, 3]},
- {"x": 8.75, "y": 1, "matrix": [3, 3]},
- {"x": 9.75, "y": 1, "matrix": [2, 4]},
- {"x": 10.75, "y": 1, "matrix": [3, 4]},
- {"x": 11.75, "y": 1, "matrix": [2, 5]},
- {"x": 12.75, "y": 1, "matrix": [3, 5]},
- {"x": 13.75, "y": 1, "matrix": [2, 6]},
- {"x": 14.75, "y": 1, "w": 1.5, "matrix": [3, 6]},
- {"x": 16.25, "y": 1, "matrix": [3, 7]},
+ {"matrix": [2, 0], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 2.75, "y": 1},
+ {"matrix": [2, 1], "x": 3.75, "y": 1},
+ {"matrix": [3, 1], "x": 4.75, "y": 1},
+ {"matrix": [2, 2], "x": 5.75, "y": 1},
+ {"matrix": [3, 2], "x": 6.75, "y": 1},
+ {"matrix": [2, 3], "x": 7.75, "y": 1},
+ {"matrix": [3, 3], "x": 8.75, "y": 1},
+ {"matrix": [2, 4], "x": 9.75, "y": 1},
+ {"matrix": [3, 4], "x": 10.75, "y": 1},
+ {"matrix": [2, 5], "x": 11.75, "y": 1},
+ {"matrix": [3, 5], "x": 12.75, "y": 1},
+ {"matrix": [2, 6], "x": 13.75, "y": 1},
+ {"matrix": [3, 6], "x": 14.75, "y": 1, "w": 1.5},
+ {"matrix": [3, 7], "x": 16.25, "y": 1},
- {"x": 1.25, "y": 2, "w": 1.75, "matrix": [4, 0]},
- {"x": 3, "y": 2, "matrix": [5, 0]},
- {"x": 4, "y": 2, "matrix": [4, 1]},
- {"x": 5, "y": 2, "matrix": [5, 1]},
- {"x": 6, "y": 2, "matrix": [4, 2]},
- {"x": 7, "y": 2, "matrix": [5, 2]},
- {"x": 8, "y": 2, "matrix": [4, 3]},
- {"x": 9, "y": 2, "matrix": [5, 3]},
- {"x": 10, "y": 2, "matrix": [4, 4]},
- {"x": 11, "y": 2, "matrix": [5, 4]},
- {"x": 12, "y": 2, "matrix": [4, 5]},
- {"x": 13, "y": 2, "matrix": [5, 5]},
- {"x": 14, "y": 2, "w": 2.25, "matrix": [5, 6]},
- {"x": 16.25, "y": 2, "matrix": [5, 7]},
+ {"matrix": [4, 0], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 3, "y": 2},
+ {"matrix": [4, 1], "x": 4, "y": 2},
+ {"matrix": [5, 1], "x": 5, "y": 2},
+ {"matrix": [4, 2], "x": 6, "y": 2},
+ {"matrix": [5, 2], "x": 7, "y": 2},
+ {"matrix": [4, 3], "x": 8, "y": 2},
+ {"matrix": [5, 3], "x": 9, "y": 2},
+ {"matrix": [4, 4], "x": 10, "y": 2},
+ {"matrix": [5, 4], "x": 11, "y": 2},
+ {"matrix": [4, 5], "x": 12, "y": 2},
+ {"matrix": [5, 5], "x": 13, "y": 2},
+ {"matrix": [5, 6], "x": 14, "y": 2, "w": 2.25},
+ {"matrix": [5, 7], "x": 16.25, "y": 2},
- {"x": 1.25, "y": 3, "w": 2.25, "matrix": [6, 0]},
- {"x": 3.5, "y": 3, "matrix": [6, 1]},
- {"x": 4.5, "y": 3, "matrix": [7, 1]},
- {"x": 5.5, "y": 3, "matrix": [6, 2]},
- {"x": 6.5, "y": 3, "matrix": [7, 2]},
- {"x": 7.5, "y": 3, "matrix": [6, 3]},
- {"x": 8.5, "y": 3, "matrix": [7, 3]},
- {"x": 9.5, "y": 3, "matrix": [6, 4]},
- {"x": 10.5, "y": 3, "matrix": [7, 4]},
- {"x": 11.5, "y": 3, "matrix": [6, 5]},
- {"x": 12.5, "y": 3, "matrix": [7, 5]},
- {"x": 13.5, "y": 3, "w": 1.75, "matrix": [6, 6]},
- {"x": 15.25, "y": 3, "matrix": [6, 7]},
- {"x": 16.25, "y": 3, "matrix": [7, 7]},
+ {"matrix": [6, 0], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [6, 1], "x": 3.5, "y": 3},
+ {"matrix": [7, 1], "x": 4.5, "y": 3},
+ {"matrix": [6, 2], "x": 5.5, "y": 3},
+ {"matrix": [7, 2], "x": 6.5, "y": 3},
+ {"matrix": [6, 3], "x": 7.5, "y": 3},
+ {"matrix": [7, 3], "x": 8.5, "y": 3},
+ {"matrix": [6, 4], "x": 9.5, "y": 3},
+ {"matrix": [7, 4], "x": 10.5, "y": 3},
+ {"matrix": [6, 5], "x": 11.5, "y": 3},
+ {"matrix": [7, 5], "x": 12.5, "y": 3},
+ {"matrix": [6, 6], "x": 13.5, "y": 3, "w": 1.75},
+ {"matrix": [6, 7], "x": 15.25, "y": 3},
+ {"matrix": [7, 7], "x": 16.25, "y": 3},
- {"x": 1.25, "y": 4, "w": 1.25, "matrix": [8, 0]},
- {"x": 2.5, "y": 4, "w": 1.25, "matrix": [9, 0]},
- {"x": 3.75, "y": 4, "w": 1.25, "matrix": [8, 1]},
- {"x": 5, "y": 4, "w": 6.25, "matrix": [8, 3]},
- {"x": 11.25, "y": 4, "w": 1.25, "matrix": [8, 5]},
- {"x": 12.5, "y": 4, "w": 1.25, "matrix": [9, 5]},
- {"x": 14.25, "y": 4, "matrix": [9, 6]},
- {"x": 15.25, "y": 4, "matrix": [8, 7]},
- {"x": 16.25, "y": 4, "matrix": [9, 7]}
- ]
+ {"matrix": [8, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [9, 0], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [8, 1], "x": 3.75, "y": 4, "w": 1.25},
+ {"matrix": [8, 3], "x": 5, "y": 4, "w": 6.25},
+ {"matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [9, 6], "x": 14.25, "y": 4},
+ {"matrix": [8, 7], "x": 15.25, "y": 4},
+ {"matrix": [9, 7], "x": 16.25, "y": 4}
+ ]
},
- "LAYOUT_65_iso": {
- "layout": [
- {"x": 0, "y": 0, "matrix": [9, 1]},
- {"x": 1.25, "y": 0, "matrix": [0, 0]},
- {"x": 2.25, "y": 0, "matrix": [1, 0]},
- {"x": 3.25, "y": 0, "matrix": [0, 1]},
- {"x": 4.25, "y": 0, "matrix": [1, 1]},
- {"x": 5.25, "y": 0, "matrix": [0, 2]},
- {"x": 6.25, "y": 0, "matrix": [1, 2]},
- {"x": 7.25, "y": 0, "matrix": [0, 3]},
- {"x": 8.25, "y": 0, "matrix": [1, 3]},
- {"x": 9.25, "y": 0, "matrix": [0, 4]},
- {"x": 10.25, "y": 0, "matrix": [1, 4]},
- {"x": 11.25, "y": 0, "matrix": [0, 5]},
- {"x": 12.25, "y": 0, "matrix": [1, 5]},
- {"x": 13.25, "y": 0, "matrix": [0, 6]},
- {"x": 14.25, "y": 0, "w": 2, "matrix": [0, 7]},
- {"x": 16.25, "y": 0, "matrix": [1, 7]},
+ "LAYOUT_iso_blocker": {
+ "layout": [
+ {"matrix": [9, 1], "x": 0, "y": 0},
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [1, 0], "x": 2.25, "y": 0},
+ {"matrix": [0, 1], "x": 3.25, "y": 0},
+ {"matrix": [1, 1], "x": 4.25, "y": 0},
+ {"matrix": [0, 2], "x": 5.25, "y": 0},
+ {"matrix": [1, 2], "x": 6.25, "y": 0},
+ {"matrix": [0, 3], "x": 7.25, "y": 0},
+ {"matrix": [1, 3], "x": 8.25, "y": 0},
+ {"matrix": [0, 4], "x": 9.25, "y": 0},
+ {"matrix": [1, 4], "x": 10.25, "y": 0},
+ {"matrix": [0, 5], "x": 11.25, "y": 0},
+ {"matrix": [1, 5], "x": 12.25, "y": 0},
+ {"matrix": [0, 6], "x": 13.25, "y": 0},
+ {"matrix": [0, 7], "x": 14.25, "y": 0, "w": 2},
+ {"matrix": [1, 7], "x": 16.25, "y": 0},
- {"x": 1.25, "y": 1, "w": 1.5, "matrix": [2, 0]},
- {"x": 2.75, "y": 1, "matrix": [3, 0]},
- {"x": 3.75, "y": 1, "matrix": [2, 1]},
- {"x": 4.75, "y": 1, "matrix": [3, 1]},
- {"x": 5.75, "y": 1, "matrix": [2, 2]},
- {"x": 6.75, "y": 1, "matrix": [3, 2]},
- {"x": 7.75, "y": 1, "matrix": [2, 3]},
- {"x": 8.75, "y": 1, "matrix": [3, 3]},
- {"x": 9.75, "y": 1, "matrix": [2, 4]},
- {"x": 10.75, "y": 1, "matrix": [3, 4]},
- {"x": 11.75, "y": 1, "matrix": [2, 5]},
- {"x": 12.75, "y": 1, "matrix": [3, 5]},
- {"x": 13.75, "y": 1, "matrix": [2, 6]},
- {"x": 16.25, "y": 1, "matrix": [3, 7]},
+ {"matrix": [2, 0], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 2.75, "y": 1},
+ {"matrix": [2, 1], "x": 3.75, "y": 1},
+ {"matrix": [3, 1], "x": 4.75, "y": 1},
+ {"matrix": [2, 2], "x": 5.75, "y": 1},
+ {"matrix": [3, 2], "x": 6.75, "y": 1},
+ {"matrix": [2, 3], "x": 7.75, "y": 1},
+ {"matrix": [3, 3], "x": 8.75, "y": 1},
+ {"matrix": [2, 4], "x": 9.75, "y": 1},
+ {"matrix": [3, 4], "x": 10.75, "y": 1},
+ {"matrix": [2, 5], "x": 11.75, "y": 1},
+ {"matrix": [3, 5], "x": 12.75, "y": 1},
+ {"matrix": [2, 6], "x": 13.75, "y": 1},
+ {"matrix": [3, 7], "x": 16.25, "y": 1},
- {"x": 1.25, "y": 2, "w": 1.75, "matrix": [4, 0]},
- {"x": 3, "y": 2, "matrix": [5, 0]},
- {"x": 4, "y": 2, "matrix": [4, 1]},
- {"x": 5, "y": 2, "matrix": [5, 1]},
- {"x": 6, "y": 2, "matrix": [4, 2]},
- {"x": 7, "y": 2, "matrix": [5, 2]},
- {"x": 8, "y": 2, "matrix": [4, 3]},
- {"x": 9, "y": 2, "matrix": [5, 3]},
- {"x": 10, "y": 2, "matrix": [4, 4]},
- {"x": 11, "y": 2, "matrix": [5, 4]},
- {"x": 12, "y": 2, "matrix": [4, 5]},
- {"x": 13, "y": 2, "matrix": [5, 5]},
- {"x": 14, "y": 2, "matrix": [4, 6]},
- {"x": 15, "y": 1, "w": 1.25, "h": 2, "matrix": [4, 7]},
- {"x": 16.25, "y": 2, "matrix": [5, 7]},
+ {"matrix": [4, 0], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 3, "y": 2},
+ {"matrix": [4, 1], "x": 4, "y": 2},
+ {"matrix": [5, 1], "x": 5, "y": 2},
+ {"matrix": [4, 2], "x": 6, "y": 2},
+ {"matrix": [5, 2], "x": 7, "y": 2},
+ {"matrix": [4, 3], "x": 8, "y": 2},
+ {"matrix": [5, 3], "x": 9, "y": 2},
+ {"matrix": [4, 4], "x": 10, "y": 2},
+ {"matrix": [5, 4], "x": 11, "y": 2},
+ {"matrix": [4, 5], "x": 12, "y": 2},
+ {"matrix": [5, 5], "x": 13, "y": 2},
+ {"matrix": [4, 6], "x": 14, "y": 2},
+ {"matrix": [4, 7], "x": 15, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [5, 7], "x": 16.25, "y": 2},
- {"x": 1.25, "y": 3, "w": 1.25, "matrix": [6, 0]},
- {"x": 2.5, "y": 3, "matrix": [7, 0]},
- {"x": 3.5, "y": 3, "matrix": [6, 1]},
- {"x": 4.5, "y": 3, "matrix": [7, 1]},
- {"x": 5.5, "y": 3, "matrix": [6, 2]},
- {"x": 6.5, "y": 3, "matrix": [7, 2]},
- {"x": 7.5, "y": 3, "matrix": [6, 3]},
- {"x": 8.5, "y": 3, "matrix": [7, 3]},
- {"x": 9.5, "y": 3, "matrix": [6, 4]},
- {"x": 10.5, "y": 3, "matrix": [7, 4]},
- {"x": 11.5, "y": 3, "matrix": [6, 5]},
- {"x": 12.5, "y": 3, "matrix": [7, 5]},
- {"x": 13.5, "y": 3, "w": 1.75, "matrix": [6, 6]},
- {"x": 15.25, "y": 3, "matrix": [6, 7]},
- {"x": 16.25, "y": 3, "matrix": [7, 7]},
+ {"matrix": [6, 0], "x": 1.25, "y": 3, "w": 1.25},
+ {"matrix": [7, 0], "x": 2.5, "y": 3},
+ {"matrix": [6, 1], "x": 3.5, "y": 3},
+ {"matrix": [7, 1], "x": 4.5, "y": 3},
+ {"matrix": [6, 2], "x": 5.5, "y": 3},
+ {"matrix": [7, 2], "x": 6.5, "y": 3},
+ {"matrix": [6, 3], "x": 7.5, "y": 3},
+ {"matrix": [7, 3], "x": 8.5, "y": 3},
+ {"matrix": [6, 4], "x": 9.5, "y": 3},
+ {"matrix": [7, 4], "x": 10.5, "y": 3},
+ {"matrix": [6, 5], "x": 11.5, "y": 3},
+ {"matrix": [7, 5], "x": 12.5, "y": 3},
+ {"matrix": [6, 6], "x": 13.5, "y": 3, "w": 1.75},
+ {"matrix": [6, 7], "x": 15.25, "y": 3},
+ {"matrix": [7, 7], "x": 16.25, "y": 3},
- {"x": 1.25, "y": 4, "w": 1.25, "matrix": [8, 0]},
- {"x": 2.5, "y": 4, "w": 1.25, "matrix": [9, 0]},
- {"x": 3.75, "y": 4, "w": 1.25, "matrix": [8, 1]},
- {"x": 5, "y": 4, "w": 6.25, "matrix": [8, 3]},
- {"x": 11.25, "y": 4, "w": 1.25, "matrix": [8, 5]},
- {"x": 12.5, "y": 4, "w": 1.25, "matrix": [9, 5]},
- {"x": 14.25, "y": 4, "matrix": [9, 6]},
- {"x": 15.25, "y": 4, "matrix": [8, 7]},
- {"x": 16.25, "y": 4, "matrix": [9, 7]}
- ]
+ {"matrix": [8, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [9, 0], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [8, 1], "x": 3.75, "y": 4, "w": 1.25},
+ {"matrix": [8, 3], "x": 5, "y": 4, "w": 6.25},
+ {"matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [9, 6], "x": 14.25, "y": 4},
+ {"matrix": [8, 7], "x": 15.25, "y": 4},
+ {"matrix": [9, 7], "x": 16.25, "y": 4}
+ ]
}
}
}
diff --git a/keyboards/geistmaschine/geist/keymaps/ansi/keymap.c b/keyboards/geistmaschine/geist/keymaps/ansi/keymap.c
index 88dea9b77627..cebb8fb073aa 100644
--- a/keyboards/geistmaschine/geist/keymaps/ansi/keymap.c
+++ b/keyboards/geistmaschine/geist/keymaps/ansi/keymap.c
@@ -30,21 +30,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* │Ctrl│GUI │Alt │ │Alt │GUI │ │ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
*/
- [0] = LAYOUT_65_ansi(
+ [0] = LAYOUT_ansi_blocker(
LT(2, 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_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_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, LT(1, KC_RGUI), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT_65_ansi(
+ [1] = LAYOUT_ansi_blocker(
KC_MPLY, 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_INS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_ON, NK_OFF, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [2] = LAYOUT_65_ansi(
+ [2] = LAYOUT_ansi_blocker(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, 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/geistmaschine/geist/keymaps/default/keymap.c b/keyboards/geistmaschine/geist/keymaps/default/keymap.c
index 6401a0cbf844..6d96c572ba3f 100644
--- a/keyboards/geistmaschine/geist/keymaps/default/keymap.c
+++ b/keyboards/geistmaschine/geist/keymaps/default/keymap.c
@@ -18,21 +18,21 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_65_all(
+ [0] = LAYOUT_all(
LT(2, 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_TRNS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_ENT, KC_PGUP,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, LT(1, KC_RGUI), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT_65_all(
+ [1] = LAYOUT_all(
KC_MPLY, 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_TRNS, KC_INS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_ON, NK_OFF, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [2] = LAYOUT_65_all(
+ [2] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/geistmaschine/geist/keymaps/iso/keymap.c b/keyboards/geistmaschine/geist/keymaps/iso/keymap.c
index f1cc032c978a..658e4ec984f9 100644
--- a/keyboards/geistmaschine/geist/keymaps/iso/keymap.c
+++ b/keyboards/geistmaschine/geist/keymaps/iso/keymap.c
@@ -30,21 +30,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* │Ctrl│GUI │Alt │ │Alt │GUI │ │ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
*/
- [0] = LAYOUT_65_iso(
+ [0] = LAYOUT_iso_blocker(
LT(2, 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_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_HOME,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, LT(1, KC_RGUI), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT_65_iso(
+ [1] = LAYOUT_iso_blocker(
KC_MPLY, 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_INS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_ON, NK_OFF, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [2] = LAYOUT_65_iso(
+ [2] = LAYOUT_iso_blocker(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, 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/geistmaschine/geist/keymaps/via/keymap.c b/keyboards/geistmaschine/geist/keymaps/via/keymap.c
index 2814b8001acf..068f500fb01f 100644
--- a/keyboards/geistmaschine/geist/keymaps/via/keymap.c
+++ b/keyboards/geistmaschine/geist/keymaps/via/keymap.c
@@ -18,28 +18,28 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_65_all(
+ [0] = LAYOUT_all(
LT(2, 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_TRNS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_ENT, KC_PGUP,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, LT(1, KC_RGUI), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT_65_all(
+ [1] = LAYOUT_all(
KC_MPLY, 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_TRNS, KC_INS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_ON, NK_OFF, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [2] = LAYOUT_65_all(
+ [2] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [3] = LAYOUT_65_all(
+ [3] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/geistmaschine/geist/matrix_diagram.md b/keyboards/geistmaschine/geist/matrix_diagram.md
new file mode 100644
index 000000000000..9c0da5e1833a
--- /dev/null
+++ b/keyboards/geistmaschine/geist/matrix_diagram.md
@@ -0,0 +1,30 @@
+# Matrix Diagram for Geistmaschine Geist
+
+```
+┌───┐
+│91 │
+└───┘
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───────┐
+ │00 │10 │01 │11 │02 │12 │03 │13 │04 │14 │05 │15 │06 │16 │07 │17 │ │07 │ 2u Backspace
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ └─┬─────┤
+ │20 │30 │21 │31 │22 │32 │23 │33 │24 │34 │25 │35 │26 │36 │37 │ │ │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐47 │ ISO Enter
+ │40 │50 │41 │51 │42 │52 │43 │53 │44 │54 │45 │55 │56 │57 │ │46 │ │
+ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
+ │60 │70 │61 │71 │62 │72 │63 │73 │64 │74 │65 │75 │66 │67 │77 │
+ ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ │80 │90 │81 │82 │83 │84 │85 │95 │ │96 │87 │97 │
+ └────┴────┴────┴────────┴────┴──────────┴────┴────┘ └───┴───┴───┘
+ ┌────────┐
+ │60 │ 2.25u LShift
+ └────────┘
+ ┌────┬────┬────┬────────────────────────┬────┬────┐
+ │80 │90 │81 │83 │85 │95 │ Blocker
+ └────┴────┴────┴────────────────────────┴────┴────┘
+ ┌─────┬───┬─────┬───────────────────────────┬─────┐
+ │80 │90 │81 │83 │95 │ Blocker Tsangan
+ └─────┴───┴─────┴───────────────────────────┴─────┘
+ ┌─────┬───┬─────┬───────────┬───────────┬────┬────┐
+ │80 │90 │81 │82 │84 │85 │95 │ 2x 3u Spacebars
+ └─────┴───┴─────┴───────────┴───────────┴────┴────┘
+```
diff --git a/keyboards/gmmk/gmmk2/p65/ansi/info.json b/keyboards/gmmk/gmmk2/p65/ansi/info.json
index c22fe89f589d..fbf5d78b5546 100644
--- a/keyboards/gmmk/gmmk2/p65/ansi/info.json
+++ b/keyboards/gmmk/gmmk2/p65/ansi/info.json
@@ -21,8 +21,12 @@
},
"processor": "WB32F3G71",
"bootloader": "wb32-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_65_ansi_blocker"
+ },
+ "community_layouts": ["65_ansi_blocker"],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_65_ansi_blocker": {
"layout": [
{"matrix": [1, 3], "x": 0, "y": 0},
{"matrix": [1, 7], "x": 1, "y": 0},
@@ -37,8 +41,8 @@
{"matrix": [8, 7], "x": 10, "y": 0},
{"matrix": [8, 6], "x": 11, "y": 0},
{"matrix": [6, 6], "x": 12, "y": 0},
- {"matrix": [7, 1], "x": 13, "y": 0, "w": 2.25},
- {"matrix": [2, 5], "x": 15.25, "y": 0},
+ {"matrix": [7, 1], "x": 13, "y": 0, "w": 2},
+ {"matrix": [2, 5], "x": 15, "y": 0},
{"matrix": [1, 1], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 0], "x": 1.5, "y": 1},
@@ -53,8 +57,8 @@
{"matrix": [8, 0], "x": 10.5, "y": 1},
{"matrix": [8, 1], "x": 11.5, "y": 1},
{"matrix": [6, 1], "x": 12.5, "y": 1},
- {"matrix": [7, 6], "x": 13.5, "y": 1, "w": 1.75},
- {"matrix": [2, 6], "x": 15.25, "y": 1},
+ {"matrix": [7, 6], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 6], "x": 15, "y": 1},
{"matrix": [2, 1], "x": 0, "y": 2, "w": 1.75},
{"matrix": [1, 2], "x": 1.75, "y": 2},
@@ -69,7 +73,7 @@
{"matrix": [8, 2], "x": 10.75, "y": 2},
{"matrix": [8, 3], "x": 11.75, "y": 2},
{"matrix": [8, 4], "x": 12.75, "y": 2, "w": 2.25},
- {"matrix": [6, 5], "x": 15.25, "y": 2},
+ {"matrix": [6, 5], "x": 15, "y": 2},
{"matrix": [0, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [1, 4], "x": 2.25, "y": 3},
@@ -83,8 +87,8 @@
{"matrix": [7, 4], "x": 10.25, "y": 3},
{"matrix": [8, 5], "x": 11.25, "y": 3},
{"matrix": [0, 7], "x": 12.25, "y": 3, "w": 1.75},
- {"matrix": [3, 5], "x": 14.25, "y": 3},
- {"matrix": [0, 1], "x": 15.25, "y": 3},
+ {"matrix": [3, 5], "x": 14, "y": 3},
+ {"matrix": [0, 1], "x": 15, "y": 3},
{"matrix": [0, 6], "x": 0, "y": 4, "w": 1.25},
{"matrix": [1, 5], "x": 1.25, "y": 4, "w": 1.25},
@@ -93,9 +97,9 @@
{"matrix": [3, 6], "x": 10, "y": 4, "w": 1.25},
{"matrix": [3, 3], "x": 11.25, "y": 4, "w": 1.25},
- {"matrix": [0, 3], "x": 13.25, "y": 4},
- {"matrix": [7, 3], "x": 14.25, "y": 4},
- {"matrix": [0, 5], "x": 15.25, "y": 4}
+ {"matrix": [0, 3], "x": 13, "y": 4},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [0, 5], "x": 15, "y": 4}
]
}
}
diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/default/keymap.c b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/default/keymap.c
index 471bc69b8ec6..42affd3de620 100644
--- a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/default/keymap.c
+++ b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/default/keymap.c
@@ -26,7 +26,7 @@ enum custom_layers {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: Base Layer (Default Layer)
*/
-[_BL] = LAYOUT(
+[_BL] = LAYOUT_65_ansi_blocker(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
@@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _FL: Function Layer
*/
-[_FL] = LAYOUT(
+[_FL] = LAYOUT_65_ansi_blocker(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_INS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/via/keymap.c b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/via/keymap.c
index 10653ae46383..567ea686f84c 100644
--- a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/via/keymap.c
+++ b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/via/keymap.c
@@ -20,7 +20,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: Base Layer (Default Layer)
*/
-[0] = LAYOUT(
+[0] = LAYOUT_65_ansi_blocker(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
@@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _FL: Function Layer
*/
-[1] = LAYOUT(
+[1] = LAYOUT_65_ansi_blocker(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_INS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -38,14 +38,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, QK_BOOT, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD
),
-[2] = LAYOUT(
+[2] = LAYOUT_65_ansi_blocker(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
-[3] = LAYOUT(
+[3] = LAYOUT_65_ansi_blocker(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/gmmk/numpad/info.json b/keyboards/gmmk/numpad/info.json
index 4df94d45ee4a..195d4fa71020 100644
--- a/keyboards/gmmk/numpad/info.json
+++ b/keyboards/gmmk/numpad/info.json
@@ -39,7 +39,7 @@
{"label": "4", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "5", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "6", "matrix": [2, 2], "x": 2, "y": 2},
- {"label": "CALC", "matrix": [2, 3], "x": 3, "y": 2},
+ {"label": "CALC", "matrix": [2, 3], "x": 4.25, "y": 0},
{"label": "1", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "2", "matrix": [3, 1], "x": 1, "y": 3},
@@ -47,7 +47,7 @@
{"label": "RET", "matrix": [3, 3], "x": 3, "y": 3, "h": 2},
{"label": "0", "matrix": [4, 0], "x": 0, "y": 4, "w": 2},
- {"label": ".", "matrix": [4, 3], "x": 3, "y": 4}
+ {"label": ".", "matrix": [4, 3], "x": 2, "y": 4}
]
}
}
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h
index 5dda6f15bc5e..18271fb4d25d 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h
@@ -17,6 +17,65 @@
#pragma once
#ifdef RGB_MATRIX_ENABLE
- #define RGB_MATRIX_TIMEOUT 1200000 // 20 minutes (20 * 60 * 1000ms)
- #define RGB_DISABLE_WHEN_USB_SUSPENDED
+# define RGB_MATRIX_TIMEOUT 1200000 // 20 minutes (20 * 60 * 1000ms)
+# define RGB_DISABLE_WHEN_USB_SUSPENDED
#endif
+
+// A debounce of 8 represents a minimum key press time of just under 1 refresh at 120Hz
+// Slightly higher than the default because we are using sym_eager_pk
+#ifdef DEBOUNCE
+# undef DEBOUNCE
+#endif
+#define DEBOUNCE 8
+
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+// #define ENABLE_RGB_MATRIX_ALPHAS_MODS
+// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+// #define ENABLE_RGB_MATRIX_BAND_SAT
+// #define ENABLE_RGB_MATRIX_BAND_VAL
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#define ENABLE_RGB_MATRIX_DUAL_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// #define ENABLE_RGB_MATRIX_RAINDROPS
+#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+// #define ENABLE_RGB_MATRIX_HUE_BREATHING
+// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
+// #define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+// #define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c
index f803b44abbd0..3d2792b4a64c 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/keymap.c
@@ -17,23 +17,24 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
-enum layers {
- WIN_BASE = 0,
- WIN_FN,
- MAC_BASE,
- MAC_FN
+enum layers { WIN_BASE = 0, WIN_FN, MAC_BASE, MAC_FN };
+
+enum custom_keycodes {
+ CMDQ_TOG = QK_KB_2 // TECH DEBT: Starts at QK_KB_2 to maintain ordering with VIA definitions. See #19884. Revert to QK_KB_0 when VIA catches up with QMK.
};
-#define KC_TASK LGUI(KC_TAB)
-#define KC_FLXP LGUI(KC_E)
-#define TO_WINB TO(WIN_BASE)
-#define TO_MACB TO(MAC_BASE)
-#define MO_WINF MO(WIN_FN)
-#define MO_MACF MO(MAC_FN)
+#define KC_TASK LWIN(KC_TAB) // Open Task Manager
+#define KC_FLXP LWIN(KC_E) // Open File Explorer
+#define DF_WINB DF(WIN_BASE) // Switch to WIN_BASE layer
+#define MO_WINF MO(WIN_FN) // Toggle to WIN_FN layer
+#define DF_MACB DF(MAC_BASE) // Switch to MAX_BASE layer
+#define MO_MACF MO(MAC_FN) // Toggle to MAC_FN layer
// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// The GMMK Pro default layout is:
+//
// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Del Rotary(Play/Pause)
// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Home
// Tab Q W E R T Y U I O P [ ] \ PgUp
@@ -55,236 +56,379 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts.
//
// RGB and function keys are inspired by the Keychron Q1 layouts instead of using the default keys.
- //
- // KC_PAUS/KC_BRMU and KC_SCRL/KC_BRMD are aliases for the same keys, but their names reflect better the function in each layout.
+ // To clean the EEPROM, hold the ESC key while connecting the keyboard.
+
[WIN_BASE] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO_WINF, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO_WINF, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[WIN_FN] = LAYOUT(
- _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, KC_INS, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, KC_PAUS,
- TO_MACB, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCRL,
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, _______, _______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
+ EE_CLR, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, KC_SCRL,
+ DF_MACB, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_SPD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
[MAC_BASE] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO_MACF, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO_MACF, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[MAC_FN] = LAYOUT(
- _______, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, KC_INS, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, KC_BRMU,
- TO_WINB, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRMD,
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, _______, _______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
+ EE_CLR, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRMU,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, KC_BRMD,
+ DF_WINB, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_SPD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN,
+ XXXXXXX, XXXXXXX, CMDQ_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
};
// clang-format on
-#ifdef RGB_MATRIX_ENABLE
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [WIN_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [WIN_FN] = {ENCODER_CCW_CW(XXXXXXX, XXXXXXX)},
+ [MAC_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [MAC_FN] = {ENCODER_CCW_CW(XXXXXXX, XXXXXXX)},
+};
+#endif
-/* Renaming those to make the purpose on this keymap clearer */
-#define LED_FLAG_CAPS LED_FLAG_NONE
-#define LED_FLAG_EFFECTS LED_FLAG_INDICATOR
+/* To record user preferences */
+typedef union {
+ uint32_t raw; // set to 32-bit of size
+ struct {
+ bool rgb_enabled : 1; // Artificial RGB ON/OFF flag (1 bit)
+ bool cmd_q_delay_enabled : 1; // Toggle CMD+Q delay (1 bit)
+ };
+} user_config_t;
+user_config_t user_config;
-static void set_rgb_caps_leds(void);
+/* Delayed keypresses variables and functions */
+static fast_timer_t delayed_press_delay = 0;
+static uint16_t delayed_press_keycode = KC_NO;
+static fast_timer_t delayed_press_start_time = 0;
+static uint16_t delayed_press_sent_keycode = KC_NO;
+static void start_delayed_press(fast_timer_t delay, uint16_t keycode);
+static void mark_delayed_press_sent(void);
+static void mark_delayed_release_sent(void);
+static void cancel_delayed_press(void);
-static uint16_t effect_started_time = 0;
-static uint8_t r_effect = 0x0, g_effect = 0x0, b_effect = 0x0;
-static void start_effects(void);
+#define IS_ANY_DELAYED_PRESS_PENDING() (delayed_press_start_time > 0 && delayed_press_keycode != KC_NO)
+#define IS_DELAYED_PRESS_PENDING(keycode) (delayed_press_start_time > 0 && delayed_press_keycode == (keycode))
+#define IS_DELAYED_PRESS_SENT(keycode) (delayed_press_sent_keycode != KC_NO && delayed_press_sent_keycode == (keycode))
-/* The interval time in ms */
-#ifndef EFFECTS_TIME
- #define EFFECTS_TIME 2000
-#endif
-#ifndef EFFECTS_INTERVAL
- #define EFFECTS_INTERVAL 250
-#endif
-#if EFFECTS_TIME <= 0 || EFFECTS_TIME >= 32767
- #error "EFFECTS_TIME must be a positive integer smaller than 32767"
+/* CMD+Q delay */
+#ifndef CMD_Q_DELAY
+# define CMD_Q_DELAY 1000
#endif
-#if EFFECTS_INTERVAL <= 0 || EFFECTS_INTERVAL >= 32767
- #error "EFFECTS_INTERVAL must be a positive integer smaller than 32767"
+#if CMD_Q_DELAY <= 0 || CMD_Q_DELAY >= UINT16_MAX / 2
+# error "CMD_Q_DELAY must be a positive integer smaller than UINT16_MAX / 2"
#endif
-#define effect_red() r_effect = 0xFF, g_effect = 0x0, b_effect = 0x0
-#define effect_green() r_effect = 0x0, g_effect = 0xFF, b_effect = 0x0
-#define effect_blue() r_effect = 0x0, g_effect = 0x0, b_effect = 0xFF
-#define effect_white() r_effect = 0xFF, g_effect = 0xFF, b_effect = 0xFF
-static uint8_t previous_effect_layer = 255;
+#ifdef RGB_MATRIX_ENABLE
-layer_state_t layer_state_set_user(layer_state_t state) {
- uint8_t current_layer = get_highest_layer(state);
- switch (current_layer) {
- case WIN_BASE:
- if (previous_effect_layer != current_layer) {
- previous_effect_layer = current_layer;
- effect_blue();
- start_effects();
- }
- break;
- case MAC_BASE:
- if (previous_effect_layer != current_layer) {
- previous_effect_layer = current_layer;
- effect_white();
- start_effects();
- }
- break;
- }
- return state;
+# define CAPS_LOCK_COLOR RGB_RED
+# define WIN_BASE_COLOR RGB_BLUE
+# define WIN_FN_COLOR RGB_BLUE
+# define MAC_BASE_COLOR RGB_WHITE
+# define MAC_FN_COLOR RGB_WHITE
+# define UNKNOWN_LAYER_COLOR RGB_PINK
+
+/* The maximum effects duration */
+# ifndef EFFECTS_DURATION
+# define EFFECTS_DURATION 2000
+# endif
+# if EFFECTS_DURATION <= 0 || EFFECTS_DURATION >= UINT16_MAX / 2
+# error "EFFECTS_DURATION must be a positive integer smaller than UINT16_MAX / 2"
+# endif
+/* The interval for the flashing effect */
+# ifndef FLASHING_EFFECT_INTERVAL
+# define FLASHING_EFFECT_INTERVAL 250
+# endif
+# if FLASHING_EFFECT_INTERVAL <= 0 || FLASHING_EFFECT_INTERVAL >= UINT16_MAX / 2
+# error "FLASHING_EFFECT_INTERVAL must be a positive integer smaller than UINT16_MAX / 2"
+# endif
+
+static void set_rgb_layer_winfn(void);
+static void set_rgb_layer_macfn(void);
+
+/* Effects functions */
+static float flashing_effect(fast_timer_t delta_time);
+static float static_effect(fast_timer_t delta_time);
+static float increasing_effect(fast_timer_t delta_time);
+
+/* Effect variables and functions */
+static fast_timer_t effect_started_time = 0;
+static fast_timer_t effect_max_duration = EFFECTS_DURATION;
+static uint8_t effect_r = 0x0, effect_g = 0x0, effect_b = 0x0;
+static float (*effect_multiplier)(fast_timer_t) = static_effect;
+static void start_effects(fast_timer_t max_duration, uint8_t r_color, uint8_t g_color, uint8_t b_color, float (*multiplier)(fast_timer_t));
+static void stop_effects(void);
+
+/* Delayed keypresses variables with RGB variant */
+static void start_delayed_press_with_effects(fast_timer_t delay, uint16_t keycode, uint8_t r_color, uint8_t g_color, uint8_t b_color);
+
+#endif // RGB_MATRIX_ENABLE
+
+void eeconfig_init_user(void) { // EEPROM is getting reset!
+ user_config.raw = 0;
+ user_config.rgb_enabled = true; // We want this enabled by default
+ user_config.cmd_q_delay_enabled = true; // We want this enabled by default
+ eeconfig_update_user(user_config.raw); // Write default value to EEPROM now
}
-bool led_update_user(led_t led_state) {
- if (led_state.caps_lock) {
- if (!rgb_matrix_is_enabled()) {
- /* Turn ON the RGB Matrix for CAPS LOCK */
- rgb_matrix_set_flags(LED_FLAG_CAPS);
- rgb_matrix_enable();
- }
- } else if (rgb_matrix_get_flags() == LED_FLAG_CAPS) {
- /* RGB Matrix was only ON because of CAPS LOCK. Turn it OFF. */
+void keyboard_post_init_user(void) {
+#ifdef RGB_MATRIX_ENABLE
+ // Enable the RGB matrix, if not enabled
+ if (!rgb_matrix_is_enabled()) {
+ rgb_matrix_enable();
+ }
+ // Set the flags to ALL, if not already set
+ if (rgb_matrix_get_flags() != LED_FLAG_ALL) {
rgb_matrix_set_flags(LED_FLAG_ALL);
- rgb_matrix_disable();
}
- return true;
+#endif
+
+ // Read the user config from EEPROM
+ user_config.raw = eeconfig_read_user();
}
-#endif // RGB_MATRIX_ENABLE
+void matrix_scan_user(void) {
+ if (IS_ANY_DELAYED_PRESS_PENDING()) {
+ if (timer_elapsed_fast(delayed_press_start_time) > delayed_press_delay) {
+ register_code(delayed_press_keycode);
+ mark_delayed_press_sent();
+ }
+ }
+}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (IS_DELAYED_PRESS_SENT(keycode)) {
+ if (!record->event.pressed) {
+ /* Send key-up event and clear the keycode and stop processing */
+ unregister_code(keycode);
+ mark_delayed_release_sent();
+ return false;
+ }
+ } else if (IS_DELAYED_PRESS_PENDING(keycode)) {
+ if (!record->event.pressed) {
+ /* Cancel the pending press and stop processing */
+ cancel_delayed_press();
+ return false;
+ }
+ } else if (IS_ANY_DELAYED_PRESS_PENDING()) {
+ /* Cancel the pending press and resume processing */
+ cancel_delayed_press();
+ }
switch (keycode) {
- #ifdef RGB_MATRIX_ENABLE
- #ifdef NKRO_ENABLE
- case NK_TOGG:
+ case QK_DEF_LAYER ... QK_DEF_LAYER_MAX:
if (record->event.pressed) {
- if (keymap_config.nkro) {
- /* Turning NKRO OFF */
- effect_red();
+ /* Set the default layout on the EEPROM, let the default layer change callback handle the rest */
+ set_single_persistent_default_layer(QK_DEF_LAYER_GET_LAYER(keycode));
+ }
+ return false;
+ case CMDQ_TOG:
+ if (record->event.pressed) {
+#ifdef RGB_MATRIX_ENABLE
+ if (user_config.cmd_q_delay_enabled) {
+ /* Turning delay OFF */
+ start_effects(EFFECTS_DURATION, RGB_RED, flashing_effect);
} else {
- /* Turning NKRO ON */
- effect_green();
+ /* Turning delay ON */
+ start_effects(EFFECTS_DURATION, RGB_GREEN, flashing_effect);
+ }
+#endif
+ user_config.cmd_q_delay_enabled = !user_config.cmd_q_delay_enabled;
+ eeconfig_update_user(user_config.raw);
+ }
+ return false;
+ case KC_Q:
+ if (user_config.cmd_q_delay_enabled) {
+ if (layer_state_is(MAC_BASE)) {
+ uint8_t mods = get_mods();
+ if (mods == MOD_BIT(KC_LCMD) || mods == MOD_BIT(KC_RCMD)) {
+ if (record->event.pressed) {
+#ifdef RGB_MATRIX_ENABLE
+ start_delayed_press_with_effects(CMD_Q_DELAY, KC_Q, RGB_ORANGE);
+#else
+ start_delayed_press(CMD_Q_DELAY, KC_Q);
+#endif
+ }
+ return false;
+ }
}
- start_effects();
}
break;
- #endif // NKRO_ENABLE
- case RGB_MOD:
- case RGB_RMOD:
- case RGB_HUI:
- case RGB_HUD:
- case RGB_SAI:
- case RGB_SAD:
- case RGB_VAI:
- case RGB_VAD:
- case RGB_SPI:
- case RGB_SPD:
+#ifdef RGB_MATRIX_ENABLE
+# ifdef NKRO_ENABLE
+ case NK_TOGG:
if (record->event.pressed) {
- if (rgb_matrix_get_flags() != LED_FLAG_ALL) {
- /* Ignore changes to RGB settings while only it's supposed to be OFF */
- return false; // Skip all further processing of this key
+ if (keymap_config.nkro) {
+ /* Turning NKRO OFF */
+ start_effects(EFFECTS_DURATION, RGB_RED, flashing_effect);
+ } else {
+ /* Turning NKRO ON */
+ start_effects(EFFECTS_DURATION, RGB_GREEN, flashing_effect);
}
}
break;
+# endif // NKRO_ENABLE
case RGB_TOG:
if (record->event.pressed) {
- if (rgb_matrix_is_enabled()) {
- switch (rgb_matrix_get_flags()) {
- case LED_FLAG_EFFECTS:
- case LED_FLAG_CAPS:
- /* Turned ON because of EFFECTS or CAPS, is actually OFF */
- /* Change to LED_FLAG_ALL to signal it's really ON */
- rgb_matrix_set_flags(LED_FLAG_ALL);
- /* Will be re-enabled by the processing of the toggle */
- rgb_matrix_disable_noeeprom();
- break;
- case LED_FLAG_ALL:
- /* Is actually ON */
- if (effect_started_time > 0) {
- /* Signal EFFECTS */
- rgb_matrix_set_flags(LED_FLAG_EFFECTS);
- /* Will be re-enabled by the processing of the toggle */
- rgb_matrix_disable_noeeprom();
- } else
- if (host_keyboard_led_state().caps_lock) {
- /* Signal CAPS */
- rgb_matrix_set_flags(LED_FLAG_CAPS);
- /* Will be re-enabled by the processing of the toggle */
- rgb_matrix_disable_noeeprom();
- }
- break;
- }
- }
+ user_config.rgb_enabled = !user_config.rgb_enabled;
+ eeconfig_update_user(user_config.raw);
+ }
+ return false;
+ case RGB_MODE_FORWARD ... RGB_MODE_TWINKLE:
+ if (!user_config.rgb_enabled) {
+ /* Ignore changes to RGB settings while only it's supposed to be OFF */
+ return false; // Skip all further processing of this key
}
break;
- #endif // RGB_MATRIX_ENABLE
+#endif // RGB_MATRIX_ENABLE
}
return true;
}
+static void start_delayed_press(fast_timer_t delay, uint16_t keycode) {
+ delayed_press_delay = delay;
+ delayed_press_keycode = keycode;
+ delayed_press_start_time = timer_read_fast();
+ delayed_press_sent_keycode = KC_NO;
+}
+
+static void mark_delayed_press_sent(void) {
+ delayed_press_sent_keycode = delayed_press_keycode;
+ cancel_delayed_press();
+}
+
+static void mark_delayed_release_sent(void) {
+ delayed_press_sent_keycode = KC_NO;
+}
+
+static void cancel_delayed_press(void) {
+ delayed_press_delay = 0;
+ delayed_press_keycode = KC_NO;
+ delayed_press_start_time = 0;
#ifdef RGB_MATRIX_ENABLE
+ stop_effects();
+#endif
+}
+
+#ifdef RGB_MATRIX_ENABLE
+
+static void start_delayed_press_with_effects(fast_timer_t delay, uint16_t keycode, uint8_t r_color, uint8_t g_color, uint8_t b_color) {
+ start_delayed_press(delay, keycode);
+ start_effects(delay, r_color, g_color, b_color, increasing_effect);
+}
+
+/*
+Effects when switching layers
+*/
+
+static uint8_t previous_layer = UINT8_MAX;
+
+layer_state_t default_layer_state_set_user(layer_state_t state) {
+ uint8_t current_layer = get_highest_layer(state);
+ if (previous_layer != current_layer) {
+ // For some reason, setting the default layer alone doesn't change it fully
+ layer_move(current_layer);
+ switch (current_layer) {
+ case WIN_BASE:
+ start_effects(EFFECTS_DURATION, WIN_BASE_COLOR, flashing_effect);
+ break;
+ case MAC_BASE:
+ start_effects(EFFECTS_DURATION, MAC_BASE_COLOR, flashing_effect);
+ break;
+ default:
+ // This should not ever happen, but let's display something if it does!
+ start_effects(EFFECTS_DURATION, UNKNOWN_LAYER_COLOR, static_effect);
+ break;
+ }
+ previous_layer = current_layer;
+ }
+ return state;
+}
+
+static void start_effects(fast_timer_t max_duration, uint8_t r_color, uint8_t g_color, uint8_t b_color, float (*multiplier)(fast_timer_t)) {
+ effect_r = r_color;
+ effect_g = g_color;
+ effect_b = b_color;
+ effect_multiplier = multiplier;
+ effect_max_duration = max_duration;
+ effect_started_time = timer_read_fast();
+}
+
+static void stop_effects(void) {
+ effect_r = 0x0;
+ effect_g = 0x0;
+ effect_b = 0x0;
+ effect_multiplier = static_effect;
+ effect_max_duration = EFFECTS_DURATION;
+ effect_started_time = 0;
+}
+
+static float flashing_effect(fast_timer_t delta_time) {
+ return ((delta_time / FLASHING_EFFECT_INTERVAL) + 1) & 0x01;
+}
+
+static float static_effect(fast_timer_t delta_time) {
+ return 1.0;
+}
+
+static float increasing_effect(fast_timer_t delta_time) {
+ return ((float)delta_time) / effect_max_duration;
+}
+
bool rgb_matrix_indicators_user(void) {
if (effect_started_time > 0) {
- /* Render blinking EFFECTS */
- const uint16_t deltaTime = sync_timer_elapsed(effect_started_time);
- if (deltaTime <= EFFECTS_TIME) {
- const uint8_t led_state = ((deltaTime / EFFECTS_INTERVAL) + 1) & 0x01;
- const uint8_t val_r = led_state * r_effect;
- const uint8_t val_g = led_state * g_effect;
- const uint8_t val_b = led_state * b_effect;
+ fast_timer_t delta_time = timer_elapsed_fast(effect_started_time);
+ if (delta_time <= effect_max_duration) {
+ /* Render effect */
+ float multiplier = effect_multiplier(delta_time);
+ uint8_t val_r = multiplier * effect_r;
+ uint8_t val_g = multiplier * effect_g;
+ uint8_t val_b = multiplier * effect_b;
rgb_matrix_set_color_all(val_r, val_g, val_b);
- if (host_keyboard_led_state().caps_lock) {
- set_rgb_caps_leds();
- }
return false;
} else {
- /* EFFECTS duration is finished */
- effect_started_time = 0;
- if (rgb_matrix_get_flags() == LED_FLAG_EFFECTS) {
- /* It was turned ON because of EFFECTS */
- if (host_keyboard_led_state().caps_lock) {
- /* CAPS is still ON. Demote to CAPS */
- rgb_matrix_set_flags(LED_FLAG_CAPS);
- } else {
- /* There is nothing else keeping RGB enabled. Reset flags and turn if off. */
- rgb_matrix_set_flags(LED_FLAG_ALL);
- rgb_matrix_disable_noeeprom();
- }
- }
+ /* Effect duration is finished */
+ stop_effects();
}
}
- if (rgb_matrix_get_flags() == LED_FLAG_CAPS) {
- rgb_matrix_set_color_all(0x0, 0x0, 0x0);
- }
if (host_keyboard_led_state().caps_lock) {
- set_rgb_caps_leds();
+ rgb_matrix_set_color_all(CAPS_LOCK_COLOR);
+ } else if (!user_config.rgb_enabled) {
+ rgb_matrix_set_color_all(RGB_OFF);
}
- return false;
-}
-
-static void start_effects(void) {
- effect_started_time = sync_timer_read();
- if (!rgb_matrix_is_enabled()) {
- /* Turn it ON, signal the cause (EFFECTS) */
- rgb_matrix_set_flags(LED_FLAG_EFFECTS);
- rgb_matrix_enable_noeeprom();
- } else if (rgb_matrix_get_flags() == LED_FLAG_CAPS) {
- /* It's already ON, promote the cause from CAPS to EFFECTS */
- rgb_matrix_set_flags(LED_FLAG_EFFECTS);
+ switch (get_highest_layer(layer_state)) {
+ case WIN_BASE:
+ case MAC_BASE:
+ break;
+ case WIN_FN:
+ set_rgb_layer_winfn();
+ return false;
+ case MAC_FN:
+ set_rgb_layer_macfn();
+ return false;
+ default:
+ // This should never happen, but if it does, let's display something!
+ rgb_matrix_set_color_all(UNKNOWN_LAYER_COLOR);
+ return false;
}
+ return true;
}
// RGB led number layout, function of the key
@@ -298,38 +442,69 @@ static void start_effects(void) {
// 87, led 07 88, led 18
// 91, led 08 92, led 19
-static void set_rgb_caps_leds(void) {
- rgb_matrix_set_color(0, 0xFF, 0x0, 0x0); // ESC
- rgb_matrix_set_color(6, 0xFF, 0x0, 0x0); // F1
- rgb_matrix_set_color(12, 0xFF, 0x0, 0x0); // F2
- rgb_matrix_set_color(18, 0xFF, 0x0, 0x0); // F3
- rgb_matrix_set_color(23, 0xFF, 0x0, 0x0); // F4
- rgb_matrix_set_color(28, 0xFF, 0x0, 0x0); // F5
- rgb_matrix_set_color(34, 0xFF, 0x0, 0x0); // F6
- rgb_matrix_set_color(39, 0xFF, 0x0, 0x0); // F7
- rgb_matrix_set_color(44, 0xFF, 0x0, 0x0); // F8
- rgb_matrix_set_color(50, 0xFF, 0x0, 0x0); // F9
- rgb_matrix_set_color(56, 0xFF, 0x0, 0x0); // F10
- rgb_matrix_set_color(61, 0xFF, 0x0, 0x0); // F11
- rgb_matrix_set_color(66, 0xFF, 0x0, 0x0); // F12
- rgb_matrix_set_color(69, 0xFF, 0x0, 0x0); // Prt
- rgb_matrix_set_color(67, 0xFF, 0x0, 0x0); // Left side LED 1
- rgb_matrix_set_color(68, 0xFF, 0x0, 0x0); // Right side LED 1
- rgb_matrix_set_color(70, 0xFF, 0x0, 0x0); // Left side LED 2
- rgb_matrix_set_color(71, 0xFF, 0x0, 0x0); // Right side LED 2
- rgb_matrix_set_color(73, 0xFF, 0x0, 0x0); // Left side LED 3
- rgb_matrix_set_color(74, 0xFF, 0x0, 0x0); // Right side LED 3
- rgb_matrix_set_color(76, 0xFF, 0x0, 0x0); // Left side LED 4
- rgb_matrix_set_color(77, 0xFF, 0x0, 0x0); // Right side LED 4
- rgb_matrix_set_color(80, 0xFF, 0x0, 0x0); // Left side LED 5
- rgb_matrix_set_color(81, 0xFF, 0x0, 0x0); // Right side LED 5
- rgb_matrix_set_color(83, 0xFF, 0x0, 0x0); // Left side LED 6
- rgb_matrix_set_color(84, 0xFF, 0x0, 0x0); // Right side LED 6
- rgb_matrix_set_color(87, 0xFF, 0x0, 0x0); // Left side LED 7
- rgb_matrix_set_color(88, 0xFF, 0x0, 0x0); // Right side LED 7
- rgb_matrix_set_color(91, 0xFF, 0x0, 0x0); // Left side LED 8
- rgb_matrix_set_color(92, 0xFF, 0x0, 0x0); // Right side LED 8
- rgb_matrix_set_color(3, 0xFF, 0x0, 0x0); // CAPS LED
+static void set_rgb_layer_winfn(void) {
+ rgb_matrix_set_color(0, WIN_FN_COLOR);
+ rgb_matrix_set_color(6, WIN_FN_COLOR);
+ rgb_matrix_set_color(12, WIN_FN_COLOR);
+ rgb_matrix_set_color(18, WIN_FN_COLOR);
+ rgb_matrix_set_color(23, WIN_FN_COLOR);
+ rgb_matrix_set_color(28, WIN_FN_COLOR);
+ rgb_matrix_set_color(34, WIN_FN_COLOR);
+ rgb_matrix_set_color(39, WIN_FN_COLOR);
+ rgb_matrix_set_color(44, WIN_FN_COLOR);
+ rgb_matrix_set_color(50, WIN_FN_COLOR);
+ rgb_matrix_set_color(56, WIN_FN_COLOR);
+ rgb_matrix_set_color(61, WIN_FN_COLOR);
+ rgb_matrix_set_color(66, WIN_FN_COLOR);
+ rgb_matrix_set_color(2, WIN_FN_COLOR);
+ rgb_matrix_set_color(3, WIN_FN_COLOR);
+ rgb_matrix_set_color(8, WIN_FN_COLOR);
+ rgb_matrix_set_color(9, WIN_FN_COLOR);
+ rgb_matrix_set_color(14, WIN_FN_COLOR);
+ rgb_matrix_set_color(15, WIN_FN_COLOR);
+ rgb_matrix_set_color(20, WIN_FN_COLOR);
+ rgb_matrix_set_color(21, WIN_FN_COLOR);
+ rgb_matrix_set_color(25, WIN_FN_COLOR);
+ rgb_matrix_set_color(26, WIN_FN_COLOR);
+ rgb_matrix_set_color(38, WIN_FN_COLOR);
+ rgb_matrix_set_color(93, WIN_FN_COLOR);
+ rgb_matrix_set_color(72, WIN_FN_COLOR);
+ rgb_matrix_set_color(75, WIN_FN_COLOR);
+ rgb_matrix_set_color(86, WIN_FN_COLOR);
+ rgb_matrix_set_color(82, WIN_FN_COLOR);
+}
+
+static void set_rgb_layer_macfn(void) {
+ rgb_matrix_set_color(0, MAC_FN_COLOR);
+ rgb_matrix_set_color(6, MAC_FN_COLOR);
+ rgb_matrix_set_color(12, MAC_FN_COLOR);
+ rgb_matrix_set_color(18, MAC_FN_COLOR);
+ rgb_matrix_set_color(23, MAC_FN_COLOR);
+ rgb_matrix_set_color(28, MAC_FN_COLOR);
+ rgb_matrix_set_color(34, MAC_FN_COLOR);
+ rgb_matrix_set_color(39, MAC_FN_COLOR);
+ rgb_matrix_set_color(44, MAC_FN_COLOR);
+ rgb_matrix_set_color(50, MAC_FN_COLOR);
+ rgb_matrix_set_color(56, MAC_FN_COLOR);
+ rgb_matrix_set_color(61, MAC_FN_COLOR);
+ rgb_matrix_set_color(66, MAC_FN_COLOR);
+ rgb_matrix_set_color(2, MAC_FN_COLOR);
+ rgb_matrix_set_color(3, MAC_FN_COLOR);
+ rgb_matrix_set_color(8, MAC_FN_COLOR);
+ rgb_matrix_set_color(9, MAC_FN_COLOR);
+ rgb_matrix_set_color(14, MAC_FN_COLOR);
+ rgb_matrix_set_color(15, MAC_FN_COLOR);
+ rgb_matrix_set_color(20, MAC_FN_COLOR);
+ rgb_matrix_set_color(21, MAC_FN_COLOR);
+ rgb_matrix_set_color(25, MAC_FN_COLOR);
+ rgb_matrix_set_color(26, MAC_FN_COLOR);
+ rgb_matrix_set_color(38, MAC_FN_COLOR);
+ rgb_matrix_set_color(93, MAC_FN_COLOR);
+ rgb_matrix_set_color(72, MAC_FN_COLOR);
+ rgb_matrix_set_color(75, MAC_FN_COLOR);
+ rgb_matrix_set_color(86, MAC_FN_COLOR);
+ rgb_matrix_set_color(82, MAC_FN_COLOR);
+ rgb_matrix_set_color(17, MAC_FN_COLOR);
}
#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/readme.md b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/readme.md
index b080f02c6b35..2b21bd2821f7 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/readme.md
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/readme.md
@@ -7,15 +7,23 @@ The differences are as follows:
- Dedicated MacOS and Windows/Linux layers
- Switching between them by pressing Fn + CAPS LOCK
+- VIA support
- Disabled Mouse Keys (to fix issues with KVM switches and also because they're not used here anyway)
- RGB turns off after 20 minutes of inactivity
- RGB turns off when USB is suspended
- Layer 0:
- - Print Screen (default) -> Delete
- - Delete (default) -> Home
+ - Delete -> Insert
+ - Page Up -> Delete
+ - Page Down -> Home
- Layer 1 (accessed by pressing Fn):
- - Fn + Delete -> Insert
- - Fn + Home -> Print Screen
+ - Fn + Insert -> Pause
+ - Fn + Delete -> Scroll Lock
+ - Fn + Esc -> Clear EEPROM
+ - Fn + (Left) CMD (macOS layout) -> Toggle the CMD + Q delay
+
+On the Mac layer, pressing CMD + Q will not immediately send the combination.\
+There's a configurable delay (defaults to 1 second) to send it.\
+This is done mainly to prevent hitting CMD + Q by mistake when alternating between applications with CMD + Tab.
This keymap also includes CAPS LOCK ON indicator.\
All left and right side LEDs, and the Caps key LED will turn solid red while CAPS LOCK is ON.
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk
index d5942a2e904d..14e410632183 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/rules.mk
@@ -3,21 +3,28 @@
# Disabling MouseKey because it breaks my KVM switch
MOUSEKEY_ENABLE = no
-# Cherry MX-style switches and diodes are not susceptible to noise, no need for noise-resistant algorithms.
-# This significantly reduces latency.
+# Use sym_eager_pk for better latency when gaming.
#
-# The matrix scan frequency seems to be around 1820 Hz, so even sym_defer_g would perform ok,
-# but the "defer" part would mean we would wait DEBOUNCE ms before sending any events.
-# Using "asym_eager_defer_pk" does not seem to benefit us in anything.
-# The GMMK Pro has more then enough system resources for a per-key algorithm.
-# Using an "eager" algorithm leads to extremely low latency while also reducing the chances of chattering
-# due to it's "post-event" debouncing (of sorts).
+# Previous issues with sym_defer_pk (and sym_eager_pk and debounce times
+# shorter than 8ms) were due to Glorious' horrible hot-swap sockets.
+# These issues were 100% resolved after I replaced them with Gateron hot-swap sockets.
#
-# I have observed zero chattering or double-keypress issues on my Gateron Yellow switches.
-# Most chattering issues on the GMMK Pro seem to be related to its proprietary hot-swap sockets anyway.
+# The old sockets apparently didn't hold onto the legs of the switches at all.
+#
+# Using eager might not be a good idea with other switch types, but I only use
+# linears now, so this should be ok.
+#
+# asym_eager_defer_pk also works well and it is more resistant to chatter at
+# the cost of delay when releasing a key being slightly higher.
DEBOUNCE_TYPE = sym_eager_pk
# Useful for debugging
# CONSOLE_ENABLE = yes
# DEBUG_MATRIX_SCAN_RATE_ENABLE = yes
# DEBUG_MATRIX_SCAN_RATE = yes
+
+# Encoder Map support
+ENCODER_MAP_ENABLE = yes
+
+# Enables VIA
+VIA_ENABLE = yes
diff --git a/keyboards/gray_studio/think65v3/config.h b/keyboards/gray_studio/think65v3/config.h
new file mode 100644
index 000000000000..0a0596e64c61
--- /dev/null
+++ b/keyboards/gray_studio/think65v3/config.h
@@ -0,0 +1,9 @@
+// Copyright 2023 Yizhen Liu (@edwardslau)
+// SPDX-License-Identifier: GPL-2.0
+#pragma once
+#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_MOOD
+/* 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
+
\ No newline at end of file
diff --git a/keyboards/gray_studio/think65v3/info.json b/keyboards/gray_studio/think65v3/info.json
new file mode 100644
index 000000000000..0fbab667d443
--- /dev/null
+++ b/keyboards/gray_studio/think65v3/info.json
@@ -0,0 +1,275 @@
+{
+ "keyboard_name": "think65v3",
+ "url": "https://graystudio.club/products/testthink6-5-v3",
+ "maintainer": "edwardslau",
+ "manufacturer":"GrayStudio",
+ "processor": "STM32F072",
+ "diode_direction": "COL2ROW",
+ "bootloader": "stm32-dfu",
+ "usb": {
+ "vid":"0x4753",
+ "pid":"0x4003",
+ "device_version": "0.0.3"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "ws2812": {
+ "pin": "B10"
+ }
+ "matrix_pins": {
+ "cols": ["A3", "A5", "A4", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "B0", "A8", "B15", "B14", "B13"],
+ "rows": ["A6", "B12", "A2", "A0", "A1"]
+ },
+"rgblight": {
+ "led_count": 6,
+ "sleep": true,
+ "max_brightness": 150,
+ "layers": {
+ "enabled": true
+ "override_rgb": true
+ },
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"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,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": [1,15],"x": 15, "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, "w": 2.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,13],"x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3,14],"x": 14, "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,7], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4,10],"x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4,11],"x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4,13],"x": 13, "y": 4},
+ {"matrix": [4,14],"x": 14, "y": 4},
+ {"matrix": [4,15],"x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_blocker": {
+ "layout": [
+ {"matrix": [0,0], "x": 0, "y": 0},
+ {"matrix": [0,1], "x": 1, "y": 0},
+ {"matrix": [0,2], "x": 2, "y": 0},
+ {"matrix": [0,3], "x": 3, "y": 0},
+ {"matrix": [0,4], "x": 4, "y": 0},
+ {"matrix": [0,5], "x": 5, "y": 0},
+ {"matrix": [0,6], "x": 6, "y": 0},
+ {"matrix": [0,7], "x": 7, "y": 0},
+ {"matrix": [0,8], "x": 8, "y": 0},
+ {"matrix": [0,9], "x": 9, "y": 0},
+ {"matrix": [0,10],"x": 10, "y": 0},
+ {"matrix": [0,11],"x": 11, "y": 0},
+ {"matrix": [0,12],"x": 12, "y": 0},
+ {"matrix": [0,13],"x": 13, "y": 0, "w": 2},
+ {"matrix": [0,15],"x": 15, "y": 0},
+
+ {"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": [1,15],"x": 15, "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, "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,13],"x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3,14],"x": 14, "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,7], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4,10],"x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4,11],"x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4,13],"x": 13, "y": 4},
+ {"matrix": [4,14],"x": 14, "y": 4},
+ {"matrix": [4,15],"x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "layout": [
+ {"matrix": [0,0], "x": 0, "y": 0},
+ {"matrix": [0,1], "x": 1, "y": 0},
+ {"matrix": [0,2], "x": 2, "y": 0},
+ {"matrix": [0,3], "x": 3, "y": 0},
+ {"matrix": [0,4], "x": 4, "y": 0},
+ {"matrix": [0,5], "x": 5, "y": 0},
+ {"matrix": [0,6], "x": 6, "y": 0},
+ {"matrix": [0,7], "x": 7, "y": 0},
+ {"matrix": [0,8], "x": 8, "y": 0},
+ {"matrix": [0,9], "x": 9, "y": 0},
+ {"matrix": [0,10],"x": 10, "y": 0},
+ {"matrix": [0,11],"x": 11, "y": 0},
+ {"matrix": [0,12],"x": 12, "y": 0},
+ {"matrix": [0,13],"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,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,15],"x": 15, "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": [1,14],"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,13],"x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3,14],"x": 14, "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,7], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4,10],"x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4,11],"x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4,13],"x": 13, "y": 4},
+ {"matrix": [4,14],"x": 14, "y": 4},
+ {"matrix": [4,15],"x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/gray_studio/think65v3/keymaps/default/keymap.c b/keyboards/gray_studio/think65v3/keymaps/default/keymap.c
new file mode 100644
index 000000000000..82ff711808ed
--- /dev/null
+++ b/keyboards/gray_studio/think65v3/keymaps/default/keymap.c
@@ -0,0 +1,20 @@
+// Copyright 2023 Yizhen Liu (@edwardslau)
+// SPDX-License-Identifier: GPL-2.0
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, QK_BOOT,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/gray_studio/think65v3/keymaps/via/keymap.c b/keyboards/gray_studio/think65v3/keymaps/via/keymap.c
new file mode 100644
index 000000000000..82ff711808ed
--- /dev/null
+++ b/keyboards/gray_studio/think65v3/keymaps/via/keymap.c
@@ -0,0 +1,20 @@
+// Copyright 2023 Yizhen Liu (@edwardslau)
+// SPDX-License-Identifier: GPL-2.0
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, QK_BOOT,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/gray_studio/think65v3/keymaps/via/rules.mk b/keyboards/gray_studio/think65v3/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/gray_studio/think65v3/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/gray_studio/think65v3/readme.md b/keyboards/gray_studio/think65v3/readme.md
new file mode 100644
index 000000000000..dc09a00d1d2c
--- /dev/null
+++ b/keyboards/gray_studio/think65v3/readme.md
@@ -0,0 +1,21 @@
+# Gray Studio think65v3
+
+ A 65% keyboard by Graystudio. PCB designed and manufactured by DEMO Studio.
+
+ * Keyboard Maintainer: [edwardslau](https://github.com/edwardslau)
+ * Hardware Support: Think6.5 V3
+ * Hardware Availability:
+
+ Make example for this keyboard (after setting up your build environment):
+
+ make gray_studio/think65v3:default
+
+ Flashing example for this keyboard:
+
+ make gray_studio/think65v3:default:flash
+
+## Bootloader
+
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+
+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 infromation. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
\ No newline at end of file
diff --git a/keyboards/gray_studio/think65v3/rules.mk b/keyboards/gray_studio/think65v3/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/gray_studio/think65v3/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/gray_studio/think65v3/think65v3.c b/keyboards/gray_studio/think65v3/think65v3.c
new file mode 100644
index 000000000000..04dd85406fb5
--- /dev/null
+++ b/keyboards/gray_studio/think65v3/think65v3.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Yizhen Liu (@edwardslau)
+// SPDX-License-Identifier: GPL-2.0
+#include "quantum.h"
+const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,6, HSV_WHITE}
+);
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+ my_capslock_layer
+);
+
+void keyboard_post_init_kb(void) {
+ // Enable the LED layers
+ rgblight_layers = my_rgb_layers;
+ keyboard_post_init_user();
+}
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res) {
+ rgblight_set_layer_state(0, led_state.caps_lock);
+ }
+ return res;
+}
diff --git a/keyboards/gvalchca/spaccboard/info.json b/keyboards/gvalchca/spaccboard/info.json
index 71c88a0db041..1ce128b59662 100644
--- a/keyboards/gvalchca/spaccboard/info.json
+++ b/keyboards/gvalchca/spaccboard/info.json
@@ -201,7 +201,7 @@
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
- {"matrix": [2, 13], "x": 12.75, "y": 1, "w": 2.25, "h": 2},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
diff --git a/keyboards/handwired/dactyl_lightcycle/info.json b/keyboards/handwired/dactyl_lightcycle/info.json
new file mode 100644
index 000000000000..4a123e711d25
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/info.json
@@ -0,0 +1,209 @@
+{
+ "keyboard_name": "Dactyl Lightcycle",
+ "manufacturer": "Adereth",
+ "url": "https://github.com/adereth/dactyl-keyboard",
+ "maintainer": "Matt Adereth",
+ "usb": {
+ "vid": "0x444C",
+ "pid": "0xA460",
+ "device_version": "1.0.0"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "mousekey": true,
+ "extrakey": true,
+ "audio": false,
+ "rgblight": false,
+ "backlight": false,
+ "nkro": false
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "matrix_pins": {
+ "cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
+ "rows": ["F7", "B1", "B3", "B2", "B6"]
+ },
+ "diode_direction": "COL2ROW",
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "D0"
+ },
+ "development_board": "promicro",
+ "community_layouts": ["split_3x6_3", "split_3x5_3"],
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+
+ {"matrix": [5, 0], "x": 11, "y": 0},
+ {"matrix": [5, 1], "x": 12, "y": 0},
+ {"matrix": [5, 2], "x": 13, "y": 0},
+ {"matrix": [5, 3], "x": 14, "y": 0},
+ {"matrix": [5, 4], "x": 15, "y": 0},
+ {"matrix": [5, 5], "x": 16, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+
+ {"matrix": [6, 0], "x": 11, "y": 1},
+ {"matrix": [6, 1], "x": 12, "y": 1},
+ {"matrix": [6, 2], "x": 13, "y": 1},
+ {"matrix": [6, 3], "x": 14, "y": 1},
+ {"matrix": [6, 4], "x": 15, "y": 1},
+ {"matrix": [6, 5], "x": 16, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+
+ {"matrix": [3, 5], "x": 6, "y": 2, "h": 1.25},
+ {"matrix": [4, 5], "x": 7, "y": 2, "h": 1.5},
+
+ {"matrix": [9, 0], "x": 9, "y": 2, "h": 1.5},
+ {"matrix": [8, 0], "x": 10, "y": 2, "h": 1.25},
+
+ {"matrix": [7, 0], "x": 11, "y": 2},
+ {"matrix": [7, 1], "x": 12, "y": 2},
+ {"matrix": [7, 2], "x": 13, "y": 2},
+ {"matrix": [7, 3], "x": 14, "y": 2},
+ {"matrix": [7, 4], "x": 15, "y": 2},
+ {"matrix": [7, 5], "x": 16, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+
+ {"matrix": [4, 2], "x": 5, "y": 3, "h": 2},
+ {"matrix": [4, 3], "x": 6, "y": 3.25, "h": 1.75},
+ {"matrix": [4, 4], "x": 7, "y": 3.5, "h": 1.5},
+
+ {"matrix": [9, 1], "x": 9, "y": 3.5, "h": 1.5},
+ {"matrix": [9, 2], "x": 10, "y": 3.25, "h": 1.75},
+ {"matrix": [9, 3], "x": 11, "y": 3, "h": 2},
+
+ {"matrix": [8, 1], "x": 12, "y": 3},
+ {"matrix": [8, 2], "x": 13, "y": 3},
+ {"matrix": [8, 3], "x": 14, "y": 3},
+ {"matrix": [8, 4], "x": 15, "y": 3},
+ {"matrix": [8, 5], "x": 16, "y": 3}
+ ]
+ },
+ "LAYOUT_split_3x6_3": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+
+ {"matrix": [5, 0], "x": 11, "y": 0},
+ {"matrix": [5, 1], "x": 12, "y": 0},
+ {"matrix": [5, 2], "x": 13, "y": 0},
+ {"matrix": [5, 3], "x": 14, "y": 0},
+ {"matrix": [5, 4], "x": 15, "y": 0},
+ {"matrix": [5, 5], "x": 16, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+
+ {"matrix": [6, 0], "x": 11, "y": 1},
+ {"matrix": [6, 1], "x": 12, "y": 1},
+ {"matrix": [6, 2], "x": 13, "y": 1},
+ {"matrix": [6, 3], "x": 14, "y": 1},
+ {"matrix": [6, 4], "x": 15, "y": 1},
+ {"matrix": [6, 5], "x": 16, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+
+ {"matrix": [7, 0], "x": 11, "y": 2},
+ {"matrix": [7, 1], "x": 12, "y": 2},
+ {"matrix": [7, 2], "x": 13, "y": 2},
+ {"matrix": [7, 3], "x": 14, "y": 2},
+ {"matrix": [7, 4], "x": 15, "y": 2},
+ {"matrix": [7, 5], "x": 16, "y": 2},
+
+ {"matrix": [4, 2], "x": 5, "y": 3, "h": 2},
+ {"matrix": [4, 3], "x": 6, "y": 3.25, "h": 1.75},
+ {"matrix": [4, 4], "x": 7, "y": 3.5, "h": 1.5},
+
+ {"matrix": [9, 1], "x": 9, "y": 3.5, "h": 1.5},
+ {"matrix": [9, 2], "x": 10, "y": 3.25, "h": 1.75},
+ {"matrix": [9, 3], "x": 11, "y": 3, "h": 2}
+ ]
+ },
+ "LAYOUT_split_3x5_3": {
+ "layout": [
+ {"matrix": [0, 1], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1, "y": 0},
+ {"matrix": [0, 3], "x": 2, "y": 0},
+ {"matrix": [0, 4], "x": 3, "y": 0},
+ {"matrix": [0, 5], "x": 4, "y": 0},
+
+ {"matrix": [5, 0], "x": 10, "y": 0},
+ {"matrix": [5, 1], "x": 11, "y": 0},
+ {"matrix": [5, 2], "x": 12, "y": 0},
+ {"matrix": [5, 3], "x": 13, "y": 0},
+ {"matrix": [5, 4], "x": 14, "y": 0},
+
+ {"matrix": [1, 1], "x": 0, "y": 1},
+ {"matrix": [1, 2], "x": 1, "y": 1},
+ {"matrix": [1, 3], "x": 2, "y": 1},
+ {"matrix": [1, 4], "x": 3, "y": 1},
+ {"matrix": [1, 5], "x": 4, "y": 1},
+
+ {"matrix": [6, 0], "x": 10, "y": 1},
+ {"matrix": [6, 1], "x": 11, "y": 1},
+ {"matrix": [6, 2], "x": 12, "y": 1},
+ {"matrix": [6, 3], "x": 13, "y": 1},
+ {"matrix": [6, 4], "x": 14, "y": 1},
+
+ {"matrix": [2, 1], "x": 0, "y": 2},
+ {"matrix": [2, 2], "x": 1, "y": 2},
+ {"matrix": [2, 3], "x": 2, "y": 2},
+ {"matrix": [2, 4], "x": 3, "y": 2},
+ {"matrix": [2, 5], "x": 4, "y": 2},
+
+ {"matrix": [7, 0], "x": 10, "y": 2},
+ {"matrix": [7, 1], "x": 11, "y": 2},
+ {"matrix": [7, 2], "x": 12, "y": 2},
+ {"matrix": [7, 3], "x": 13, "y": 2},
+ {"matrix": [7, 4], "x": 14, "y": 2},
+
+ {"matrix": [4, 2], "x": 4, "y": 3, "h": 2},
+ {"matrix": [4, 3], "x": 5, "y": 3.25, "h": 1.75},
+ {"matrix": [4, 4], "x": 6, "y": 3.5, "h": 1.5},
+
+ {"matrix": [9, 1], "x": 8, "y": 3.5, "h": 1.5},
+ {"matrix": [9, 2], "x": 9, "y": 3.25, "h": 1.75},
+ {"matrix": [9, 3], "x": 10, "y": 3, "h": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_lightcycle/keymaps/default/config.h b/keyboards/handwired/dactyl_lightcycle/keymaps/default/config.h
new file mode 100644
index 000000000000..49b067cc586a
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/keymaps/default/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2020 Ralph Azucena
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* Enables This makes it easier for fast typists to use dual-function keys */
+#define PERMISSIVE_HOLD
+
+/* mouse config */
+#define MOUSEKEY_DELAY 0
+// Lowering MOUSEKEY_INTERVAL raises the cursor speed significantly, you may want to lower MOUSEKEY_MAX_SPEED (default: 10)
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+
+/* layer config */
+#define TAPPING_TOGGLE 1
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/handwired/dactyl_lightcycle/keymaps/default/keymap.json b/keyboards/handwired/dactyl_lightcycle/keymaps/default/keymap.json
new file mode 100644
index 000000000000..a9cc3e2741cf
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/keymaps/default/keymap.json
@@ -0,0 +1,34 @@
+{
+ "keyboard": "handwired/dactyl_lightcycle",
+ "version": 1,
+ "author": "dunk2k",
+ "notes": "This file is a keymap(.json) file for handwired/dactyl_lightcycle",
+ "keymap": "default",
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_ESC", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSLS",
+ "KC_TAB", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
+ "KC_LALT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_DEL", "KC_LGUI", "KC_RGUI", "KC_BSPC", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_LALT",
+ "KC_LCTL", "KC_MINS", "KC_EQL", "KC_LEFT", "KC_RGHT", "LT(1,KC_HOME)", "KC_SPC", "KC_LSFT", "KC_RCTL", "KC_ENT", "LT(2,KC_END)", "KC_UP", "KC_DOWN", "KC_LBRC", "KC_RBRC", "KC_RSFT"
+ ],
+ [
+ "RCS(KC_ESC)", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NUM", "KC_P7", "KC_P8", "KC_P9", "KC_PMNS", "KC_TRNS",
+ "KC_CAPS", "KC_SCRL", "KC_INS", "KC_PAUS", "KC_PSCR", "KC_NO", "KC_PAST", "KC_P4", "KC_P5", "KC_P6", "KC_PPLS", "KC_TRNS",
+ "KC_TRNS", "KC_NO", "KC_NO", "S(KC_HOME)", "S(KC_END)", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "C(KC_BSPC)", "KC_PSLS", "KC_P1", "KC_P2", "KC_P3", "KC_PENT", "KC_TRNS",
+ "KC_TRNS", "KC_NO", "KC_NO", "LSG(KC_TAB)", "G(KC_TAB)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_RSFT", "MO(3)", "KC_PCMM", "KC_P0", "KC_PDOT", "KC_PEQL", "KC_TRNS"
+ ],
+ [
+ "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12",
+ "KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_TILD",
+ "KC_TRNS", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_LPRN", "C(KC_DEL)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_RPRN", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_TRNS",
+ "KC_TRNS", "KC_UNDS", "KC_PLUS", "KC_NO", "A(KC_TAB)", "MO(3)", "KC_LCTL", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGUP", "KC_PGDN", "KC_LCBR", "KC_RCBR", "KC_TRNS"
+ ],
+ [
+ "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_VOLU", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
+ "KC_NO", "QK_BOOT", "KC_SLEP", "KC_MSTP", "KC_MPLY", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "AG_TOGG", "KC_NO",
+ "KC_NO", "KC_NO", "KC_NO", "KC_MRWD", "KC_MFFD", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_VOLD", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
+ "KC_NO", "KC_NO", "KC_NO", "KC_MNXT", "KC_MNXT", "KC_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_TRNS", "KC_BRIU", "KC_BRID", "KC_NO", "KC_NO", "KC_NO"
+ ]
+ ]
+}
diff --git a/keyboards/handwired/dactyl_lightcycle/keymaps/via/config.h b/keyboards/handwired/dactyl_lightcycle/keymaps/via/config.h
new file mode 100644
index 000000000000..49b067cc586a
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/keymaps/via/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2020 Ralph Azucena
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* Enables This makes it easier for fast typists to use dual-function keys */
+#define PERMISSIVE_HOLD
+
+/* mouse config */
+#define MOUSEKEY_DELAY 0
+// Lowering MOUSEKEY_INTERVAL raises the cursor speed significantly, you may want to lower MOUSEKEY_MAX_SPEED (default: 10)
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+
+/* layer config */
+#define TAPPING_TOGGLE 1
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/handwired/dactyl_lightcycle/keymaps/via/keymap.json b/keyboards/handwired/dactyl_lightcycle/keymaps/via/keymap.json
new file mode 100644
index 000000000000..c1089e77110f
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/keymaps/via/keymap.json
@@ -0,0 +1,39 @@
+{
+ "keyboard": "handwired/dactyl_lightcycle",
+ "version": 1,
+ "author": "dunk2k",
+ "notes": "This file is a keymap(.json) file for handwired/dactyl_lightcycle",
+ "config": {
+ "features": {
+ "via": true
+ }
+ },
+ "keymap": "via",
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_ESC", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSLS",
+ "KC_TAB", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
+ "KC_LALT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_DEL", "KC_LGUI", "KC_RGUI", "KC_BSPC", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_LALT",
+ "KC_LCTL", "KC_MINS", "KC_EQL", "KC_LEFT", "KC_RGHT", "LT(1,KC_HOME)", "KC_SPC", "KC_LSFT", "KC_RCTL", "KC_ENT", "LT(2,KC_END)", "KC_UP", "KC_DOWN", "KC_LBRC", "KC_RBRC", "KC_RSFT"
+ ],
+ [
+ "RCS(KC_ESC)", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NUM", "KC_P7", "KC_P8", "KC_P9", "KC_PMNS", "KC_TRNS",
+ "KC_CAPS", "KC_SCRL", "KC_INS", "KC_PAUS", "KC_PSCR", "KC_NO", "KC_PAST", "KC_P4", "KC_P5", "KC_P6", "KC_PPLS", "KC_TRNS",
+ "KC_TRNS", "KC_NO", "KC_NO", "S(KC_HOME)", "S(KC_END)", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "C(KC_BSPC)", "KC_PSLS", "KC_P1", "KC_P2", "KC_P3", "KC_PENT", "KC_TRNS",
+ "KC_TRNS", "KC_NO", "KC_NO", "LSG(KC_TAB)", "G(KC_TAB)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_RSFT", "MO(3)", "KC_PCMM", "KC_P0", "KC_PDOT", "KC_PEQL", "KC_TRNS"
+ ],
+ [
+ "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12",
+ "KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_TILD",
+ "KC_TRNS", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_LPRN", "C(KC_DEL)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_RPRN", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_TRNS",
+ "KC_TRNS", "KC_UNDS", "KC_PLUS", "KC_NO", "A(KC_TAB)", "MO(3)", "KC_LCTL", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGUP", "KC_PGDN", "KC_LCBR", "KC_RCBR", "KC_TRNS"
+ ],
+ [
+ "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_VOLU", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
+ "KC_NO", "QK_BOOT", "KC_SLEP", "KC_MSTP", "KC_MPLY", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "AG_TOGG", "KC_NO",
+ "KC_NO", "KC_NO", "KC_NO", "KC_MRWD", "KC_MFFD", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_VOLD", "KC_NO", "KC_NO", "KC_NO", "KC_NO",
+ "KC_NO", "KC_NO", "KC_NO", "KC_MNXT", "KC_MNXT", "KC_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_TRNS", "KC_BRIU", "KC_BRID", "KC_NO", "KC_NO", "KC_NO"
+ ]
+ ]
+}
diff --git a/keyboards/handwired/dactyl_lightcycle/readme.md b/keyboards/handwired/dactyl_lightcycle/readme.md
new file mode 100644
index 000000000000..b351942f4435
--- /dev/null
+++ b/keyboards/handwired/dactyl_lightcycle/readme.md
@@ -0,0 +1,40 @@
+# Dactyl Lightcycle
+
+![TopElev](https://i.imgur.com/MwPhTrCh.jpg)
+
+A handwired, split bodied, concave key-well, columnar keyboard.
+The *Dactyl Lightcycle* is a variation of the [Dactyl](/keyboards/handwired/dactyl/) keyboard, its differences are:
+1. Top (number) row removed
+2. Five key thumb cluster; one less than the *Dactyl's* six
+
+This modernised rendition of the *Dactyl Lightcycle* requires two Pro Micro controllers, rather than the *Dactyl's* original implementation of a micro controller and I/O expander.
+
+* Keyboard Maintainer: [Matt Adereth](https://github.com/adereth/)
+* Hardware Supported: 2x Pro Micro micro controller, or clone of
+* Hardware Availability: Case files available on [GitHub](https://github.com/adereth/dactyl-keyboard), file names beginning "lightcycle" apply
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/dactyl_lightcycle:default
+
+Flashing example for this keyboard:
+
+ make handwired/dactyl_lightcycle:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in keymap**: Press the key mapped to `QK_BOOT` if it is available
+
+## QMK Layouts
+
+The following [community layouts](/layouts/) are supported:
+| Layout | Diagram |
+| :---: | :---: |
+| Split_3x6_3 | ![split_3x6_3](https://i.imgur.com/xBVDsqE.jpg) |
+| Split_3x5_3 | ![split_3x5_3](https://i.imgur.com/nc0dbH1.jpg) |
diff --git a/keyboards/handwired/dactyl_lightcycle/rules.mk b/keyboards/handwired/dactyl_lightcycle/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/via/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/via/keymap.c
new file mode 100644
index 000000000000..337f332c5d97
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/via/keymap.c
@@ -0,0 +1,49 @@
+// Copyright 2023 QMK Community
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+};
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_5x6(
+ 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_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT,
+ KC_LCTL, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_BSLS,
+ KC_LBRC,KC_RBRC, KC_PLUS, KC_EQL,
+ RAISE,KC_SPC, KC_ENT, LOWER,
+ KC_TAB,KC_HOME, KC_END, KC_DEL,
+ KC_BSPC, KC_GRV, KC_LGUI, KC_LALT
+ ),
+
+ [_LOWER] = LAYOUT_5x6(
+ 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_LBRC, KC_RBRC, KC_P7 , KC_P8 , KC_P9 ,_______,KC_PLUS,
+ _______,KC_HOME,KC_PGUP,KC_PGDN,KC_END ,KC_LPRN, KC_RPRN, KC_P4 , KC_P5 , KC_P6 ,KC_MINS,KC_PIPE,
+ _______,_______,_______,_______,_______,_______, _______, KC_P1 , KC_P2 , KC_P3 ,KC_EQL ,KC_UNDS,
+ _______,KC_PSCR, _______, KC_P0,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+
+ ),
+
+ [_RAISE] = LAYOUT_5x6(
+ 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_LBRC, KC_RBRC,_______,KC_NUM,KC_INS ,KC_SCRL,KC_MUTE,
+ _______,KC_LEFT,KC_UP ,KC_DOWN,KC_RGHT,KC_LPRN, KC_RPRN,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_VOLU,
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_VOLD,
+ _______,_______, KC_EQL ,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+ )
+};
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/via/rules.mk b/keyboards/handwired/dactyl_manuform/5x6/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/handwired/dactyl_maximus/info.json b/keyboards/handwired/dactyl_maximus/info.json
new file mode 100644
index 000000000000..1d3c9443f313
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/info.json
@@ -0,0 +1,137 @@
+{
+ "keyboard_name": "Dactyl Maximus",
+ "manufacturer": "handwired",
+ "url": "",
+ "maintainer": "dunk2k",
+ "usb": {
+ "vid": "0x444C",
+ "pid": "0xA57B",
+ "device_version": "1.0.0"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "build": {
+ "lto": true
+ },
+ "matrix_pins": {
+ "cols": ["D0", "D4", "C6", "D7", "E6", "B4", "B5"],
+ "rows": ["F6", "F7", "B1", "B3", "B2", "B6"]
+ },
+ "diode_direction": "COL2ROW",
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "D1"
+ },
+ "development_board": "promicro",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+
+ {"matrix": [6, 0], "x": 12, "y": 0},
+ {"matrix": [6, 1], "x": 13, "y": 0},
+ {"matrix": [6, 2], "x": 14, "y": 0},
+ {"matrix": [6, 3], "x": 15, "y": 0},
+ {"matrix": [6, 4], "x": 16, "y": 0},
+ {"matrix": [6, 5], "x": 17, "y": 0},
+ {"matrix": [6, 6], "x": 18, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+
+ {"matrix": [7, 0], "x": 12, "y": 1},
+ {"matrix": [7, 1], "x": 13, "y": 1},
+ {"matrix": [7, 2], "x": 14, "y": 1},
+ {"matrix": [7, 3], "x": 15, "y": 1},
+ {"matrix": [7, 4], "x": 16, "y": 1},
+ {"matrix": [7, 5], "x": 17, "y": 1},
+ {"matrix": [7, 6], "x": 18, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+
+ {"matrix": [8, 0], "x": 12, "y": 2},
+ {"matrix": [8, 1], "x": 13, "y": 2},
+ {"matrix": [8, 2], "x": 14, "y": 2},
+ {"matrix": [8, 3], "x": 15, "y": 2},
+ {"matrix": [8, 4], "x": 16, "y": 2},
+ {"matrix": [8, 5], "x": 17, "y": 2},
+ {"matrix": [8, 6], "x": 18, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+
+ {"matrix": [9, 0], "x": 12, "y": 3},
+ {"matrix": [9, 1], "x": 13, "y": 3},
+ {"matrix": [9, 2], "x": 14, "y": 3},
+ {"matrix": [9, 3], "x": 15, "y": 3},
+ {"matrix": [9, 4], "x": 16, "y": 3},
+ {"matrix": [9, 5], "x": 17, "y": 3},
+ {"matrix": [9, 6], "x": 18, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+
+ {"matrix": [10, 1], "x": 13, "y": 4},
+ {"matrix": [10, 2], "x": 14, "y": 4},
+ {"matrix": [10, 3], "x": 15, "y": 4},
+ {"matrix": [10, 4], "x": 16, "y": 4},
+ {"matrix": [10, 5], "x": 17, "y": 4},
+ {"matrix": [10, 6], "x": 18, "y": 4},
+
+ {"matrix": [4, 6], "x": 7, "y": 5},
+ {"matrix": [5, 6], "x": 8, "y": 5},
+
+ {"matrix": [11, 0], "x": 10, "y": 5},
+ {"matrix": [10, 0], "x": 11, "y": 5},
+
+ {"matrix": [5, 3], "x": 6, "y": 6},
+ {"matrix": [5, 4], "x": 7, "y": 6},
+ {"matrix": [5, 5], "x": 8, "y": 6},
+
+ {"matrix": [11, 1], "x": 10, "y": 6},
+ {"matrix": [11, 2], "x": 11, "y": 6},
+ {"matrix": [11, 3], "x": 12, "y": 6},
+
+ {"matrix": [5, 0], "x": 6, "y": 7},
+ {"matrix": [5, 1], "x": 7, "y": 7},
+ {"matrix": [5, 2], "x": 8, "y": 7},
+
+ {"matrix": [11, 4], "x": 10, "y": 7},
+ {"matrix": [11, 5], "x": 11, "y": 7},
+ {"matrix": [11, 6], "x": 12, "y": 7}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_maximus/keymaps/default/keymap.c b/keyboards/handwired/dactyl_maximus/keymaps/default/keymap.c
new file mode 100644
index 000000000000..cfd95db563e5
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/keymaps/default/keymap.c
@@ -0,0 +1,52 @@
+// Copyright 2021 Duncan Sutherland (https://github.com/dunk2k)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#define CUT C(KC_X)
+#define COPY C(KC_C)
+#define PSTE C(KC_V)
+#define UNDO C(KC_Z)
+#define REDO C(KC_Y)
+#define SALL C(KC_A)
+#define APP_N A(KC_TAB)
+#define APP_P LSA(KC_TAB)
+#define SLFT S(KC_HOME)
+#define SRGHT S(KC_END)
+#define APP_X A(KC_F4)
+#define TSKMG RCS(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ APP_P, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PSCR, APP_N,
+ SLFT, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, SRGHT,
+ COPY, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, PSTE,
+ CUT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, SALL,
+ UNDO, KC_LCTL, KC_LALT, KC_LGUI, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_RGUI, KC_RALT, KC_RCTL, REDO,
+ KC_HOME, KC_PGUP, KC_VOLU, KC_END,
+ MO(1), KC_SPC, KC_DEL, KC_BSPC, KC_ENT, MO(2),
+ KC_UP, KC_DOWN, KC_PGDN, KC_VOLD, KC_LEFT, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, TSKMG, APP_X, KC_SCRL, KC_INS, KC_PAUS, KC_NO, KC_NO, KC_P7, KC_P8, KC_P9, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_NUM, KC_TRNS,
+ KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_P0, KC_PDOT, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_RCTL,
+ KC_TRNS, KC_NO, KC_NO, KC_RSFT, KC_PENT, KC_LALT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_RGUI, KC_NO
+ ),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_ACL2, KC_ACL1, KC_ACL0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO, KC_SLEP, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_BTN1, KC_BTN2, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/handwired/dactyl_maximus/keymaps/via/keymap.c b/keyboards/handwired/dactyl_maximus/keymaps/via/keymap.c
new file mode 100644
index 000000000000..cfd95db563e5
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/keymaps/via/keymap.c
@@ -0,0 +1,52 @@
+// Copyright 2021 Duncan Sutherland (https://github.com/dunk2k)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#define CUT C(KC_X)
+#define COPY C(KC_C)
+#define PSTE C(KC_V)
+#define UNDO C(KC_Z)
+#define REDO C(KC_Y)
+#define SALL C(KC_A)
+#define APP_N A(KC_TAB)
+#define APP_P LSA(KC_TAB)
+#define SLFT S(KC_HOME)
+#define SRGHT S(KC_END)
+#define APP_X A(KC_F4)
+#define TSKMG RCS(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ APP_P, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PSCR, APP_N,
+ SLFT, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, SRGHT,
+ COPY, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, PSTE,
+ CUT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, SALL,
+ UNDO, KC_LCTL, KC_LALT, KC_LGUI, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_RGUI, KC_RALT, KC_RCTL, REDO,
+ KC_HOME, KC_PGUP, KC_VOLU, KC_END,
+ MO(1), KC_SPC, KC_DEL, KC_BSPC, KC_ENT, MO(2),
+ KC_UP, KC_DOWN, KC_PGDN, KC_VOLD, KC_LEFT, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, TSKMG, APP_X, KC_SCRL, KC_INS, KC_PAUS, KC_NO, KC_NO, KC_P7, KC_P8, KC_P9, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_NUM, KC_TRNS,
+ KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_P0, KC_PDOT, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_RCTL,
+ KC_TRNS, KC_NO, KC_NO, KC_RSFT, KC_PENT, KC_LALT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_RGUI, KC_NO
+ ),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_ACL2, KC_ACL1, KC_ACL0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO, KC_SLEP, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_BTN1, KC_BTN2, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/handwired/dactyl_maximus/keymaps/via/rules.mk b/keyboards/handwired/dactyl_maximus/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/handwired/dactyl_maximus/readme.md b/keyboards/handwired/dactyl_maximus/readme.md
new file mode 100644
index 000000000000..d4c2d44def65
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/readme.md
@@ -0,0 +1,34 @@
+# Dactyl Maximus
+
+![KeycapLess](https://i.imgur.com/OJs3bkWh.jpg)
+*Thanks to [unit-5370](https://github.com/unit-5370) for image*
+
+The largest [Dactyl](/keyboards/handwired/dactyl/) variation available from a Dactyl generator. This variation is electronically more similar to the [Dactyl (Pro Micro)](/keyboards/handwired/dactyl_promicro/) as it requires two micro controllers, one per half, instead of the *Dactyl's* original implementation of one microcontroller and an I/O expander.
+
+* Keyboard Maintainer: [Duncan Sutherland](https://github.com/dunk2k)
+* Hardware Supported: Pro Micro controller, of clone of
+* Case Files: [Dactyl Generator](https://ryanis.cool/dactyl/#original)
+
+'Keys' settings for *Dactyl Generator* link:
+* Number of Columns: 7
+* Use Number Row: true
+* Use Bottom Row: true
+* Thumb Key Count: 8
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/dactyl_maximus:default
+
+Flashing example for this keyboard:
+
+ make handwired/dactyl_maximus:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/handwired/dactyl_maximus/rules.mk b/keyboards/handwired/dactyl_maximus/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/handwired/dactyl_maximus/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/frenchdev/info.json b/keyboards/handwired/frenchdev/info.json
index d5981aebd471..a22b06d41716 100644
--- a/keyboards/handwired/frenchdev/info.json
+++ b/keyboards/handwired/frenchdev/info.json
@@ -116,15 +116,15 @@
{"matrix": [1, 0], "x": 18, "y": 5.9},
{"matrix": [0, 0], "x": 19, "y": 5.9},
- {"matrix": [8, 3], "x": 2.25, "y": 7.5, "w": 1.5, "h": 2},
- {"matrix": [8, 4], "x": 3.75, "y": 7.5, "w": 1.5, "h": 2},
+ {"matrix": [8, 3], "x": 2.25, "y": 7.5, "w": 1.75, "h": 2},
+ {"matrix": [8, 4], "x": 4, "y": 7.5, "w": 1.75, "h": 2},
- {"matrix": [8, 5], "x": 5.25, "y": 7.5, "w": 1.5, "h": 2},
+ {"matrix": [8, 5], "x": 5.75, "y": 7.5, "w": 1.75, "h": 2},
- {"matrix": [7, 3], "x": 13.25, "y": 7.5, "w": 1.5, "h": 2},
- {"matrix": [7, 4], "x": 14.75, "y": 7.5, "w": 1.5, "h": 2},
+ {"matrix": [7, 3], "x": 12.5, "y": 7.5, "w": 1.75, "h": 2},
+ {"matrix": [7, 4], "x": 14.25, "y": 7.5, "w": 1.75, "h": 2},
- {"matrix": [7, 5], "x": 16.25, "y": 7.5, "w": 1.5, "h": 2}
+ {"matrix": [7, 5], "x": 16, "y": 7.5, "w": 1.75, "h": 2}
]
}
}
diff --git a/keyboards/handwired/itstleo9/info.json b/keyboards/handwired/itstleo9/info.json
new file mode 100644
index 000000000000..ba9de4d774f3
--- /dev/null
+++ b/keyboards/handwired/itstleo9/info.json
@@ -0,0 +1,36 @@
+{
+ "manufacturer": "Its TLeo",
+ "keyboard_name": "ItsTleo9",
+ "maintainer": "Its TLeo",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0001",
+ "vid": "0x4954"
+ },
+ "community_layouts": ["ortho_3x3"],
+ "layouts": {
+ "LAYOUT_ortho_3x3": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/itstleo9/keymaps/default/keymap.c b/keyboards/handwired/itstleo9/keymaps/default/keymap.c
new file mode 100644
index 000000000000..ea111ba6fead
--- /dev/null
+++ b/keyboards/handwired/itstleo9/keymaps/default/keymap.c
@@ -0,0 +1,21 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┐
+ * │ A │ B │ C │
+ * ├───┼───┼───┤
+ * │ D │ E │ F │
+ * ├───┼───┼───┤
+ * │ G │ H │ I │
+ * └───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_3x3(
+ KC_A, KC_B, KC_C,
+ KC_D, KC_E, KC_F,
+ KC_G, KC_H, KC_I
+ )
+};
diff --git a/keyboards/handwired/itstleo9/keymaps/via/keymap.c b/keyboards/handwired/itstleo9/keymaps/via/keymap.c
new file mode 100644
index 000000000000..ea111ba6fead
--- /dev/null
+++ b/keyboards/handwired/itstleo9/keymaps/via/keymap.c
@@ -0,0 +1,21 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┐
+ * │ A │ B │ C │
+ * ├───┼───┼───┤
+ * │ D │ E │ F │
+ * ├───┼───┼───┤
+ * │ G │ H │ I │
+ * └───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_3x3(
+ KC_A, KC_B, KC_C,
+ KC_D, KC_E, KC_F,
+ KC_G, KC_H, KC_I
+ )
+};
diff --git a/keyboards/handwired/itstleo9/keymaps/via/rules.mk b/keyboards/handwired/itstleo9/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/handwired/itstleo9/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/handwired/itstleo9/promicro/info.json b/keyboards/handwired/itstleo9/promicro/info.json
new file mode 100644
index 000000000000..4cbc1050c0c7
--- /dev/null
+++ b/keyboards/handwired/itstleo9/promicro/info.json
@@ -0,0 +1,7 @@
+{
+ "development_board": "promicro",
+ "matrix_pins": {
+ "cols": ["D1", "D0", "D4"],
+ "rows": ["F4", "F5", "F6"]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/itstleo9/promicro/rules.mk b/keyboards/handwired/itstleo9/promicro/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/handwired/itstleo9/promicro/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/itstleo9/readme.md b/keyboards/handwired/itstleo9/readme.md
new file mode 100644
index 000000000000..233407b39317
--- /dev/null
+++ b/keyboards/handwired/itstleo9/readme.md
@@ -0,0 +1,37 @@
+# itstleo9
+
+Handwired 3x3 macropad built with Pro Micro compatible microcontrollers
+
+* Keyboard Maintainer: [ItsTLeo](https://github.com/ItsTLeo)
+* Hardware Supported: RP2040/ATmega32U4 Pro Micro
+* Hardware Availability: [RP2040](https://aliexpress.com/item/1005005616524430.html), [ATmega32U4](https://aliexpress.com/item/32888212119.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/itstleo9/promicro:default
+ make handwired/itstleo9/rp2040:default
+
+Flashing example for this keyboard:
+
+ make handwired/itstleo9/promicro:default:flash
+ make handwired/itstleo9/rp2040:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). Dont know how to make a handwire keyboard, check it out [SkottoKeebs handwire tutorial](https://www.youtube.com/watch?v=hjml-K-pV4E&pp=ygUTaGFuZHdpcmUgYSBtYWNyb3BhZA%3D%3D)
+
+## Matrix pin (RP2040 ver)
+
+* **cols** : GP10 , GP11 , GP12
+* **rows** : GP21 , GP20 , GP19
+
+## Matrix pin (Promicro ver)
+
+* **cols** : D1 , D0 , D4
+* **rows** : F4 , F5 , F6
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (top left key) and plug in the keyboard
+* **Physical reset button**: Double-press reset button
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/handwired/itstleo9/rp2040/info.json b/keyboards/handwired/itstleo9/rp2040/info.json
new file mode 100644
index 000000000000..0272150df124
--- /dev/null
+++ b/keyboards/handwired/itstleo9/rp2040/info.json
@@ -0,0 +1,9 @@
+{
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+
+ "matrix_pins": {
+ "cols": ["GP10", "GP11", "GP12"],
+ "rows": ["GP21", "GP20", "GP19"]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/itstleo9/rp2040/rules.mk b/keyboards/handwired/itstleo9/rp2040/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/handwired/itstleo9/rp2040/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/onekey/nucleo_g431rb/info.json b/keyboards/handwired/onekey/nucleo_g431rb/info.json
new file mode 100644
index 000000000000..4e5e3b1cba3e
--- /dev/null
+++ b/keyboards/handwired/onekey/nucleo_g431rb/info.json
@@ -0,0 +1,19 @@
+{
+ "keyboard_name": "Onekey Nucleo G431RB",
+ "processor": "STM32G431",
+ "bootloader": "stm32-dfu",
+ "matrix_pins": {
+ "cols": ["A9"],
+ "rows": ["A10"]
+ },
+ "backlight": {
+ "pin": "B8"
+ },
+ "ws2812": {
+ "pin": "A0"
+ },
+ "apa102": {
+ "data_pin": "A0",
+ "clock_pin": "B13"
+ }
+}
diff --git a/keyboards/handwired/onekey/nucleo_g431rb/readme.md b/keyboards/handwired/onekey/nucleo_g431rb/readme.md
new file mode 100644
index 000000000000..3b393e127680
--- /dev/null
+++ b/keyboards/handwired/onekey/nucleo_g431rb/readme.md
@@ -0,0 +1,7 @@
+# ST Microelectronics Nucleo64-G431RB onekey
+
+Supported Hardware:
+
+To trigger keypress, short together pins *A9* and *A10*.
+
+The usual USB connection to ST-Link will not work for QMK -- pins *A11* and *A12* need to be connected to *D-* and *D+* respectively.
diff --git a/keyboards/handwired/onekey/nucleo_g431rb/rules.mk b/keyboards/handwired/onekey/nucleo_g431rb/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/handwired/onekey/nucleo_g474re/info.json b/keyboards/handwired/onekey/nucleo_g474re/info.json
new file mode 100644
index 000000000000..02f59be74e9c
--- /dev/null
+++ b/keyboards/handwired/onekey/nucleo_g474re/info.json
@@ -0,0 +1,19 @@
+{
+ "keyboard_name": "Onekey Nucleo G474RE",
+ "processor": "STM32G474",
+ "bootloader": "stm32-dfu",
+ "matrix_pins": {
+ "cols": ["A9"],
+ "rows": ["A10"]
+ },
+ "backlight": {
+ "pin": "B8"
+ },
+ "ws2812": {
+ "pin": "A0"
+ },
+ "apa102": {
+ "data_pin": "A0",
+ "clock_pin": "B13"
+ }
+}
diff --git a/keyboards/handwired/onekey/nucleo_g474re/readme.md b/keyboards/handwired/onekey/nucleo_g474re/readme.md
new file mode 100644
index 000000000000..f6115b10c7da
--- /dev/null
+++ b/keyboards/handwired/onekey/nucleo_g474re/readme.md
@@ -0,0 +1,7 @@
+# ST Microelectronics Nucleo64-G474RE onekey
+
+Supported Hardware:
+
+To trigger keypress, short together pins *A9* and *A10*.
+
+The usual USB connection to ST-Link will not work for QMK -- pins *A11* and *A12* need to be connected to *D-* and *D+* respectively.
diff --git a/keyboards/handwired/onekey/nucleo_g474re/rules.mk b/keyboards/handwired/onekey/nucleo_g474re/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/handwired/pytest/macro/keymaps/default/keymap.json b/keyboards/handwired/pytest/macro/keymaps/default/keymap.json
index 23c371aa3434..3bef21a0b21a 100644
--- a/keyboards/handwired/pytest/macro/keymaps/default/keymap.json
+++ b/keyboards/handwired/pytest/macro/keymaps/default/keymap.json
@@ -1,5 +1,5 @@
{
- "keyboard": "handwired/pytest/basic",
+ "keyboard": "handwired/pytest/macro",
"keymap": "default_json",
"layout": "LAYOUT_ortho_1x1",
"layers": [["QK_MACRO_0"]],
diff --git a/keyboards/handwired/scottokeebs/scotto34/info.json b/keyboards/handwired/scottokeebs/scotto34/info.json
new file mode 100644
index 000000000000..6fcce38d709f
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto34/info.json
@@ -0,0 +1,74 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "Scotto34",
+ "maintainer": "joe-scotto",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP3", "GP2", "GP7", "GP8", "GP13", "GP16", "GP17", "GP18", "GP19", "GP20"],
+ "rows": ["GP0", "GP4", "GP9", "GP14"]
+ },
+ "processor": "RP2040",
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0013",
+ "vid": "0xFEED"
+ },
+ "community_layouts": ["split_3x5_2"],
+ "layouts": {
+ "LAYOUT_split_3x5_2": {
+ "layout": [
+ // Row 1
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+
+ // Row 2
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [1, 3], "x": 3, "y": 1 },
+ { "matrix": [1, 4], "x": 4, "y": 1 },
+ { "matrix": [1, 5], "x": 5, "y": 1 },
+ { "matrix": [1, 6], "x": 6, "y": 1 },
+ { "matrix": [1, 7], "x": 7, "y": 1 },
+ { "matrix": [1, 8], "x": 8, "y": 1 },
+ { "matrix": [1, 9], "x": 9, "y": 1 },
+
+ // Row 3
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [2, 3], "x": 3, "y": 2 },
+ { "matrix": [2, 4], "x": 4, "y": 2 },
+ { "matrix": [2, 5], "x": 5, "y": 2 },
+ { "matrix": [2, 6], "x": 6, "y": 2 },
+ { "matrix": [2, 7], "x": 7, "y": 2 },
+ { "matrix": [2, 8], "x": 8, "y": 2 },
+ { "matrix": [2, 9], "x": 9, "y": 2 },
+
+ // Row 4
+ { "matrix": [3, 3], "x": 3, "y": 3 },
+ { "matrix": [3, 4], "x": 4, "y": 3 },
+ { "matrix": [3, 5], "x": 5, "y": 3 },
+ { "matrix": [3, 6], "x": 6, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scotto34/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scotto34/keymaps/default/config.h
new file mode 100644
index 000000000000..572a1b24ead9
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto34/keymaps/default/config.h
@@ -0,0 +1,22 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
diff --git a/keyboards/handwired/scottokeebs/scotto34/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scotto34/keymaps/default/keymap.c
new file mode 100644
index 000000000000..8231ad94fc05
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto34/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x5_2(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_split_3x5_2(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_split_3x5_2(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_split_3x5_2(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scotto34/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scotto34/keymaps/scotto/config.h
new file mode 100644
index 000000000000..1a6512052c1d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto34/keymaps/scotto/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scotto34/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scotto34/keymaps/scotto/keymap.c
new file mode 100644
index 000000000000..f65f6aa17af9
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto34/keymaps/scotto/keymap.c
@@ -0,0 +1,196 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Tap dance declarations
+enum {
+ TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI,
+ TD_ESC_LCTL_LALT_WINDOWS_EMOJI
+};
+
+// Custom tapping term for multi function keys
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TD(TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI) :
+ case TD(TD_ESC_LCTL_LALT_WINDOWS_EMOJI) :
+ case LGUI_T(KC_SPC) :
+ case LT(1, KC_SPC) :
+ case LT(1, KC_TAB) :
+ case LT(2, KC_ENT) :
+ return 200;
+ default:
+ return TAPPING_TERM;
+ }
+};
+
+// Begin quad TD
+typedef enum {
+ TD_NONE,
+ TD_UNKNOWN,
+ TD_SINGLE_HOLD,
+ TD_DOUBLE_HOLD,
+ TD_TRIPLE_HOLD,
+ TD_SINGLE_TAP,
+ TD_DOUBLE_TAP,
+ TD_TRIPLE_TAP
+} td_state_t;
+
+typedef struct {
+ bool is_press_action;
+ td_state_t state;
+} td_tap_t;
+
+// Create an instance of 'td_tap_t' for the 'x' tap dance.
+static td_tap_t xtap_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+td_state_t cur_dance(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ return TD_SINGLE_TAP;
+ } else {
+ return TD_SINGLE_HOLD;
+ }
+ } else if (state->count == 2) {
+ if (state->interrupted || !state->pressed) {
+ return TD_DOUBLE_TAP;
+ } else {
+ return TD_DOUBLE_HOLD;
+ }
+ } else if (state->count == 3) {
+ if (state->interrupted || !state->pressed) {
+ return TD_TRIPLE_TAP;
+ } else {
+ return TD_TRIPLE_HOLD;
+ }
+ }
+
+ return TD_UNKNOWN;
+}
+
+void td_esc_lalt_lctl_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: tap_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
+ case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
+ default: break;
+ }
+}
+
+void td_esc_lalt_lctl_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ case TD_DOUBLE_HOLD: unregister_code(KC_LCTL); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_esc_lctl_lalt_windows_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: tap_code16(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
+ case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
+ default: break;
+ }
+}
+
+void td_esc_lctl_lalt_windows_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ case TD_DOUBLE_HOLD: unregister_code(KC_LALT); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+ // Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ [TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_esc_lalt_lctl_spotlight_emoji_finished, td_esc_lalt_lctl_spotlight_emoji_reset),
+ [TD_ESC_LCTL_LALT_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_esc_lctl_lalt_windows_emoji_finished, td_esc_lctl_lalt_windows_emoji_reset)
+};
+// For the x tap dance. Put it here so it can be used in any keymap
+void x_finished(tap_dance_state_t *state, void *user_data);
+void x_reset(tap_dance_state_t *state, void *user_data);
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x5_2(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI), LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_split_3x5_2(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_split_3x5_2(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_split_3x5_2(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(0), TO(5), TO(4),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [4] = LAYOUT_split_3x5_2(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_ESC_LCTL_LALT_WINDOWS_EMOJI), KC_SPC, LT(6, KC_TAB), LT(7, KC_ENT)
+ ),
+ [5] = LAYOUT_split_3x5_2(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, KC_SLSH,
+ KC_LCTL, KC_SPC, LT(6, KC_TAB), LT(7, KC_ENT)
+ ),
+ [6] = LAYOUT_split_3x5_2(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [7] = LAYOUT_split_3x5_2(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(8), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [8] = LAYOUT_split_3x5_2(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4), TO(5), TO(0),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scotto34/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scotto34/keymaps/scotto/rules.mk
new file mode 100644
index 000000000000..e5ddcae8d927
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto34/keymaps/scotto/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scotto34/readme.md b/keyboards/handwired/scottokeebs/scotto34/readme.md
new file mode 100644
index 000000000000..88e9185ec20c
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto34/readme.md
@@ -0,0 +1,29 @@
+# Scotto34
+
+![Scotto34](https://i.imgur.com/BkpEBQjh.jpg)
+
+A low-profile 34-key split monoblock ortholinear keyboard that uses 18x17mm spaced Choc switches and an exposed controller in the middle. Case files available [here](https://github.com/joe-scotto/scottokeebs).
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: RP2040
+* Hardware Availability: [Amazon](https://amazon.com)
+
+# Compiling
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/scottokeebs/scotto34:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scotto34:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scotto34/rules.mk b/keyboards/handwired/scottokeebs/scotto34/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/handwired/scottokeebs/scottoalp/info.json b/keyboards/handwired/scottokeebs/scottoalp/info.json
new file mode 100644
index 000000000000..d6262e11e64b
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/info.json
@@ -0,0 +1,76 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoAlp",
+ "maintainer": "joe-scotto",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ // 4, 5, 6, 7, 8, 9, A3, A2, A1, A0
+ "cols": ["D4", "C6", "D7", "E6", "B4", "B5", "F4", "F5", "F6", "F7"],
+
+ // 15, 14, 16, 10
+ "rows": ["B1", "B3", "B2", "B6"]
+ },
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0007",
+ "vid": "0x534B"
+ },
+ "layouts": {
+ "LAYOUT_ortho_3x10_5": {
+ "layout": [
+ // Row 1
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+
+ // Row 2
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [1, 3], "x": 3, "y": 1 },
+ { "matrix": [1, 4], "x": 4, "y": 1 },
+ { "matrix": [1, 5], "x": 5, "y": 1 },
+ { "matrix": [1, 6], "x": 6, "y": 1 },
+ { "matrix": [1, 7], "x": 7, "y": 1 },
+ { "matrix": [1, 8], "x": 8, "y": 1 },
+ { "matrix": [1, 9], "x": 9, "y": 1 },
+
+ // Row 3
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [2, 3], "x": 3, "y": 2 },
+ { "matrix": [2, 4], "x": 4, "y": 2 },
+ { "matrix": [2, 5], "x": 5, "y": 2 },
+ { "matrix": [2, 6], "x": 6, "y": 2 },
+ { "matrix": [2, 7], "x": 7, "y": 2 },
+ { "matrix": [2, 8], "x": 8, "y": 2 },
+ { "matrix": [2, 9], "x": 9, "y": 2 },
+
+ // Row 4
+ { "matrix": [3, 1], "x": 1, "y": 3 },
+ { "matrix": [3, 2], "x": 2, "y": 3 },
+ { "matrix": [3, 4], "x": 4, "y": 3 },
+ { "matrix": [3, 6], "x": 6, "y": 3 },
+ { "matrix": [3, 7], "x": 7, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/config.h
new file mode 100644
index 000000000000..1a6512052c1d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/keymap.c
new file mode 100644
index 000000000000..88b4a4b0b430
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x10_5(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LGUI, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_ortho_3x10_5(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_ortho_3x10_5(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_ortho_3x10_5(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/config.h
new file mode 100644
index 000000000000..1a6512052c1d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/keymap.c
new file mode 100644
index 000000000000..dfe688267e3f
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/keymap.c
@@ -0,0 +1,174 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Tap dance declarations
+enum {
+ TD_LCTL_ESC_SPOTLIGHT_EMOJI,
+ TD_LALT_ESC_WINDOWS_EMOJI
+};
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI) :
+ case TD(TD_LALT_ESC_WINDOWS_EMOJI) :
+ case LGUI_T(KC_SPC) :
+ case LT(1, KC_TAB) :
+ case LT(2, KC_ENT) :
+ return 200;
+ default:
+ return TAPPING_TERM;
+ }
+};
+
+// Begin quad TD
+typedef enum {
+ TD_NONE,
+ TD_UNKNOWN,
+ TD_SINGLE_HOLD,
+ TD_SINGLE_TAP,
+ TD_DOUBLE_TAP,
+ TD_TRIPLE_TAP
+} td_state_t;
+
+typedef struct {
+ bool is_press_action;
+ td_state_t state;
+} td_tap_t;
+
+// Create an instance of 'td_tap_t' for the 'x' tap dance.
+static td_tap_t xtap_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+td_state_t cur_dance(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ return TD_SINGLE_TAP;
+ } else {
+ return TD_SINGLE_HOLD;
+ }
+ } else if (state->count == 2) {
+ return TD_DOUBLE_TAP;
+ } else if (state->count == 3) {
+ return TD_TRIPLE_TAP;
+ }
+
+ return TD_UNKNOWN;
+}
+
+void td_lctl_esc_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
+ case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
+ default: break;
+ }
+}
+
+void td_lctl_esc_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_lalt_esc_windowr_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
+ case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
+ default: break;
+ }
+}
+
+void td_lalt_esc_windowr_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+ // Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ [TD_LCTL_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lctl_esc_spotlight_emoji_finished, td_lctl_esc_spotlight_emoji_reset),
+ [TD_LALT_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lalt_esc_windowr_emoji_finished, td_lalt_esc_windowr_emoji_reset),
+};
+// For the x tap dance. Put it here so it can be used in any keymap
+void x_finished(tap_dance_state_t *state, void *user_data);
+void x_reset(tap_dance_state_t *state, void *user_data);
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x10_5(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_ortho_3x10_5(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_ortho_3x10_5(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_ortho_3x10_5(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [4] = LAYOUT_ortho_3x10_5(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
+ ),
+ [5] = LAYOUT_ortho_3x10_5(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
+ ),
+ [6] = LAYOUT_ortho_3x10_5(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(7), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
+ ),
+ [7] = LAYOUT_ortho_3x10_5(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(0),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/rules.mk
new file mode 100644
index 000000000000..e5ddcae8d927
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scottoalp/readme.md b/keyboards/handwired/scottokeebs/scottoalp/readme.md
new file mode 100644
index 000000000000..07c7d889de78
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/readme.md
@@ -0,0 +1,27 @@
+# ScottoAlp
+
+![ScottoAlp](https://i.imgur.com/XKpYcMgh.jpeg)
+
+A 35-key ortholinear keyboard with a 3u spacebar and is compatible with both MX or Alps. Case files available [here](https://github.com/joe-scotto/scottokeebs).
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: ATmega32U4
+* Hardware Availability: [Amazon](https://amazon.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/jscotto/scottoalp:default
+
+Flashing example for this keyboard:
+
+ make handwired/jscotto/scottoalp:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoalp/rules.mk b/keyboards/handwired/scottokeebs/scottoalp/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scottocmd/config.h b/keyboards/handwired/scottokeebs/scottocmd/config.h
new file mode 100644
index 000000000000..a168f0ef218f
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// OLED
+#define OLED_DISPLAY_128X64
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottocmd/info.json b/keyboards/handwired/scottokeebs/scottocmd/info.json
new file mode 100644
index 000000000000..d945b70ce9cc
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/info.json
@@ -0,0 +1,89 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoCMD",
+ "maintainer": "joe-scotto",
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true
+ },
+ "build": {
+ "lto": true
+ },
+ "matrix_pins": {
+ // TX0, RX1, 4, 5, 6, 7, 8, 9, A3, A2, A1
+ "cols": ["D3", "D2", "D4", "C6", "D7", "E6", "B4", "B5", "F4", "F5", "F6"],
+ // A0, 15, 14, 16, 10
+ "rows": ["F7", "B1", "B3", "B2", "B6"]
+ },
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0005",
+ "vid": "0x534B"
+ },
+ "bootmagic": {
+ "matrix": [1, 0]
+ },
+ "layouts": {
+ "LAYOUT_ortho_4_3x10_4": {
+ "layout": [
+ // Row 1 (Macros)
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+
+ // Row 2
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+
+ // Row 3
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+
+ // Row 4
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3},
+ {"matrix": [3, 10], "x": 10, "y": 3},
+
+ // Row 5
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+ {"matrix": [4, 9], "x": 9, "y": 4},
+ {"matrix": [4, 10], "x": 10, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/config.h
new file mode 100644
index 000000000000..1a6512052c1d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/keymap.c
new file mode 100644
index 000000000000..dbb5cbc4a978
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4_3x10_4(
+ KC_LCTL, KC_2, KC_3, KC_ESC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_ENT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_ortho_4_3x10_4(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TAB, KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_ENT, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_ortho_4_3x10_4(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_ENT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_ortho_4_3x10_4(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_ENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/config.h
new file mode 100644
index 000000000000..1a6512052c1d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/keymap.c
new file mode 100644
index 000000000000..c196c3b1e908
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/keymap.c
@@ -0,0 +1,511 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+#include
+char wpm_str[10];
+
+// Tap Dance declarations
+enum {
+ TD_ESC_SPOTLIGHT_EMOJI,
+ TD_ESC_WINDOWS_EMOJI
+};
+
+void td_esc_spotlight_emoji (tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ tap_code(KC_ESC);
+ } else if (state->count == 2) {
+ tap_code16(G(KC_SPC));
+ } else if (state->count == 3) {
+ tap_code16(C(G(KC_SPC)));
+ }
+}
+
+void td_esc_windows_emoji (tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ tap_code(KC_ESC);
+ } else if (state->count == 2) {
+ tap_code(KC_LGUI);
+ } else if (state->count == 3) {
+ tap_code16(G(KC_DOT));
+ }
+};
+
+ // Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ [TD_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN(td_esc_spotlight_emoji),
+ [TD_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN(td_esc_windows_emoji)
+};
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TD(TD_ESC_SPOTLIGHT_EMOJI) :
+ case TD(TD_ESC_WINDOWS_EMOJI) :
+ case LGUI_T(KC_SPC) :
+ case LT(1, KC_TAB) :
+ case LT(2, KC_ENT) :
+ return 200;
+ default:
+ return TAPPING_TERM;
+ }
+};
+
+// Layer Names
+enum layer_names {
+ _MAC_DEFAULT,
+ _MAC_CODE,
+ _MAC_NUM,
+ _MAC_FUNC,
+ _WIN_DEFAULT,
+ _WIN_CODE,
+ _WIN_NUM,
+ _WIN_FUNC
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4_3x10_4(
+ KC_LCTL, KC_2, KC_3, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_ENT, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_ortho_4_3x10_4(
+ KC_LCTL, KC_2, KC_3, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ KC_TAB, KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_ENT, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_ortho_4_3x10_4(
+ KC_LCTL, KC_2, KC_3, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_ENT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_ortho_4_3x10_4(
+ KC_LCTL, KC_2, KC_3, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4),
+ KC_ENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
+ ),
+ [4] = LAYOUT_ortho_4_3x10_4(
+ KC_1, KC_2, KC_3, TD(TD_ESC_WINDOWS_EMOJI),
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_ENT, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
+ ),
+ [5] = LAYOUT_ortho_4_3x10_4(
+ KC_1, KC_2, KC_3, TD(TD_ESC_WINDOWS_EMOJI),
+ KC_TAB, KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_ENT, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS
+ ),
+ [6] = LAYOUT_ortho_4_3x10_4(
+ KC_1, KC_2, KC_3, TD(TD_ESC_WINDOWS_EMOJI),
+ KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_ENT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(7), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS
+ ),
+ [7] = LAYOUT_ortho_4_3x10_4(
+ KC_1, KC_2, KC_3, TD(TD_ESC_WINDOWS_EMOJI),
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(0),
+ KC_ENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS
+ )
+};
+
+// OLED
+#ifdef OLED_ENABLE
+// WPM responsiveness
+#define IDLE_FRAMES 5 // How many idle frames in animation
+#define IDLE_SPEED 20 // Speed at which animation idles
+#define TAP_FRAMES 2 // How many tapping frames
+#define TAP_SPEED 40 // WPM to trigger Bongo
+#define ANIMATION_FRAME_DURATION 200 // MS duration of each frame
+#define ANIMATION_SIZE 256 // Number of bytes per animation frame
+
+uint32_t anim_timer = 0;
+uint32_t anim_sleep = 0;
+uint8_t current_idle_frame = 0;
+uint8_t current_tap_frame = 0;
+
+static void render_animation(void) {
+ static const char PROGMEM idle[IDLE_FRAMES][ANIMATION_SIZE] = {
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02,
+ 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04,
+ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04,
+ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08,
+ 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22,
+ 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04,
+ 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22,
+ 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04,
+ 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04,
+ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ };
+ static const char PROGMEM prep[][ANIMATION_SIZE] = {
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04,
+ 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64,
+ 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03,
+ 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02,
+ 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02,
+ 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ };
+ static const char PROGMEM tap[TAP_FRAMES][ANIMATION_SIZE] = {
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04,
+ 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64,
+ 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02,
+ 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04,
+ 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c,
+ 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04,
+ 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04,
+ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03,
+ 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21,
+ 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02,
+ 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61,
+ 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00
+ }
+ };
+
+ void animation_phase(void) {
+ // Set cursor to draw from the bottom up
+ oled_set_cursor(128, 0);
+
+ if (get_current_wpm() <= IDLE_SPEED) {
+ current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
+ oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIMATION_SIZE);
+ }
+
+ // Start prep image
+ if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) {
+ oled_write_raw_P(prep[0], ANIMATION_SIZE);
+ }
+
+ // Start tap animation
+ if (get_current_wpm() >= TAP_SPEED) {
+ current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
+ oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIMATION_SIZE);
+ }
+ }
+ if (get_current_wpm() != 000) {
+ oled_on(); // Enables OLED on any alpha keypress
+
+ if (timer_elapsed32(anim_timer) > ANIMATION_FRAME_DURATION) {
+ anim_timer = timer_read32();
+ animation_phase();
+ }
+
+ anim_sleep = timer_read32();
+ } else {
+ if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) {
+ oled_off();
+ } else {
+ if (timer_elapsed32(anim_timer) > ANIMATION_FRAME_DURATION) {
+ anim_timer = timer_read32();
+ animation_phase();
+ }
+ }
+ }
+}
+
+// Draw to OLED
+bool oled_task_user(void) {
+ // Caps lock text
+ led_t led_state = host_keyboard_led_state();
+ oled_set_cursor(0,1);
+ oled_write_P(led_state.caps_lock ? PSTR(" Caps Lock "): PSTR(" ScottoCMD "), false);
+
+ //WPM text
+ oled_set_cursor(0, 9);
+ oled_write(get_u8_str(get_current_wpm(), '0'), false);
+ oled_write_P(PSTR(" WPM"), false);
+
+ static const char PROGMEM logos[][256] = {
+ // Apple
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x78, 0x7c, 0x3e, 0x1f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe,
+ 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0x0e, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x1f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f,
+ 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ },
+
+ // Windows
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
+ 0xf8, 0xf8, 0x00, 0x80, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xb8, 0x9f, 0x9f, 0x9f, 0x9f, 0x8f, 0x9f, 0x9f, 0x9f, 0x1f, 0x3f, 0x3f,
+ 0x07, 0xc0, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x03, 0xe0,
+ 0xfc, 0xfc, 0xf9, 0xf9, 0xf9, 0xf3, 0xf3, 0xf3, 0xfb, 0xfb, 0xf9, 0x19, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x07, 0x01, 0x00, 0x1e, 0x1f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ },
+
+ // Code
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xc0, 0xe0, 0xf0, 0x78, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0,
+ 0xf8, 0xfc, 0x3f, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x3c, 0x78, 0xf0, 0xe0, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x07, 0x0f, 0x3e, 0x3c, 0x38, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xfc, 0x7e, 0x1f, 0x07,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x3e, 0x0f, 0x07, 0x03, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+
+ // Number
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x1f,
+ 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x1e,
+ 0x1e, 0x1e, 0xbe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x1e, 0x1e, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x78, 0x78,
+ 0x78, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00,
+ 0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ },
+
+ // Function
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0,
+ 0xf8, 0xfc, 0xfe, 0xfe, 0xff, 0x9f, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0x8f, 0x3f,
+ 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf8, 0xfc, 0xfe, 0x7f, 0x3f, 0x0f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3e,
+ 0x1e, 0x0c, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ },
+
+ // Caps Lock
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
+ 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f, 0x3f, 0x3f, 0x7f, 0x7f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0xf8, 0xf0, 0xe0, 0xe0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ };
+
+ // Layer images
+ oled_set_cursor(32, 0);
+ switch (get_highest_layer(layer_state)) {
+ case _MAC_DEFAULT :
+ oled_write_raw_P(logos[0], sizeof(logos[0]));
+ break;
+ case _WIN_DEFAULT :
+ oled_write_raw_P(logos[1], sizeof(logos[1]));
+ break;
+ case _MAC_CODE :
+ case _WIN_CODE :
+ oled_write_raw_P(logos[2], sizeof(logos[2]));
+ break;
+ case _MAC_NUM :
+ case _WIN_NUM :
+ oled_write_raw_P(logos[3], sizeof(logos[3]));
+ break;
+ case _MAC_FUNC :
+ case _WIN_FUNC :
+ oled_write_raw_P(logos[4], sizeof(logos[4]));
+ break;
+ }
+
+ // Render Bongo Cat
+ render_animation();
+
+ return false;
+}
+#endif
diff --git a/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/rules.mk
new file mode 100644
index 000000000000..bcee933e75eb
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/keymaps/scotto/rules.mk
@@ -0,0 +1,2 @@
+WPM_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scottocmd/readme.md b/keyboards/handwired/scottokeebs/scottocmd/readme.md
new file mode 100644
index 000000000000..f5c5f3306c37
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/readme.md
@@ -0,0 +1,27 @@
+# ScottoCMD
+
+![ScottoCMD](https://i.imgur.com/rxiMZNnh.jpg)
+
+A 40-key ortholinear keyboard with a 6.25u spacebar, 4 dedicated function keys and 0.96" 128x64 OLED display. Case files available [here](https://github.com/joe-scotto/scottokeebs).
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: ATmega32U4, 0.96" 128x64 I2C OLED
+* Hardware Availability: [Amazon](https://amazon.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/scottokeebs/scottocmd:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scottocmd:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (1,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/handwired/scottokeebs/scottocmd/rules.mk b/keyboards/handwired/scottokeebs/scottocmd/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scottocmd/scottocmd.c b/keyboards/handwired/scottokeebs/scottocmd/scottocmd.c
new file mode 100644
index 000000000000..9027b500288e
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottocmd/scottocmd.c
@@ -0,0 +1,39 @@
+/*
+Copyright 2023 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ return OLED_ROTATION_90; // flips the display 180 degrees if offhand
+}
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+
+ // Default OLED code
+ led_t led_state = host_keyboard_led_state();
+ oled_set_cursor(0,7);
+ oled_write_P(led_state.caps_lock ? PSTR(" Caps Lock "): PSTR(" ScottoCMD "), false);
+
+ return false;
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoergo/info.json b/keyboards/handwired/scottokeebs/scottoergo/info.json
new file mode 100644
index 000000000000..cc4fb126b6e3
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoergo/info.json
@@ -0,0 +1,76 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoErgo",
+ "maintainer": "joe-scotto",
+ "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", "GP22", "GP21", "GP20", "GP19", "GP18"],
+ "rows": ["GP12", "GP13", "GP14", "GP15"]
+ },
+ "processor": "RP2040",
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0016",
+ "vid": "0xFEED"
+ },
+ "community_layouts": ["split_3x5_3"],
+ "layouts": {
+ "LAYOUT_split_3x5_3": {
+ "layout": [
+ // Row 1
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+
+ // Row 2
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [1, 3], "x": 3, "y": 1 },
+ { "matrix": [1, 4], "x": 4, "y": 1 },
+ { "matrix": [1, 5], "x": 5, "y": 1 },
+ { "matrix": [1, 6], "x": 6, "y": 1 },
+ { "matrix": [1, 7], "x": 7, "y": 1 },
+ { "matrix": [1, 8], "x": 8, "y": 1 },
+ { "matrix": [1, 9], "x": 9, "y": 1 },
+
+ // Row 3
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [2, 3], "x": 3, "y": 2 },
+ { "matrix": [2, 4], "x": 4, "y": 2 },
+ { "matrix": [2, 5], "x": 5, "y": 2 },
+ { "matrix": [2, 6], "x": 6, "y": 2 },
+ { "matrix": [2, 7], "x": 7, "y": 2 },
+ { "matrix": [2, 8], "x": 8, "y": 2 },
+ { "matrix": [2, 9], "x": 9, "y": 2 },
+
+ // Row 4
+ { "matrix": [3, 2], "x": 2, "y": 3 },
+ { "matrix": [3, 3], "x": 3, "y": 3 },
+ { "matrix": [3, 4], "x": 4, "y": 3 },
+ { "matrix": [3, 5], "x": 5, "y": 3 },
+ { "matrix": [3, 6], "x": 6, "y": 3 },
+ { "matrix": [3, 7], "x": 7, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scottoergo/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottoergo/keymaps/default/config.h
new file mode 100644
index 000000000000..1a6512052c1d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoergo/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottoergo/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottoergo/keymaps/default/keymap.c
new file mode 100644
index 000000000000..451f48a96870
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoergo/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2023 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x5_3(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LGUI, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), KC_ESC
+ ),
+ [1] = LAYOUT_split_3x5_3(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_split_3x5_3(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_split_3x5_3(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoergo/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scottoergo/keymaps/scotto/config.h
new file mode 100644
index 000000000000..1a6512052c1d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoergo/keymaps/scotto/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottoergo/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scottoergo/keymaps/scotto/keymap.c
new file mode 100644
index 000000000000..f4d0a0c7bba3
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoergo/keymaps/scotto/keymap.c
@@ -0,0 +1,174 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Tap dance declarations
+enum {
+ TD_LCTL_ESC_SPOTLIGHT_EMOJI,
+ TD_LALT_ESC_WINDOWS_EMOJI
+};
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI) :
+ case TD(TD_LALT_ESC_WINDOWS_EMOJI) :
+ case LGUI_T(KC_SPC) :
+ case LT(1, KC_TAB) :
+ case LT(2, KC_ENT) :
+ return 200;
+ default:
+ return TAPPING_TERM;
+ }
+};
+
+// Begin quad TD
+typedef enum {
+ TD_NONE,
+ TD_UNKNOWN,
+ TD_SINGLE_HOLD,
+ TD_SINGLE_TAP,
+ TD_DOUBLE_TAP,
+ TD_TRIPLE_TAP
+} td_state_t;
+
+typedef struct {
+ bool is_press_action;
+ td_state_t state;
+} td_tap_t;
+
+// Create an instance of 'td_tap_t' for the 'x' tap dance.
+static td_tap_t xtap_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+td_state_t cur_dance(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ return TD_SINGLE_TAP;
+ } else {
+ return TD_SINGLE_HOLD;
+ }
+ } else if (state->count == 2) {
+ return TD_DOUBLE_TAP;
+ } else if (state->count == 3) {
+ return TD_TRIPLE_TAP;
+ }
+
+ return TD_UNKNOWN;
+}
+
+void td_lctl_esc_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
+ case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
+ default: break;
+ }
+}
+
+void td_lctl_esc_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_lalt_esc_windowr_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
+ case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
+ default: break;
+ }
+}
+
+void td_lalt_esc_windowr_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+ // Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ [TD_LCTL_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lctl_esc_spotlight_emoji_finished, td_lctl_esc_spotlight_emoji_reset),
+ [TD_LALT_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lalt_esc_windowr_emoji_finished, td_lalt_esc_windowr_emoji_reset),
+};
+// For the x tap dance. Put it here so it can be used in any keymap
+void x_finished(tap_dance_state_t *state, void *user_data);
+void x_reset(tap_dance_state_t *state, void *user_data);
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x5_3(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [1] = LAYOUT_split_3x5_3(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [2] = LAYOUT_split_3x5_3(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [3] = LAYOUT_split_3x5_3(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [4] = LAYOUT_split_3x5_3(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT), TD(TD_LALT_ESC_WINDOWS_EMOJI)
+ ),
+ [5] = LAYOUT_split_3x5_3(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_LALT_ESC_WINDOWS_EMOJI)
+ ),
+ [6] = LAYOUT_split_3x5_3(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(7), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_LALT_ESC_WINDOWS_EMOJI)
+ ),
+ [7] = LAYOUT_split_3x5_3(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(0),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_LALT_ESC_WINDOWS_EMOJI)
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoergo/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scottoergo/keymaps/scotto/rules.mk
new file mode 100644
index 000000000000..e5ddcae8d927
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoergo/keymaps/scotto/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scottoergo/readme.md b/keyboards/handwired/scottokeebs/scottoergo/readme.md
new file mode 100644
index 000000000000..8bbf388304ad
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoergo/readme.md
@@ -0,0 +1,27 @@
+# ScottoErgo
+
+![ScottoErgo](https://i.imgur.com/FtdSJRBh.jpg)
+
+A 36-key column staggered ortholinear ergonomic keyboard with an exposed controller, aviator connector for USB, 10° of tilt, and 20° of angle. Case files available [here](https://github.com/joe-scotto/scottokeebs).
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: RP2040
+* Hardware Availability: [Amazon](https://amazon.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/scottokeebs/scottoergo:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scottoergo:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoergo/rules.mk b/keyboards/handwired/scottokeebs/scottoergo/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoergo/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scottoinvader/info.json b/keyboards/handwired/scottokeebs/scottoinvader/info.json
new file mode 100644
index 000000000000..89a4fca4b487
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoinvader/info.json
@@ -0,0 +1,78 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoInvader",
+ "maintainer": "joe-scotto",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ // 3, 4, 5, 6, 7, 8, 9, A3, A2, A1
+ "cols": ["D0", "D4", "C6", "D7", "E6", "B4", "B5", "F4", "F5", "F6"]
+
+ // 15, 14, 16, 10
+ "rows": ["B1", "B3", "B2", "B6"]
+ },
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0010",
+ "vid": "0xFEED"
+ },
+ "community_layouts": ["split_3x5_3"],
+ "layouts": {
+ "LAYOUT_split_3x5_3": {
+ "layout": [
+ // Row 1
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+
+ // Row 2
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [1, 3], "x": 3, "y": 1 },
+ { "matrix": [1, 4], "x": 4, "y": 1 },
+ { "matrix": [1, 5], "x": 5, "y": 1 },
+ { "matrix": [1, 6], "x": 6, "y": 1 },
+ { "matrix": [1, 7], "x": 7, "y": 1 },
+ { "matrix": [1, 8], "x": 8, "y": 1 },
+ { "matrix": [1, 9], "x": 9, "y": 1 },
+
+ // Row 3
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [2, 3], "x": 3, "y": 2 },
+ { "matrix": [2, 4], "x": 4, "y": 2 },
+ { "matrix": [2, 5], "x": 5, "y": 2 },
+ { "matrix": [2, 6], "x": 6, "y": 2 },
+ { "matrix": [2, 7], "x": 7, "y": 2 },
+ { "matrix": [2, 8], "x": 8, "y": 2 },
+ { "matrix": [2, 9], "x": 9, "y": 2 },
+
+ // Row 4
+ { "matrix": [3, 2], "x": 2, "y": 3 },
+ { "matrix": [3, 3], "x": 3, "y": 3 },
+ { "matrix": [3, 4], "x": 4, "y": 3 },
+ { "matrix": [3, 5], "x": 5, "y": 3 },
+ { "matrix": [3, 6], "x": 6, "y": 3 },
+ { "matrix": [3, 7], "x": 7, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scottoinvader/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottoinvader/keymaps/default/config.h
new file mode 100644
index 000000000000..1a6512052c1d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoinvader/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottoinvader/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottoinvader/keymaps/default/keymap.c
new file mode 100644
index 000000000000..2633845d509e
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoinvader/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x5_3(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_LGUI, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), KC_ESC
+ ),
+ [1] = LAYOUT_split_3x5_3(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_split_3x5_3(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_split_3x5_3(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoinvader/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scottoinvader/keymaps/scotto/config.h
new file mode 100644
index 000000000000..1a6512052c1d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoinvader/keymaps/scotto/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottoinvader/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scottoinvader/keymaps/scotto/keymap.c
new file mode 100644
index 000000000000..f4d0a0c7bba3
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoinvader/keymaps/scotto/keymap.c
@@ -0,0 +1,174 @@
+/*
+Copyright 2022 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Tap dance declarations
+enum {
+ TD_LCTL_ESC_SPOTLIGHT_EMOJI,
+ TD_LALT_ESC_WINDOWS_EMOJI
+};
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI) :
+ case TD(TD_LALT_ESC_WINDOWS_EMOJI) :
+ case LGUI_T(KC_SPC) :
+ case LT(1, KC_TAB) :
+ case LT(2, KC_ENT) :
+ return 200;
+ default:
+ return TAPPING_TERM;
+ }
+};
+
+// Begin quad TD
+typedef enum {
+ TD_NONE,
+ TD_UNKNOWN,
+ TD_SINGLE_HOLD,
+ TD_SINGLE_TAP,
+ TD_DOUBLE_TAP,
+ TD_TRIPLE_TAP
+} td_state_t;
+
+typedef struct {
+ bool is_press_action;
+ td_state_t state;
+} td_tap_t;
+
+// Create an instance of 'td_tap_t' for the 'x' tap dance.
+static td_tap_t xtap_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+td_state_t cur_dance(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ return TD_SINGLE_TAP;
+ } else {
+ return TD_SINGLE_HOLD;
+ }
+ } else if (state->count == 2) {
+ return TD_DOUBLE_TAP;
+ } else if (state->count == 3) {
+ return TD_TRIPLE_TAP;
+ }
+
+ return TD_UNKNOWN;
+}
+
+void td_lctl_esc_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
+ case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
+ default: break;
+ }
+}
+
+void td_lctl_esc_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_lalt_esc_windowr_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
+ case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
+ default: break;
+ }
+}
+
+void td_lalt_esc_windowr_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+ // Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ [TD_LCTL_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lctl_esc_spotlight_emoji_finished, td_lctl_esc_spotlight_emoji_reset),
+ [TD_LALT_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lalt_esc_windowr_emoji_finished, td_lalt_esc_windowr_emoji_reset),
+};
+// For the x tap dance. Put it here so it can be used in any keymap
+void x_finished(tap_dance_state_t *state, void *user_data);
+void x_reset(tap_dance_state_t *state, void *user_data);
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x5_3(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [1] = LAYOUT_split_3x5_3(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [2] = LAYOUT_split_3x5_3(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [3] = LAYOUT_split_3x5_3(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [4] = LAYOUT_split_3x5_3(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT), TD(TD_LALT_ESC_WINDOWS_EMOJI)
+ ),
+ [5] = LAYOUT_split_3x5_3(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_LALT_ESC_WINDOWS_EMOJI)
+ ),
+ [6] = LAYOUT_split_3x5_3(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(7), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_LALT_ESC_WINDOWS_EMOJI)
+ ),
+ [7] = LAYOUT_split_3x5_3(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(0),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_LALT_ESC_WINDOWS_EMOJI)
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoinvader/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scottoinvader/keymaps/scotto/rules.mk
new file mode 100644
index 000000000000..e5ddcae8d927
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoinvader/keymaps/scotto/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scottoinvader/readme.md b/keyboards/handwired/scottokeebs/scottoinvader/readme.md
new file mode 100644
index 000000000000..c04920498a86
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoinvader/readme.md
@@ -0,0 +1,27 @@
+# ScottoInvader
+
+![ScottoInvader](https://i.imgur.com/rXssnx7h.jpeg)
+
+A 36-key column-staggered ortholinear keyboard. Case files available [here](https://github.com/joe-scotto/scottokeebs).
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: ATmega32U4
+* Hardware Availability: [Amazon](https://amazon.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/scottokeebs/scottoinvader:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scottoinvader:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoinvader/rules.mk b/keyboards/handwired/scottokeebs/scottoinvader/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoinvader/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/t111/info.json b/keyboards/handwired/t111/info.json
index f4ecf44eabce..f25b0790988f 100644
--- a/keyboards/handwired/t111/info.json
+++ b/keyboards/handwired/t111/info.json
@@ -96,7 +96,7 @@
{"matrix": [2, 10], "x": 10.75, "y": 3.5},
{"matrix": [3, 10], "x": 11.75, "y": 3.5},
{"matrix": [4, 10], "x": 12.75, "y": 3.5},
- {"matrix": [5, 10], "x": 13.75, "y": 2.5, "w": 1.5, "h": 2},
+ {"matrix": [5, 10], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
{"matrix": [6, 10], "x": 15.5, "y": 3.5},
{"matrix": [7, 10], "x": 16.5, "y": 3.5},
diff --git a/keyboards/handwired/tsubasa/info.json b/keyboards/handwired/tsubasa/info.json
index 351731a6139d..1c374f3b08ca 100644
--- a/keyboards/handwired/tsubasa/info.json
+++ b/keyboards/handwired/tsubasa/info.json
@@ -59,21 +59,21 @@
{"matrix": [6, 3], "x": 12, "y": 1},
{"matrix": [6, 4], "x": 13, "y": 1},
{"matrix": [6, 5], "x": 14, "y": 1},
+ {"matrix": [8, 5], "x": 15, "y": 1},
- {"matrix": [8, 5], "x": 0.25, "y": 2},
- {"matrix": [2, 0], "x": 1.25, "y": 2},
- {"matrix": [2, 1], "x": 2.25, "y": 2},
- {"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, 0], "x": 0.25, "y": 2},
+ {"matrix": [2, 1], "x": 1.25, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2},
+ {"matrix": [2, 3], "x": 3.25, "y": 2},
+ {"matrix": [2, 4], "x": 4.25, "y": 2},
+ {"matrix": [2, 5], "x": 5.25, "y": 2},
- {"matrix": [2, 5], "x": 9.25, "y": 2},
- {"matrix": [7, 0], "x": 10.25, "y": 2},
- {"matrix": [7, 1], "x": 11.25, "y": 2},
- {"matrix": [7, 2], "x": 12.25, "y": 2},
- {"matrix": [7, 3], "x": 13.25, "y": 2},
- {"matrix": [7, 4], "x": 14.25, "y": 2},
- {"matrix": [7, 5], "x": 15, "y": 1},
+ {"matrix": [7, 0], "x": 9.25, "y": 2},
+ {"matrix": [7, 1], "x": 10.25, "y": 2},
+ {"matrix": [7, 2], "x": 11.25, "y": 2},
+ {"matrix": [7, 3], "x": 12.25, "y": 2},
+ {"matrix": [7, 4], "x": 13.25, "y": 2},
+ {"matrix": [7, 5], "x": 14.25, "y": 2},
{"matrix": [3, 0], "x": 0.75, "y": 3},
{"matrix": [3, 1], "x": 1.75, "y": 3},
diff --git a/keyboards/hazel/bad_wings/keymaps/miketronic/config.h b/keyboards/hazel/bad_wings/keymaps/miketronic/config.h
new file mode 100644
index 000000000000..1f5c059c0049
--- /dev/null
+++ b/keyboards/hazel/bad_wings/keymaps/miketronic/config.h
@@ -0,0 +1,16 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+
+# define TAPPING_TERM 160
+# define TAPPING_TERM_PER_KEY
+# define HOLD_ON_OTHER_KEY_PRESS
+# define QUICK_TAP_TERM TAPPING_TERM / 2
+# define QUICK_TAP_TERM_PER_KEY
+
+# define CIRQUE_PINNACLE_TAP_ENABLE
+# define CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE
+# define CIRQUE_PINNACLE_ATTENUATION_4X
+# define CIRQUE_PINNACLE_POSITION_MODE CIRQUE_PINNACLE_RELATIVE_MODE
+//# define CIRQUE_DEVICE_GESTURES_SCROLL_ENABLE
diff --git a/keyboards/hazel/bad_wings/keymaps/miketronic/keymap.c b/keyboards/hazel/bad_wings/keymaps/miketronic/keymap.c
new file mode 100644
index 000000000000..3ebcc79fded7
--- /dev/null
+++ b/keyboards/hazel/bad_wings/keymaps/miketronic/keymap.c
@@ -0,0 +1,258 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+
+
+/*
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, 1, 2, 3);
+}
+
+
+ [0] = LAYOUT_split_3x5_3(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, \
+ KC_Z, LGUI_T(KC_X), LALT_T(KC_C), KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \
+ KC_LCTL, OSL(1), OSM(MOD_LSFT), KC_SPC, LT(2, KC_BSPC), KC_ENT
+ ),
+ [1] = LAYOUT_split_3x5_3(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RBRC, KC_RCBR, KC_RPRN, KC_RABK, KC_NO, \
+ KC_GRV, KC_TILD, KC_UNDS, KC_EQL, KC_NO, KC_LBRC, KC_LCBR, KC_LPRN, KC_LABK, KC_BACKSLASH, \
+ KC_NO, KC_NO, KC_PLUS, KC_MINS, KC_NO, KC_NO, KC_NO, KC_COLN, KC_DOT, KC_SCLN, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_split_3x5_3(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_PIPE, KC_NO, \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DOT, KC_NO, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_split_3x5_3(
+ KC_ESC, KC_F1, KC_F4, KC_F7, KC_F10, KC_NO, KC_HOME, KC_UP, KC_END, KC_BSPC, \
+ KC_TAB, KC_F2, KC_F5, KC_F8, KC_F11, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT, \
+ KC_NO, KC_F3, KC_F6, KC_F9, KC_F12, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+*/
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* WORKMAN
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ Q │ D │ R │ W │ B │ │ J │ F │ U │ P │ BSPC│
+ * │ ESC │ │ │ │ SYM │ │ SYM │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ A │ S │ H ┃ T ┃ G │ │ Y ┃ N ┃ E │ O │ I │
+ * │SHIFT│ │ ┃ EX ┃ │ │ ┃ ┃ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ Z │ X │ M │ C │ V │ │ K │ L │ SPC │ SPC │ENTER│
+ * │ FN │ CTRL│ OS │ ALT │LOWER│ │RAISE│ │ , │ . │ │
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_WM] = LAYOUT_split_3x5_3_wrapper (
+ _____________WORKMAN_310_001_L_____________, _____________WORKMAN_310_001_R_____________,
+ _____________WORKMAN_310_002_L_____________, _____________WORKMAN_310_002_R_____________,
+ _____________WORKMAN_310_003_L_____________, _____________WORKMAN_310_003_R_____________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+ [_QW] = LAYOUT_split_3x5_3_wrapper (
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+
+
+ /* LOWER
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ () │ [] │ /\ │ │ │ │ │ 7 │ 8 │ 9 │ │
+ * │ │ <> │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ @ # │ & % │ ┃ ┃ │ │ . ┃ 4 ┃ 5 │ 6 │ UP │
+ * │ │ │ ┃ ┃ │ │ENTER┃ ┃ │ │RIGHT│
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ 0 │ 1 │ 2 │ 3 │ DOWN│
+ * │ │ │ │ │LOWER│ │ │ │ 0 │ │ LEFT│
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_LOWER] = LAYOUT_split_3x5_3_wrapper (
+ _______________LOWER_310_L1________________, _______________LOWER_310_R1________________,
+ _______________LOWER_310_L2________________, _______________LOWER_310_R2________________,
+ _______________LOWER_310_L3________________, _______________LOWER_310_R3________________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+
+
+ /* RAISE
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ BOOT│DEBUG│ │ │ MAKE│ │ │ F7 │ F8 │ F9 │ F10 │
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ │ RGB │ RGB ┃ RGB ┃ RGB │ │ _ ┃ F4 ┃ F5 │ F6 │ F11 │
+ * │ │ TOG │ MOD ┃ HUI ┃ HUD │ │ - ┃ ┃ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ │ RGB │ RGB │ RGB │ RGB │ │ │ F1 │ F2 │ F3 │ F12 │
+ * │ │ SAI │ SAD │ VAI │ VAD │ │RAISE│ │ │ │ │
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_RAISE] = LAYOUT_split_3x5_3_wrapper (
+ _______________RAISE_310_L1________________, _______________RAISE_310_R1________________,
+ _______________RAISE_310_L2________________, _______________RAISE_310_R2________________,
+ _______________RAISE_310_L3________________, _______________RAISE_310_R3________________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+
+
+ /* EXTRAS
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ ! │ │ │ │ │ │ │ /\ | () | [] | ; │
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ │ │ ┃EXTRA┃ │ │ ┃ @ # ┃ & % | │ ' │
+ * │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ , │ . │ ? │
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_EX] = LAYOUT_split_3x5_3_wrapper (
+ ______________EXTRAS_310_L1________________, ______________EXTRAS_310_R1________________,
+ ______________EXTRAS_310_L2________________, ______________EXTRAS_310_R2________________,
+ ______________EXTRAS_310_L3________________, ______________EXTRAS_310_R3________________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+
+
+ /* FUNCTION
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │COPY │CLIP │ SS │ │ │ │ │ /\ │ UP │ │ DEL │
+ * │PASTE│ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ TAB │ M05 │ M06 ┃ M07 ┃ M08 │ │ ┃ LEFT┃ DOWN│RIGHT│ UP │
+ * │ │ │ ┃ ┃ │ │ ┃ ┃ │ │RIGHT│
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ │ M01 │ M02 │ M03 │ M04 │ │ │ │ , │ . │DOWN │
+ * │ FN │ │ │ │ │ │ │ │ │ │LEFT │
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_FN] = LAYOUT_split_3x5_3_wrapper (
+ _____________FUNCTION_310_L1_______________, _____________FUNCTION_310_R1_______________,
+ _____________FUNCTION_310_L2_______________, _____________FUNCTION_310_R2_______________,
+ _____________FUNCTION_310_L3_______________, _____________FUNCTION_310_R3_______________,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+
+
+ /* SYMBOLS
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ $ │ ^ │ < │ > │ │ │ │ | │ [ │ ] │ - │
+ * │ │ │ │ │ SYMB│ │ SYMB│ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ % │ : │ ; ┃ + ┃ = │ │ ┃ ┃ ( │ ) │ _ │
+ * │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ & │ ' │ " │ * │ # │ │ ! │ ? │ / │ \ │ @ │
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┘
+ * │OSM │SPACE│LOWER│ │RAISE│ENTER│COPY │
+ * │SHIFT│ │ │ │ │ │PASTE│
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+*/
+ [_SYMB] = LAYOUT_split_3x5_3_wrapper (
+ KC_DLR, KC_CIRC, KC_LABK, KC_RABK, XXXX, XXXX, KC_PIPE, KC_LBRC, KC_RBRC, KC_MINS,
+ KC_PERC, KC_COLN, KC_SCLN, KC_PLUS, KC_EQL, XXXX, XXXX, KC_LPRN, KC_RPRN, KC_UNDS,
+ KC_AMPR, KC_QUOT, KC_DQUO, KC_ASTR, KC_HASH, KC_EXLM, KC_QUES, KC_SLSH, KC_BSLS, KC_AT,
+ _________3KEY_LEFT___________, _________3KEY_RIGHT__________
+ ),
+
+};
+
+
+bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_A):
+ // Do not force the mod-tap key press to be handled as a modifier
+ // if any other key was pressed while the mod-tap key is held down.
+ return false;
+ case TEX:
+ return false;
+ case CTRLX:
+ return false;
+ case FNZ:
+ return false;
+ case MGUI:
+ return false;
+ case VLOWER:
+ return false;
+ case KRAISE:
+ return false;
+ default:
+ // Force the dual-role key press to be handled as a modifier if any
+ // other key was pressed while the mod-tap key is held down.
+ return true;
+ }
+}
+
+
+#ifdef AUDIO_ENABLE
+float leader_start_song[][2] = SONG(ONE_UP_SOUND);
+float leader_succeed_song[][2] = SONG(ALL_STAR);
+float leader_fail_song[][2] = SONG(RICK_ROLL);
+#endif
+
+void matrix_scan_user(void);
+
+void leader_start_user(void) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(leader_start_song);
+#endif
+}
+
+bool did_leader_succeed;
+
+void leader_end_user(void) {
+ did_leader_succeed = false;
+
+ if (leader_sequence_one_key(KC_E)) {
+ SEND_STRING(SS_LCTL(SS_LSFT("t")));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_E, KC_D)) {
+ SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_A, KC_T)) {
+ SEND_STRING("@guidehouse.com");
+ did_leader_succeed = true;
+ }
+
+
+#ifdef AUDIO_ENABLE
+ if (did_leader_succeed) {
+ PLAY_SONG(leader_succeed_song);
+ } else {
+ PLAY_SONG(leader_fail_song);
+ }
+#endif
+}
+
diff --git a/keyboards/hazel/bad_wings/keymaps/miketronic/rules.mk b/keyboards/hazel/bad_wings/keymaps/miketronic/rules.mk
new file mode 100644
index 000000000000..72c338c1574c
--- /dev/null
+++ b/keyboards/hazel/bad_wings/keymaps/miketronic/rules.mk
@@ -0,0 +1,31 @@
+# Common feature for all keyboards
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+EXTRAKEY_ENABLE = yes # Audio control and System control
+TAP_DANCE_ENABLE = yes # Tap Dance keys
+NKRO_ENABLE = yes # Enable N-Key Rollover
+MACROS_ENABLED = yes
+
+# Keyboard specific
+MOUSEKEY_ENABLE = yes # Mouse keys
+CAPS_WORD_ENABLE = yes
+KEY_OVERRIDE_ENABLE = yes
+LEADER_ENABLE = yes
+
+
+ LTO_ENABLE = no # Enabled this causes longer build time, but smaller file.
+ AUTO_SHIFT_ENABLE = no
+ UNICODE_ENABLE = no # Unicode
+ CONSOLE_ENABLE = no # Console for debug
+ COMMAND_ENABLE = no # Commands for debug and configuration
+ RGBLIGHT_ENABLE = no
+ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend (it uses the same timer as BACKLIGHT_ENABLE)
+ AUDIO_ENABLE = no # Audio output on port C6
+ MIDI_ENABLE = no # MIDI support
+ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+ GRAVE_ESC_ENABLE = no
+ SPACE_CADET_ENABLE = no
+ COMBO_ENABLE = no
+ OLED_ENABLE = no
+ ENCODER_ENABLE = no
+ ENCODER_MAP_ENABLE = no
diff --git a/keyboards/helix/rev3_4rows/config.h b/keyboards/helix/rev3_4rows/config.h
index 2eda425a4f13..214bd1194169 100644
--- a/keyboards/helix/rev3_4rows/config.h
+++ b/keyboards/helix/rev3_4rows/config.h
@@ -17,8 +17,6 @@ along with this program. If not, see .
#pragma once
-#include
-
/* key matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 7
diff --git a/keyboards/helix/rev3_4rows/keymaps/default/oled_display.c b/keyboards/helix/rev3_4rows/keymaps/default/oled_display.c
index e951f627c838..ee5277a7df9f 100644
--- a/keyboards/helix/rev3_4rows/keymaps/default/oled_display.c
+++ b/keyboards/helix/rev3_4rows/keymaps/default/oled_display.c
@@ -16,6 +16,8 @@
#include QMK_KEYBOARD_H
+#include
+
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_QWERTY = 0,
diff --git a/keyboards/helix/rev3_4rows/keymaps/via/oled_display.c b/keyboards/helix/rev3_4rows/keymaps/via/oled_display.c
index e951f627c838..ee5277a7df9f 100644
--- a/keyboards/helix/rev3_4rows/keymaps/via/oled_display.c
+++ b/keyboards/helix/rev3_4rows/keymaps/via/oled_display.c
@@ -16,6 +16,8 @@
#include QMK_KEYBOARD_H
+#include
+
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_QWERTY = 0,
diff --git a/keyboards/helix/rev3_5rows/config.h b/keyboards/helix/rev3_5rows/config.h
index bd09cc60abef..7e11a93fd2bc 100644
--- a/keyboards/helix/rev3_5rows/config.h
+++ b/keyboards/helix/rev3_5rows/config.h
@@ -17,8 +17,6 @@ along with this program. If not, see .
#pragma once
-#include
-
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 7
diff --git a/keyboards/helix/rev3_5rows/keymaps/default/oled_display.c b/keyboards/helix/rev3_5rows/keymaps/default/oled_display.c
index e951f627c838..ee5277a7df9f 100644
--- a/keyboards/helix/rev3_5rows/keymaps/default/oled_display.c
+++ b/keyboards/helix/rev3_5rows/keymaps/default/oled_display.c
@@ -16,6 +16,8 @@
#include QMK_KEYBOARD_H
+#include
+
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_QWERTY = 0,
diff --git a/keyboards/helix/rev3_5rows/keymaps/via/oled_display.c b/keyboards/helix/rev3_5rows/keymaps/via/oled_display.c
index e951f627c838..ee5277a7df9f 100644
--- a/keyboards/helix/rev3_5rows/keymaps/via/oled_display.c
+++ b/keyboards/helix/rev3_5rows/keymaps/via/oled_display.c
@@ -16,6 +16,8 @@
#include QMK_KEYBOARD_H
+#include
+
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_QWERTY = 0,
diff --git a/keyboards/hfdkb/keyboard_sw/k83/info.json b/keyboards/hfdkb/keyboard_sw/k83/info.json
index 559fa3d790ef..b31fd86f1f88 100644
--- a/keyboards/hfdkb/keyboard_sw/k83/info.json
+++ b/keyboards/hfdkb/keyboard_sw/k83/info.json
@@ -28,22 +28,22 @@
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 2, "y": 0},
- {"matrix": [0, 2], "x": 3, "y": 0},
- {"matrix": [0, 3], "x": 4, "y": 0},
- {"matrix": [0, 4], "x": 5, "y": 0},
+ {"matrix": [0, 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": 6.5, "y": 0},
- {"matrix": [0, 6], "x": 7.5, "y": 0},
- {"matrix": [0, 7], "x": 8.5, "y": 0},
- {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [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": 11, "y": 0},
- {"matrix": [0, 10], "x": 12, "y": 0},
- {"matrix": [0, 11], "x": 13, "y": 0},
- {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 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": 15.25, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
{"matrix": [0, 15], "x": 15.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.25},
@@ -59,7 +59,7 @@
{"matrix": [1, 10], "x": 10, "y": 1.25},
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
- {"matrix": [1, 13], "x": 14, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"matrix": [1, 15], "x": 15.25, "y": 1.25},
@@ -92,11 +92,11 @@
{"matrix": [3, 9], "x": 9.75, "y": 3.25},
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
- {"matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
- {"matrix": [3, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [3, 15], "x": 15.25, "y": 3.25},
- {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [4, 1], "x": 2.25, "y": 4.25},
{"matrix": [4, 2], "x": 3.25, "y": 4.25},
{"matrix": [4, 3], "x": 4.25, "y": 4.25},
@@ -109,20 +109,21 @@
{"matrix": [4, 10], "x": 11.25, "y": 4.25},
{"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 1.75},
- {"matrix": [4, 14], "x": 16.25, "y": 4.25},
- {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [4, 14], "x": 14.125, "y": 4.375},
+
+ {"matrix": [4, 15], "x": 15.25, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 5], "x": 3.75, "y": 5.25, "w": 6.25},
- {"matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
- {"matrix": [5, 10], "x": 12.5, "y": 5.25, "w": 1.25},
- {"matrix": [5, 11], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 9], "x": 10, "y": 5.25},
+ {"matrix": [5, 10], "x": 11, "y": 5.25},
+ {"matrix": [5, 11], "x": 12, "y": 5.25},
- {"matrix": [5, 13], "x": 15.25, "y": 5.25},
- {"matrix": [5, 14], "x": 16.25, "y": 5.25},
- {"matrix": [5, 15], "x": 17.25, "y": 5.25}
+ {"matrix": [5, 13], "x": 13.125, "y": 5.375},
+ {"matrix": [5, 14], "x": 14.125, "y": 5.375},
+ {"matrix": [5, 15], "x": 15.125, "y": 5.375}
]
}
}
diff --git a/keyboards/holyswitch/lightweight65/info.json b/keyboards/holyswitch/lightweight65/info.json
index 438fb5fe8975..a6252d27b5e7 100644
--- a/keyboards/holyswitch/lightweight65/info.json
+++ b/keyboards/holyswitch/lightweight65/info.json
@@ -23,8 +23,14 @@
"command": false,
"nkro": true,
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_65_ansi_blocker"
+ },
+ "community_layouts": [
+ "65_ansi_blocker"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_65_ansi_blocker": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c b/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c
index bac1c8d4bcac..a5e4a91ea81a 100644
--- a/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c
+++ b/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c
@@ -17,14 +17,14 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_65_ansi_blocker(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_65_ansi_blocker(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c b/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c
index bac1c8d4bcac..a5e4a91ea81a 100644
--- a/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c
+++ b/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c
@@ -17,14 +17,14 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_65_ansi_blocker(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_65_ansi_blocker(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/igloo/info.json b/keyboards/igloo/info.json
index 1f50a72c5f8b..6e0cba498bb9 100644
--- a/keyboards/igloo/info.json
+++ b/keyboards/igloo/info.json
@@ -41,12 +41,13 @@
{"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.25, "y": 0},
- {"matrix": [0, 15], "x": 16.25, "y": 0},
- {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
- {"matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
+ {"matrix": [0, 14], "x": 15.5, "y": 0},
+ {"matrix": [0, 15], "x": 16.5, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "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},
@@ -59,12 +60,13 @@
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
- {"matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1},
- {"matrix": [1, 14], "x": 15.25, "y": 1},
- {"matrix": [1, 15], "x": 16.25, "y": 1},
- {"matrix": [1, 16], "x": 17.25, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [1, 14], "x": 15.5, "y": 1},
+ {"matrix": [1, 15], "x": 16.5, "y": 1},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
- {"matrix": [2, 0], "w": 1.75, "x": 0, "y": 2},
+ {"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},
@@ -76,12 +78,13 @@
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
- {"matrix": [2, 12], "w": 2.25, "x": 12.75, "y": 2},
- {"matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2},
- {"matrix": [2, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [2, 13], "x": 20.5, "y": 1, "w": 1.25, "h":2},
+ {"matrix": [2, 14], "x": 19.5, "y": 2},
{"matrix": [2, 15], "x": 13, "y": 0},
- {"matrix": [3, 0], "w": 2.25, "x": 0, "y": 3},
+ {"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},
@@ -93,22 +96,24 @@
{"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},
- {"matrix": [3, 14], "x": 13.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": 16.25, "y": 3},
- {"matrix": [4, 0], "w": 1.25, "x": 0, "y": 4},
- {"matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4},
- {"matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4},
- {"matrix": [4, 3], "x": 6.25, "y": 4},
- {"matrix": [4, 4], "w": 2.25, "x": 4, "y": 4},
- {"matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4},
- {"matrix": [4, 6], "w": 2.25, "x": 7.25, "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, 11], "w": 1.25, "x": 12.5, "y": 4},
- {"matrix": [4, 12], "w": 1.25, "x": 13.75, "y": 4},
- {"matrix": [4, 13], "w": 1.25, "x": 15, "y": 4},
+ {"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, 3], "x": 6.25, "y": 5},
+ {"matrix": [4, 4], "x": 4, "y": 5, "w": 2.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 6], "x": 7.25, "y": 5, "w": 2.25},
+ {"matrix": [4, 9], "x": 10, "y": 4},
+ {"matrix": [4, 10], "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12, "y": 4},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+
{"matrix": [4, 14], "x": 15.25, "y": 4},
{"matrix": [4, 15], "x": 16.25, "y": 4},
{"matrix": [4, 16], "x": 17.25, "y": 4}
diff --git a/keyboards/igloo/matrix_diagram.md b/keyboards/igloo/matrix_diagram.md
new file mode 100644
index 000000000000..2308f15c06d0
--- /dev/null
+++ b/keyboards/igloo/matrix_diagram.md
@@ -0,0 +1,36 @@
+# Matrix Diagram for Dong Jae Shin Igloo
+
+
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │2F │0D ││0E │0F │0G │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D ││1E │1F │1G │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘ ┌──┴┐2D │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │ │2E │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3E │ │3F │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
+│40 │41 │42 │47 │49 │4A │4B │4D ││4E │4F │4G │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌────────┐ ┌──────────┐
+│30 │ 2.25u LShift 2.75u RShift │3C │
+└────────┘ └──────────┘
+┌─────┬───┬─────┬───────────┬───┬───────────┬─────┬───┬─────┐
+│40 │41 │42 │45 │44 │46 │4A │4B │4D │ Tsangan/WKL Split Space
+└─────┴───┴─────┴───────────┴───┴───────────┴─────┴───┴─────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │44 │4A │4B │4D │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/inland/mk47/config.h b/keyboards/inland/mk47/config.h
new file mode 100644
index 000000000000..678686555ab9
--- /dev/null
+++ b/keyboards/inland/mk47/config.h
@@ -0,0 +1,40 @@
+/* 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
+
+/* 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 EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
+#define WEAR_LEVELING_BACKING_SIZE (4 * 1024)
+
+/* I2C Config for LED Driver */
+#define DRIVER_COUNT 1
+#define DRIVER_ADDR_1 0b1110100
+/* WB32 MCU has no default definition */
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000
+
+#define RGB_MATRIX_LED_COUNT 47
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+
diff --git a/keyboards/inland/mk47/halconf.h b/keyboards/inland/mk47/halconf.h
new file mode 100644
index 000000000000..55bfe5c97794
--- /dev/null
+++ b/keyboards/inland/mk47/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/inland/mk47/info.json b/keyboards/inland/mk47/info.json
new file mode 100644
index 000000000000..f88003b27f7f
--- /dev/null
+++ b/keyboards/inland/mk47/info.json
@@ -0,0 +1,159 @@
+{
+ "keyboard_name": "MK47",
+ "manufacturer": "Inland",
+ "maintainer": "jonylee@hfd",
+ "url":"",
+ "usb": {
+ "vid": "0xFFFE",
+ "pid": "0x0002",
+ "device_version": "0.0.1",
+ "force_nkro": true,
+ "suspend_wakeup_delay": 1000
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C1","C2","C3","A0","A1","A2","A3","A4","A5","A6","A7","C4"],
+ "rows": ["C6", "C7", "C8", "C9"]
+ },
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "max_brightness": 200,
+ "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,
+ "multisplash": true
+ },
+ "layout": [
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 0 },
+ { "flags": 4, "matrix": [0, 1], "x": 20, "y": 0 },
+ { "flags": 4, "matrix": [0, 2], "x": 41, "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": 102, "y": 0 },
+ { "flags": 4, "matrix": [0, 6], "x": 122, "y": 0 },
+ { "flags": 4, "matrix": [0, 7], "x": 143, "y": 0 },
+ { "flags": 4, "matrix": [0, 8], "x": 163, "y": 0 },
+ { "flags": 4, "matrix": [0, 9], "x": 183, "y": 0 },
+ { "flags": 4, "matrix": [0, 10], "x": 204, "y": 0 },
+ { "flags": 4, "matrix": [0, 11], "x": 224, "y": 0 },
+
+ { "flags": 4, "matrix": [1, 0], "x": 0, "y": 21},
+ { "flags": 4, "matrix": [1, 1], "x": 20, "y": 21},
+ { "flags": 4, "matrix": [1, 2], "x": 41, "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": 102, "y": 21},
+ { "flags": 4, "matrix": [1, 6], "x": 122, "y": 21},
+ { "flags": 4, "matrix": [1, 7], "x": 143, "y": 21},
+ { "flags": 4, "matrix": [1, 8], "x": 163, "y": 21},
+ { "flags": 4, "matrix": [1, 9], "x": 183, "y": 21},
+ { "flags": 4, "matrix": [1, 10], "x": 204, "y": 21},
+ { "flags": 4, "matrix": [1, 11], "x": 224, "y": 21},
+
+ { "flags": 4, "matrix": [2, 0], "x": 0, "y": 42},
+ { "flags": 4, "matrix": [2, 1], "x": 20, "y": 42},
+ { "flags": 4, "matrix": [2, 2], "x": 41, "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": 102, "y": 42},
+ { "flags": 4, "matrix": [2, 6], "x": 122, "y": 42},
+ { "flags": 4, "matrix": [2, 7], "x": 143, "y": 42},
+ { "flags": 4, "matrix": [2, 8], "x": 163, "y": 42},
+ { "flags": 4, "matrix": [2, 9], "x": 183, "y": 42},
+ { "flags": 4, "matrix": [2, 10], "x": 204, "y": 42},
+ { "flags": 4, "matrix": [2, 11], "x": 224, "y": 42},
+
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 64},
+ { "flags": 1, "matrix": [3, 1], "x": 20, "y": 64},
+ { "flags": 4, "matrix": [3, 2], "x": 41, "y": 64},
+ { "flags": 4, "matrix": [3, 3], "x": 61, "y": 64},
+ { "flags": 4, "matrix": [3, 4], "x": 81, "y": 64},
+ { "flags": 4, "matrix": [3, 5], "x": 102, "y": 64},
+ { "flags": 4, "matrix": [3, 7], "x": 143, "y": 64},
+ { "flags": 4, "matrix": [3, 8], "x": 163, "y": 64},
+ { "flags": 4, "matrix": [3, 9], "x": 183, "y": 64},
+ { "flags": 4, "matrix": [3, 10], "x": 204, "y": 64},
+ { "flags": 4, "matrix": [3, 11], "x": 224, "y": 64}
+ ]
+ },
+ "diode_direction": "ROW2COL",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0],"x": 0, "y": 0 },
+ { "label": "Q", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "W", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "E", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "R", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "T", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "Y", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "U", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "I", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "O", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "P", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "BackSpace", "matrix": [0, 11], "x": 11, "y": 0 },
+
+ { "label": "Tab", "matrix": [1, 0], "x": 0, "y": 1 },
+ { "label": "A", "matrix": [1, 1], "x": 1, "y": 1 },
+ { "label": "S", "matrix": [1, 2], "x": 2, "y": 1 },
+ { "label": "D", "matrix": [1, 3], "x": 3, "y": 1 },
+ { "label": "F", "matrix": [1, 4], "x": 4, "y": 1 },
+ { "label": "G", "matrix": [1, 5], "x": 5, "y": 1 },
+ { "label": "H", "matrix": [1, 6], "x": 6, "y": 1 },
+ { "label": "J", "matrix": [1, 7], "x": 7, "y": 1 },
+ { "label": "K", "matrix": [1, 8], "x": 8, "y": 1 },
+ { "label": "L", "matrix": [1, 9], "x": 9, "y": 1 },
+ { "label": ":", "matrix": [1, 10], "x": 10, "y": 1 },
+ { "label": "Enter", "matrix": [1, 11], "x": 11, "y": 1 },
+
+ { "label": "Shift", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "Z", "matrix": [2, 1], "x": 1, "y": 2 },
+ { "label": "X", "matrix": [2, 2], "x": 2, "y": 2 },
+ { "label": "C", "matrix": [2, 3], "x": 3, "y": 2 },
+ { "label": "V", "matrix": [2, 4], "x": 4, "y": 2 },
+ { "label": "B", "matrix": [2, 5], "x": 5, "y": 2 },
+ { "label": "N", "matrix": [2, 6], "x": 6, "y": 2 },
+ { "label": "M", "matrix": [2, 7], "x": 7, "y": 2 },
+ { "label": "<", "matrix": [2, 8], "x": 8, "y": 2 },
+ { "label": ">", "matrix": [2, 9], "x": 9, "y": 2 },
+ { "label": "Up", "matrix": [2, 10], "x": 10, "y": 2 },
+ { "label": "?", "matrix": [2, 11], "x": 11, "y": 2 },
+
+ { "label": "Ctrl", "matrix": [3, 0], "x": 0, "y": 3 },
+ { "label": "Win", "matrix": [3, 1],"x": 1, "y": 3 },
+ { "label": "Alt", "matrix": [3, 2],"x": 2, "y": 3 },
+ { "label": "Hyper", "matrix": [3, 3], "x": 3, "y": 3 },
+ { "label": "Lower", "matrix": [3, 4], "x": 4, "y": 3 },
+ { "label": "Space", "matrix": [3, 5], "w": 2, "x": 5, "y": 3 },
+ { "label": "Ralse", "matrix": [3, 7], "x": 7, "y": 3 },
+ { "label": "Fn", "matrix": [3, 8], "x": 8, "y": 3 },
+ { "label": "Left", "matrix": [3, 9], "x": 9, "y": 3 },
+ { "label": "Down", "matrix": [3, 10], "x": 10, "y": 3 },
+ { "label": "Right", "matrix": [3, 11], "x": 11, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/inland/mk47/keymaps/default/keymap.c b/keyboards/inland/mk47/keymaps/default/keymap.c
new file mode 100644
index 000000000000..f288d4e1feba
--- /dev/null
+++ b/keyboards/inland/mk47/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/* 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
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
+ KC_LCTL, MO(2), KC_LALT, KC_DEL, KC_PGDN, KC_SPC, KC_PGUP, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RGB_MOD,
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, RGB_VAI, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, KC_TRNS),
+
+ [2] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_CAPS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
+ KC_LCTL, KC_NO, KC_LALT, KC_DEL, KC_PGDN, KC_SPC, KC_PGUP, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
+
diff --git a/keyboards/inland/mk47/keymaps/inland/keymap.c b/keyboards/inland/mk47/keymaps/inland/keymap.c
new file mode 100644
index 000000000000..ff5de15c47f3
--- /dev/null
+++ b/keyboards/inland/mk47/keymaps/inland/keymap.c
@@ -0,0 +1,40 @@
+/* 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
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
+ KC_LCTL, MO(2), KC_LALT, KC_DEL, KC_PGDN, KC_SPC, KC_PGUP, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RGB_MOD,
+ RGB_HUI, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MSEL, KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, RGB_VAI, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, EE_CLR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPD, RGB_VAD, RGB_SPI),
+
+ [2] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_CAPS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
+ KC_LCTL, KC_NO, KC_LALT, KC_DEL, KC_PGDN, KC_SPC, KC_PGUP, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/inland/mk47/keymaps/inland/rules.mk b/keyboards/inland/mk47/keymaps/inland/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/inland/mk47/keymaps/inland/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/inland/mk47/keymaps/via/keymap.c b/keyboards/inland/mk47/keymaps/via/keymap.c
new file mode 100644
index 000000000000..53cabcc4770e
--- /dev/null
+++ b/keyboards/inland/mk47/keymaps/via/keymap.c
@@ -0,0 +1,41 @@
+/* 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
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
+ KC_LCTL, MO(2), KC_LALT, KC_DEL, KC_PGDN, KC_SPC, KC_PGUP, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RGB_MOD,
+ RGB_HUI, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MSEL, KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, RGB_VAI, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPD, RGB_VAD, RGB_SPI),
+
+ [2] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_CAPS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH,
+ KC_LCTL, KC_NO, KC_LALT, KC_DEL, KC_PGDN, KC_SPC, KC_PGUP, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
+
diff --git a/keyboards/inland/mk47/keymaps/via/rules.mk b/keyboards/inland/mk47/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/inland/mk47/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/inland/mk47/mcuconf.h b/keyboards/inland/mk47/mcuconf.h
new file mode 100644
index 000000000000..b80eb833d3e2
--- /dev/null
+++ b/keyboards/inland/mk47/mcuconf.h
@@ -0,0 +1,25 @@
+/* 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_I2C_USE_I2C1
+#define WB32_I2C_USE_I2C1 TRUE
+
+#undef WB32_SPI_USE_QSPI
+#define WB32_SPI_USE_QSPI TRUE
+
diff --git a/keyboards/inland/mk47/mk47.c b/keyboards/inland/mk47/mk47.c
new file mode 100644
index 000000000000..f24785594424
--- /dev/null
+++ b/keyboards/inland/mk47/mk47.c
@@ -0,0 +1,92 @@
+/* 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"
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, 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, 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, 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},
+
+ {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, D_13, E_13, F_13},
+ {0, D_14, E_14, F_14},
+ {0, D_15, E_15, F_15},
+ {0, G_13, H_13, I_13},
+ {0, G_14, H_14, I_14},
+ {0, G_15, H_15, I_15},
+ {0, G_16, H_16, I_16},
+};
+
+#endif
+
+#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) != true) {
+ return false;
+ }
+
+ if (host_keyboard_led_state().caps_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(12, 255, 0, 0);
+ }
+
+ return true;
+}
+#endif
diff --git a/keyboards/inland/mk47/readme.md b/keyboards/inland/mk47/readme.md
new file mode 100644
index 000000000000..55b805678b61
--- /dev/null
+++ b/keyboards/inland/mk47/readme.md
@@ -0,0 +1,24 @@
+# mk47
+
+A customizable 40% keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: mk47
+* Hardware Availability: [Inland](https://www.microcenter.com/product/661264/inland-47-keys-hot-swappable-rgb-wired-mechanical-keyboard,)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make inland/mk47:default
+
+Flashing example for this keyboard:
+
+ make inland/mk47: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/inland/mk47/rules.mk b/keyboards/inland/mk47/rules.mk
new file mode 100644
index 000000000000..24d5f6f52ecc
--- /dev/null
+++ b/keyboards/inland/mk47/rules.mk
@@ -0,0 +1,2 @@
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/itstleo/itstleo40/info.json b/keyboards/itstleo/itstleo40/info.json
new file mode 100644
index 000000000000..8748072f4f4e
--- /dev/null
+++ b/keyboards/itstleo/itstleo40/info.json
@@ -0,0 +1,81 @@
+{
+ "manufacturer": "ItsTLeo",
+ "keyboard_name": "itstleo40",
+ "maintainer": "ItsTLeo",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "combo": false,
+ "console": false,
+ "leader": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11"],
+ "rows": ["GP14", "GP15", "GP16", "GP17"]
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "vid": "0x4954",
+ "pid": "0x0003"
+ },
+ "community_layouts": ["planck_mit"],
+ "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], "x": 5, "y": 3, "w": 2},
+ {"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}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/itstleo/itstleo40/keymaps/default/keymap.c b/keyboards/itstleo/itstleo40/keymaps/default/keymap.c
new file mode 100644
index 000000000000..8e24170a34a9
--- /dev/null
+++ b/keyboards/itstleo/itstleo40/keymaps/default/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Tab│ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │Bsp│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Esc│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Sft│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Ent│
+ * ├───┼───┼───┼───┼───┼───┴───┼───┼───┼───┼───┼───┤
+ * │App│Ctl│Alt│GUI│ < │ │ > │ ← │ ↓ │ ↑ │ → │
+ * └───┴───┴───┴───┴───┴───────┴───┴───┴───┴───┴───┘
+ */
+ [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,
+ KC_APP, KC_LCTL, KC_LALT, KC_LGUI, KC_LT, KC_SPC, KC_GT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ )
+};
diff --git a/keyboards/itstleo/itstleo40/keymaps/via/keymap.c b/keyboards/itstleo/itstleo40/keymaps/via/keymap.c
new file mode 100644
index 000000000000..97600801706a
--- /dev/null
+++ b/keyboards/itstleo/itstleo40/keymaps/via/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Tab│ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │Bsp│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Esc│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Sft│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Ent│
+ * ├───┼───┼───┼───┼───┼───┴───┼───┼───┼───┼───┼───┤
+ * │App│Ctl│Alt│GUI│ < │ │ > │ ← │ ↓ │ ↑ │ → │
+ * └───┴───┴───┴───┴───┴───────┴───┴───┴───┴───┴───┘
+ */
+ [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,
+ KC_APP, KC_LCTL, KC_LALT, KC_LGUI, KC_LT, KC_SPC, KC_GT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ )
+};
\ No newline at end of file
diff --git a/keyboards/itstleo/itstleo40/keymaps/via/rules.mk b/keyboards/itstleo/itstleo40/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/itstleo/itstleo40/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/itstleo/itstleo40/readme.md b/keyboards/itstleo/itstleo40/readme.md
new file mode 100644
index 000000000000..b76a9665090b
--- /dev/null
+++ b/keyboards/itstleo/itstleo40/readme.md
@@ -0,0 +1,26 @@
+# itstleo/itstleo40
+
+![itstleo/itstleo40](https://i.imgur.com/snNWZPmh.jpeg)
+
+* ItsTLeo first pcb using planck mit community layout, powered by QMK with VIA supported
+
+* Keyboard Maintainer: [ItsTLeo](https://github.com/ItsTLeo)
+* Hardware Supported: Powered with RP2040
+
+Make example for this keyboard (after setting up your build environment):
+
+ make itstleo/itstleo40:default
+
+Flashing example for this keyboard:
+
+ make itstleo/itstleo40:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/itstleo/itstleo40/rules.mk b/keyboards/itstleo/itstleo40/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/itstleo/itstleo40/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/jacky_studio/piggy60/keymaps/via/keymap.json b/keyboards/jacky_studio/piggy60/keymaps/via/keymap.json
index b166c6771fff..2bd5581ac767 100644
--- a/keyboards/jacky_studio/piggy60/keymaps/via/keymap.json
+++ b/keyboards/jacky_studio/piggy60/keymaps/via/keymap.json
@@ -1,5 +1,5 @@
{
- "keyboard": "jacky_studio/piggy60",
+ "keyboard": "jacky_studio/piggy60/rev1/solder",
"keymap": "via",
"layout": "LAYOUT_all",
"layers": [
diff --git a/keyboards/jaykeeb/kamigakushi/info.json b/keyboards/jaykeeb/kamigakushi/info.json
index 21f0be63fa5c..a421019a4a5e 100644
--- a/keyboards/jaykeeb/kamigakushi/info.json
+++ b/keyboards/jaykeeb/kamigakushi/info.json
@@ -15,7 +15,7 @@
},
"indicators": {
"caps_lock": "GP17",
- "on_state": 1
+ "on_state": 0
},
"rgblight": {
"led_count": 2,
diff --git a/keyboards/jaykeeb/orba/info.json b/keyboards/jaykeeb/orba/info.json
index 192bb385ce25..b437667b14d9 100644
--- a/keyboards/jaykeeb/orba/info.json
+++ b/keyboards/jaykeeb/orba/info.json
@@ -23,87 +23,170 @@
"pid": "0x0769",
"vid": "0x414C"
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_625u_space"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_625u_space": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "`", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "-", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "=", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "6", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "7", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "8", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "9", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "0", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Delete", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "Home", "matrix": [0, 15], "x": 15, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "Q", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5, "y": 1},
+ {"label": "P7", "matrix": [1, 6], "x": 6, "y": 1},
+ {"label": "P8", "matrix": [1, 7], "x": 7, "y": 1},
+ {"label": "P9", "matrix": [1, 8], "x": 8, "y": 1},
+ {"label": "Y", "matrix": [1, 9], "x": 9, "y": 1},
+ {"label": "U", "matrix": [1, 10], "x": 10, "y": 1},
+ {"label": "I", "matrix": [1, 11], "x": 11, "y": 1},
+ {"label": "O", "matrix": [1, 12], "x": 12, "y": 1},
+ {"label": "P", "matrix": [1, 13], "x": 13, "y": 1},
+ {"label": "Backspace", "matrix": [1, 14], "x": 14, "y": 1},
+ {"label": "Page Up", "matrix": [1, 15], "x": 15, "y": 1},
+
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "A", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5, "y": 2},
+ {"label": "P4", "matrix": [2, 6], "x": 6, "y": 2},
+ {"label": "P5", "matrix": [2, 7], "x": 7, "y": 2},
+ {"label": "P6", "matrix": [2, 8], "x": 8, "y": 2},
+ {"label": "H", "matrix": [2, 9], "x": 9, "y": 2},
+ {"label": "J", "matrix": [2, 10], "x": 10, "y": 2},
+ {"label": "K", "matrix": [2, 11], "x": 11, "y": 2},
+ {"label": "L", "matrix": [2, 12], "x": 12, "y": 2},
+ {"label": ":", "matrix": [2, 13], "x": 13, "y": 2},
+ {"label": "", "matrix": [2, 14], "x": 14, "y": 2},
+ {"label": "Page Down", "matrix": [2, 15], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "Z", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "X", "matrix": [3, 2], "x": 2, "y": 3},
+ {"label": "C", "matrix": [3, 3], "x": 3, "y": 3},
+ {"label": "V", "matrix": [3, 4], "x": 4, "y": 3},
+ {"label": "B", "matrix": [3, 5], "x": 5, "y": 3},
+ {"label": "P1", "matrix": [3, 6], "x": 6, "y": 3},
+ {"label": "P2", "matrix": [3, 7], "x": 7, "y": 3},
+ {"label": "P3", "matrix": [3, 8], "x": 8, "y": 3},
+ {"label": "N", "matrix": [3, 9], "x": 9, "y": 3},
+ {"label": "M", "matrix": [3, 10], "x": 10, "y": 3},
+ {"label": ",", "matrix": [3, 11], "x": 11, "y": 3},
+ {"label": ".", "matrix": [3, 12], "x": 12, "y": 3},
+ {"label": "/", "matrix": [3, 13], "x": 13, "y": 3},
+ {"label": "\u2191", "matrix": [3, 14], "x": 14, "y": 3},
+ {"label": "Enter", "matrix": [3, 15], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Fn", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 13], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 14], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 15], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_7u_space": {
"layout": [
- {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
- {"label": "1", "matrix": [0, 1], "x": 1, "y": 0 },
- {"label": "2", "matrix": [0, 2], "x": 2, "y": 0 },
- {"label": "3", "matrix": [0, 3], "x": 3, "y": 0 },
- {"label": "4", "matrix": [0, 4], "x": 4, "y": 0 },
- {"label": "5", "matrix": [0, 5], "x": 5, "y": 0 },
- {"label": "`", "matrix": [0, 6], "x": 6, "y": 0 },
- {"label": "-", "matrix": [0, 7], "x": 7, "y": 0 },
- {"label": "=", "matrix": [0, 8], "x": 8, "y": 0 },
- {"label": "6", "matrix": [0, 9], "x": 9, "y": 0 },
- {"label": "7", "matrix": [0, 10], "x": 10, "y": 0 },
- {"label": "8", "matrix": [0, 11], "x": 11, "y": 0 },
- {"label": "9", "matrix": [0, 12], "x": 12, "y": 0 },
- {"label": "0", "matrix": [0, 13], "x": 13, "y": 0 },
- {"label": "Delete", "matrix": [0, 14], "x": 13, "y": 0 },
- {"label": "Home", "matrix": [0, 15], "x": 15, "y": 0 },
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "`", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "-", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "=", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "6", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "7", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "8", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "9", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "0", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Delete", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "Home", "matrix": [0, 15], "x": 15, "y": 0},
- {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1 },
- {"label": "Q", "matrix": [1, 1], "x": 1, "y": 1 },
- {"label": "W", "matrix": [1, 2], "x": 2, "y": 1 },
- {"label": "E", "matrix": [1, 3], "x": 3, "y": 1 },
- {"label": "R", "matrix": [1, 4], "x": 4, "y": 1 },
- {"label": "T", "matrix": [1, 5], "x": 5, "y": 1 },
- {"label": "P7", "matrix": [1, 6], "x": 6, "y": 1 },
- {"label": "P8", "matrix": [1, 7], "x": 7, "y": 1 },
- {"label": "P9", "matrix": [1, 8], "x": 8, "y": 1 },
- {"label": "Y", "matrix": [1, 9], "x": 9, "y": 1 },
- {"label": "U", "matrix": [1, 10], "x": 10, "y": 1 },
- {"label": "I", "matrix": [1, 11], "x": 11, "y": 1 },
- {"label": "O", "matrix": [1, 12], "x": 12, "y": 1 },
- {"label": "P", "matrix": [1, 13], "x": 13, "y": 1 },
- {"label": "Backspace", "matrix": [1, 14], "x": 13, "y": 1 },
- {"label": "Page Up", "matrix": [1, 15], "x": 15, "y": 1 },
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "Q", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5, "y": 1},
+ {"label": "P7", "matrix": [1, 6], "x": 6, "y": 1},
+ {"label": "P8", "matrix": [1, 7], "x": 7, "y": 1},
+ {"label": "P9", "matrix": [1, 8], "x": 8, "y": 1},
+ {"label": "Y", "matrix": [1, 9], "x": 9, "y": 1},
+ {"label": "U", "matrix": [1, 10], "x": 10, "y": 1},
+ {"label": "I", "matrix": [1, 11], "x": 11, "y": 1},
+ {"label": "O", "matrix": [1, 12], "x": 12, "y": 1},
+ {"label": "P", "matrix": [1, 13], "x": 13, "y": 1},
+ {"label": "Backspace", "matrix": [1, 14], "x": 14, "y": 1},
+ {"label": "Page Up", "matrix": [1, 15], "x": 15, "y": 1},
- {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2 },
- {"label": "A", "matrix": [2, 1], "x": 1, "y": 2 },
- {"label": "S", "matrix": [2, 2], "x": 2, "y": 2 },
- {"label": "D", "matrix": [2, 3], "x": 3, "y": 2 },
- {"label": "F", "matrix": [2, 4], "x": 4, "y": 2 },
- {"label": "G", "matrix": [2, 5], "x": 5, "y": 2 },
- {"label": "P4", "matrix": [2, 6], "x": 6, "y": 2 },
- {"label": "P5", "matrix": [2, 7], "x": 7, "y": 2 },
- {"label": "P6", "matrix": [2, 8], "x": 8, "y": 2 },
- {"label": "H", "matrix": [2, 9], "x": 9, "y": 2 },
- {"label": "J", "matrix": [2, 10], "x": 10, "y": 2 },
- {"label": "K", "matrix": [2, 11], "x": 11, "y": 2 },
- {"label": "L", "matrix": [2, 12], "x": 12, "y": 2 },
- {"label": ":", "matrix": [2, 13], "x": 13, "y": 2 },
- {"label": "", "matrix": [2, 14], "x": 13, "y": 2 },
- {"label": "Page Down", "matrix": [2, 15], "x": 15, "y": 2 },
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "A", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5, "y": 2},
+ {"label": "P4", "matrix": [2, 6], "x": 6, "y": 2},
+ {"label": "P5", "matrix": [2, 7], "x": 7, "y": 2},
+ {"label": "P6", "matrix": [2, 8], "x": 8, "y": 2},
+ {"label": "H", "matrix": [2, 9], "x": 9, "y": 2},
+ {"label": "J", "matrix": [2, 10], "x": 10, "y": 2},
+ {"label": "K", "matrix": [2, 11], "x": 11, "y": 2},
+ {"label": "L", "matrix": [2, 12], "x": 12, "y": 2},
+ {"label": ":", "matrix": [2, 13], "x": 13, "y": 2},
+ {"label": "", "matrix": [2, 14], "x": 14, "y": 2},
+ {"label": "Page Down", "matrix": [2, 15], "x": 15, "y": 2},
- {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3 },
- {"label": "Z", "matrix": [3, 1], "x": 1, "y": 3 },
- {"label": "X", "matrix": [3, 2], "x": 2, "y": 3 },
- {"label": "C", "matrix": [3, 3], "x": 3, "y": 3 },
- {"label": "V", "matrix": [3, 4], "x": 4, "y": 3 },
- {"label": "B", "matrix": [3, 5], "x": 5, "y": 3 },
- {"label": "P1", "matrix": [3, 6], "x": 6, "y": 3 },
- {"label": "P2", "matrix": [3, 7], "x": 7, "y": 3 },
- {"label": "P3", "matrix": [3, 8], "x": 8, "y": 3 },
- {"label": "N", "matrix": [3, 9], "x": 9, "y": 3 },
- {"label": "M", "matrix": [3, 10], "x": 10, "y": 3 },
- {"label": ",", "matrix": [3, 11], "x": 11, "y": 3 },
- {"label": ".", "matrix": [3, 12], "x": 12, "y": 3 },
- {"label": "/", "matrix": [3, 13], "x": 13, "y": 3 },
- {"label": "\u2191", "matrix": [3, 14], "x": 13, "y": 3 },
- {"label": "Enter", "matrix": [3, 15], "x": 15, "y": 3 },
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "Z", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "X", "matrix": [3, 2], "x": 2, "y": 3},
+ {"label": "C", "matrix": [3, 3], "x": 3, "y": 3},
+ {"label": "V", "matrix": [3, 4], "x": 4, "y": 3},
+ {"label": "B", "matrix": [3, 5], "x": 5, "y": 3},
+ {"label": "P1", "matrix": [3, 6], "x": 6, "y": 3},
+ {"label": "P2", "matrix": [3, 7], "x": 7, "y": 3},
+ {"label": "P3", "matrix": [3, 8], "x": 8, "y": 3},
+ {"label": "N", "matrix": [3, 9], "x": 9, "y": 3},
+ {"label": "M", "matrix": [3, 10], "x": 10, "y": 3},
+ {"label": ",", "matrix": [3, 11], "x": 11, "y": 3},
+ {"label": ".", "matrix": [3, 12], "x": 12, "y": 3},
+ {"label": "/", "matrix": [3, 13], "x": 13, "y": 3},
+ {"label": "\u2191", "matrix": [3, 14], "x": 14, "y": 3},
+ {"label": "Enter", "matrix": [3, 15], "x": 15, "y": 3},
- {"label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
- {"label": "GUI", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
- {"label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
- {"label": "Space", "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
- {"label": "Fn", "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
- {"label": "Ctrl","matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
- {"label": "\u2190", "matrix": [4, 13], "x": 13, "y": 4 },
- {"label": "\u2193", "matrix": [4, 14], "x": 14, "y": 4 },
- {"label": "\u2192", "matrix": [4, 15], "x": 15, "y": 4 }
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "\u2190", "matrix": [4, 13], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 14], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 15], "x": 15, "y": 4}
]
}
}
-}
\ No newline at end of file
+}
diff --git a/keyboards/jaykeeb/orba/keymaps/default/keymap.c b/keyboards/jaykeeb/orba/keymaps/default/keymap.c
index 96710a95aadd..5b00f5a34cf5 100644
--- a/keyboards/jaykeeb/orba/keymaps/default/keymap.c
+++ b/keyboards/jaykeeb/orba/keymaps/default/keymap.c
@@ -17,7 +17,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* │Ctrl│GUI │Alt │ │ FN │Ctrl│ │ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
*/
- [0] = LAYOUT(
+ [0] = LAYOUT_625u_space(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_PGDN,
@@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
- [1] = LAYOUT(
+ [1] = LAYOUT_625u_space(
_______, 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_RBT, QK_BOOT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/jaykeeb/orba/keymaps/via/keymap.c b/keyboards/jaykeeb/orba/keymaps/via/keymap.c
index c567537ce592..e6b4fb0b207b 100644
--- a/keyboards/jaykeeb/orba/keymaps/via/keymap.c
+++ b/keyboards/jaykeeb/orba/keymaps/via/keymap.c
@@ -17,7 +17,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* │Ctrl│GUI │Alt │ │ FN │Ctrl│ │ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
*/
- [0] = LAYOUT(
+ [0] = LAYOUT_625u_space(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_PGDN,
@@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
- [1] = LAYOUT(
+ [1] = LAYOUT_625u_space(
_______, 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_RBT, QK_BOOT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/jaykeeb/sebelas/info.json b/keyboards/jaykeeb/sebelas/info.json
new file mode 100644
index 000000000000..ac4202d820a8
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/info.json
@@ -0,0 +1,424 @@
+{
+ "manufacturer": "Alabahuy",
+ "keyboard_name": "Sebelas",
+ "maintainer": "Alabahuy",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP25", "GP0", "GP15", "GP10", "GP9", "GP8", "GP7", "GP6", "GP5", "GP4", "GP2"],
+ "rows": ["GP11", "GP12", "GP13", "GP1", "GP16"]
+ },
+ "indicators": {
+ "caps_lock": "GP14",
+ "on_state": 0
+ },
+ "ws2812": {
+ "pin": "GP3",
+ "driver": "vendor"
+ },
+ "rgblight": {
+ "led_count": 1,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0767",
+ "vid": "0x414C"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Delete", "matrix": [1, 13], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "\\", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 7], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 7], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_split_bs": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Delete", "matrix": [1, 13], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 7], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "\u2190", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_tsangan_split_bs": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Delete", "matrix": [1, 13], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"label": "Ctrl", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "\u2190", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/jaykeeb/sebelas/keymaps/default/keymap.c b/keyboards/jaykeeb/sebelas/keymaps/default/keymap.c
new file mode 100644
index 000000000000..4a525e7bd392
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Alabahuy
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_65_ansi_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/jaykeeb/sebelas/keymaps/via/keymap.c b/keyboards/jaykeeb/sebelas/keymaps/via/keymap.c
new file mode 100644
index 000000000000..4a525e7bd392
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/keymaps/via/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 Alabahuy
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_65_ansi_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/jaykeeb/sebelas/keymaps/via/rules.mk b/keyboards/jaykeeb/sebelas/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/jaykeeb/sebelas/matrix_diagram.md b/keyboards/jaykeeb/sebelas/matrix_diagram.md
new file mode 100644
index 000000000000..24cf49725b24
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Jaykeeb Sebelas
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │1D │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │2D │1E │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2E │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+│40 │41 │42 │47 │4A │4B │ │4C │4D │4E │
+└────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+┌────────┐
+│30 │ 2.25u LShift
+└────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┐
+│40 │41 │42 │47 │4B │ Blocker Tsangan
+└─────┴───┴─────┴───────────────────────────┴─────┘
+```
diff --git a/keyboards/jaykeeb/sebelas/readme.md b/keyboards/jaykeeb/sebelas/readme.md
new file mode 100644
index 000000000000..e44042b86405
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/readme.md
@@ -0,0 +1,27 @@
+# SEBELAS
+
+![sebelas]( https://i.imgur.com/07zQeZhh.png )
+
+PCB Replacement for TGR910
+
+* Keyboard Maintainer: [Alabahuy](https://github.com/Alabahuy)
+* Hardware Supported: Sebelas PCB, RP2040
+* Hardware Availability: Private GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jaykeeb/sebelas:default
+
+Flashing example for this keyboard:
+
+ make jaykeeb/sebelas:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/jaykeeb/sebelas/rules.mk b/keyboards/jaykeeb/sebelas/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/jaykeeb/sebelas/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/jaykeeb/skyline/info.json b/keyboards/jaykeeb/skyline/info.json
index 14b596ebba19..068c11a87408 100644
--- a/keyboards/jaykeeb/skyline/info.json
+++ b/keyboards/jaykeeb/skyline/info.json
@@ -109,7 +109,7 @@
{"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, 12], "x": 13.75, "y": 3.25, "w": 2.25},
+ {"label": "Enter", "matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"label": "\u2298", "matrix": [4, 1], "x": 1.25, "y": 4.25},
@@ -129,12 +129,12 @@
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
- {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
- {"label": "Space", "matrix": [5, 7], "x": 3.75, "y": 5.25, "w": 7},
- {"label": "Alt", "matrix": [5, 11], "x": 10, "y": 5.25, "w": 1.5},
- {"label": "GUI", "matrix": [5, 12], "x": 11.25, "y": 5.25},
- {"label": "Ctrl", "matrix": [5, 13], "x": 12.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
@@ -232,12 +232,12 @@
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
- {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
- {"label": "Space", "matrix": [5, 7], "x": 3.75, "y": 5.25, "w": 7},
- {"label": "Alt", "matrix": [5, 11], "x": 10, "y": 5.25, "w": 1.5},
- {"label": "GUI", "matrix": [5, 12], "x": 11.25, "y": 5.25},
- {"label": "Ctrl", "matrix": [5, 13], "x": 12.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
@@ -441,12 +441,12 @@
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
- {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
- {"label": "Space", "matrix": [5, 7], "x": 3.75, "y": 5.25, "w": 7},
- {"label": "Alt", "matrix": [5, 11], "x": 10, "y": 5.25, "w": 1.5},
- {"label": "GUI", "matrix": [5, 12], "x": 11.25, "y": 5.25},
- {"label": "Ctrl", "matrix": [5, 13], "x": 12.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
@@ -547,12 +547,12 @@
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
- {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
- {"label": "Space", "matrix": [5, 7], "x": 3.75, "y": 5.25, "w": 7},
- {"label": "Alt", "matrix": [5, 11], "x": 10, "y": 5.25, "w": 1.5},
- {"label": "GUI", "matrix": [5, 12], "x": 11.25, "y": 5.25},
- {"label": "Ctrl", "matrix": [5, 13], "x": 12.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "GUI", "matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.c b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.c
new file mode 100644
index 000000000000..e217adcf09ed
--- /dev/null
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.c
@@ -0,0 +1,72 @@
+// Copyright 2021-2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/**
+ * @file custom_shift_keys.c
+ * @brief Custom Shift Keys implementation
+ *
+ * For full documentation, see
+ *
+ */
+
+#include "custom_shift_keys.h"
+
+bool process_custom_shift_keys(uint16_t keycode, keyrecord_t *record) {
+ static uint16_t registered_keycode = KC_NO;
+
+ // If a custom shift key is registered, then this event is either releasing
+ // it or manipulating another key at the same time. Either way, we release
+ // the currently registered key.
+ if (registered_keycode != KC_NO) {
+ unregister_code16(registered_keycode);
+ registered_keycode = KC_NO;
+ }
+
+ if (record->event.pressed) { // Press event.
+ const uint8_t mods = get_mods();
+#ifndef NO_ACTION_ONESHOT
+ if ((mods | get_weak_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT) {
+#else
+ if ((mods | get_weak_mods()) & MOD_MASK_SHIFT) { // Shift is held.
+#endif // NO_ACTION_ONESHOT
+ // Continue default handling if this is a tap-hold key being held.
+ if ((IS_QK_MOD_TAP(keycode) || IS_QK_LAYER_TAP(keycode)) && record->tap.count == 0) {
+ return true;
+ }
+
+ // Search for a custom shift key whose keycode is `keycode`.
+ for (int i = 0; i < NUM_CUSTOM_SHIFT_KEYS; ++i) {
+ if (keycode == custom_shift_keys[i].keycode) {
+ registered_keycode = custom_shift_keys[i].shifted_keycode;
+ if (IS_QK_MODS(registered_keycode) && // Should keycode be shifted?
+ (QK_MODS_GET_MODS(registered_keycode) & MOD_LSFT) != 0) {
+ register_code16(registered_keycode); // If so, press it directly.
+ } else {
+ // Otherwise cancel shift mods, press the key, and restore mods.
+ del_weak_mods(MOD_MASK_SHIFT);
+#ifndef NO_ACTION_ONESHOT
+ del_oneshot_mods(MOD_MASK_SHIFT);
+#endif // NO_ACTION_ONESHOT
+ unregister_mods(MOD_MASK_SHIFT);
+ register_code16(registered_keycode);
+ set_mods(mods);
+ }
+ return false;
+ }
+ }
+ }
+ }
+
+ return true; // Continue with default handling.
+}
\ No newline at end of file
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.h b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.h
new file mode 100644
index 000000000000..7d1ee13a459f
--- /dev/null
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.h
@@ -0,0 +1,99 @@
+// Copyright 2021-2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/**
+ * @file custom_shift_keys.h
+ * @brief Custom shift keys: customize what keycode is produced when shifted.
+ *
+ * Overview
+ * --------
+ *
+ * This library implements custom shift keys, keys where you can customize
+ * what keycode is produced when shifted.
+ *
+ * Step 1: In your keymap.c, define a table of custom shift keys like
+ *
+ * #include "features/custom_shift_keys.h"
+ *
+ * const custom_shift_key_t custom_shift_keys[] = {
+ * {KC_DOT , KC_QUES}, // Shift . is ?
+ * {KC_COMM, KC_EXLM}, // Shift , is !
+ * {KC_MINS, KC_EQL }, // Shift - is =
+ * {KC_COLN, KC_SCLN}, // Shift : is ;
+ * };
+ *
+ * Each row defines one key. The first field is the keycode as it appears in
+ * your layout and determines what is typed normally. The second entry is what
+ * you want the key to type when shifted.
+ *
+ * Step 2: Handle custom shift keys from your `process_record_user` function as
+ *
+ * bool process_record_user(uint16_t keycode, keyrecord_t* record) {
+ * if (!process_custom_shift_keys(keycode, record)) { return false; }
+ * // Your macros ...
+ *
+ * return true;
+ * }
+ *
+ * Step 3: add `features/custom_shift_keys.c` to your rules.mk as
+ *
+ * SRC += features/custom_shift_keys.c
+ *
+ *
+ * For full documentation, see
+ *
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Custom shift key entry. The `keycode` field is the keycode as it appears in
+ * your layout and determines what is typed normally. The `shifted_keycode` is
+ * what you want the key to type when shifted.
+ */
+typedef struct {
+ uint16_t keycode;
+ uint16_t shifted_keycode;
+} custom_shift_key_t;
+
+/** Table of custom shift keys. */
+extern const custom_shift_key_t custom_shift_keys[];
+/** Number of entries in the `custom_shift_keys` table. */
+extern uint8_t NUM_CUSTOM_SHIFT_KEYS;
+
+/**
+ * Handler function for custom shift keys.
+ *
+ * In keymap.c, call this function from your `process_record_user` function as
+ *
+ * #include "features/custom_shift_keys.h"
+ *
+ * bool process_record_user(uint16_t keycode, keyrecord_t* record) {
+ * if (!process_custom_shift_keys(keycode, record)) { return false; }
+ * // Your macros ...
+ *
+ * return true;
+ * }
+ */
+bool process_custom_shift_keys(uint16_t keycode, keyrecord_t *record);
+
+#ifdef __cplusplus
+}
+#endif
\ No newline at end of file
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
index 619231a6ab22..cb6fff1a0fd2 100644
--- a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
@@ -14,6 +14,7 @@
* along with this program. If not, see .
*/
#include QMK_KEYBOARD_H
+#include "features/custom_shift_keys.h"
#define FN_ESC LT(_FUNC, KC_ESC)
@@ -29,6 +30,10 @@ enum gentleman_keycodes {
FUNC,
};
+const custom_shift_key_t custom_shift_keys[] = {{KC_ESC, KC_TILD}};
+
+uint8_t NUM_CUSTOM_SHIFT_KEYS = sizeof(custom_shift_keys) / sizeof(custom_shift_key_t);
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_65_ansi_rwkl_split_bs(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_TRNS,
@@ -78,6 +83,9 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_custom_shift_keys(keycode, record)) {
+ return false;
+ }
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
@@ -90,7 +98,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
}
-
+
return true;
}
-
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
index b7c0fb5c5d41..feebedc544eb 100644
--- a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
@@ -10,5 +10,5 @@
## Building and flashing
```
-make gentleman65:briianpowell:flash
+make jkeys_design/gentleman65:briianpowell:flash
```
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/rules.mk b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/rules.mk
new file mode 100644
index 000000000000..ac89d1390289
--- /dev/null
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/rules.mk
@@ -0,0 +1 @@
+SRC += features/custom_shift_keys.c
diff --git a/keyboards/jkeys_design/gentleman65/rules.mk b/keyboards/jkeys_design/gentleman65/rules.mk
index f81996d70214..bb89340fbf1a 100644
--- a/keyboards/jkeys_design/gentleman65/rules.mk
+++ b/keyboards/jkeys_design/gentleman65/rules.mk
@@ -11,4 +11,4 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
RGB_MATRIX_ENABLE = no
-ENCODER_ENABLE = yes
\ No newline at end of file
+ENCODER_ENABLE = yes
diff --git a/keyboards/kalakos/bahrnob/info.json b/keyboards/kalakos/bahrnob/info.json
index 3e556f9bb855..6905ceb38da4 100644
--- a/keyboards/kalakos/bahrnob/info.json
+++ b/keyboards/kalakos/bahrnob/info.json
@@ -46,8 +46,10 @@
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [1, 14], "x": 14, "y": 0},
+
{"matrix": [0, 14], "x": 15.75, "y": 0},
- {"matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
+
+ {"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},
@@ -60,9 +62,11 @@
{"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, 13], "x": 13.5, "y": 1, "w": 1.5},
+
{"matrix": [2, 14], "x": 15.5, "y": 1.5},
- {"matrix": [2, 0], "w": 1.75, "x": 0, "y": 2},
+
+ {"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},
@@ -74,11 +78,13 @@
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
- {"matrix": [2, 12], "w": 2.25, "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
{"matrix": [3, 14], "x": 15.5, "y": 2.5},
- {"matrix": [3, 0], "w": 1.25, "x": 0, "y": 3},
- {"matrix": [4, 4], "x": 2.25, "y": 3},
- {"matrix": [3, 1], "x": 1.25, "y": 3},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [4, 4], "x": 1.25, "y": 3},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
@@ -88,17 +94,20 @@
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
- {"matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+
{"matrix": [2, 13], "x": 14.25, "y": 3.25},
- {"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, 3], "w": 3, "x": 3.75, "y": 4},
- {"matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4},
- {"matrix": [4, 6], "w": 3.25, "x": 6.75, "y": 4},
+
+ {"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, 3], "x": 3.75, "y": 4, "w": 3, "h": 0.625},
+ {"matrix": [4, 5], "x": 3.75, "y": 4.625, "w": 6.25, "h": 0.625},
+ {"matrix": [4, 6], "x": 6.75, "y": 4, "w": 3.25, "h": 0.625},
{"matrix": [4, 10], "x": 10, "y": 4},
{"matrix": [4, 11], "x": 11, "y": 4},
{"matrix": [4, 12], "x": 12, "y": 4},
+
{"matrix": [3, 13], "x": 13.25, "y": 4.25},
{"matrix": [4, 13], "x": 14.25, "y": 4.25},
{"matrix": [4, 14], "x": 15.25, "y": 4.25}
diff --git a/keyboards/kalakos/bahrnob/matrix_diagram.md b/keyboards/kalakos/bahrnob/matrix_diagram.md
new file mode 100644
index 000000000000..30e120b75b3d
--- /dev/null
+++ b/keyboards/kalakos/bahrnob/matrix_diagram.md
@@ -0,0 +1,38 @@
+# Matrix Diagram for Kalakos Bahrnob65
+
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │1E │ │0E │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ └───┘ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │ ┌───┐ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ │2E │ ┌──┴┐1D │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │ ├───┤ │2C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┘ │3E │ └───┴────┘
+│30 │44 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3C │┌───┐└───┘
+├────┼───┴┬──┴─┬─┴───┴───┴─┬─┴───┴───┴──┬┴──┬┴──┬┴──┬───┘│2D │
+│40 │41 │42 │43 │46 │4A │4B │4C │┌───┼───┼───┐
+└────┴────┴────┴───────────┴────────────┴───┴───┴───┘│3D │4D │4E │
+ └───┴───┴───┘
+┌────────┐
+│30 │ 2.25u LShift
+└────────┘
+┌────┬────┬────┬────────────────────────┬───┬───┬───┐
+│40 │41 │42 │45 │4A │4B │4C │ Standard
+└────┴────┴────┴────────────────────────┴───┴───┴───┘
+┌─────┬─────┬───────────────────────────┬───┬───┬───┐
+│40 │41 │45 │4A │4B │4C │ LWKL
+└─────┴─────┴───────────────────────────┴───┴───┴───┘
+┌────┬────┬────┬────────────────────────┬─────┬─────┐
+│40 │41 │42 │45 │4A │4C │ RWKL
+└────┴────┴────┴────────────────────────┴─────┴─────┘
+┌────┬────┬────┬───────────┬────────────┬─────┬─────┐
+│40 │41 │42 │43 │46 │4A │4C │ RWKL with Split (3/3.25u) Spacebars
+└────┴────┴────┴───────────┴────────────┴─────┴─────┘
+┌─────┬─────┬───────────────────────────┬─────┬─────┐
+│40 │41 │45 │4A │4C │ WKL
+└─────┴─────┴───────────────────────────┴─────┴─────┘
+```
diff --git a/keyboards/keebio/cepstrum/info.json b/keyboards/keebio/cepstrum/info.json
index 61d1b43f8b3d..250b886d8b36 100644
--- a/keyboards/keebio/cepstrum/info.json
+++ b/keyboards/keebio/cepstrum/info.json
@@ -18,105 +18,5 @@
},
"build": {
"lto": true
- },
- "layouts": {
- "LAYOUT_65xt": {
- "layout": [
- {"label":"F1", "x":0, "y":0},
- {"label":"F2", "x":1, "y":0},
-
- {"label":"Esc", "x":2.25, "y":0},
- {"label":"1", "x":3.25, "y":0},
- {"label":"2", "x":4.25, "y":0},
- {"label":"3", "x":5.25, "y":0},
- {"label":"4", "x":6.25, "y":0},
- {"label":"5", "x":7.25, "y":0},
- {"label":"6", "x":8.25, "y":0},
-
- {"label":"7", "x":10.25, "y":0},
- {"label":"8", "x":11.25, "y":0},
- {"label":"9", "x":12.25, "y":0},
- {"label":"0", "x":13.25, "y":0},
- {"label":"-", "x":14.25, "y":0},
- {"label":"=", "x":15.25, "y":0},
- {"label":"Bksp", "x":17.25, "y":0, "w": 2},
- {"label":"Del", "x":18.25, "y":0},
-
- {"label":"F3", "x":0, "y":1},
- {"label":"F4", "x":1, "y":1},
-
- {"label":"Tab", "x":2.25, "y":1, "w":1.5},
- {"label":"Q", "x":3.75, "y":1},
- {"label":"W", "x":4.75, "y":1},
- {"label":"E", "x":5.75, "y":1},
- {"label":"R", "x":6.75, "y":1},
- {"label":"T", "x":7.75, "y":1},
-
- {"label":"Y", "x":9.75, "y":1},
- {"label":"U", "x":10.75, "y":1},
- {"label":"I", "x":11.75, "y":1},
- {"label":"O", "x":12.75, "y":1},
- {"label":"P", "x":13.75, "y":1},
- {"label":"{", "x":14.75, "y":1},
- {"label":"}", "x":15.75, "y":1},
- {"label":"|", "x":16.75, "y":1, "w":1.5},
- {"label":"Home", "x":18.25, "y":1},
-
- {"label":"F5", "x":0, "y":2},
- {"label":"F6", "x":1, "y":2},
-
- {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75},
- {"label":"A", "x":4, "y":2},
- {"label":"S", "x":5, "y":2},
- {"label":"D", "x":6, "y":2},
- {"label":"F", "x":7, "y":2},
- {"label":"G", "x":8, "y":2},
-
- {"label":"H", "x":10, "y":2},
- {"label":"J", "x":11, "y":2},
- {"label":"K", "x":12, "y":2},
- {"label":"L", "x":13, "y":2},
- {"label":":", "x":14, "y":2},
- {"label":"\"", "x":15, "y":2},
- {"label":"Enter", "x":16, "y":2, "w":2.25},
- {"label":"PgUp", "x":18.25, "y":2},
-
- {"label":"F7", "x":0, "y":3},
- {"label":"F8", "x":1, "y":3},
-
- {"label":"Shift", "x":2.25, "y":3, "w":2.25},
- {"label":"Z", "x":4.5, "y":3},
- {"label":"X", "x":5.5, "y":3},
- {"label":"C", "x":6.5, "y":3},
- {"label":"V", "x":7.5, "y":3},
- {"label":"B", "x":8.5, "y":3},
-
- {"label":"N", "x":10.5, "y":3},
- {"label":"M", "x":11.5, "y":3},
- {"label":",", "x":12.5, "y":3},
- {"label":".", "x":13.5, "y":3},
- {"label":"/", "x":14.5, "y":3},
- {"label":"Shift", "x":15.5, "y":3, "w":1.75},
- {"label":"Up", "x":17.25, "y":3},
- {"label":"PgDn", "x":18.25, "y":3},
-
- {"label":"F9", "x":0, "y":4},
- {"label":"F10", "x":1, "y":4},
-
- {"label":"Ctrl", "x":2.25, "y":4, "w":1.25},
- {"label":"Win", "x":3.5, "y":4, "w":1.25},
- {"label":"Alt", "x":4.75, "y":4, "w":1.25},
- {"label":"Fn", "x":6, "y":4, "w":1.25},
- {"label":"Space", "x":7.25, "y":4},
-
- {"label":"Space", "x":11.75, "y":4, "w":1.5},
- {"label":"Alt", "x":13.25, "y":4},
- {"label":"Fn", "x":14.25, "y":4},
- {"label":"Ctrl", "x":15.25, "y":4},
- {"label":"Left", "x":16.25, "y":4},
- {"label":"Down", "x":17.25, "y":4},
- {"label":"Right", "x":18.25, "y":4}
- ]
- }
}
}
diff --git a/keyboards/keebio/cepstrum/rev1/info.json b/keyboards/keebio/cepstrum/rev1/info.json
index a9f8c83d12d3..75cbd41bd3e6 100644
--- a/keyboards/keebio/cepstrum/rev1/info.json
+++ b/keyboards/keebio/cepstrum/rev1/info.json
@@ -23,86 +23,100 @@
"layouts": {
"LAYOUT_65xt": {
"layout": [
- { "label": "F1", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
- { "label": "F2", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
- { "label": "Esc", "matrix": [0, 2], "w": 1, "x": 2.25, "y": 0 },
- { "label": "1", "matrix": [0, 3], "w": 1, "x": 3.25, "y": 0 },
- { "label": "2", "matrix": [0, 4], "w": 1, "x": 4.25, "y": 0 },
- { "label": "3", "matrix": [0, 5], "w": 1, "x": 5.25, "y": 0 },
- { "label": "4", "matrix": [0, 6], "w": 1, "x": 6.25, "y": 0 },
- { "label": "5", "matrix": [0, 7], "w": 1, "x": 7.25, "y": 0 },
- { "label": "6", "matrix": [0, 8], "w": 1, "x": 8.25, "y": 0 },
- { "label": "7", "matrix": [5, 0], "w": 1, "x": 10.25, "y": 0 },
- { "label": "8", "matrix": [5, 1], "w": 1, "x": 11.25, "y": 0 },
- { "label": "9", "matrix": [5, 2], "w": 1, "x": 12.25, "y": 0 },
- { "label": "0", "matrix": [5, 3], "w": 1, "x": 13.25, "y": 0 },
- { "label": "-", "matrix": [5, 4], "w": 1, "x": 14.25, "y": 0 },
- { "label": "=", "matrix": [5, 5], "w": 1, "x": 15.25, "y": 0 },
- { "label": "Bksp", "matrix": [5, 7], "w": 2, "x": 17.25, "y": 0 },
- { "label": "Del", "matrix": [5, 8], "w": 1, "x": 18.25, "y": 0 },
- { "label": "F3", "matrix": [1, 0], "w": 1, "x": 0, "y": 1 },
- { "label": "F4", "matrix": [1, 1], "w": 1, "x": 1, "y": 1 },
- { "label": "Tab", "matrix": [1, 2], "w": 1.5, "x": 2.25, "y": 1 },
- { "label": "Q", "matrix": [1, 3], "w": 1, "x": 3.75, "y": 1 },
- { "label": "W", "matrix": [1, 4], "w": 1, "x": 4.75, "y": 1 },
- { "label": "E", "matrix": [1, 5], "w": 1, "x": 5.75, "y": 1 },
- { "label": "R", "matrix": [1, 6], "w": 1, "x": 6.75, "y": 1 },
- { "label": "T", "matrix": [1, 7], "w": 1, "x": 7.75, "y": 1 },
- { "label": "Y", "matrix": [6, 0], "w": 1, "x": 9.75, "y": 1 },
- { "label": "U", "matrix": [6, 1], "w": 1, "x": 10.75, "y": 1 },
- { "label": "I", "matrix": [6, 2], "w": 1, "x": 11.75, "y": 1 },
- { "label": "O", "matrix": [6, 3], "w": 1, "x": 12.75, "y": 1 },
- { "label": "P", "matrix": [6, 4], "w": 1, "x": 13.75, "y": 1 },
- { "label": "{", "matrix": [6, 5], "w": 1, "x": 14.75, "y": 1 },
- { "label": "}", "matrix": [6, 6], "w": 1, "x": 15.75, "y": 1 },
- { "label": "|", "matrix": [6, 7], "w": 1.5, "x": 16.75, "y": 1 },
- { "label": "Home", "matrix": [6, 8], "w": 1, "x": 18.25, "y": 1 },
- { "label": "F5", "matrix": [2, 0], "w": 1, "x": 0, "y": 2 },
- { "label": "F6", "matrix": [2, 1], "w": 1, "x": 1, "y": 2 },
- { "label": "Caps Lock", "matrix": [2, 2], "w": 1.75, "x": 2.25, "y": 2 },
- { "label": "A", "matrix": [2, 3], "w": 1, "x": 4, "y": 2 },
- { "label": "S", "matrix": [2, 4], "w": 1, "x": 5, "y": 2 },
- { "label": "D", "matrix": [2, 5], "w": 1, "x": 6, "y": 2 },
- { "label": "F", "matrix": [2, 6], "w": 1, "x": 7, "y": 2 },
- { "label": "G", "matrix": [2, 7], "w": 1, "x": 8, "y": 2 },
- { "label": "H", "matrix": [7, 0], "w": 1, "x": 10, "y": 2 },
- { "label": "J", "matrix": [7, 1], "w": 1, "x": 11, "y": 2 },
- { "label": "K", "matrix": [7, 2], "w": 1, "x": 12, "y": 2 },
- { "label": "L", "matrix": [7, 3], "w": 1, "x": 13, "y": 2 },
- { "label": ":", "matrix": [7, 4], "w": 1, "x": 14, "y": 2 },
- { "label": "\"", "matrix": [7, 5], "w": 1, "x": 15, "y": 2 },
- { "label": "Enter", "matrix": [7, 7], "w": 2.25, "x": 16, "y": 2 },
- { "label": "PgUp", "matrix": [7, 8], "w": 1, "x": 18.25, "y": 2 },
- { "label": "F7", "matrix": [3, 0], "w": 1, "x": 0, "y": 3 },
- { "label": "F8", "matrix": [3, 1], "w": 1, "x": 1, "y": 3 },
- { "label": "Shift", "matrix": [3, 2], "w": 2.25, "x": 2.25, "y": 3 },
- { "label": "Z", "matrix": [3, 4], "w": 1, "x": 4.5, "y": 3 },
- { "label": "X", "matrix": [3, 5], "w": 1, "x": 5.5, "y": 3 },
- { "label": "C", "matrix": [3, 6], "w": 1, "x": 6.5, "y": 3 },
- { "label": "V", "matrix": [3, 7], "w": 1, "x": 7.5, "y": 3 },
- { "label": "B", "matrix": [3, 8], "w": 1, "x": 8.5, "y": 3 },
- { "label": "N", "matrix": [8, 0], "w": 1, "x": 10.5, "y": 3 },
- { "label": "M", "matrix": [8, 1], "w": 1, "x": 11.5, "y": 3 },
- { "label": ",", "matrix": [8, 2], "w": 1, "x": 12.5, "y": 3 },
- { "label": ".", "matrix": [8, 3], "w": 1, "x": 13.5, "y": 3 },
- { "label": "/", "matrix": [8, 4], "w": 1, "x": 14.5, "y": 3 },
- { "label": "Shift", "matrix": [8, 6], "w": 1.75, "x": 15.5, "y": 3 },
- { "label": "Up", "matrix": [8, 7], "w": 1, "x": 17.25, "y": 3 },
- { "label": "PgDn", "matrix": [8, 8], "w": 1, "x": 18.25, "y": 3 },
- { "label": "F9", "matrix": [4, 0], "w": 1, "x": 0, "y": 4 },
- { "label": "F10", "matrix": [4, 1], "w": 1, "x": 1, "y": 4 },
- { "label": "Ctrl", "matrix": [4, 2], "w": 1.25, "x": 2.25, "y": 4 },
- { "label": "Win", "matrix": [4, 3], "w": 1.25, "x": 3.5, "y": 4 },
- { "label": "Alt", "matrix": [4, 4], "w": 1.25, "x": 4.75, "y": 4 },
- { "label": "Fn", "matrix": [4, 5], "w": 1.25, "x": 6, "y": 4 },
- { "label": "Space", "matrix": [4, 7], "w": 1, "x": 7.25, "y": 4 },
- { "label": "Space", "matrix": [9, 1], "w": 1.5, "x": 11.75, "y": 4 },
- { "label": "Alt", "matrix": [9, 2], "w": 1, "x": 13.25, "y": 4 },
- { "label": "Fn", "matrix": [9, 3], "w": 1, "x": 14.25, "y": 4 },
- { "label": "Ctrl", "matrix": [9, 4], "w": 1, "x": 15.25, "y": 4 },
- { "label": "Left", "matrix": [9, 6], "w": 1, "x": 16.25, "y": 4 },
- { "label": "Down", "matrix": [9, 7], "w": 1, "x": 17.25, "y": 4 },
- { "label": "Right", "matrix": [9, 8], "w": 1, "x": 18.25, "y": 4 }
+ {"label": "F1", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F2", "matrix": [0, 1], "x": 1, "y": 0},
+
+ {"label": "Esc", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "1", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "2", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "3", "matrix": [0, 5], "x": 5.25, "y": 0},
+ {"label": "4", "matrix": [0, 6], "x": 6.25, "y": 0},
+ {"label": "5", "matrix": [0, 7], "x": 7.25, "y": 0},
+ {"label": "6", "matrix": [0, 8], "x": 8.25, "y": 0},
+
+ {"label": "7", "matrix": [5, 0], "x": 10.25, "y": 0},
+ {"label": "8", "matrix": [5, 1], "x": 11.25, "y": 0},
+ {"label": "9", "matrix": [5, 2], "x": 12.25, "y": 0},
+ {"label": "0", "matrix": [5, 3], "x": 13.25, "y": 0},
+ {"label": "-", "matrix": [5, 4], "x": 14.25, "y": 0},
+ {"label": "=", "matrix": [5, 5], "x": 15.25, "y": 0},
+ {"label": "Bksp", "matrix": [5, 7], "x": 16.25, "y": 0, "w": 2},
+ {"label": "Del", "matrix": [5, 8], "x": 18.25, "y": 0},
+
+ {"label": "F3", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "F4", "matrix": [1, 1], "x": 1, "y": 1},
+
+ {"label": "Tab", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 3], "x": 3.75, "y": 1},
+ {"label": "W", "matrix": [1, 4], "x": 4.75, "y": 1},
+ {"label": "E", "matrix": [1, 5], "x": 5.75, "y": 1},
+ {"label": "R", "matrix": [1, 6], "x": 6.75, "y": 1},
+ {"label": "T", "matrix": [1, 7], "x": 7.75, "y": 1},
+
+ {"label": "Y", "matrix": [6, 0], "x": 9.75, "y": 1},
+ {"label": "U", "matrix": [6, 1], "x": 10.75, "y": 1},
+ {"label": "I", "matrix": [6, 2], "x": 11.75, "y": 1},
+ {"label": "O", "matrix": [6, 3], "x": 12.75, "y": 1},
+ {"label": "P", "matrix": [6, 4], "x": 13.75, "y": 1},
+ {"label": "{", "matrix": [6, 5], "x": 14.75, "y": 1},
+ {"label": "}", "matrix": [6, 6], "x": 15.75, "y": 1},
+ {"label": "|", "matrix": [6, 7], "x": 16.75, "y": 1, "w": 1.5},
+ {"label": "Home", "matrix": [6, 8], "x": 18.25, "y": 1},
+
+ {"label": "F5", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "F6", "matrix": [2, 1], "x": 1, "y": 2},
+
+ {"label": "Caps Lock", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 3], "x": 4, "y": 2},
+ {"label": "S", "matrix": [2, 4], "x": 5, "y": 2},
+ {"label": "D", "matrix": [2, 5], "x": 6, "y": 2},
+ {"label": "F", "matrix": [2, 6], "x": 7, "y": 2},
+ {"label": "G", "matrix": [2, 7], "x": 8, "y": 2},
+
+ {"label": "H", "matrix": [7, 0], "x": 10, "y": 2},
+ {"label": "J", "matrix": [7, 1], "x": 11, "y": 2},
+ {"label": "K", "matrix": [7, 2], "x": 12, "y": 2},
+ {"label": "L", "matrix": [7, 3], "x": 13, "y": 2},
+ {"label": ":", "matrix": [7, 4], "x": 14, "y": 2},
+ {"label": "\"", "matrix": [7, 5], "x": 15, "y": 2},
+ {"label": "Enter", "matrix": [7, 7], "x": 16, "y": 2, "w": 2.25},
+ {"label": "PgUp", "matrix": [7, 8], "x": 18.25, "y": 2},
+
+ {"label": "F7", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "F8", "matrix": [3, 1], "x": 1, "y": 3},
+
+ {"label": "Shift", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 4], "x": 4.5, "y": 3},
+ {"label": "X", "matrix": [3, 5], "x": 5.5, "y": 3},
+ {"label": "C", "matrix": [3, 6], "x": 6.5, "y": 3},
+ {"label": "V", "matrix": [3, 7], "x": 7.5, "y": 3},
+ {"label": "B", "matrix": [3, 8], "x": 8.5, "y": 3},
+
+ {"label": "N", "matrix": [8, 0], "x": 10.5, "y": 3},
+ {"label": "M", "matrix": [8, 1], "x": 11.5, "y": 3},
+ {"label": ",", "matrix": [8, 2], "x": 12.5, "y": 3},
+ {"label": ".", "matrix": [8, 3], "x": 13.5, "y": 3},
+ {"label": "/", "matrix": [8, 4], "x": 14.5, "y": 3},
+ {"label": "Shift", "matrix": [8, 6], "x": 15.5, "y": 3, "w": 1.75},
+ {"label": "Up", "matrix": [8, 7], "x": 17.25, "y": 3},
+ {"label": "PgDn", "matrix": [8, 8], "x": 18.25, "y": 3},
+
+ {"label": "F9", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "F10", "matrix": [4, 1], "x": 1, "y": 4},
+
+ {"label": "Ctrl", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 3], "x": 3.5, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.25},
+ {"label": "Fn", "matrix": [4, 5], "x": 6, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 7], "x": 7.25, "y": 4, "w": 2.25},
+
+ {"label": "Space", "matrix": [9, 1], "x": 10.5, "y": 4, "w": 2.25},
+ {"label": "Alt", "matrix": [9, 2], "x": 12.75, "y": 4, "w": 1.25},
+ {"label": "Fn", "matrix": [9, 3], "x": 14, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [9, 4], "x": 15.25, "y": 4},
+ {"label": "Left", "matrix": [9, 6], "x": 16.25, "y": 4},
+ {"label": "Down", "matrix": [9, 7], "x": 17.25, "y": 4},
+ {"label": "Right", "matrix": [9, 8], "x": 18.25, "y": 4}
]
}
},
@@ -206,7 +220,7 @@
{"flags":2, "x":166, "y":64},
{"matrix": [9,2], "flags":4, "x":158, "y":60},
{"matrix": [9,1], "flags":4, "x":137, "y":60},
- {"flags":2, "x":126, "y":64},
+ {"flags":2, "x":126, "y":64}
]
}
}
diff --git a/keyboards/keebio/chocopad/config.h b/keyboards/keebio/chocopad/config.h
deleted file mode 100644
index 14c93278a611..000000000000
--- a/keyboards/keebio/chocopad/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#pragma once
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-#define RGBLIGHT_EFFECT_BREATHING
-#define RGBLIGHT_EFFECT_RAINBOW_MOOD
-#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#define RGBLIGHT_EFFECT_SNAKE
-#define RGBLIGHT_EFFECT_KNIGHT
-#define RGBLIGHT_EFFECT_CHRISTMAS
-#define RGBLIGHT_EFFECT_STATIC_GRADIENT
-#define RGBLIGHT_EFFECT_RGB_TEST
-#define RGBLIGHT_EFFECT_ALTERNATING
-#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#define RGBLED_NUM 4
diff --git a/keyboards/keebio/chocopad/info.json b/keyboards/keebio/chocopad/info.json
index 44d846da74a8..f9d48d6422e3 100644
--- a/keyboards/keebio/chocopad/info.json
+++ b/keyboards/keebio/chocopad/info.json
@@ -1,27 +1,10 @@
{
- "keyboard_name": "Chocopad",
"manufacturer": "Keebio",
- "url": "",
- "maintainer": "qmk",
+ "url": "https://keeb.io",
+ "maintainer": "nooges",
"usb": {
- "vid": "0xCB10",
- "pid": "0x1144",
- "device_version": "1.0.0"
+ "vid": "0xCB10"
},
- "matrix_pins": {
- "cols": ["D2", "D4", "F6", "F5"],
- "rows": ["D7", "E6", "B3", "B2"]
- },
- "diode_direction": "COL2ROW",
- "backlight": {
- "pin": "B5",
- "levels": 6
- },
- "ws2812": {
- "pin": "D3"
- },
- "processor": "atmega32u4",
- "bootloader": "caterina",
"community_layouts": ["ortho_4x4"],
"layouts": {
"LAYOUT_ortho_4x4": {
diff --git a/keyboards/keebio/chocopad/keymaps/default/keymap.c b/keyboards/keebio/chocopad/keymaps/default/keymap.c
index b89246adf03d..8c83d72cfe67 100644
--- a/keyboards/keebio/chocopad/keymaps/default/keymap.c
+++ b/keyboards/keebio/chocopad/keymaps/default/keymap.c
@@ -1,3 +1,6 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#include QMK_KEYBOARD_H
#define _BASE 0
diff --git a/keyboards/keebio/chocopad/keymaps/khord/rules.mk b/keyboards/keebio/chocopad/keymaps/khord/rules.mk
deleted file mode 100644
index a81250cdf6d9..000000000000
--- a/keyboards/keebio/chocopad/keymaps/khord/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-RGBLIGHT_ENABLE = yes
-
diff --git a/keyboards/keebio/chocopad/keymaps/via/config.h b/keyboards/keebio/chocopad/keymaps/via/config.h
new file mode 100644
index 000000000000..1dcf49c979ad
--- /dev/null
+++ b/keyboards/keebio/chocopad/keymaps/via/config.h
@@ -0,0 +1,7 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_PINWHEEL
+#define RGB_MATRIX_DEFAULT_SPD 48
diff --git a/keyboards/keebio/chocopad/keymaps/via/keymap.c b/keyboards/keebio/chocopad/keymaps/via/keymap.c
new file mode 100644
index 000000000000..18de1ad43d51
--- /dev/null
+++ b/keyboards/keebio/chocopad/keymaps/via/keymap.c
@@ -0,0 +1,20 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ortho_4x4(
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PERC,
+ KC_P1, KC_P2, KC_P3, KC_EQL,
+ KC_P0, MO(1), KC_PDOT, KC_PENT
+ ),
+ [1] = LAYOUT_ortho_4x4(
+ RGB_TOG, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_PGUP, KC_HOME, KC_UP, KC_END,
+ KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT,
+ RGB_MOD, _______, KC_VOLD, KC_VOLU
+ )
+};
diff --git a/keyboards/keebio/chocopad/keymaps/via/rules.mk b/keyboards/keebio/chocopad/keymaps/via/rules.mk
new file mode 100644
index 000000000000..36b7ba9cbc98
--- /dev/null
+++ b/keyboards/keebio/chocopad/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/keebio/chocopad/readme.md b/keyboards/keebio/chocopad/readme.md
index 3cdb3b3b9c8a..67c875d923b1 100644
--- a/keyboards/keebio/chocopad/readme.md
+++ b/keyboards/keebio/chocopad/readme.md
@@ -9,6 +9,6 @@ Hardware Availability: [Keebio](https://keeb.io)
Make example for this keyboard (after setting up your build environment):
- make keebio/chocopad:default
+ make keebio/chocopad/rev1:default
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/keebio/chocopad/rev1/info.json b/keyboards/keebio/chocopad/rev1/info.json
new file mode 100644
index 000000000000..fafea9dce062
--- /dev/null
+++ b/keyboards/keebio/chocopad/rev1/info.json
@@ -0,0 +1,41 @@
+{
+ "keyboard_name": "Chocopad Rev. 1",
+ "usb": {
+ "pid": "0x1144",
+ "device_version": "1.0.0"
+ },
+ "development_board": "promicro",
+ "matrix_pins": {
+ "cols": ["D2", "D4", "F6", "F5"],
+ "rows": ["D7", "E6", "B3", "B2"]
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "mousekey": true,
+ "backlight": true,
+ "rgblight": true
+ },
+ "backlight": {
+ "pin": "B5",
+ "levels": 6
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "rgblight": {
+ "led_count": 4,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ }
+}
diff --git a/keyboards/keebio/chocopad/chocopad.c b/keyboards/keebio/chocopad/rev1/rev1.c
similarity index 84%
rename from keyboards/keebio/chocopad/chocopad.c
rename to keyboards/keebio/chocopad/rev1/rev1.c
index b52c8608ca2a..e362bb3483c6 100644
--- a/keyboards/keebio/chocopad/chocopad.c
+++ b/keyboards/keebio/chocopad/rev1/rev1.c
@@ -1,3 +1,6 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#include "quantum.h"
void eeconfig_init_kb(void) {
diff --git a/keyboards/keebio/chocopad/rev1/rules.mk b/keyboards/keebio/chocopad/rev1/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/keebio/chocopad/rev1/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/keebio/chocopad/rev2/config.h b/keyboards/keebio/chocopad/rev2/config.h
new file mode 100644
index 000000000000..366d639bf0bb
--- /dev/null
+++ b/keyboards/keebio/chocopad/rev2/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+
+// RGB Matrix
+#define RGB_MATRIX_LED_COUNT 20
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/keebio/chocopad/rev2/info.json b/keyboards/keebio/chocopad/rev2/info.json
new file mode 100644
index 000000000000..cb29d0e83cb0
--- /dev/null
+++ b/keyboards/keebio/chocopad/rev2/info.json
@@ -0,0 +1,93 @@
+{
+ "keyboard_name": "Chocopad Rev. 2",
+ "usb": {
+ "pid": "0x2144",
+ "device_version": "2.0.0"
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP20", "GP19", "GP29", "GP0"],
+ "rows": ["GP28", "GP18", "GP17", "GP16"]
+ },
+ "ws2812": {
+ "pin": "GP15",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ {"matrix": [0, 0], "flags": 4, "x": 0, "y": 0},
+ {"flags": 2, "x": 37, "y": 0},
+ {"matrix": [0, 1], "flags": 4, "x": 75, "y": 0},
+ {"matrix": [0, 2], "flags": 4, "x": 149, "y": 0},
+ {"flags": 2, "x": 187, "y": 0},
+ {"matrix": [0, 3], "flags": 4, "x": 224, "y": 0},
+ {"matrix": [1, 3], "flags": 4, "x": 224, "y": 21},
+ {"matrix": [1, 2], "flags": 4, "x": 149, "y": 21},
+ {"matrix": [1, 1], "flags": 4, "x": 75, "y": 21},
+ {"matrix": [1, 0], "flags": 4, "x": 0, "y": 21},
+ {"matrix": [2, 0], "flags": 4, "x": 0, "y": 43},
+ {"matrix": [2, 1], "flags": 4, "x": 75, "y": 43},
+ {"matrix": [2, 2], "flags": 4, "x": 149, "y": 43},
+ {"matrix": [2, 3], "flags": 4, "x": 224, "y": 43},
+ {"matrix": [3, 3], "flags": 4, "x": 224, "y": 64},
+ {"flags": 2, "x": 187, "y": 64},
+ {"matrix": [3, 2], "flags": 4, "x": 149, "y": 64},
+ {"matrix": [3, 1], "flags": 4, "x": 75, "y": 64},
+ {"flags": 2, "x": 37, "y": 64},
+ {"matrix": [3, 0], "flags": 4, "x": 0, "y": 64}
+ ]
+ }
+}
diff --git a/keyboards/keebio/chocopad/rev2/rules.mk b/keyboards/keebio/chocopad/rev2/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/keebio/chocopad/rev2/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/keebio/chocopad/rules.mk b/keyboards/keebio/chocopad/rules.mk
deleted file mode 100644
index ce70b7c8f239..000000000000
--- a/keyboards/keebio/chocopad/rules.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/keebio/iris/keymaps/mattly/config.h b/keyboards/keebio/iris/keymaps/mattly/config.h
index 1680f3d8f8ab..a3ee1ec898e4 100644
--- a/keyboards/keebio/iris/keymaps/mattly/config.h
+++ b/keyboards/keebio/iris/keymaps/mattly/config.h
@@ -22,15 +22,16 @@ along with this program. If not, see .
#undef RGBLED_NUM
#define RGBLIGHT_EFFECT_BREATHING
-#define RGBLIGHT_EFFECT_RAINBOW_MOOD
-#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#define RGBLIGHT_EFFECT_SNAKE
-#define RGBLIGHT_EFFECT_KNIGHT
-#define RGBLIGHT_EFFECT_CHRISTMAS
-#define RGBLIGHT_EFFECT_STATIC_GRADIENT
-#define RGBLIGHT_EFFECT_RGB_TEST
-#define RGBLIGHT_EFFECT_ALTERNATING
-#define RGBLIGHT_EFFECT_TWINKLE
+#undef RGBLIGHT_EFFECT_RAINBOW_MOOD
+#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#undef RGBLIGHT_EFFECT_KNIGHT
+#undef RGBLIGHT_EFFECT_CHRISTMAS
+#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
+#undef RGBLIGHT_EFFECT_RGB_TEST
+#undef RGBLIGHT_EFFECT_ALTERNATING
+#undef RGBLIGHT_EFFECT_TWINKLE
+#undef RGBLIGHT_DEFAULT_MODE
+#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_BREATHING + 2)
#define RGBLED_NUM 12
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
diff --git a/keyboards/keebio/iris/keymaps/mattly/keymap.c b/keyboards/keebio/iris/keymaps/mattly/keymap.c
index f592b4f25add..0f7121b7be23 100644
--- a/keyboards/keebio/iris/keymaps/mattly/keymap.c
+++ b/keyboards/keebio/iris/keymaps/mattly/keymap.c
@@ -11,7 +11,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_CAPS, A_CTL, S_ALT, D_GUI, F_SFT, KC_G, KC_H, J_SFT, K_GUI, L_ALT, MINSCTL, KC_QUOT,
NAVLOCK, KC_Z, KC_X, KC_C, KC_V, KC_B, ENT_SYM, TAB_NUM, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
ESC_HYP, TAB_NUM, SPC_SFT, SPC_SFT, BSP_SYM, DEL_WRP
- ),
+),
[_OVER_WIN] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -30,31 +30,39 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[_NAVNUM] = LAYOUT(
- XXXXXXX, XXXXXXX, XXXXXXX, M_NXWIN, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLSH, KC_ASTR, KC_MINS, KC_PLUS, XXXXXXX,
- XXXXXXX, M_NAVFW, M_BWORD, KC_UP, M_FWORD, KC_PGUP, KC_DLR, KC_P7, KC_P8, KC_P9, KC_DOT, XXXXXXX,
+ M_PVWIN, M_NXWIN, XXXXXXX, M_BPARA, XXXXXXX, KC_HOME, XXXXXXX, KC_SLSH, KC_ASTR, KC_MINS, KC_PLUS, XXXXXXX,
+ M_PVTAB, M_NAVFW, M_BWORD, KC_UP, M_FWORD, KC_PGUP, KC_DLR, KC_P7, KC_P8, KC_P9, KC_DOT, XXXXXXX,
XXXXXXX, M_NAVBK, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_PERC, KC_P4, KC_P5, KC_P6, KC_EQL, XXXXXXX,
- _______, M_PVTAB, KC_HOME, M_PVWIN, KC_END, M_NXTAB, _______, _______, KC_P0, KC_P1, KC_P2, KC_P3, KC_COMM, _______,
+ _______, M_NAVFW, M_BLINE, M_NPARA, M_ELINE, KC_END, _______, _______, KC_P0, KC_P1, KC_P2, KC_P3, KC_COMM, _______,
_______, _______, _______, _______, _______, KC_P0
),
[_NAVNUM_WIN] = LAYOUT(
- _______, _______, _______, W_NXWIN, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, W_NAVFW, W_BWORD, _______, W_FWORD, _______, _______, _______, _______, _______, _______, _______,
_______, W_NAVBK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, W_PVTAB, _______, W_PVWIN, _______, W_NXTAB, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
+ [_GAME] = LAYOUT(
+ KC_BSPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SCLN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_MINS, KC_QUOT,
+ KC_ESC, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_NAVNUM), MO(_SYMBOL), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_SPC, KC_LGUI, KC_LSFT
+ ),
+
[_FUNCT] = LAYOUT(
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- QK_BOOT, XXXXXXX, XXXXXXX, M_NXWIN, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_K, QK_BOOT,
- DB_TOGG, XXXXXXX, M_PVTAB, M_PVWIN, M_NXTAB, XXXXXXX, XXXXXXX, TOG_WIN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- KC_MUTE, KC_VOLD, KC_VOLU, KC_MRWD, KC_MFFD, KC_MPLY, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ QK_BOOT, M_NAVFW, XXXXXXX, M_NXWIN, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_M_P, RGB_M_B, XXXXXXX, QK_BOOT,
+ DB_TOGG, M_NAVBK, M_PVTAB, M_PVWIN, M_NXTAB, XXXXXXX, XXXXXXX, TOG_WIN, TOG_GAM, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_MUTE, KC_VOLD, KC_VOLU, KC_MRWD, KC_MFFD, KC_MPLY, _______, _______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD,
_______, _______, _______, _______, _______, _______
),
[_FUNCT_WIN] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, W_NXWIN, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, W_PVTAB, W_PVWIN, W_NXTAB, _______, _______, _______, _______, _______, _______, _______,
+ _______, W_NAVFW, _______, W_NXWIN, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, W_NAVBK, W_PVTAB, W_PVWIN, W_NXTAB, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
diff --git a/keyboards/keebio/iris/keymaps/via/keymap.c b/keyboards/keebio/iris/keymaps/via/keymap.c
index 7f793333cc50..c2753da2a45a 100644
--- a/keyboards/keebio/iris/keymaps/via/keymap.c
+++ b/keyboards/keebio/iris/keymaps/via/keymap.c
@@ -71,8 +71,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
-# if defined(KEYBOARD_keebio_iris_rev7)
- [_MAIN] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_PGDN, KC_PGUP) },
+# if defined(KEYBOARD_keebio_iris_rev7) || defined(KEYBOARD_keebio_iris_rev8)
+ [_MAIN] = { ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGDN, KC_PGUP) },
[_FN1] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_HOME, KC_END), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_HOME, KC_END) },
[_FN2] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
[_FN3] = { ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(KC_UP, KC_DOWN), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT), ENCODER_CCW_CW(KC_UP, KC_DOWN) },
diff --git a/keyboards/keebio/iris/rev8/config.h b/keyboards/keebio/iris/rev8/config.h
new file mode 100644
index 000000000000..a49b48d14ba0
--- /dev/null
+++ b/keyboards/keebio/iris/rev8/config.h
@@ -0,0 +1,23 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define SPLIT_HAND_PIN GP4
+#define USB_VBUS_PIN GP8
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP12
+#define SERIAL_USART_RX_PIN GP13
+#define SERIAL_USART_PIN_SWAP
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+#define I2C_DRIVER I2CD2
+#define I2C1_SDA_PIN GP10
+#define I2C1_SCL_PIN GP11
+
+// RGB Matrix
+#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+#define RGB_MATRIX_LED_COUNT 68
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/keebio/iris/rev8/info.json b/keyboards/keebio/iris/rev8/info.json
new file mode 100644
index 000000000000..198e4fd56f58
--- /dev/null
+++ b/keyboards/keebio/iris/rev8/info.json
@@ -0,0 +1,242 @@
+{
+ "keyboard_name": "Iris Rev. 8",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {"pin_a": "GP14", "pin_b": "GP15"},
+ {"pin_a": "GP26", "pin_b": "GP25"}
+ ]
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP9"
+ },
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP29", "GP27", "GP6", "GP5"],
+ "rows": ["GP0", "GP1", "GP7", "GP16", "GP28"]
+ },
+ "split": {
+ "enabled": true,
+ "matrix_pins": {
+ "right": {
+ "cols": ["GP27", "GP28", "GP3", "GP6", "GP29", "GP16"],
+ "rows": ["GP22", "GP19", "GP18", "GP17", "GP7"]
+ }
+ },
+ "transport": {
+ "sync_matrix_state": true
+ }
+ },
+ "processor": "RP2040",
+ "usb": {
+ "device_version": "8.0.0",
+ "pid": "0x8256"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.375},
+ {"matrix": [0, 1], "x": 1, "y": 0.375},
+ {"matrix": [0, 2], "x": 2, "y": 0.125},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.125},
+ {"matrix": [0, 5], "x": 5, "y": 0.25},
+
+ {"matrix": [5, 5], "x": 9, "y": 0.25},
+ {"matrix": [5, 4], "x": 10, "y": 0.125},
+ {"matrix": [5, 3], "x": 11, "y": 0},
+ {"matrix": [5, 2], "x": 12, "y": 0.125},
+ {"matrix": [5, 1], "x": 13, "y": 0.375},
+ {"matrix": [5, 0], "x": 14, "y": 0.375},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.375},
+ {"matrix": [1, 1], "x": 1, "y": 1.375},
+ {"matrix": [1, 2], "x": 2, "y": 1.125},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.125},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+
+ {"matrix": [6, 5], "x": 9, "y": 1.25},
+ {"matrix": [6, 4], "x": 10, "y": 1.125},
+ {"matrix": [6, 3], "x": 11, "y": 1},
+ {"matrix": [6, 2], "x": 12, "y": 1.125},
+ {"matrix": [6, 1], "x": 13, "y": 1.375},
+ {"matrix": [6, 0], "x": 14, "y": 1.375},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.375},
+ {"matrix": [2, 1], "x": 1, "y": 2.375},
+ {"matrix": [2, 2], "x": 2, "y": 2.125},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.125},
+ {"matrix": [2, 5], "x": 5, "y": 2.25},
+
+ {"matrix": [7, 5], "x": 9, "y": 2.25},
+ {"matrix": [7, 4], "x": 10, "y": 2.125},
+ {"matrix": [7, 3], "x": 11, "y": 2},
+ {"matrix": [7, 2], "x": 12, "y": 2.125},
+ {"matrix": [7, 1], "x": 13, "y": 2.375},
+ {"matrix": [7, 0], "x": 14, "y": 2.375},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.375},
+ {"matrix": [3, 1], "x": 1, "y": 3.375},
+ {"matrix": [3, 2], "x": 2, "y": 3.125},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3.125},
+ {"matrix": [3, 5], "x": 5, "y": 3.25},
+ {"matrix": [4, 5], "x": 6.15, "y": 3.75},
+
+ {"matrix": [9, 5], "x": 7.85, "y": 3.75},
+ {"matrix": [8, 5], "x": 9, "y": 3.25},
+ {"matrix": [8, 4], "x": 10, "y": 3.125},
+ {"matrix": [8, 3], "x": 11, "y": 3},
+ {"matrix": [8, 2], "x": 12, "y": 3.125},
+ {"matrix": [8, 1], "x": 13, "y": 3.375},
+ {"matrix": [8, 0], "x": 14, "y": 3.375},
+
+ {"matrix": [4, 2], "x": 3.5, "y": 4.25},
+ {"matrix": [4, 3], "x": 4.5, "y": 4.375},
+ {"matrix": [4, 4], "x": 5.6, "y": 4.75},
+
+ {"matrix": [9, 4], "x": 8.4, "y": 4.75},
+ {"matrix": [9, 3], "x": 9.5, "y": 4.375},
+ {"matrix": [9, 2], "x": 10.5, "y": 4.25}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "WS2812",
+ "split_count": [34, 34],
+ "max_brightness": 120,
+ "layout": [
+ {"matrix": [0,0], "flags":4, "x":0, "y":5},
+ {"flags":2, "x":8, "y":5},
+ {"matrix": [0,1], "flags":4, "x":16, "y":5},
+ {"matrix": [0,2], "flags":4, "x":32, "y":2},
+ {"flags":2, "x":40, "y":1},
+ {"matrix": [0,3], "flags":4, "x":48, "y":0},
+ {"matrix": [0,4], "flags":4, "x":64, "y":5},
+ {"flags":2, "x":72, "y":3},
+ {"matrix": [0,5], "flags":4, "x":80, "y":3},
+
+ {"matrix": [1,5], "flags":4, "x":80, "y":17},
+ {"matrix": [1,4], "flags":4, "x":64, "y":15},
+ {"matrix": [1,3], "flags":4, "x":48, "y":13},
+ {"matrix": [1,2], "flags":4, "x":32, "y":15},
+ {"matrix": [1,1], "flags":4, "x":16, "y":18},
+ {"matrix": [1,0], "flags":4, "x":0, "y":18},
+
+ {"matrix": [2,0], "flags":4, "x":0, "y":32},
+ {"matrix": [2,1], "flags":4, "x":16, "y":32},
+ {"matrix": [2,2], "flags":4, "x":32, "y":28},
+ {"matrix": [2,3], "flags":4, "x":48, "y":27},
+ {"matrix": [2,4], "flags":4, "x":64, "y":28},
+ {"matrix": [2,5], "flags":4, "x":80, "y":30},
+
+ {"matrix": [3,5], "flags":4, "x":80, "y":43},
+ {"matrix": [3,4], "flags":4, "x":64, "y":42},
+ {"matrix": [3,3], "flags":4, "x":48, "y":40},
+ {"flags":2, "x":40, "y":50},
+ {"matrix": [3,2], "flags":4, "x":32, "y":42},
+ {"matrix": [3,1], "flags":4, "x":16, "y":45},
+ {"flags":2, "x":8, "y":43},
+ {"matrix": [3,0], "flags":4, "x":0, "y":45},
+
+ {"matrix": [4,5], "flags":4, "x":98, "y":52},
+ {"matrix": [4,4], "flags":4, "x":90, "y":64},
+ {"flags":2, "x":80, "y":58},
+ {"matrix": [4,3], "flags":4, "x":72, "y":58},
+ {"matrix": [4,2], "flags":4, "x":56, "y":47},
+
+ {"matrix": [5,0], "flags":4, "x":224, "y":5},
+ {"flags":2, "x":216, "y":5},
+ {"matrix": [5,1], "flags":4, "x":208, "y":5},
+ {"matrix": [5,2], "flags":4, "x":192, "y":2},
+ {"flags":2, "x":184, "y":1},
+ {"matrix": [5,3], "flags":4, "x":176, "y":0},
+ {"matrix": [5,4], "flags":4, "x":160, "y":5},
+ {"flags":2, "x":152, "y":3},
+ {"matrix": [5,5], "flags":4, "x":144, "y":3},
+
+ {"matrix": [6,5], "flags":4, "x":144, "y":17},
+ {"matrix": [6,4], "flags":4, "x":160, "y":15},
+ {"matrix": [6,3], "flags":4, "x":176, "y":13},
+ {"matrix": [6,2], "flags":4, "x":192, "y":15},
+ {"matrix": [6,1], "flags":4, "x":208, "y":18},
+ {"matrix": [6,0], "flags":4, "x":224, "y":18},
+
+ {"matrix": [7,0], "flags":4, "x":224, "y":32},
+ {"matrix": [7,1], "flags":4, "x":208, "y":32},
+ {"matrix": [7,2], "flags":4, "x":192, "y":28},
+ {"matrix": [7,3], "flags":4, "x":176, "y":27},
+ {"matrix": [7,4], "flags":4, "x":160, "y":28},
+ {"matrix": [7,5], "flags":4, "x":144, "y":30},
+
+ {"matrix": [8,5], "flags":4, "x":144, "y":43},
+ {"matrix": [8,4], "flags":4, "x":160, "y":42},
+ {"matrix": [8,3], "flags":4, "x":176, "y":40},
+ {"flags":2, "x":184, "y":50},
+ {"matrix": [8,2], "flags":4, "x":192, "y":42},
+ {"matrix": [8,1], "flags":4, "x":208, "y":45},
+ {"flags":2, "x":216, "y":43},
+ {"matrix": [8,0], "flags":4, "x":224, "y":45},
+
+ {"matrix": [9,2], "flags":4, "x":168, "y":47},
+ {"matrix": [9,3], "flags":4, "x":152, "y":58},
+ {"flags":2, "x":144, "y":58},
+ {"matrix": [9,4], "flags":4, "x":134, "y":64},
+ {"matrix": [9,5], "flags":4, "x":126, "y":52},
+ ]
+ }
+}
diff --git a/keyboards/keebio/iris/rev8/rev8.c b/keyboards/keebio/iris/rev8/rev8.c
new file mode 100644
index 000000000000..a6f0ac00a0fd
--- /dev/null
+++ b/keyboards/keebio/iris/rev8/rev8.c
@@ -0,0 +1,36 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) { return false; }
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ } else if (index == 2) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 3) {
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+ return false;
+}
+#endif
diff --git a/keyboards/keebio/iris/rev8/rules.mk b/keyboards/keebio/iris/rev8/rules.mk
new file mode 100644
index 000000000000..161ec22b16e2
--- /dev/null
+++ b/keyboards/keebio/iris/rev8/rules.mk
@@ -0,0 +1 @@
+SERIAL_DRIVER = vendor
diff --git a/keyboards/keebio/nyquist/keymaps/default/keymap.c b/keyboards/keebio/nyquist/keymaps/default/keymap.c
index a06cde955534..8bf16240fb1d 100644
--- a/keyboards/keebio/nyquist/keymaps/default/keymap.c
+++ b/keyboards/keebio/nyquist/keymaps/default/keymap.c
@@ -1,5 +1,7 @@
-#include QMK_KEYBOARD_H
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -38,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT(
+[_QWERTY] = LAYOUT_ortho_5x12(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
@@ -59,7 +61,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_COLEMAK] = LAYOUT(
+[_COLEMAK] = LAYOUT_ortho_5x12(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
@@ -80,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_DVORAK] = LAYOUT(
+[_DVORAK] = LAYOUT_ortho_5x12(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL,
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
@@ -101,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = LAYOUT(
+[_LOWER] = LAYOUT_ortho_5x12(
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
@@ -122,7 +124,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = LAYOUT(
+[_RAISE] = LAYOUT_ortho_5x12(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
@@ -143,9 +145,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_ADJUST] = LAYOUT(
+[_ADJUST] = LAYOUT_ortho_5x12(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- _______, QK_BOOT , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, KC_DEL,
+ _______, QK_BOOT, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, KC_DEL,
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
@@ -225,3 +227,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return true;
}
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
+ [_COLEMAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
+ [_DVORAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
+ [_LOWER] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD), ENCODER_CCW_CW(KC_MNXT, KC_MPRV) },
+ [_RAISE] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
+ [_ADJUST] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }
+};
+#endif
diff --git a/keyboards/keebio/nyquist/keymaps/default/rules.mk b/keyboards/keebio/nyquist/keymaps/default/rules.mk
index 1e3cebb14515..ee325681483f 100644
--- a/keyboards/keebio/nyquist/keymaps/default/rules.mk
+++ b/keyboards/keebio/nyquist/keymaps/default/rules.mk
@@ -1 +1 @@
-RGBLIGHT_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keebio/nyquist/keymaps/default_4x12/keymap.c b/keyboards/keebio/nyquist/keymaps/default_4x12/keymap.c
index ac270cdc50b4..5d284d978718 100644
--- a/keyboards/keebio/nyquist/keymaps/default_4x12/keymap.c
+++ b/keyboards/keebio/nyquist/keymaps/default_4x12/keymap.c
@@ -1,3 +1,6 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#include QMK_KEYBOARD_H
enum layer_names {
diff --git a/keyboards/keebio/nyquist/keymaps/via/keymap.c b/keyboards/keebio/nyquist/keymaps/via/keymap.c
index 5d986e69a0a3..6d37f4f9b5c6 100644
--- a/keyboards/keebio/nyquist/keymaps/via/keymap.c
+++ b/keyboards/keebio/nyquist/keymaps/via/keymap.c
@@ -44,3 +44,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
+ [1] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD), ENCODER_CCW_CW(KC_MNXT, KC_MPRV) },
+ [2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
+ [3] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }
+};
+#endif
diff --git a/keyboards/keebio/nyquist/keymaps/via/rules.mk b/keyboards/keebio/nyquist/keymaps/via/rules.mk
index 43061db1dd46..1189f4ad1927 100644
--- a/keyboards/keebio/nyquist/keymaps/via/rules.mk
+++ b/keyboards/keebio/nyquist/keymaps/via/rules.mk
@@ -1,2 +1,3 @@
VIA_ENABLE = yes
-LTO_ENABLE = yes
\ No newline at end of file
+LTO_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keebio/nyquist/rev4/config.h b/keyboards/keebio/nyquist/rev4/config.h
new file mode 100644
index 000000000000..a1dc02997f64
--- /dev/null
+++ b/keyboards/keebio/nyquist/rev4/config.h
@@ -0,0 +1,23 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define SPLIT_HAND_PIN GP23
+#define USB_VBUS_PIN GP18
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP8
+#define SERIAL_USART_RX_PIN GP9
+#define SERIAL_USART_PIN_SWAP
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+#define I2C_DRIVER I2CD0
+#define I2C0_SDA_PIN GP4
+#define I2C0_SCL_PIN GP5
+
+// RGB Matrix
+#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+#define RGB_MATRIX_LED_COUNT 72
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/keebio/nyquist/rev4/info.json b/keyboards/keebio/nyquist/rev4/info.json
new file mode 100644
index 000000000000..1788f3427f4c
--- /dev/null
+++ b/keyboards/keebio/nyquist/rev4/info.json
@@ -0,0 +1,315 @@
+{
+ "keyboard_name": "Nyquist Rev. 4",
+ "usb": {
+ "pid": "0x4156",
+ "device_version": "4.0.0"
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "mousekey": true,
+ "extrakey": true,
+ "rgb_matrix": true
+ },
+ "split": {
+ "enabled": true,
+ "encoder": {
+ "right": {
+ "rotary": [
+ {"pin_a": "GP1", "pin_b": "GP0" }
+ ]
+ }
+ },
+ "matrix_pins": {
+ "right":{
+ "cols": ["GP25", "GP29", "GP20", "GP11", "GP3", "GP2"],
+ "rows": ["GP24", "GP17", "GP15", "GP14", "GP12"]
+ }
+ },
+ "transport": {
+ "sync_matrix_state": true
+ }
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP22", "GP0", "GP3", "GP11", "GP6"],
+ "rows": ["GP2", "GP1", "GP17", "GP25", "GP24"]
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {"pin_a": "GP26", "pin_b": "GP27" }
+ ]
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP28"
+ },
+ "layouts": {
+ "LAYOUT_ortho_5x12": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+
+ {"matrix": [9, 0], "x": 7, "y": 4},
+ {"matrix": [9, 1], "x": 8, "y": 4},
+ {"matrix": [9, 2], "x": 9, "y": 4},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_ortho_4x12": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "split_count": [36, 36],
+ "max_brightness": 120,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ { "flags": 4, "matrix": [0, 0], "x": 9, "y": 6 },
+ { "flags": 4, "matrix": [0, 1], "x": 28, "y": 6 },
+ { "flags": 4, "matrix": [0, 2], "x": 46, "y": 6 },
+ { "flags": 2, "x": 56, "y": 6 },
+ { "flags": 4, "matrix": [0, 3], "x": 65, "y": 6 },
+ { "flags": 4, "matrix": [0, 4], "x": 84, "y": 6 },
+ { "flags": 4, "matrix": [0, 5], "x": 102, "y": 6 },
+
+ { "flags": 4, "matrix": [1, 5], "x": 102, "y": 19 },
+ { "flags": 2, "x": 93, "y": 12 },
+ { "flags": 4, "matrix": [1, 4], "x": 84, "y": 19 },
+ { "flags": 4, "matrix": [1, 3], "x": 65, "y": 19 },
+ { "flags": 4, "matrix": [1, 2], "x": 46, "y": 19 },
+ { "flags": 4, "matrix": [1, 1], "x": 28, "y": 19 },
+ { "flags": 2, "x": 18, "y": 12 },
+ { "flags": 4, "matrix": [1, 0], "x": 9, "y": 19 },
+
+ { "flags": 4, "matrix": [2, 0], "x": 9, "y": 32 },
+ { "flags": 4, "matrix": [2, 1], "x": 28, "y": 32 },
+ { "flags": 4, "matrix": [2, 2], "x": 46, "y": 32 },
+ { "flags": 4, "matrix": [2, 3], "x": 65, "y": 32 },
+ { "flags": 4, "matrix": [2, 4], "x": 84, "y": 32 },
+ { "flags": 4, "matrix": [2, 5], "x": 102, "y": 32 },
+
+ { "flags": 4, "matrix": [3, 5], "x": 102, "y": 44 },
+ { "flags": 2, "x": 93, "y": 44 },
+ { "flags": 4, "matrix": [3, 4], "x": 84, "y": 44 },
+ { "flags": 4, "matrix": [3, 3], "x": 65, "y": 44 },
+ { "flags": 2, "x": 56, "y": 44 },
+ { "flags": 4, "matrix": [3, 2], "x": 46, "y": 44 },
+ { "flags": 4, "matrix": [3, 1], "x": 28, "y": 44 },
+ { "flags": 2, "x": 18, "y": 44 },
+ { "flags": 4, "matrix": [3, 0], "x": 9, "y": 44 },
+
+ { "flags": 4, "matrix": [4, 0], "x": 9, "y": 57 },
+ { "flags": 4, "matrix": [4, 1], "x": 28, "y": 57 },
+ { "flags": 4, "matrix": [4, 2], "x": 46, "y": 57 },
+ { "flags": 4, "matrix": [4, 3], "x": 65, "y": 57 },
+ { "flags": 4, "matrix": [4, 4], "x": 81, "y": 57 },
+ { "flags": 4, "matrix": [4, 5], "x": 105, "y": 57 },
+
+ { "flags": 4, "matrix": [5, 0], "x": 121, "y": 6 },
+ { "flags": 4, "matrix": [5, 1], "x": 140, "y": 6 },
+ { "flags": 4, "matrix": [5, 2], "x": 158, "y": 6 },
+ { "flags": 2, "x": 168, "y": 6 },
+ { "flags": 4, "matrix": [5, 3], "x": 177, "y": 6 },
+ { "flags": 4, "matrix": [5, 4], "x": 196, "y": 6 },
+ { "flags": 4, "matrix": [5, 5], "x": 214, "y": 6 },
+
+ { "flags": 4, "matrix": [6, 5], "x": 214, "y": 19 },
+ { "flags": 2, "x": 205, "y": 12 },
+ { "flags": 4, "matrix": [6, 4], "x": 196, "y": 19 },
+ { "flags": 4, "matrix": [6, 3], "x": 177, "y": 19 },
+ { "flags": 4, "matrix": [6, 2], "x": 158, "y": 19 },
+ { "flags": 4, "matrix": [6, 1], "x": 140, "y": 19 },
+ { "flags": 2, "x": 130, "y": 12 },
+ { "flags": 4, "matrix": [6, 0], "x": 121, "y": 19 },
+
+ { "flags": 4, "matrix": [7, 0], "x": 121, "y": 32 },
+ { "flags": 4, "matrix": [7, 1], "x": 140, "y": 32 },
+ { "flags": 4, "matrix": [7, 2], "x": 158, "y": 32 },
+ { "flags": 4, "matrix": [7, 3], "x": 177, "y": 32 },
+ { "flags": 4, "matrix": [7, 4], "x": 196, "y": 32 },
+ { "flags": 4, "matrix": [7, 5], "x": 214, "y": 32 },
+
+ { "flags": 4, "matrix": [8, 5], "x": 214, "y": 44 },
+ { "flags": 2, "x": 205, "y": 44 },
+ { "flags": 4, "matrix": [8, 4], "x": 196, "y": 44 },
+ { "flags": 4, "matrix": [8, 3], "x": 177, "y": 44 },
+ { "flags": 2, "x": 168, "y": 44 },
+ { "flags": 4, "matrix": [8, 2], "x": 158, "y": 44 },
+ { "flags": 4, "matrix": [8, 1], "x": 140, "y": 44 },
+ { "flags": 2, "x": 130, "y": 44 },
+ { "flags": 4, "matrix": [8, 0], "x": 121, "y": 44 },
+
+ { "flags": 4, "matrix": [9, 0], "x": 121, "y": 57 },
+ { "flags": 4, "matrix": [9, 1], "x": 140, "y": 57 },
+ { "flags": 4, "matrix": [9, 2], "x": 158, "y": 57 },
+ { "flags": 4, "matrix": [9, 3], "x": 177, "y": 57 },
+ { "flags": 4, "matrix": [9, 4], "x": 196, "y": 57 },
+ { "flags": 4, "matrix": [9, 5], "x": 214, "y": 57 }
+ ]
+ }
+}
diff --git a/keyboards/keebio/nyquist/rev4/rules.mk b/keyboards/keebio/nyquist/rev4/rules.mk
new file mode 100644
index 000000000000..161ec22b16e2
--- /dev/null
+++ b/keyboards/keebio/nyquist/rev4/rules.mk
@@ -0,0 +1 @@
+SERIAL_DRIVER = vendor
diff --git a/keyboards/keebio/nyquistpad/config.h b/keyboards/keebio/nyquistpad/config.h
new file mode 100644
index 000000000000..82a64e39bffd
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+
+// RGB Matrix
+#define RGB_MATRIX_LED_COUNT 36
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/keebio/nyquistpad/info.json b/keyboards/keebio/nyquistpad/info.json
new file mode 100644
index 000000000000..2e077caed348
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/info.json
@@ -0,0 +1,161 @@
+{
+ "manufacturer": "Keebio",
+ "url": "https://keeb.io",
+ "maintainer": "nooges",
+ "keyboard_name": "Nyquistpad",
+ "usb": {
+ "vid": "0xCB10",
+ "pid": "0x1356",
+ "device_version": "1.0.0"
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP22", "GP0", "GP3", "GP11", "GP6"],
+ "rows": ["GP2", "GP1", "GP17", "GP25", "GP24"]
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {"pin_a": "GP26", "pin_b": "GP27" }
+ ]
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP28"
+ },
+
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ { "flags": 4, "matrix": [0, 0], "x": 18, "y": 6 },
+ { "flags": 4, "matrix": [0, 1], "x": 56, "y": 6 },
+ { "flags": 4, "matrix": [0, 2], "x": 92, "y": 6 },
+ { "flags": 2, "x": 112, "y": 6 },
+ { "flags": 4, "matrix": [0, 3], "x": 130, "y": 6 },
+ { "flags": 4, "matrix": [0, 4], "x": 168, "y": 6 },
+ { "flags": 4, "matrix": [0, 5], "x": 204, "y": 6 },
+
+ { "flags": 4, "matrix": [1, 5], "x": 204, "y": 19 },
+ { "flags": 2, "x": 186, "y": 12 },
+ { "flags": 4, "matrix": [1, 4], "x": 168, "y": 19 },
+ { "flags": 4, "matrix": [1, 3], "x": 130, "y": 19 },
+ { "flags": 4, "matrix": [1, 2], "x": 92, "y": 19 },
+ { "flags": 4, "matrix": [1, 1], "x": 56, "y": 19 },
+ { "flags": 2, "x": 36, "y": 12 },
+ { "flags": 4, "matrix": [1, 0], "x": 18, "y": 19 },
+
+ { "flags": 4, "matrix": [2, 0], "x": 18, "y": 32 },
+ { "flags": 4, "matrix": [2, 1], "x": 56, "y": 32 },
+ { "flags": 4, "matrix": [2, 2], "x": 92, "y": 32 },
+ { "flags": 4, "matrix": [2, 3], "x": 130, "y": 32 },
+ { "flags": 4, "matrix": [2, 4], "x": 168, "y": 32 },
+ { "flags": 4, "matrix": [2, 5], "x": 204, "y": 32 },
+
+ { "flags": 4, "matrix": [3, 5], "x": 204, "y": 44 },
+ { "flags": 2, "x": 186, "y": 44 },
+ { "flags": 4, "matrix": [3, 4], "x": 168, "y": 44 },
+ { "flags": 4, "matrix": [3, 3], "x": 130, "y": 44 },
+ { "flags": 2, "x": 112, "y": 44 },
+ { "flags": 4, "matrix": [3, 2], "x": 92, "y": 44 },
+ { "flags": 4, "matrix": [3, 1], "x": 56, "y": 44 },
+ { "flags": 2, "x": 36, "y": 44 },
+ { "flags": 4, "matrix": [3, 0], "x": 18, "y": 44 },
+
+ { "flags": 4, "matrix": [4, 0], "x": 18, "y": 57 },
+ { "flags": 4, "matrix": [4, 1], "x": 56, "y": 57 },
+ { "flags": 4, "matrix": [4, 2], "x": 92, "y": 57 },
+ { "flags": 4, "matrix": [4, 3], "x": 130, "y": 57 },
+ { "flags": 4, "matrix": [4, 4], "x": 192, "y": 57 },
+ { "flags": 4, "matrix": [4, 5], "x": 210, "y": 57 }
+ ]
+ }
+}
diff --git a/keyboards/keebio/nyquistpad/keymaps/default/keymap.c b/keyboards/keebio/nyquistpad/keymaps/default/keymap.c
new file mode 100644
index 000000000000..42b049facda1
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/keymaps/default/keymap.c
@@ -0,0 +1,30 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
+ MO(2), KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC
+ ),
+ [1] = LAYOUT(
+ RGB_MOD, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, KC_VOLU, KC_PGUP,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_PGDN,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT(
+ KC_F6, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/keebio/nyquistpad/keymaps/via/keymap.c b/keyboards/keebio/nyquistpad/keymaps/via/keymap.c
new file mode 100644
index 000000000000..42b049facda1
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/keymaps/via/keymap.c
@@ -0,0 +1,30 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
+ MO(2), KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC
+ ),
+ [1] = LAYOUT(
+ RGB_MOD, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, KC_VOLU, KC_PGUP,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_PGDN,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT(
+ KC_F6, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/keebio/nyquistpad/keymaps/via/rules.mk b/keyboards/keebio/nyquistpad/keymaps/via/rules.mk
new file mode 100644
index 000000000000..36b7ba9cbc98
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/keebio/nyquistpad/readme.md b/keyboards/keebio/nyquistpad/readme.md
new file mode 100644
index 000000000000..39c9a678c8ba
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/readme.md
@@ -0,0 +1,25 @@
+# Nyquistpad
+
+A 5x6 macropad keyboard based off of a prototype Nyquist PCB.
+
+* Keyboard Maintainer: Keebio
+* Hardware Supported: Nyquistpad PCB
+* Hardware Availability: [Keebio](https://keeb.io/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keebio/nyquistpad:default
+
+Flashing example for this keyboard:
+
+ make keebio/nyquistpad:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Press and hold the button on the back of the PCB for at least 2 seconds and let go, or double-press the button
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/keebio/nyquistpad/rules.mk b/keyboards/keebio/nyquistpad/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/keebio/nyquistpad/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/keebio/sinc/keymaps/default/keymap.c b/keyboards/keebio/sinc/keymaps/default/keymap.c
index 20c12a4a6e46..171b7a7d057a 100644
--- a/keyboards/keebio/sinc/keymaps/default/keymap.c
+++ b/keyboards/keebio/sinc/keymaps/default/keymap.c
@@ -1,3 +1,6 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/keebio/sinc/keymaps/iso/keymap.c b/keyboards/keebio/sinc/keymaps/iso/keymap.c
index f7ad1047bf26..f3eaaa5bca0c 100644
--- a/keyboards/keebio/sinc/keymaps/iso/keymap.c
+++ b/keyboards/keebio/sinc/keymaps/iso/keymap.c
@@ -1,3 +1,6 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/keebio/sinc/keymaps/via/keymap.c b/keyboards/keebio/sinc/keymaps/via/keymap.c
index 2a54d1aa5a3d..a1299ce112ba 100644
--- a/keyboards/keebio/sinc/keymaps/via/keymap.c
+++ b/keyboards/keebio/sinc/keymaps/via/keymap.c
@@ -1,3 +1,6 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/keebio/sinc/rev4/config.h b/keyboards/keebio/sinc/rev4/config.h
new file mode 100644
index 000000000000..b6c5785f4cfa
--- /dev/null
+++ b/keyboards/keebio/sinc/rev4/config.h
@@ -0,0 +1,72 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define SPLIT_HAND_PIN GP4
+#define USB_VBUS_PIN GP14
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
+#define SERIAL_USART_PIN_SWAP
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+#define I2C_DRIVER I2CD1
+#define I2C1_SDA_PIN GP22
+#define I2C1_SCL_PIN GP23
+
+// RGB Matrix
+#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_FRACTAL
+#define ENABLE_RGB_MATRIX_PIXEL_RAIN
+#define ENABLE_RGB_MATRIX_PIXEL_FLOW
+#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+#define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120
+#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+#define RGB_MATRIX_LED_COUNT 117
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+#define SPLIT_TRANSPORT_MIRROR
diff --git a/keyboards/keebio/sinc/rev4/halconf.h b/keyboards/keebio/sinc/rev4/halconf.h
new file mode 100644
index 000000000000..64036dec35f9
--- /dev/null
+++ b/keyboards/keebio/sinc/rev4/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/keebio/sinc/rev4/info.json b/keyboards/keebio/sinc/rev4/info.json
new file mode 100644
index 000000000000..f985f64e48fe
--- /dev/null
+++ b/keyboards/keebio/sinc/rev4/info.json
@@ -0,0 +1,1146 @@
+{
+ "keyboard_name": "Sinc Rev. 4",
+ "usb": {
+ "pid": "0x4267",
+ "device_version": "4.0.0"
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "console": true,
+ "rgb_matrix": true
+ },
+ "split": {
+ "enabled": true,
+ "encoder": {
+ "right": {
+ "rotary": [
+ {"pin_a": "GP5", "pin_b": "GP6"}
+ ]
+ }
+ },
+ "matrix_pins": {
+ "right": {
+ "cols": ["GP29", "GP28", "GP27", "GP7", "GP2", "GP3", "GP11", "GP12", "GP13"],
+ "rows": ["GP16", "GP19", "GP17", "GP9", "GP8", "GP26"]
+ }
+ }
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP28", "GP27", "GP7", "GP2", "GP3", "GP11", "GP12", "GP13"],
+ "rows": ["GP25", "GP19", "GP24", "GP17", "GP16", "GP26"]
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {"pin_a": "GP21", "pin_b": "GP20"}
+ ]
+ },
+ "ws2812": {
+ "pin": "GP18",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "split_count": [58, 59],
+ "layout": [
+ {"flags": 4, "matrix": [5, 2], "x": 30, "y": 0},
+ {"flags": 2, "x": 42, "y": 6},
+ {"flags": 4, "matrix": [5, 3], "x": 45, "y": 0},
+ {"flags": 4, "matrix": [5, 4], "x": 58, "y": 0},
+ {"flags": 2, "x": 67, "y": 6},
+ {"flags": 4, "matrix": [5, 5], "x": 70, "y": 0},
+ {"flags": 4, "matrix": [5, 6], "x": 82, "y": 0},
+ {"flags": 4, "matrix": [5, 7], "x": 97, "y": 0},
+ {"flags": 2, "x": 103, "y": 6},
+ {"flags": 4, "matrix": [5, 8], "x": 109, "y": 0},
+
+ {"flags": 4, "matrix": [0, 8], "x": 103, "y": 15},
+ {"flags": 4, "matrix": [0, 7], "x": 91, "y": 15},
+ {"flags": 4, "matrix": [0, 6], "x": 79, "y": 15},
+ {"flags": 4, "matrix": [0, 5], "x": 67, "y": 15},
+ {"flags": 4, "matrix": [0, 4], "x": 54, "y": 15},
+ {"flags": 4, "matrix": [0, 3], "x": 42, "y": 15},
+ {"flags": 4, "matrix": [0, 2], "x": 30, "y": 15},
+
+ {"flags": 4, "matrix": [1, 2], "x": 33, "y": 27},
+ {"flags": 4, "matrix": [1, 3], "x": 48, "y": 27},
+ {"flags": 4, "matrix": [1, 4], "x": 61, "y": 27},
+ {"flags": 4, "matrix": [1, 5], "x": 73, "y": 27},
+ {"flags": 4, "matrix": [1, 6], "x": 85, "y": 27},
+ {"flags": 4, "matrix": [1, 7], "x": 97, "y": 27},
+
+ {"flags": 4, "matrix": [2, 7], "x": 100, "y": 40},
+ {"flags": 4, "matrix": [2, 6], "x": 88, "y": 40},
+ {"flags": 4, "matrix": [2, 5], "x": 76, "y": 40},
+ {"flags": 4, "matrix": [2, 4], "x": 64, "y": 40},
+ {"flags": 4, "matrix": [2, 3], "x": 51, "y": 40},
+ {"flags": 4, "matrix": [2, 2], "x": 35, "y": 40},
+
+ {"flags": 4, "matrix": [3, 2], "x": 38, "y": 52},
+ {"flags": 4, "matrix": [3, 4], "x": 58, "y": 52},
+ {"flags": 4, "matrix": [3, 5], "x": 70, "y": 52},
+ {"flags": 4, "matrix": [3, 6], "x": 82, "y": 52},
+ {"flags": 4, "matrix": [3, 7], "x": 94, "y": 52},
+ {"flags": 2, "x": 100, "y": 55},
+ {"flags": 4, "matrix": [3, 8], "x": 106, "y": 52},
+
+ {"flags": 4, "x": 107, "y": 64},
+ {"flags": 4, "matrix": [4, 7], "x": 97, "y": 64},
+ {"flags": 4, "matrix": [4, 6], "x": 85, "y": 64},
+ {"flags": 4, "matrix": [4, 5], "x": 75, "y": 64},
+ {"flags": 2, "x": 70, "y": 64},
+ {"flags": 4, "matrix": [4, 4], "x": 62, "y": 64},
+ {"flags": 4, "matrix": [4, 3], "x": 47, "y": 64},
+ {"flags": 2, "x": 39, "y": 64},
+ {"flags": 4, "matrix": [4, 2], "x": 32, "y": 64},
+
+ {"flags": 4, "matrix": [4, 1], "x": 12, "y": 64},
+ {"flags": 2, "x": 6, "y": 64},
+ {"flags": 4, "matrix": [4, 0], "x": 0, "y": 64},
+
+ {"flags": 4, "matrix": [3, 0], "x": 0, "y": 52},
+ {"flags": 4, "matrix": [3, 1], "x": 12, "y": 52},
+ {"flags": 4, "matrix": [2, 1], "x": 12, "y": 40},
+ {"flags": 4, "matrix": [2, 0], "x": 0, "y": 40},
+ {"flags": 4, "matrix": [1, 0], "x": 0, "y": 27},
+ {"flags": 4, "matrix": [1, 1], "x": 12, "y": 27},
+ {"flags": 4, "matrix": [0, 1], "x": 12, "y": 15},
+ {"flags": 4, "matrix": [0, 0], "x": 0, "y": 15},
+ {"flags": 4, "matrix": [5, 0], "x": 0, "y": 0},
+ {"flags": 2, "x": 9, "y": 0},
+
+ {"flags": 2, "x": 224, "y": 6},
+ {"flags": 4, "matrix": [11, 8], "x": 224, "y": 0},
+ {"flags": 4, "matrix": [11, 7], "x": 212, "y": 0},
+ {"flags": 4, "matrix": [11, 6], "x": 197, "y": 0},
+ {"flags": 2, "x": 191, "y": 6},
+ {"flags": 4, "matrix": [11, 5], "x": 185, "y": 0},
+ {"flags": 4, "matrix": [11, 4], "x": 173, "y": 0},
+ {"flags": 2, "x": 166, "y": 6},
+ {"flags": 4, "matrix": [11, 3], "x": 160, "y": 0},
+ {"flags": 4, "matrix": [11, 2], "x": 145, "y": 0},
+ {"flags": 2, "x": 139, "y": 6},
+ {"flags": 4, "matrix": [11, 1], "x": 133, "y": 0},
+
+ {"flags": 4, "matrix": [6, 0], "x": 127, "y": 15},
+ {"flags": 4, "matrix": [6, 1], "x": 139, "y": 15},
+ {"flags": 4, "matrix": [6, 2], "x": 151, "y": 15},
+ {"flags": 4, "matrix": [6, 3], "x": 163, "y": 15},
+ {"flags": 4, "matrix": [6, 4], "x": 176, "y": 15},
+ {"flags": 4, "matrix": [6, 5], "x": 188, "y": 15},
+ {"flags": 4, "matrix": [6, 6], "x": 200, "y": 15},
+ {"flags": 4, "matrix": [6, 7], "x": 212, "y": 15},
+ {"flags": 4, "matrix": [6, 8], "x": 224, "y": 15},
+
+ {"flags": 4, "matrix": [7, 8], "x": 224, "y": 27},
+ {"flags": 4, "matrix": [7, 7], "x": 209, "y": 27},
+ {"flags": 4, "matrix": [7, 6], "x": 194, "y": 27},
+ {"flags": 4, "matrix": [7, 5], "x": 182, "y": 27},
+ {"flags": 4, "matrix": [7, 4], "x": 170, "y": 27},
+ {"flags": 4, "matrix": [7, 3], "x": 157, "y": 27},
+ {"flags": 4, "matrix": [7, 2], "x": 145, "y": 27},
+ {"flags": 4, "matrix": [7, 1], "x": 133, "y": 27},
+ {"flags": 4, "matrix": [7, 0], "x": 121, "y": 27},
+
+ {"flags": 4, "matrix": [8, 0], "x": 124, "y": 40},
+ {"flags": 4, "matrix": [8, 1], "x": 136, "y": 40},
+ {"flags": 4, "matrix": [8, 2], "x": 148, "y": 40},
+ {"flags": 4, "matrix": [8, 3], "x": 160, "y": 40},
+ {"flags": 4, "matrix": [8, 4], "x": 173, "y": 40},
+ {"flags": 4, "matrix": [8, 5], "x": 185, "y": 40},
+ {"flags": 4, "matrix": [8, 7], "x": 204, "y": 40},
+ {"flags": 4, "matrix": [8, 8], "x": 224, "y": 40},
+
+ {"flags": 4, "matrix": [9, 8], "x": 224, "y": 52},
+ {"flags": 4, "matrix": [9, 7], "x": 212, "y": 52},
+ {"flags": 4, "matrix": [9, 6], "x": 195, "y": 52},
+ {"flags": 4, "matrix": [9, 4], "x": 179, "y": 52},
+ {"flags": 4, "matrix": [9, 3], "x": 166, "y": 52},
+ {"flags": 4, "matrix": [9, 2], "x": 154, "y": 52},
+ {"flags": 4, "matrix": [9, 1], "x": 142, "y": 52},
+ {"flags": 4, "matrix": [9, 0], "x": 130, "y": 52},
+
+ {"flags": 2, "x": 136, "y": 55},
+ {"flags": 4, "matrix": [10, 0], "x": 132, "y": 64},
+ {"flags": 4, "matrix": [10, 1], "x": 139, "y": 64},
+ {"flags": 4, "x": 148, "y": 64},
+ {"flags": 2, "x": 154, "y": 64},
+ {"flags": 4, "matrix": [10, 2], "x": 163, "y": 64},
+ {"flags": 4, "matrix": [10, 3], "x": 176, "y": 64},
+ {"flags": 4, "matrix": [10, 4], "x": 188, "y": 64},
+ {"flags": 2, "x": 194, "y": 64},
+ {"flags": 4, "matrix": [10, 6], "x": 200, "y": 64},
+ {"flags": 4, "matrix": [10, 7], "x": 212, "y": 64},
+ {"flags": 4, "matrix": [10, 8], "x": 224, "y": 64},
+ {"flags": 2, "x": 224, "y": 55}
+ ]
+ },
+ "layouts": {
+ "LAYOUT_75": {
+ "layout": [
+ {"matrix": [5, 2], "x": 0, "y": 0},
+ {"matrix": [5, 3], "x": 1.25, "y": 0},
+ {"matrix": [5, 4], "x": 2.25, "y": 0},
+ {"matrix": [5, 5], "x": 3.25, "y": 0},
+ {"matrix": [5, 6], "x": 4.25, "y": 0},
+ {"matrix": [5, 7], "x": 5.5, "y": 0},
+ {"matrix": [5, 8], "x": 6.5, "y": 0},
+
+ {"matrix": [11, 1], "x": 8.5, "y": 0},
+ {"matrix": [11, 2], "x": 9.5, "y": 0},
+ {"matrix": [11, 3], "x": 10.75, "y": 0},
+ {"matrix": [11, 4], "x": 11.75, "y": 0},
+ {"matrix": [11, 5], "x": 12.75, "y": 0},
+ {"matrix": [11, 6], "x": 13.75, "y": 0},
+ {"matrix": [11, 7], "x": 15, "y": 0},
+
+ {"matrix": [0, 2], "x": 0, "y": 1.25},
+ {"matrix": [0, 3], "x": 1, "y": 1.25},
+ {"matrix": [0, 4], "x": 2, "y": 1.25},
+ {"matrix": [0, 5], "x": 3, "y": 1.25},
+ {"matrix": [0, 6], "x": 4, "y": 1.25},
+ {"matrix": [0, 7], "x": 5, "y": 1.25},
+ {"matrix": [0, 8], "x": 6, "y": 1.25},
+
+ {"matrix": [6, 0], "x": 8, "y": 1.25},
+ {"matrix": [6, 1], "x": 9, "y": 1.25},
+ {"matrix": [6, 2], "x": 10, "y": 1.25},
+ {"matrix": [6, 3], "x": 11, "y": 1.25},
+ {"matrix": [6, 4], "x": 12, "y": 1.25},
+ {"matrix": [6, 5], "x": 13, "y": 1.25},
+ {"matrix": [6, 6], "x": 14, "y": 1.25},
+ {"matrix": [6, 7], "x": 15, "y": 1.25},
+
+ {"matrix": [1, 2], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [1, 3], "x": 1.5, "y": 2.25},
+ {"matrix": [1, 4], "x": 2.5, "y": 2.25},
+ {"matrix": [1, 5], "x": 3.5, "y": 2.25},
+ {"matrix": [1, 6], "x": 4.5, "y": 2.25},
+ {"matrix": [1, 7], "x": 5.5, "y": 2.25},
+
+ {"matrix": [7, 0], "x": 7.5, "y": 2.25},
+ {"matrix": [7, 1], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 2], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 3], "x": 10.5, "y": 2.25},
+ {"matrix": [7, 4], "x": 11.5, "y": 2.25},
+ {"matrix": [7, 5], "x": 12.5, "y": 2.25},
+ {"matrix": [7, 6], "x": 13.5, "y": 2.25},
+ {"matrix": [7, 7], "x": 14.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [2, 2], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [2, 3], "x": 1.75, "y": 3.25},
+ {"matrix": [2, 4], "x": 2.75, "y": 3.25},
+ {"matrix": [2, 5], "x": 3.75, "y": 3.25},
+ {"matrix": [2, 6], "x": 4.75, "y": 3.25},
+ {"matrix": [2, 7], "x": 5.75, "y": 3.25},
+
+ {"matrix": [8, 0], "x": 7.75, "y": 3.25},
+ {"matrix": [8, 1], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 2], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 3], "x": 10.75, "y": 3.25},
+ {"matrix": [8, 4], "x": 11.75, "y": 3.25},
+ {"matrix": [8, 5], "x": 12.75, "y": 3.25},
+ {"matrix": [8, 7], "x": 13.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [3, 2], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [3, 4], "x": 2.25, "y": 4.25},
+ {"matrix": [3, 5], "x": 3.25, "y": 4.25},
+ {"matrix": [3, 6], "x": 4.25, "y": 4.25},
+ {"matrix": [3, 7], "x": 5.25, "y": 4.25},
+ {"matrix": [3, 8], "x": 6.25, "y": 4.25},
+
+ {"matrix": [9, 0], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 11.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 12.25, "y": 4.25},
+ {"matrix": [9, 6], "x": 13.25, "y": 4.25, "w": 1.75},
+ {"matrix": [9, 7], "x": 15, "y": 4.25},
+
+ {"matrix": [4, 2], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 3], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 4], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 6], "x": 5, "y": 5.25},
+ {"matrix": [4, 7], "x": 6, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 0], "x": 8.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 9.5, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 2], "x": 11, "y": 5.25},
+ {"matrix": [10, 3], "x": 12, "y": 5.25},
+ {"matrix": [10, 4], "x": 13, "y": 5.25},
+ {"matrix": [10, 6], "x": 14, "y": 5.25},
+ {"matrix": [10, 7], "x": 15, "y": 5.25}
+ ]
+ },
+ "LAYOUT_75_iso": {
+ "layout": [
+ {"matrix": [5, 2], "x": 0, "y": 0},
+ {"matrix": [5, 3], "x": 1.25, "y": 0},
+ {"matrix": [5, 4], "x": 2.25, "y": 0},
+ {"matrix": [5, 5], "x": 3.25, "y": 0},
+ {"matrix": [5, 6], "x": 4.25, "y": 0},
+ {"matrix": [5, 7], "x": 5.5, "y": 0},
+ {"matrix": [5, 8], "x": 6.5, "y": 0},
+
+ {"matrix": [11, 1], "x": 8.5, "y": 0},
+ {"matrix": [11, 2], "x": 9.5, "y": 0},
+ {"matrix": [11, 3], "x": 10.75, "y": 0},
+ {"matrix": [11, 4], "x": 11.75, "y": 0},
+ {"matrix": [11, 5], "x": 12.75, "y": 0},
+ {"matrix": [11, 6], "x": 13.75, "y": 0},
+ {"matrix": [11, 7], "x": 15, "y": 0},
+
+ {"matrix": [0, 2], "x": 0, "y": 1.25},
+ {"matrix": [0, 3], "x": 1, "y": 1.25},
+ {"matrix": [0, 4], "x": 2, "y": 1.25},
+ {"matrix": [0, 5], "x": 3, "y": 1.25},
+ {"matrix": [0, 6], "x": 4, "y": 1.25},
+ {"matrix": [0, 7], "x": 5, "y": 1.25},
+ {"matrix": [0, 8], "x": 6, "y": 1.25},
+
+ {"matrix": [6, 0], "x": 8, "y": 1.25},
+ {"matrix": [6, 1], "x": 9, "y": 1.25},
+ {"matrix": [6, 2], "x": 10, "y": 1.25},
+ {"matrix": [6, 3], "x": 11, "y": 1.25},
+ {"matrix": [6, 4], "x": 12, "y": 1.25},
+ {"matrix": [6, 5], "x": 13, "y": 1.25},
+ {"matrix": [6, 6], "x": 14, "y": 1.25},
+ {"matrix": [6, 7], "x": 15, "y": 1.25},
+
+ {"matrix": [1, 2], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [1, 3], "x": 1.5, "y": 2.25},
+ {"matrix": [1, 4], "x": 2.5, "y": 2.25},
+ {"matrix": [1, 5], "x": 3.5, "y": 2.25},
+ {"matrix": [1, 6], "x": 4.5, "y": 2.25},
+ {"matrix": [1, 7], "x": 5.5, "y": 2.25},
+
+ {"matrix": [7, 0], "x": 7.5, "y": 2.25},
+ {"matrix": [7, 1], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 2], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 3], "x": 10.5, "y": 2.25},
+ {"matrix": [7, 4], "x": 11.5, "y": 2.25},
+ {"matrix": [7, 5], "x": 12.5, "y": 2.25},
+ {"matrix": [7, 6], "x": 13.5, "y": 2.25},
+
+ {"matrix": [2, 2], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [2, 3], "x": 1.75, "y": 3.25},
+ {"matrix": [2, 4], "x": 2.75, "y": 3.25},
+ {"matrix": [2, 5], "x": 3.75, "y": 3.25},
+ {"matrix": [2, 6], "x": 4.75, "y": 3.25},
+ {"matrix": [2, 7], "x": 5.75, "y": 3.25},
+
+ {"matrix": [8, 0], "x": 7.75, "y": 3.25},
+ {"matrix": [8, 1], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 2], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 3], "x": 10.75, "y": 3.25},
+ {"matrix": [8, 4], "x": 11.75, "y": 3.25},
+ {"matrix": [8, 5], "x": 12.75, "y": 3.25},
+ {"matrix": [8, 6], "x": 13.75, "y": 3.25},
+ {"matrix": [7, 7], "x": 14.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 2], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [3, 3], "x": 1.25, "y": 4.25},
+ {"matrix": [3, 4], "x": 2.25, "y": 4.25},
+ {"matrix": [3, 5], "x": 3.25, "y": 4.25},
+ {"matrix": [3, 6], "x": 4.25, "y": 4.25},
+ {"matrix": [3, 7], "x": 5.25, "y": 4.25},
+ {"matrix": [3, 8], "x": 6.25, "y": 4.25},
+
+ {"matrix": [9, 0], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 11.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 12.25, "y": 4.25},
+ {"matrix": [9, 6], "x": 13.25, "y": 4.25, "w": 1.75},
+ {"matrix": [9, 7], "x": 15, "y": 4.25},
+
+ {"matrix": [4, 2], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 3], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 4], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 6], "x": 5, "y": 5.25},
+ {"matrix": [4, 7], "x": 6, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 0], "x": 8.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 9.5, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 2], "x": 11, "y": 5.25},
+ {"matrix": [10, 3], "x": 12, "y": 5.25},
+ {"matrix": [10, 4], "x": 13, "y": 5.25},
+ {"matrix": [10, 6], "x": 14, "y": 5.25},
+ {"matrix": [10, 7], "x": 15, "y": 5.25}
+ ]
+ },
+ "LAYOUT_75_iso_with_macro": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 2], "x": 2.25, "y": 0},
+ {"matrix": [5, 3], "x": 3.5, "y": 0},
+ {"matrix": [5, 4], "x": 4.5, "y": 0},
+ {"matrix": [5, 5], "x": 5.5, "y": 0},
+ {"matrix": [5, 6], "x": 6.5, "y": 0},
+ {"matrix": [5, 7], "x": 7.75, "y": 0},
+ {"matrix": [5, 8], "x": 8.75, "y": 0},
+
+ {"matrix": [11, 1], "x": 10.75, "y": 0},
+ {"matrix": [11, 2], "x": 11.75, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 4], "x": 14, "y": 0},
+ {"matrix": [11, 5], "x": 15, "y": 0},
+ {"matrix": [11, 6], "x": 16, "y": 0},
+ {"matrix": [11, 7], "x": 17.25, "y": 0},
+
+ {"matrix": [0, 0], "x": 0, "y": 1.25},
+ {"matrix": [0, 1], "x": 1, "y": 1.25},
+ {"matrix": [0, 2], "x": 2.25, "y": 1.25},
+ {"matrix": [0, 3], "x": 3.25, "y": 1.25},
+ {"matrix": [0, 4], "x": 4.25, "y": 1.25},
+ {"matrix": [0, 5], "x": 5.25, "y": 1.25},
+ {"matrix": [0, 6], "x": 6.25, "y": 1.25},
+ {"matrix": [0, 7], "x": 7.25, "y": 1.25},
+ {"matrix": [0, 8], "x": 8.25, "y": 1.25},
+
+ {"matrix": [6, 0], "x": 10.25, "y": 1.25},
+ {"matrix": [6, 1], "x": 11.25, "y": 1.25},
+ {"matrix": [6, 2], "x": 12.25, "y": 1.25},
+ {"matrix": [6, 3], "x": 13.25, "y": 1.25},
+ {"matrix": [6, 4], "x": 14.25, "y": 1.25},
+ {"matrix": [6, 5], "x": 15.25, "y": 1.25},
+ {"matrix": [6, 6], "x": 16.25, "y": 1.25},
+ {"matrix": [6, 7], "x": 17.25, "y": 1.25},
+
+ {"matrix": [1, 0], "x": 0, "y": 2.25},
+ {"matrix": [1, 1], "x": 1, "y": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 2.25, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 2.25},
+ {"matrix": [1, 4], "x": 4.75, "y": 2.25},
+ {"matrix": [1, 5], "x": 5.75, "y": 2.25},
+ {"matrix": [1, 6], "x": 6.75, "y": 2.25},
+ {"matrix": [1, 7], "x": 7.75, "y": 2.25},
+
+ {"matrix": [7, 0], "x": 9.75, "y": 2.25},
+ {"matrix": [7, 1], "x": 10.75, "y": 2.25},
+ {"matrix": [7, 2], "x": 11.75, "y": 2.25},
+ {"matrix": [7, 3], "x": 12.75, "y": 2.25},
+ {"matrix": [7, 4], "x": 13.75, "y": 2.25},
+ {"matrix": [7, 5], "x": 14.75, "y": 2.25},
+ {"matrix": [7, 6], "x": 15.75, "y": 2.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 3.25},
+ {"matrix": [2, 1], "x": 1, "y": 3.25},
+ {"matrix": [2, 2], "x": 2.25, "y": 3.25, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 3.25},
+ {"matrix": [2, 4], "x": 5, "y": 3.25},
+ {"matrix": [2, 5], "x": 6, "y": 3.25},
+ {"matrix": [2, 6], "x": 7, "y": 3.25},
+ {"matrix": [2, 7], "x": 8, "y": 3.25},
+
+ {"matrix": [8, 0], "x": 10, "y": 3.25},
+ {"matrix": [8, 1], "x": 11, "y": 3.25},
+ {"matrix": [8, 2], "x": 12, "y": 3.25},
+ {"matrix": [8, 3], "x": 13, "y": 3.25},
+ {"matrix": [8, 4], "x": 14, "y": 3.25},
+ {"matrix": [8, 5], "x": 15, "y": 3.25},
+ {"matrix": [8, 6], "x": 16, "y": 3.25},
+ {"matrix": [7, 7], "x": 17, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 4.25},
+ {"matrix": [3, 1], "x": 1, "y": 4.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 4.25, "w": 1.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 4.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 4.25},
+ {"matrix": [3, 5], "x": 5.5, "y": 4.25},
+ {"matrix": [3, 6], "x": 6.5, "y": 4.25},
+ {"matrix": [3, 7], "x": 7.5, "y": 4.25},
+ {"matrix": [3, 8], "x": 8.5, "y": 4.25},
+
+ {"matrix": [9, 0], "x": 10.5, "y": 4.25},
+ {"matrix": [9, 1], "x": 11.5, "y": 4.25},
+ {"matrix": [9, 2], "x": 12.5, "y": 4.25},
+ {"matrix": [9, 3], "x": 13.5, "y": 4.25},
+ {"matrix": [9, 4], "x": 14.5, "y": 4.25},
+ {"matrix": [9, 6], "x": 15.5, "y": 4.25, "w": 1.75},
+ {"matrix": [9, 7], "x": 17.25, "y": 4.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 5.25},
+ {"matrix": [4, 1], "x": 1, "y": 5.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.5, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 4], "x": 4.75, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 5], "x": 6, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 6], "x": 7.25, "y": 5.25},
+ {"matrix": [4, 7], "x": 8.25, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 0], "x": 10.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 11.75, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 2], "x": 13.25, "y": 5.25},
+ {"matrix": [10, 3], "x": 14.25, "y": 5.25},
+ {"matrix": [10, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [10, 6], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 7], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_75_with_macro": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 2], "x": 2.25, "y": 0},
+ {"matrix": [5, 3], "x": 3.5, "y": 0},
+ {"matrix": [5, 4], "x": 4.5, "y": 0},
+ {"matrix": [5, 5], "x": 5.5, "y": 0},
+ {"matrix": [5, 6], "x": 6.5, "y": 0},
+ {"matrix": [5, 7], "x": 7.75, "y": 0},
+ {"matrix": [5, 8], "x": 8.75, "y": 0},
+
+ {"matrix": [11, 1], "x": 10.75, "y": 0},
+ {"matrix": [11, 2], "x": 11.75, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 4], "x": 14, "y": 0},
+ {"matrix": [11, 5], "x": 15, "y": 0},
+ {"matrix": [11, 6], "x": 16, "y": 0},
+ {"matrix": [11, 7], "x": 17.25, "y": 0},
+
+ {"matrix": [0, 0], "x": 0, "y": 1.25},
+ {"matrix": [0, 1], "x": 1, "y": 1.25},
+ {"matrix": [0, 2], "x": 2.25, "y": 1.25},
+ {"matrix": [0, 3], "x": 3.25, "y": 1.25},
+ {"matrix": [0, 4], "x": 4.25, "y": 1.25},
+ {"matrix": [0, 5], "x": 5.25, "y": 1.25},
+ {"matrix": [0, 6], "x": 6.25, "y": 1.25},
+ {"matrix": [0, 7], "x": 7.25, "y": 1.25},
+ {"matrix": [0, 8], "x": 8.25, "y": 1.25},
+
+ {"matrix": [6, 0], "x": 10.25, "y": 1.25},
+ {"matrix": [6, 1], "x": 11.25, "y": 1.25},
+ {"matrix": [6, 2], "x": 12.25, "y": 1.25},
+ {"matrix": [6, 3], "x": 13.25, "y": 1.25},
+ {"matrix": [6, 4], "x": 14.25, "y": 1.25},
+ {"matrix": [6, 5], "x": 15.25, "y": 1.25},
+ {"matrix": [6, 6], "x": 16.25, "y": 1.25},
+ {"matrix": [6, 7], "x": 17.25, "y": 1.25},
+
+ {"matrix": [1, 0], "x": 0, "y": 2.25},
+ {"matrix": [1, 1], "x": 1, "y": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 2.25, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 2.25},
+ {"matrix": [1, 4], "x": 4.75, "y": 2.25},
+ {"matrix": [1, 5], "x": 5.75, "y": 2.25},
+ {"matrix": [1, 6], "x": 6.75, "y": 2.25},
+ {"matrix": [1, 7], "x": 7.75, "y": 2.25},
+
+ {"matrix": [7, 0], "x": 9.75, "y": 2.25},
+ {"matrix": [7, 1], "x": 10.75, "y": 2.25},
+ {"matrix": [7, 2], "x": 11.75, "y": 2.25},
+ {"matrix": [7, 3], "x": 12.75, "y": 2.25},
+ {"matrix": [7, 4], "x": 13.75, "y": 2.25},
+ {"matrix": [7, 5], "x": 14.75, "y": 2.25},
+ {"matrix": [7, 6], "x": 15.75, "y": 2.25},
+ {"matrix": [7, 7], "x": 16.75, "y": 2.25, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 3.25},
+ {"matrix": [2, 1], "x": 1, "y": 3.25},
+ {"matrix": [2, 2], "x": 2.25, "y": 3.25, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 3.25},
+ {"matrix": [2, 4], "x": 5, "y": 3.25},
+ {"matrix": [2, 5], "x": 6, "y": 3.25},
+ {"matrix": [2, 6], "x": 7, "y": 3.25},
+ {"matrix": [2, 7], "x": 8, "y": 3.25},
+
+ {"matrix": [8, 0], "x": 10, "y": 3.25},
+ {"matrix": [8, 1], "x": 11, "y": 3.25},
+ {"matrix": [8, 2], "x": 12, "y": 3.25},
+ {"matrix": [8, 3], "x": 13, "y": 3.25},
+ {"matrix": [8, 4], "x": 14, "y": 3.25},
+ {"matrix": [8, 5], "x": 15, "y": 3.25},
+ {"matrix": [8, 7], "x": 16, "y": 3.25, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 4.25},
+ {"matrix": [3, 1], "x": 1, "y": 4.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 4.25, "w": 2.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 4.25},
+ {"matrix": [3, 5], "x": 5.5, "y": 4.25},
+ {"matrix": [3, 6], "x": 6.5, "y": 4.25},
+ {"matrix": [3, 7], "x": 7.5, "y": 4.25},
+ {"matrix": [3, 8], "x": 8.5, "y": 4.25},
+
+ {"matrix": [9, 0], "x": 10.5, "y": 4.25},
+ {"matrix": [9, 1], "x": 11.5, "y": 4.25},
+ {"matrix": [9, 2], "x": 12.5, "y": 4.25},
+ {"matrix": [9, 3], "x": 13.5, "y": 4.25},
+ {"matrix": [9, 4], "x": 14.5, "y": 4.25},
+ {"matrix": [9, 6], "x": 15.5, "y": 4.25, "w": 1.75},
+ {"matrix": [9, 7], "x": 17.25, "y": 4.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 5.25},
+ {"matrix": [4, 1], "x": 1, "y": 5.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.5, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 4], "x": 4.75, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 5], "x": 6, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 6], "x": 7.25, "y": 5.25},
+ {"matrix": [4, 7], "x": 8.25, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 0], "x": 10.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 11.75, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 2], "x": 13.25, "y": 5.25},
+ {"matrix": [10, 3], "x": 14.25, "y": 5.25},
+ {"matrix": [10, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [10, 6], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 7], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_80": {
+ "layout": [
+ {"matrix": [5, 2], "x": 0, "y": 0},
+ {"matrix": [5, 3], "x": 1.25, "y": 0},
+ {"matrix": [5, 4], "x": 2.25, "y": 0},
+ {"matrix": [5, 5], "x": 3.25, "y": 0},
+ {"matrix": [5, 6], "x": 4.25, "y": 0},
+ {"matrix": [5, 7], "x": 5.5, "y": 0},
+ {"matrix": [5, 8], "x": 6.5, "y": 0},
+
+ {"matrix": [11, 1], "x": 8.5, "y": 0},
+ {"matrix": [11, 2], "x": 9.5, "y": 0},
+ {"matrix": [11, 3], "x": 10.75, "y": 0},
+ {"matrix": [11, 4], "x": 11.75, "y": 0},
+ {"matrix": [11, 5], "x": 12.75, "y": 0},
+ {"matrix": [11, 6], "x": 13.75, "y": 0},
+ {"matrix": [11, 7], "x": 15, "y": 0},
+ {"matrix": [11, 8], "x": 16, "y": 0},
+
+ {"matrix": [0, 2], "x": 0, "y": 1.25},
+ {"matrix": [0, 3], "x": 1, "y": 1.25},
+ {"matrix": [0, 4], "x": 2, "y": 1.25},
+ {"matrix": [0, 5], "x": 3, "y": 1.25},
+ {"matrix": [0, 6], "x": 4, "y": 1.25},
+ {"matrix": [0, 7], "x": 5, "y": 1.25},
+ {"matrix": [0, 8], "x": 6, "y": 1.25},
+
+ {"matrix": [6, 0], "x": 8, "y": 1.25},
+ {"matrix": [6, 1], "x": 9, "y": 1.25},
+ {"matrix": [6, 2], "x": 10, "y": 1.25},
+ {"matrix": [6, 3], "x": 11, "y": 1.25},
+ {"matrix": [6, 4], "x": 12, "y": 1.25},
+ {"matrix": [6, 5], "x": 13, "y": 1.25},
+ {"matrix": [6, 6], "x": 14, "y": 1.25},
+ {"matrix": [6, 7], "x": 15, "y": 1.25},
+ {"matrix": [6, 8], "x": 16, "y": 1.25},
+
+ {"matrix": [1, 2], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [1, 3], "x": 1.5, "y": 2.25},
+ {"matrix": [1, 4], "x": 2.5, "y": 2.25},
+ {"matrix": [1, 5], "x": 3.5, "y": 2.25},
+ {"matrix": [1, 6], "x": 4.5, "y": 2.25},
+ {"matrix": [1, 7], "x": 5.5, "y": 2.25},
+
+ {"matrix": [7, 0], "x": 7.5, "y": 2.25},
+ {"matrix": [7, 1], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 2], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 3], "x": 10.5, "y": 2.25},
+ {"matrix": [7, 4], "x": 11.5, "y": 2.25},
+ {"matrix": [7, 5], "x": 12.5, "y": 2.25},
+ {"matrix": [7, 6], "x": 13.5, "y": 2.25},
+ {"matrix": [7, 7], "x": 14.5, "y": 2.25, "w": 1.5},
+ {"matrix": [7, 8], "x": 16, "y": 2.25},
+
+ {"matrix": [2, 2], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [2, 3], "x": 1.75, "y": 3.25},
+ {"matrix": [2, 4], "x": 2.75, "y": 3.25},
+ {"matrix": [2, 5], "x": 3.75, "y": 3.25},
+ {"matrix": [2, 6], "x": 4.75, "y": 3.25},
+ {"matrix": [2, 7], "x": 5.75, "y": 3.25},
+
+ {"matrix": [8, 0], "x": 7.75, "y": 3.25},
+ {"matrix": [8, 1], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 2], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 3], "x": 10.75, "y": 3.25},
+ {"matrix": [8, 4], "x": 11.75, "y": 3.25},
+ {"matrix": [8, 5], "x": 12.75, "y": 3.25},
+ {"matrix": [8, 7], "x": 13.75, "y": 3.25, "w": 2.25},
+ {"matrix": [8, 8], "x": 16, "y": 3.25},
+
+ {"matrix": [3, 2], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [3, 4], "x": 2.25, "y": 4.25},
+ {"matrix": [3, 5], "x": 3.25, "y": 4.25},
+ {"matrix": [3, 6], "x": 4.25, "y": 4.25},
+ {"matrix": [3, 7], "x": 5.25, "y": 4.25},
+ {"matrix": [3, 8], "x": 6.25, "y": 4.25},
+
+ {"matrix": [9, 0], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 11.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 12.25, "y": 4.25},
+ {"matrix": [9, 6], "x": 13.25, "y": 4.25, "w": 1.75},
+ {"matrix": [9, 7], "x": 15, "y": 4.25},
+ {"matrix": [9, 8], "x": 16, "y": 4.25},
+
+ {"matrix": [4, 2], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 3], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 4], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 6], "x": 5, "y": 5.25},
+ {"matrix": [4, 7], "x": 6, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 0], "x": 8.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 9.5, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 2], "x": 11, "y": 5.25},
+ {"matrix": [10, 3], "x": 12, "y": 5.25},
+ {"matrix": [10, 4], "x": 13, "y": 5.25},
+ {"matrix": [10, 6], "x": 14, "y": 5.25},
+ {"matrix": [10, 7], "x": 15, "y": 5.25},
+ {"matrix": [10, 8], "x": 16, "y": 5.25}
+ ]
+ },
+ "LAYOUT_80_iso": {
+ "layout": [
+ {"matrix": [5, 2], "x": 0, "y": 0},
+ {"matrix": [5, 3], "x": 1.25, "y": 0},
+ {"matrix": [5, 4], "x": 2.25, "y": 0},
+ {"matrix": [5, 5], "x": 3.25, "y": 0},
+ {"matrix": [5, 6], "x": 4.25, "y": 0},
+ {"matrix": [5, 7], "x": 5.5, "y": 0},
+ {"matrix": [5, 8], "x": 6.5, "y": 0},
+
+ {"matrix": [11, 1], "x": 8.5, "y": 0},
+ {"matrix": [11, 2], "x": 9.5, "y": 0},
+ {"matrix": [11, 3], "x": 10.75, "y": 0},
+ {"matrix": [11, 4], "x": 11.75, "y": 0},
+ {"matrix": [11, 5], "x": 12.75, "y": 0},
+ {"matrix": [11, 6], "x": 13.75, "y": 0},
+ {"matrix": [11, 7], "x": 15, "y": 0},
+ {"matrix": [11, 8], "x": 16, "y": 0},
+
+ {"matrix": [0, 2], "x": 0, "y": 1.25},
+ {"matrix": [0, 3], "x": 1, "y": 1.25},
+ {"matrix": [0, 4], "x": 2, "y": 1.25},
+ {"matrix": [0, 5], "x": 3, "y": 1.25},
+ {"matrix": [0, 6], "x": 4, "y": 1.25},
+ {"matrix": [0, 7], "x": 5, "y": 1.25},
+ {"matrix": [0, 8], "x": 6, "y": 1.25},
+
+ {"matrix": [6, 0], "x": 8, "y": 1.25},
+ {"matrix": [6, 1], "x": 9, "y": 1.25},
+ {"matrix": [6, 2], "x": 10, "y": 1.25},
+ {"matrix": [6, 3], "x": 11, "y": 1.25},
+ {"matrix": [6, 4], "x": 12, "y": 1.25},
+ {"matrix": [6, 5], "x": 13, "y": 1.25},
+ {"matrix": [6, 6], "x": 14, "y": 1.25},
+ {"matrix": [6, 7], "x": 15, "y": 1.25},
+ {"matrix": [6, 8], "x": 16, "y": 1.25},
+
+ {"matrix": [1, 2], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [1, 3], "x": 1.5, "y": 2.25},
+ {"matrix": [1, 4], "x": 2.5, "y": 2.25},
+ {"matrix": [1, 5], "x": 3.5, "y": 2.25},
+ {"matrix": [1, 6], "x": 4.5, "y": 2.25},
+ {"matrix": [1, 7], "x": 5.5, "y": 2.25},
+
+ {"matrix": [7, 0], "x": 7.5, "y": 2.25},
+ {"matrix": [7, 1], "x": 8.5, "y": 2.25},
+ {"matrix": [7, 2], "x": 9.5, "y": 2.25},
+ {"matrix": [7, 3], "x": 10.5, "y": 2.25},
+ {"matrix": [7, 4], "x": 11.5, "y": 2.25},
+ {"matrix": [7, 5], "x": 12.5, "y": 2.25},
+ {"matrix": [7, 6], "x": 13.5, "y": 2.25},
+ {"matrix": [7, 8], "x": 16, "y": 2.25},
+
+ {"matrix": [2, 2], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [2, 3], "x": 1.75, "y": 3.25},
+ {"matrix": [2, 4], "x": 2.75, "y": 3.25},
+ {"matrix": [2, 5], "x": 3.75, "y": 3.25},
+ {"matrix": [2, 6], "x": 4.75, "y": 3.25},
+ {"matrix": [2, 7], "x": 5.75, "y": 3.25},
+
+ {"matrix": [8, 0], "x": 7.75, "y": 3.25},
+ {"matrix": [8, 1], "x": 8.75, "y": 3.25},
+ {"matrix": [8, 2], "x": 9.75, "y": 3.25},
+ {"matrix": [8, 3], "x": 10.75, "y": 3.25},
+ {"matrix": [8, 4], "x": 11.75, "y": 3.25},
+ {"matrix": [8, 5], "x": 12.75, "y": 3.25},
+ {"matrix": [8, 6], "x": 13.75, "y": 3.25},
+ {"matrix": [7, 7], "x": 14.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"matrix": [8, 8], "x": 16, "y": 3.25},
+
+ {"matrix": [3, 2], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [3, 3], "x": 1.25, "y": 4.25},
+ {"matrix": [3, 4], "x": 2.25, "y": 4.25},
+ {"matrix": [3, 5], "x": 3.25, "y": 4.25},
+ {"matrix": [3, 6], "x": 4.25, "y": 4.25},
+ {"matrix": [3, 7], "x": 5.25, "y": 4.25},
+ {"matrix": [3, 8], "x": 6.25, "y": 4.25},
+
+ {"matrix": [9, 0], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 9.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 11.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 12.25, "y": 4.25},
+ {"matrix": [9, 6], "x": 13.25, "y": 4.25, "w": 1.75},
+ {"matrix": [9, 7], "x": 15, "y": 4.25},
+ {"matrix": [9, 8], "x": 16, "y": 4.25},
+
+ {"matrix": [4, 2], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 3], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 4], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 6], "x": 5, "y": 5.25},
+ {"matrix": [4, 7], "x": 6, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 0], "x": 8.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 9.5, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 2], "x": 11, "y": 5.25},
+ {"matrix": [10, 3], "x": 12, "y": 5.25},
+ {"matrix": [10, 4], "x": 13, "y": 5.25},
+ {"matrix": [10, 6], "x": 14, "y": 5.25},
+ {"matrix": [10, 7], "x": 15, "y": 5.25},
+ {"matrix": [10, 8], "x": 16, "y": 5.25}
+ ]
+ },
+ "LAYOUT_80_iso_with_macro": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 2], "x": 2.25, "y": 0},
+ {"matrix": [5, 3], "x": 3.5, "y": 0},
+ {"matrix": [5, 4], "x": 4.5, "y": 0},
+ {"matrix": [5, 5], "x": 5.5, "y": 0},
+ {"matrix": [5, 6], "x": 6.5, "y": 0},
+ {"matrix": [5, 7], "x": 7.75, "y": 0},
+ {"matrix": [5, 8], "x": 8.75, "y": 0},
+
+ {"matrix": [11, 1], "x": 10.75, "y": 0},
+ {"matrix": [11, 2], "x": 11.75, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 4], "x": 14, "y": 0},
+ {"matrix": [11, 5], "x": 15, "y": 0},
+ {"matrix": [11, 6], "x": 16, "y": 0},
+ {"matrix": [11, 7], "x": 17.25, "y": 0},
+ {"matrix": [11, 8], "x": 18.25, "y": 0},
+
+ {"matrix": [0, 0], "x": 0, "y": 1.25},
+ {"matrix": [0, 1], "x": 1, "y": 1.25},
+ {"matrix": [0, 2], "x": 2.25, "y": 1.25},
+ {"matrix": [0, 3], "x": 3.25, "y": 1.25},
+ {"matrix": [0, 4], "x": 4.25, "y": 1.25},
+ {"matrix": [0, 5], "x": 5.25, "y": 1.25},
+ {"matrix": [0, 6], "x": 6.25, "y": 1.25},
+ {"matrix": [0, 7], "x": 7.25, "y": 1.25},
+ {"matrix": [0, 8], "x": 8.25, "y": 1.25},
+
+ {"matrix": [6, 0], "x": 10.25, "y": 1.25},
+ {"matrix": [6, 1], "x": 11.25, "y": 1.25},
+ {"matrix": [6, 2], "x": 12.25, "y": 1.25},
+ {"matrix": [6, 3], "x": 13.25, "y": 1.25},
+ {"matrix": [6, 4], "x": 14.25, "y": 1.25},
+ {"matrix": [6, 5], "x": 15.25, "y": 1.25},
+ {"matrix": [6, 6], "x": 16.25, "y": 1.25},
+ {"matrix": [6, 7], "x": 17.25, "y": 1.25},
+ {"matrix": [6, 8], "x": 18.25, "y": 1.25},
+
+ {"matrix": [1, 0], "x": 0, "y": 2.25},
+ {"matrix": [1, 1], "x": 1, "y": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 2.25, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 2.25},
+ {"matrix": [1, 4], "x": 4.75, "y": 2.25},
+ {"matrix": [1, 5], "x": 5.75, "y": 2.25},
+ {"matrix": [1, 6], "x": 6.75, "y": 2.25},
+ {"matrix": [1, 7], "x": 7.75, "y": 2.25},
+
+ {"matrix": [7, 0], "x": 9.75, "y": 2.25},
+ {"matrix": [7, 1], "x": 10.75, "y": 2.25},
+ {"matrix": [7, 2], "x": 11.75, "y": 2.25},
+ {"matrix": [7, 3], "x": 12.75, "y": 2.25},
+ {"matrix": [7, 4], "x": 13.75, "y": 2.25},
+ {"matrix": [7, 5], "x": 14.75, "y": 2.25},
+ {"matrix": [7, 6], "x": 15.75, "y": 2.25},
+ {"matrix": [7, 8], "x": 18.25, "y": 2.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 3.25},
+ {"matrix": [2, 1], "x": 1, "y": 3.25},
+ {"matrix": [2, 2], "x": 2.25, "y": 3.25, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 3.25},
+ {"matrix": [2, 4], "x": 5, "y": 3.25},
+ {"matrix": [2, 5], "x": 6, "y": 3.25},
+ {"matrix": [2, 6], "x": 7, "y": 3.25},
+ {"matrix": [2, 7], "x": 8, "y": 3.25},
+
+ {"matrix": [8, 0], "x": 10, "y": 3.25},
+ {"matrix": [8, 1], "x": 11, "y": 3.25},
+ {"matrix": [8, 2], "x": 12, "y": 3.25},
+ {"matrix": [8, 3], "x": 13, "y": 3.25},
+ {"matrix": [8, 4], "x": 14, "y": 3.25},
+ {"matrix": [8, 5], "x": 15, "y": 3.25},
+ {"matrix": [8, 6], "x": 16, "y": 3.25},
+ {"matrix": [7, 7], "x": 17, "y": 2.25, "w": 1.25, "h": 2},
+ {"matrix": [8, 8], "x": 18.25, "y": 3.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 4.25},
+ {"matrix": [3, 1], "x": 1, "y": 4.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 4.25, "w": 1.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 4.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 4.25},
+ {"matrix": [3, 5], "x": 5.5, "y": 4.25},
+ {"matrix": [3, 6], "x": 6.5, "y": 4.25},
+ {"matrix": [3, 7], "x": 7.5, "y": 4.25},
+ {"matrix": [3, 8], "x": 8.5, "y": 4.25},
+
+ {"matrix": [9, 0], "x": 10.5, "y": 4.25},
+ {"matrix": [9, 1], "x": 11.5, "y": 4.25},
+ {"matrix": [9, 2], "x": 12.5, "y": 4.25},
+ {"matrix": [9, 3], "x": 13.5, "y": 4.25},
+ {"matrix": [9, 4], "x": 14.5, "y": 4.25},
+ {"matrix": [9, 6], "x": 15.5, "y": 4.25, "w": 1.75},
+ {"matrix": [9, 7], "x": 17.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 18.25, "y": 4.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 5.25},
+ {"matrix": [4, 1], "x": 1, "y": 5.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.5, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 4], "x": 4.75, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 5], "x": 6, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 6], "x": 7.25, "y": 5.25},
+ {"matrix": [4, 7], "x": 8.25, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 0], "x": 10.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 11.75, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 2], "x": 13.25, "y": 5.25},
+ {"matrix": [10, 3], "x": 14.25, "y": 5.25},
+ {"matrix": [10, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [10, 6], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 7], "x": 17.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 18.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_80_with_macro": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 2], "x": 2.25, "y": 0},
+ {"matrix": [5, 3], "x": 3.5, "y": 0},
+ {"matrix": [5, 4], "x": 4.5, "y": 0},
+ {"matrix": [5, 5], "x": 5.5, "y": 0},
+ {"matrix": [5, 6], "x": 6.5, "y": 0},
+ {"matrix": [5, 7], "x": 7.75, "y": 0},
+ {"matrix": [5, 8], "x": 8.75, "y": 0},
+
+ {"matrix": [11, 1], "x": 10.75, "y": 0},
+ {"matrix": [11, 2], "x": 11.75, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 4], "x": 14, "y": 0},
+ {"matrix": [11, 5], "x": 15, "y": 0},
+ {"matrix": [11, 6], "x": 16, "y": 0},
+ {"matrix": [11, 7], "x": 17.25, "y": 0},
+ {"matrix": [11, 8], "x": 18.25, "y": 0},
+
+ {"matrix": [0, 0], "x": 0, "y": 1.25},
+ {"matrix": [0, 1], "x": 1, "y": 1.25},
+ {"matrix": [0, 2], "x": 2.25, "y": 1.25},
+ {"matrix": [0, 3], "x": 3.25, "y": 1.25},
+ {"matrix": [0, 4], "x": 4.25, "y": 1.25},
+ {"matrix": [0, 5], "x": 5.25, "y": 1.25},
+ {"matrix": [0, 6], "x": 6.25, "y": 1.25},
+ {"matrix": [0, 7], "x": 7.25, "y": 1.25},
+ {"matrix": [0, 8], "x": 8.25, "y": 1.25},
+
+ {"matrix": [6, 0], "x": 10.25, "y": 1.25},
+ {"matrix": [6, 1], "x": 11.25, "y": 1.25},
+ {"matrix": [6, 2], "x": 12.25, "y": 1.25},
+ {"matrix": [6, 3], "x": 13.25, "y": 1.25},
+ {"matrix": [6, 4], "x": 14.25, "y": 1.25},
+ {"matrix": [6, 5], "x": 15.25, "y": 1.25},
+ {"matrix": [6, 6], "x": 16.25, "y": 1.25},
+ {"matrix": [6, 7], "x": 17.25, "y": 1.25},
+ {"matrix": [6, 8], "x": 18.25, "y": 1.25},
+
+ {"matrix": [1, 0], "x": 0, "y": 2.25},
+ {"matrix": [1, 1], "x": 1, "y": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 2.25, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 2.25},
+ {"matrix": [1, 4], "x": 4.75, "y": 2.25},
+ {"matrix": [1, 5], "x": 5.75, "y": 2.25},
+ {"matrix": [1, 6], "x": 6.75, "y": 2.25},
+ {"matrix": [1, 7], "x": 7.75, "y": 2.25},
+
+ {"matrix": [7, 0], "x": 9.75, "y": 2.25},
+ {"matrix": [7, 1], "x": 10.75, "y": 2.25},
+ {"matrix": [7, 2], "x": 11.75, "y": 2.25},
+ {"matrix": [7, 3], "x": 12.75, "y": 2.25},
+ {"matrix": [7, 4], "x": 13.75, "y": 2.25},
+ {"matrix": [7, 5], "x": 14.75, "y": 2.25},
+ {"matrix": [7, 6], "x": 15.75, "y": 2.25},
+ {"matrix": [7, 7], "x": 16.75, "y": 2.25, "w": 1.5},
+ {"matrix": [7, 8], "x": 18.25, "y": 2.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 3.25},
+ {"matrix": [2, 1], "x": 1, "y": 3.25},
+ {"matrix": [2, 2], "x": 2.25, "y": 3.25, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 3.25},
+ {"matrix": [2, 4], "x": 5, "y": 3.25},
+ {"matrix": [2, 5], "x": 6, "y": 3.25},
+ {"matrix": [2, 6], "x": 7, "y": 3.25},
+ {"matrix": [2, 7], "x": 8, "y": 3.25},
+
+ {"matrix": [8, 0], "x": 10, "y": 3.25},
+ {"matrix": [8, 1], "x": 11, "y": 3.25},
+ {"matrix": [8, 2], "x": 12, "y": 3.25},
+ {"matrix": [8, 3], "x": 13, "y": 3.25},
+ {"matrix": [8, 4], "x": 14, "y": 3.25},
+ {"matrix": [8, 5], "x": 15, "y": 3.25},
+ {"matrix": [8, 7], "x": 16, "y": 3.25, "w": 2.25},
+ {"matrix": [8, 8], "x": 18.25, "y": 3.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 4.25},
+ {"matrix": [3, 1], "x": 1, "y": 4.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 4.25, "w": 2.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 4.25},
+ {"matrix": [3, 5], "x": 5.5, "y": 4.25},
+ {"matrix": [3, 6], "x": 6.5, "y": 4.25},
+ {"matrix": [3, 7], "x": 7.5, "y": 4.25},
+ {"matrix": [3, 8], "x": 8.5, "y": 4.25},
+
+ {"matrix": [9, 0], "x": 10.5, "y": 4.25},
+ {"matrix": [9, 1], "x": 11.5, "y": 4.25},
+ {"matrix": [9, 2], "x": 12.5, "y": 4.25},
+ {"matrix": [9, 3], "x": 13.5, "y": 4.25},
+ {"matrix": [9, 4], "x": 14.5, "y": 4.25},
+ {"matrix": [9, 6], "x": 15.5, "y": 4.25, "w": 1.75},
+ {"matrix": [9, 7], "x": 17.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 18.25, "y": 4.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 5.25},
+ {"matrix": [4, 1], "x": 1, "y": 5.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.5, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 4], "x": 4.75, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 5], "x": 6, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 6], "x": 7.25, "y": 5.25},
+ {"matrix": [4, 7], "x": 8.25, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 0], "x": 10.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 11.75, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 2], "x": 13.25, "y": 5.25},
+ {"matrix": [10, 3], "x": 14.25, "y": 5.25},
+ {"matrix": [10, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [10, 6], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 7], "x": 17.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 18.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 2], "x": 2.25, "y": 0},
+ {"matrix": [5, 3], "x": 3.5, "y": 0},
+ {"matrix": [5, 4], "x": 4.5, "y": 0},
+ {"matrix": [5, 5], "x": 5.5, "y": 0},
+ {"matrix": [5, 6], "x": 6.5, "y": 0},
+ {"matrix": [5, 7], "x": 7.75, "y": 0},
+ {"matrix": [5, 8], "x": 8.75, "y": 0},
+
+ {"matrix": [11, 1], "x": 10.75, "y": 0},
+ {"matrix": [11, 2], "x": 11.75, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 4], "x": 14, "y": 0},
+ {"matrix": [11, 5], "x": 15, "y": 0},
+ {"matrix": [11, 6], "x": 16, "y": 0},
+ {"matrix": [11, 7], "x": 17.25, "y": 0},
+ {"matrix": [11, 8], "x": 18.25, "y": 0},
+
+ {"matrix": [0, 0], "x": 0, "y": 1.25},
+ {"matrix": [0, 1], "x": 1, "y": 1.25},
+ {"matrix": [0, 2], "x": 2.25, "y": 1.25},
+ {"matrix": [0, 3], "x": 3.25, "y": 1.25},
+ {"matrix": [0, 4], "x": 4.25, "y": 1.25},
+ {"matrix": [0, 5], "x": 5.25, "y": 1.25},
+ {"matrix": [0, 6], "x": 6.25, "y": 1.25},
+ {"matrix": [0, 7], "x": 7.25, "y": 1.25},
+ {"matrix": [0, 8], "x": 8.25, "y": 1.25},
+
+ {"matrix": [6, 0], "x": 10.25, "y": 1.25},
+ {"matrix": [6, 1], "x": 11.25, "y": 1.25},
+ {"matrix": [6, 2], "x": 12.25, "y": 1.25},
+ {"matrix": [6, 3], "x": 13.25, "y": 1.25},
+ {"matrix": [6, 4], "x": 14.25, "y": 1.25},
+ {"matrix": [6, 5], "x": 15.25, "y": 1.25},
+ {"matrix": [6, 6], "x": 16.25, "y": 1.25},
+ {"matrix": [6, 7], "x": 17.25, "y": 1.25},
+ {"matrix": [6, 8], "x": 18.25, "y": 1.25},
+
+ {"matrix": [1, 0], "x": 0, "y": 2.25},
+ {"matrix": [1, 1], "x": 1, "y": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 2.25, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 2.25},
+ {"matrix": [1, 4], "x": 4.75, "y": 2.25},
+ {"matrix": [1, 5], "x": 5.75, "y": 2.25},
+ {"matrix": [1, 6], "x": 6.75, "y": 2.25},
+ {"matrix": [1, 7], "x": 7.75, "y": 2.25},
+
+ {"matrix": [7, 0], "x": 9.75, "y": 2.25},
+ {"matrix": [7, 1], "x": 10.75, "y": 2.25},
+ {"matrix": [7, 2], "x": 11.75, "y": 2.25},
+ {"matrix": [7, 3], "x": 12.75, "y": 2.25},
+ {"matrix": [7, 4], "x": 13.75, "y": 2.25},
+ {"matrix": [7, 5], "x": 14.75, "y": 2.25},
+ {"matrix": [7, 6], "x": 15.75, "y": 2.25},
+ {"matrix": [7, 7], "x": 16.75, "y": 2.25, "w": 1.5},
+ {"matrix": [7, 8], "x": 18.25, "y": 2.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 3.25},
+ {"matrix": [2, 1], "x": 1, "y": 3.25},
+ {"matrix": [2, 2], "x": 2.25, "y": 3.25, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 3.25},
+ {"matrix": [2, 4], "x": 5, "y": 3.25},
+ {"matrix": [2, 5], "x": 6, "y": 3.25},
+ {"matrix": [2, 6], "x": 7, "y": 3.25},
+ {"matrix": [2, 7], "x": 8, "y": 3.25},
+
+ {"matrix": [8, 0], "x": 10, "y": 3.25},
+ {"matrix": [8, 1], "x": 11, "y": 3.25},
+ {"matrix": [8, 2], "x": 12, "y": 3.25},
+ {"matrix": [8, 3], "x": 13, "y": 3.25},
+ {"matrix": [8, 4], "x": 14, "y": 3.25},
+ {"matrix": [8, 5], "x": 15, "y": 3.25},
+ {"matrix": [8, 6], "x": 16, "y": 3.25},
+ {"matrix": [8, 7], "x": 17, "y": 3.25, "w": 1.25},
+ {"matrix": [8, 8], "x": 18.25, "y": 3.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 4.25},
+ {"matrix": [3, 1], "x": 1, "y": 4.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 4.25, "w": 1.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 4.25},
+ {"matrix": [3, 4], "x": 4.5, "y": 4.25},
+ {"matrix": [3, 5], "x": 5.5, "y": 4.25},
+ {"matrix": [3, 6], "x": 6.5, "y": 4.25},
+ {"matrix": [3, 7], "x": 7.5, "y": 4.25},
+ {"matrix": [3, 8], "x": 8.5, "y": 4.25},
+
+ {"matrix": [9, 0], "x": 10.5, "y": 4.25},
+ {"matrix": [9, 1], "x": 11.5, "y": 4.25},
+ {"matrix": [9, 2], "x": 12.5, "y": 4.25},
+ {"matrix": [9, 3], "x": 13.5, "y": 4.25},
+ {"matrix": [9, 4], "x": 14.5, "y": 4.25},
+ {"matrix": [9, 6], "x": 15.5, "y": 4.25, "w": 1.75},
+ {"matrix": [9, 7], "x": 17.25, "y": 4.25},
+ {"matrix": [9, 8], "x": 18.25, "y": 4.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 5.25},
+ {"matrix": [4, 1], "x": 1, "y": 5.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.5, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 4], "x": 4.75, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 5], "x": 6, "y": 5.25, "w": 1.25},
+ {"matrix": [4, 6], "x": 7.25, "y": 5.25},
+ {"matrix": [4, 7], "x": 8.25, "y": 5.25, "w": 1.25},
+
+ {"matrix": [10, 0], "x": 10.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 11.75, "y": 5.25, "w": 1.5},
+ {"matrix": [10, 2], "x": 13.25, "y": 5.25},
+ {"matrix": [10, 3], "x": 14.25, "y": 5.25},
+ {"matrix": [10, 4], "x": 15.25, "y": 5.25},
+ {"matrix": [10, 6], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 7], "x": 17.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 18.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keebio/sinc/rev4/mcuconf.h b/keyboards/keebio/sinc/rev4/mcuconf.h
new file mode 100644
index 000000000000..8b26af413192
--- /dev/null
+++ b/keyboards/keebio/sinc/rev4/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 Danny Nguyen (danny@keeb.io)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/keebio/sinc/rev4/rules.mk b/keyboards/keebio/sinc/rev4/rules.mk
new file mode 100644
index 000000000000..161ec22b16e2
--- /dev/null
+++ b/keyboards/keebio/sinc/rev4/rules.mk
@@ -0,0 +1 @@
+SERIAL_DRIVER = vendor
diff --git a/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/config.h b/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/config.h
new file mode 100644
index 000000000000..0fa53c2d6786
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/config.h
@@ -0,0 +1,45 @@
+/* Copyright 2023 @PoweredByPorridge
+ *
+ * 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 AUTO_SHIFT_TIMEOUT 210
+
+#define NO_AUTO_SHIFT_NUMERIC
+// #define NO_AUTO_SHIFT_SPECIAL
+
+// retro shift is auto shift on home row mods
+// I no longer use home row mods, but do find this setting helps
+// avoid 'fat fingered' keypresses.
+
+// If RETRO_SHIFT is defined to a value, hold times greater
+// than that value will not produce a tap on release. This enables
+// modifiers to be held for combining with mouse clicks without
+// generating taps on release.
+#define RETRO_SHIFT 425
+
+// can also be defined without a value
+// #define RETRO_SHIFT
+
+// Configure the global tapping term (default: 200ms)
+// Lower than 210 and I can't tap dance brackets without a run up.
+#define TAPPING_TERM 210
+
+#define TAPPING_TERM_PER_KEY
+
+// Apply the modifier on keys that are tapped during a short hold of a modtap
+// Prevents slurred typing (of home row mods)
+#define PERMISSIVE_HOLD
diff --git a/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/keymap.c b/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/keymap.c
new file mode 100644
index 000000000000..40c8b0b5aadf
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/keymap.c
@@ -0,0 +1,224 @@
+/* Copyright 2023 @PoweredByPorridge
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// Tap Dance keycodes
+enum td_keycodes {
+ L_BRAX, // Used in the keymap, add additional keycodes for each tapdance.
+ R_BRAX,
+ QUOTS,
+ TACHE
+};
+
+// Define a type containing as many tapdance states as you need
+typedef enum {
+ SINGLE_TAP,
+ DOUBLE_TAP, // SINGLE_HOLD,
+ TRIPLE_TAP // DOUBLE_SINGLE_TAP
+} td_state_t;
+
+// Create a global instance of the tapdance state type
+static td_state_t td_state;
+
+// Declare your tapdance functions:
+
+// Function to determine the current tapdance state
+uint8_t cur_dance(tap_dance_state_t *state);
+
+// `finished` and `reset` functions for each tapdance keycode
+void lbrax_finished(tap_dance_state_t *state, void *user_data);
+void lbrax_reset(tap_dance_state_t *state, void *user_data);
+
+void rbrax_finished(tap_dance_state_t *state, void *user_data);
+void rbrax_reset(tap_dance_state_t *state, void *user_data);
+
+void quots_finished(tap_dance_state_t *state, void *user_data);
+void quots_reset(tap_dance_state_t *state, void *user_data);
+
+void tache_finished(tap_dance_state_t *state, void *user_data);
+void tache_reset(tap_dance_state_t *state, void *user_data);
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = 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_SCLN,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NUBS, KC_SLSH, KC_N, KC_M, KC_COMM, KC_DOT, KC_ENT,
+ LCTL_T(KC_ESC), KC_LALT, KC_LGUI, KC_LSFT, MO(1), KC_SPC, KC_SPC, MO(2), TD(QUOTS), KC_RSFT, KC_LALT, LCTL_T(KC_TAB)),
+
+ [1] = LAYOUT(KC_EXLM, KC_DQUO, LSFT(KC_3), KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_DEL, KC_BSPC,
+ KC_F24, LALT(KC_F3), KC_NO, KC_NO, TD(L_BRAX), TD(R_BRAX), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ LCTL(KC_F12), LALT(KC_X), KC_NO, KC_NO, KC_NO, TD(QUOTS), TD(TACHE), KC_MINS, KC_EQL, KC_COMM, KC_DOT, KC_ENT,
+ KC_TRNS, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LSFT(KC_TAB)),
+
+ [2] = LAYOUT(KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_NO, LALT(KC_F3), KC_NO, KC_NO, TD(L_BRAX), TD(R_BRAX), KC_HOME, KC_PGDN, KC_PGUP, KC_END,
+ LCTL(KC_F12), LALT(KC_X), KC_NO, KC_NO, KC_NO, TD(QUOTS), TD(TACHE), KC_MINS, KC_EQL, KC_COMM, KC_DOT, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_TRNS),
+
+ [3] = LAYOUT(KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ AS_TOGG, KC_F24, KC_NO, KC_NO, KC_NO, KC_NO, LSA(KC_LEFT), LSA(KC_DOWN), LSA(KC_UP), LSA(KC_RGHT),
+ KC_LCTL, LALT(KC_DEL),KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, KC_NO, KC_F12, KC_F13, KC_F14, KC_NO,
+ KC_TRNS, KC_F23, KC_LCTL, KC_NO, KC_TRNS, KC_NO, KC_VOLD, KC_MPLY, KC_LSFT, KC_NO, KC_NO, KC_TRNS)
+};
+
+/*
+Notes on keys
+or, why on earth do I have keymap
+lower-shift-z is CTRL-F12 - Darkroom mode in emacs
+lower-x is ALT-X - emacs
+layer3-a is toggle autoshift
+layer3-s is F24 - i3 controls popup reminder
+lower-s is ALT-F3 - multi-select in Sublime text
+*/
+
+
+// Determine the tapdance state to return
+uint8_t cur_dance(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ return SINGLE_TAP;
+ } else if (state->count == 2) {
+ return DOUBLE_TAP;
+ } else if (state->count == 3) {
+ return TRIPLE_TAP;
+ } else {
+ reset_tap_dance (state);
+ return 3;
+ }
+}
+
+
+// Handle the possible states for each tapdance keycode you define:
+
+void lbrax_finished(tap_dance_state_t *state, void *user_data) {
+ td_state = cur_dance(state);
+ switch (td_state) {
+ case SINGLE_TAP:
+ register_code16(LSFT(KC_9));
+ break;
+ case DOUBLE_TAP:
+ register_code16(KC_LBRC);
+ break;
+ case TRIPLE_TAP:
+ register_code16(LSFT(KC_LBRC));
+ }
+}
+
+void lbrax_reset(tap_dance_state_t *state, void *user_data) {
+ switch (td_state) {
+ case SINGLE_TAP:
+ unregister_code16(LSFT(KC_9));
+ break;
+ case DOUBLE_TAP:
+ unregister_code16(KC_LBRC);
+ break;
+ case TRIPLE_TAP:
+ unregister_code16(LSFT(KC_LBRC));
+ }
+}
+
+// Handle the possible states for each tapdance keycode you define:
+
+void rbrax_finished(tap_dance_state_t *state, void *user_data) {
+ td_state = cur_dance(state);
+ switch (td_state) {
+ case SINGLE_TAP:
+ register_code16(LSFT(KC_0));
+ break;
+ case DOUBLE_TAP:
+ register_code16(KC_RBRC);
+ break;
+ case TRIPLE_TAP:
+ register_code16(LSFT(KC_RBRC));
+ }
+}
+
+
+void rbrax_reset(tap_dance_state_t *state, void *user_data) {
+ switch (td_state) {
+ case SINGLE_TAP:
+ unregister_code16(LSFT(KC_0));
+ break;
+ case DOUBLE_TAP:
+ unregister_code16(KC_RBRC);
+ break;
+ case TRIPLE_TAP:
+ unregister_code16(LSFT(KC_RBRC));
+ }
+}
+
+void quots_finished(tap_dance_state_t *state, void *user_data) {
+ td_state = cur_dance(state);
+ switch (td_state) {
+ case SINGLE_TAP:
+ register_code16(KC_QUOT);
+ break;
+ case DOUBLE_TAP:
+ register_code16(KC_AT);
+ break;
+ case TRIPLE_TAP:
+ register_code16(KC_DQUO);
+ }
+}
+
+void quots_reset(tap_dance_state_t *state, void *user_data) {
+ switch (td_state) {
+ case SINGLE_TAP:
+ unregister_code16(KC_QUOT);
+ break;
+ case DOUBLE_TAP:
+ unregister_code16(KC_AT);
+ break;
+ case TRIPLE_TAP:
+ unregister_code16(KC_DQUO);
+ }
+}
+
+void tache_finished(tap_dance_state_t *state, void *user_data) {
+ td_state = cur_dance(state);
+ switch (td_state) {
+ case SINGLE_TAP:
+ register_code16(KC_NUHS);
+ break;
+ case DOUBLE_TAP:
+
+ register_code16(LSFT(KC_NUHS));
+ break;
+ case TRIPLE_TAP:
+ register_code16(KC_GRV);
+ }
+}
+
+void tache_reset(tap_dance_state_t *state, void *user_data) {
+ switch (td_state) {
+ case SINGLE_TAP:
+ unregister_code16(KC_NUHS);
+ break;
+ case DOUBLE_TAP:
+ unregister_code16(LSFT(KC_NUHS));
+ break;
+ case TRIPLE_TAP:
+ unregister_code16(KC_GRV);
+ }
+}
+
+// Define `ACTION_TAP_DANCE_FN_ADVANCED()` for each tapdance keycode, passing in `finished` and `reset` functions
+
+tap_dance_action_t tap_dance_actions[] = {
+ [L_BRAX] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lbrax_finished, lbrax_reset),
+ [R_BRAX] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rbrax_finished, rbrax_reset),
+ [QUOTS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, quots_finished, quots_reset),
+ [TACHE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tache_finished, tache_reset)
+};
diff --git a/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/readme.md b/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/readme.md
new file mode 100644
index 000000000000..619654186deb
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/readme.md
@@ -0,0 +1,35 @@
+# Keyboardio Atreus with an SLF layout from PoweredByPorridge
+
+SLF stands for [Stiff Little Fingers](https://en.wikipedia.org/wiki/Stiff_Little_Fingers) who were a great punk band from Belfast, Northern Ireland. Stiff Little Fingers is also a good way of describing my hands, a condition which I ascribe to too many winters cycling without gloves. So, I need a keyboard and layout to cope.
+
+I use a Keyboardio Atreus, in fact, they're so good, I use two. I tried all sorts of layouts, and finally came up with the one that suits my stiff fingers.
+
+It has four layers:
+
+0 - Normal - letters and punctuation.
+
+![layer 0](https://i.imgur.com/3Z8PZtI.png)
+
+1 - Symbols (shifted numbers), arrow keys, assorted function keys, Del and Backspace.
+
+![layer 1](https://i.imgur.com/9rJalxV.png)
+
+2 - Numbers, page up, page down, home, and end. Similar assorted functions.
+
+![layer 2](https://i.imgur.com/TYY11b5.png)
+
+3 - F1 to F14, play/pause, volume up/down, Left-shift-Alt left, right, up, down.
+
+![layer 3](https://i.imgur.com/MuWNPTz.png)
+
+Autoshift is important, I use it all the time.
+
+I use tap dance (one, two, or three key presses) for:
+
+* Braces, brackets, and curly brackets. TD(L_BRAX) and TD(R_BRAX)
+* Hash (pound), tilde, and backtick. TD(TACHE)
+* Single quote, double quote, and @. TD(QUOTS)
+
+There are odd keys that are there for a particular reason:
+* F24 - my [I3](https://i3wm.org/) popup to remind me of stuff I always forget.
+* Alt-shift-left/right/up/down - multi-select in Sublime text.
\ No newline at end of file
diff --git a/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/rules.mk b/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/rules.mk
new file mode 100644
index 000000000000..3285414f97d2
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/poweredbyporridge/rules.mk
@@ -0,0 +1,7 @@
+BOOTMAGIC_ENABLE = no
+MOUSEKEY_ENABLE = no
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
+UNICODE_ENABLE = no
+AUTO_SHIFT_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/autocorrect_data.h b/keyboards/keyboardio/atreus/keymaps/slotthe/autocorrect_data.h
new file mode 100644
index 000000000000..155b1fbc540c
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/autocorrect_data.h
@@ -0,0 +1,44 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ 88888888888 888 d8b .d888 d8b 888 d8b
+ 888 888 Y8P d88P" Y8P 888 Y8P
+ 888 888 888 888
+ 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
+ 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
+ 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
+ 888 888 888 888 X88 888 888 888 Y8b. 888 X88
+ 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
+ 888 888
+ 888 888
+ 888 888
+ .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
+ d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
+ 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
+ Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
+ "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
+ 888
+ Y8b d88P
+ "Y88P"
+*******************************************************************************/
+
+#pragma once
+
+// Autocorrection dictionary (4 entries):
+// :alot -> a lot
+// accesories -> accessories
+// accomodate -> accommodate
+// alledge -> allege
+
+#define AUTOCORRECT_MIN_LENGTH 5 // ":alot"
+#define AUTOCORRECT_MAX_LENGTH 10 // "accesories"
+#define DICTIONARY_SIZE 73
+
+static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
+ 0x48, 0x0A, 0x00, 0x16, 0x2C, 0x00, 0x17, 0x3E, 0x00, 0x00, 0x4A, 0x11, 0x00, 0x17, 0x1B, 0x00,
+ 0x00, 0x07, 0x08, 0x0F, 0x0F, 0x04, 0x00, 0x82, 0x67, 0x65, 0x00, 0x04, 0x07, 0x12, 0x10, 0x12,
+ 0x06, 0x06, 0x04, 0x00, 0x84, 0x6D, 0x6F, 0x64, 0x61, 0x74, 0x65, 0x00, 0x08, 0x0C, 0x15, 0x12,
+ 0x16, 0x08, 0x06, 0x06, 0x04, 0x00, 0x84, 0x73, 0x6F, 0x72, 0x69, 0x65, 0x73, 0x00, 0x12, 0x0F,
+ 0x04, 0x2C, 0x00, 0x82, 0x20, 0x6C, 0x6F, 0x74, 0x00
+};
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/config.h b/keyboards/keyboardio/atreus/keymaps/slotthe/config.h
new file mode 100644
index 000000000000..26235c9d916c
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/config.h
@@ -0,0 +1,19 @@
+/* © 2023 Tony Zorman (@slotThe)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
+#define TAPPING_TERM 175
+#define HOLD_ON_OTHER_KEY_PRESS
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/keymap.c b/keyboards/keyboardio/atreus/keymaps/slotthe/keymap.c
new file mode 100644
index 000000000000..6188f14ab97d
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/keymap.c
@@ -0,0 +1,328 @@
+/* © 2023 Tony Zorman (@slotThe)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+// NOTE: `M-x occur RET /// RET' gives a good overview.
+
+/// General macros
+
+#define LSPR_SC LGUI_T(KC_SCLN)
+#define LALT_BR LALT_T(KC_LBRC)
+#define LSFT_INS LSFT(KC_INS)
+#define OSMSFT OSM(MOD_LSFT)
+#define Z_SFT LSFT_T(KC_Z)
+#define ZE_SFT LSFT_T(KC_0)
+#define SL_SFT RSFT_T(KC_SLSH)
+#define RETSPR LGUI_T(KC_ENT)
+
+/// Tap dance declarations
+
+// So far, tap dances do different things on
+//
+// - a single press,
+// - a double press,
+// - when held,
+//
+// so expect this many keys as comments.
+enum tap_dances {
+ ALT_BR, // [ ] lalt (also works shifted, which gets us { and } for free)
+ CTL_PR, // ( ) lctl
+ SFT_CI, // ^ ^ lsft (working around LSFT_T not being able to output shifted keys)
+ SFT_EX, // ! ! lsft (ditto)
+};
+
+#define CTLPAR TD(CTL_PR)
+#define ALTBRC TD(ALT_BR)
+#define SFTCRC TD(SFT_CI)
+#define SFTEXL TD(SFT_EX)
+
+/// Macro declarations
+
+enum custom_keycodes {
+ // -> <- =<< >>= <*> <* *> <$> <&> <|> => ::
+ RARR = SAFE_RANGE, LARR, LBND, RBND, APP, RAPP, LAPP, FMAP, PAMF, AALT, IMPLS, DCOL,
+};
+
+/// Key overrides
+
+const key_override_t **key_overrides = (const key_override_t *[]){
+ &ko_make_basic(MOD_MASK_SHIFT, KC_BSPC, KC_DEL), // S-BSP ≡ DEL
+ // Emacs got me used to these, so let's convince other programs that
+ // we are in fact sending the correct keys.
+ &ko_make_basic(MOD_MASK_CTRL, KC_I, KC_TAB), // C-i ≡ Tab
+ &ko_make_basic(MOD_MASK_CTRL, KC_M, KC_ENT), // C-m ≡ Return
+ NULL // Null terminate the array of overrides
+};
+
+/// Layers
+
+enum layer_names { _COLEMAK_DH, _LOWER, _RAISE, _ADJUST };
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define ADJUST MO(_ADJUST)
+#define D_RAISE LT(_RAISE, KC_DOT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Colemak base layer
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | Q | W | F | P | B | | J | L | U | Y | ;+S |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | A | R | S | T | G | | M | N | E | I | O |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | S+Z | X | C | D | V | ARP | REP | K | H | , | . | S+/ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | ESC | TAB | SPR | L1 | SPC | A[] | BSC | C() | L2 | - | ' | RET |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ */
+ [_COLEMAK_DH] = LAYOUT(
+ KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, LSPR_SC,
+ KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O,
+ Z_SFT, KC_X, KC_C, KC_D, KC_V, QK_AREP, QK_REP, KC_K, KC_H, KC_COMM, D_RAISE, SL_SFT,
+ KC_ESC, KC_TAB, KC_LGUI, LOWER, KC_SPC, ALTBRC, KC_BSPC, CTLPAR, RAISE, KC_MINS, KC_QUOT, KC_ENT),
+
+ /* Layer 1 (LOWER)
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
+ | & | *> | >>= | <&> | | | = | + | * | - | RET+M |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
+ | :: | => | =<< | <|> | @ | | LFT | UP | DWN | RGT | \ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+ | !+S | <* | <*> | <$> | <- | | MEN | -> | $ | # | % | ^+S |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+ | | | | | | | | | L3 | ALT | | S-I |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+ */
+ [_LOWER] = LAYOUT(
+ KC_AMPR, RAPP, RBND, PAMF, _______, KC_EQL, KC_PLUS, KC_ASTR, KC_MINS, RETSPR,
+ DCOL, IMPLS, LBND, AALT, KC_AT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSLS,
+ SFTEXL, LAPP, APP, FMAP, LARR, _______, KC_APP, RARR, KC_DLR, KC_HASH, KC_PERC, SFTCRC,
+ _______, _______, _______, _______, _______, _______, _______, _______, ADJUST, KC_LALT, _______, LSFT_INS),
+
+ /* Layer 2 (RAISE)
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | 7 | 8 | 9 | | | | + | * | - | |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | : | 4 | 5 | 6 | = | | & | ` | _ | ' | " |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | 0+S | 1 | 2 | 3 | | | | | ! | # | % | ^+S |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | L3 | | | | | | | | |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ */
+ [_RAISE] = LAYOUT(
+ KC_DOT, KC_7, KC_8, KC_9, _______, _______, KC_PLUS, KC_ASTR, KC_MINS, _______,
+ KC_COLN, KC_4, KC_5, KC_6, KC_EQL, KC_AMPR, KC_GRV, KC_UNDS, KC_QUOT, KC_DQT,
+ ZE_SFT, KC_1, KC_2, KC_3, _______, _______, _______, _______, KC_EXLM, KC_HASH, KC_PERC, SFTCRC,
+ _______, _______, _______, ADJUST, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ /* Layer 3 (ADJUST)
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | | | | | | | F7 | F8 | F9 | F10 |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | | | | | | | F4 | F5 | F6 | F11 |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | | | | | | F1 | F2 | F3 | F12 |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | | | | | | | | | |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ */
+ [_ADJUST] = LAYOUT(
+ _______, _______, _______, _______, AC_TOGG, _______, KC_F7, KC_F8, KC_F9, KC_F10,
+ _______, _______, _______, _______, _______, _______, KC_F4, KC_F5, KC_F6, KC_F11,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
+/// Macro definitions
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RARR:
+ if (record->event.pressed) SEND_STRING("->"); break;
+ case LARR:
+ if (record->event.pressed) SEND_STRING("<-"); break;
+ case LBND:
+ if (record->event.pressed) SEND_STRING("=<<"); break;
+ case RBND:
+ if (record->event.pressed) SEND_STRING(">>="); break;
+ case APP:
+ if (record->event.pressed) SEND_STRING("<*>"); break;
+ case RAPP:
+ if (record->event.pressed) SEND_STRING("*>"); break;
+ case LAPP:
+ if (record->event.pressed) SEND_STRING("<*"); break;
+ case FMAP:
+ if (record->event.pressed) SEND_STRING("<$>"); break;
+ case PAMF:
+ if (record->event.pressed) SEND_STRING("<&>"); break;
+ case AALT:
+ if (record->event.pressed) SEND_STRING("<|>"); break;
+ case IMPLS:
+ if (record->event.pressed) SEND_STRING("=>"); break;
+ case DCOL:
+ if (record->event.pressed) SEND_STRING("::"); break;
+ }
+ return true;
+};
+
+//// Tap dance definitions
+
+// Heavily inspired by:
+//
+// https://docs.qmk.fm/?ref=blog.splitkb.com#/feature_tap_dance?id=example-4
+
+typedef enum {
+ TD_NONE,
+ TD_UNKNOWN,
+ TD_SINGLE_TAP,
+ TD_SINGLE_HOLD,
+ TD_DOUBLE_TAP,
+} td_state_t;
+
+typedef struct {
+ bool is_press_action;
+ td_state_t state;
+} td_tap_t;
+
+// Return an integer that corresponds to what kind of tap dance should
+// be executed.
+//
+// Interrupted: If the state of a dance is "interrupted", that means
+// that another key has been hit under the tapping term.
+//
+// Pressed: Whether or not the key is still being pressed. If this value
+// is true, that means the tapping term has ended, but the key is still
+// being pressed down. This generally means the key is being "held".
+td_state_t cur_dance(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->pressed) return TD_SINGLE_HOLD;
+ else return TD_SINGLE_TAP;
+ } else if (state->count == 2) return TD_DOUBLE_TAP;
+ else return TD_UNKNOWN;
+}
+
+//// ALT_BR
+
+static td_tap_t alt_br_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+void lalt_br_finished(tap_dance_state_t *state, void *user_data) {
+ alt_br_state.state = cur_dance(state);
+ switch (alt_br_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_LBRC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: register_code(KC_RBRC); break;
+ default: break;
+ }
+}
+
+void lalt_br_reset(tap_dance_state_t *state, void *user_data) {
+ switch (alt_br_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_LBRC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: unregister_code(KC_RBRC); break;
+ default: break;
+ }
+ alt_br_state.state = TD_NONE;
+}
+
+//// LCTL_PR
+
+static td_tap_t lctl_pr_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+void lctl_pr_finished(tap_dance_state_t *state, void *user_data) {
+ lctl_pr_state.state = cur_dance(state);
+ switch (lctl_pr_state.state) {
+ case TD_SINGLE_TAP: register_code16(KC_LPRN); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: register_code16(KC_RPRN); break;
+ default: break;
+ }
+}
+
+void lctl_pr_reset(tap_dance_state_t *state, void *user_data) {
+ switch (lctl_pr_state.state) {
+ case TD_SINGLE_TAP: unregister_code16(KC_LPRN); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: unregister_code16(KC_RPRN); break;
+ default: break;
+ }
+ lctl_pr_state.state = TD_NONE;
+}
+
+//// SFT_CI
+
+static td_tap_t lsft_ci_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+void lsft_ci_finished(tap_dance_state_t *state, void *user_data) {
+ lsft_ci_state.state = cur_dance(state);
+ switch (lsft_ci_state.state) {
+ case TD_SINGLE_TAP: register_code16(KC_CIRC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LSFT); break;
+ default: break;
+ }
+}
+
+void lsft_ci_reset(tap_dance_state_t *state, void *user_data) {
+ switch (lsft_ci_state.state) {
+ case TD_SINGLE_TAP: unregister_code16(KC_CIRC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LSFT); break;
+ default: break;
+ }
+ lsft_ci_state.state = TD_NONE;
+}
+
+//// SFT_EX
+
+static td_tap_t lsft_ex_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+void lsft_ex_finished(tap_dance_state_t *state, void *user_data) {
+ lsft_ex_state.state = cur_dance(state);
+ switch (lsft_ex_state.state) {
+ case TD_SINGLE_TAP: register_code16(KC_EXLM); break;
+ case TD_SINGLE_HOLD: register_code(KC_LSFT); break;
+ default: break;
+ }
+}
+
+void lsft_ex_reset(tap_dance_state_t *state, void *user_data) {
+ switch (lsft_ex_state.state) {
+ case TD_SINGLE_TAP: unregister_code16(KC_EXLM); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LSFT); break;
+ default: break;
+ }
+ lsft_ex_state.state = TD_NONE;
+}
+
+//// Actually define the tap-dance actions
+
+tap_dance_action_t tap_dance_actions[] = {
+ [ALT_BR] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lalt_br_finished, lalt_br_reset),
+ [CTL_PR] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lctl_pr_finished, lctl_pr_reset),
+ [SFT_CI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lsft_ci_finished, lsft_ci_reset),
+ [SFT_EX] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lsft_ex_finished, lsft_ex_reset),
+};
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/readme.md b/keyboards/keyboardio/atreus/keymaps/slotthe/readme.md
new file mode 100644
index 000000000000..d83bce1d2f26
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/readme.md
@@ -0,0 +1,251 @@
+# SlotThe's Keyboardio Atreus Keymap
+
+Note: the following is (a relevant and shortened) excerpt from [this
+rewiev](https://tony-zorman.com/posts/atreus-review.html) of the
+keyboard itself. See there for, e.g., some thoughts about modifier
+placement.
+
+## Base layer
+
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.------.
+ | Q | W | F | P | B | | J | L | U | Y | M4+; |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.------.
+ | A | R | S | T | G | | M | N | E | I | O |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.------.
+ | S+Z | X | C | D | V | ARP | REP | K | H | , | . | S+/ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.------.
+ | ESC | TAB | M4 | L1 | SPC | A[] | BSC | C() | L2 | - | ' | RET |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.------.
+
+I use [Colemak Mod-DH][colemak-dh] as my layout, so this takes up most of the base of the keyboard.
+
+Perhaps strikingly, I opted for not putting Shift on the thumb,
+but recreating the "ordinary" one-on-each-side setup from the good old typewriter days.
+While I already have a key to access the `LOWER` (L1) layer with my left thumb,
+I had to sacrifice Shift so I could fit a key to the `RAISE` (L2) layer on the right thumb.
+This also jumps to the `ADJUST` (L3) layer when both `LOWER` and `RAISE` are held at the same time.
+I will gladly trade two layers for one Shift key.
+
+One of the most basic things—besides having layers—that one can do with QMK is [mod-taps][qmk:mod-tap].
+These are keys that act as modifiers when held, and as "ordinary" keys when pressed.
+For example, all of the `S+«key»` keys emit Shift when held and `«key»` when pressed.
+There is a slight delay between pressing the key and the press registering,
+since we have to wait for a possible tap,
+which keeps me from using modifiers on the home-row, as some people like to do.
+Likewise, the `M4+;` key acts as Super when held and as `;` when pressed.
+At this point, it is actually my main way to press the Super key,
+even though I don't find the real `M4` key particularly hard to hit with my thumb.
+Sometimes these things just happen,
+I suppose,
+though it may help that I press both outer keys of the top row (that is, `q` and `;`) with my ring finger
+instead of my pinky.
+
+The `A[]` and `C()` keys are utilising [tap dances][qmk:tap-dance],
+in order to do even more.
+Tap dances are very similar to mod-taps,
+only in addition to just differentiating between a "pressed" and a "held" state,
+QMK now also keeps track of *how often* a key has been tapped.
+So far, [my setup][qmk:slotthe:tapdances] here is quite basic;
+I only check whether a key was pressed once, twice, or is being held.
+This allows me to not need extra keys for parentheses,
+as they can fit on the modifier keys:
+
+ - `A[]`: Alt when held, `[` when pressed once, and `]` when pressed twice.
+ This one is especially neat, since tap dances play well with other modifiers,
+ so pressing `S-M1` once will result in `{` and pressing it twice gives `}`.
+
+ - `C()`: Control when held, `(` when pressed once, and `)` when pressed twice.
+
+I don't mind having the extra indirection for the respective closed delimiter,
+as [paredit][emacs:paredit],
+[puni][emacs:puni],
+`electric-pair-mode`,
+or a different package of choice usually takes care of inserting it.
+
+The `REP` and `AREP` keys make use of the [Repeat Key][qmk:repeat-key] functionality;
+basically, `REP` executes the key chord that was last pressed.
+On the other hand,
+`AREP` is an alternative, configurable, of "repeating" things;
+by default, it turns some directional movements
+around—e.g., `M-f` becomes `M-b`—but
+it can be made to pretty much input anything one wants.
+
+## Layer 1
+
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
+ | & | *> | >>= | <&> | | | = | + | * | - | M4+RT |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
+ | :: | => | =<< | <|> | @ | | LFT | UP | DWN | RGT | \ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+ | S+! | <* | <*> | <$> | <- | | MEN | -> | $ | # | % | S+^ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+ | | | | | | | | | L3 | ALT | | S-Ins |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
+
+Guess which programming language I like based on this layer's [macros][qmk:macros] :).
+
+Crucially, keys that were "Shift when held,
+*something* when pressed" on the base layer retain the Shift part of that functionality.
+This is used for the commutativity of the modifier
+keys—i.e., it does not matter whether I press `S-L1-«key»` or `L1-S-«key»`—which
+would otherwise drive me insane.
+The same goes for all fall-through keys:
+keys that appear blank in the above layout.
+These aren't blocked or anything,
+just no new functionality is added
+so the key falls back to what's on the next lowest layer.
+In plain terms,
+the key to the left of `L3` will still be Control,
+as I can comfortably press that while holding down something with my left hand.
+The same can't be said for the Alt key,
+which is on the left hand by default,
+so a separate binding for it has to be created on the right hand.
+Thus,
+as the two don't commute,
+key chords involving the LOWER layer and Alt are to be avoided if possible.
+
+The `S-Ins` key is not some sort of tap,
+but actually just emits a Shift-Insert,
+which can be used to paste stuff from the [X11 primary selection][x11:clipboard].
+
+## Layer 2
+
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | 7 | 8 | 9 | | | | + | * | - | |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | : | 4 | 5 | 6 | = | | | ` | _ | ' | " |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | S+0 | 1 | 2 | 3 | | | | | | # | % | S+^ |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | L3 | | | | | | | | |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+
+A relatively unspectacular layer,
+RAISE is mainly used for numbers,
+and number adjacent things.
+Some symbols related to this,
+like `=`, `+`, `*`, and `-`,
+are replicated from the LOWER layer.
+This is due to the above mentioned issues of inserting arithmetic.
+This layer also features \` and `'` quite prominently,
+as these are important for [CDLaTeX].
+Plus, putting `'` and `"` on this layer circumvents the difficult to hit key on the base layer.
+
+## Layer 3
+
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | | | | | | | F7 | F8 | F9 | F10 |
+ .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
+ | | | | | | | | F4 | F5 | F6 | F11 |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | | | | | | F1 | F2 | F3 | F12 |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+ | | | | | | | | | | | | |
+ .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
+
+So far, only the seldom used F-keys are present here.
+As should be obvious, this is the least developed layer,
+and also the one that'll probably change the most in the future.
+Currently, I'm thinking of putting some XMonad specific bindings on here,
+which could even to free up the Super key to be used inside of Emacs
+for certain things—that would certainly be a worthwhile experiment.
+Other thoughts include things like volume and brightness controls,
+although this is less critical since my laptop keyboard is never far away.
+
+## Other features
+
+There are some features that aren't necessarily reflected in the keys themselves,
+yet are quite essential for day-to-day use.
+The TL;DR can be found in [rules.mk][./rules.mk].
+
+### [Key overrides][qmk:key-overrides]
+
+Quoting from the documentation
+
+> Key overrides allow you to override modifier-key combinations to send a different modifier-key combination
+> or perform completely custom actions.
+
+Some keys on the keyboard are quite hard to hit.
+On the default layout,
+one of these turns out to be the Tab key,
+which is nonetheless important in a lot of situations.
+Conveniently, Emacs interprets `C-i` as Tab, so there is less need to actually hit the "real" key.
+However, not all programs are quite so understanding—or old, I guess.
+With key overrides, one can send a real `TAB` whenever `C-i` is pressed;
+no special convention on how to interpret certain key chords required!
+I also rebound `C-m` to `RET` (with the same justification), and `S-BSP` to `DEL`.
+
+This is one of those features that I didn't know I needed,
+yet now couldn't live without anymore.
+I'm definitely looking forward to discovering new and interesting ways of using this!
+
+### [Autocorrect][qmk:autocorrect]
+
+This is a quaint little feature: auto-correct inside of your keyboard's firmware!
+I promise that it's not as bad as it sounds.
+It does not work automatically, thankfully, but is based off a given list of replacements.
+For example,
+
+ widht -> width
+
+would fire anytime one writes `widht`, which then gets replaced by `width`.
+This is based on (a trie of) the most recently pressed keys,
+so whenever one actually wants to write `widht`
+all that's needed is pressing, for example, any modifier during the insertion.
+
+As I've really just been trying this out for a laugh, my current word list is quite short:
+
+ :alot -> a lot
+ accesories -> accessories
+ accomodate -> accommodate
+ alledge -> allege
+
+In general,
+I think the solution to stop misspelling a word is not to remap key sequences on the firmware level,
+but to—you know—learn how to spell that word.
+Still,
+I can imagine at least one or two use-cases where something like this could be useful,
+so I figured it might be nice to make people aware of this features' existence.
+
+In addition—as I've found out on three separate occasions so far—using the words "auto-correct, but in firmware"
+makes people stare in utter disbelief and/or disgust at your keyboard.
+That alone makes this feature worth it.
+
+### [Caps Word][qmk:caps-word]
+
+Caps Word is a clever alternative to Caps Lock,
+which I enable by pressing both Shift keys together.
+After that,
+all of the letter keys are shifted,
+and `-` becomes `_`
+until a different key (excluding common sense ones like backspace) is pressed.
+This is very useful for, e.g.,
+writing long constants,
+as these tend to have capital names separated with underscores:
+writing `BOTH_SHIFTS_TURNS_ON_CAPS_WORD` has never been easier!
+
+One thing to note is that,
+while layer switching works just fine in "Caps Word mode",
+the [Tri Layer][qmk:tri-layer] feature does not seem to play nicely with it;
+i.e., the mode gets disabled when switching to these layers.
+This is also the reason why I have an explicit LOWER, RAISE, and ADJUST setup,
+instead of just using Tri Layer.
+One could fiddle with the `caps_word_press_user` callback,
+but it seemed much easier to just create one additional layer toggle instead.
+I haven't looked at how hard it would be to hack this into Caps Word,
+so maybe this is a future pull request.
+
+[CDLaTeX]: https://github.com/cdominik/cdlatex
+[colemak-dh]: https://colemakmods.github.io/mod-dh/
+[emacs:paredit]: https://paredit.org/
+[emacs:puni]: https://github.com/AmaiKinono/puni
+[qmk:autocorrect]: https://docs.qmk.fm/#/feature_autocorrect
+[qmk:caps-word]: https://docs.qmk.fm/#/feature_caps_word
+[qmk:key-overrides]: https://docs.qmk.fm/#/feature_key_overrides
+[qmk:macros]: https://docs.qmk.fm/#/feature_macros
+[qmk:mod-tap]: https://docs.qmk.fm/#/mod_tap
+[qmk:repeat-key]: https://docs.qmk.fm/#/feature_repeat_key
+[qmk:slotthe:tapdances]: https://github.com/slotThe/qmk_firmware/blob/keyboardio/atreus/slotThe/keyboards/keyboardio/atreus/keymaps/slotThe/keymap.c#L187
+[qmk:tap-dance]: https://docs.qmk.fm/#/feature_tap_dance
+[qmk:tri-layer]: https://docs.qmk.fm/#/feature_tri_layer
+[x11:clipboard]: https://www.uninformativ.de/blog/postings/2017-04-02/0/POSTING-en.html
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/rules.mk b/keyboards/keyboardio/atreus/keymaps/slotthe/rules.mk
new file mode 100644
index 000000000000..b603193f8584
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/rules.mk
@@ -0,0 +1,9 @@
+TAP_DANCE_ENABLE = yes
+KEY_OVERRIDE_ENABLE = yes
+AUTOCORRECT_ENABLE = yes
+CAPS_WORD_ENABLE = yes
+REPEAT_KEY_ENABLE = yes
+
+LTO_ENABLE = yes
+COMMAND_ENABLE = no
+MOUSEKEY_ENABLE = no
diff --git a/keyboards/keychron/c1_pro/ansi/rgb/config.h b/keyboards/keychron/c1_pro/ansi/rgb/config.h
new file mode 100644
index 000000000000..a103d190d0e3
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/rgb/config.h
@@ -0,0 +1,48 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* If PH3 used with a stronger pull resistor then the following definition needs be included */
+// #define MATRIX_UNSELECT_DRIVE_HIGH
+
+/* RGB Matrix Driver Configuration */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1110111
+#define DRIVER_ADDR_2 0b1110100
+
+/* RGB Matrix Configuration */
+#define DRIVER_1_LED_TOTAL 49
+#define DRIVER_2_LED_TOTAL 39
+#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+
+/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in CKLED2001.h) */
+#define PHASE_CHANNEL MSKPHASE_9CHANNEL
+/* Set led driver current */
+#define CKLED2001_CURRENT_TUNE \
+ { 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44 }
+
+/* turn off effects when suspended */
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+/* Enable caps_lock, win os and mac os indicator */
+#define CAPS_MAC_WIN_LED_INDEX 63
+
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/keychron/c1_pro/ansi/rgb/info.json b/keyboards/keychron/c1_pro/ansi/rgb/info.json
new file mode 100644
index 000000000000..e5f964a96a4c
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/rgb/info.json
@@ -0,0 +1,229 @@
+{
+ "usb": {
+ "pid": "0x0510",
+ "device_version": "1.0.0"
+ },
+ "features": {
+ "rgb_matrix": true
+ },
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix":[0, 0], "x":0, "y":0},
+ {"matrix":[0, 1], "x":2, "y":0},
+ {"matrix":[0, 2], "x":3, "y":0},
+ {"matrix":[0, 3], "x":4, "y":0},
+ {"matrix":[0, 4], "x":5, "y":0},
+ {"matrix":[0, 5], "x":6.5, "y":0},
+ {"matrix":[0, 6], "x":7.5, "y":0},
+ {"matrix":[0, 7], "x":8.5, "y":0},
+ {"matrix":[0, 8], "x":9.5, "y":0},
+ {"matrix":[0, 9], "x":11, "y":0},
+ {"matrix":[0,10], "x":12, "y":0},
+ {"matrix":[0,11], "x":13, "y":0},
+ {"matrix":[0,12], "x":14, "y":0},
+ {"matrix":[0,14], "x":15.25, "y":0},
+ {"matrix":[0,15], "x":16.25, "y":0},
+ {"matrix":[3,14], "x":17.25, "y":0},
+
+ {"matrix":[1, 0], "x":0, "y":1.25},
+ {"matrix":[1, 1], "x":1, "y":1.25},
+ {"matrix":[1, 2], "x":2, "y":1.25},
+ {"matrix":[1, 3], "x":3, "y":1.25},
+ {"matrix":[1, 4], "x":4, "y":1.25},
+ {"matrix":[1, 5], "x":5, "y":1.25},
+ {"matrix":[1, 6], "x":6, "y":1.25},
+ {"matrix":[1, 7], "x":7, "y":1.25},
+ {"matrix":[1, 8], "x":8, "y":1.25},
+ {"matrix":[1, 9], "x":9, "y":1.25},
+ {"matrix":[1,10], "x":10, "y":1.25},
+ {"matrix":[1,11], "x":11, "y":1.25},
+ {"matrix":[1,12], "x":12, "y":1.25},
+ {"matrix":[1,13], "x":13, "y":1.25, "w":2},
+ {"matrix":[1,14], "x":15.25, "y":1.25},
+ {"matrix":[1,15], "x":16.25, "y":1.25},
+ {"matrix":[3,15], "x":17.25, "y":1.25},
+
+ {"matrix":[2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix":[2, 1], "x":1.5, "y":2.25},
+ {"matrix":[2, 2], "x":2.5, "y":2.25},
+ {"matrix":[2, 3], "x":3.5, "y":2.25},
+ {"matrix":[2, 4], "x":4.5, "y":2.25},
+ {"matrix":[2, 5], "x":5.5, "y":2.25},
+ {"matrix":[2, 6], "x":6.5, "y":2.25},
+ {"matrix":[2, 7], "x":7.5, "y":2.25},
+ {"matrix":[2, 8], "x":8.5, "y":2.25},
+ {"matrix":[2, 9], "x":9.5, "y":2.25},
+ {"matrix":[2,10], "x":10.5, "y":2.25},
+ {"matrix":[2,11], "x":11.5, "y":2.25},
+ {"matrix":[2,12], "x":12.5, "y":2.25},
+ {"matrix":[2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix":[2,14], "x":15.25, "y":2.25},
+ {"matrix":[2,15], "x":16.25, "y":2.25},
+ {"matrix":[3,12], "x":17.25, "y":2.25},
+
+ {"matrix":[3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix":[3, 1], "x":1.75, "y":3.25},
+ {"matrix":[3, 2], "x":2.75, "y":3.25},
+ {"matrix":[3, 3], "x":3.75, "y":3.25},
+ {"matrix":[3, 4], "x":4.75, "y":3.25},
+ {"matrix":[3, 5], "x":5.75, "y":3.25},
+ {"matrix":[3, 6], "x":6.75, "y":3.25},
+ {"matrix":[3, 7], "x":7.75, "y":3.25},
+ {"matrix":[3, 8], "x":8.75, "y":3.25},
+ {"matrix":[3, 9], "x":9.75, "y":3.25},
+ {"matrix":[3,10], "x":10.75, "y":3.25},
+ {"matrix":[3,11], "x":11.75, "y":3.25},
+ {"matrix":[3,13], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix":[4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix":[4, 2], "x":2.25, "y":4.25},
+ {"matrix":[4, 3], "x":3.25, "y":4.25},
+ {"matrix":[4, 4], "x":4.25, "y":4.25},
+ {"matrix":[4, 5], "x":5.25, "y":4.25},
+ {"matrix":[4, 6], "x":6.25, "y":4.25},
+ {"matrix":[4, 7], "x":7.25, "y":4.25},
+ {"matrix":[4, 8], "x":8.25, "y":4.25},
+ {"matrix":[4, 9], "x":9.25, "y":4.25},
+ {"matrix":[4,10], "x":10.25, "y":4.25},
+ {"matrix":[4,11], "x":11.25, "y":4.25},
+ {"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix":[4,15], "x":16.25, "y":4.25},
+
+ {"matrix":[5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix":[5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix":[5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix":[5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix":[5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix":[5,14], "x":15.25, "y":5.25},
+ {"matrix":[5,15], "x":16.25, "y":5.25},
+ {"matrix":[4,14], "x":17.25, "y":5.25}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "CKLED2001",
+ "animations": {
+ "breathing": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "jellybean_raindrops": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true
+ },
+ "layout": [
+ {"matrix":[0, 0], "flags":1, "x":0, "y":0},
+ {"matrix":[0, 1], "flags":1, "x":26, "y":0},
+ {"matrix":[0, 2], "flags":1, "x":39, "y":0},
+ {"matrix":[0, 3], "flags":1, "x":52, "y":0},
+ {"matrix":[0, 4], "flags":1, "x":65, "y":0},
+ {"matrix":[0, 5], "flags":1, "x":85, "y":0},
+ {"matrix":[0, 6], "flags":1, "x":98, "y":0},
+ {"matrix":[0, 7], "flags":1, "x":111, "y":0},
+ {"matrix":[0, 8], "flags":1, "x":124, "y":0},
+ {"matrix":[0, 9], "flags":1, "x":143, "y":0},
+ {"matrix":[0, 10], "flags":1, "x":156, "y":0},
+ {"matrix":[0, 11], "flags":1, "x":169, "y":0},
+ {"matrix":[0, 12], "flags":1, "x":182, "y":0},
+ {"matrix":[0, 14], "flags":1, "x":198, "y":0},
+ {"matrix":[0, 15], "flags":1, "x":211, "y":0},
+ {"matrix":[3, 14], "flags":1, "x":224, "y":0},
+
+ {"matrix":[1, 0], "flags":1, "x":0, "y":15},
+ {"matrix":[1, 1], "flags":4, "x":15, "y":15},
+ {"matrix":[1, 2], "flags":4, "x":26, "y":15},
+ {"matrix":[1, 3], "flags":4, "x":39, "y":15},
+ {"matrix":[1, 4], "flags":4, "x":52, "y":15},
+ {"matrix":[1, 5], "flags":4, "x":65, "y":15},
+ {"matrix":[1, 6], "flags":4, "x":78, "y":15},
+ {"matrix":[1, 7], "flags":4, "x":91, "y":15},
+ {"matrix":[1, 8], "flags":4, "x":104, "y":15},
+ {"matrix":[1, 9], "flags":4, "x":117, "y":15},
+ {"matrix":[1, 10], "flags":4, "x":130, "y":15},
+ {"matrix":[1, 11], "flags":4, "x":143, "y":15},
+ {"matrix":[1, 12], "flags":4, "x":156, "y":15},
+ {"matrix":[1, 13], "flags":1, "x":176, "y":15},
+ {"matrix":[1, 14], "flags":1, "x":198, "y":15},
+ {"matrix":[1, 15], "flags":1, "x":211, "y":15},
+ {"matrix":[3, 15], "flags":1, "x":224, "y":15},
+
+ {"matrix":[2, 0], "flags":1, "x":3, "y":27},
+ {"matrix":[2, 1], "flags":4, "x":20, "y":27},
+ {"matrix":[2, 2], "flags":4, "x":33, "y":27},
+ {"matrix":[2, 3], "flags":4, "x":46, "y":27},
+ {"matrix":[2, 4], "flags":4, "x":59, "y":27},
+ {"matrix":[2, 5], "flags":4, "x":72, "y":27},
+ {"matrix":[2, 6], "flags":4, "x":85, "y":27},
+ {"matrix":[2, 7], "flags":4, "x":98, "y":27},
+ {"matrix":[2, 8], "flags":4, "x":111, "y":27},
+ {"matrix":[2, 9], "flags":4, "x":124, "y":27},
+ {"matrix":[2, 10], "flags":4, "x":137, "y":27},
+ {"matrix":[2, 11], "flags":4, "x":150, "y":27},
+ {"matrix":[2, 12], "flags":4, "x":163, "y":27},
+ {"matrix":[2, 13], "flags":4, "x":179, "y":27},
+ {"matrix":[2, 14], "flags":1, "x":198, "y":27},
+ {"matrix":[2, 15], "flags":1, "x":211, "y":27},
+ {"matrix":[3, 12], "flags":1, "x":224, "y":27},
+
+ {"matrix":[3, 0], "flags":8, "x":5, "y":39},
+ {"matrix":[3, 1], "flags":4, "x":23, "y":39},
+ {"matrix":[3, 2], "flags":4, "x":36, "y":39},
+ {"matrix":[3, 3], "flags":4, "x":49, "y":39},
+ {"matrix":[3, 4], "flags":4, "x":62, "y":39},
+ {"matrix":[3, 5], "flags":4, "x":75, "y":39},
+ {"matrix":[3, 6], "flags":4, "x":88, "y":39},
+ {"matrix":[3, 7], "flags":4, "x":101, "y":39},
+ {"matrix":[3, 8], "flags":4, "x":114, "y":39},
+ {"matrix":[3, 9], "flags":4, "x":127, "y":39},
+ {"matrix":[3, 10], "flags":4, "x":140, "y":39},
+ {"matrix":[3, 11], "flags":4, "x":153, "y":39},
+ {"matrix":[3, 13], "flags":1, "x":174, "y":39},
+
+ {"matrix":[4, 12], "flags":8, "x":211, "y":39},
+
+ {"matrix":[4, 0], "flags":1, "x":8, "y":52},
+ {"matrix":[4, 2], "flags":4, "x":29, "y":52},
+ {"matrix":[4, 3], "flags":4, "x":42, "y":52},
+ {"matrix":[4, 4], "flags":4, "x":55, "y":52},
+ {"matrix":[4, 5], "flags":4, "x":68, "y":52},
+ {"matrix":[4, 6], "flags":4, "x":82, "y":52},
+ {"matrix":[4, 7], "flags":4, "x":95, "y":52},
+ {"matrix":[4, 8], "flags":4, "x":108, "y":52},
+ {"matrix":[4, 9], "flags":4, "x":121, "y":52},
+ {"matrix":[4, 10], "flags":4, "x":134, "y":52},
+ {"matrix":[4, 11], "flags":4, "x":147, "y":52},
+ {"matrix":[4, 13], "flags":1, "x":171, "y":52},
+ {"matrix":[4, 15], "flags":1, "x":211, "y":52},
+
+ {"matrix":[5, 0], "flags":1, "x":2, "y":64},
+ {"matrix":[5, 1], "flags":1, "x":18, "y":64},
+ {"matrix":[5, 2], "flags":1, "x":34, "y":64},
+ {"matrix":[5, 6], "flags":4, "x":83, "y":64},
+ {"matrix":[5, 10], "flags":1, "x":132, "y":64},
+ {"matrix":[5, 11], "flags":1, "x":148, "y":64},
+ {"matrix":[5, 12], "flags":4, "x":165, "y":64},
+ {"matrix":[5, 13], "flags":1, "x":181, "y":64},
+ {"matrix":[5, 14], "flags":1, "x":198, "y":64},
+ {"matrix":[5, 15], "flags":1, "x":211, "y":64},
+ {"matrix":[4, 14], "flags":1, "x":224, "y":64}
+ ]
+ }
+}
diff --git a/keyboards/keychron/c1_pro/ansi/rgb/keymaps/default/keymap.c b/keyboards/keychron/c1_pro/ansi/rgb/keymaps/default/keymap.c
new file mode 100644
index 000000000000..636e83b52752
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/rgb/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, RGB_MOD,
+ 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_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_tkl_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, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NO, RGB_MOD,
+ 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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_tkl_ansi(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/keychron/c1_pro/ansi/rgb/keymaps/keychron/keymap.c b/keyboards/keychron/c1_pro/ansi/rgb/keymaps/keychron/keymap.c
new file mode 100644
index 000000000000..2b5a1957cd6c
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/rgb/keymaps/keychron/keymap.c
@@ -0,0 +1,72 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD,
+ 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_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_tkl_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, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_CRTA, RGB_MOD,
+ 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_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_tkl_ansi(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+// clang-format on
+
+void housekeeping_task_user(void) {
+ housekeeping_task_keychron();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_keychron(keycode, record)) {
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/keychron/c1_pro/ansi/rgb/keymaps/keychron/rules.mk b/keyboards/keychron/c1_pro/ansi/rgb/keymaps/keychron/rules.mk
new file mode 100644
index 000000000000..495e8907b48c
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/rgb/keymaps/keychron/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/keyboards/keychron/c1_pro/ansi/rgb/keymaps/via/keymap.c b/keyboards/keychron/c1_pro/ansi/rgb/keymaps/via/keymap.c
new file mode 100644
index 000000000000..636e83b52752
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/rgb/keymaps/via/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, RGB_MOD,
+ 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_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_tkl_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, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NO, RGB_MOD,
+ 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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_tkl_ansi(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/keychron/c1_pro/ansi/rgb/keymaps/via/rules.mk b/keyboards/keychron/c1_pro/ansi/rgb/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/rgb/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/c1_pro/ansi/rgb/rgb.c b/keyboards/keychron/c1_pro/ansi/rgb/rgb.c
new file mode 100644
index 000000000000..04565f3b014b
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/rgb/rgb.c
@@ -0,0 +1,168 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, I_1, G_1, H_1},
+ {0, I_2, G_2, H_2},
+ {0, I_3, G_3, H_3},
+ {0, I_4, G_4, H_4},
+ {0, I_5, G_5, H_5},
+ {0, I_6, G_6, H_6},
+ {0, I_7, G_7, H_7},
+ {0, I_8, G_8, H_8},
+ {0, I_9, G_9, H_9},
+ {0, I_10, G_10, H_10},
+ {0, I_11, G_11, H_11},
+ {0, I_12, G_12, H_12},
+ {0, I_13, G_13, H_13},
+ {0, I_15, G_15, H_15},
+ {0, I_16, G_16, H_16},
+ {1, I_15, G_15, H_15},
+
+ {0, C_1, A_1, B_1},
+ {0, C_2, A_2, B_2},
+ {0, C_3, A_3, B_3},
+ {0, C_4, A_4, B_4},
+ {0, C_5, A_5, B_5},
+ {0, C_6, A_6, B_6},
+ {0, C_7, A_7, B_7},
+ {0, C_8, A_8, B_8},
+ {0, C_9, A_9, B_9},
+ {0, C_10, A_10, B_10},
+ {0, C_11, A_11, B_11},
+ {0, C_12, A_12, B_12},
+ {0, C_13, A_13, B_13},
+ {0, C_14, A_14, B_14},
+ {0, C_15, A_15, B_15},
+ {0, C_16, A_16, B_16},
+ {1, I_16, G_16, H_16},
+
+ {0, F_1, D_1, E_1},
+ {0, F_2, D_2, E_2},
+ {0, F_3, D_3, E_3},
+ {0, F_4, D_4, E_4},
+ {0, F_5, D_5, E_5},
+ {0, F_6, D_6, E_6},
+ {0, F_7, D_7, E_7},
+ {0, F_8, D_8, E_8},
+ {0, F_9, D_9, E_9},
+ {0, F_10, D_10, E_10},
+ {0, F_11, D_11, E_11},
+ {0, F_12, D_12, E_12},
+ {0, F_13, D_13, E_13},
+ {0, F_14, D_14, E_14},
+ {0, F_15, D_15, E_15},
+ {0, F_16, D_16, E_16},
+ {1, I_13, G_13, H_13},
+
+ {1, I_1, G_1, H_1},
+ {1, I_2, G_2, H_2},
+ {1, I_3, G_3, H_3},
+ {1, I_4, G_4, H_4},
+ {1, I_5, G_5, H_5},
+ {1, I_6, G_6, H_6},
+ {1, I_7, G_7, H_7},
+ {1, I_8, G_8, H_8},
+ {1, I_9, G_9, H_9},
+ {1, I_10, G_10, H_10},
+ {1, I_11, G_11, H_11},
+ {1, I_12, G_12, H_12},
+ {1, I_14, G_14, H_14},
+
+ {0, I_14, G_14, H_14}, // CAPS_MAC_WIN_LED_INDEX
+
+ {1, C_1, A_1, B_1},
+ {1, C_3, A_3, B_3},
+ {1, C_4, A_4, B_4},
+ {1, C_5, A_5, B_5},
+ {1, C_6, A_6, B_6},
+ {1, C_7, A_7, B_7},
+ {1, C_8, A_8, B_8},
+ {1, C_9, A_9, B_9},
+ {1, C_10, A_10, B_10},
+ {1, C_11, A_11, B_11},
+ {1, C_12, A_12, B_12},
+ {1, C_14, A_14, B_14},
+ {1, C_16, A_16, B_16},
+
+ {1, F_1, D_1, E_1},
+ {1, F_2, D_2, E_2},
+ {1, F_3, D_3, E_3},
+ {1, F_7, D_7, E_7},
+ {1, F_11, D_11, E_11},
+ {1, F_12, D_12, E_12},
+ {1, F_13, D_13, E_13},
+ {1, F_14, D_14, E_14},
+ {1, F_15, D_15, E_15},
+ {1, F_16, D_16, E_16},
+ {1, C_15, A_15, B_15},
+};
+
+// clang-format on
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+ switch (keycode) {
+ case RGB_TOG:
+ if (record->event.pressed) {
+ switch (rgb_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ rgb_matrix_set_color_all(0, 0, 0);
+ } break;
+ default: {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ } break;
+ }
+ }
+ if (!rgb_matrix_is_enabled()) {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ rgb_matrix_enable();
+ }
+ return false;
+ }
+ return true;
+}
+
+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) && (default_layer_state == (1 << 0))) {
+ rgb_matrix_set_color(CAPS_MAC_WIN_LED_INDEX, 0, 255, 255);
+ } else if ((!host_keyboard_led_state().caps_lock) && (default_layer_state == (1 << 0))) {
+ rgb_matrix_set_color(CAPS_MAC_WIN_LED_INDEX, 0, 0, 255);
+ } else if ((host_keyboard_led_state().caps_lock) && (default_layer_state == (1 << 2))) {
+ rgb_matrix_set_color(CAPS_MAC_WIN_LED_INDEX, 255, 255, 0);
+ } else if ((!host_keyboard_led_state().caps_lock) && (default_layer_state == (1 << 2))) {
+ rgb_matrix_set_color(CAPS_MAC_WIN_LED_INDEX, 255, 0, 0);
+ }
+ return true;
+}
+
+#endif
diff --git a/keyboards/keychron/c1_pro/ansi/rgb/rules.mk b/keyboards/keychron/c1_pro/ansi/rgb/rules.mk
new file mode 100644
index 000000000000..414ee38bbd3d
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/rgb/rules.mk
@@ -0,0 +1,3 @@
+# Build Options
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/keychron/c1_pro/ansi/white/config.h b/keyboards/keychron/c1_pro/ansi/white/config.h
new file mode 100644
index 000000000000..dd3e1da477bf
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/white/config.h
@@ -0,0 +1,48 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* If PH3 used with a stronger pull resistor then the following definition needs be included */
+// #define MATRIX_UNSELECT_DRIVE_HIGH
+
+/* LED Matrix Driver Configuration */
+#define DRIVER_COUNT 1
+#define DRIVER_ADDR_1 0b1110100
+
+/* LED Matrix Configuration */
+#define LED_MATRIX_LED_COUNT 90
+
+/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in CKLED2001.h) */
+#define PHASE_CHANNEL MSKPHASE_9CHANNEL
+/* Set led driver current */
+#define CKLED2001_CURRENT_TUNE \
+ { 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44 }
+
+/* turn off effects when suspended */
+#define LED_DISABLE_WHEN_USB_SUSPENDED
+
+/* Enbale caps_lcok, win os and mac os indicator */
+#define CAPS_LOCK_LED_INDEX 63
+#define MAC_LOCK_LED_INDEX 64
+#define WIN_LOCK_LED_INDEX 65
+
+// LED Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_led_matrix?id=led-matrix-effects
+// #if defined(LED_MATRIX_KEYPRESSES) || defined(LED_MATRIX_KEYRELEASES)
+#define LED_MATRIX_KEYPRESSES
+#define LED_MATRIX_KEYRELEASES
diff --git a/keyboards/keychron/c1_pro/ansi/white/info.json b/keyboards/keychron/c1_pro/ansi/white/info.json
new file mode 100644
index 000000000000..78c672ac893e
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/white/info.json
@@ -0,0 +1,226 @@
+{
+ "usb": {
+ "pid": "0x0513",
+ "device_version": "1.0.0"
+ },
+ "features": {
+ "led_matrix": true
+ },
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix":[0, 0], "x":0, "y":0},
+ {"matrix":[0, 1], "x":2, "y":0},
+ {"matrix":[0, 2], "x":3, "y":0},
+ {"matrix":[0, 3], "x":4, "y":0},
+ {"matrix":[0, 4], "x":5, "y":0},
+ {"matrix":[0, 5], "x":6.5, "y":0},
+ {"matrix":[0, 6], "x":7.5, "y":0},
+ {"matrix":[0, 7], "x":8.5, "y":0},
+ {"matrix":[0, 8], "x":9.5, "y":0},
+ {"matrix":[0, 9], "x":11, "y":0},
+ {"matrix":[0,10], "x":12, "y":0},
+ {"matrix":[0,11], "x":13, "y":0},
+ {"matrix":[0,12], "x":14, "y":0},
+ {"matrix":[0,14], "x":15.25, "y":0},
+ {"matrix":[0,15], "x":16.25, "y":0},
+ {"matrix":[0,13], "x":17.25, "y":0},
+
+ {"matrix":[1, 0], "x":0, "y":1.25},
+ {"matrix":[1, 1], "x":1, "y":1.25},
+ {"matrix":[1, 2], "x":2, "y":1.25},
+ {"matrix":[1, 3], "x":3, "y":1.25},
+ {"matrix":[1, 4], "x":4, "y":1.25},
+ {"matrix":[1, 5], "x":5, "y":1.25},
+ {"matrix":[1, 6], "x":6, "y":1.25},
+ {"matrix":[1, 7], "x":7, "y":1.25},
+ {"matrix":[1, 8], "x":8, "y":1.25},
+ {"matrix":[1, 9], "x":9, "y":1.25},
+ {"matrix":[1,10], "x":10, "y":1.25},
+ {"matrix":[1,11], "x":11, "y":1.25},
+ {"matrix":[1,12], "x":12, "y":1.25},
+ {"matrix":[1,13], "x":13, "y":1.25, "w":2},
+ {"matrix":[1,14], "x":15.25, "y":1.25},
+ {"matrix":[1,15], "x":16.25, "y":1.25},
+ {"matrix":[3,12], "x":17.25, "y":1.25},
+
+ {"matrix":[2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix":[2, 1], "x":1.5, "y":2.25},
+ {"matrix":[2, 2], "x":2.5, "y":2.25},
+ {"matrix":[2, 3], "x":3.5, "y":2.25},
+ {"matrix":[2, 4], "x":4.5, "y":2.25},
+ {"matrix":[2, 5], "x":5.5, "y":2.25},
+ {"matrix":[2, 6], "x":6.5, "y":2.25},
+ {"matrix":[2, 7], "x":7.5, "y":2.25},
+ {"matrix":[2, 8], "x":8.5, "y":2.25},
+ {"matrix":[2, 9], "x":9.5, "y":2.25},
+ {"matrix":[2,10], "x":10.5, "y":2.25},
+ {"matrix":[2,11], "x":11.5, "y":2.25},
+ {"matrix":[2,12], "x":12.5, "y":2.25},
+ {"matrix":[2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix":[2,14], "x":15.25, "y":2.25},
+ {"matrix":[2,15], "x":16.25, "y":2.25},
+ {"matrix":[3,14], "x":17.25, "y":2.25},
+
+ {"matrix":[3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix":[3, 1], "x":1.75, "y":3.25},
+ {"matrix":[3, 2], "x":2.75, "y":3.25},
+ {"matrix":[3, 3], "x":3.75, "y":3.25},
+ {"matrix":[3, 4], "x":4.75, "y":3.25},
+ {"matrix":[3, 5], "x":5.75, "y":3.25},
+ {"matrix":[3, 6], "x":6.75, "y":3.25},
+ {"matrix":[3, 7], "x":7.75, "y":3.25},
+ {"matrix":[3, 8], "x":8.75, "y":3.25},
+ {"matrix":[3, 9], "x":9.75, "y":3.25},
+ {"matrix":[3,10], "x":10.75, "y":3.25},
+ {"matrix":[3,11], "x":11.75, "y":3.25},
+ {"matrix":[3,13], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix":[4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix":[4, 2], "x":2.25, "y":4.25},
+ {"matrix":[4, 3], "x":3.25, "y":4.25},
+ {"matrix":[4, 4], "x":4.25, "y":4.25},
+ {"matrix":[4, 5], "x":5.25, "y":4.25},
+ {"matrix":[4, 6], "x":6.25, "y":4.25},
+ {"matrix":[4, 7], "x":7.25, "y":4.25},
+ {"matrix":[4, 8], "x":8.25, "y":4.25},
+ {"matrix":[4, 9], "x":9.25, "y":4.25},
+ {"matrix":[4,10], "x":10.25, "y":4.25},
+ {"matrix":[4,11], "x":11.25, "y":4.25},
+ {"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix":[4,15], "x":16.25, "y":4.25},
+
+ {"matrix":[5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix":[5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix":[5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix":[5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix":[5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix":[5,14], "x":15.25, "y":5.25},
+ {"matrix":[5,15], "x":16.25, "y":5.25},
+ {"matrix":[3,15], "x":17.25, "y":5.25}
+ ]
+ }
+ },
+ "led_matrix": {
+ "driver": "CKLED2001",
+ "animations": {
+ "none": true,
+ "solid": true,
+ "breathing": true,
+ "band_pinwheel": true,
+ "band_spiral": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "dual_beacon": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_multinexus": true,
+ "solid_splash": true,
+ "wave_left_right": true,
+ "wave_up_down": true,
+ "effect_max": true
+ },
+ "layout": [
+ {"matrix":[0, 0], "flags":1, "x":0, "y":0},
+ {"matrix":[0, 1], "flags":1, "x":26, "y":0},
+ {"matrix":[0, 2], "flags":1, "x":39, "y":0},
+ {"matrix":[0, 3], "flags":1, "x":52, "y":0},
+ {"matrix":[0, 4], "flags":1, "x":65, "y":0},
+ {"matrix":[0, 5], "flags":1, "x":85, "y":0},
+ {"matrix":[0, 6], "flags":1, "x":98, "y":0},
+ {"matrix":[0, 7], "flags":1, "x":111, "y":0},
+ {"matrix":[0, 8], "flags":1, "x":124, "y":0},
+ {"matrix":[0, 9], "flags":1, "x":143, "y":0},
+ {"matrix":[0, 10], "flags":1, "x":156, "y":0},
+ {"matrix":[0, 11], "flags":1, "x":169, "y":0},
+ {"matrix":[0, 12], "flags":1, "x":182, "y":0},
+ {"matrix":[0, 14], "flags":1, "x":198, "y":0},
+ {"matrix":[0, 15], "flags":1, "x":211, "y":0},
+ {"matrix":[0, 13], "flags":1, "x":224, "y":0},
+
+ {"matrix":[1, 0], "flags":1, "x":0, "y":15},
+ {"matrix":[1, 1], "flags":4, "x":15, "y":15},
+ {"matrix":[1, 2], "flags":4, "x":26, "y":15},
+ {"matrix":[1, 3], "flags":4, "x":39, "y":15},
+ {"matrix":[1, 4], "flags":4, "x":52, "y":15},
+ {"matrix":[1, 5], "flags":4, "x":65, "y":15},
+ {"matrix":[1, 6], "flags":4, "x":78, "y":15},
+ {"matrix":[1, 7], "flags":4, "x":91, "y":15},
+ {"matrix":[1, 8], "flags":4, "x":104, "y":15},
+ {"matrix":[1, 9], "flags":4, "x":117, "y":15},
+ {"matrix":[1, 10], "flags":4, "x":130, "y":15},
+ {"matrix":[1, 11], "flags":4, "x":143, "y":15},
+ {"matrix":[1, 12], "flags":4, "x":156, "y":15},
+ {"matrix":[1, 13], "flags":1, "x":176, "y":15},
+ {"matrix":[1, 14], "flags":1, "x":198, "y":15},
+ {"matrix":[1, 15], "flags":1, "x":211, "y":15},
+ {"matrix":[3, 12], "flags":1, "x":224, "y":15},
+
+ {"matrix":[2, 0], "flags":1, "x":3, "y":27},
+ {"matrix":[2, 1], "flags":4, "x":20, "y":27},
+ {"matrix":[2, 2], "flags":4, "x":33, "y":27},
+ {"matrix":[2, 3], "flags":4, "x":46, "y":27},
+ {"matrix":[2, 4], "flags":4, "x":59, "y":27},
+ {"matrix":[2, 5], "flags":4, "x":72, "y":27},
+ {"matrix":[2, 6], "flags":4, "x":85, "y":27},
+ {"matrix":[2, 7], "flags":4, "x":98, "y":27},
+ {"matrix":[2, 8], "flags":4, "x":111, "y":27},
+ {"matrix":[2, 9], "flags":4, "x":124, "y":27},
+ {"matrix":[2, 10], "flags":4, "x":137, "y":27},
+ {"matrix":[2, 11], "flags":4, "x":150, "y":27},
+ {"matrix":[2, 12], "flags":4, "x":163, "y":27},
+ {"matrix":[2, 13], "flags":4, "x":179, "y":27},
+ {"matrix":[2, 14], "flags":1, "x":198, "y":27},
+ {"matrix":[2, 15], "flags":1, "x":211, "y":27},
+ {"matrix":[3, 14], "flags":1, "x":224, "y":27},
+
+ {"matrix":[3, 0], "flags":8, "x":5, "y":39},
+ {"matrix":[3, 1], "flags":4, "x":23, "y":39},
+ {"matrix":[3, 2], "flags":4, "x":36, "y":39},
+ {"matrix":[3, 3], "flags":4, "x":49, "y":39},
+ {"matrix":[3, 4], "flags":4, "x":62, "y":39},
+ {"matrix":[3, 5], "flags":4, "x":75, "y":39},
+ {"matrix":[3, 6], "flags":4, "x":88, "y":39},
+ {"matrix":[3, 7], "flags":4, "x":101, "y":39},
+ {"matrix":[3, 8], "flags":4, "x":114, "y":39},
+ {"matrix":[3, 9], "flags":4, "x":127, "y":39},
+ {"matrix":[3, 10], "flags":4, "x":140, "y":39},
+ {"matrix":[3, 11], "flags":4, "x":153, "y":39},
+ {"matrix":[3, 13], "flags":1, "x":174, "y":39},
+
+ {"matrix":[4, 12], "flags":8, "x":198, "y":39},
+ {"matrix":[4, 12], "flags":8, "x":211, "y":39},
+ {"matrix":[4, 12], "flags":8, "x":224, "y":39},
+
+ {"matrix":[4, 0], "flags":1, "x":8, "y":52},
+ {"matrix":[4, 2], "flags":4, "x":29, "y":52},
+ {"matrix":[4, 3], "flags":4, "x":42, "y":52},
+ {"matrix":[4, 4], "flags":4, "x":55, "y":52},
+ {"matrix":[4, 5], "flags":4, "x":68, "y":52},
+ {"matrix":[4, 6], "flags":4, "x":82, "y":52},
+ {"matrix":[4, 7], "flags":4, "x":95, "y":52},
+ {"matrix":[4, 8], "flags":4, "x":108, "y":52},
+ {"matrix":[4, 9], "flags":4, "x":121, "y":52},
+ {"matrix":[4, 10], "flags":4, "x":134, "y":52},
+ {"matrix":[4, 11], "flags":4, "x":147, "y":52},
+ {"matrix":[4, 13], "flags":1, "x":171, "y":52},
+ {"matrix":[4, 15], "flags":1, "x":211, "y":52},
+
+ {"matrix":[5, 0], "flags":1, "x":2, "y":64},
+ {"matrix":[5, 1], "flags":1, "x":18, "y":64},
+ {"matrix":[5, 2], "flags":1, "x":34, "y":64},
+ {"matrix":[5, 6], "flags":4, "x":83, "y":64},
+ {"matrix":[5, 10], "flags":1, "x":132, "y":64},
+ {"matrix":[5, 11], "flags":1, "x":148, "y":64},
+ {"matrix":[5, 12], "flags":4, "x":165, "y":64},
+ {"matrix":[5, 13], "flags":1, "x":181, "y":64},
+ {"matrix":[5, 14], "flags":1, "x":198, "y":64},
+ {"matrix":[5, 15], "flags":1, "x":211, "y":64},
+ {"matrix":[3, 15], "flags":1, "x":224, "y":64}
+ ]
+ }
+}
diff --git a/keyboards/keychron/c1_pro/ansi/white/keymaps/default/keymap.c b/keyboards/keychron/c1_pro/ansi/white/keymaps/default/keymap.c
new file mode 100644
index 000000000000..a829c1189226
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/white/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, BL_STEP,
+ 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_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_tkl_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, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, BL_STEP,
+ 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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_tkl_ansi(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/keychron/c1_pro/ansi/white/keymaps/keychron/keymap.c b/keyboards/keychron/c1_pro/ansi/white/keymaps/keychron/keymap.c
new file mode 100644
index 000000000000..e17d67eb7188
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/white/keymaps/keychron/keymap.c
@@ -0,0 +1,70 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, BL_STEP,
+ 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_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_tkl_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, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_CRTA, BL_STEP,
+ 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_LCMD, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_tkl_ansi(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+void housekeeping_task_user(void) {
+ housekeeping_task_keychron();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_keychron(keycode, record)) {
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/keychron/c1_pro/ansi/white/keymaps/keychron/rules.mk b/keyboards/keychron/c1_pro/ansi/white/keymaps/keychron/rules.mk
new file mode 100644
index 000000000000..495e8907b48c
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/white/keymaps/keychron/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/keyboards/keychron/c1_pro/ansi/white/keymaps/via/keymap.c b/keyboards/keychron/c1_pro/ansi/white/keymaps/via/keymap.c
new file mode 100644
index 000000000000..a829c1189226
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/white/keymaps/via/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, BL_STEP,
+ 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_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_tkl_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, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, BL_STEP,
+ 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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_tkl_ansi(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/keychron/c1_pro/ansi/white/keymaps/via/rules.mk b/keyboards/keychron/c1_pro/ansi/white/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/white/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/c1_pro/ansi/white/rules.mk b/keyboards/keychron/c1_pro/ansi/white/rules.mk
new file mode 100644
index 000000000000..414ee38bbd3d
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/white/rules.mk
@@ -0,0 +1,3 @@
+# Build Options
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/keychron/c1_pro/ansi/white/white.c b/keyboards/keychron/c1_pro/ansi/white/white.c
new file mode 100644
index 000000000000..72e9ad4db139
--- /dev/null
+++ b/keyboards/keychron/c1_pro/ansi/white/white.c
@@ -0,0 +1,176 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+// clang-format off
+#ifdef LED_MATRIX_ENABLE
+const ckled2001_led PROGMEM g_ckled2001_leds[LED_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | LED address
+ * | | */
+ {0, A_16}, // esc
+ {0, A_15}, // f1
+ {0, A_14}, // f2
+ {0, A_13}, // f3
+ {0, A_12}, // f4
+ {0, A_11}, // f5
+ {0, A_10}, // f6
+ {0, A_9}, // f7
+ {0, A_8}, // f8
+ {0, A_7}, // f9
+ {0, A_6}, // f10
+ {0, A_5}, // f11
+ {0, A_4}, // f12
+ {0, A_2}, // print
+ {0, A_1}, // siri
+ {0, G_1}, // light
+
+ {0, B_16}, // ~
+ {0, B_15}, // 1!
+ {0, B_14}, // 2@
+ {0, B_13}, // 3#
+ {0, B_12}, // 4$
+ {0, B_11}, // 5%
+ {0, B_10}, // 6^
+ {0, B_9}, // 7&
+ {0, B_8}, // 8*
+ {0, B_7}, // 9(
+ {0, B_6}, // 0)
+ {0, B_5}, // -_
+ {0, B_4}, // =+
+ {0, B_3}, // back space
+ {0, B_2}, // INS
+ {0, B_1}, // HOME
+ {0, H_1}, // PGUP
+
+ {0, C_16}, // tab
+ {0, C_15}, // q
+ {0, C_14}, // w
+ {0, C_13}, // e
+ {0, C_12}, // r
+ {0, C_11}, // t
+ {0, C_10}, // y
+ {0, C_9}, // u
+ {0, C_8}, // i
+ {0, C_7}, // o
+ {0, C_6}, // p
+ {0, C_5}, // [{
+ {0, C_4}, // ]}
+ {0, C_3}, // \|
+ {0, C_2}, // DEL
+ {0, C_1}, // END
+ {0, G_6}, // PGDN
+
+ {0, D_16}, // caps lock
+ {0, D_15}, // a
+ {0, D_14}, // s
+ {0, D_13}, // d
+ {0, D_12}, // f
+ {0, D_11}, // g
+ {0, D_10}, // h
+ {0, D_9}, // j
+ {0, D_8}, // k
+ {0, D_7}, // l
+ {0, D_6}, // ;:
+ {0, D_5}, // '"
+ {0, D_3}, // enter
+
+ {0, H_7}, // CPAS
+ {0, H_8}, // MAC
+ {0, H_9}, // WIN
+
+ {0, E_16}, // left shift
+ {0, E_14}, // z
+ {0, E_13}, // x
+ {0, E_12}, // c
+ {0, E_11}, // v
+ {0, E_10}, // b
+ {0, E_9}, // b
+ {0, E_8}, // n
+ {0, E_7}, // m
+ {0, E_6}, // ,<
+ {0, E_5}, // .>
+ {0, E_3}, // right shift
+ {0, E_1}, // up
+
+ {0, F_16}, // left ctrl
+ {0, F_15}, // left command
+ {0, F_14}, // left option
+ {0, F_10}, // space
+ {0, F_6}, // right command
+ {0, F_5}, // right option
+ {0, F_4}, // right ctrl
+ {0, F_3}, // Fn
+ {0, F_2}, // left
+ {0, F_1}, // down
+ {0, G_13}, // right
+};
+
+// clang-format on
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+ switch (keycode) {
+ case BL_TOGG:
+ if (record->event.pressed) {
+ switch (led_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ led_matrix_set_flags(LED_FLAG_NONE);
+ led_matrix_set_value_all(0);
+ } break;
+ default: {
+ led_matrix_set_flags(LED_FLAG_ALL);
+ } break;
+ }
+ }
+ if (!led_matrix_is_enabled()) {
+ led_matrix_set_flags(LED_FLAG_ALL);
+ led_matrix_enable();
+ }
+ return false;
+ }
+ return true;
+}
+
+bool led_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!led_matrix_indicators_advanced_user(led_min, led_max)) {
+ return false;
+ }
+ if ((host_keyboard_led_state().caps_lock) && (default_layer_state == (1 << 0))) {
+ led_matrix_set_value(CAPS_LOCK_LED_INDEX, 255);
+ led_matrix_set_value(MAC_LOCK_LED_INDEX, 255);
+ led_matrix_set_value(WIN_LOCK_LED_INDEX, 0);
+ } else if ((!host_keyboard_led_state().caps_lock) && (default_layer_state == (1 << 0))) {
+ led_matrix_set_value(CAPS_LOCK_LED_INDEX, 0);
+ led_matrix_set_value(MAC_LOCK_LED_INDEX, 255);
+ led_matrix_set_value(WIN_LOCK_LED_INDEX, 0);
+ } else if ((host_keyboard_led_state().caps_lock) && (default_layer_state == (1 << 2))) {
+ led_matrix_set_value(CAPS_LOCK_LED_INDEX, 255);
+ led_matrix_set_value(MAC_LOCK_LED_INDEX, 0);
+ led_matrix_set_value(WIN_LOCK_LED_INDEX, 255);
+ } else if ((!host_keyboard_led_state().caps_lock) && (default_layer_state == (1 << 2))) {
+ led_matrix_set_value(CAPS_LOCK_LED_INDEX, 0);
+ led_matrix_set_value(MAC_LOCK_LED_INDEX, 0);
+ led_matrix_set_value(WIN_LOCK_LED_INDEX, 255);
+ }
+ return true;
+}
+
+#endif
diff --git a/keyboards/keychron/c1_pro/c1_pro.c b/keyboards/keychron/c1_pro/c1_pro.c
new file mode 100644
index 000000000000..607cd958ade9
--- /dev/null
+++ b/keyboards/keychron/c1_pro/c1_pro.c
@@ -0,0 +1,44 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+// clang-format off
+
+const matrix_row_t matrix_mask[] = {
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111111111,
+ 0b1111111111101111,
+};
+
+// clang-format on
+
+#ifdef DIP_SWITCH_ENABLE
+
+bool dip_switch_update_kb(uint8_t index, bool active) {
+ if (!dip_switch_update_user(index, active)) {
+ return false;
+ }
+ if (index == 0) {
+ default_layer_set(1UL << (active ? 2 : 0));
+ }
+ return true;
+}
+
+#endif // DIP_SWITCH_ENABLE
diff --git a/keyboards/keychron/c1_pro/config.h b/keyboards/keychron/c1_pro/config.h
new file mode 100644
index 000000000000..2d8149047125
--- /dev/null
+++ b/keyboards/keychron/c1_pro/config.h
@@ -0,0 +1,37 @@
+/* Copyright 2023 @ Keychron(https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* DIP switch */
+#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
+
+/* Disable DIP switch in matrix data */
+#define MATRIX_MASKED
+
+/* EEPROM Driver Configuration */
+#define WEAR_LEVELING_LOGICAL_SIZE 2048
+#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2)
+
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
+/* Old default behavior of mod-taps */
+#define HOLD_ON_OTHER_KEY_PRESS
diff --git a/keyboards/keychron/c1_pro/halconf.h b/keyboards/keychron/c1_pro/halconf.h
new file mode 100644
index 000000000000..41bddcb2799b
--- /dev/null
+++ b/keyboards/keychron/c1_pro/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/keychron/c1_pro/info.json b/keyboards/keychron/c1_pro/info.json
new file mode 100644
index 000000000000..9c9b4bf16f85
--- /dev/null
+++ b/keyboards/keychron/c1_pro/info.json
@@ -0,0 +1,26 @@
+{
+ "keyboard_name": "Keychron C1 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lalalademaxiya1",
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "usb": {
+ "vid": "0x3434"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "dip_switch": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9", "A10", "H3"],
+ "rows": ["B5", "B4", "B3", "A15", "A14", "A13"]
+ },
+ "diode_direction": "ROW2COL",
+ "community_layouts": ["tkl_ansi"]
+}
diff --git a/keyboards/keychron/c1_pro/mcuconf.h b/keyboards/keychron/c1_pro/mcuconf.h
new file mode 100644
index 000000000000..0ca8c64850f4
--- /dev/null
+++ b/keyboards/keychron/c1_pro/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/keychron/c1_pro/readme.md b/keyboards/keychron/c1_pro/readme.md
new file mode 100644
index 000000000000..7e9d0e905870
--- /dev/null
+++ b/keyboards/keychron/c1_pro/readme.md
@@ -0,0 +1,23 @@
+# Keychron C1 Pro
+
+![Keychron C1 Pro](https://i.imgur.com/Svdm4lph.jpg)
+
+A customizable 80% TKL keyboard.
+
+* Keyboard Maintainer: [Keychron](https://github.com/keychron)
+* Hardware Supported: Keychron C1 Pro
+* Hardware Availability: [Keychron](https://www.keychron.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keychron/c1/ansi/rgb:default
+ make keychron/c1/ansi/white:default
+
+Flashing example for this keyboard:
+
+ make keychron/c1/ansi/rgb:default:flash
+ make keychron/c1/ansi/white:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keychron/c2_pro/ansi/rgb/config.h b/keyboards/keychron/c2_pro/ansi/rgb/config.h
new file mode 100644
index 000000000000..d62b756f5a8b
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/rgb/config.h
@@ -0,0 +1,46 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* RGB Matrix Driver Configuration */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1110111
+#define DRIVER_ADDR_2 0b1110100
+
+/* Set LED driver current */
+#define CKLED2001_CURRENT_TUNE \
+ { 0xAA, 0xAA, 0x56, 0xAA, 0xAA, 0x56, 0xAA, 0xAA, 0x56, 0xAA, 0xAA, 0x56 }
+
+/* RGB Matrix Configuration */
+#define DRIVER_1_LED_TOTAL 60
+#define DRIVER_2_LED_TOTAL 48
+#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+
+/* Enable indicator LED*/
+#define NUM_LED_INDEX 16
+#define CAPS_LED_INDEX 17
+#define MAC_LED_INDEX 18
+#define WIN_LED_INDEX 19
+
+/* turn off effects when suspended */
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/keychron/c2_pro/ansi/rgb/info.json b/keyboards/keychron/c2_pro/ansi/rgb/info.json
new file mode 100644
index 000000000000..eab0e9bdc4df
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/rgb/info.json
@@ -0,0 +1,266 @@
+{
+ "usb": {
+ "pid": "0x0520",
+ "device_version": "1.0.0"
+ },
+ "features": {
+ "rgb_matrix": true
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix":[0, 0], "x":0, "y":0},
+ {"matrix":[0, 1], "x":2, "y":0},
+ {"matrix":[0, 2], "x":3, "y":0},
+ {"matrix":[0, 3], "x":4, "y":0},
+ {"matrix":[0, 4], "x":5, "y":0},
+ {"matrix":[0, 5], "x":6.5, "y":0},
+ {"matrix":[0, 6], "x":7.5, "y":0},
+ {"matrix":[0, 7], "x":8.5, "y":0},
+ {"matrix":[0, 8], "x":9.5, "y":0},
+ {"matrix":[0, 9], "x":11, "y":0},
+ {"matrix":[0,10], "x":12, "y":0},
+ {"matrix":[0,11], "x":13, "y":0},
+ {"matrix":[0,12], "x":14, "y":0},
+ {"matrix":[0,14], "x":15.25, "y":0},
+ {"matrix":[0,15], "x":16.25, "y":0},
+ {"matrix":[0,16], "x":17.25, "y":0},
+
+ {"matrix":[1, 0], "x":0, "y":1.25},
+ {"matrix":[1, 1], "x":1, "y":1.25},
+ {"matrix":[1, 2], "x":2, "y":1.25},
+ {"matrix":[1, 3], "x":3, "y":1.25},
+ {"matrix":[1, 4], "x":4, "y":1.25},
+ {"matrix":[1, 5], "x":5, "y":1.25},
+ {"matrix":[1, 6], "x":6, "y":1.25},
+ {"matrix":[1, 7], "x":7, "y":1.25},
+ {"matrix":[1, 8], "x":8, "y":1.25},
+ {"matrix":[1, 9], "x":9, "y":1.25},
+ {"matrix":[1,10], "x":10, "y":1.25},
+ {"matrix":[1,11], "x":11, "y":1.25},
+ {"matrix":[1,12], "x":12, "y":1.25},
+ {"matrix":[1,13], "x":13, "y":1.25, "w":2},
+ {"matrix":[1,14], "x":15.25, "y":1.25},
+ {"matrix":[1,15], "x":16.25, "y":1.25},
+ {"matrix":[1,16], "x":17.25, "y":1.25},
+ {"matrix":[1,17], "x":18.5, "y":1.25},
+ {"matrix":[1,18], "x":19.5, "y":1.25},
+ {"matrix":[0,17], "x":20.5, "y":1.25},
+ {"matrix":[0,18], "x":21.5, "y":1.25},
+
+ {"matrix":[2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix":[2, 1], "x":1.5, "y":2.25},
+ {"matrix":[2, 2], "x":2.5, "y":2.25},
+ {"matrix":[2, 3], "x":3.5, "y":2.25},
+ {"matrix":[2, 4], "x":4.5, "y":2.25},
+ {"matrix":[2, 5], "x":5.5, "y":2.25},
+ {"matrix":[2, 6], "x":6.5, "y":2.25},
+ {"matrix":[2, 7], "x":7.5, "y":2.25},
+ {"matrix":[2, 8], "x":8.5, "y":2.25},
+ {"matrix":[2, 9], "x":9.5, "y":2.25},
+ {"matrix":[2,10], "x":10.5, "y":2.25},
+ {"matrix":[2,11], "x":11.5, "y":2.25},
+ {"matrix":[2,12], "x":12.5, "y":2.25},
+ {"matrix":[2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix":[2,14], "x":15.25, "y":2.25},
+ {"matrix":[2,15], "x":16.25, "y":2.25},
+ {"matrix":[2,16], "x":17.25, "y":2.25},
+ {"matrix":[2,17], "x":18.5, "y":2.25},
+ {"matrix":[2,18], "x":19.5, "y":2.25},
+ {"matrix":[3,14], "x":20.5, "y":2.25},
+ {"matrix":[3,15], "x":21.5, "y":2.25, "h":2},
+
+ {"matrix":[3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix":[3, 1], "x":1.75, "y":3.25},
+ {"matrix":[3, 2], "x":2.75, "y":3.25},
+ {"matrix":[3, 3], "x":3.75, "y":3.25},
+ {"matrix":[3, 4], "x":4.75, "y":3.25},
+ {"matrix":[3, 5], "x":5.75, "y":3.25},
+ {"matrix":[3, 6], "x":6.75, "y":3.25},
+ {"matrix":[3, 7], "x":7.75, "y":3.25},
+ {"matrix":[3, 8], "x":8.75, "y":3.25},
+ {"matrix":[3, 9], "x":9.75, "y":3.25},
+ {"matrix":[3,10], "x":10.75, "y":3.25},
+ {"matrix":[3,11], "x":11.75, "y":3.25},
+ {"matrix":[3,13], "x":12.75, "y":3.25, "w":2.25},
+ {"matrix":[3,17], "x":18.5, "y":3.25},
+ {"matrix":[3,18], "x":19.5, "y":3.25},
+ {"matrix":[3,16], "x":20.5, "y":3.25},
+
+ {"matrix":[4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix":[4, 2], "x":2.25, "y":4.25},
+ {"matrix":[4, 3], "x":3.25, "y":4.25},
+ {"matrix":[4, 4], "x":4.25, "y":4.25},
+ {"matrix":[4, 5], "x":5.25, "y":4.25},
+ {"matrix":[4, 6], "x":6.25, "y":4.25},
+ {"matrix":[4, 7], "x":7.25, "y":4.25},
+ {"matrix":[4, 8], "x":8.25, "y":4.25},
+ {"matrix":[4, 9], "x":9.25, "y":4.25},
+ {"matrix":[4,10], "x":10.25, "y":4.25},
+ {"matrix":[4,11], "x":11.25, "y":4.25},
+ {"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix":[4,15], "x":16.25, "y":4.25},
+ {"matrix":[4,17], "x":18.5, "y":4.25},
+ {"matrix":[4,18], "x":19.5, "y":4.25},
+ {"matrix":[4,14], "x":20.5, "y":4.25},
+ {"matrix":[4,16], "x":21.5, "y":4.25, "h":2},
+
+ {"matrix":[5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix":[5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix":[5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix":[5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix":[5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix":[5,14], "x":15.25, "y":5.25},
+ {"matrix":[5,15], "x":16.25, "y":5.25},
+ {"matrix":[5,16], "x":17.25, "y":5.25},
+ {"matrix":[5,17], "x":18.5, "y":5.25, "w":2},
+ {"matrix":[5,18], "x":20.5, "y":5.25}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "CKLED2001",
+ "animations": {
+ "breathing": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "jellybean_raindrops": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true
+ },
+ "layout": [
+ {"matrix":[0, 0], "flags":1, "x":0, "y":0},
+ {"matrix":[0, 1], "flags":1, "x":21, "y":0},
+ {"matrix":[0, 2], "flags":1, "x":31, "y":0},
+ {"matrix":[0, 3], "flags":1, "x":42, "y":0},
+ {"matrix":[0, 4], "flags":1, "x":52, "y":0},
+ {"matrix":[0, 5], "flags":1, "x":68, "y":0},
+ {"matrix":[0, 6], "flags":1, "x":78, "y":0},
+ {"matrix":[0, 7], "flags":1, "x":89, "y":0},
+ {"matrix":[0, 8], "flags":1, "x":99, "y":0},
+ {"matrix":[0, 9], "flags":1, "x":115, "y":0},
+ {"matrix":[0, 10], "flags":1, "x":125, "y":0},
+ {"matrix":[0, 11], "flags":1, "x":136, "y":0},
+ {"matrix":[0, 12], "flags":1, "x":146, "y":0},
+ {"matrix":[0, 14], "flags":1, "x":159, "y":0},
+ {"matrix":[0, 15], "flags":1, "x":169, "y":0},
+ {"matrix":[0, 16], "flags":1, "x":180, "y":0},
+
+ {"matrix":[0, 13], "flags":8, "x":193, "y":0},
+ {"matrix":[0, 13], "flags":8, "x":203, "y":0},
+ {"matrix":[0, 13], "flags":8, "x":214, "y":0},
+ {"matrix":[0, 13], "flags":8, "x":224, "y":0},
+
+ {"matrix":[1, 0], "flags":4, "x":0, "y":15},
+ {"matrix":[1, 1], "flags":4, "x":10, "y":15},
+ {"matrix":[1, 2], "flags":4, "x":21, "y":15},
+ {"matrix":[1, 3], "flags":4, "x":31, "y":15},
+ {"matrix":[1, 4], "flags":4, "x":42, "y":15},
+ {"matrix":[1, 5], "flags":4, "x":52, "y":15},
+ {"matrix":[1, 6], "flags":4, "x":63, "y":15},
+ {"matrix":[1, 7], "flags":4, "x":73, "y":15},
+ {"matrix":[1, 8], "flags":4, "x":83, "y":15},
+ {"matrix":[1, 9], "flags":4, "x":94, "y":15},
+ {"matrix":[1, 10], "flags":4, "x":104, "y":15},
+ {"matrix":[1, 11], "flags":4, "x":115, "y":15},
+ {"matrix":[1, 12], "flags":4, "x":125, "y":15},
+ {"matrix":[1, 13], "flags":1, "x":141, "y":15},
+ {"matrix":[1, 14], "flags":1, "x":159, "y":15},
+ {"matrix":[1, 15], "flags":1, "x":169, "y":15},
+ {"matrix":[1, 16], "flags":1, "x":180, "y":15},
+ {"matrix":[1, 17], "flags":8, "x":193, "y":15},
+ {"matrix":[1, 18], "flags":4, "x":203, "y":15},
+ {"matrix":[0, 17], "flags":4, "x":214, "y":15},
+ {"matrix":[0, 18], "flags":4, "x":224, "y":15},
+
+ {"matrix":[2, 0], "flags":1, "x":3, "y":27},
+ {"matrix":[2, 1], "flags":4, "x":16, "y":27},
+ {"matrix":[2, 2], "flags":4, "x":26, "y":27},
+ {"matrix":[2, 3], "flags":4, "x":36, "y":27},
+ {"matrix":[2, 4], "flags":4, "x":47, "y":27},
+ {"matrix":[2, 5], "flags":4, "x":57, "y":27},
+ {"matrix":[2, 6], "flags":4, "x":68, "y":27},
+ {"matrix":[2, 7], "flags":4, "x":78, "y":27},
+ {"matrix":[2, 8], "flags":4, "x":89, "y":27},
+ {"matrix":[2, 9], "flags":4, "x":99, "y":27},
+ {"matrix":[2, 10], "flags":4, "x":109, "y":27},
+ {"matrix":[2, 11], "flags":4, "x":120, "y":27},
+ {"matrix":[2, 12], "flags":4, "x":130, "y":27},
+ {"matrix":[2, 13], "flags":4, "x":143, "y":27},
+ {"matrix":[2, 14], "flags":1, "x":159, "y":27},
+ {"matrix":[2, 15], "flags":1, "x":169, "y":27},
+ {"matrix":[2, 16], "flags":1, "x":180, "y":27},
+ {"matrix":[2, 17], "flags":4, "x":193, "y":27},
+ {"matrix":[2, 18], "flags":4, "x":203, "y":27},
+ {"matrix":[3, 14], "flags":4, "x":214, "y":27},
+ {"matrix":[3, 15], "flags":4, "x":224, "y":27},
+
+ {"matrix":[3, 0], "flags":8, "x":4, "y":40},
+ {"matrix":[3, 1], "flags":4, "x":18, "y":40},
+ {"matrix":[3, 2], "flags":4, "x":29, "y":40},
+ {"matrix":[3, 3], "flags":4, "x":39, "y":40},
+ {"matrix":[3, 4], "flags":4, "x":50, "y":40},
+ {"matrix":[3, 5], "flags":4, "x":60, "y":40},
+ {"matrix":[3, 6], "flags":4, "x":70, "y":40},
+ {"matrix":[3, 7], "flags":4, "x":81, "y":40},
+ {"matrix":[3, 8], "flags":4, "x":91, "y":40},
+ {"matrix":[3, 9], "flags":4, "x":102, "y":40},
+ {"matrix":[3, 10], "flags":4, "x":112, "y":40},
+ {"matrix":[3, 11], "flags":4, "x":123, "y":40},
+ {"matrix":[3, 13], "flags":4, "x":139, "y":40},
+ {"matrix":[3, 17], "flags":4, "x":193, "y":40},
+ {"matrix":[3, 18], "flags":4, "x":203, "y":40},
+ {"matrix":[3, 16], "flags":4, "x":214, "y":40},
+
+ {"matrix":[4, 0], "flags":1, "x":7, "y":52},
+ {"matrix":[4, 2], "flags":4, "x":23, "y":52},
+ {"matrix":[4, 3], "flags":4, "x":34, "y":52},
+ {"matrix":[4, 4], "flags":4, "x":44, "y":52},
+ {"matrix":[4, 5], "flags":4, "x":55, "y":52},
+ {"matrix":[4, 6], "flags":4, "x":65, "y":52},
+ {"matrix":[4, 7], "flags":4, "x":76, "y":52},
+ {"matrix":[4, 8], "flags":4, "x":86, "y":52},
+ {"matrix":[4, 9], "flags":4, "x":96, "y":52},
+ {"matrix":[4, 10], "flags":4, "x":107, "y":52},
+ {"matrix":[4, 11], "flags":4, "x":117, "y":52},
+ {"matrix":[4, 13], "flags":1, "x":137, "y":52},
+ {"matrix":[4, 15], "flags":1, "x":169, "y":52},
+ {"matrix":[4, 17], "flags":4, "x":193, "y":52},
+ {"matrix":[4, 18], "flags":4, "x":203, "y":52},
+ {"matrix":[4, 14], "flags":4, "x":214, "y":52},
+ {"matrix":[4, 16], "flags":4, "x":224, "y":52},
+
+ {"matrix":[5, 0], "flags":1, "x":1, "y":64},
+ {"matrix":[5, 1], "flags":1, "x":14, "y":64},
+ {"matrix":[5, 2], "flags":1, "x":27, "y":64},
+ {"matrix":[5, 6], "flags":4, "x":66, "y":64},
+ {"matrix":[5, 10], "flags":1, "x":105, "y":64},
+ {"matrix":[5, 11], "flags":1, "x":118, "y":64},
+ {"matrix":[5, 12], "flags":4, "x":131, "y":64},
+ {"matrix":[5, 13], "flags":1, "x":145, "y":64},
+ {"matrix":[5, 14], "flags":1, "x":159, "y":64},
+ {"matrix":[5, 15], "flags":1, "x":169, "y":64},
+ {"matrix":[5, 16], "flags":1, "x":180, "y":64},
+ {"matrix":[5, 17], "flags":4, "x":198, "y":64},
+ {"matrix":[5, 18], "flags":4, "x":214, "y":64}
+ ]
+ }
+}
diff --git a/keyboards/keychron/c2_pro/ansi/rgb/keymaps/default/keymap.c b/keyboards/keychron/c2_pro/ansi/rgb/keymaps/default/keymap.c
new file mode 100644
index 000000000000..07f523e30a0c
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/rgb/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, RGB_MOD,
+ 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_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [MAC_FN] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+
+ [WIN_BASE] = LAYOUT(
+ 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_NO, RGB_MOD,
+ 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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [WIN_FN] = LAYOUT(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+};
diff --git a/keyboards/keychron/c2_pro/ansi/rgb/keymaps/keychron/keymap.c b/keyboards/keychron/c2_pro/ansi/rgb/keymaps/keychron/keymap.c
new file mode 100644
index 000000000000..9bc6b416bb3b
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/rgb/keymaps/keychron/keymap.c
@@ -0,0 +1,74 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+
+// clang-format off
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD,
+ 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_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [MAC_FN] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+
+ [WIN_BASE] = LAYOUT(
+ 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_CRTA, RGB_MOD,
+ 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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [WIN_FN] = LAYOUT(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+};
+
+// clang-format on
+
+void housekeeping_task_user(void) {
+ housekeeping_task_keychron();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_keychron(keycode, record)) {
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/keychron/c2_pro/ansi/rgb/keymaps/keychron/rules.mk b/keyboards/keychron/c2_pro/ansi/rgb/keymaps/keychron/rules.mk
new file mode 100644
index 000000000000..495e8907b48c
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/rgb/keymaps/keychron/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/keyboards/keychron/c2_pro/ansi/rgb/keymaps/via/keymap.c b/keyboards/keychron/c2_pro/ansi/rgb/keymaps/via/keymap.c
new file mode 100644
index 000000000000..5120e9bacbf4
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/rgb/keymaps/via/keymap.c
@@ -0,0 +1,61 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, RGB_MOD,
+ 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_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [MAC_FN] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+
+ [WIN_BASE] = LAYOUT(
+ 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_NO, RGB_MOD,
+ 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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [WIN_FN] = LAYOUT(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+};
diff --git a/keyboards/keychron/c2_pro/ansi/rgb/keymaps/via/rules.mk b/keyboards/keychron/c2_pro/ansi/rgb/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/rgb/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/c2_pro/ansi/rgb/rgb.c b/keyboards/keychron/c2_pro/ansi/rgb/rgb.c
new file mode 100644
index 000000000000..998933081f1c
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/rgb/rgb.c
@@ -0,0 +1,142 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, I_1, G_1, H_1},
+ {0, I_2, G_2, H_2},
+ {0, I_3, G_3, H_3},
+ {0, I_4, G_4, H_4},
+ {0, I_5, G_5, H_5},
+ {0, I_6, G_6, H_6},
+ {0, I_7, G_7, H_7},
+ {0, I_8, G_8, H_8},
+ {0, I_9, G_9, H_9},
+ {0, I_10, G_10, H_10},
+ {0, I_11, G_11, H_11},
+ {0, I_12, G_12, H_12},
+ {0, I_13, G_13, H_13},
+ {0, I_15, G_15, H_15},
+ {0, I_16, G_16, H_16},
+ {0, L_5, J_5, K_5},
+
+ {0, L_6, J_6, K_6}, // CapsLock
+ {0, L_7, J_7, K_7}, // NumLock
+ {0, L_8, J_8, K_8}, // Mac
+ {0, L_4, J_4, K_4}, // Win
+
+ {0, C_1, A_1, B_1},
+ {0, C_2, A_2, B_2},
+ {0, C_3, A_3, B_3},
+ {0, C_4, A_4, B_4},
+ {0, C_5, A_5, B_5},
+ {0, C_6, A_6, B_6},
+ {0, C_7, A_7, B_7},
+ {0, C_8, A_8, B_8},
+ {0, C_9, A_9, B_9},
+ {0, C_10, A_10, B_10},
+ {0, C_11, A_11, B_11},
+ {0, C_12, A_12, B_12},
+ {0, C_13, A_13, B_13},
+ {0, C_14, A_14, B_14},
+ {0, C_15, A_15, B_15},
+ {0, C_16, A_16, B_16},
+ {0, L_9, J_9, K_9},
+ {0, L_10, J_10, K_10},
+ {0, L_11, J_11, K_11},
+ {0, L_12, J_12, K_12},
+ {0, L_13, J_13, K_13},
+
+ {0, F_1, D_1, E_1},
+ {0, F_2, D_2, E_2},
+ {0, F_3, D_3, E_3},
+ {0, F_4, D_4, E_4},
+ {0, F_5, D_5, E_5},
+ {0, F_6, D_6, E_6},
+ {0, F_7, D_7, E_7},
+ {0, F_8, D_8, E_8},
+ {0, F_9, D_9, E_9},
+ {0, F_10, D_10, E_10},
+ {0, F_11, D_11, E_11},
+ {0, F_12, D_12, E_12},
+ {0, F_13, D_13, E_13},
+ {0, F_14, D_14, E_14},
+ {0, F_15, D_15, E_15},
+ {0, F_16, D_16, E_16},
+ {0, L_14, J_14, K_14},
+ {0, L_15, J_15, K_15},
+ {0, L_16, J_16, K_16},
+ {1, L_1, J_1, K_1},
+ {1, L_2, J_2, K_2},
+
+ {1, C_16, A_16, B_16},
+ {1, C_15, A_15, B_15},
+ {1, C_14, A_14, B_14},
+ {1, C_13, A_13, B_13},
+ {1, C_12, A_12, B_12},
+ {1, C_11, A_11, B_11},
+ {1, C_10, A_10, B_10},
+ {1, C_9, A_9, B_9},
+ {1, C_8, A_8, B_8},
+ {1, C_7, A_7, B_7},
+ {1, C_6, A_6, B_6},
+ {1, C_5, A_5, B_5},
+ {1, C_3, A_3, B_3},
+ {1, L_3, J_3, K_3},
+ {1, L_4, J_4, K_4},
+ {1, L_5, J_5, K_5},
+
+ {1, I_16, G_16, H_16},
+ {1, I_14, G_14, H_14},
+ {1, I_13, G_13, H_13},
+ {1, I_12, G_12, H_12},
+ {1, I_11, G_11, H_11},
+ {1, I_10, G_10, H_10},
+ {1, I_9, G_9, H_9},
+ {1, I_8, G_8, H_8},
+ {1, I_7, G_7, H_7},
+ {1, I_6, G_6, H_6},
+ {1, I_5, G_5, H_5},
+ {1, I_3, G_3, H_3},
+ {1, I_1, G_1, H_1},
+ {1, L_6, J_6, K_6},
+ {1, L_7, J_7, K_7},
+ {1, L_8, J_8, K_8},
+ {1, L_9, J_9, K_9},
+
+ {1, F_16, D_16, E_16},
+ {1, F_15, D_15, E_15},
+ {1, F_14, D_14, E_14},
+ {1, F_10, D_10, E_10},
+ {1, F_6, D_6, E_6},
+ {1, F_5, D_5, E_5},
+ {1, F_4, D_4, E_4},
+ {1, F_3, D_3, E_3},
+ {1, F_2, D_2, E_2},
+ {1, F_1, D_1, E_1},
+ {1, L_10, J_10, K_10},
+ {1, L_11, J_11, K_11},
+ {1, L_12, J_12, K_12},
+};
+#endif //RGB_MATRIX_ENABLE
diff --git a/keyboards/keychron/c2_pro/ansi/rgb/rules.mk b/keyboards/keychron/c2_pro/ansi/rgb/rules.mk
new file mode 100644
index 000000000000..7c43bc28cdb2
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/rgb/rules.mk
@@ -0,0 +1,5 @@
+# Build Options
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+SRC += matrix.c
diff --git a/keyboards/keychron/c2_pro/ansi/white/config.h b/keyboards/keychron/c2_pro/ansi/white/config.h
new file mode 100644
index 000000000000..d2a0e27b5793
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/white/config.h
@@ -0,0 +1,44 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* LED Matrix Driver Configuration */
+#define DRIVER_COUNT 1
+#define DRIVER_ADDR_1 0b1110100
+
+/* Set LED driver current */
+#define CKLED2001_CURRENT_TUNE \
+ { 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0 }
+
+/* LED Matrix Configuration */
+#define LED_MATRIX_LED_COUNT 108
+
+/* Enable indicator LED*/
+#define NUM_LED_INDEX 16
+#define CAPS_LED_INDEX 17
+#define MAC_LED_INDEX 18
+#define WIN_LED_INDEX 19
+
+/* turn off effects when suspended */
+#define LED_DISABLE_WHEN_USB_SUSPENDED
+
+// LED Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_led_matrix?id=led-matrix-effects
+// #if defined(LED_MATRIX_KEYPRESSES) || defined(LED_MATRIX_KEYRELEASES)
+#define LED_MATRIX_KEYPRESSES
+#define LED_MATRIX_KEYRELEASES
diff --git a/keyboards/keychron/c2_pro/ansi/white/info.json b/keyboards/keychron/c2_pro/ansi/white/info.json
new file mode 100644
index 000000000000..3248e7c38a9d
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/white/info.json
@@ -0,0 +1,261 @@
+{
+ "usb": {
+ "pid": "0x0523",
+ "device_version": "1.0.0"
+ },
+ "features": {
+ "led_matrix": true
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix":[0, 0], "x":0, "y":0},
+ {"matrix":[0, 1], "x":2, "y":0},
+ {"matrix":[0, 2], "x":3, "y":0},
+ {"matrix":[0, 3], "x":4, "y":0},
+ {"matrix":[0, 4], "x":5, "y":0},
+ {"matrix":[0, 5], "x":6.5, "y":0},
+ {"matrix":[0, 6], "x":7.5, "y":0},
+ {"matrix":[0, 7], "x":8.5, "y":0},
+ {"matrix":[0, 8], "x":9.5, "y":0},
+ {"matrix":[0, 9], "x":11, "y":0},
+ {"matrix":[0,10], "x":12, "y":0},
+ {"matrix":[0,11], "x":13, "y":0},
+ {"matrix":[0,12], "x":14, "y":0},
+ {"matrix":[0,14], "x":15.25, "y":0},
+ {"matrix":[0,15], "x":16.25, "y":0},
+ {"matrix":[0,16], "x":17.25, "y":0},
+
+ {"matrix":[1, 0], "x":0, "y":1.25},
+ {"matrix":[1, 1], "x":1, "y":1.25},
+ {"matrix":[1, 2], "x":2, "y":1.25},
+ {"matrix":[1, 3], "x":3, "y":1.25},
+ {"matrix":[1, 4], "x":4, "y":1.25},
+ {"matrix":[1, 5], "x":5, "y":1.25},
+ {"matrix":[1, 6], "x":6, "y":1.25},
+ {"matrix":[1, 7], "x":7, "y":1.25},
+ {"matrix":[1, 8], "x":8, "y":1.25},
+ {"matrix":[1, 9], "x":9, "y":1.25},
+ {"matrix":[1,10], "x":10, "y":1.25},
+ {"matrix":[1,11], "x":11, "y":1.25},
+ {"matrix":[1,12], "x":12, "y":1.25},
+ {"matrix":[1,13], "x":13, "y":1.25, "w":2},
+ {"matrix":[1,14], "x":15.25, "y":1.25},
+ {"matrix":[1,15], "x":16.25, "y":1.25},
+ {"matrix":[1,16], "x":17.25, "y":1.25},
+ {"matrix":[1,17], "x":18.5, "y":1.25},
+ {"matrix":[1,18], "x":19.5, "y":1.25},
+ {"matrix":[1,19], "x":20.5, "y":1.25},
+ {"matrix":[0,17], "x":21.5, "y":1.25},
+
+ {"matrix":[2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix":[2, 1], "x":1.5, "y":2.25},
+ {"matrix":[2, 2], "x":2.5, "y":2.25},
+ {"matrix":[2, 3], "x":3.5, "y":2.25},
+ {"matrix":[2, 4], "x":4.5, "y":2.25},
+ {"matrix":[2, 5], "x":5.5, "y":2.25},
+ {"matrix":[2, 6], "x":6.5, "y":2.25},
+ {"matrix":[2, 7], "x":7.5, "y":2.25},
+ {"matrix":[2, 8], "x":8.5, "y":2.25},
+ {"matrix":[2, 9], "x":9.5, "y":2.25},
+ {"matrix":[2,10], "x":10.5, "y":2.25},
+ {"matrix":[2,11], "x":11.5, "y":2.25},
+ {"matrix":[2,12], "x":12.5, "y":2.25},
+ {"matrix":[2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix":[2,14], "x":15.25, "y":2.25},
+ {"matrix":[2,15], "x":16.25, "y":2.25},
+ {"matrix":[2,16], "x":17.25, "y":2.25},
+ {"matrix":[2,17], "x":18.5, "y":2.25},
+ {"matrix":[2,18], "x":19.5, "y":2.25},
+ {"matrix":[2,19], "x":20.5, "y":2.25},
+ {"matrix":[0,18], "x":21.5, "y":2.25, "h":2},
+
+ {"matrix":[3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix":[3, 1], "x":1.75, "y":3.25},
+ {"matrix":[3, 2], "x":2.75, "y":3.25},
+ {"matrix":[3, 3], "x":3.75, "y":3.25},
+ {"matrix":[3, 4], "x":4.75, "y":3.25},
+ {"matrix":[3, 5], "x":5.75, "y":3.25},
+ {"matrix":[3, 6], "x":6.75, "y":3.25},
+ {"matrix":[3, 7], "x":7.75, "y":3.25},
+ {"matrix":[3, 8], "x":8.75, "y":3.25},
+ {"matrix":[3, 9], "x":9.75, "y":3.25},
+ {"matrix":[3,10], "x":10.75, "y":3.25},
+ {"matrix":[3,11], "x":11.75, "y":3.25},
+ {"matrix":[3,13], "x":12.75, "y":3.25, "w":2.25},
+ {"matrix":[3,17], "x":18.5, "y":3.25},
+ {"matrix":[3,18], "x":19.5, "y":3.25},
+ {"matrix":[3,19], "x":20.5, "y":3.25},
+
+ {"matrix":[4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix":[4, 2], "x":2.25, "y":4.25},
+ {"matrix":[4, 3], "x":3.25, "y":4.25},
+ {"matrix":[4, 4], "x":4.25, "y":4.25},
+ {"matrix":[4, 5], "x":5.25, "y":4.25},
+ {"matrix":[4, 6], "x":6.25, "y":4.25},
+ {"matrix":[4, 7], "x":7.25, "y":4.25},
+ {"matrix":[4, 8], "x":8.25, "y":4.25},
+ {"matrix":[4, 9], "x":9.25, "y":4.25},
+ {"matrix":[4,10], "x":10.25, "y":4.25},
+ {"matrix":[4,11], "x":11.25, "y":4.25},
+ {"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix":[4,15], "x":16.25, "y":4.25},
+ {"matrix":[4,17], "x":18.5, "y":4.25},
+ {"matrix":[4,18], "x":19.5, "y":4.25},
+ {"matrix":[4,19], "x":20.5, "y":4.25},
+ {"matrix":[0,19], "x":21.5, "y":4.25, "h":2},
+
+ {"matrix":[5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix":[5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix":[5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix":[5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix":[5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix":[5,14], "x":15.25, "y":5.25},
+ {"matrix":[5,15], "x":16.25, "y":5.25},
+ {"matrix":[5,16], "x":17.25, "y":5.25},
+ {"matrix":[5,17], "x":18.5, "y":5.25, "w":2},
+ {"matrix":[5,19], "x":20.5, "y":5.25}
+ ]
+ }
+ },
+ "led_matrix": {
+ "driver": "CKLED2001",
+ "animations": {
+ "none": true,
+ "solid": true,
+ "breathing": true,
+ "band_pinwheel": true,
+ "band_spiral": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "dual_beacon": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_multinexus": true,
+ "solid_splash": true,
+ "wave_left_right": true,
+ "wave_up_down": true,
+ "effect_max": true
+ },
+ "layout": [
+ {"matrix":[0, 0], "flags":1, "x":0, "y":0},
+ {"matrix":[0, 1], "flags":1, "x":21, "y":0},
+ {"matrix":[0, 2], "flags":1, "x":31, "y":0},
+ {"matrix":[0, 3], "flags":1, "x":42, "y":0},
+ {"matrix":[0, 4], "flags":1, "x":52, "y":0},
+ {"matrix":[0, 5], "flags":1, "x":68, "y":0},
+ {"matrix":[0, 6], "flags":1, "x":78, "y":0},
+ {"matrix":[0, 7], "flags":1, "x":89, "y":0},
+ {"matrix":[0, 8], "flags":1, "x":99, "y":0},
+ {"matrix":[0, 9], "flags":1, "x":115, "y":0},
+ {"matrix":[0, 10], "flags":1, "x":125, "y":0},
+ {"matrix":[0, 11], "flags":1, "x":136, "y":0},
+ {"matrix":[0, 12], "flags":1, "x":146, "y":0},
+ {"matrix":[0, 14], "flags":1, "x":159, "y":0},
+ {"matrix":[0, 15], "flags":1, "x":169, "y":0},
+ {"matrix":[0, 16], "flags":1, "x":180, "y":0},
+
+ {"matrix":[0, 13], "flags":8, "x":193, "y":0},
+ {"matrix":[0, 13], "flags":8, "x":203, "y":0},
+ {"matrix":[0, 13], "flags":8, "x":214, "y":0},
+ {"matrix":[0, 13], "flags":8, "x":224, "y":0},
+
+ {"matrix":[1, 0], "flags":4, "x":0, "y":15},
+ {"matrix":[1, 1], "flags":4, "x":10, "y":15},
+ {"matrix":[1, 2], "flags":4, "x":21, "y":15},
+ {"matrix":[1, 3], "flags":4, "x":31, "y":15},
+ {"matrix":[1, 4], "flags":4, "x":42, "y":15},
+ {"matrix":[1, 5], "flags":4, "x":52, "y":15},
+ {"matrix":[1, 6], "flags":4, "x":63, "y":15},
+ {"matrix":[1, 7], "flags":4, "x":73, "y":15},
+ {"matrix":[1, 8], "flags":4, "x":83, "y":15},
+ {"matrix":[1, 9], "flags":4, "x":94, "y":15},
+ {"matrix":[1, 10], "flags":4, "x":104, "y":15},
+ {"matrix":[1, 11], "flags":4, "x":115, "y":15},
+ {"matrix":[1, 12], "flags":4, "x":125, "y":15},
+ {"matrix":[1, 13], "flags":1, "x":141, "y":15},
+ {"matrix":[1, 14], "flags":1, "x":159, "y":15},
+ {"matrix":[1, 15], "flags":1, "x":169, "y":15},
+ {"matrix":[1, 16], "flags":1, "x":180, "y":15},
+ {"matrix":[1, 17], "flags":8, "x":193, "y":15},
+ {"matrix":[1, 18], "flags":4, "x":203, "y":15},
+ {"matrix":[1, 19], "flags":4, "x":214, "y":15},
+ {"matrix":[0, 17], "flags":4, "x":224, "y":15},
+
+ {"matrix":[2, 0], "flags":1, "x":3, "y":27},
+ {"matrix":[2, 1], "flags":4, "x":16, "y":27},
+ {"matrix":[2, 2], "flags":4, "x":26, "y":27},
+ {"matrix":[2, 3], "flags":4, "x":36, "y":27},
+ {"matrix":[2, 4], "flags":4, "x":47, "y":27},
+ {"matrix":[2, 5], "flags":4, "x":57, "y":27},
+ {"matrix":[2, 6], "flags":4, "x":68, "y":27},
+ {"matrix":[2, 7], "flags":4, "x":78, "y":27},
+ {"matrix":[2, 8], "flags":4, "x":89, "y":27},
+ {"matrix":[2, 9], "flags":4, "x":99, "y":27},
+ {"matrix":[2, 10], "flags":4, "x":109, "y":27},
+ {"matrix":[2, 11], "flags":4, "x":120, "y":27},
+ {"matrix":[2, 12], "flags":4, "x":130, "y":27},
+ {"matrix":[2, 13], "flags":4, "x":143, "y":27},
+ {"matrix":[2, 14], "flags":1, "x":159, "y":27},
+ {"matrix":[2, 15], "flags":1, "x":169, "y":27},
+ {"matrix":[2, 16], "flags":1, "x":180, "y":27},
+ {"matrix":[2, 17], "flags":4, "x":193, "y":27},
+ {"matrix":[2, 18], "flags":4, "x":203, "y":27},
+ {"matrix":[2, 19], "flags":4, "x":214, "y":27},
+ {"matrix":[0, 18], "flags":4, "x":224, "y":27},
+
+ {"matrix":[3, 0], "flags":8, "x":4, "y":40},
+ {"matrix":[3, 1], "flags":4, "x":18, "y":40},
+ {"matrix":[3, 2], "flags":4, "x":29, "y":40},
+ {"matrix":[3, 3], "flags":4, "x":39, "y":40},
+ {"matrix":[3, 4], "flags":4, "x":50, "y":40},
+ {"matrix":[3, 5], "flags":4, "x":60, "y":40},
+ {"matrix":[3, 6], "flags":4, "x":70, "y":40},
+ {"matrix":[3, 7], "flags":4, "x":81, "y":40},
+ {"matrix":[3, 8], "flags":4, "x":91, "y":40},
+ {"matrix":[3, 9], "flags":4, "x":102, "y":40},
+ {"matrix":[3, 10], "flags":4, "x":112, "y":40},
+ {"matrix":[3, 11], "flags":4, "x":123, "y":40},
+ {"matrix":[3, 13], "flags":4, "x":139, "y":40},
+ {"matrix":[3, 17], "flags":4, "x":193, "y":40},
+ {"matrix":[3, 18], "flags":4, "x":203, "y":40},
+ {"matrix":[3, 19], "flags":4, "x":214, "y":40},
+
+ {"matrix":[4, 0], "flags":1, "x":7, "y":52},
+ {"matrix":[4, 2], "flags":4, "x":23, "y":52},
+ {"matrix":[4, 3], "flags":4, "x":34, "y":52},
+ {"matrix":[4, 4], "flags":4, "x":44, "y":52},
+ {"matrix":[4, 5], "flags":4, "x":55, "y":52},
+ {"matrix":[4, 6], "flags":4, "x":65, "y":52},
+ {"matrix":[4, 7], "flags":4, "x":76, "y":52},
+ {"matrix":[4, 8], "flags":4, "x":86, "y":52},
+ {"matrix":[4, 9], "flags":4, "x":96, "y":52},
+ {"matrix":[4, 10], "flags":4, "x":107, "y":52},
+ {"matrix":[4, 11], "flags":4, "x":117, "y":52},
+ {"matrix":[4, 13], "flags":1, "x":137, "y":52},
+ {"matrix":[4, 15], "flags":1, "x":169, "y":52},
+ {"matrix":[4, 17], "flags":4, "x":193, "y":52},
+ {"matrix":[4, 18], "flags":4, "x":203, "y":52},
+ {"matrix":[4, 19], "flags":4, "x":214, "y":52},
+ {"matrix":[0, 19], "flags":4, "x":224, "y":52},
+
+ {"matrix":[5, 0], "flags":1, "x":1, "y":64},
+ {"matrix":[5, 1], "flags":1, "x":14, "y":64},
+ {"matrix":[5, 2], "flags":1, "x":27, "y":64},
+ {"matrix":[5, 6], "flags":4, "x":66, "y":64},
+ {"matrix":[5, 10], "flags":1, "x":105, "y":64},
+ {"matrix":[5, 11], "flags":1, "x":118, "y":64},
+ {"matrix":[5, 12], "flags":4, "x":131, "y":64},
+ {"matrix":[5, 13], "flags":1, "x":145, "y":64},
+ {"matrix":[5, 14], "flags":1, "x":159, "y":64},
+ {"matrix":[5, 15], "flags":1, "x":169, "y":64},
+ {"matrix":[5, 16], "flags":1, "x":180, "y":64},
+ {"matrix":[5, 17], "flags":4, "x":198, "y":64},
+ {"matrix":[5, 19], "flags":4, "x":214, "y":64}
+ ]
+ }
+}
diff --git a/keyboards/keychron/c2_pro/ansi/white/keymaps/default/keymap.c b/keyboards/keychron/c2_pro/ansi/white/keymaps/default/keymap.c
new file mode 100644
index 000000000000..70934e122e33
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/white/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, BL_STEP,
+ 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_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [MAC_FN] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+
+ [WIN_BASE] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NO, BL_STEP,
+ 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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [WIN_FN] = LAYOUT(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+};
diff --git a/keyboards/keychron/c2_pro/ansi/white/keymaps/keychron/keymap.c b/keyboards/keychron/c2_pro/ansi/white/keymaps/keychron/keymap.c
new file mode 100644
index 000000000000..09002c3d7a47
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/white/keymaps/keychron/keymap.c
@@ -0,0 +1,72 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, BL_STEP,
+ 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_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [MAC_FN] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+
+ [WIN_BASE] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_CRTA, BL_STEP,
+ 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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [WIN_FN] = LAYOUT(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+};
+
+// clang-format on
+
+void housekeeping_task_user(void) {
+ housekeeping_task_keychron();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_keychron(keycode, record)) {
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/keychron/c2_pro/ansi/white/keymaps/keychron/rules.mk b/keyboards/keychron/c2_pro/ansi/white/keymaps/keychron/rules.mk
new file mode 100644
index 000000000000..495e8907b48c
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/white/keymaps/keychron/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/keyboards/keychron/c2_pro/ansi/white/keymaps/via/keymap.c b/keyboards/keychron/c2_pro/ansi/white/keymaps/via/keymap.c
new file mode 100644
index 000000000000..547521e099b2
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/white/keymaps/via/keymap.c
@@ -0,0 +1,61 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, BL_STEP,
+ 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_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [MAC_FN] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+
+ [WIN_BASE] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NO, BL_STEP,
+ 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_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+
+ [WIN_FN] = LAYOUT(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+};
diff --git a/keyboards/keychron/c2_pro/ansi/white/keymaps/via/rules.mk b/keyboards/keychron/c2_pro/ansi/white/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/white/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/c2_pro/ansi/white/rules.mk b/keyboards/keychron/c2_pro/ansi/white/rules.mk
new file mode 100644
index 000000000000..7c43bc28cdb2
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/white/rules.mk
@@ -0,0 +1,5 @@
+# Build Options
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+SRC += matrix.c
diff --git a/keyboards/keychron/c2_pro/ansi/white/white.c b/keyboards/keychron/c2_pro/ansi/white/white.c
new file mode 100644
index 000000000000..963ac8755f8a
--- /dev/null
+++ b/keyboards/keychron/c2_pro/ansi/white/white.c
@@ -0,0 +1,141 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+// clang-format off
+#ifdef LED_MATRIX_ENABLE
+const ckled2001_led PROGMEM g_ckled2001_leds[LED_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | LED address
+ * | | */
+ {0, A_16},
+ {0, A_15},
+ {0, A_14},
+ {0, A_13},
+ {0, A_12},
+ {0, A_11},
+ {0, A_10},
+ {0, A_9 },
+ {0, A_8 },
+ {0, A_7 },
+ {0, A_6 },
+ {0, A_5 },
+ {0, A_4 },
+ {0, A_2 },
+ {0, A_1 },
+ {0, G_1 },
+
+ {0, G_2 },
+ {0, G_3 }, // NumLock
+ {0, G_4 }, // Mac
+ {0, G_5 }, // Win
+
+ {0, B_16},
+ {0, B_15},
+ {0, B_14},
+ {0, B_13},
+ {0, B_12},
+ {0, B_11},
+ {0, B_10},
+ {0, B_9 },
+ {0, B_8 },
+ {0, B_7 },
+ {0, B_6 },
+ {0, B_5 },
+ {0, B_4 },
+ {0, B_3 },
+ {0, B_2 },
+ {0, B_1 },
+ {0, H_1 },
+ {0, H_2 },
+ {0, H_3 },
+ {0, H_4 },
+ {0, H_5 },
+
+ {0, C_16},
+ {0, C_15},
+ {0, C_14},
+ {0, C_13},
+ {0, C_12},
+ {0, C_11},
+ {0, C_10},
+ {0, C_9 },
+ {0, C_8 },
+ {0, C_7 },
+ {0, C_6 },
+ {0, C_5 },
+ {0, C_4 },
+ {0, C_3 },
+ {0, C_2 },
+ {0, C_1 },
+ {0, G_6 },
+ {0, G_7 },
+ {0, G_8 },
+ {0, G_9 },
+ {0, G_10},
+
+ {0, D_16},
+ {0, D_15},
+ {0, D_14},
+ {0, D_13},
+ {0, D_12},
+ {0, D_11},
+ {0, D_10},
+ {0, D_9 },
+ {0, D_8 },
+ {0, D_7 },
+ {0, D_6 },
+ {0, D_5 },
+ {0, D_3 },
+ {0, H_7 },
+ {0, H_8 },
+ {0, H_9 },
+
+ {0, E_16},
+ {0, E_14},
+ {0, E_13},
+ {0, E_12},
+ {0, E_11},
+ {0, E_10},
+ {0, E_9 },
+ {0, E_8 },
+ {0, E_7 },
+ {0, E_6 },
+ {0, E_5 },
+ {0, E_3 },
+ {0, E_1 },
+ {0, H_6 },
+ {0, H_11},
+ {0, H_12},
+ {0, H_10},
+
+ {0, F_16},
+ {0, F_15},
+ {0, F_14},
+ {0, F_10},
+ {0, F_6 },
+ {0, F_5 },
+ {0, F_4 },
+ {0, F_3 },
+ {0, F_2 },
+ {0, F_1 },
+ {0, G_13},
+ {0, G_11},
+ {0, G_12},
+};
+#endif //LED_MATRIX_ENABLE
diff --git a/keyboards/keychron/c2_pro/c2_pro.c b/keyboards/keychron/c2_pro/c2_pro.c
new file mode 100644
index 000000000000..2cd58ab4d796
--- /dev/null
+++ b/keyboards/keychron/c2_pro/c2_pro.c
@@ -0,0 +1,129 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+// clang-format off
+const matrix_row_t matrix_mask[] = {
+ 0b11111111111111111111,
+ 0b11111111111111111111,
+ 0b11111111111111111111,
+ 0b11111111111111111111,
+ 0b11111111111111111111,
+ 0b11111111111111101111,
+};
+
+// clang-format on
+
+#ifdef DIP_SWITCH_ENABLE
+
+bool dip_switch_update_kb(uint8_t index, bool active) {
+ if (!dip_switch_update_user(index, active)) {
+ return false;
+ }
+ if (index == 0) {
+ default_layer_set(1UL << (active ? 2 : 0));
+ }
+ return true;
+}
+
+#endif // DIP_SWITCH_ENABLE
+
+# ifdef RGB_MATRIX_ENABLE
+# define LED_SET_FLAGS rgb_matrix_set_flags
+# define LED_GET_FLAGS rgb_matrix_get_flags
+# define LED_SET_ALL_OFF rgb_matrix_set_color_all(COLOR_BLACK)
+# define LED_IS_ENABLED rgb_matrix_is_enabled
+# define LED_ENABLE rgb_matrix_enable
+# define LED_MATRIX_INDICATORS_KB rgb_matrix_indicators_kb
+# define LED_MATRIX_INDICATORS_USER rgb_matrix_indicators_user
+# define LED_MATRIX_SET_COLOR rgb_matrix_set_color
+# define LED_MATRIX_UPDATE_PWN_BUFFERS rgb_matrix_update_pwm_buffers
+# define LED_MATRIX_INDICATORS_NONE_KB rgb_matrix_indicators_none_kb
+# define LED_MATRIX_IS_ENABLED rgb_matrix_is_enabled
+# define COLOR_WHITE 255, 255, 255
+# define COLOR_BLACK 0, 0, 0
+# endif
+
+# ifdef LED_MATRIX_ENABLE
+# define LED_SET_FLAGS led_matrix_set_flags
+# define LED_GET_FLAGS led_matrix_get_flags
+# define LED_SET_ALL_OFF led_matrix_set_value_all(COLOR_BLACK)
+# define LED_IS_ENABLED led_matrix_is_enabled
+# define LED_ENABLE led_matrix_enable
+# define LED_MATRIX_INDICATORS_KB led_matrix_indicators_kb
+# define LED_MATRIX_INDICATORS_USER led_matrix_indicators_user
+# define LED_MATRIX_SET_COLOR led_matrix_set_value
+# define LED_MATRIX_UPDATE_PWN_BUFFERS led_matrix_update_pwm_buffers
+# define LED_MATRIX_INDICATORS_NONE_KB led_matrix_indicators_none_kb
+# define LED_MATRIX_IS_ENABLED led_matrix_is_enabled
+# define COLOR_WHITE 255
+# define COLOR_BLACK 0
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+ switch (keycode) {
+ case RGB_TOG:
+ if (record->event.pressed) {
+ switch (LED_GET_FLAGS()) {
+ case LED_FLAG_ALL: {
+ LED_SET_FLAGS(LED_FLAG_NONE);
+ LED_SET_ALL_OFF;
+ } break;
+ default: {
+ LED_SET_FLAGS(LED_FLAG_ALL);
+ } break;
+ }
+ }
+ if (!LED_IS_ENABLED()) {
+ LED_SET_FLAGS(LED_FLAG_ALL);
+ LED_ENABLE();
+ }
+ return false;
+ }
+ return true;
+}
+
+bool LED_MATRIX_INDICATORS_KB(void) {
+ if (!LED_MATRIX_INDICATORS_USER()) {
+ return false;
+ }
+ if (host_keyboard_led_state().caps_lock) {
+ LED_MATRIX_SET_COLOR(CAPS_LED_INDEX, COLOR_WHITE);
+ } else {
+ LED_MATRIX_SET_COLOR(CAPS_LED_INDEX, COLOR_BLACK);
+ }
+ if (host_keyboard_led_state().num_lock) {
+ LED_MATRIX_SET_COLOR(NUM_LED_INDEX, COLOR_WHITE);
+ } else {
+ LED_MATRIX_SET_COLOR(NUM_LED_INDEX, COLOR_BLACK);
+ }
+ if (default_layer_state == (1 << 0)) {
+ LED_MATRIX_SET_COLOR(MAC_LED_INDEX, COLOR_WHITE);
+ } else {
+ LED_MATRIX_SET_COLOR(MAC_LED_INDEX, COLOR_BLACK);
+ }
+ if (default_layer_state == (1 << 2)) {
+ LED_MATRIX_SET_COLOR(WIN_LED_INDEX, COLOR_WHITE);
+ } else {
+ LED_MATRIX_SET_COLOR(WIN_LED_INDEX, COLOR_BLACK);
+ }
+ return true;
+}
+
+#endif
diff --git a/keyboards/keychron/c2_pro/config.h b/keyboards/keychron/c2_pro/config.h
new file mode 100644
index 000000000000..f107dadf48da
--- /dev/null
+++ b/keyboards/keychron/c2_pro/config.h
@@ -0,0 +1,44 @@
+/* Copyright 2023 @ Keychron(https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* DIP switch */
+#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
+
+/* Disable DIP switch in matrix data */
+#define MATRIX_MASKED
+
+/* EEPROM Driver Configuration */
+#define WEAR_LEVELING_LOGICAL_SIZE 2048
+#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2)
+
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
+/* Old default behavior of mod-taps */
+#define HOLD_ON_OTHER_KEY_PRESS
+
+/* HC595 used pins definiton */
+#define HC595_STCP A0
+#define HC595_SHCP A1
+#define HC595_DS C15
+#define SHIFT_COL_START 11
+#define SHIFT_COL_END 19
diff --git a/keyboards/keychron/c2_pro/halconf.h b/keyboards/keychron/c2_pro/halconf.h
new file mode 100644
index 000000000000..41bddcb2799b
--- /dev/null
+++ b/keyboards/keychron/c2_pro/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/keychron/c2_pro/info.json b/keyboards/keychron/c2_pro/info.json
new file mode 100644
index 000000000000..dd97dd7adf24
--- /dev/null
+++ b/keyboards/keychron/c2_pro/info.json
@@ -0,0 +1,27 @@
+{
+ "keyboard_name": "Keychron C2 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lalalademaxiya1",
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "usb": {
+ "vid": "0x3434"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "dip_switch": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["A10", "A9", "A8", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "C14"],
+ "rows": ["B5", "B4", "B3", "A15", "A14", "A13"],
+ "custom": true,
+ "custom_lite": true
+ },
+ "diode_direction": "ROW2COL"
+}
diff --git a/keyboards/keychron/c2_pro/matrix.c b/keyboards/keychron/c2_pro/matrix.c
new file mode 100644
index 000000000000..af7514c5adb8
--- /dev/null
+++ b/keyboards/keychron/c2_pro/matrix.c
@@ -0,0 +1,202 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifndef SHIFT_COL_START
+# define SHIFT_COL_START 8
+#endif
+#ifndef SHIFT_COL_END
+# define SHIFT_COL_END 15
+#endif
+
+#if defined(SHIFT_COL_START) && defined(SHIFT_COL_END)
+# if ((SHIFT_COL_END - SHIFT_COL_START) > 16)
+# define SIZE_T uint32_t
+# define UNSELECT_ALL_COL 0xFFFFFFFF
+# elif ((SHIFT_COL_END - SHIFT_COL_START) > 8)
+# define SIZE_T uint16_t
+# define UNSELECT_ALL_COL 0xFFFF
+# else
+# define SIZE_T uint8_t
+# define UNSELECT_ALL_COL 0xFF
+# endif
+#endif
+
+pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+static inline void setPinOutput_writeLow(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinOutput(pin);
+ writePinLow(pin);
+ }
+}
+
+static inline void setPinOutput_writeHigh(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinOutput(pin);
+ writePinHigh(pin);
+ }
+}
+
+static inline void setPinInput_high(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinInputHigh(pin);
+ }
+}
+
+static inline uint8_t readMatrixPin(pin_t pin) {
+ if (pin != NO_PIN) {
+ return readPin(pin);
+ } else {
+ return 1;
+ }
+}
+
+static inline void HC595_delay(uint8_t n) {
+ while (n-- > 0) {
+ asm volatile("nop" ::: "memory");
+ }
+}
+
+static void HC595_output(SIZE_T data, uint8_t bit) {
+ uint8_t n = 1;
+
+ ATOMIC_BLOCK_FORCEON {
+ for (uint8_t i = 0; i < (SHIFT_COL_END - SHIFT_COL_START + 1); i++) {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+ writePinHigh(HC595_SHCP);
+ HC595_delay(n);
+ writePinLow(HC595_SHCP);
+ HC595_delay(n);
+ if (bit) {
+ break;
+ } else {
+ data = data >> 1;
+ }
+ }
+ writePinHigh(HC595_STCP);
+ HC595_delay(n);
+ writePinLow(HC595_STCP);
+ HC595_delay(n);
+ }
+}
+
+static bool select_col(uint8_t col) {
+ pin_t pin = col_pins[col];
+
+ if (col < SHIFT_COL_START || col > SHIFT_COL_END) {
+ setPinOutput_writeLow(pin);
+ return true;
+ } else {
+ if (col == SHIFT_COL_START) {
+ HC595_output(0x00, 1);
+ }
+ return true;
+ }
+ return false;
+}
+
+static void unselect_col(uint8_t col) {
+ pin_t pin = col_pins[col];
+
+ if (col < SHIFT_COL_START || col > SHIFT_COL_END) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
+ } else {
+ HC595_output(0x01, 1);
+ }
+}
+
+static void unselect_cols(void) {
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (x < SHIFT_COL_START || x > SHIFT_COL_END) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
+ } else {
+ if (x == SHIFT_COL_START) HC595_output(UNSELECT_ALL_COL, 0);
+ }
+ }
+}
+
+static void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col, matrix_row_t row_shifter) {
+ bool key_pressed = false;
+
+ // Select col
+ if (!select_col(current_col)) { // select col
+ return; // skip NO_PIN col
+ }
+
+ matrix_output_select_delay();
+
+ // For each row...
+ for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) {
+ // Check row pin state
+ if (readMatrixPin(row_pins[row_index]) == 0) {
+ // Pin LO, set col bit
+ current_matrix[row_index] |= row_shifter;
+ key_pressed = true;
+ } else {
+ // Pin HI, clear col bit
+ current_matrix[row_index] &= ~row_shifter;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+ matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH
+}
+
+void matrix_init_custom(void) {
+ setPinOutput(HC595_DS);
+ setPinOutput(HC595_STCP);
+ setPinOutput(HC595_SHCP);
+
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ if (row_pins[x] != NO_PIN) {
+ setPinInput_high(row_pins[x]);
+ }
+ }
+
+ unselect_cols();
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ matrix_row_t curr_matrix[MATRIX_ROWS] = {0};
+
+ // Set col, read rows
+ matrix_row_t row_shifter = MATRIX_ROW_SHIFTER;
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++, row_shifter <<= 1) {
+ matrix_read_rows_on_col(curr_matrix, current_col, row_shifter);
+ }
+
+ bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
+ if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
+
+ return changed;
+}
diff --git a/keyboards/keychron/c2_pro/mcuconf.h b/keyboards/keychron/c2_pro/mcuconf.h
new file mode 100644
index 000000000000..0ca8c64850f4
--- /dev/null
+++ b/keyboards/keychron/c2_pro/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/keychron/c2_pro/readme.md b/keyboards/keychron/c2_pro/readme.md
new file mode 100644
index 000000000000..c0715929dfe7
--- /dev/null
+++ b/keyboards/keychron/c2_pro/readme.md
@@ -0,0 +1,23 @@
+# Keychron C2 Pro
+
+![Keychron C2 Pro](https://i.imgur.com/BQE1tFOh.jpg)
+
+A customizable 100% keyboard.
+
+* Keyboard Maintainer: [Keychron](https://github.com/keychron)
+* Hardware Supported: Keychron C2 Pro
+* Hardware Availability: [Keychron](https://www.keychron.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keychron/c2/ansi/rgb:default
+ make keychron/c2/ansi/white:default
+
+Flashing example for this keyboard:
+
+ make keychron/c2/ansi/rgb:default:flash
+ make keychron/c2/ansi/white:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c
index 0d4fd2cd98a8..0585ae9c96d2 100755
--- a/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c
+++ b/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c
@@ -17,9 +17,6 @@
#include "quantum.h"
#ifdef RGB_MATRIX_ENABLE
-
-// clang-format off
-
const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
@@ -128,117 +125,4 @@ const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
{0, G_1, I_1, H_1}, // Down
{0, G_7, I_7, H_7}, // Right
};
-
-#define __ NO_LED
-
-led_config_t g_led_config = {
- {
- // Key Matrix to LED Index
- { __, 0, 1, 2, 3, 4, 5, 6, __ },
- { 7, 8, 9, 10, 11, 12, 13, 14, __ },
- { 15, 16, 17, 18, 19, __, 20, 21, __ },
- { 22, 23, 24, 25, 26, 27, 28, __, __ },
- { 29, __, 30, 31, 32, 33, 34, 35, __ },
- { 36, 37, 38, 39, 40, __, 41, __, __ },
- { 42, 43, 44, 45, 46, 47, 48, 49, __ },
- { 50, 51, 52, 53, 54, 55, 56, __, 57 },
- { 58, 59, 60, 61, 62, 63, 64, 65, 66 },
- { 67, 68, 69, 70, 71, 72, __, 73, 74 },
- { 75, 76, 77, 78, 79, 80, __, 81, __ },
- { __, 82, 83, 84, 85, __, 86, 87, 88 },
- },
- {
- // LED Index to Physical Position
- {17,0}, {31,0}, {45,0}, {59,0}, {72,0}, {86,0}, {100,0},
- {0,15}, {17,15}, {31,15}, {45,15}, {59,15}, {72,15}, {86,15}, {100,15},
- {0,27}, {21,27}, {38,27}, {52,27}, {66,27}, {79,27}, {93,27},
- {0,40}, {22,40}, {41,40}, {55,40}, {69,40}, {83,40}, {97,40},
- {0,52}, {26,52}, {48,52}, {61,52}, {76,52}, {90,52}, {102,52},
- {0,64}, {19,64}, {36,64}, {53,64}, {70,64}, {94,64},
- {110,0}, {124,0}, {138,0}, {152,0}, {165,0}, {179,0}, {193,0}, {207,0},
- {110,15}, {124,15}, {138,15}, {152,15}, {165,15}, {179,15}, {200,15}, {224,15},
- {104,27}, {117,27}, {131,27}, {145,27}, {158,27}, {172,27}, {186,27}, {203,27}, {224,27},
- {107,40}, {121,40}, {134,40}, {148,40}, {162,40}, {176,40}, {198,40}, {224,40},
- {114,52}, {127,52}, {141,52}, {155,52}, {169,52}, {188,52}, {210,52},
- {126,64}, {152,64}, {166,64}, {180,64}, {196,64}, {210,64}, {224,64},
- },
- {
- // RGB LED Index to Flag
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 4, 4, 4, 4, 4, 4,
- 1, 1, 4, 4, 4, 4, 4,
- 1, 8, 4, 4, 4, 4, 4,
- 1, 1, 4, 4, 4, 4, 4,
- 1, 1, 1, 1, 1, 4,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 4, 4, 4, 4, 4, 4, 1, 1,
- 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 4, 4, 4, 4, 4, 4, 1, 1,
- 4, 4, 4, 4, 4, 1, 1,
- 4, 1, 1, 1, 1, 1, 1,
- }
-};
-
-// clang-format on
-
#endif
-
-#define ADC_BUFFER_DEPTH 1
-#define ADC_NUM_CHANNELS 1
-#define ADC_SAMPLING_RATE ADC_SMPR_SMP_12P5
-#define ADC_RESOLUTION ADC_CFGR_RES_10BITS
-
-static int16_t analogReadPin_my(pin_t pin) {
- ADCConfig adcCfg = {};
- adcsample_t sampleBuffer[ADC_NUM_CHANNELS*ADC_BUFFER_DEPTH];
- ADCDriver* targetDriver = &ADCD1;
- ADCConversionGroup adcConversionGroup = {
- .circular = FALSE,
- .num_channels = (uint16_t)(ADC_NUM_CHANNELS),
- .cfgr = ADC_RESOLUTION,
- };
-
- palSetLineMode(pin, PAL_MODE_INPUT_ANALOG);
- switch (pin) {
- case B0:
- adcConversionGroup.smpr[2] = ADC_SMPR2_SMP_AN15(ADC_SAMPLING_RATE);
- adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(ADC_CHANNEL_IN15);
- sampleBuffer[0] = 0;
- break;
- case B1:
- adcConversionGroup.smpr[2] = ADC_SMPR2_SMP_AN16(ADC_SAMPLING_RATE);
- adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(ADC_CHANNEL_IN16);
- sampleBuffer[0] = 0;
- break;
- default:
- return 0;
- }
- adcStart(targetDriver, &adcCfg);
- if (adcConvert(targetDriver, &adcConversionGroup, &sampleBuffer[0], ADC_BUFFER_DEPTH) != MSG_OK) {
- return 0;
- }
-
- return *sampleBuffer;
-}
-
-void keyboard_post_init_kb(void) {
- // 1. The pin A5/B5 of the USB C interface in the left hand is connected to the pin A0 of MCU,
- // A0 will be set to output and write high when keyboard initial.
- // 2. The same pin in the right hand is connected to the pin B0 and B1 of MCU respectively,
- // and the ADC function of B0 and B1 will be enabled when keyboard initial.
- // 3. because the serial usart RXD and TXD is multiplexed on USB's D+ and D- in the right hand.
- // So detect the voltage on the pin A5/B5 of the USB C interface by ADC,
- // and disable USB connectivity when the ADC value exceeds 1000,
- // to avoid affecting the serial usart communication between the left hand and the right hand.
- if (is_keyboard_left()) {
- setPinOutput(A0);
- writePinHigh(A0);
- } else {
- if ((analogReadPin_my(B0) > 1000) || (analogReadPin_my(B1) > 1000)) {
- setPinInput(A11);
- setPinInput(A12);
- }
- }
-
- keyboard_post_init_user();
-}
diff --git a/keyboards/keychron/q11/ansi_encoder/config.h b/keyboards/keychron/q11/ansi_encoder/config.h
index 08632f0ce726..60bdc493de53 100755
--- a/keyboards/keychron/q11/ansi_encoder/config.h
+++ b/keyboards/keychron/q11/ansi_encoder/config.h
@@ -16,5 +16,8 @@
#pragma once
+/* RGB Matrix Configuration */
+#define RGB_MATRIX_LED_COUNT 89
+
/* Enable caps-lock LED */
#define CAPS_LOCK_LED_INDEX 23
diff --git a/keyboards/keychron/q11/ansi_encoder/info.json b/keyboards/keychron/q11/ansi_encoder/info.json
index da10fe5166c8..01a81619baa1 100755
--- a/keyboards/keychron/q11/ansi_encoder/info.json
+++ b/keyboards/keychron/q11/ansi_encoder/info.json
@@ -1,166 +1,105 @@
{
- "keyboard_name": "Keychron Q11",
- "manufacturer": "Keychron",
- "url": "https://github.com/Keychron",
- "maintainer": "lalalademaxiya1",
- "bootloader": "stm32-dfu",
- "bootmagic": {
- "matrix": [0, 1]
- },
- "features": {
- "audio": false,
- "backlight": false,
- "bootmagic": true,
- "command": false,
- "console": false,
- "dip_switch": true,
- "encoder": true,
- "extrakey": true,
- "mousekey": true,
- "nkro": true,
- "rgb_matrix": true,
- "rgblight": false
- },
- "diode_direction": "ROW2COL",
- "encoder": {
- "rotary": [
- {"pin_a": "B0", "pin_b": "B1"}
- ]
- },
- "matrix_pins": {
- "cols": ["A7", "A6", "A5", "A4", "A3", "A2", "A1", "C15", null],
- "rows": ["A13", "A14", "A15", "B3", "B4", "B5"]
- },
- "processor": "STM32L432",
- "rgb_matrix": {
- "driver": "CKLED2001",
- "split_count": [42, 47]
- },
- "split": {
- "enabled": true,
- "encoder": {
- "right": {
- "rotary": [
- {"pin_a": "C14", "pin_b": "C15"}
- ]
- }
- },
- "matrix_pins": {
- "right": {
- "cols": ["A8", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0"],
- "rows": ["B5", "B4", "B3", "A15", "A14", "A13"]
- }
- },
- "transport": {
- "protocol": "serial_usart",
- "sync_matrix_state": false
- }
- },
"usb": {
- "vid": "0x3434",
"pid": "0x01E0",
"device_version": "1.0.0"
},
- "layouts": {
- "LAYOUT_ansi_91": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1.25, "y": 0},
- {"matrix": [0, 2], "x": 2.25, "y": 0},
- {"matrix": [0, 3], "x": 3.25, "y": 0},
- {"matrix": [0, 4], "x": 4.25, "y": 0},
- {"matrix": [0, 5], "x": 5.25, "y": 0},
- {"matrix": [0, 6], "x": 6.25, "y": 0},
- {"matrix": [0, 7], "x": 7.25, "y": 0},
- {"matrix": [6, 0], "x": 8.25, "y": 0},
- {"matrix": [6, 1], "x": 9.25, "y": 0},
- {"matrix": [6, 2], "x": 10.25, "y": 0},
- {"matrix": [6, 3], "x": 11.25, "y": 0},
- {"matrix": [6, 4], "x": 12.25, "y": 0},
- {"matrix": [6, 5], "x": 13.25, "y": 0},
- {"matrix": [6, 6], "x": 14.25, "y": 0},
- {"matrix": [6, 7], "x": 15.25, "y": 0},
- {"matrix": [6, 8], "x": 16.5, "y": 0},
+ "rgb_matrix": {
+ "split_count": [42, 47],
+ "layout": [
+ {"matrix":[0, 1], "flags":1, "x":17, "y":0},
+ {"matrix":[0, 2], "flags":1, "x":31, "y":0},
+ {"matrix":[0, 3], "flags":1, "x":45, "y":0},
+ {"matrix":[0, 4], "flags":1, "x":59, "y":0},
+ {"matrix":[0, 5], "flags":1, "x":72, "y":0},
+ {"matrix":[0, 6], "flags":1, "x":86, "y":0},
+ {"matrix":[0, 7], "flags":1, "x":100, "y":0},
+ {"matrix":[1, 0], "flags":1, "x":0, "y":15},
+ {"matrix":[1, 1], "flags":1, "x":17, "y":15},
+ {"matrix":[1, 2], "flags":4, "x":31, "y":15},
+ {"matrix":[1, 3], "flags":4, "x":45, "y":15},
+ {"matrix":[1, 4], "flags":4, "x":59, "y":15},
+ {"matrix":[1, 5], "flags":4, "x":72, "y":15},
+ {"matrix":[1, 6], "flags":4, "x":86, "y":15},
+ {"matrix":[1, 7], "flags":4, "x":100, "y":15},
- {"matrix": [1, 0], "x": 0, "y": 1.25},
- {"matrix": [1, 1], "x": 1.25, "y": 1.25},
- {"matrix": [1, 2], "x": 2.25, "y": 1.25},
- {"matrix": [1, 3], "x": 3.25, "y": 1.25},
- {"matrix": [1, 4], "x": 4.25, "y": 1.25},
- {"matrix": [1, 5], "x": 5.25, "y": 1.25},
- {"matrix": [1, 6], "x": 6.25, "y": 1.25},
- {"matrix": [1, 7], "x": 7.25, "y": 1.25},
- {"matrix": [7, 0], "x": 8.25, "y": 1.25},
- {"matrix": [7, 1], "x": 9.25, "y": 1.25},
- {"matrix": [7, 2], "x": 10.25, "y": 1.25},
- {"matrix": [7, 3], "x": 11.25, "y": 1.25},
- {"matrix": [7, 4], "x": 12.25, "y": 1.25},
- {"matrix": [7, 5], "x": 13.25, "y": 1.25},
- {"matrix": [7, 6], "x": 14.25, "y": 1.25, "w": 2},
- {"matrix": [7, 8], "x": 16.5, "y": 1.25},
+ {"matrix":[2, 0], "flags":1, "x":0, "y":27},
+ {"matrix":[2, 1], "flags":1, "x":21, "y":27},
+ {"matrix":[2, 2], "flags":4, "x":38, "y":27},
+ {"matrix":[2, 3], "flags":4, "x":52, "y":27},
+ {"matrix":[2, 4], "flags":4, "x":66, "y":27},
+ {"matrix":[2, 6], "flags":4, "x":79, "y":27},
+ {"matrix":[2, 7], "flags":4, "x":93, "y":27},
+ {"matrix":[3, 0], "flags":1, "x":0, "y":40},
+ {"matrix":[3, 1], "flags":8, "x":22, "y":40},
+ {"matrix":[3, 2], "flags":4, "x":41, "y":40},
+ {"matrix":[3, 3], "flags":4, "x":55, "y":40},
+ {"matrix":[3, 4], "flags":4, "x":69, "y":40},
+ {"matrix":[3, 5], "flags":4, "x":83, "y":40},
+ {"matrix":[3, 6], "flags":4, "x":97, "y":40},
- {"matrix": [2, 0], "x": 0, "y": 2.25},
- {"matrix": [2, 1], "x": 1.25, "y": 2.25, "w": 1.5},
- {"matrix": [2, 2], "x": 2.75, "y": 2.25},
- {"matrix": [2, 3], "x": 3.75, "y": 2.25},
- {"matrix": [2, 4], "x": 4.75, "y": 2.25},
- {"matrix": [2, 6], "x": 5.75, "y": 2.25},
- {"matrix": [2, 7], "x": 6.75, "y": 2.25},
- {"matrix": [8, 0], "x": 7.75, "y": 2.25},
- {"matrix": [8, 1], "x": 8.75, "y": 2.25},
- {"matrix": [8, 2], "x": 9.75, "y": 2.25},
- {"matrix": [8, 3], "x": 10.75, "y": 2.25},
- {"matrix": [8, 4], "x": 11.75, "y": 2.25},
- {"matrix": [8, 5], "x": 12.75, "y": 2.25},
- {"matrix": [8, 6], "x": 13.75, "y": 2.25},
- {"matrix": [8, 7], "x": 14.75, "y": 2.25, "w": 1.5},
- {"matrix": [8, 8], "x": 16.5, "y": 2.25},
+ {"matrix":[4, 0], "flags":1, "x":0, "y":52},
+ {"matrix":[4, 2], "flags":1, "x":34, "y":52},
+ {"matrix":[4, 3], "flags":4, "x":48, "y":52},
+ {"matrix":[4, 4], "flags":4, "x":61, "y":52},
+ {"matrix":[4, 5], "flags":4, "x":76, "y":52},
+ {"matrix":[4, 6], "flags":4, "x":90, "y":52},
+ {"matrix":[4, 7], "flags":4, "x":102, "y":52},
+ {"matrix":[5, 0], "flags":1, "x":0, "y":64},
+ {"matrix":[5, 1], "flags":1, "x":19, "y":64},
+ {"matrix":[5, 2], "flags":1, "x":36, "y":64},
+ {"matrix":[5, 3], "flags":1, "x":53, "y":64},
+ {"matrix":[5, 4], "flags":1, "x":70, "y":64},
+ {"matrix":[5, 6], "flags":4, "x":94, "y":64},
- {"matrix": [3, 0], "x": 0, "y": 3.25},
- {"matrix": [3, 1], "x": 1.25, "y": 3.25, "w": 1.75},
- {"matrix": [3, 2], "x": 3, "y": 3.25},
- {"matrix": [3, 3], "x": 4, "y": 3.25},
- {"matrix": [3, 4], "x": 5, "y": 3.25},
- {"matrix": [3, 5], "x": 6, "y": 3.25},
- {"matrix": [3, 6], "x": 7, "y": 3.25},
- {"matrix": [9, 0], "x": 8, "y": 3.25},
- {"matrix": [9, 1], "x": 9, "y": 3.25},
- {"matrix": [9, 2], "x": 10, "y": 3.25},
- {"matrix": [9, 3], "x": 11, "y": 3.25},
- {"matrix": [9, 4], "x": 12, "y": 3.25},
- {"matrix": [9, 5], "x": 13, "y": 3.25},
- {"matrix": [9, 7], "x": 14, "y": 3.25, "w": 2.25},
- {"matrix": [9, 8], "x": 16.5, "y": 3.25},
+ {"matrix":[6, 0], "flags":1, "x":110, "y":0},
+ {"matrix":[6, 1], "flags":1, "x":124, "y":0},
+ {"matrix":[6, 2], "flags":1, "x":138, "y":0},
+ {"matrix":[6, 3], "flags":1, "x":152, "y":0},
+ {"matrix":[6, 4], "flags":1, "x":165, "y":0},
+ {"matrix":[6, 5], "flags":1, "x":179, "y":0},
+ {"matrix":[6, 6], "flags":1, "x":193, "y":0},
+ {"matrix":[6, 7], "flags":1, "x":207, "y":0},
+ {"matrix":[7, 0], "flags":4, "x":110, "y":15},
+ {"matrix":[7, 1], "flags":4, "x":124, "y":15},
+ {"matrix":[7, 2], "flags":4, "x":138, "y":15},
+ {"matrix":[7, 3], "flags":4, "x":152, "y":15},
+ {"matrix":[7, 4], "flags":4, "x":165, "y":15},
+ {"matrix":[7, 5], "flags":4, "x":179, "y":15},
+ {"matrix":[7, 6], "flags":1, "x":200, "y":15},
+ {"matrix":[7, 8], "flags":1, "x":224, "y":15},
- {"matrix": [4, 0], "x": 0, "y": 4.25},
- {"matrix": [4, 2], "x": 1.25, "y": 4.25, "w": 2.25},
- {"matrix": [4, 3], "x": 3.5, "y": 4.25},
- {"matrix": [4, 4], "x": 4.5, "y": 4.25},
- {"matrix": [4, 5], "x": 5.5, "y": 4.25},
- {"matrix": [4, 6], "x": 6.5, "y": 4.25},
- {"matrix": [4, 7], "x": 7.5, "y": 4.25},
- {"matrix": [10, 0], "x": 8.5, "y": 4.25},
- {"matrix": [10, 1], "x": 9.5, "y": 4.25},
- {"matrix": [10, 2], "x": 10.5, "y": 4.25},
- {"matrix": [10, 3], "x": 11.5, "y": 4.25},
- {"matrix": [10, 4], "x": 12.5, "y": 4.25},
- {"matrix": [10, 5], "x": 13.5, "y": 4.25, "w": 1.75},
- {"matrix": [10, 7], "x": 15.5, "y": 4.25},
+ {"matrix":[8, 0], "flags":4, "x":104, "y":27},
+ {"matrix":[8, 1], "flags":4, "x":117, "y":27},
+ {"matrix":[8, 2], "flags":4, "x":131, "y":27},
+ {"matrix":[8, 3], "flags":4, "x":145, "y":27},
+ {"matrix":[8, 4], "flags":4, "x":158, "y":27},
+ {"matrix":[8, 5], "flags":4, "x":172, "y":27},
+ {"matrix":[8, 6], "flags":4, "x":186, "y":27},
+ {"matrix":[8, 7], "flags":4, "x":203, "y":27},
+ {"matrix":[8, 8], "flags":1, "x":224, "y":27},
+ {"matrix":[9, 0], "flags":4, "x":107, "y":40},
+ {"matrix":[9, 1], "flags":4, "x":121, "y":40},
+ {"matrix":[9, 2], "flags":4, "x":134, "y":40},
+ {"matrix":[9, 3], "flags":4, "x":148, "y":40},
+ {"matrix":[9, 4], "flags":4, "x":162, "y":40},
+ {"matrix":[9, 5], "flags":4, "x":176, "y":40},
+ {"matrix":[9, 7], "flags":1, "x":198, "y":40},
+ {"matrix":[9, 8], "flags":1, "x":224, "y":40},
- {"matrix": [5, 0], "x": 0, "y": 5.25},
- {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
- {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
- {"matrix": [5, 3], "x": 3.75, "y": 5.25, "w": 1.25},
- {"matrix": [5, 4], "x": 5, "y": 5.25, "w": 1.25},
- {"matrix": [5, 6], "x": 6.25, "y": 5.25, "w": 2.25},
- {"matrix": [11, 1], "x": 8.5, "y": 5.25, "w": 2.75},
- {"matrix": [11, 2], "x": 11.25, "y": 5.25},
- {"matrix": [11, 3], "x": 12.25, "y": 5.25},
- {"matrix": [11, 4], "x": 13.25, "y": 5.25},
- {"matrix": [11, 6], "x": 14.5, "y": 5.25},
- {"matrix": [11, 7], "x": 15.5, "y": 5.25},
- {"matrix": [11, 8], "x": 16.5, "y": 5.25}
- ]
- }
+ {"matrix":[10, 0], "flags":4, "x":114, "y":52},
+ {"matrix":[10, 1], "flags":4, "x":127, "y":52},
+ {"matrix":[10, 2], "flags":4, "x":141, "y":52},
+ {"matrix":[10, 3], "flags":4, "x":155, "y":52},
+ {"matrix":[10, 4], "flags":4, "x":169, "y":52},
+ {"matrix":[10, 5], "flags":1, "x":188, "y":52},
+ {"matrix":[10, 7], "flags":1, "x":210, "y":52},
+ {"matrix":[11, 1], "flags":4, "x":126, "y":64},
+ {"matrix":[11, 2], "flags":1, "x":152, "y":64},
+ {"matrix":[11, 3], "flags":1, "x":166, "y":64},
+ {"matrix":[11, 4], "flags":1, "x":180, "y":64},
+ {"matrix":[11, 6], "flags":1, "x":196, "y":64},
+ {"matrix":[11, 7], "flags":1, "x":210, "y":64},
+ {"matrix":[11, 8], "flags":1, "x":224, "y":64}
+ ]
}
}
diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c b/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c
index 3378ce7df9f2..7334ad852039 100755
--- a/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c
+++ b/keyboards/keychron/q11/ansi_encoder/keymaps/default/keymap.c
@@ -15,20 +15,18 @@
*/
#include QMK_KEYBOARD_H
-// clang-format off
-
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
- WIN_FN
+ WIN_FN,
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_91(
+ [MAC_BASE] = LAYOUT_91_ansi(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
_______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
_______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -36,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
_______, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [MAC_FN] = LAYOUT_ansi_91(
+ [MAC_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -44,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
- [WIN_BASE] = LAYOUT_ansi_91(
+ [WIN_BASE] = LAYOUT_91_ansi(
KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE,
_______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
_______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -52,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
_______, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [WIN_FN] = LAYOUT_ansi_91(
+ [WIN_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c b/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c
index 852f34def993..d5f87b7a3989 100755
--- a/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c
+++ b/keyboards/keychron/q11/ansi_encoder/keymaps/keychron/keymap.c
@@ -17,17 +17,15 @@
#include QMK_KEYBOARD_H
#include "keychron_common.h"
-// clang-format off
-
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
- WIN_FN
+ WIN_FN,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_91(
+ [MAC_BASE] = LAYOUT_91_ansi(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -35,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MC_4, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MC_5, KC_LCTL, KC_LOPTN, KC_LCMMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [MAC_FN] = LAYOUT_ansi_91(
+ [MAC_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -43,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
- [WIN_BASE] = LAYOUT_ansi_91(
+ [WIN_BASE] = LAYOUT_91_ansi(
KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -51,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MC_4, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [WIN_FN] = LAYOUT_ansi_91(
+ [WIN_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c b/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c
index 0452eccec202..29fe3d488d14 100755
--- a/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c
+++ b/keyboards/keychron/q11/ansi_encoder/keymaps/via/keymap.c
@@ -16,8 +16,6 @@
#include QMK_KEYBOARD_H
-// clang-format off
-
enum layers{
MAC_BASE,
MAC_FN,
@@ -29,7 +27,7 @@ enum layers{
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_91(
+ [MAC_BASE] = LAYOUT_91_ansi(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -37,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MC_4, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MC_5, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [MAC_FN] = LAYOUT_ansi_91(
+ [MAC_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -45,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
- [WIN_BASE] = LAYOUT_ansi_91(
+ [WIN_BASE] = LAYOUT_91_ansi(
KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
@@ -53,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MC_4, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [WIN_FN] = LAYOUT_ansi_91(
+ [WIN_FN] = LAYOUT_91_ansi(
RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/q11/ansi_encoder/rules.mk b/keyboards/keychron/q11/ansi_encoder/rules.mk
index 567ea30a2a8d..ac78b227d602 100755
--- a/keyboards/keychron/q11/ansi_encoder/rules.mk
+++ b/keyboards/keychron/q11/ansi_encoder/rules.mk
@@ -1,9 +1,4 @@
-# Build Options
-# change yes to no to disable
-#
-EEPROM_DRIVER = wear_leveling
-WEAR_LEVELING_DRIVER = embedded_flash
-SERIAL_DRIVER = usart
-
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+SERIAL_DRIVER = usart
diff --git a/keyboards/keychron/q11/config.h b/keyboards/keychron/q11/config.h
index 604ec142b869..d2c7ad4a9681 100755
--- a/keyboards/keychron/q11/config.h
+++ b/keyboards/keychron/q11/config.h
@@ -26,12 +26,9 @@
#define MATRIX_MASKED // actual mask is defined by `matrix_mask` in `q11.c`
-/* RGB Matrix Configuration */
+/* RGB Matrix Driver Configuration */
#define DRIVER_COUNT 1
#define DRIVER_ADDR_1 0b1110100
-#define DRIVER_1_LED_TOTAL 89
-#define RGB_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
-#define SPLIT_TRANSPORT_MIRROR
/* Increase I2C speed to 1000 KHz */
#define I2C1_TIMINGR_PRESC 0U
@@ -59,52 +56,5 @@
// RGB Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
-// #define ENABLE_RGB_MATRIX_ALPHAS_MODS
-// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-#define ENABLE_RGB_MATRIX_BREATHING
-// #define ENABLE_RGB_MATRIX_BAND_SAT
-// #define ENABLE_RGB_MATRIX_BAND_VAL
-// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-#define ENABLE_RGB_MATRIX_CYCLE_ALL
-#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-#define ENABLE_RGB_MATRIX_DUAL_BEACON
-#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
-// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-// #define ENABLE_RGB_MATRIX_RAINDROPS
-#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-// #define ENABLE_RGB_MATRIX_HUE_BREATHING
-// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
-// #define ENABLE_RGB_MATRIX_HUE_WAVE
-#define ENABLE_RGB_MATRIX_PIXEL_RAIN
-// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
-// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
-
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
-#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-
#define RGB_MATRIX_KEYPRESSES
-// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
-#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-#define ENABLE_RGB_MATRIX_SPLASH
-// #define ENABLE_RGB_MATRIX_MULTISPLASH
-#define ENABLE_RGB_MATRIX_SOLID_SPLASH
-// #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/keychron/q11/info.json b/keyboards/keychron/q11/info.json
new file mode 100755
index 000000000000..43029ebbc372
--- /dev/null
+++ b/keyboards/keychron/q11/info.json
@@ -0,0 +1,290 @@
+{
+ "keyboard_name": "Keychron Q11",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lalalademaxiya1",
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "usb": {
+ "vid": "0x3434"
+ },
+ "bootmagic": {
+ "matrix": [0, 1]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "dip_switch": true,
+ "extrakey": true,
+ "mousekey": true,
+ "encoder": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["A7", "A6", "A5", "A4", "A3", "A2", "A1", "C15", null],
+ "rows": ["A13", "A14", "A15", "B3", "B4", "B5"]
+ },
+ "diode_direction": "ROW2COL",
+ "split": {
+ "enabled": true,
+ "encoder": {
+ "right": {
+ "rotary": [
+ {"pin_a": "C14", "pin_b": "C15"}
+ ]
+ }
+ },
+ "matrix_pins": {
+ "right": {
+ "cols": ["A8", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0"],
+ "rows": ["B5", "B4", "B3", "A15", "A14", "A13"]
+ }
+ },
+ "transport": {
+ "protocol": "serial_usart",
+ "sync_matrix_state": true
+ },
+ "bootmagic": {
+ "matrix": [6, 7]
+ }
+ },
+ "encoder": {
+ "rotary": [
+ {
+ "pin_a": "B0",
+ "pin_b": "B1"
+ }
+ ]
+ },
+ "rgb_matrix": {
+ "driver": "CKLED2001",
+ "animations": {
+ "breathing": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "jellybean_raindrops": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true
+ }
+ },
+ "layouts": {
+ "LAYOUT_91_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 7.25, "y": 0},
+ {"matrix": [6, 0], "x": 8.25, "y": 0},
+ {"matrix": [6, 1], "x": 9.25, "y": 0},
+ {"matrix": [6, 2], "x": 10.25, "y": 0},
+ {"matrix": [6, 3], "x": 11.25, "y": 0},
+ {"matrix": [6, 4], "x": 12.25, "y": 0},
+ {"matrix": [6, 5], "x": 13.25, "y": 0},
+ {"matrix": [6, 6], "x": 14.25, "y": 0},
+ {"matrix": [6, 7], "x": 15.25, "y": 0},
+ {"matrix": [6, 8], "x": 16.5, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 1.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 1.25},
+ {"matrix": [1, 3], "x": 3.25, "y": 1.25},
+ {"matrix": [1, 4], "x": 4.25, "y": 1.25},
+ {"matrix": [1, 5], "x": 5.25, "y": 1.25},
+ {"matrix": [1, 6], "x": 6.25, "y": 1.25},
+ {"matrix": [1, 7], "x": 7.25, "y": 1.25},
+ {"matrix": [7, 0], "x": 8.25, "y": 1.25},
+ {"matrix": [7, 1], "x": 9.25, "y": 1.25},
+ {"matrix": [7, 2], "x": 10.25, "y": 1.25},
+ {"matrix": [7, 3], "x": 11.25, "y": 1.25},
+ {"matrix": [7, 4], "x": 12.25, "y": 1.25},
+ {"matrix": [7, 5], "x": 13.25, "y": 1.25},
+ {"matrix": [7, 6], "x": 14.25, "y": 1.25, "w": 2},
+ {"matrix": [7, 8], "x": 16.5, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25},
+ {"matrix": [2, 1], "x": 1.25, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 2], "x": 2.75, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.75, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.75, "y": 2.25},
+ {"matrix": [2, 6], "x": 5.75, "y": 2.25},
+ {"matrix": [2, 7], "x": 6.75, "y": 2.25},
+ {"matrix": [8, 0], "x": 7.75, "y": 2.25},
+ {"matrix": [8, 1], "x": 8.75, "y": 2.25},
+ {"matrix": [8, 2], "x": 9.75, "y": 2.25},
+ {"matrix": [8, 3], "x": 10.75, "y": 2.25},
+ {"matrix": [8, 4], "x": 11.75, "y": 2.25},
+ {"matrix": [8, 5], "x": 12.75, "y": 2.25},
+ {"matrix": [8, 6], "x": 13.75, "y": 2.25},
+ {"matrix": [8, 7], "x": 14.75, "y": 2.25, "w": 1.5},
+ {"matrix": [8, 8], "x": 16.5, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 2], "x": 3, "y": 3.25},
+ {"matrix": [3, 3], "x": 4, "y": 3.25},
+ {"matrix": [3, 4], "x": 5, "y": 3.25},
+ {"matrix": [3, 5], "x": 6, "y": 3.25},
+ {"matrix": [3, 6], "x": 7, "y": 3.25},
+ {"matrix": [9, 0], "x": 8, "y": 3.25},
+ {"matrix": [9, 1], "x": 9, "y": 3.25},
+ {"matrix": [9, 2], "x": 10, "y": 3.25},
+ {"matrix": [9, 3], "x": 11, "y": 3.25},
+ {"matrix": [9, 4], "x": 12, "y": 3.25},
+ {"matrix": [9, 5], "x": 13, "y": 3.25},
+ {"matrix": [9, 7], "x": 14, "y": 3.25, "w": 2.25},
+ {"matrix": [9, 8], "x": 16.5, "y": 3.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25},
+ {"matrix": [4, 2], "x": 1.25, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 3], "x": 3.5, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.5, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.5, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.5, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.5, "y": 4.25},
+ {"matrix": [10, 0], "x": 8.5, "y": 4.25},
+ {"matrix": [10, 1], "x": 9.5, "y": 4.25},
+ {"matrix": [10, 2], "x": 10.5, "y": 4.25},
+ {"matrix": [10, 3], "x": 11.5, "y": 4.25},
+ {"matrix": [10, 4], "x": 12.5, "y": 4.25},
+ {"matrix": [10, 5], "x": 13.5, "y": 4.25, "w": 1.75},
+ {"matrix": [10, 7], "x": 15.5, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 3], "x": 3.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 4], "x": 5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 6.25, "y": 5.25, "w": 2.25},
+ {"matrix": [11, 1], "x": 8.5, "y": 5.25, "w": 2.75},
+ {"matrix": [11, 2], "x": 11.25, "y": 5.25},
+ {"matrix": [11, 3], "x": 12.25, "y": 5.25},
+ {"matrix": [11, 4], "x": 13.25, "y": 5.25},
+ {"matrix": [11, 6], "x": 14.5, "y": 5.25},
+ {"matrix": [11, 7], "x": 15.5, "y": 5.25},
+ {"matrix": [11, 8], "x": 16.5, "y": 5.25}
+ ]
+ },
+ "LAYOUT_92_iso": {
+ "layout": [
+ {"matrix":[0,0], "x":0, "y":0 },
+ {"matrix":[0,1], "x":1.25, "y":0 },
+ {"matrix":[0,2], "x":2.25, "y":0 },
+ {"matrix":[0,3], "x":3.25, "y":0 },
+ {"matrix":[0,4], "x":4.25, "y":0 },
+ {"matrix":[0,5], "x":5.25, "y":0 },
+ {"matrix":[0,6], "x":6.25, "y":0 },
+ {"matrix":[0,7], "x":7.25, "y":0 },
+ {"matrix":[6,0], "x":9, "y":0 },
+ {"matrix":[6,1], "x":10, "y":0 },
+ {"matrix":[6,2], "x":11, "y":0 },
+ {"matrix":[6,3], "x":12, "y":0 },
+ {"matrix":[6,4], "x":13, "y":0 },
+ {"matrix":[6,5], "x":14, "y":0 },
+ {"matrix":[6,6], "x":15, "y":0 },
+ {"matrix":[6,7], "x":16, "y":0 },
+ {"matrix":[6,8], "x":17.25, "y":0 },
+
+ {"matrix":[1,0], "x":0, "y":1.25 },
+ {"matrix":[1,1], "x":1.25, "y":1.25 },
+ {"matrix":[1,2], "x":2.25, "y":1.25 },
+ {"matrix":[1,3], "x":3.25, "y":1.25 },
+ {"matrix":[1,4], "x":4.25, "y":1.25 },
+ {"matrix":[1,5], "x":5.25, "y":1.25 },
+ {"matrix":[1,6], "x":6.25, "y":1.25 },
+ {"matrix":[1,7], "x":7.25, "y":1.25 },
+ {"matrix":[7,0], "x":9, "y":1.25 },
+ {"matrix":[7,1], "x":10, "y":1.25 },
+ {"matrix":[7,2], "x":11, "y":1.25 },
+ {"matrix":[7,3], "x":12, "y":1.25 },
+ {"matrix":[7,4], "x":13, "y":1.25 },
+ {"matrix":[7,5], "x":14, "y":1.25 },
+ {"matrix":[7,6], "x":15, "y":1.25, "w":2 },
+ {"matrix":[7,8], "x":17.25, "y":1.25 },
+
+ {"matrix":[2,0], "x":0, "y":2.25 },
+ {"matrix":[2,1], "x":1.25, "y":2.25, "w":1.5 },
+ {"matrix":[2,2], "x":2.75, "y":2.25 },
+ {"matrix":[2,3], "x":3.75, "y":2.25 },
+ {"matrix":[2,4], "x":4.75, "y":2.25 },
+ {"matrix":[2,6], "x":5.75, "y":2.25 },
+ {"matrix":[2,7], "x":6.75, "y":2.25 },
+ {"matrix":[8,0], "x":8.5, "y":2.25 },
+ {"matrix":[8,1], "x":9.5, "y":2.25 },
+ {"matrix":[8,2], "x":10.5, "y":2.25 },
+ {"matrix":[8,3], "x":11.5, "y":2.25 },
+ {"matrix":[8,4], "x":12.5, "y":2.25 },
+ {"matrix":[8,5], "x":13.5, "y":2.25 },
+ {"matrix":[8,6], "x":14.5, "y":2.25 },
+ {"matrix":[8,8], "x":17.25, "y":2.25 },
+
+ {"matrix":[3,0], "x":0, "y":3.25 },
+ {"matrix":[3,1], "x":1.25, "y":3.25, "w":1.75 },
+ {"matrix":[3,2], "x":3, "y":3.25 },
+ {"matrix":[3,3], "x":4, "y":3.25 },
+ {"matrix":[3,4], "x":5, "y":3.25 },
+ {"matrix":[3,5], "x":6, "y":3.25 },
+ {"matrix":[3,6], "x":7, "y":3.25 },
+ {"matrix":[9,0], "x":8.75, "y":3.25 },
+ {"matrix":[9,1], "x":9.75, "y":3.25 },
+ {"matrix":[9,2], "x":10.75, "y":3.25 },
+ {"matrix":[9,3], "x":11.75, "y":3.25 },
+ {"matrix":[9,4], "x":12.75, "y":3.25 },
+ {"matrix":[9,5], "x":13.75, "y":3.25 },
+ {"matrix":[9,7], "x":14.75, "y":3.25 },
+ {"matrix":[8,7], "x":15.75, "y":2.25, "w":1.25, "h":2 },
+ {"matrix":[9,8], "x":17.25, "y":3.25 },
+
+ {"matrix":[4,0], "x":0, "y":4.25 },
+ {"matrix":[4,1], "x":1.25, "y":4.25, "w":1.25 },
+ {"matrix":[4,2], "x":2.5, "y":4.25 },
+ {"matrix":[4,3], "x":3.5, "y":4.25 },
+ {"matrix":[4,4], "x":4.5, "y":4.25 },
+ {"matrix":[4,5], "x":5.5, "y":4.25 },
+ {"matrix":[4,6], "x":6.5, "y":4.25 },
+ {"matrix":[4,7], "x":7.5, "y":4.25 },
+ {"matrix":[10,0], "x":9.25, "y":4.25 },
+ {"matrix":[10,1], "x":10.25, "y":4.25 },
+ {"matrix":[10,2], "x":11.25, "y":4.25 },
+ {"matrix":[10,3], "x":12.25, "y":4.25 },
+ {"matrix":[10,4], "x":13.25, "y":4.25 },
+ {"matrix":[10,5], "x":14.25, "y":4.25, "w":1.75 },
+ {"matrix":[10,7], "x":16.25, "y":4.25 },
+
+ {"matrix":[5,0], "x":0, "y":5.25 },
+ {"matrix":[5,1], "x":1.25, "y":5.25, "w":1.25 },
+ {"matrix":[5,2], "x":2.5, "y":5.25, "w":1.25 },
+ {"matrix":[5,3], "x":3.75, "y":5.25, "w":1.25 },
+ {"matrix":[5,4], "x":5, "y":5.25, "w":1.25 },
+ {"matrix":[5,6], "x":6.25, "y":5.25, "w":2.25 },
+ {"matrix":[11,1], "x":9.25, "y":5.25, "w":2.75 },
+ {"matrix":[11,2], "x":12, "y":5.25 },
+ {"matrix":[11,3], "x":13, "y":5.25 },
+ {"matrix":[11,4], "x":14, "y":5.25 },
+ {"matrix":[11,6], "x":15.25, "y":5.25 },
+ {"matrix":[11,7], "x":16.25, "y":5.25 },
+ {"matrix":[11,8], "x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/q11/iso_encoder/config.h b/keyboards/keychron/q11/iso_encoder/config.h
new file mode 100755
index 000000000000..57baea4c694b
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/config.h
@@ -0,0 +1,23 @@
+/* Copyright 2023 @ Keychron(https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* RGB Matrix Configuration */
+#define RGB_MATRIX_LED_COUNT 90
+
+/* Enable caps-lock LED */
+#define CAPS_LOCK_LED_INDEX 23
diff --git a/keyboards/keychron/q11/iso_encoder/info.json b/keyboards/keychron/q11/iso_encoder/info.json
new file mode 100755
index 000000000000..0529ccb29169
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/info.json
@@ -0,0 +1,106 @@
+{
+ "usb": {
+ "pid": "0x01E1",
+ "device_version": "1.0.0"
+ },
+ "rgb_matrix": {
+ "split_count": [43, 47],
+ "layout": [
+ {"matrix":[0, 1], "flags":1, "x":17, "y":0},
+ {"matrix":[0, 2], "flags":1, "x":31, "y":0},
+ {"matrix":[0, 3], "flags":1, "x":45, "y":0},
+ {"matrix":[0, 4], "flags":1, "x":59, "y":0},
+ {"matrix":[0, 5], "flags":1, "x":72, "y":0},
+ {"matrix":[0, 6], "flags":1, "x":86, "y":0},
+ {"matrix":[0, 7], "flags":1, "x":100, "y":0},
+ {"matrix":[1, 0], "flags":1, "x":0, "y":15},
+ {"matrix":[1, 1], "flags":1, "x":17, "y":15},
+ {"matrix":[1, 2], "flags":4, "x":31, "y":15},
+ {"matrix":[1, 3], "flags":4, "x":45, "y":15},
+ {"matrix":[1, 4], "flags":4, "x":59, "y":15},
+ {"matrix":[1, 5], "flags":4, "x":72, "y":15},
+ {"matrix":[1, 6], "flags":4, "x":86, "y":15},
+ {"matrix":[1, 7], "flags":4, "x":100, "y":15},
+
+ {"matrix":[2, 0], "flags":1, "x":0, "y":27},
+ {"matrix":[2, 1], "flags":1, "x":21, "y":27},
+ {"matrix":[2, 2], "flags":4, "x":38, "y":27},
+ {"matrix":[2, 3], "flags":4, "x":52, "y":27},
+ {"matrix":[2, 4], "flags":4, "x":66, "y":27},
+ {"matrix":[2, 6], "flags":4, "x":79, "y":27},
+ {"matrix":[2, 7], "flags":4, "x":93, "y":27},
+ {"matrix":[3, 0], "flags":1, "x":0, "y":40},
+ {"matrix":[3, 1], "flags":8, "x":22, "y":40},
+ {"matrix":[3, 2], "flags":4, "x":41, "y":40},
+ {"matrix":[3, 3], "flags":4, "x":55, "y":40},
+ {"matrix":[3, 4], "flags":4, "x":69, "y":40},
+ {"matrix":[3, 5], "flags":4, "x":83, "y":40},
+ {"matrix":[3, 6], "flags":4, "x":97, "y":40},
+
+ {"matrix":[4, 0], "flags":1, "x":0, "y":52},
+ {"matrix":[4, 1], "flags":1, "x":19, "y":52},
+ {"matrix":[4, 2], "flags":1, "x":34, "y":52},
+ {"matrix":[4, 3], "flags":4, "x":48, "y":52},
+ {"matrix":[4, 4], "flags":4, "x":62, "y":52},
+ {"matrix":[4, 5], "flags":4, "x":76, "y":52},
+ {"matrix":[4, 6], "flags":4, "x":90, "y":52},
+ {"matrix":[4, 7], "flags":4, "x":103, "y":52},
+ {"matrix":[5, 0], "flags":1, "x":0, "y":64},
+ {"matrix":[5, 1], "flags":1, "x":19, "y":64},
+ {"matrix":[5, 2], "flags":1, "x":36, "y":64},
+ {"matrix":[5, 3], "flags":1, "x":53, "y":64},
+ {"matrix":[5, 4], "flags":1, "x":71, "y":64},
+ {"matrix":[5, 6], "flags":4, "x":95, "y":64},
+
+ {"matrix":[6, 0], "flags":1, "x":110, "y":0},
+ {"matrix":[6, 1], "flags":1, "x":124, "y":0},
+ {"matrix":[6, 2], "flags":1, "x":138, "y":0},
+ {"matrix":[6, 3], "flags":1, "x":152, "y":0},
+ {"matrix":[6, 4], "flags":1, "x":165, "y":0},
+ {"matrix":[6, 5], "flags":1, "x":179, "y":0},
+ {"matrix":[6, 6], "flags":1, "x":193, "y":0},
+ {"matrix":[6, 7], "flags":1, "x":207, "y":0},
+ {"matrix":[7, 0], "flags":4, "x":110, "y":15},
+ {"matrix":[7, 1], "flags":4, "x":124, "y":15},
+ {"matrix":[7, 2], "flags":4, "x":138, "y":15},
+ {"matrix":[7, 3], "flags":4, "x":152, "y":15},
+ {"matrix":[7, 4], "flags":4, "x":165, "y":15},
+ {"matrix":[7, 5], "flags":4, "x":179, "y":15},
+ {"matrix":[7, 6], "flags":1, "x":200, "y":15},
+ {"matrix":[7, 8], "flags":1, "x":224, "y":15},
+
+ {"matrix":[8, 0], "flags":4, "x":103, "y":27},
+ {"matrix":[8, 1], "flags":4, "x":117, "y":27},
+ {"matrix":[8, 2], "flags":4, "x":131, "y":27},
+ {"matrix":[8, 3], "flags":4, "x":145, "y":27},
+ {"matrix":[8, 4], "flags":4, "x":158, "y":27},
+ {"matrix":[8, 5], "flags":4, "x":172, "y":27},
+ {"matrix":[8, 6], "flags":4, "x":186, "y":27},
+ {"matrix":[8, 8], "flags":1, "x":224, "y":27},
+ {"matrix":[9, 0], "flags":4, "x":107, "y":40},
+ {"matrix":[9, 1], "flags":4, "x":121, "y":40},
+ {"matrix":[9, 2], "flags":4, "x":134, "y":40},
+ {"matrix":[9, 3], "flags":4, "x":148, "y":40},
+ {"matrix":[9, 4], "flags":4, "x":162, "y":40},
+ {"matrix":[9, 5], "flags":4, "x":176, "y":40},
+ {"matrix":[9, 7], "flags":1, "x":190, "y":40},
+ {"matrix":[8, 7], "flags":1, "x":208, "y":36},
+ {"matrix":[9, 8], "flags":1, "x":224, "y":40},
+
+ {"matrix":[10, 0], "flags":4, "x":114, "y":52},
+ {"matrix":[10, 1], "flags":4, "x":127, "y":52},
+ {"matrix":[10, 2], "flags":4, "x":141, "y":52},
+ {"matrix":[10, 3], "flags":4, "x":155, "y":52},
+ {"matrix":[10, 4], "flags":4, "x":169, "y":52},
+ {"matrix":[10, 5], "flags":1, "x":188, "y":52},
+ {"matrix":[10, 7], "flags":1, "x":210, "y":52},
+ {"matrix":[11, 1], "flags":4, "x":126, "y":64},
+ {"matrix":[11, 2], "flags":1, "x":152, "y":64},
+ {"matrix":[11, 3], "flags":1, "x":166, "y":64},
+ {"matrix":[11, 4], "flags":1, "x":180, "y":64},
+ {"matrix":[11, 6], "flags":1, "x":196, "y":64},
+ {"matrix":[11, 7], "flags":1, "x":210, "y":64},
+ {"matrix":[11, 8], "flags":1, "x":224, "y":64}
+ ]
+ }
+}
diff --git a/keyboards/keychron/q11/iso_encoder/iso_encoder.c b/keyboards/keychron/q11/iso_encoder/iso_encoder.c
new file mode 100755
index 000000000000..08858d9b7922
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/iso_encoder.c
@@ -0,0 +1,129 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, A_2, C_2, B_2}, // ESC
+ {0, A_3, C_3, B_3}, // F1
+ {0, A_4, C_4, B_4}, // F2
+ {0, A_5, C_5, B_5}, // F3
+ {0, A_6, C_6, B_6}, // F4
+ {0, A_7, C_7, B_7}, // F5
+ {0, A_8, C_8, B_8}, // F6
+
+ {0, D_1, F_1, E_1}, // M1
+ {0, D_2, F_2, E_2}, // `~
+ {0, D_3, F_3, E_3}, // 1!
+ {0, D_4, F_4, E_4}, // 2@
+ {0, D_5, F_5, E_5}, // 3#
+ {0, D_6, F_6, E_6}, // 4$
+ {0, D_7, F_7, E_7}, // 5%
+ {0, D_8, F_8, E_8}, // 6^
+
+ {0, G_1, I_1, H_1}, // M2
+ {0, G_2, I_2, H_2}, // TAB
+ {0, G_3, I_3, H_3}, // Q
+ {0, G_4, I_4, H_4}, // W
+ {0, G_5, I_5, H_5}, // E
+ {0, G_6, I_6, H_6}, // R
+ {0, G_7, I_7, H_7}, // T
+
+ {0, J_1, L_1, K_1}, // M3
+ {0, J_2, L_2, K_2}, // CapsJock
+ {0, J_3, L_3, K_3}, // A
+ {0, J_4, L_4, K_4}, // S
+ {0, J_5, L_5, K_5}, // D
+ {0, J_6, L_6, K_6}, // F
+ {0, J_7, L_7, K_7}, // G
+
+ {0, J_9, L_9, K_9}, // M4
+ {0, J_10, L_10, K_10}, // Shift_L
+ {0, J_11, L_11, K_11}, // NUBS
+ {0, J_12, L_12, K_12}, // Z
+ {0, J_13, L_13, K_13}, // X
+ {0, J_14, L_14, K_14}, // C
+ {0, J_15, L_15, K_15}, // V
+ {0, J_16, L_16, K_16}, // B
+
+ {0, G_9, I_9, H_9}, // M5
+ {0, G_10, I_10, H_10}, // Ctrl_L
+ {0, G_11, I_11, H_11}, // WGn_L
+ {0, G_12, I_12, H_12}, // Alt_L
+ {0, G_13, I_13, H_13}, // Fn
+ {0, G_15, I_15, H_15}, // Space
+
+ {0, A_16, C_16, B_16}, // F7
+ {0, A_15, C_15, B_15}, // F8
+ {0, A_14, C_14, B_14}, // F9
+ {0, A_13, C_13, B_13}, // F11
+ {0, A_12, C_12, B_12}, // F11
+ {0, A_11, C_11, B_11}, // F12
+ {0, A_10, C_10, B_10}, // INS
+ {0, A_9, C_9, B_9}, // DEL
+
+ {0, D_16, F_16, E_16}, // 7&
+ {0, D_15, F_15, E_15}, // 8*
+ {0, D_14, F_14, E_14}, // 9(
+ {0, D_13, F_13, E_13}, // 1)
+ {0, D_12, F_12, E_12}, // -_
+ {0, D_11, F_11, E_11}, // =+
+ {0, D_10, F_10, E_10}, // BackSpace
+ {0, D_8, F_8, E_8}, // PgUp
+
+ {0, G_16, I_16, H_16}, // Y
+ {0, G_15, I_15, H_15}, // U
+ {0, G_14, I_14, H_14}, // G
+ {0, G_13, I_13, H_13}, // O
+ {0, G_12, I_12, H_12}, // P
+ {0, G_11, I_11, H_11}, // [
+ {0, G_10, I_10, H_10}, // ]
+ {0, G_8, I_8, H_8}, // PgDn
+
+ {0, J_16, L_16, K_16}, // H
+ {0, J_15, L_15, K_15}, // J
+ {0, J_14, L_14, K_14}, // KKEY_PRESS_HOME
+ {0, J_13, L_13, K_13}, // J
+ {0, J_12, L_12, K_12}, // ;:
+ {0, J_11, L_11, K_11}, // '"
+ {0, J_9, L_9, K_9}, // NUHS
+ {0, G_9, I_9, H_9}, // Enter
+ {0, J_8, L_8, K_8}, // Home
+
+ {0, J_7, L_7, K_7}, // N
+ {0, J_6, L_6, K_6}, // M
+ {0, J_5, L_5, K_5}, // ,<
+ {0, J_4, L_4, K_4}, // .>
+ {0, J_3, L_3, K_3}, // ?/
+ {0, J_2, L_2, K_2}, // Shift_R
+ {0, J_1, L_1, K_1}, // Up
+
+ {0, G_6, I_6, H_6}, // Space
+ {0, G_5, I_5, H_5}, // Win_R
+ {0, G_4, I_4, H_4}, // Fn
+ {0, G_3, I_3, H_3}, // Ctrl_R
+ {0, G_2, I_2, H_2}, // Left
+ {0, G_1, I_1, H_1}, // Down
+ {0, G_7, I_7, H_7}, // Right
+};
+#endif
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/default/keymap.c b/keyboards/keychron/q11/iso_encoder/keymaps/default/keymap.c
new file mode 100755
index 000000000000..2c494c08d524
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN,
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_92_iso(
+ KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
+ _______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ _______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ _______, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ _______, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ _______, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_92_iso(
+ KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE,
+ _______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ _______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ _______, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ _______, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ _______, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+ [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
+};
+#endif // ENCODER_MAP_ENABLE
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/default/rules.mk b/keyboards/keychron/q11/iso_encoder/keymaps/default/rules.mk
new file mode 100755
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/keychron/keymap.c b/keyboards/keychron/q11/iso_encoder/keymaps/keychron/keymap.c
new file mode 100755
index 000000000000..8269bf1a8800
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/keychron/keymap.c
@@ -0,0 +1,82 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+#include "keychron_common.h"
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_92_iso(
+ KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
+ MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ MC_5, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_92_iso(
+ KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE,
+ MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_DIRECTIONS][NUM_DIRECTIONS] = {
+ [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+ [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}
+};
+#endif // ENCODER_MAP_ENABLE
+
+// clang-format on
+
+void housekeeping_task_user(void) {
+ housekeeping_task_keychron();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_keychron(keycode, record)) {
+ return false;
+ }
+
+ return true;
+}
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/keychron/rules.mk b/keyboards/keychron/q11/iso_encoder/keymaps/keychron/rules.mk
new file mode 100755
index 000000000000..9cf1a9b56cba
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/keychron/rules.mk
@@ -0,0 +1,5 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+
+VPATH += keyboards/keychron/common
+SRC += keychron_common.c
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/via/keymap.c b/keyboards/keychron/q11/iso_encoder/keymaps/via/keymap.c
new file mode 100755
index 000000000000..8e969a8f815c
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/via/keymap.c
@@ -0,0 +1,70 @@
+/* Copyright 2023 @ Keychron (https://www.keychron.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN,
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_92_iso(
+ KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
+ MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ MC_5, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT_92_iso(
+ KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE,
+ MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
+ MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT_92_iso(
+ RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+ [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
+};
+#endif // ENCODER_MAP_ENABLE
diff --git a/keyboards/keychron/q11/iso_encoder/keymaps/via/rules.mk b/keyboards/keychron/q11/iso_encoder/keymaps/via/rules.mk
new file mode 100755
index 000000000000..f1adcab005e8
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/keychron/q11/iso_encoder/rules.mk b/keyboards/keychron/q11/iso_encoder/rules.mk
new file mode 100755
index 000000000000..ac78b227d602
--- /dev/null
+++ b/keyboards/keychron/q11/iso_encoder/rules.mk
@@ -0,0 +1,4 @@
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+SERIAL_DRIVER = usart
diff --git a/keyboards/keychron/q11/q11.c b/keyboards/keychron/q11/q11.c
index 8cfbb38fff0a..bf7bab4b5397 100755
--- a/keyboards/keychron/q11/q11.c
+++ b/keyboards/keychron/q11/q11.c
@@ -23,9 +23,9 @@
const matrix_row_t matrix_mask[] = {
0b011111111,
0b011111111,
- 0b011111111,
+ 0b011011111,
0b001111111,
- 0b011111101,
+ 0b011111111,
0b001011111,
0b111111111,
0b101111111,
@@ -47,7 +47,7 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
}
#endif
-#if defined(RGB_MATRIX_ENABLE) && (defined(CAPS_LOCK_LED_INDEX) || defined(NUM_LOCK_LED_INDEX))
+#if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX)
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
@@ -100,3 +100,63 @@ bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
return true;
}
#endif
+
+#define ADC_BUFFER_DEPTH 1
+#define ADC_NUM_CHANNELS 1
+#define ADC_SAMPLING_RATE ADC_SMPR_SMP_12P5
+#define ADC_RESOLUTION ADC_CFGR_RES_10BITS
+
+static int16_t analogReadPin_my(pin_t pin) {
+ ADCConfig adcCfg = {};
+ adcsample_t sampleBuffer[ADC_NUM_CHANNELS * ADC_BUFFER_DEPTH];
+ ADCDriver *targetDriver = &ADCD1;
+ ADCConversionGroup adcConversionGroup = {
+ .circular = FALSE,
+ .num_channels = (uint16_t)(ADC_NUM_CHANNELS),
+ .cfgr = ADC_RESOLUTION,
+ };
+
+ palSetLineMode(pin, PAL_MODE_INPUT_ANALOG);
+ switch (pin) {
+ case B0:
+ adcConversionGroup.smpr[2] = ADC_SMPR2_SMP_AN15(ADC_SAMPLING_RATE);
+ adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(ADC_CHANNEL_IN15);
+ sampleBuffer[0] = 0;
+ break;
+ case B1:
+ adcConversionGroup.smpr[2] = ADC_SMPR2_SMP_AN16(ADC_SAMPLING_RATE);
+ adcConversionGroup.sqr[0] = ADC_SQR1_SQ1_N(ADC_CHANNEL_IN16);
+ sampleBuffer[0] = 0;
+ break;
+ default:
+ return 0;
+ }
+ adcStart(targetDriver, &adcCfg);
+ if (adcConvert(targetDriver, &adcConversionGroup, &sampleBuffer[0], ADC_BUFFER_DEPTH) != MSG_OK) {
+ return 0;
+ }
+
+ return *sampleBuffer;
+}
+
+void keyboard_post_init_kb(void) {
+ // 1. The pin A5/B5 of the USB C interface in the left hand is connected to the pin A0 of MCU,
+ // A0 will be set to output and write high when keyboard initial.
+ // 2. The same pin in the right hand is connected to the pin B0 and B1 of MCU respectively,
+ // and the ADC function of B0 and B1 will be enabled when keyboard initial.
+ // 3. because the serial usart RXD and TXD is multiplexed on USB's D+ and D- in the right hand.
+ // So detect the voltage on the pin A5/B5 of the USB C interface by ADC,
+ // and disable USB connectivity when the ADC value exceeds 1000,
+ // to avoid affecting the serial usart communication between the left hand and the right hand.
+ if (is_keyboard_left()) {
+ setPinOutput(A0);
+ writePinHigh(A0);
+ } else {
+ if ((analogReadPin_my(B0) > 1000) || (analogReadPin_my(B1) > 1000)) {
+ setPinInput(A11);
+ setPinInput(A12);
+ }
+ }
+
+ keyboard_post_init_user();
+}
diff --git a/keyboards/keychron/q11/readme.md b/keyboards/keychron/q11/readme.md
index 3dad920e04e3..e6ed2afb7508 100644
--- a/keyboards/keychron/q11/readme.md
+++ b/keyboards/keychron/q11/readme.md
@@ -11,11 +11,13 @@ A customizable 75% split keyboard.
Make example for this keyboard (after setting up your build environment):
make keychron/q11/ansi_encoder:default
+ make keychron/q11/iso_encoder:default
Flashing example for this keyboard:
make keychron/q11/ansi_encoder:default:flash
+ make keychron/q11/iso_encoder:default:flash
-**Reset Key**: Hold down the key located at *K01*, which programmed as *Esc* while plugging in the keyboard.
+**Reset Key**: The master and slave side should be flashed individually, to enter flashing mode, hold down the key located at *K01*, which programmed as *Esc* while plugging in the keyboard for the master side and hold down the key located at *K67*, which programmed as *Del* while plugging in the keyboard for the slave side.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keychron/s1/ansi/white/config.h b/keyboards/keychron/s1/ansi/white/config.h
index ee09c95266ce..65a79726ca77 100644
--- a/keyboards/keychron/s1/ansi/white/config.h
+++ b/keyboards/keychron/s1/ansi/white/config.h
@@ -31,6 +31,9 @@
/* Disable LED lighting when PC is in suspend */
#define LED_DISABLE_WHEN_USB_SUSPENDED
+/* Enable caps-lock LED */
+#define CAPS_LOCK_LED_INDEX 46
+
// LED Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
// https://docs.qmk.fm/#/feature_led_matrix?id=led-matrix-effects
diff --git a/keyboards/keychron/s1/s1.c b/keyboards/keychron/s1/s1.c
index 50f54b654787..d8488dd6ea6f 100644
--- a/keyboards/keychron/s1/s1.c
+++ b/keyboards/keychron/s1/s1.c
@@ -28,7 +28,7 @@ const matrix_row_t matrix_mask[] = {
#ifdef DIP_SWITCH_ENABLE
bool dip_switch_update_kb(uint8_t index, bool active) {
- if (!dip_switch_update_user(index, active)) { return false;}
+ if (!dip_switch_update_user(index, active)) { return false; }
if (index == 0) {
default_layer_set(1UL << (active ? 2 : 0));
}
@@ -73,10 +73,54 @@ bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 255, 255, 255);
} else {
if (!rgb_matrix_get_flags()) {
- RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0);
+ RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0);
}
}
return true;
}
-#endif // CAPS_LOCK_LED_INDEX
+#endif // RGB_MATRIX_ENABLE && CAPS_LOCK_LED_INDEX
+
+#if defined(LED_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX)
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) { return false; }
+ switch (keycode) {
+#ifdef LED_MATRIX_ENABLE
+ case BL_TOGG:
+ if (record->event.pressed) {
+ switch (led_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ led_matrix_set_flags(LED_FLAG_NONE);
+ led_matrix_set_value_all(0);
+ } break;
+ default: {
+ led_matrix_set_flags(LED_FLAG_ALL);
+ } break;
+ }
+ }
+ if (!led_matrix_is_enabled()) {
+ led_matrix_set_flags(LED_FLAG_ALL);
+ led_matrix_enable();
+ }
+ return false;
+#endif
+ }
+ return true;
+}
+
+bool led_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!led_matrix_indicators_advanced_user(led_min, led_max)) { return false; }
+
+ if (host_keyboard_led_state().caps_lock) {
+ led_matrix_set_value(CAPS_LOCK_LED_INDEX, 255);
+
+ } else {
+ if (!led_matrix_get_flags()) {
+ led_matrix_set_value(CAPS_LOCK_LED_INDEX, 0);
+ }
+ }
+ return true;
+}
+
+#endif // LED_MATRIX_ENABLE && CAPS_LOCK_LED_INDEX
diff --git a/keyboards/keychron/v4/ansi/info.json b/keyboards/keychron/v4/ansi/info.json
index e45a9c18d522..b55717243e12 100644
--- a/keyboards/keychron/v4/ansi/info.json
+++ b/keyboards/keychron/v4/ansi/info.json
@@ -18,8 +18,12 @@
"diode_direction": "ROW2COL",
"processor": "STM32L432",
"bootloader": "stm32-dfu",
+ "layout_aliases": {
+ "LAYOUT_ansi_61": "LAYOUT_60_ansi"
+ },
+ "community_layouts": ["60_ansi"],
"layouts": {
- "LAYOUT_ansi_61": {
+ "LAYOUT_60_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/keychron/v4/ansi/keymaps/default/keymap.c b/keyboards/keychron/v4/ansi/keymaps/default/keymap.c
index 76c2f1b006c8..b23029bee48a 100644
--- a/keyboards/keychron/v4/ansi/keymaps/default/keymap.c
+++ b/keyboards/keychron/v4/ansi/keymaps/default/keymap.c
@@ -30,35 +30,35 @@ enum layers {
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_61(
+ [MAC_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_ansi_61(
+ [WIN_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_ansi_61(
+ [_FN1] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, _______, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_ansi_61(
+ [_FN2] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_ansi_61(
+ [_FN3] = LAYOUT_60_ansi(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/v4/ansi/keymaps/keychron/keymap.c b/keyboards/keychron/v4/ansi/keymaps/keychron/keymap.c
index 2f09fd42d8ca..50a5fd4267eb 100644
--- a/keyboards/keychron/v4/ansi/keymaps/keychron/keymap.c
+++ b/keyboards/keychron/v4/ansi/keymaps/keychron/keymap.c
@@ -28,35 +28,35 @@ enum layers {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_61(
+ [MAC_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_ansi_61(
+ [WIN_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_ansi_61(
+ [_FN1] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_SNAP, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_ansi_61(
+ [_FN2] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_ansi_61(
+ [_FN3] = LAYOUT_60_ansi(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/v4/ansi/keymaps/via/keymap.c b/keyboards/keychron/v4/ansi/keymaps/via/keymap.c
index 76c2f1b006c8..b23029bee48a 100644
--- a/keyboards/keychron/v4/ansi/keymaps/via/keymap.c
+++ b/keyboards/keychron/v4/ansi/keymaps/via/keymap.c
@@ -30,35 +30,35 @@ enum layers {
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_ansi_61(
+ [MAC_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_ansi_61(
+ [WIN_BASE] = LAYOUT_60_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_ansi_61(
+ [_FN1] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, _______, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_ansi_61(
+ [_FN2] = LAYOUT_60_ansi(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_ansi_61(
+ [_FN3] = LAYOUT_60_ansi(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/v4/iso/info.json b/keyboards/keychron/v4/iso/info.json
index fd9a9a81df5a..6c481ed18f76 100644
--- a/keyboards/keychron/v4/iso/info.json
+++ b/keyboards/keychron/v4/iso/info.json
@@ -18,8 +18,12 @@
"diode_direction": "ROW2COL",
"processor": "STM32L432",
"bootloader": "stm32-dfu",
+ "layout_aliases": {
+ "LAYOUT_iso_62": "LAYOUT_60_iso"
+ },
+ "community_layouts": ["60_iso"],
"layouts": {
- "LAYOUT_iso_62": {
+ "LAYOUT_60_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -66,7 +70,7 @@
{"matrix": [1, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
- {"matrix": [3, 1], "x": 1.25, "y": 3.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
diff --git a/keyboards/keychron/v4/iso/keymaps/default/keymap.c b/keyboards/keychron/v4/iso/keymaps/default/keymap.c
index 41fba1cda326..1569e513cf80 100644
--- a/keyboards/keychron/v4/iso/keymaps/default/keymap.c
+++ b/keyboards/keychron/v4/iso/keymaps/default/keymap.c
@@ -30,35 +30,35 @@ enum layers {
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_iso_62(
+ [MAC_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_iso_62(
+ [WIN_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_iso_62(
+ [_FN1] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, _______, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_iso_62(
+ [_FN2] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_iso_62(
+ [_FN3] = LAYOUT_60_iso(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/v4/iso/keymaps/keychron/keymap.c b/keyboards/keychron/v4/iso/keymaps/keychron/keymap.c
index a91a2ae36d09..0bc8e995dc68 100644
--- a/keyboards/keychron/v4/iso/keymaps/keychron/keymap.c
+++ b/keyboards/keychron/v4/iso/keymaps/keychron/keymap.c
@@ -28,35 +28,35 @@ enum layers {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_iso_62(
+ [MAC_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_iso_62(
+ [WIN_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_iso_62(
+ [_FN1] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_SNAP, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_iso_62(
+ [_FN2] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_iso_62(
+ [_FN3] = LAYOUT_60_iso(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/v4/iso/keymaps/via/keymap.c b/keyboards/keychron/v4/iso/keymaps/via/keymap.c
index 41fba1cda326..1569e513cf80 100644
--- a/keyboards/keychron/v4/iso/keymaps/via/keymap.c
+++ b/keyboards/keychron/v4/iso/keymaps/via/keymap.c
@@ -30,35 +30,35 @@ enum layers {
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [MAC_BASE] = LAYOUT_iso_62(
+ [MAC_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
- [WIN_BASE] = LAYOUT_iso_62(
+ [WIN_BASE] = LAYOUT_60_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
- [_FN1] = LAYOUT_iso_62(
+ [_FN1] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, _______, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN2] = LAYOUT_iso_62(
+ [_FN2] = LAYOUT_60_iso(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
- [_FN3] = LAYOUT_iso_62(
+ [_FN3] = LAYOUT_60_iso(
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/kibou/harbour/info.json b/keyboards/kibou/harbour/info.json
index ae5fe10d68d7..a5417e1ae524 100644
--- a/keyboards/kibou/harbour/info.json
+++ b/keyboards/kibou/harbour/info.json
@@ -1,7 +1,7 @@
{
"manufacturer": "kibou",
"keyboard_name": "harbour",
- "maintainer": "kibou",
+ "maintainer": "FanXingStudio",
"bootloader": "stm32-dfu",
"diode_direction": "ROW2COL",
"features": {
@@ -26,77 +26,158 @@
"indicators": {
"caps_lock": "C8"
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_65_ansi_blocker_tsangan_split_bs"
+ },
"layouts": {
- "LAYOUT": {
+ "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, 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": [1, 15], "x": 15, "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, 14], "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, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_wkl_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,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": [1,15], "x": 15, "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,14], "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,13], "x": 12.25, "y": 3, "w": 1.75 },
- { "matrix": [3,14], "x": 14, "y": 3 },
- { "matrix": [3,15], "x": 15, "y": 3 },
- { "matrix": [4,0], "x": 0, "y": 4, "w": 1.5 },
- { "matrix": [4,2], "x": 1.5, "y": 4 },
- { "matrix": [4,3], "x": 2.5, "y": 4, "w": 1.5 },
- { "matrix": [4,7], "x": 4, "y": 4, "w": 7 },
- { "matrix": [4,11], "x": 11, "y": 4, "w": 1.75 },
- { "matrix": [4,13], "x": 13, "y": 4 },
- { "matrix": [4,14], "x": 14, "y": 4 },
- { "matrix": [4,15], "x": 15, "y": 4 }
+ {"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, 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": [1, 15], "x": 15, "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, 14], "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, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 2.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 3.75, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 10.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4}
]
}
}
-}
\ No newline at end of file
+}
diff --git a/keyboards/kibou/harbour/keymaps/default/keymap.c b/keyboards/kibou/harbour/keymaps/default/keymap.c
index 7586fc24e066..a949c5dc4deb 100644
--- a/keyboards/kibou/harbour/keymaps/default/keymap.c
+++ b/keyboards/kibou/harbour/keymaps/default/keymap.c
@@ -4,7 +4,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_65_ansi_blocker_tsangan_split_bs(
KC_ESC, KC_1, 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_INS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
diff --git a/keyboards/kibou/harbour/keymaps/via/keymap.c b/keyboards/kibou/harbour/keymaps/via/keymap.c
index 7586fc24e066..a949c5dc4deb 100644
--- a/keyboards/kibou/harbour/keymaps/via/keymap.c
+++ b/keyboards/kibou/harbour/keymaps/via/keymap.c
@@ -4,7 +4,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_65_ansi_blocker_tsangan_split_bs(
KC_ESC, KC_1, 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_INS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
diff --git a/keyboards/kibou/harbour/matrix_diagram.md b/keyboards/kibou/harbour/matrix_diagram.md
new file mode 100644
index 000000000000..1f5097d93d85
--- /dev/null
+++ b/keyboards/kibou/harbour/matrix_diagram.md
@@ -0,0 +1,36 @@
+# Matrix Diagram for Kibou Harbour
+
+According to the GB runner, the PCB supports ISO layout, but the
+supplied plate does not.[^1][^2]
+
+Product renders and GB runner comments both show support for split
+Backspace,[^3] but no switch matrix data is currently available.
+
+\- @noroadsleft, 23 June, 2023
+
+```
+ ┌───────┐
+ 2u Backspace │?? │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │0F │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ ┌─────┐
+│10 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │1F │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐?? │ ISO Enter
+│20 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2E │2F │ │?? │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
+│30 │?? │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3E │3F │
+├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬─┬───┼───┼───┤
+│40 │42 │43 │47 │4B │ │4D │4E │4F │
+└─────┴───┴─────┴───────────────────────────┴─────┘ └───┴───┴───┘
+┌────────┐
+│30 │ 2.25u LShift
+└────────┘
+┌─────┬──┬─────┬───────────────────────────┬─────┐
+│40 │ │43 │47 │4B │ Blocker WKL
+└─────┘ └─────┴───────────────────────────┴─────┘
+```
+
+[^1]: [Geekhack Interest Check, Original Post](https://geekhack.org/index.php?topic=111146.msg3012509#msg3012509)
+[^2]: [Reddit Interest Check](https://www.reddit.com/r/MechanicalKeyboards/comments/lgyv5p/ic_harbour_%E6%B8%AF%E5%8F%A3_a_65_gasket_mounted_board_designed/gmudnjb/)
+[^3]: [Geekhack Interest Check, reply #102](https://geekhack.org/index.php?topic=111146.msg3022822#msg3022822)
diff --git a/keyboards/kibou/harbour/readme.md b/keyboards/kibou/harbour/readme.md
index f957e3179535..31ac8dbd83ef 100644
--- a/keyboards/kibou/harbour/readme.md
+++ b/keyboards/kibou/harbour/readme.md
@@ -1,6 +1,6 @@
# harbour
-* Keyboard Maintainer: [kibou](https://kibou.store/)
+* Keyboard Maintainer: [FanXingStudio](https://github.com/FanXingStudio)
* Hardware Supported: harbour PCBs, STM32F401
* Hardware Availability: https://kibou.store/
diff --git a/keyboards/kibou/suisei/info.json b/keyboards/kibou/suisei/info.json
new file mode 100644
index 000000000000..a33bb12abd0c
--- /dev/null
+++ b/keyboards/kibou/suisei/info.json
@@ -0,0 +1,101 @@
+{
+ "manufacturer": "kibou",
+ "keyboard_name": "suisei",
+ "maintainer": "kibou",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "ROW2COL",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B2", "A10", "A9", "A8", "B15", "B14", "B13", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "C13", "B9"],
+ "rows": ["B11", "B10", "B0", "A1", "A0"]
+ },
+ "processor": "STM32F072",
+ "url": "https://kibou.store/",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0065",
+ "vid": "0x586A"
+ },
+ "indicators": {
+ "caps_lock": "B1"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0,0], "x":0, "y":0},
+ {"matrix": [0,1], "x":1, "y":0},
+ {"matrix": [0,2], "x":2, "y":0},
+ {"matrix": [0,3], "x":3, "y":0},
+ {"matrix": [0,4], "x":4, "y":0},
+ {"matrix": [0,5], "x":5, "y":0},
+ {"matrix": [0,6], "x":6, "y":0},
+ {"matrix": [0,7], "x":7, "y":0},
+ {"matrix": [0,8], "x":8, "y":0},
+ {"matrix": [0,9], "x":9, "y":0},
+ {"matrix": [0,10], "x":10, "y":0},
+ {"matrix": [0,11], "x":11, "y":0},
+ {"matrix": [0,12], "x":12, "y":0},
+ {"matrix": [0,13], "x":13, "y":0},
+ {"matrix": [0,14], "x":14, "y":0},
+ {"matrix": [0,15], "x":15, "y":0},
+ {"matrix": [1,0], "x":0, "y":1, "w":1.5},
+ {"matrix": [1,1], "x":1.5, "y":1},
+ {"matrix": [1,2], "x":2.5, "y":1},
+ {"matrix": [1,3], "x":3.5, "y":1},
+ {"matrix": [1,4], "x":4.5, "y":1},
+ {"matrix": [1,5], "x":5.5, "y":1},
+ {"matrix": [1,6], "x":6.5, "y":1},
+ {"matrix": [1,7], "x":7.5, "y":1},
+ {"matrix": [1,8], "x":8.5, "y":1},
+ {"matrix": [1,9], "x":9.5, "y":1},
+ {"matrix": [1,10], "x":10.5, "y":1},
+ {"matrix": [1,11], "x":11.5, "y":1},
+ {"matrix": [1,12], "x":12.5, "y":1},
+ {"matrix": [1,13], "x":13.5, "y":1, "w":1.5},
+ {"matrix": [1,15], "x":15, "y":1},
+ {"matrix": [2,0], "x":0, "y":2, "w":1.75},
+ {"matrix": [2,1], "x":1.75, "y":2},
+ {"matrix": [2,2], "x":2.75, "y":2},
+ {"matrix": [2,3], "x":3.75, "y":2},
+ {"matrix": [2,4], "x":4.75, "y":2},
+ {"matrix": [2,5], "x":5.75, "y":2},
+ {"matrix": [2,6], "x":6.75, "y":2},
+ {"matrix": [2,7], "x":7.75, "y":2},
+ {"matrix": [2,8], "x":8.75, "y":2},
+ {"matrix": [2,9], "x":9.75, "y":2},
+ {"matrix": [2,10], "x":10.75, "y":2},
+ {"matrix": [2,11], "x":11.75, "y":2},
+ {"matrix": [2,12], "x":12.75, "y":2, "w":2.25},
+ {"matrix": [2,15], "x":15, "y":2},
+ {"matrix": [3,0], "x":0, "y":3, "w":2.25},
+ {"matrix": [3,1], "x":2.25, "y":3},
+ {"matrix": [3,2], "x":3.25, "y":3},
+ {"matrix": [3,3], "x":4.25, "y":3},
+ {"matrix": [3,4], "x":5.25, "y":3},
+ {"matrix": [3,5], "x":6.25, "y":3},
+ {"matrix": [3,6], "x":7.25, "y":3},
+ {"matrix": [3,7], "x":8.25, "y":3},
+ {"matrix": [3,8], "x":9.25, "y":3},
+ {"matrix": [3,9], "x":10.25, "y":3},
+ {"matrix": [3,10], "x":11.25, "y":3},
+ {"matrix": [3,11], "x":12.25, "y":3, "w":1.75},
+ {"matrix": [3,14], "x":14.0, "y":3},
+ {"matrix": [3,15], "x":15.0, "y":3},
+ {"matrix": [4,0], "x":0, "y":4, "w":1.5},
+ {"matrix": [4,2], "x":2.25, "y":4, "w":1.5},
+ {"matrix": [4,5], "x":3.75, "y":4, "w":7},
+ {"matrix": [4,10], "x":10.75, "y":4, "w":1.5},
+ {"matrix": [4,13], "x":13, "y":4},
+ {"matrix": [4,14], "x":14, "y":4},
+ {"matrix": [4,15], "x":15, "y":4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kibou/suisei/keymaps/default/keymap.c b/keyboards/kibou/suisei/keymaps/default/keymap.c
new file mode 100644
index 000000000000..2c9d04c6c1ce
--- /dev/null
+++ b/keyboards/kibou/suisei/keymaps/default/keymap.c
@@ -0,0 +1,21 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_SPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/kibou/suisei/keymaps/via/keymap.c b/keyboards/kibou/suisei/keymaps/via/keymap.c
new file mode 100644
index 000000000000..2c9d04c6c1ce
--- /dev/null
+++ b/keyboards/kibou/suisei/keymaps/via/keymap.c
@@ -0,0 +1,21 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_SPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/kibou/suisei/keymaps/via/rules.mk b/keyboards/kibou/suisei/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/kibou/suisei/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/kibou/suisei/readme.md b/keyboards/kibou/suisei/readme.md
new file mode 100644
index 000000000000..6c3d135caf07
--- /dev/null
+++ b/keyboards/kibou/suisei/readme.md
@@ -0,0 +1,23 @@
+# suisei
+
+* Keyboard Maintainer: [kibou](https://kibou.store/)
+* Hardware Supported: suisei PCBs, STM32F072
+* Hardware Availability: https://kibou.store/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kibou/suisei:default
+
+Flashing example for this keyboard:
+
+ make kibou/suisei:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/kibou/suisei/rules.mk b/keyboards/kibou/suisei/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/kibou/suisei/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/kibou/wendy/info.json b/keyboards/kibou/wendy/info.json
index 4277cc03bd2b..1ab0ca8e7fdb 100644
--- a/keyboards/kibou/wendy/info.json
+++ b/keyboards/kibou/wendy/info.json
@@ -26,101 +26,310 @@
"indicators": {
"caps_lock": "B12"
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
+ "community_layouts": [
+ "tkl_ansi_split_bs_rshift",
+ "tkl_iso_split_bs_rshift"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 12.75, "y": 0},
+ {"label": "Print Screen", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 17], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "\\", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Delete", "matrix": [1, 14], "x": 14, "y": 1.25},
+ {"label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [1, 17], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"label": "Delete", "matrix": [2, 15], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [2, 16], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [2, 17], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "ANSI Enter", "matrix": [3, 13], "x": 12.75, "y": 3.25},
+ {"label": "ISO Enter", "matrix": [3, 14], "x": 13.75, "y": 3.25, "w": 1.25},
+
+ {"label": "Left Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "ISO \\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Right Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "\u2298", "matrix": [4, 14], "x": 14, "y": 4.25},
+ {"label": "\u2191", "matrix": [4, 16], "x": 16.25, "y": 4.25},
+
+ {"label": "Left Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "Left GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Left Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Right Alt", "matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "Right GUI", "matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Menu", "matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Right Ctrl", "matrix": [5, 14], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"label": "\u2190", "matrix": [5, 15], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 16], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 17], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 12.75, "y": 0},
+ {"label": "Print Screen", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 17], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "\\", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Delete", "matrix": [1, 14], "x": 14, "y": 1.25},
+ {"label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [1, 17], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"label": "Delete", "matrix": [2, 15], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [2, 16], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [2, 17], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "\u2298", "matrix": [4, 14], "x": 14, "y": 4.25},
+ {"label": "\u2191", "matrix": [4, 16], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Menu", "matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 14], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"label": "\u2190", "matrix": [5, 15], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 16], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 17], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_split_bs_rshift": {
"layout": [
- {"matrix": [0,0], "x":0, "y":0},
- {"matrix": [0,1], "x":1.25, "y":0},
- {"matrix": [0,2], "x":2.25, "y":0},
- {"matrix": [0,3], "x":3.25, "y":0},
- {"matrix": [0,4], "x":4.25, "y":0},
- {"matrix": [0,5], "x":5.5, "y":0},
- {"matrix": [0,6], "x":6.5, "y":0},
- {"matrix": [0,7], "x":7.5, "y":0},
- {"matrix": [0,8], "x":8.5, "y":0},
- {"matrix": [0,10], "x":9.75, "y":0},
- {"matrix": [0,11], "x":10.75, "y":0},
- {"matrix": [0,12], "x":11.75, "y":0},
- {"matrix": [0,13], "x":12.75, "y":0},
- {"matrix": [0,15], "x":15.25, "y":0},
- {"matrix": [0,16], "x":16.25, "y":0},
- {"matrix": [0,17], "x":17.25, "y":0},
- {"matrix": [1,0], "x":0, "y":1.25},
- {"matrix": [1,1], "x":1, "y":1.25},
- {"matrix": [1,2], "x":2, "y":1.25},
- {"matrix": [1,3], "x":3, "y":1.25},
- {"matrix": [1,4], "x":4, "y":1.25},
- {"matrix": [1,5], "x":5, "y":1.25},
- {"matrix": [1,6], "x":6, "y":1.25},
- {"matrix": [1,7], "x":7, "y":1.25},
- {"matrix": [1,8], "x":8, "y":1.25},
- {"matrix": [1,9], "x":9, "y":1.25},
- {"matrix": [1,10], "x":10, "y":1.25},
- {"matrix": [1,11], "x":11, "y":1.25},
- {"matrix": [1,12], "x":12, "y":1.25},
- {"matrix": [1,13], "x":13, "y":1.25},
- {"matrix": [1,14], "x":14, "y":1.25},
- {"matrix": [1,15], "x":15.25, "y":1.25},
- {"matrix": [1,16], "x":16.25, "y":1.25},
- {"matrix": [1,17], "x":17.25, "y":1.25},
- {"matrix": [2,0], "x":0, "y":2.25, "w":1.5},
- {"matrix": [2,1], "x":1.5, "y":2.25},
- {"matrix": [2,2], "x":2.5, "y":2.25},
- {"matrix": [2,3], "x":3.5, "y":2.25},
- {"matrix": [2,4], "x":4.5, "y":2.25},
- {"matrix": [2,5], "x":5.5, "y":2.25},
- {"matrix": [2,6], "x":6.5, "y":2.25},
- {"matrix": [2,7], "x":7.5, "y":2.25},
- {"matrix": [2,8], "x":8.5, "y":2.25},
- {"matrix": [2,9], "x":9.5, "y":2.25},
- {"matrix": [2,10], "x":10.5, "y":2.25},
- {"matrix": [2,11], "x":11.5, "y":2.25},
- {"matrix": [2,12], "x":12.5, "y":2.25},
- {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
- {"matrix": [3,14], "x":13.75, "y":2.25, "w":1.25, "h":2},
- {"matrix": [2,15], "x":15.25, "y":2.25},
- {"matrix": [2,16], "x":16.25, "y":2.25},
- {"matrix": [2,17], "x":17.25, "y":2.25},
- {"matrix": [3,0], "x":0, "y":3.25, "w":1.75},
- {"matrix": [3,1], "x":1.75, "y":3.25},
- {"matrix": [3,2], "x":2.75, "y":3.25},
- {"matrix": [3,3], "x":3.75, "y":3.25},
- {"matrix": [3,4], "x":4.75, "y":3.25},
- {"matrix": [3,5], "x":5.75, "y":3.25},
- {"matrix": [3,6], "x":6.75, "y":3.25},
- {"matrix": [3,7], "x":7.75, "y":3.25},
- {"matrix": [3,8], "x":8.75, "y":3.25},
- {"matrix": [3,9], "x":9.75, "y":3.25},
- {"matrix": [3,10], "x":10.75, "y":3.25},
- {"matrix": [3,11], "x":11.75, "y":3.25},
- {"matrix": [3,13], "x":12.75, "y":3.25},
- {"matrix": [4,0], "x":0, "y":4.25, "w":1.25},
- {"matrix": [4,1], "x":1.25, "y":4.25},
- {"matrix": [4,2], "x":2.25, "y":4.25},
- {"matrix": [4,3], "x":3.25, "y":4.25},
- {"matrix": [4,4], "x":4.25, "y":4.25},
- {"matrix": [4,5], "x":5.25, "y":4.25},
- {"matrix": [4,6], "x":6.25, "y":4.25},
- {"matrix": [4,7], "x":7.25, "y":4.25},
- {"matrix": [4,8], "x":8.25, "y":4.25},
- {"matrix": [4,9], "x":9.25, "y":4.25},
- {"matrix": [4,10], "x":10.25, "y":4.25},
- {"matrix": [4,11], "x":11.25, "y":4.25},
- {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
- {"matrix": [4,14], "x":14, "y":4.25},
- {"matrix": [4,16], "x":16.25, "y":4.25},
- {"matrix": [5,0], "x":0, "y":5.25, "w":1.25},
- {"matrix": [5,1], "x":1.25, "y":5.25, "w":1.25},
- {"matrix": [5,2], "x":2.5, "y":5.25, "w":1.25},
- {"matrix": [5,6], "x":3.75, "y":5.25, "w":6.25},
- {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
- {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
- {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
- {"matrix": [5,14], "x":13.75, "y":5.25, "w":1.25},
- {"matrix": [5,15], "x":15.25, "y":5.25},
- {"matrix": [5,16], "x":16.25, "y":5.25},
- {"matrix": [5,17], "x":17.25, "y":5.25}
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
+ {"label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0},
+ {"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 9.75, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 10.75, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 11.75, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 12.75, "y": 0},
+ {"label": "Print Screen", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "Pause", "matrix": [0, 17], "x": 17.25, "y": 0},
+
+ {"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "\\", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Delete", "matrix": [1, 14], "x": 14, "y": 1.25},
+ {"label": "Insert", "matrix": [1, 15], "x": 15.25, "y": 1.25},
+ {"label": "Home", "matrix": [1, 16], "x": 16.25, "y": 1.25},
+ {"label": "Page Up", "matrix": [1, 17], "x": 17.25, "y": 1.25},
+
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "Delete", "matrix": [2, 15], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [2, 16], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [2, 17], "x": 17.25, "y": 2.25},
+
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "#", "matrix": [3, 13], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 14], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "\u2298", "matrix": [4, 14], "x": 14, "y": 4.25},
+ {"label": "\u2191", "matrix": [4, 16], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "GUI", "matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Menu", "matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"label": "Ctrl", "matrix": [5, 14], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"label": "\u2190", "matrix": [5, 15], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 16], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 17], "x": 17.25, "y": 5.25}
]
}
}
-}
\ No newline at end of file
+}
diff --git a/keyboards/kibou/wendy/keymaps/default/keymap.c b/keyboards/kibou/wendy/keymaps/default/keymap.c
index f7618e9a0867..a5f630a2cd13 100644
--- a/keyboards/kibou/wendy/keymaps/default/keymap.c
+++ b/keyboards/kibou/wendy/keymaps/default/keymap.c
@@ -4,11 +4,12 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, KC_NO,
- KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_NO, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RIGHT)
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_NO,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_NO, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
};
diff --git a/keyboards/kibou/wendy/keymaps/via/keymap.c b/keyboards/kibou/wendy/keymaps/via/keymap.c
index f7618e9a0867..a5f630a2cd13 100644
--- a/keyboards/kibou/wendy/keymaps/via/keymap.c
+++ b/keyboards/kibou/wendy/keymaps/via/keymap.c
@@ -4,11 +4,12 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, KC_NO,
- KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_NO, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RIGHT)
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_NO,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_NO, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
};
diff --git a/keyboards/kibou/wendy/matrix_diagram.md b/keyboards/kibou/wendy/matrix_diagram.md
new file mode 100644
index 000000000000..042d1bff95c6
--- /dev/null
+++ b/keyboards/kibou/wendy/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Kibou Wendy
+
+```
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│00 ││01 │02 │03 │04 ││05 │06 │07 │08 ││0A │0B │0C │0D │ │0F │0G │0H │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E ││1F │1G │1H │ │?? │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ └─┬─────┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D ││2F │2G │2H │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘ ┌──┴┐3E │ ISO Enter
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │ │3D │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ └───┴────┘
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4E │ │4G │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
+│50 │51 │52 │56 │5A │5B │5C │5E ││5F │5G │5H │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌────────┐ ┌──────────┐
+│40 │ 2.25u LShift 2.75u RShift │4C │
+└────────┘ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│50 │51 │52 │56 │5B │5C │5E │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/kibou/winter/info.json b/keyboards/kibou/winter/info.json
index d4d8005aa3d7..47a359ec9b3c 100644
--- a/keyboards/kibou/winter/info.json
+++ b/keyboards/kibou/winter/info.json
@@ -26,8 +26,11 @@
"pid": "0xA003",
"vid": "0x586A"
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_tkl_ansi_wkl"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_tkl_ansi_wkl": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
diff --git a/keyboards/kibou/winter/keymaps/default/keymap.c b/keyboards/kibou/winter/keymaps/default/keymap.c
index ecaadeb89868..0837234be5f0 100644
--- a/keyboards/kibou/winter/keymaps/default/keymap.c
+++ b/keyboards/kibou/winter/keymaps/default/keymap.c
@@ -4,7 +4,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_tkl_ansi_wkl(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
diff --git a/keyboards/kibou/winter/keymaps/via/keymap.c b/keyboards/kibou/winter/keymaps/via/keymap.c
index ecaadeb89868..0837234be5f0 100644
--- a/keyboards/kibou/winter/keymaps/via/keymap.c
+++ b/keyboards/kibou/winter/keymaps/via/keymap.c
@@ -4,7 +4,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_tkl_ansi_wkl(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
diff --git a/keyboards/kj_modify/rs40/info.json b/keyboards/kj_modify/rs40/info.json
index 719f0e14dd5c..a869383bd7dd 100644
--- a/keyboards/kj_modify/rs40/info.json
+++ b/keyboards/kj_modify/rs40/info.json
@@ -17,7 +17,7 @@
"rows": ["B13", "A10", "B1", "B10"]
},
"processor": "STM32F401",
- "url": "https://www.aliexpress.com/store/911983021",
+ "url": "https://www.aliexpress.us/item/3256803963501165.html",
"usb": {
"device_version": "1.0.0",
"pid": "0x5253",
@@ -26,51 +26,51 @@
"layouts": {
"LAYOUT": {
"layout": [
- {"x": 0, "y": 0, "w": 1, "matrix": [0, 0], "label": "ESC"},
- {"x": 1, "y": 0, "w": 1, "matrix": [0, 1], "label": "Q"},
- {"x": 2, "y": 0, "w": 1, "matrix": [0, 2], "label": "W"},
- {"x": 3, "y": 0, "w": 1, "matrix": [0, 3], "label": "E"},
- {"x": 4, "y": 0, "w": 1, "matrix": [0, 4], "label": "R"},
- {"x": 5, "y": 0, "w": 1, "matrix": [0, 5], "label": "T"},
- {"x": 6, "y": 0, "w": 1, "matrix": [0, 6], "label": "Y"},
- {"x": 7, "y": 0, "w": 1, "matrix": [0, 7], "label": "U"},
- {"x": 8, "y": 0, "w": 1, "matrix": [0, 8], "label": "I"},
- {"x": 9, "y": 0, "w": 1, "matrix": [0, 9], "label": "O"},
- {"x": 10, "y": 0, "w": 1, "matrix": [0, 10], "label": "P"},
- {"x": 11, "y": 0, "w": 1, "matrix": [0, 11], "label": "BACKSPACE"},
+ {"matrix": [0, 0], "label": "ESC", "x": 0, "y": 0},
+ {"matrix": [0, 1], "label": "Q", "x": 1, "y": 0},
+ {"matrix": [0, 2], "label": "W", "x": 2, "y": 0},
+ {"matrix": [0, 3], "label": "E", "x": 3, "y": 0},
+ {"matrix": [0, 4], "label": "R", "x": 4, "y": 0},
+ {"matrix": [0, 5], "label": "T", "x": 5, "y": 0},
+ {"matrix": [0, 6], "label": "Y", "x": 6, "y": 0},
+ {"matrix": [0, 7], "label": "U", "x": 7, "y": 0},
+ {"matrix": [0, 8], "label": "I", "x": 8, "y": 0},
+ {"matrix": [0, 9], "label": "O", "x": 9, "y": 0},
+ {"matrix": [0, 10], "label": "P", "x": 10, "y": 0},
+ {"matrix": [0, 11], "label": "BACKSPACE", "x": 11, "y": 0},
- {"x": 0, "y": 1, "w": 1.25, "matrix": [1, 0], "label": "CAPSLOCK"},
- {"x": 1.25, "y": 1, "w": 1, "matrix": [1, 1], "label": "A"},
- {"x": 2.25, "y": 1, "w": 1, "matrix": [1, 2], "label": "S"},
- {"x": 3.25, "y": 1, "w": 1, "matrix": [1, 3], "label": "D"},
- {"x": 4.25, "y": 1, "w": 1, "matrix": [1, 4], "label": "F"},
- {"x": 5.25, "y": 1, "w": 1, "matrix": [1, 5], "label": "G"},
- {"x": 6.25, "y": 1, "w": 1, "matrix": [1, 6], "label": "H"},
- {"x": 7.25, "y": 1, "w": 1, "matrix": [1, 7], "label": "J"},
- {"x": 8.25, "y": 1, "w": 1, "matrix": [1, 8], "label": "K"},
- {"x": 9.25, "y": 1, "w": 1, "matrix": [1, 9], "label": "L"},
- {"x": 10.25, "y": 1, "w": 1.75, "matrix": [1, 11], "label": "ENTER"},
+ {"matrix": [1, 0], "label": "CAPSLOCK", "x": 0, "y": 1, "w": 1.25},
+ {"matrix": [1, 1], "label": "A", "x": 1.25, "y": 1},
+ {"matrix": [1, 2], "label": "S", "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "label": "D", "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "label": "F", "x": 4.25, "y": 1},
+ {"matrix": [1, 5], "label": "G", "x": 5.25, "y": 1},
+ {"matrix": [1, 6], "label": "H", "x": 6.25, "y": 1},
+ {"matrix": [1, 7], "label": "J", "x": 7.25, "y": 1},
+ {"matrix": [1, 8], "label": "K", "x": 8.25, "y": 1},
+ {"matrix": [1, 9], "label": "L", "x": 9.25, "y": 1},
+ {"matrix": [1, 11], "label": "ENTER", "x": 10.25, "y": 1, "w": 1.75},
- {"x": 0, "y": 2, "w": 1.75, "matrix": [2, 0], "label": "LSHIFT"},
- {"x": 1.75, "y": 2, "w": 1, "matrix": [2, 2], "label": "Z"},
- {"x": 2.75, "y": 2, "w": 1, "matrix": [2, 3], "label": "X"},
- {"x": 3.75, "y": 2, "w": 1, "matrix": [2, 4], "label": "C"},
- {"x": 4.75, "y": 2, "w": 1, "matrix": [2, 5], "label": "V"},
- {"x": 5.75, "y": 2, "w": 1, "matrix": [2, 6], "label": "B"},
- {"x": 6.75, "y": 2, "w": 1, "matrix": [2, 7], "label": "N"},
- {"x": 7.75, "y": 2, "w": 1, "matrix": [2, 8], "label": "M"},
- {"x": 8.75, "y": 2, "w": 1, "matrix": [2, 9], "label": "COMMA"},
- {"x": 9.75, "y": 2, "w": 1, "matrix": [2, 10], "label": "PERIOD"},
- {"x": 10.75, "y": 2, "w": 1.25, "matrix": [2, 11], "label": "RSHIFT"},
+ {"matrix": [2, 0], "label": "LSHIFT", "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "label": "Z", "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "label": "X", "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "label": "C", "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "label": "V", "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "label": "B", "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "label": "N", "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "label": "M", "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "label": "COMMA", "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "label": "PERIOD", "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "label": "RSHIFT", "x": 10.75, "y": 2, "w": 1.25},
- {"x": 1, "y": 3, "w": 1.25, "matrix": [3, 0], "label": "LCTRL"},
- {"x": 1.25, "y": 3, "w": 1, "matrix": [3, 1], "label": "FN2"},
- {"x": 2.25, "y": 3, "w": 1.25, "matrix": [3, 2], "label": "WIN"},
- {"x": 3.5, "y": 3, "w": 2.25, "matrix": [3, 4], "label": "SPACE"},
- {"x": 5.75, "y": 3, "w": 2.75, "matrix": [3, 7], "label": "FN"},
- {"x": 8.5, "y": 3, "w": 1.25, "matrix": [3, 9], "label": "SLASH"},
- {"x": 9.75, "y": 3, "w": 1, "matrix": [3, 10], "label": "SEMICOLON"},
- {"x": 10.75, "y": 3, "w": 1.25, "matrix": [3, 11], "label": "RCTRL"}
+ {"matrix": [3, 0], "label": "LCTRL", "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "label": "FN2", "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "label": "WIN", "x": 2.25, "y": 3, "w": 1.25},
+ {"matrix": [3, 4], "label": "SPACE", "x": 3.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 7], "label": "FN", "x": 5.75, "y": 3, "w": 2.75},
+ {"matrix": [3, 9], "label": "SLASH", "x": 8.5, "y": 3, "w": 1.25},
+ {"matrix": [3, 10], "label": "SEMICOLON", "x": 9.75, "y": 3},
+ {"matrix": [3, 11], "label": "RCTRL", "x": 10.75, "y": 3, "w": 1.25}
]
}
}
diff --git a/keyboards/kj_modify/rs40/readme.md b/keyboards/kj_modify/rs40/readme.md
index a5bcce2796ba..045df2b6223e 100644
--- a/keyboards/kj_modify/rs40/readme.md
+++ b/keyboards/kj_modify/rs40/readme.md
@@ -4,7 +4,7 @@ A compact 40% keyboard with 42 keys.
* Keyboard Maintainer: [Audite Marlow](https://github.com/auditemarlow)
* Hardware Supported: RS40 PCB
-* Hardware Availability: https://www.aliexpress.com/store/911983021
+* Hardware Availability: [KJ-Modify Store on AliExpress](https://www.aliexpress.us/item/3256803963501165.html)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/kopibeng/mnk60/info.json b/keyboards/kopibeng/mnk60/info.json
new file mode 100644
index 000000000000..430fc66c1bce
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/info.json
@@ -0,0 +1,928 @@
+{
+ "keyboard_name": "MNK60",
+ "manufacturer": "kopibeng",
+ "url": "https://monokei.co",
+ "maintainer": "kopibeng",
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0602",
+ "vid": "0x4B50"
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["C7", "F5", "F1", "F0", "C6", "B6", "B5", "B4", "D7", "D6", "D5", "D3", "D2", "D1"],
+ "rows": ["F7", "F4", "D0", "B3", "B7"]
+ },
+ "indicators": {
+ "caps_lock": "D4"
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "brightness_steps": 8,
+ "led_count": 14,
+ "max_brightness": 200,
+ "saturation_steps": 8,
+ "sleep": true
+ },
+ "ws2812": {
+ "pin": "F6"
+ },
+ "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [1, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_split_spacebar": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 2.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 1.25, "x": 6, "y": 4 },
+ { "matrix": [4, 8], "w": 2.75, "x": 7.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_split_spacebar_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [1, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 2.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 1.25, "x": 6, "y": 4 },
+ { "matrix": [4, 8], "w": 2.75, "x": 7.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "w": 1, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [1, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "w": 1, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [1, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_split_spacebar": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 2.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 1.25, "x": 6, "y": 4 },
+ { "matrix": [4, 8], "w": 2.75, "x": 7.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_split_spacebar_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [1, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 2.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 1.25, "x": 6, "y": 4 },
+ { "matrix": [4, 8], "w": 2.75, "x": 7.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "w": 1, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [1, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 1 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "w": 1, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [1, 13], "x": 14, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [2, 12], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 2.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 6], "w": 1.25, "x": 6, "y": 4 },
+ { "matrix": [4, 8], "w": 2.75, "x": 7.25, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/kopibeng/mnk60/keymaps/default/keymap.c b/keyboards/kopibeng/mnk60/keymaps/default/keymap.c
new file mode 100644
index 000000000000..844f338d193a
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2023 Samuel Lu
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [0] = LAYOUT_all(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, MO(2), KC_RALT, MO(1), KC_RCTL
+ ),
+
+ // Fn1 Layer
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
diff --git a/keyboards/kopibeng/mnk60/keymaps/via/keymap.c b/keyboards/kopibeng/mnk60/keymaps/via/keymap.c
new file mode 100644
index 000000000000..844f338d193a
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/keymaps/via/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2023 Samuel Lu
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [0] = LAYOUT_all(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, MO(2), KC_RALT, MO(1), KC_RCTL
+ ),
+
+ // Fn1 Layer
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
diff --git a/keyboards/kopibeng/mnk60/keymaps/via/rules.mk b/keyboards/kopibeng/mnk60/keymaps/via/rules.mk
new file mode 100644
index 000000000000..43061db1dd46
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/kopibeng/mnk60/readme.md b/keyboards/kopibeng/mnk60/readme.md
new file mode 100644
index 000000000000..70a382f5de23
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/readme.md
@@ -0,0 +1,26 @@
+# MNK60
+
+![MNK60](https://i.imgur.com/n1arBEh.png)
+
+A QMK-powered, VIA-enabled universal 60% PCB with support for ANSI/ISO layouts, split Backspace, split Right Shift, stepped Caps Lock, 6.25U/7U bottom row, split Spacebar and RGB underglow.
+
+* Keyboard Maintainer: [kopibeng](https://github.com/kopibeng)
+* Hardware Supported: KEI
+* Hardware Availability: [MONOKEI](https://monokei.co)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kopibeng/mnk60:default
+
+Flashing example for this keyboard:
+
+ make kopibeng/mnk60:default:flash
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+* Physical reset button: Press the RESET switch on top side of PCB.
+* Bootmagic reset: Unplug keyboard, hold down ESC key and plug in the keyboard.
+* Keycode reset: Press the `QK_BOOT` keycode (default: MO(1) + R keys) in layout if available.
\ No newline at end of file
diff --git a/keyboards/kopibeng/mnk60/rules.mk b/keyboards/kopibeng/mnk60/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/kopibeng/mnk60/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/kopibeng/xt87/chconf.h b/keyboards/kopibeng/xt87/chconf.h
new file mode 100644
index 000000000000..4cb041153f1c
--- /dev/null
+++ b/keyboards/kopibeng/xt87/chconf.h
@@ -0,0 +1,31 @@
+/* Copyright 2023 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/kopibeng/xt8x/chconf.h -r platforms/chibios/common/configs/chconf.h`
+ */
+
+#pragma once
+
+#define CH_CFG_ST_FREQUENCY 10000
+
+#define CH_CFG_OPTIMIZE_SPEED FALSE
+
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+
+#include_next
+
diff --git a/keyboards/kopibeng/xt87/info.json b/keyboards/kopibeng/xt87/info.json
new file mode 100644
index 000000000000..8447d40815c5
--- /dev/null
+++ b/keyboards/kopibeng/xt87/info.json
@@ -0,0 +1,886 @@
+{
+ "keyboard_name": "XT87",
+ "manufacturer": "kopibeng",
+ "url": "https://monokei.co/",
+ "maintainer": "kopibeng",
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x8700",
+ "vid": "0x4B50"
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["A2", "A1", "A0", "B11", "B10", "B2", "F1", "B1", "B0", "A7", "A6", "A5", "F0", "A4", "C15", "C14", "C13"],
+ "rows": ["A8", "B15", "A9", "B12", "A3", "B14"]
+ },
+ "indicators": {
+ "caps_lock": "B3",
+ "scroll_lock": "A15"
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "brightness_steps": 8,
+ "led_count": 19,
+ "max_brightness": 200,
+ "saturation_steps": 8,
+ "sleep": true
+ },
+ "ws2812": {
+ "pin": "A10"
+ },
+ "community_layouts": ["tkl_ansi", "tkl_ansi_split_bs_rshift", "tkl_ansi_tsangan", "tkl_ansi_tsangan_split_bs_rshift", "tkl_iso", "tkl_iso_split_bs_rshift", "tkl_iso_tsangan", "tkl_iso_tsangan_split_bs_rshift"],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [2, 12], "x": 13, "y": 1.25 },
+ { "matrix": [1, 13], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [2, 12], "x": 13, "y": 1.25 },
+ { "matrix": [1, 13], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1, "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [2, 12], "x": 13, "y": 1.25 },
+ { "matrix": [1, 13], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1, "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_iso_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [2, 12], "x": 13, "y": 1.25 },
+ { "matrix": [1, 13], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_iso_tsangan": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1, "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "matrix": [0, 13], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "matrix": [2, 12], "x": 13, "y": 1.25 },
+ { "matrix": [1, 13], "x": 14, "y": 1.25 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.25 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.25 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1.25 },
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "matrix": [3, 12], "x": 12.5, "y": 2.25 },
+ { "h": 2, "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2.25 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.25 },
+ { "matrix": [4, 2], "x": 2.25, "y": 4.25 },
+ { "matrix": [4, 3], "x": 3.25, "y": 4.25 },
+ { "matrix": [4, 4], "x": 4.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 11], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 13], "x": 14, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "w": 1, "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "w": 1, "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "w": 1.5, "x": 13.5, "y": 5.25 },
+ { "matrix": [5, 14], "x": 15.25, "y": 5.25 },
+ { "matrix": [5, 15], "x": 16.25, "y": 5.25 },
+ { "matrix": [4, 16], "x": 17.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/kopibeng/xt87/keymaps/default/keymap.c b/keyboards/kopibeng/xt87/keymaps/default/keymap.c
new file mode 100644
index 000000000000..d963941d8084
--- /dev/null
+++ b/keyboards/kopibeng/xt87/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2023 Samuel Lu
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ // Fn1 Layer
+ [1] = LAYOUT_all(
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
diff --git a/keyboards/kopibeng/xt87/keymaps/via/keymap.c b/keyboards/kopibeng/xt87/keymaps/via/keymap.c
new file mode 100644
index 000000000000..d963941d8084
--- /dev/null
+++ b/keyboards/kopibeng/xt87/keymaps/via/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2023 Samuel Lu
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ // Fn1 Layer
+ [1] = LAYOUT_all(
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
diff --git a/keyboards/kopibeng/xt87/keymaps/via/rules.mk b/keyboards/kopibeng/xt87/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/kopibeng/xt87/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/kopibeng/xt87/readme.md b/keyboards/kopibeng/xt87/readme.md
new file mode 100644
index 000000000000..4e6db529b5d7
--- /dev/null
+++ b/keyboards/kopibeng/xt87/readme.md
@@ -0,0 +1,25 @@
+# XT87
+
+![XT87](https://i.imgur.com/N1QaXPTh.jpg)
+
+A QMK-powered, VIA-enabled F12 TKL PCB with support for ANSI/ISO layout, split Backspace, split Right Shift and 6.25U/7U bottom row.
+
+* Keyboard Maintainer: [kopibeng](https://github.com/kopibeng)
+* Hardware Supported: A TKL keyboard with STM32F072
+* Hardware Availability: [MONOKEI](https://monokei.co)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kopibeng/xt87:default
+
+Flashing example for this keyboard:
+
+ make kopibeng/xt87:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+* Physical reset button: Press the RESET switch on top side of PCB.
+* Bootmagic reset: Unplug keyboard, hold down ESC key and plug in the keyboard.
+* Keycode reset: Press the `QK_BOOT` keycode (default: MO(1) + R keys) in layout if available.
diff --git a/keyboards/kopibeng/xt87/rules.mk b/keyboards/kopibeng/xt87/rules.mk
new file mode 100644
index 000000000000..a92b0993283e
--- /dev/null
+++ b/keyboards/kopibeng/xt87/rules.mk
@@ -0,0 +1,2 @@
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
index e8f6fac1201d..ca8a4c6ab4ef 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
@@ -5,6 +5,9 @@
#define LAYER_STATE_8BIT
+#define TURBO_ENABLE
+#define HOLD_ON_OTHER_KEY_PRESS
+
// RGB Matrix effects disable
#ifdef RGB_MATRIX_ENABLE
# define UNDERGLOW_DISABLE
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
index ef7cfab5fe20..3d5bcade20f6 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
@@ -50,6 +50,26 @@ void dynamic_macro_record_end_user(int8_t direction) {
#define MCR_SWT KC_NO
#endif // DYNAMIC_MACRO_ENABLE
+#ifdef TURBO_ENABLE
+static bool turbo_active = false; // Only changed by TRBO_ST
+static uint16_t turbo_keycode = KC_NO; // turbo_active can't be true if this is KC_NO
+static bool turbo_key_pressed = false;
+static bool turbo_keycode_selecting = false; // Determine new keycode or delay mode switch
+static bool turbo_ms_delay_direction = true; // True is raise the delay, false is lower it
+static uint16_t turbo_ms_delay_direction_indicator = 0;
+static uint16_t turbo_ms_delay = 100; // Start at sending keycodes 10 times a second
+static uint16_t turbo_timer; // Changed semi automatically
+/*
+ * Because the KC's are wrapped in `LT()` they won't be interpreted as KC_NO or KC_TRNS
+ * Instead they'll just be like any other custom KC which will let me use them how I want
+*/
+#define TRBO_ST LT(_CTR, KC_NO )
+#define TRBO_TI LT(_CTR, KC_TRNS)
+#else
+#define TRBO_ST KC_NO
+#define TRBO_TI KC_NO
+#endif
+
const uint16_t PROGMEM keymaps[_END][MATRIX_ROWS][MATRIX_COLS] = {
[_MAIN] = LAYOUT_planck_mit(
KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC,
@@ -67,7 +87,7 @@ const uint16_t PROGMEM keymaps[_END][MATRIX_ROWS][MATRIX_COLS] = {
XXXXXXX, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, XXXXXXX, XXXXXXX, KC_VOLU, XXXXXXX, XXXXXXX, MCR_REC,
XXXXXXX, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, MCR_PLY,
XXXXXXX, XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, XXXXXXX, XXXXXXX, MCR_SWT,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TOG_MSE, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ XXXXXXX, XXXXXXX, XXXXXXX, TRBO_TI, TRBO_ST, TOG_MSE, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
)
#ifdef MOUSEKEY_ENABLE
,[_MSE] = LAYOUT_planck_mit(
@@ -117,12 +137,68 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
if (RECORDING) { RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, 0, 0); }
break;
#endif // DYNAMIC_MACRO_ENABLE
+
+ #ifdef TURBO_ENABLE
+ case TRBO_ST:
+ if (turbo_keycode_selecting) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
+ } else {
+ if (turbo_active) {
+ if (turbo_key_pressed) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
+ } else {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, 0, 0);
+ }
+ }
+ }
+ break;
+
+ case TRBO_TI:
+ if (turbo_ms_delay_direction_indicator != 0) {
+ uint8_t time = timer_elapsed(turbo_ms_delay_direction_indicator) / 200;
+ if (time > 0) {
+ if ((time % 2) == 1) {
+ if (turbo_ms_delay_direction) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, BRIGHTNESS, 0);
+ } else {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, 0, 0);
+ }
+ } else {
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, 0, 0);
+ }
+ if (time >= 6) {
+ turbo_ms_delay_direction_indicator = 0;
+ }
+ }
+ }
+ break;
+ #endif
+
}
}
return false;
}
#endif
+#ifdef TURBO_ENABLE
+void housekeeping_task_user(void) {
+ if (turbo_active) {
+ if (turbo_key_pressed) {
+ if (timer_elapsed(turbo_timer) > turbo_ms_delay) {
+ unregister_code(turbo_keycode);
+ turbo_key_pressed = false;
+ turbo_timer = timer_read();
+ }
+ } else {
+ if (timer_elapsed(turbo_timer) > (turbo_ms_delay / 2)) {
+ register_code(turbo_keycode);
+ turbo_key_pressed = true;
+ }
+ }
+ }
+}
+#endif
+
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef DYNAMIC_MACRO_ENABLE
if (keycode == MCR_REC) {keycode = REC;}
@@ -145,6 +221,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
#endif // MOUSEKEY_ENABLE
+ #ifdef TURBO_ENABLE
+ if (record->event.pressed) {
+ if (turbo_keycode_selecting) {
+ if (IS_BASIC_KEYCODE(keycode) ||
+ IS_MODIFIER_KEYCODE(keycode) ||
+ IS_JOYSTICK_KEYCODE(keycode) ||
+ IS_MOUSE_KEYCODE(keycode))
+ {
+ unregister_code(turbo_keycode);
+ turbo_key_pressed = false;
+ turbo_keycode = keycode;
+ turbo_keycode_selecting = false;
+ }
+ }
+ }
+ #endif
+
switch (keycode) {
#ifdef DYNAMIC_MACRO_ENABLE
case MCR_SWT:
@@ -162,6 +255,46 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return false;
#endif // DYNAMIC_MACRO_ENABLE
+ #ifdef TURBO_ENABLE
+ case TRBO_ST:
+ if (record->event.pressed) {
+ if (!record->tap.count) {
+ turbo_keycode_selecting = !turbo_keycode_selecting;
+ } else {
+ if (turbo_keycode != KC_NO) {
+ if (!turbo_active) {
+ turbo_keycode_selecting = false;
+ turbo_active = true;
+ } else {
+ unregister_code(turbo_keycode);
+ turbo_key_pressed = false;
+ turbo_active = false;
+ }
+ }
+ }
+ }
+ return false;
+
+ case TRBO_TI:
+ if (record->event.pressed) {
+ if (!record->tap.count) {
+ turbo_ms_delay_direction = !turbo_ms_delay_direction;
+ turbo_ms_delay_direction_indicator = timer_read();
+ } else {
+ if (turbo_ms_delay_direction)
+ turbo_ms_delay += 20;
+ else
+ turbo_ms_delay -= 20;
+
+ if (turbo_ms_delay > 500) // half a second
+ turbo_ms_delay = 500;
+ if (turbo_ms_delay < 60) // Around 16 times a second
+ turbo_ms_delay = 60;
+ }
+ }
+ return false;
+ #endif
+
default:
return true; //Process all other keycodes normally
}
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md
index 2798567b5ec1..980f559d71ff 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md
@@ -21,12 +21,12 @@ The secondary layer ( `_SUB` ) is for syntax, F keys, and number keys
| 4 | _ | _ | | _ | _ | _ | <- | _ | | | | |
The control layer ( `_CTR` ) is for lighting, media, and macros
-| row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
-|-----|---|-------|------|-------|------|---------|-----|------|------|------|----|---------|
-| 1 | | SPD- | BRI+ | SPD+ | HUE+ | SAT+ | | | VOL+ | | | MCR_REC |
-| 2 | | EFCT- | BRI- | EFCT+ | HUE- | SAT- | | PREV | PLAY | NEXT | | MCR_PLY |
-| 3 | | | TOG | | | | | | VOL- | | | MCR_SWT |
-| 4 | | | | | | MSE_TOG | <- | | | | | |
+| row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
+|-----|---|-------|------|---------|---------|---------|-----|------|------|------|----|---------|
+| 1 | | SPD- | BRI+ | SPD+ | HUE+ | SAT+ | | | VOL+ | | | MCR_REC |
+| 2 | | EFCT- | BRI- | EFCT+ | HUE- | SAT- | | PREV | PLAY | NEXT | | MCR_PLY |
+| 3 | | | TOG | | | | | | VOL- | | | MCR_SWT |
+| 4 | | | | TRBO_TI | TRBO_ST | MSE_TOG | <- | | | | | |
The mouse layer ( `_MSE` ) is for making the keyboard function as a mouse as well
| row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
@@ -67,6 +67,8 @@ The mouse layer ( `_MSE` ) is for making the keyboard function as a mouse as wel
| SCR_D | Mouse scroll down |
| ACL_U | Raise mouse/scroll speed |
| ACL_D | Lower mouse/scroll speed |
+| TRBO_ST | Set turbo key (Hold), start/stop turbo (Tap) |
+| TRBO_TI | Turbo speed +/- (Hold to switch direction) |
## Compiling
diff --git a/keyboards/mode/m75h/m75h.c b/keyboards/kradoindustries/kousa/config.h
similarity index 81%
rename from keyboards/mode/m75h/m75h.c
rename to keyboards/kradoindustries/kousa/config.h
index 2f2bfbfa4bf4..49c8b4798637 100644
--- a/keyboards/mode/m75h/m75h.c
+++ b/keyboards/kradoindustries/kousa/config.h
@@ -1,5 +1,5 @@
/*
- Copyright 2020 Álvaro "Gondolindrim" Volpato
+Copyright 2023 Matt F
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
-#include "quantum.h"
+#pragma once
-void board_init(void) {
- setPinInput(B10);
-}
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
diff --git a/keyboards/kradoindustries/kousa/info.json b/keyboards/kradoindustries/kousa/info.json
new file mode 100644
index 000000000000..196e863bf5cf
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/info.json
@@ -0,0 +1,158 @@
+{
+ "keyboard_name": "Kousa-TKL",
+ "manufacturer": "Krado Industries",
+ "url": "https://www.kradoindustries.com/",
+ "maintainer": "Krado Industries",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "vid": "0x4B72",
+ "pid": "0x4B4F",
+ "device_version": "1.0.0"
+ },
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "encoder": true,
+ "rgblight": true
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "GP10", "pin_b": "GP9" }
+ ]
+ },
+ "ws2812": {
+ "pin": "GP4",
+ "driver": "vendor"
+ },
+ "rgblight": {
+ "led_count": 18,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+
+
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP20", "GP21", "GP14", "GP15", "GP16", "GP17", "GP18", "GP13", "GP0", "GP1", "GP3"],
+ "rows": [ "GP2", "GP29", "GP28", "GP19", "GP12", "GP11"]
+ },
+
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 1], "x":1.25, "y":0},
+ {"matrix": [0, 2], "x":2.25, "y":0},
+ {"matrix": [0, 3], "x":3.25, "y":0},
+ {"matrix": [0, 4], "x":4.25, "y":0},
+ {"matrix": [0, 5], "x":5.5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.75, "y":0},
+ {"matrix": [0, 10], "x":10.75, "y":0},
+ {"matrix": [0, 11], "x":11.75, "y":0},
+ {"matrix": [0, 12], "x":12.75, "y":0},
+ {"matrix": [0, 13], "x":14, "y":0},
+ {"matrix": [0, 14], "x":15.25, "y":0},
+ {"matrix": [0, 15], "x":16.25, "y":0},
+ {"matrix": [0, 16], "x":17.25, "y":0},
+ {"matrix": [1, 0], "x":0, "y":1.25, "w":1.5},
+ {"matrix": [1, 1], "x":1.5, "y":1.25},
+ {"matrix": [1, 2], "x":2.5, "y":1.25},
+ {"matrix": [1, 3], "x":3.5, "y":1.25},
+ {"matrix": [1, 4], "x":4.5, "y":1.25},
+ {"matrix": [1, 5], "x":5.5, "y":1.25},
+ {"matrix": [1, 6], "x":6.5, "y":1.25},
+ {"matrix": [1, 7], "x":7.5, "y":1.25},
+ {"matrix": [1, 8], "x":8.5, "y":1.25},
+ {"matrix": [1, 9], "x":9.5, "y":1.25},
+ {"matrix": [1, 10], "x":10.5, "y":1.25},
+ {"matrix": [1, 11], "x":11.5, "y":1.25},
+ {"matrix": [1, 12], "x":12.5, "y":1.25},
+ {"matrix": [1, 13], "x":13.5, "y":1.25, "w":1.5},
+ {"matrix": [1, 14], "x":15.25, "y":1.25},
+ {"matrix": [1, 15], "x":16.25, "y":1.25},
+ {"matrix": [1, 16], "x":17.25, "y":1.25},
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2, 10], "x":10.5, "y":2.25},
+ {"matrix": [2, 11], "x":11.5, "y":2.25},
+ {"matrix": [2, 12], "x":12.5, "y":2.25},
+ {"matrix": [2, 13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2, 14], "x":15.25, "y":2.25},
+ {"matrix": [2, 15], "x":16.25, "y":2.25},
+ {"matrix": [2, 16], "x":17.25, "y":2.25},
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.5},
+ {"matrix": [3, 1], "x":1.5, "y":3.25},
+ {"matrix": [3, 2], "x":2.5, "y":3.25},
+ {"matrix": [3, 3], "x":3.5, "y":3.25},
+ {"matrix": [3, 4], "x":4.5, "y":3.25},
+ {"matrix": [3, 5], "x":5.5, "y":3.25},
+ {"matrix": [3, 6], "x":6.5, "y":3.25},
+ {"matrix": [3, 7], "x":7.5, "y":3.25},
+ {"matrix": [3, 8], "x":8.5, "y":3.25},
+ {"matrix": [3, 9], "x":9.5, "y":3.25},
+ {"matrix": [3, 10], "x":10.5, "y":3.25},
+ {"matrix": [3, 11], "x":11.5, "y":3.25},
+ {"matrix": [3, 12], "x":12.5, "y":3.25},
+ {"matrix": [3, 13], "x":13.5, "y":3.25, "w":1.5},
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.5},
+ {"matrix": [4, 1], "x":1.5, "y":4.25},
+ {"matrix": [4, 2], "x":2.5, "y":4.25},
+ {"matrix": [4, 3], "x":3.5, "y":4.25},
+ {"matrix": [4, 4], "x":4.5, "y":4.25},
+ {"matrix": [4, 5], "x":5.5, "y":4.25},
+ {"matrix": [4, 6], "x":6.5, "y":4.25},
+ {"matrix": [4, 7], "x":7.5, "y":4.25},
+ {"matrix": [4, 8], "x":8.5, "y":4.25},
+ {"matrix": [4, 9], "x":9.5, "y":4.25},
+ {"matrix": [4, 10], "x":10.5, "y":4.25},
+ {"matrix": [4, 11], "x":11.5, "y":4.25},
+ {"matrix": [4, 12], "x":12.5, "y":4.25},
+ {"matrix": [4, 13], "x":13.5, "y":4.25, "w":1.5},
+ {"matrix": [4, 15], "x":16.25, "y":4.25},
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25},
+ {"matrix": [5, 3], "x":3.5, "y":5.25},
+ {"matrix": [5, 4], "x":4.5, "y":5.25},
+ {"matrix": [5, 5], "x":5.5, "y":5.25},
+ {"matrix": [5, 6], "x":6.5, "y":5.25, "w":2},
+ {"matrix": [5, 8], "x":8.5, "y":5.25},
+ {"matrix": [5, 9], "x":9.5, "y":5.25},
+ {"matrix": [5, 10], "x":10.5, "y":5.25},
+ {"matrix": [5, 11], "x":11.5, "y":5.25},
+ {"matrix": [5, 12], "x":12.5, "y":5.25},
+ {"matrix": [5, 13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 14], "x":15.25, "y":5.25},
+ {"matrix": [5, 15], "x":16.25, "y":5.25},
+ {"matrix": [5, 16], "x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/kradoindustries/kousa/keymaps/default/keymap.c b/keyboards/kradoindustries/kousa/keymaps/default/keymap.c
new file mode 100644
index 000000000000..48978b2a2ba2
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/keymaps/default/keymap.c
@@ -0,0 +1,111 @@
+/*
+Copyright 2023 Matt F
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+
+#define _FN MO(3)
+#define FN_BACK LT(3, KC_BSPC)
+#define ZOOMIN C(KC_EQL)
+#define ZOOMOUT C(KC_MINS)
+#define NTAB C(KC_TAB)
+#define BTAB C(S(KC_TAB))
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+
+ /* Base Layer
+
+
+* --------- .-----------------------------------. .-----------------------------------. .-----------------------------------. --------. .--------------------------.
+ * | ESC | | F1 | F2 | F3 | F4 | | F5 | F6 | F7 | F8 | | F9 | F10 | F11 | F12 | | F13 | | PrintSC| ScrlLk | Pause |
+ * | | | | | | | | | | | | | | | | | | | | | | |
+ * '-------+ '--------+--------+--------+--------' '--------+--------+--------+--------' '--------+--------+--------+--------' '-------+ '--------+--------+--------'
+
+ * .-----------------------------------------------------------------------------------------------------------------------------------. .--------------------------.
+ * | Grave | 1 | 2 | 3 | 4 | 5 | - | = | 6 | 7 | 8 | 9 | 0 | Backspace | | Ins | Home | PageUp |
+ * | | | | | | | | | | | | | | | | | | |
+ * |-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------| |--------+--------+--------|
+ * | Tab | Q | W | E | R | T | | | Y | U | I | O | P | Del | | Del | End |PageDown|
+ * | | | | | | | | | | | | | | | | | | |
+ * |-----------+--------+--------+--------+--------+--------| [ | ] |--------+--------+--------+-----------------+-----------| '--------+--------+--------'
+ * | FN_BACK | A | S | D | F | G |--------+--------| H | J | K | L | " | Enter |
+ * | | | | | | | | | | | | | ' | |
+ * |-----------+--------+--------+--------+--------+--------| Prev | Next |--------+--------+--------------------------+-----------| .--------.
+ * | LShift | Z | X | C | V | B | Tab | Tab | N | M | < | > | ? | RShift | | Up |
+ * | | | | | | | | | | | , | . | / | | | |
+ * |-----------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+-----------| .--------+--------+--------.
+ * | LCtrl | LGUI | LALT | FN | Space | Space | Space | Space | Space | Space | RALT | RGUI | RCTRL | | Left | Down | Right |
+ * | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------------------------------' '--------+--------+--------'
+ */
+
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_DEL, KC_END, KC_PGDN,
+ FN_BACK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, BTAB, NTAB, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT( /* Layer One */
+
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGUP, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+
+ [2] = LAYOUT( /* Layer Two */
+
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, ZOOMIN, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_DEL, KC_END, KC_PGDN,
+ FN_BACK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ZOOMOUT, KC_LBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [3] = LAYOUT( /* Layer Three */
+
+ KC_ESC, DF(0), DF(1), DF(2), KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, QK_BOOT,
+
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(0), RGB_MOD,
+ KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(1), RGB_RMOD,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SCLN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLU, KC_VOLD, KC_BSLS, KC_CAPS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN) },
+ [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [3] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }
+};
+#endif
diff --git a/keyboards/kradoindustries/kousa/keymaps/default/rules.mk b/keyboards/kradoindustries/kousa/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/kradoindustries/kousa/keymaps/via/keymap.c b/keyboards/kradoindustries/kousa/keymaps/via/keymap.c
new file mode 100644
index 000000000000..48978b2a2ba2
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/keymaps/via/keymap.c
@@ -0,0 +1,111 @@
+/*
+Copyright 2023 Matt F
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+
+#define _FN MO(3)
+#define FN_BACK LT(3, KC_BSPC)
+#define ZOOMIN C(KC_EQL)
+#define ZOOMOUT C(KC_MINS)
+#define NTAB C(KC_TAB)
+#define BTAB C(S(KC_TAB))
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+
+ /* Base Layer
+
+
+* --------- .-----------------------------------. .-----------------------------------. .-----------------------------------. --------. .--------------------------.
+ * | ESC | | F1 | F2 | F3 | F4 | | F5 | F6 | F7 | F8 | | F9 | F10 | F11 | F12 | | F13 | | PrintSC| ScrlLk | Pause |
+ * | | | | | | | | | | | | | | | | | | | | | | |
+ * '-------+ '--------+--------+--------+--------' '--------+--------+--------+--------' '--------+--------+--------+--------' '-------+ '--------+--------+--------'
+
+ * .-----------------------------------------------------------------------------------------------------------------------------------. .--------------------------.
+ * | Grave | 1 | 2 | 3 | 4 | 5 | - | = | 6 | 7 | 8 | 9 | 0 | Backspace | | Ins | Home | PageUp |
+ * | | | | | | | | | | | | | | | | | | |
+ * |-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------| |--------+--------+--------|
+ * | Tab | Q | W | E | R | T | | | Y | U | I | O | P | Del | | Del | End |PageDown|
+ * | | | | | | | | | | | | | | | | | | |
+ * |-----------+--------+--------+--------+--------+--------| [ | ] |--------+--------+--------+-----------------+-----------| '--------+--------+--------'
+ * | FN_BACK | A | S | D | F | G |--------+--------| H | J | K | L | " | Enter |
+ * | | | | | | | | | | | | | ' | |
+ * |-----------+--------+--------+--------+--------+--------| Prev | Next |--------+--------+--------------------------+-----------| .--------.
+ * | LShift | Z | X | C | V | B | Tab | Tab | N | M | < | > | ? | RShift | | Up |
+ * | | | | | | | | | | | , | . | / | | | |
+ * |-----------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+-----------| .--------+--------+--------.
+ * | LCtrl | LGUI | LALT | FN | Space | Space | Space | Space | Space | Space | RALT | RGUI | RCTRL | | Left | Down | Right |
+ * | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------------------------------' '--------+--------+--------'
+ */
+
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_DEL, KC_END, KC_PGDN,
+ FN_BACK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, BTAB, NTAB, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT( /* Layer One */
+
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGUP, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+
+ [2] = LAYOUT( /* Layer Two */
+
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, ZOOMIN, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_DEL, KC_END, KC_PGDN,
+ FN_BACK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ZOOMOUT, KC_LBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, _FN, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, _FN, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [3] = LAYOUT( /* Layer Three */
+
+ KC_ESC, DF(0), DF(1), DF(2), KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, QK_BOOT,
+
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(0), RGB_MOD,
+ KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(1), RGB_RMOD,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SCLN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLU, KC_VOLD, KC_BSLS, KC_CAPS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN) },
+ [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [3] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) }
+};
+#endif
diff --git a/keyboards/kradoindustries/kousa/keymaps/via/rules.mk b/keyboards/kradoindustries/kousa/keymaps/via/rules.mk
new file mode 100644
index 000000000000..aaf0497be139
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/kradoindustries/kousa/readme.md b/keyboards/kradoindustries/kousa/readme.md
new file mode 100644
index 000000000000..b9a50a93c93a
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/readme.md
@@ -0,0 +1,32 @@
+# Kousa TKL
+
+![Photo](https://i.imgur.com/b2JJoiIh.jpg)
+
+A hotswap H88-Compact Type-C compatible ortholinear TKL PCB that uses ergodox modifiers. Based on the [Boardwalk](https://github.com/qmk/qmk_firmware/tree/master/keyboards/boardwalk)'s split hand layout, with the addtion of 6u and split 3u spacebar stabilizer support. F13 and F12 layouts are supported. The F13 location also supports a rotary encoder. The default layout will have 1.5u vertical inner modifiers, but it is possible to convert the center keys to 1u by soldering hotswap sockets. The board is designed to be compatible with H88-C type C boards and the outline of the board was based on zykrah's [slime88 pcb](https://github.com/zykrah/slime88). The usb C port can be broken off and used with a JST connector and daughterboard.
+
+The name is meant to be read "Kousa Tenkeyless". "Kousaten" (交差点) means intersection or crossing in Japanese. I wanted the name to be a nod to the Boardwalk without using u/shensmobile's naming conventions and Crosswalk seemed pretty close, but then I realized "crossing" in Japanese is "kousaten" and I thought it would call it the Kousa Tenkeyless!
+
+* Keyboard Maintainer: [Feags](https://github.com/Feags) / [Krado Industries](https://kradoindustries.com/)
+* Hardware Supported: H88-C type C cases. Confirmed working in KFA Freebird TKL. Also confirmed working in KBDFans Tiger80 Lite. *Please note that you will need a custom plate for any case.*
+* Hardware Availabilitiy: [Krado Industries](https://kradoindustries.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kradoindustries/kousa:default
+
+Flashing example for this keyboard:
+
+ make kradoindustries/kousa:default:flash
+
+
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/kradoindustries/kousa/rules.mk b/keyboards/kradoindustries/kousa/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/kradoindustries/kousa/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/kradoindustries/krado66/info.json b/keyboards/kradoindustries/krado66/info.json
new file mode 100644
index 000000000000..aefadf12de1b
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/info.json
@@ -0,0 +1,130 @@
+{
+ "keyboard_name": "Krado66",
+ "manufacturer": "Krado Industries",
+ "url": "https://www.kradoindustries.com/",
+ "maintainer": "Krado Industries",
+ "usb": {
+ "vid": "0x4B72",
+ "pid": "0x6664",
+ "device_version": "2.0.0"
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "encoder": true,
+ "rgblight": true
+ },
+ "ws2812": {
+ "pin": "B2"
+ },
+ "rgblight": {
+ "led_count": 14,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "B1", "pin_b": "B0" },
+ { "pin_a": "D7", "pin_b": "D6" },
+ { "pin_a": "F7", "pin_b": "F6" }
+ ]
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": [ "C7", "B3", "D0", "D1", "D2", "D3", "D5", "D4"],
+ "rows": [ "F5", "F4", "F1", "F0", "B7", "E6", "B4", "B5", "C6", "B6" ]
+ },
+
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x":0.25, "y":0},
+ {"matrix": [1, 0], "x":1.25, "y":0},
+ {"matrix": [0, 1], "x":2.25, "y":0},
+ {"matrix": [1, 1], "x":3.25, "y":0},
+ {"matrix": [0, 2], "x":4.25, "y":0},
+ {"matrix": [1, 2], "x":5.25, "y":0},
+ {"matrix": [0, 3], "x":6.25, "y":0},
+ {"matrix": [1, 3], "x":7.25, "y":0},
+ {"matrix": [0, 4], "x":8.25, "y":0},
+ {"matrix": [1, 4], "x":9.25, "y":0},
+ {"matrix": [0, 5], "x":10.25, "y":0},
+ {"matrix": [1, 5], "x":11.25, "y":0},
+ {"matrix": [0, 6], "x":12.25, "y":0},
+ {"matrix": [1, 6], "x":13.25, "y":0},
+ {"matrix": [0, 7], "x":14.25, "y":0},
+ {"matrix": [1, 7], "x":15.25, "y":0},
+ {"matrix": [3, 0], "x":0.75, "y":1, "w":1.5},
+ {"matrix": [2, 1], "x":2.25, "y":1},
+ {"matrix": [3, 1], "x":3.25, "y":1},
+ {"matrix": [2, 2], "x":4.25, "y":1},
+ {"matrix": [3, 2], "x":5.25, "y":1},
+ {"matrix": [2, 3], "x":6.25, "y":1},
+ {"matrix": [3, 3], "x":7.25, "y":1},
+ {"matrix": [2, 4], "x":8.25, "y":1},
+ {"matrix": [3, 4], "x":9.25, "y":1},
+ {"matrix": [2, 5], "x":10.25, "y":1},
+ {"matrix": [3, 5], "x":11.25, "y":1},
+ {"matrix": [2, 6], "x":12.25, "y":1},
+ {"matrix": [3, 6], "x":13.25, "y":1},
+ {"matrix": [2, 7], "x":14.25, "y":1, "w":1.5},
+ {"matrix": [5, 0], "x":0.5, "y":2, "w":1.75},
+ {"matrix": [4, 1], "x":2.25, "y":2},
+ {"matrix": [5, 1], "x":3.25, "y":2},
+ {"matrix": [4, 2], "x":4.25, "y":2},
+ {"matrix": [5, 2], "x":5.25, "y":2},
+ {"matrix": [4, 3], "x":6.25, "y":2},
+ {"matrix": [5, 3], "x":7.25, "y":2},
+ {"matrix": [4, 4], "x":8.25, "y":2},
+ {"matrix": [5, 4], "x":9.25, "y":2},
+ {"matrix": [4, 5], "x":10.25, "y":2},
+ {"matrix": [5, 5], "x":11.25, "y":2},
+ {"matrix": [4, 6], "x":12.25, "y":2},
+ {"matrix": [5, 6], "x":13.25, "y":2, "w":2.25},
+ {"matrix": [7, 0], "x":0, "y":3, "w":2.25},
+ {"matrix": [6, 1], "x":2.25, "y":3},
+ {"matrix": [7, 1], "x":3.25, "y":3},
+ {"matrix": [6, 2], "x":4.25, "y":3},
+ {"matrix": [7, 2], "x":5.25, "y":3},
+ {"matrix": [6, 3], "x":6.25, "y":3},
+ {"matrix": [7, 3], "x":7.25, "y":3},
+ {"matrix": [6, 4], "x":8.25, "y":3},
+ {"matrix": [7, 4], "x":9.25, "y":3},
+ {"matrix": [6, 5], "x":10.25, "y":3},
+ {"matrix": [7, 5], "x":11.25, "y":3},
+ {"matrix": [6, 6], "x":12.25, "y":3, "w":1.75},
+ {"matrix": [6, 7], "x":14, "y":3},
+ {"matrix": [7, 7], "x":15, "y":3},
+ {"matrix": [8, 0], "x":0, "y":4, "w":1.25},
+ {"matrix": [9, 0], "x":1.25, "y":4, "w":1.25},
+ {"matrix": [8, 1], "x":2.5, "y":4, "w":1.25},
+ {"matrix": [9, 2], "x":3.75, "y":4, "w":1.25},
+ {"matrix": [8, 3], "x":5, "y":4, "w":2.25},
+ {"matrix": [9, 4], "x":7.25, "y":4, "w":2.75},
+ {"matrix": [8, 5], "x":10, "y":4},
+ {"matrix": [9, 5], "x":11, "y":4},
+ {"matrix": [8, 6], "x":12, "y":4},
+ {"matrix": [9, 6], "x":13, "y":4},
+ {"matrix": [8, 7], "x":14, "y":4},
+ {"matrix": [9, 7], "x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/kradoindustries/krado66/keymaps/default/keymap.c b/keyboards/kradoindustries/krado66/keymaps/default/keymap.c
new file mode 100644
index 000000000000..ca18457196db
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/keymaps/default/keymap.c
@@ -0,0 +1,177 @@
+/*
+Copyright 2022 Matt F
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layer {
+ _QWERTY,
+ _QWERTYX,
+ _FUNCTION,
+ _EXTRA,
+};
+
+
+#define QWERTY DF(_QWERTY)
+#define QWERTYX DF(_QWERTYX)
+#define FN MO(_FUNCTION)
+#define BACKFN LT(_FUNCTION, KC_BSPC)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, FN, \
+ KC_LCTL, KC_LGUI, KC_LALT, FN, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+/* Default
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | ESC | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspc| Back |
+ * | | ` | | | | | | | | | | | _ | = | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | DELETE |
+ * | | | | | | | | | | | | { | } | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | CAPS LOCK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
+ * | | | | | | | | | | | : | " | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+-----------+-----+
+ * | SHIFT | Z | X | C | V | B | N | M | < | > | / | RSHIFT | UP | Fn |
+ * | | | | | | | | | , | . | ? | | | |
+ * |----------+----------+----------+--------------------------------------------------------+--------+--------+--------+--------+--------+--------+
+ * | LCTRL | LGUI | LALT | Fn | SPACE | Space | RALT | RCTRL | GUI | LEFT | DOWN | RIGHT |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+
+
+
+ [_QWERTYX] = LAYOUT(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, \
+ BACKFN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_UP, FN, \
+ KC_LCTL, KC_LGUI, KC_LALT, FN, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+/* Default
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | ESC | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspc| Back |
+ * | | ` | | | | | | | | | | | _ | = | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | DELETE |
+ * | | | | | | | | | | | | { | } | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | BACKSPACE (FN)| A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
+ * | | | | | | | | | | | : | " | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+-----------+-----+
+ * | CADET SHIFT ( | Z | X | C | V | B | N | M | < | > | / | CADET SHIFT ) | UP | Fn |
+ * | | | | | | | | | , | . | ? | | | |
+ * |----------+----------+----------+--------------------------------------------------------+--------+--------+--------+--------+--------|--------+
+ * | LCTRL | LGUI | LALT | Fn | SPACE | Space | RALT | GUI | RCTRL | LEFT | DOWN | RIGHT |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+*/
+
+
+ [_FUNCTION] = LAYOUT(
+ QK_BOOT, QWERTYX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, QK_BOOT, \
+ QWERTY, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_DEL, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, RGB_TOG, \
+ KC_TRNS, RGB_M_R, RGB_M_X, RGB_M_SW,RGB_M_K, RGB_M_B, RGB_M_G, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, KC_CAPS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_PDOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+/* Fn
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | |QWERTYEX| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | RESET |
+ * | | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | QWERTY | HOME | UP | END | PGUP | | | | INS | | Print | | | DELETE |
+ * | | | | | | | | | | | Screen | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | LEFT | DOWN | RIGHT | PGDN | | | PREV | PLAY | NEXT | | | RGB TOG |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | Rainbow| Xmas | Swirl | Knight |Breathe |GradieNt| MUTE | VOL DN | VOL UP | PIPE \ | CAPS LOCK | PAGEUP | Fn |
+ * | | | | | | | | | | | | | | |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | Fn | ENTER | NUM.Dot | | | | HOME | PAGEDN | END |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+
+ [_EXTRA] = LAYOUT(
+ QK_BOOT, QWERTYX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, QK_BOOT, \
+ QWERTY, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_DEL, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, RGB_TOG, \
+ KC_TRNS, RGB_M_R, RGB_M_X, RGB_M_SW,RGB_M_K, RGB_M_B, RGB_M_G, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, KC_CAPS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_PDOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+/* Fn
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | |QWERTYX | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | RESET |
+ * | | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | QWERTY | HOME | UP | END | PGUP | | | | INS | | Print | | | DELETE |
+ * | | | | | | | | | | | Screen | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | LEFT | DOWN | RIGHT | PGDN | | | PREV | PLAY | NEXT | | | RGB TOG |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | Rainbow| Xmas | Swirl | Knight |Breathe |GradieNt| MUTE | VOL DN | VOL UP | PIPE \ | CAPS LOCK | PAGEUP | Fn |
+ * | | | | | | | | | | | | | | E2 |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | Fn | ENTER | NUM.Dot | | | | HOME | PAGEDN | END |
+ * | E3 | | | | E3 | | | | E2 | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+};
+
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_QWERTYX] = { ENCODER_CCW_CW(C(KC_TAB), C(S(KC_TAB))), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
+ [_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
+ [_EXTRA] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT) },
+};
+#endif
+
+
+
+ /* Encoder Positions
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | | | | |
+ * | E1 | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | E2 |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | | | | | | | | | |
+ * | E3 | | | | E3 | | | | E2 | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
\ No newline at end of file
diff --git a/keyboards/kradoindustries/krado66/keymaps/default/rules.mk b/keyboards/kradoindustries/krado66/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/kradoindustries/krado66/keymaps/via/keymap.c b/keyboards/kradoindustries/krado66/keymaps/via/keymap.c
new file mode 100644
index 000000000000..192bd377bdf7
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/keymaps/via/keymap.c
@@ -0,0 +1,177 @@
+/*
+Copyright 2022 Matt F
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layer {
+ _QWERTY,
+ _QWERTYX,
+ _FUNCTION,
+ _EXTRA,
+};
+
+
+#define QWERTY DF(_QWERTY)
+#define QWERTYX DF(_QWERTYX)
+#define FN MO(_FUNCTION)
+#define BACKFN LT(_FUNCTION, KC_BSPC)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, FN, \
+ KC_LCTL, KC_LGUI, KC_LALT, FN, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+/* Default
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | ESC | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspc| Back |
+ * | | ` | | | | | | | | | | | _ | = | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | DELETE |
+ * | | | | | | | | | | | | { | } | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | CAPS LOCK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
+ * | | | | | | | | | | | : | " | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+-----------+-----+
+ * | SHIFT | Z | X | C | V | B | N | M | < | > | / | RSHIFT | UP | Fn |
+ * | | | | | | | | | , | . | ? | | | |
+ * |----------+----------+----------+--------------------------------------------------------+--------+--------+--------+--------+--------+--------+
+ * | LCTRL | LGUI | LALT | Fn | SPACE | Space | RALT | RCTRL | GUI | LEFT | DOWN | RIGHT |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+
+
+
+ [_QWERTYX] = LAYOUT(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, \
+ BACKFN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_UP, FN, \
+ KC_LCTL, KC_LGUI, KC_LALT, FN, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+/* Default
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | ESC | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspc| Back |
+ * | | ` | | | | | | | | | | | _ | = | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | DELETE |
+ * | | | | | | | | | | | | { | } | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | BACKSPACE (FN)| A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
+ * | | | | | | | | | | | : | " | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+-----------+-----+
+ * | CADET SHIFT ( | Z | X | C | V | B | N | M | < | > | / | CADET SHIFT ) | UP | Fn |
+ * | | | | | | | | | , | . | ? | | | |
+ * |----------+----------+----------+--------------------------------------------------------+--------+--------+--------+--------+--------|--------+
+ * | LCTRL | LGUI | LALT | Fn | SPACE | Space | RALT | GUI | RCTRL | LEFT | DOWN | RIGHT |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+*/
+
+
+ [_FUNCTION] = LAYOUT(
+ QK_BOOT, QWERTYX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, QK_BOOT, \
+ QWERTY, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_DEL, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, RGB_TOG, \
+ KC_TRNS, RGB_M_R, RGB_M_X, RGB_M_SW,RGB_M_K, RGB_M_B, RGB_M_G, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, KC_CAPS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_PDOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+/* Fn
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | |QWERTYEX| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | RESET |
+ * | | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | QWERTY | HOME | UP | END | PGUP | | | | INS | | Print | | | DELETE |
+ * | | | | | | | | | | | Screen | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | LEFT | DOWN | RIGHT | PGDN | | | PREV | PLAY | NEXT | | | RGB TOG |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | Rainbow| Xmas | Swirl | Knight |Breathe |GradieNt| MUTE | VOL DN | VOL UP | PIPE \ | CAPS LOCK | PAGEUP | Fn |
+ * | | | | | | | | | | | | | | |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | Fn | ENTER | NUM.Dot | | | | HOME | PAGEDN | END |
+ * | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+
+ [_EXTRA] = LAYOUT(
+ QK_BOOT, QWERTYX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, QK_BOOT, \
+ QWERTY, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_DEL, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, RGB_TOG, \
+ KC_TRNS, RGB_M_R, RGB_M_X, RGB_M_SW,RGB_M_K, RGB_M_B, RGB_M_G, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, KC_CAPS, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_PDOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+/* Fn
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | |QWERTYX | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | RESET |
+ * | | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | QWERTY | HOME | UP | END | PGUP | | | | INS | | Print | | | DELETE |
+ * | | | | | | | | | | | Screen | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | LEFT | DOWN | RIGHT | PGDN | | | PREV | PLAY | NEXT | | | RGB TOG |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | Rainbow| Xmas | Swirl | Knight |Breathe |GradieNt| MUTE | VOL DN | VOL UP | PIPE \ | CAPS LOCK | PAGEUP | Fn |
+ * | | | | | | | | | | | | | | E2 |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | Fn | ENTER | NUM.Dot | | | | HOME | PAGEDN | END |
+ * | E3 | | | | E3 | | | | E2 | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
+};
+
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_QWERTYX] = { ENCODER_CCW_CW(C(KC_TAB), C(S(KC_TAB))), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
+ [_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
+ [_EXTRA] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT) },
+};
+#endif
+
+
+
+ /* Encoder Positions
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | | | | |
+ * | E1 | | | | | | | | | | | | | | | |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | |
+ * +---------------+--------+--------+--------+--------+------- +--------+--------+--------+--------+--------+--------|--------+-------------+
+ * | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | |
+ * +-----------------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------+-------+------------+----+
+ * | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | E2 |
+ * |----------+----------+----------+---------------------------------------------------------+--------+--------+----------------+--------+--------+
+ * | | | | | | | | | | | | |
+ * | E3 | | | | E3 | | | | E2 | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------+--------+
+ */
\ No newline at end of file
diff --git a/keyboards/kradoindustries/krado66/keymaps/via/rules.mk b/keyboards/kradoindustries/krado66/keymaps/via/rules.mk
new file mode 100644
index 000000000000..8111cb54a73d
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/keymaps/via/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+
diff --git a/keyboards/kradoindustries/krado66/readme.md b/keyboards/kradoindustries/krado66/readme.md
new file mode 100644
index 000000000000..7b8a275ee402
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/readme.md
@@ -0,0 +1,30 @@
+# Krado66
+
+![Photo](https://i.imgur.com/Du3bBT9h.jpg)
+
+The Krado66 is a 65%ish ortholinear keyboard the uses standard 65% layout keycaps. It can also be configured to accept standard ANSI keycaps (Full 2.75u Right Shift and 1.25u bottom modifiers.)
+
+For those that are wondering, "Krado" means "grid" in Esperanto. The board has 66 keys in its default layout.
+
+* Keyboard Maintainer: [Feags](https://github.com/Feags) / [Krado Industries](https://kradoindustries.com/)
+* Hardware Supported: Only Krado66 acrylic case and skeleton cases are supported.
+* Hardware Availabilitiy: [Krado Industries](https://kradoindustries.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kradoindustries/krado66:default
+
+Flashing example for this keyboard:
+
+ make kradoindustries/krado66:default:flash
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/kradoindustries/krado66/rules.mk b/keyboards/kradoindustries/krado66/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/kradoindustries/krado66/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/kradoindustries/promenade/info.json b/keyboards/kradoindustries/promenade/info.json
new file mode 100644
index 000000000000..a4d47b34f356
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/info.json
@@ -0,0 +1,123 @@
+{
+ "keyboard_name": "Promenade",
+ "manufacturer": "krado industries",
+ "url": "https://www.kradoindustries.com/",
+ "maintainer": "Krado Industries",
+ "usb": {
+ "vid": "0x4B72",
+ "pid": "0x706D",
+ "device_version": "1.0.0"
+ },
+
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgblight": true
+ },
+ "ws2812": {
+ "pin": "B7"
+ },
+ "rgblight": {
+ "led_count": 14,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": [ "F4", "C7", "D7", "B4", "B5", "B6", "C6", "D6", "D4", "D5", "D3", "D2", "D1", "D0"],
+ "rows": [ "F1", "F5", "E6", "F7", "F6"]
+ },
+
+
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0, "w":1.5},
+ {"matrix": [0, 1], "x":1.5, "y":0},
+ {"matrix": [0, 2], "x":2.5, "y":0},
+ {"matrix": [0, 3], "x":3.5, "y":0},
+ {"matrix": [0, 4], "x":4.5, "y":0},
+ {"matrix": [0, 5], "x":5.5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0, 10], "x":10.5, "y":0},
+ {"matrix": [0, 11], "x":11.5, "y":0},
+ {"matrix": [0, 12], "x":12.5, "y":0},
+ {"matrix": [0, 13], "x":13.5, "y":0, "w":1.5},
+ {"matrix": [1, 0], "x":0, "y":1, "w":1.5},
+ {"matrix": [1, 1], "x":1.5, "y":1},
+ {"matrix": [1, 2], "x":2.5, "y":1},
+ {"matrix": [1, 3], "x":3.5, "y":1},
+ {"matrix": [1, 4], "x":4.5, "y":1},
+ {"matrix": [1, 5], "x":5.5, "y":1},
+ {"matrix": [1, 6], "x":6.5, "y":1, "h":1.5},
+ {"matrix": [1, 7], "x":7.5, "y":1, "h":1.5},
+ {"matrix": [1, 8], "x":8.5, "y":1},
+ {"matrix": [1, 9], "x":9.5, "y":1},
+ {"matrix": [1, 10], "x":10.5, "y":1},
+ {"matrix": [1, 11], "x":11.5, "y":1},
+ {"matrix": [1, 12], "x":12.5, "y":1},
+ {"matrix": [1, 13], "x":13.5, "y":1, "w":1.5},
+ {"matrix": [2, 0], "x":0, "y":2, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2},
+ {"matrix": [2, 2], "x":2.5, "y":2},
+ {"matrix": [2, 3], "x":3.5, "y":2},
+ {"matrix": [2, 4], "x":4.5, "y":2},
+ {"matrix": [2, 5], "x":5.5, "y":2},
+ {"matrix": [2, 8], "x":8.5, "y":2},
+ {"matrix": [2, 9], "x":9.5, "y":2},
+ {"matrix": [2, 10], "x":10.5, "y":2},
+ {"matrix": [2, 11], "x":11.5, "y":2},
+ {"matrix": [2, 12], "x":12.5, "y":2},
+ {"matrix": [2, 13], "x":13.5, "y":2, "w":1.5},
+ {"matrix": [3, 6], "x":6.5, "y":2.5, "h":1.5},
+ {"matrix": [3, 7], "x":7.5, "y":2.5, "h":1.5},
+ {"matrix": [3, 0], "x":0, "y":3, "w":1.5},
+ {"matrix": [3, 1], "x":1.5, "y":3},
+ {"matrix": [3, 2], "x":2.5, "y":3},
+ {"matrix": [3, 3], "x":3.5, "y":3},
+ {"matrix": [3, 4], "x":4.5, "y":3},
+ {"matrix": [3, 5], "x":5.5, "y":3},
+ {"matrix": [3, 8], "x":8.5, "y":3},
+ {"matrix": [3, 9], "x":9.5, "y":3},
+ {"matrix": [3, 10], "x":10.5, "y":3},
+ {"matrix": [3, 11], "x":11.5, "y":3},
+ {"matrix": [3, 12], "x":12.5, "y":3},
+ {"matrix": [3, 13], "x":13.5, "y":3, "w":1.5},
+ {"matrix": [4, 0], "x":0, "y":4, "w":1.5},
+ {"matrix": [4, 1], "x":1.5, "y":4},
+ {"matrix": [4, 2], "x":2.5, "y":4},
+ {"matrix": [4, 3], "x":3.5, "y":4},
+ {"matrix": [4, 4], "x":4.5, "y":4},
+ {"matrix": [4, 5], "x":5.5, "y":4},
+ {"matrix": [4, 6], "x":6.5, "y":4, "w":2},
+ {"matrix": [4, 8], "x":8.5, "y":4},
+ {"matrix": [4, 9], "x":9.5, "y":4},
+ {"matrix": [4, 10], "x":10.5, "y":4},
+ {"matrix": [4, 11], "x":11.5, "y":4},
+ {"matrix": [4, 12], "x":12.5, "y":4},
+ {"matrix": [4, 13], "x":13.5, "y":4, "w":1.5}
+
+ ]
+ }
+ }
+}
diff --git a/keyboards/kradoindustries/promenade/keymaps/default/keymap.c b/keyboards/kradoindustries/promenade/keymaps/default/keymap.c
new file mode 100644
index 000000000000..42e606c149ec
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/keymaps/default/keymap.c
@@ -0,0 +1,66 @@
+/*
+Copyright 2023 Matt F
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Layer shorthand
+enum layer_names {
+ _BASE,
+ _FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | - | = | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | [ | ] | Y | U | I | O | P | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | | | H | J | K | L | ; | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | END | PG DN | N | M | , | . | / | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL | LGUI | FN | LALT | SPACE | SPACE | SPACE | SPACE | SPACE | LEFT | DOWN | UP | RIGHT | RCTRL |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(_FN), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL
+ ),
+
+ /* Function Layer
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | | Home | Up | End | PgUp | | | | | | | | PRT SC | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | | Left | Down | Right | PgDn | | | | | | | | | Reset |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | | | | | | | | | | MUTE | VOL DN | VOL UP | \ | |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | | | | | | | | | | | | | | Reset |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+ [_FN] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/kradoindustries/promenade/keymaps/via/keymap.c b/keyboards/kradoindustries/promenade/keymaps/via/keymap.c
new file mode 100644
index 000000000000..8797471b4caa
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/keymaps/via/keymap.c
@@ -0,0 +1,66 @@
+/*
+Copyright 2023 Matt F
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Layer shorthand
+enum layer_names {
+ _BASE,
+ _FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | - | = | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | [ | ] | Y | U | I | O | P | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | | | H | J | K | L | ; | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | END | PG DN | N | M | , | . | / | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL | LGUI | FN | LALT | SPACE | SPACE | SPACE | SPACE | SPACE | LEFT | DOWN | UP | RIGHT | RCTRL |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(_FN), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL
+ ),
+
+ /* Function Layer
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | | Home | Up | End | PgUp | | | | | | | | PRT SC | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | | Left | Down | Right | PgDn | | | | | | | | | Reset |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | | | | | | | | | | MUTE | VOL DN | VOL UP | \ | |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | | | | | | | | | | | | | | Reset |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+ [_FN] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ )
+};
diff --git a/keyboards/kradoindustries/promenade/keymaps/via/rules.mk b/keyboards/kradoindustries/promenade/keymaps/via/rules.mk
new file mode 100644
index 000000000000..36b7ba9cbc98
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/kradoindustries/promenade/readme.md b/keyboards/kradoindustries/promenade/readme.md
new file mode 100644
index 000000000000..179563995cf8
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/readme.md
@@ -0,0 +1,30 @@
+# Promenade
+
+![Promenade](https://i.imgur.com/VXlXflth.jpg)
+
+The Promenade is a 60% ortholinear hotswap keyboard based on the split hand layout of the [Boardwalk](https://github.com/qmk/qmk_firmware/tree/master/keyboards/boardwalk). While similar to the Professional 2 hotswap version of the Boardwalk, it uses 1.5u verticle inner mods instead of 1u keys, includes a JST connector, adds stabilizer mounting positions for 6u and split 3u spacebards, and in addition to 60% tray mounting points the pcb has edge cuts for for use in gummy o-ring mount boards like the Bakeneko60.
+
+The 1.5u vertical inner mods are the default configuration, but the board can be configured to use 3x2 1u keys either by removing the existing hotswap sockets and soldering 6 hotswap sockets to the 1u pads. *Note that the some of the 1u keys may require the plastic legs of 5-pin switches to be trimmed.*
+
+* Keyboard Maintainer: [Feags](https://github.com/Feags) / [Krado Industries](https://kradoindustries.com/)
+* Hardware Supported: Promenade pcb. Many 60% cases.
+* Hardware Availability: [Krado Industries](https://kradoindustries.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kradoindustries/promenade:default
+
+Flashing example for this keyboard:
+
+ make kradoindustries/promenade:default:flash
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/kradoindustries/promenade/rules.mk b/keyboards/kradoindustries/promenade/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/kradoindustries/promenade/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/lily58/keymaps/gaston/config.h b/keyboards/lily58/keymaps/gaston/config.h
index 988e3eb6f837..f4f3140d5135 100644
--- a/keyboards/lily58/keymaps/gaston/config.h
+++ b/keyboards/lily58/keymaps/gaston/config.h
@@ -24,3 +24,4 @@
#define QUICK_TAP_TERM 0
#define TAPPING_TERM 150 /* ms */
+#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY
diff --git a/keyboards/lily58/keymaps/gaston/keymap.c b/keyboards/lily58/keymaps/gaston/keymap.c
index b7129b71e00e..c98ec4254bdd 100644
--- a/keyboards/lily58/keymaps/gaston/keymap.c
+++ b/keyboards/lily58/keymaps/gaston/keymap.c
@@ -26,6 +26,7 @@ enum layer_number {
#define EN_LOWER LT(_LOWER, KC_SPC)
#define EN_MOUSE MO(_MOUSE)
+#define MT_CESC LCTL_T(KC_ESC)
/* See the readme.md file for an ASCII representation of this keymap. */
@@ -34,13 +35,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
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_MINS,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ MT_CESC, 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, EN_MOUSE,KC_EQL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
KC_RALT, KC_LALT, KC_LGUI, EN_LOWER,EN_LOWER, KC_LBRC, KC_RBRC, KC_BSLS
),
[_LOWER] = 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_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, KC_F12,
KC_TRNS, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX,
KC_TRNS, XXXXXXX, XXXXXXX, KC_BRID, KC_BRIU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -56,3 +57,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
+
+bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case MT_CESC:
+ // Immediately select the hold action when another key is pressed.
+ return true;
+ default:
+ // Do not select the hold action when another key is pressed.
+ return false;
+ }
+}
diff --git a/keyboards/lily58/keymaps/gaston/readme.md b/keyboards/lily58/keymaps/gaston/readme.md
index 8edd92cc3ff2..cf8b13786e3f 100644
--- a/keyboards/lily58/keymaps/gaston/readme.md
+++ b/keyboards/lily58/keymaps/gaston/readme.md
@@ -10,6 +10,7 @@ The main characteristics of this keymap are:
* The main thumb buttons are spaces when tapped and enable the LOWER layer
when held.
* Vim style arrow keys.
+ * Left Control is ESC when tapped.
* Left and right ALT in case you need different behaviors. (For example, the
default Option and readline's Alt behavior in macOS.)
* The LOWER layer has mostly meta keys.
@@ -23,7 +24,7 @@ The main characteristics of this keymap are:
|------+------+------+------+------+------| |------+------+------+------+------+------|
| TAB | Q | W | E | R | T | | Y | U | I | O | P | - |
|------+------+------+------+------+------| |------+------+------+------+------+------|
-|LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
+|C_ESC | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
|------+------+------+------+------+------| MOUSE | | = |------+------+------+------+------+------|
| LSFT | Z | X | C | V | B |-------| |-------| N | M | , | . | / | ENT |
`-----------------------------------------/ LT / \ LT \----------------------------------------'
@@ -36,7 +37,7 @@ The main characteristics of this keymap are:
```plain
,-----------------------------------------. ,-----------------------------------------.
-| ESC | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+| TRNS | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
|------+------+------+------+------+------| |------+------+------+------+------+------|
| TRNS | | MUTE | VOLD | VOLU | | | HOME | PGDN | PGUP | END | | F12 |
|------+------+------+------+------+------| |------+------+------+------+------+------|
diff --git a/keyboards/keebio/nyquist/keymaps/default/config.h b/keyboards/lily58/keymaps/pomodoro/config.h
similarity index 68%
rename from keyboards/keebio/nyquist/keymaps/default/config.h
rename to keyboards/lily58/keymaps/pomodoro/config.h
index 81fc2cf5fe48..ce2b0e4bcde7 100644
--- a/keyboards/keebio/nyquist/keymaps/default/config.h
+++ b/keyboards/lily58/keymaps/pomodoro/config.h
@@ -1,5 +1,8 @@
/*
-Copyright 2017 Danny Nguyen
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,12 +20,15 @@ along with this program. If not, see .
#pragma once
-// #define USE_I2C
-
/* Select hand configuration */
+
+#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
+#define QUICK_TAP_TERM 0
+#define TAPPING_TERM 100
+
#undef RGBLED_NUM
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
@@ -34,7 +40,17 @@ along with this program. If not, see .
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
-#define RGBLED_NUM 12
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#define SPLIT_TRANSACTION_IDS_USER SYNC_POMODORO_RUNNING
+
+// Underglow
+/*
+#undef RGBLED_NUM
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_SLEEP
+*/
diff --git a/keyboards/lily58/keymaps/pomodoro/keymap.c b/keyboards/lily58/keymaps/pomodoro/keymap.c
new file mode 100644
index 000000000000..7689a391f2d1
--- /dev/null
+++ b/keyboards/lily58/keymaps/pomodoro/keymap.c
@@ -0,0 +1,154 @@
+/*
+Copyright 2023 Casey Borders
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+enum layer_number {
+ _QWERTY = 0,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |Backsp|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
+ * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_MPLY, MO(_LOWER), KC_LGUI, KC_ENT, KC_SPC, KC_RGUI, MO(_RAISE), KC_MUTE
+ ),
+ /* LOWER
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | Up | | \ | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | |-------. ,-------| | Left | Down |Right | = | |
+ * |------+------+------+------+------+------| < | | > |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | | | | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_LOWER] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LT, KC_GT, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+
+ ),
+ /* RAISE
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | Vol+ | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Prev | Vol- | Next | | |-------. ,-------| | | | | | |
+ * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | | | | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_RAISE] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
+ _______, _______, KC_VOLU, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
+ _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LT, KC_GT, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+
+ ),
+ /* ADJUST
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | Oper | Out |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | |-------. ,-------| | | | | | |
+ * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | | | | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_ADJUST] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_OPER, KC_OUT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+// SSD1306 OLED update loop, make sure to enable OLED_ENABLE=yes in rules.mk
+#ifdef OLED_ENABLE
+
+// When you add source files to SRC in rules.mk, you can use functions.
+const char *read_layer_state(void);
+const char *read_logo(void);
+const char *read_timelog(void);
+
+void toggle_pomodoro(void);
+const char* read_pomodoro_running(void);
+void update_pomodoro_display(void);
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (!is_keyboard_master())
+ return OLED_ROTATION_90;
+ return rotation;
+}
+
+bool oled_task_user(void) {
+ if (is_keyboard_master()) {
+ oled_write_ln(read_layer_state(), false);
+ oled_write_ln(read_pomodoro_running(), false);
+ } else {
+ update_pomodoro_display();
+ }
+ return false;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed && keycode == KC_OPER) {
+ toggle_pomodoro();
+ }
+ return true;
+}
+
+#endif // OLED_ENABLE
diff --git a/keyboards/lily58/keymaps/pomodoro/pomodoro.c b/keyboards/lily58/keymaps/pomodoro/pomodoro.c
new file mode 100644
index 000000000000..1c0641978dcf
--- /dev/null
+++ b/keyboards/lily58/keymaps/pomodoro/pomodoro.c
@@ -0,0 +1,249 @@
+/*
+Copyright 2023 Casey Borders
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+#include
+
+#include "transactions.h"
+
+#ifdef OLED_ENABLE
+
+#define HEADER_SIZE 32
+const char headerBase[] PROGMEM = {
+ 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
+ 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
+ 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
+ 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF
+};
+char header[HEADER_SIZE];
+
+#define STATUS_WIDTH 15
+#define STATUS_HEIGHT 32
+#define STATUS_PIXELS (STATUS_WIDTH * 8)
+#define STATUS_SIZE (STATUS_WIDTH * STATUS_HEIGHT)
+const char logoBase[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x61, 0x61, 0x81, 0x81, 0x01, 0x01, 0xC1, 0xC1, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xC0, 0xFF, 0xFF, 0xC3, 0xC3, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF0, 0xF0, 0x00, 0x00, 0xF0, 0xF0, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF0, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0F, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x06, 0x9E, 0x9E, 0x66, 0x66, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0xF8, 0xF8, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xF8, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x86, 0x86, 0x67, 0x67, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x86, 0x86, 0x00, 0x00, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x31, 0x31, 0xC1, 0xC1, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x30, 0x30, 0x3F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xF3, 0x7F, 0x3F, 0x7F, 0xFF, 0xFF, 0x3B, 0xF1, 0xF7, 0xFF, 0x3F, 0x39, 0x30, 0x00, 0x01, 0x01, 0x01, 0x83, 0x86, 0x0C, 0xF8, 0xF0, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xCF, 0x07, 0x1F, 0x3F, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xDF, 0xFC, 0x7F, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0E, 0x1C, 0x18, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00
+};
+
+const char workBase[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3E, 0x3E, 0x3E, 0x3E, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x3E, 0x3E, 0x3E, 0x3E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7C, 0x7C, 0x7C, 0x7C, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFC, 0xFC, 0xFC, 0xFC, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x83, 0x83, 0x83, 0x83, 0x83, 0x7F, 0x7F, 0x7F, 0x7F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00
+};
+
+const char restBase[] PROGMEM = {
+ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFC, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7C, 0x7C, 0x7C, 0x7C, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00
+};
+char displayBuffer[STATUS_SIZE];
+
+#define WORK_TIME ((uint32_t)25 * 60 * 1000)
+#define REST_TIME ((uint32_t)5 * 60 * 1000)
+
+typedef enum pomo_state {
+ _STOPPED,
+ _WORK,
+ _REST,
+} pomo_state;
+
+/* The master only needs to know if the timer is running or not */
+bool isRunning = false;
+
+/* The slave needs more info about the state and what's going on */
+pomo_state state = _STOPPED;
+uint8_t pomoCount = 0;
+uint32_t pomoTimer;
+uint32_t totalTime = 0;
+uint32_t currTime = 0;
+uint32_t lastTime = 0;
+uint16_t lastProgress = 0;
+
+const char* read_pomodoro_state(void) {
+ switch (state) {
+ case _STOPPED: return "STOPPED";
+ case _REST: return "REST";
+ case _WORK: return "WORK";
+ default: return "UNKNOWN";
+ }
+}
+
+const char* read_pomodoro_running(void) {
+ if (isRunning) { return "RUNNING"; }
+ else { return "STOPPED"; }
+}
+
+void update_display_base(void) {
+ switch (state) {
+ case _STOPPED: {
+ memcpy_P(displayBuffer, logoBase, STATUS_SIZE);
+ memset(header, 0, HEADER_SIZE);
+ } break;
+ case _WORK: {
+ memcpy_P(displayBuffer, workBase, STATUS_SIZE);
+ memcpy_P(header, headerBase, HEADER_SIZE);
+ } break;
+ case _REST: {
+ memcpy_P(displayBuffer, restBase, STATUS_SIZE);
+ memcpy_P(header, headerBase, HEADER_SIZE);
+ } break;
+ }
+}
+
+void update_cycle_display(void) {
+ if (state == _STOPPED) { return; }
+ uint8_t start = (HEADER_SIZE / 4) * (4 - pomoCount);
+ for (uint8_t i = start; i < HEADER_SIZE; i++) {
+ header[i] = ~header[i];
+ }
+}
+
+bool syncRunning = false;
+void toggle_pomodoro(void) {
+ isRunning = !isRunning;
+ syncRunning = true;
+}
+
+void set_slave_pomodoro_running(uint8_t in_buflen, const void *in_data, uint8_t out_buflen, void *out_data) {
+ isRunning = *(bool*)in_data;
+ if (isRunning) {
+ /* Reset stuff and start the timer */
+ pomoTimer = timer_read32();
+ state = _WORK;
+ totalTime = WORK_TIME;
+ lastTime = 0;
+ lastProgress = 0;
+ currTime = 0;
+ pomoCount = 1;
+ update_display_base();
+ update_cycle_display();
+ } else {
+ state = _STOPPED;
+ update_display_base();
+ }
+}
+
+void keyboard_post_init_user(void) {
+ memcpy_P(displayBuffer, logoBase, STATUS_SIZE);
+ memset(header, 0, HEADER_SIZE);
+ transaction_register_rpc(SYNC_POMODORO_RUNNING, set_slave_pomodoro_running);
+}
+
+void update_pomodoro_display(void) {
+ oled_set_cursor(0, 0);
+ oled_write_raw(displayBuffer, STATUS_SIZE);
+ oled_set_cursor(0, STATUS_WIDTH);
+ oled_write_raw(header, HEADER_SIZE);
+}
+
+void update_time_display(void) {
+ if (currTime > lastTime) {
+ float ratio = (float)currTime / totalTime;
+ uint16_t progress = (uint16_t)(ratio * STATUS_PIXELS);
+
+ for (int i = lastProgress + 1; i <= progress; i++) {
+ uint16_t row = i / 8;
+ uint16_t bit = i % 8;
+ char mask = 1 << bit;
+ for (int j = 0; j < STATUS_HEIGHT; j++) {
+ uint16_t index = row * STATUS_HEIGHT + j;
+ if (index > STATUS_SIZE) break;
+ displayBuffer[index] = displayBuffer[index] ^ mask;
+ }
+ }
+
+ lastTime = currTime;
+ lastProgress = progress;
+ }
+}
+
+void housekeeping_task_user(void) {
+ if (is_keyboard_master()) {
+ if (syncRunning && transaction_rpc_send(SYNC_POMODORO_RUNNING, sizeof(bool), &isRunning)) {
+ syncRunning = false;
+ }
+ } else {
+ /* This is where the time will be updated */
+ if (isRunning) {
+ currTime = timer_elapsed32(pomoTimer);
+ if (currTime >= totalTime) {
+ if (state == _WORK) {
+ state = _REST;
+ totalTime = REST_TIME;
+ } else if (state == _REST) {
+ state = _WORK;
+ totalTime = WORK_TIME;
+ pomoCount++;
+ }
+
+ if (pomoCount > 4) {
+ isRunning = false;
+ state = _STOPPED;
+ }
+
+ pomoTimer = timer_read32();
+ currTime = 0;
+ lastTime = 0;
+ lastProgress = 0;
+ update_display_base();
+ update_cycle_display();
+ } else {
+ update_time_display();
+ }
+ }
+ }
+}
+
+#endif // OLED_ENABLE
diff --git a/keyboards/lily58/keymaps/pomodoro/rules.mk b/keyboards/lily58/keymaps/pomodoro/rules.mk
new file mode 100644
index 000000000000..a6666f7fc14b
--- /dev/null
+++ b/keyboards/lily58/keymaps/pomodoro/rules.mk
@@ -0,0 +1,23 @@
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+OLED_ENABLE = yes # OLED display
+LTO_ENABLE = yes # Link time optimisations
+EXTRAKEY_ENABLE = yes # Audio control and System control
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/rgb_state_reader.c \
+ ./lib/layer_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c \
+ ./lib/mode_icon_reader.c \
+ ./lib/host_led_state_reader.c \
+ ./lib/timelogger.c \
+ ./lib/keylogger.c \
+ pomodoro.c \
diff --git a/keyboards/lily58/lib/rgb_state_reader.c b/keyboards/lily58/lib/rgb_state_reader.c
index 3d74fb45e4e3..9bb86a11ad3f 100644
--- a/keyboards/lily58/lib/rgb_state_reader.c
+++ b/keyboards/lily58/lib/rgb_state_reader.c
@@ -1,6 +1,6 @@
#ifdef RGBLIGHT_ENABLE
-
#include
+#include "rgblight.h"
extern rgblight_config_t rgblight_config;
char rbf_info_str[24];
diff --git a/keyboards/linworks/fave60a/config.h b/keyboards/linworks/fave60a/config.h
new file mode 100644
index 000000000000..fd70ee7c38fb
--- /dev/null
+++ b/keyboards/linworks/fave60a/config.h
@@ -0,0 +1,67 @@
+// Copyright 2023 ziptyze (@ziptyze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Define RGB */
+#define RGB_MATRIX_LED_COUNT 91
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120
+
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL
+
+#define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+#define ENABLE_RGB_MATRIX_BAND_SAT
+#define ENABLE_RGB_MATRIX_BAND_VAL
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#define ENABLE_RGB_MATRIX_DUAL_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#define ENABLE_RGB_MATRIX_RAINDROPS
+#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#define ENABLE_RGB_MATRIX_HUE_BREATHING
+#define ENABLE_RGB_MATRIX_HUE_PENDULUM
+#define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// The PIXEL_FRACTAL effect does not work properly when the matrix layout is
+// different from the physical layout; it also has problems when underglow
+// LEDs are present, or when multiple LEDs are associated with the same key.
+#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+
+// Framebuffer effects; can be enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// is defined. Both of these effects currently don't work properly when the
+// key matrix does not match the physical layout, so they are disabled.
+#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+// Reactive effects; can be enabled only if at least one of
+// RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined.
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+#define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/linworks/fave60a/info.json b/keyboards/linworks/fave60a/info.json
new file mode 100644
index 000000000000..a0dd31e8c359
--- /dev/null
+++ b/keyboards/linworks/fave60a/info.json
@@ -0,0 +1,192 @@
+{
+ "manufacturer": "Lx3",
+ "keyboard_name": "fave60a",
+ "maintainer": "keydler",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "C15", "C14", "C13"],
+ "rows": ["A8", "B15", "B14", "B8", "B9"]
+ },
+ "processor": "STM32F072",
+ "ws2812": {
+ "pin": "A10"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "layout": [
+ { "flags": 4, "matrix": [4, 13], "x": 208, "y": 64 },
+ { "flags": 4, "matrix": [4, 12], "x": 192, "y": 64 },
+ { "flags": 4, "matrix": [4, 11], "x": 176, "y": 64 },
+ { "flags": 1, "matrix": [4, 6], "x": 96, "y": 64 },
+ { "flags": 4, "matrix": [4, 2], "x": 32, "y": 64 },
+ { "flags": 4, "matrix": [4, 1], "x": 16, "y": 64 },
+ { "flags": 4, "matrix": [4, 0], "x": 0, "y": 64 },
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 48 },
+ { "flags": 1, "matrix": [3, 2], "x": 32, "y": 48 },
+ { "flags": 1, "matrix": [3, 3], "x": 48, "y": 48 },
+ { "flags": 1, "matrix": [3, 4], "x": 64, "y": 48 },
+ { "flags": 1, "matrix": [3, 5], "x": 80, "y": 48 },
+ { "flags": 1, "matrix": [3, 6], "x": 96, "y": 48 },
+ { "flags": 1, "matrix": [3, 7], "x": 112, "y": 48 },
+ { "flags": 1, "matrix": [3, 8], "x": 128, "y": 48 },
+ { "flags": 1, "matrix": [3, 9], "x": 144, "y": 48 },
+ { "flags": 1, "matrix": [3, 10], "x": 160, "y": 48 },
+ { "flags": 1, "matrix": [3, 11], "x": 176, "y": 48 },
+ { "flags": 4, "matrix": [3, 13], "x": 208, "y": 48 },
+ { "flags": 1, "matrix": [2, 13], "x": 208, "y": 32 },
+ { "flags": 1, "matrix": [2, 11], "x": 176, "y": 32 },
+ { "flags": 1, "matrix": [2, 10], "x": 160, "y": 32 },
+ { "flags": 1, "matrix": [2, 9], "x": 144, "y": 32 },
+ { "flags": 1, "matrix": [2, 8], "x": 128, "y": 32 },
+ { "flags": 1, "matrix": [2, 7], "x": 112, "y": 32 },
+ { "flags": 1, "matrix": [2, 6], "x": 96, "y": 32 },
+ { "flags": 1, "matrix": [2, 5], "x": 80, "y": 32 },
+ { "flags": 1, "matrix": [2, 4], "x": 64, "y": 32 },
+ { "flags": 1, "matrix": [2, 3], "x": 48, "y": 32 },
+ { "flags": 1, "matrix": [2, 2], "x": 24, "y": 32 },
+ { "flags": 1, "matrix": [2, 1], "x": 12, "y": 32 },
+ { "flags": 9, "matrix": [2, 0], "x": 0, "y": 32 },
+ { "flags": 1, "matrix": [1, 0], "x": 0, "y": 16 },
+ { "flags": 1, "matrix": [1, 1], "x": 16, "y": 16 },
+ { "flags": 1, "matrix": [1, 2], "x": 32, "y": 16 },
+ { "flags": 1, "matrix": [1, 3], "x": 48, "y": 16 },
+ { "flags": 1, "matrix": [1, 4], "x": 64, "y": 16 },
+ { "flags": 1, "matrix": [1, 5], "x": 80, "y": 16 },
+ { "flags": 1, "matrix": [1, 6], "x": 96, "y": 16 },
+ { "flags": 1, "matrix": [1, 7], "x": 112, "y": 16 },
+ { "flags": 1, "matrix": [1, 8], "x": 128, "y": 16 },
+ { "flags": 1, "matrix": [1, 9], "x": 144, "y": 16 },
+ { "flags": 1, "matrix": [1, 10], "x": 160, "y": 16 },
+ { "flags": 1, "matrix": [1, 11], "x": 176, "y": 16 },
+ { "flags": 1, "matrix": [1, 12], "x": 192, "y": 16 },
+ { "flags": 1, "matrix": [1, 13], "x": 208, "y": 16 },
+ { "flags": 1, "matrix": [0, 13], "x": 208, "y": 0 },
+ { "flags": 1, "matrix": [0, 12], "x": 192, "y": 0 },
+ { "flags": 1, "matrix": [0, 11], "x": 176, "y": 0 },
+ { "flags": 1, "matrix": [0, 10], "x": 160, "y": 0 },
+ { "flags": 1, "matrix": [0, 9], "x": 144, "y": 0 },
+ { "flags": 1, "matrix": [0, 8], "x": 128, "y": 0 },
+ { "flags": 1, "matrix": [0, 7], "x": 112, "y": 0 },
+ { "flags": 1, "matrix": [0, 6], "x": 96, "y": 0 },
+ { "flags": 1, "matrix": [0, 5], "x": 80, "y": 0 },
+ { "flags": 1, "matrix": [0, 4], "x": 64, "y": 0 },
+ { "flags": 1, "matrix": [0, 3], "x": 48, "y": 0 },
+ { "flags": 1, "matrix": [0, 2], "x": 32, "y": 0 },
+ { "flags": 1, "matrix": [0, 1], "x": 16, "y": 0 },
+ { "flags": 1, "matrix": [0, 0], "x": 0, "y": 0 },
+ { "flags": 2, "x": 0, "y": 3 },
+ { "flags": 2, "x": 16, "y": 3 },
+ { "flags": 2, "x": 32, "y": 3 },
+ { "flags": 2, "x": 48, "y": 3 },
+ { "flags": 2, "x": 64, "y": 3 },
+ { "flags": 2, "x": 80, "y": 3 },
+ { "flags": 2, "x": 96, "y": 3 },
+ { "flags": 2, "x": 112, "y": 3 },
+ { "flags": 2, "x": 128, "y": 3 },
+ { "flags": 2, "x": 144, "y": 3 },
+ { "flags": 2, "x": 160, "y": 3 },
+ { "flags": 2, "x": 176, "y": 3 },
+ { "flags": 2, "x": 192, "y": 3 },
+ { "flags": 2, "x": 208, "y": 3 },
+ { "flags": 2, "x": 208, "y": 19 },
+ { "flags": 2, "x": 208, "y": 35 },
+ { "flags": 2, "x": 208, "y": 51 },
+ { "flags": 2, "x": 176, "y": 51 },
+ { "flags": 2, "x": 160, "y": 51 },
+ { "flags": 2, "x": 144, "y": 51 },
+ { "flags": 2, "x": 128, "y": 51 },
+ { "flags": 2, "x": 112, "y": 51 },
+ { "flags": 2, "x": 96, "y": 51 },
+ { "flags": 2, "x": 80, "y": 51 },
+ { "flags": 2, "x": 64, "y": 51 },
+ { "flags": 2, "x": 48, "y": 51 },
+ { "flags": 2, "x": 32, "y": 51 },
+ { "flags": 2, "x": 16, "y": 51 },
+ { "flags": 2, "x": 0, "y": 51 },
+ { "flags": 2, "x": 0, "y": 35 },
+ { "flags": 2, "x": 0, "y": 19 }
+ ]
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x000C",
+ "vid": "0x4C58"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0 },
+ { "label": "K14", "matrix": [0, 14], "x": 14, "y": 0 },
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "label": "C", "matrix": [3, 4], "x": 3, "y": 3 },
+ { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
+ { "label": "K54", "matrix": [3, 14], "x": 14, "y": 3 },
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 },
+ { "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "label": "K58", "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
+ { "label": "Alt", "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "label": "Fn", "matrix": [4, 12], "x": 12.5, "y": 4 },
+ { "label": "Ctrl", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/linworks/fave60a/keymaps/default/keymap.c b/keyboards/linworks/fave60a/keymaps/default/keymap.c
new file mode 100644
index 000000000000..22e9c5f78219
--- /dev/null
+++ b/keyboards/linworks/fave60a/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2020 noroadsleft
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/linworks/fave60a/keymaps/via/keymap.c b/keyboards/linworks/fave60a/keymaps/via/keymap.c
new file mode 100644
index 000000000000..22e9c5f78219
--- /dev/null
+++ b/keyboards/linworks/fave60a/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2020 noroadsleft
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/linworks/fave60a/keymaps/via/rules.mk b/keyboards/linworks/fave60a/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/linworks/fave60a/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/linworks/fave60a/readme.md b/keyboards/linworks/fave60a/readme.md
new file mode 100644
index 000000000000..645c5d257d6c
--- /dev/null
+++ b/keyboards/linworks/fave60a/readme.md
@@ -0,0 +1,29 @@
+# linworks/fave60a
+
+![linworks/fave60a front](https://i.imgur.com/UeWR8Klh.png)
+![linworks/fave60a back](https://i.imgur.com/j3mu8LFh.png)
+
+The Fave60a PCB is a 60 keys keyboard designed by Lx3 (Linworks).
+Matrix and Under RGB supported.
+
+* Keyboard Maintainer: [keydler](https://github.com/duilchoi)
+* Hardware Supported: Fave 60 PCBs. linworks 60key keyboards.
+* Hardware Availability: Groupbuy.Check the ongoing ones on [the Linworks Discord](https://discord.gg/UC8gTdVnsj)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make linworks/fave60a:default
+
+Flashing example for this keyboard:
+
+ make linworks/fave60a:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/linworks/fave60a/rules.mk b/keyboards/linworks/fave60a/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/linworks/favepada/config.h b/keyboards/linworks/favepada/config.h
new file mode 100644
index 000000000000..bee089bb436b
--- /dev/null
+++ b/keyboards/linworks/favepada/config.h
@@ -0,0 +1,11 @@
+// Copyright 2023 ziptyze (@ziptyze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Define RGB */
+#define RGB_MATRIX_LED_COUNT 37
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL
diff --git a/keyboards/linworks/favepada/info.json b/keyboards/linworks/favepada/info.json
new file mode 100644
index 000000000000..f80e3802d552
--- /dev/null
+++ b/keyboards/linworks/favepada/info.json
@@ -0,0 +1,140 @@
+{
+ "manufacturer": "Lx3",
+ "keyboard_name": "favepada",
+ "maintainer": "keydler",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true,
+ },
+ "matrix_pins": {
+ "cols": ["A14", "A15", "B3", "B4"],
+ "rows": ["A9", "A8", "B15", "B14", "B13", "B12"]
+ },
+ "processor": "STM32F072",
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "WS2812",
+ "layout": [
+ { "flags": 1, "matrix": [5, 2], "x": 149, "y": 59 },
+ { "flags": 1, "matrix": [5, 0], "x": 0, "y": 59 },
+ { "flags": 1, "matrix": [4, 0], "x": 0, "y": 51 },
+ { "flags": 1, "matrix": [4, 1], "x": 74, "y": 51 },
+ { "flags": 1, "matrix": [4, 2], "x": 149, "y": 51 },
+ { "flags": 1, "matrix": [4, 3], "x": 224, "y": 51 },
+ { "flags": 1, "matrix": [3, 2], "x": 149, "y": 38 },
+ { "flags": 1, "matrix": [3, 1], "x": 74, "y": 38 },
+ { "flags": 1, "matrix": [3, 0], "x": 0, "y": 38 },
+ { "flags": 1, "matrix": [2, 0], "x": 0, "y": 26 },
+ { "flags": 1, "matrix": [2, 1], "x": 74, "y": 26 },
+ { "flags": 1, "matrix": [2, 2], "x": 149, "y": 26 },
+ { "flags": 1, "matrix": [2, 3], "x": 224, "y": 26 },
+ { "flags": 1, "matrix": [1, 3], "x": 224, "y": 13 },
+ { "flags": 1, "matrix": [1, 2], "x": 149, "y": 13 },
+ { "flags": 1, "matrix": [1, 1], "x": 74, "y": 13 },
+ { "flags": 9, "matrix": [1, 0], "x": 0, "y": 13 },
+ { "flags": 2, "matrix": [0, 0], "x": 0, "y": 0 },
+ { "flags": 2, "matrix": [0, 1], "x": 74, "y": 0 },
+ { "flags": 2, "matrix": [0, 2], "x": 149, "y": 0 },
+ { "flags": 2, "matrix": [0, 3], "x": 224, "y": 0 },
+ { "flags": 4, "x": 224, "y": 5 },
+ { "flags": 4, "x": 149, "y": 5 },
+ { "flags": 4, "x": 74, "y": 5 },
+ { "flags": 4, "x": 0, "y": 5 },
+ { "flags": 4, "x": 0, "y": 18 },
+ { "flags": 4, "x": 0, "y": 31 },
+ { "flags": 4, "x": 0, "y": 43 },
+ { "flags": 4, "x": 0, "y": 56 },
+ { "flags": 4, "x": 0, "y": 64 },
+ { "flags": 4, "x": 74, "y": 64 },
+ { "flags": 4, "x": 149, "y": 64 },
+ { "flags": 4, "x": 224, "y": 64 },
+ { "flags": 4, "x": 224, "y": 56 },
+ { "flags": 4, "x": 224, "y": 43 },
+ { "flags": 4, "x": 224, "y": 31 },
+ { "flags": 4, "x": 224, "y": 18 }
+ ],
+ "max_brightness": 120
+ },
+ "ws2812": {
+ "pin": "B1"
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x000B",
+ "vid": "0x4C58"
+ },
+ "community_layouts": ["numpad_6x4"],
+ "layouts": {
+ "LAYOUT_numpad_6x4": {
+ "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": "Num Lock", "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": "7", "matrix": [2, 0], "x": 0, "y": 2.25 },
+ { "label": "8", "matrix": [2, 1], "x": 1, "y": 2.25 },
+ { "label": "9", "matrix": [2, 2], "x": 2, "y": 2.25 },
+ { "label": "4", "matrix": [3, 0], "x": 0, "y": 3.25 },
+ { "label": "5", "matrix": [3, 1], "x": 1, "y": 3.25 },
+ { "label": "6", "matrix": [3, 2], "x": 2, "y": 3.25 },
+ { "h": 2, "label": "+", "matrix": [2, 3], "x": 3, "y": 2.25 },
+ { "label": "1", "matrix": [4, 0], "x": 0, "y": 4.25 },
+ { "label": "2", "matrix": [4, 1], "x": 1, "y": 4.25 },
+ { "label": "3", "matrix": [4, 2], "x": 2, "y": 4.25 },
+ { "label": "0", "matrix": [5, 0], "w": 2, "x": 0, "y": 5.25 },
+ { "label": "Del", "matrix": [5, 2], "x": 2, "y": 5.25 },
+ { "h": 2, "label": "Enter", "matrix": [4, 3], "x": 3, "y": 4.25 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/linworks/favepada/keymaps/default/keymap.c b/keyboards/linworks/favepada/keymaps/default/keymap.c
new file mode 100644
index 000000000000..e17d76109ab0
--- /dev/null
+++ b/keyboards/linworks/favepada/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2020 noroadsleft
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_numpad_6x4(
+ MO(1), KC_A, KC_B, KC_C,
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_PDOT, KC_PENT
+ ),
+ [1] = LAYOUT_numpad_6x4(
+ KC_TRNS, RGB_TOG, RGB_MOD, KC_D,
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_PDOT, KC_PENT
+ )
+};
diff --git a/keyboards/linworks/favepada/keymaps/via/keymap.c b/keyboards/linworks/favepada/keymaps/via/keymap.c
new file mode 100644
index 000000000000..e98ca5e74176
--- /dev/null
+++ b/keyboards/linworks/favepada/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2020 noroadsleft
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_numpad_6x4(
+ MO(1), KC_A, KC_B, KC_C,
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_PDOT, KC_PENT
+ ),
+ [1] = LAYOUT_numpad_6x4(
+ KC_TRNS, RGB_TOG, RGB_MOD, KC_D,
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_PDOT, KC_PENT
+ )
+};
diff --git a/keyboards/linworks/favepada/keymaps/via/rules.mk b/keyboards/linworks/favepada/keymaps/via/rules.mk
new file mode 100644
index 000000000000..36b7ba9cbc98
--- /dev/null
+++ b/keyboards/linworks/favepada/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/linworks/favepada/readme.md b/keyboards/linworks/favepada/readme.md
new file mode 100644
index 000000000000..7f06ca90ca22
--- /dev/null
+++ b/keyboards/linworks/favepada/readme.md
@@ -0,0 +1,18 @@
+# linworks/favepada
+
+![linworks/favepada front](https://i.imgur.com/tkKHcL2h.png)
+![linworks/favepada back](https://i.imgur.com/1x5UokRh.png)
+
+* Keyboard Maintainer: [keydler](https://github.com/duilchoi)
+* Hardware Supported:
+* Hardware Availability: None, feel free to order/manufacture parts yourself.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make linworks/favepada:default
+
+Flashing example for this keyboard:
+
+ make linworks/favepada:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/linworks/favepada/rules.mk b/keyboards/linworks/favepada/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/lucid/velvet_hotswap/info.json b/keyboards/lucid/velvet_hotswap/info.json
index e3302cef1cdf..2cbecb782d84 100644
--- a/keyboards/lucid/velvet_hotswap/info.json
+++ b/keyboards/lucid/velvet_hotswap/info.json
@@ -23,8 +23,114 @@
},
"processor": "at90usb646",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_tkl_f13_ansi_split_bs_rshift"
+ },
+ "community_layouts": [
+ "tkl_f13_ansi",
+ "tkl_f13_ansi_split_bs_rshift",
+ "tkl_f13_ansi_tsangan",
+ "tkl_f13_ansi_tsangan_split_bs_rshift"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_tkl_f13_ansi": {
+ "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, 10], "label": "F10", "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "label": "F11", "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "label": "F12", "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "label": "F13", "x": 14, "y": 0},
+ {"matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "label": "Pause", "x": 17.25, "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": "Back Space", "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "label": "PgUp", "x": 17.25, "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, 14], "label": "Delete", "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "label": "PgDn", "x": 17.25, "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": "SQ", "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "label": "Enter", "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "label": "Left Shift", "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 1], "label": "Z", "x": 2.25, "y": 4.25},
+ {"matrix": [4, 2], "label": "X", "x": 3.25, "y": 4.25},
+ {"matrix": [4, 3], "label": "C", "x": 4.25, "y": 4.25},
+ {"matrix": [4, 4], "label": "V", "x": 5.25, "y": 4.25},
+ {"matrix": [4, 5], "label": "B", "x": 6.25, "y": 4.25},
+ {"matrix": [4, 6], "label": "N", "x": 7.25, "y": 4.25},
+ {"matrix": [4, 7], "label": "M", "x": 8.25, "y": 4.25},
+ {"matrix": [4, 8], "label": "<", "x": 9.25, "y": 4.25},
+ {"matrix": [4, 9], "label": ">", "x": 10.25, "y": 4.25},
+ {"matrix": [4, 10], "label": "?", "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "label": "Right Shift", "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "label": "\u2191", "x": 16.25, "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, 5], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 9], "label": "Alt", "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "label": "Win", "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "label": "Menu", "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, 14], "label": "\u2190", "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "label": "Esc", "x": 0, "y": 0},
{"matrix": [0, 1], "label": "F1", "x": 1.25, "y": 0},
@@ -107,7 +213,7 @@
{"matrix": [4, 9], "label": ">", "x": 10.25, "y": 4.25},
{"matrix": [4, 10], "label": "?", "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "label": "Right Shift", "x": 12.25, "y": 4.25, "w": 1.75},
- {"matrix": [4, 13], "label": "Right Shift", "x": 12.25, "y": 4.25},
+ {"matrix": [4, 13], "label": "Right Shift", "x": 14, "y": 4.25},
{"matrix": [4, 15], "label": "\u2191", "x": 16.25, "y": 4.25},
{"matrix": [5, 0], "label": "Ctrl", "x": 0, "y": 5.25, "w": 1.25},
@@ -122,6 +228,200 @@
{"matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25},
{"matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25}
]
+ },
+ "LAYOUT_tkl_f13_ansi_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, 10], "label": "F10", "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "label": "F11", "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "label": "F12", "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "label": "F13", "x": 14, "y": 0},
+ {"matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "label": "Pause", "x": 17.25, "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": "Back Space", "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "label": "PgUp", "x": 17.25, "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, 14], "label": "Delete", "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "label": "PgDn", "x": 17.25, "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": "SQ", "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "label": "Enter", "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "label": "Left Shift", "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 1], "label": "Z", "x": 2.25, "y": 4.25},
+ {"matrix": [4, 2], "label": "X", "x": 3.25, "y": 4.25},
+ {"matrix": [4, 3], "label": "C", "x": 4.25, "y": 4.25},
+ {"matrix": [4, 4], "label": "V", "x": 5.25, "y": 4.25},
+ {"matrix": [4, 5], "label": "B", "x": 6.25, "y": 4.25},
+ {"matrix": [4, 6], "label": "N", "x": 7.25, "y": 4.25},
+ {"matrix": [4, 7], "label": "M", "x": 8.25, "y": 4.25},
+ {"matrix": [4, 8], "label": "<", "x": 9.25, "y": 4.25},
+ {"matrix": [4, 9], "label": ">", "x": 10.25, "y": 4.25},
+ {"matrix": [4, 10], "label": "?", "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "label": "Right Shift", "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "label": "\u2191", "x": 16.25, "y": 4.25},
+
+ {"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, 5], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 10], "label": "Alt", "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 11], "label": "Menu", "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "label": "Ctrl", "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 14], "label": "\u2190", "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan_split_bs_rshift": {
+ "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, 10], "label": "F10", "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "label": "F11", "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "label": "F12", "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "label": "F13", "x": 14, "y": 0},
+ {"matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "label": "Pause", "x": 17.25, "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": [3, 12], "label": "Back Space", "x": 13, "y": 1.25},
+ {"matrix": [1, 13], "label": "Back Space", "x": 14, "y": 1.25},
+ {"matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "label": "PgUp", "x": 17.25, "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, 14], "label": "Delete", "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "label": "PgDn", "x": 17.25, "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": "SQ", "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "label": "Enter", "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "label": "Left Shift", "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 1], "label": "Z", "x": 2.25, "y": 4.25},
+ {"matrix": [4, 2], "label": "X", "x": 3.25, "y": 4.25},
+ {"matrix": [4, 3], "label": "C", "x": 4.25, "y": 4.25},
+ {"matrix": [4, 4], "label": "V", "x": 5.25, "y": 4.25},
+ {"matrix": [4, 5], "label": "B", "x": 6.25, "y": 4.25},
+ {"matrix": [4, 6], "label": "N", "x": 7.25, "y": 4.25},
+ {"matrix": [4, 7], "label": "M", "x": 8.25, "y": 4.25},
+ {"matrix": [4, 8], "label": "<", "x": 9.25, "y": 4.25},
+ {"matrix": [4, 9], "label": ">", "x": 10.25, "y": 4.25},
+ {"matrix": [4, 10], "label": "?", "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "label": "Right Shift", "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "label": "Right Shift", "x": 14, "y": 4.25},
+ {"matrix": [4, 15], "label": "\u2191", "x": 16.25, "y": 4.25},
+
+ {"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, 5], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 10], "label": "Alt", "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 11], "label": "Menu", "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "label": "Ctrl", "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 14], "label": "\u2190", "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25}
+ ]
}
}
}
diff --git a/keyboards/lucid/velvet_hotswap/keymaps/default/keymap.c b/keyboards/lucid/velvet_hotswap/keymaps/default/keymap.c
index 93c617b1a177..23e76c78544f 100644
--- a/keyboards/lucid/velvet_hotswap/keymaps/default/keymap.c
+++ b/keyboards/lucid/velvet_hotswap/keymaps/default/keymap.c
@@ -20,22 +20,22 @@ enum layers {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_LAYER0] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSPC, 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_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+
+ [_LAYER0] = LAYOUT_tkl_f13_ansi_split_bs_rshift(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [_LAYER1] = 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,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_LAYER1] = LAYOUT_tkl_f13_ansi_split_bs_rshift(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/lucid/velvet_hotswap/keymaps/via/keymap.c b/keyboards/lucid/velvet_hotswap/keymaps/via/keymap.c
index bd0122a4a8e0..b7257c8274be 100644
--- a/keyboards/lucid/velvet_hotswap/keymaps/via/keymap.c
+++ b/keyboards/lucid/velvet_hotswap/keymaps/via/keymap.c
@@ -23,39 +23,39 @@ enum layers {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ [_LAYER0] = LAYOUT_tkl_f13_ansi_split_bs_rshift(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [_LAYER1] = 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,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_LAYER1] = LAYOUT_tkl_f13_ansi_split_bs_rshift(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [_LAYER2] = 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,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_LAYER2] = LAYOUT_tkl_f13_ansi_split_bs_rshift(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [_LAYER3] = 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,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_LAYER3] = LAYOUT_tkl_f13_ansi_split_bs_rshift(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/lucid/velvet_hotswap/matrix_diagram.md b/keyboards/lucid/velvet_hotswap/matrix_diagram.md
new file mode 100644
index 000000000000..7ee3ce0403da
--- /dev/null
+++ b/keyboards/lucid/velvet_hotswap/matrix_diagram.md
@@ -0,0 +1,21 @@
+# Matrix Diagram for FJLaboratories Velvet Hotswap
+
+```
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+│00 ││01 │02 │03 │04 ││05 │06 │07 │08 ││09 │0A │0B │0C ││0D ││0E │0F │0G │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │3C │1D ││1E │1F │1G │ │1D │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ └───────┘
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D ││2E │2F │2G │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ ┌──────────┐
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4C │4D │ │4F │ │4C │ 2.75u RShift
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐ └──────────┘
+│50 │51 │52 │55 │59 │5A │5B │5D ││5E │5F │5G │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│50 │51 │52 │55 │5A │5B │5D │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/lucid/velvet_solder/info.json b/keyboards/lucid/velvet_solder/info.json
index e1469cb813c6..1cc8e43cdbc3 100644
--- a/keyboards/lucid/velvet_solder/info.json
+++ b/keyboards/lucid/velvet_solder/info.json
@@ -23,8 +23,11 @@
},
"processor": "at90usb646",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "label": "Esc", "x": 0, "y": 0},
{"matrix": [0, 1], "label": "F1", "x": 1.25, "y": 0},
@@ -108,7 +111,604 @@
{"matrix": [4, 10], "label": ">", "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "label": "?", "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "label": "Right Shift", "x": 12.25, "y": 4.25, "w": 1.75},
- {"matrix": [4, 13], "label": "Right Shift", "x": 12.25, "y": 4.25},
+ {"matrix": [4, 13], "label": "Right Shift", "x": 14, "y": 4.25},
+ {"matrix": [4, 15], "label": "\u2191", "x": 16.25, "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, 4], "x": 3.75, "y": 5.25, "w": 2.75},
+ {"matrix": [5, 5], "x": 6.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 8], "x": 7.75, "y": 5.25, "w": 2.25},
+ {"matrix": [5, 9], "label": "Alt", "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "label": "Win", "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "label": "Menu", "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, 14], "label": "\u2190", "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi": {
+ "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, 10], "label": "F10", "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "label": "F11", "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "label": "F12", "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "label": "F13", "x": 14, "y": 0},
+ {"matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "label": "Pause", "x": 17.25, "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": "Back Space", "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "label": "PgUp", "x": 17.25, "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, 14], "label": "Delete", "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "label": "PgDn", "x": 17.25, "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": "SQ", "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "label": "Enter", "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "label": "Left 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": "Right Shift", "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "label": "\u2191", "x": 16.25, "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, 5], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 9], "label": "Alt", "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "label": "Win", "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "label": "Menu", "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, 14], "label": "\u2190", "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_split_bs_rshift": {
+ "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, 10], "label": "F10", "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "label": "F11", "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "label": "F12", "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "label": "F13", "x": 14, "y": 0},
+ {"matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "label": "Pause", "x": 17.25, "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": "Back Space", "x": 13, "y": 1.25},
+ {"matrix": [3, 14], "label": "Back Space", "x": 14, "y": 1.25},
+ {"matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "label": "PgUp", "x": 17.25, "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, 14], "label": "Delete", "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "label": "PgDn", "x": 17.25, "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": "SQ", "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "label": "Enter", "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "label": "Left 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": "Right Shift", "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "label": "Right Shift", "x": 14, "y": 4.25},
+ {"matrix": [4, 15], "label": "\u2191", "x": 16.25, "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, 5], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 9], "label": "Alt", "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "label": "Win", "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "label": "Menu", "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, 14], "label": "\u2190", "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_split_space_split_bs_rshift": {
+ "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, 10], "label": "F10", "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "label": "F11", "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "label": "F12", "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "label": "F13", "x": 14, "y": 0},
+ {"matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "label": "Pause", "x": 17.25, "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": "Back Space", "x": 13, "y": 1.25},
+ {"matrix": [3, 14], "label": "Back Space", "x": 14, "y": 1.25},
+ {"matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "label": "PgUp", "x": 17.25, "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, 14], "label": "Delete", "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "label": "PgDn", "x": 17.25, "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": "SQ", "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "label": "Enter", "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "label": "Left 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": "Right Shift", "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "label": "Right Shift", "x": 14, "y": 4.25},
+ {"matrix": [4, 15], "label": "\u2191", "x": 16.25, "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, 4], "x": 3.75, "y": 5.25, "w": 2.75},
+ {"matrix": [5, 5], "x": 6.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 8], "x": 7.75, "y": 5.25, "w": 2.25},
+ {"matrix": [5, 9], "label": "Alt", "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "label": "Win", "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "label": "Menu", "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, 14], "label": "\u2190", "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso": {
+ "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, 10], "label": "F10", "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "label": "F11", "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "label": "F12", "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "label": "F13", "x": 14, "y": 0},
+ {"matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "label": "Pause", "x": 17.25, "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": "Back Space", "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "label": "PgUp", "x": 17.25, "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, 14], "label": "Delete", "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "label": "PgDn", "x": 17.25, "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": "SQ", "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "label": "~", "x": 12.75, "y": 3.25},
+ {"matrix": [2, 13], "label": "Enter", "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"matrix": [4, 0], "label": "Left Shift", "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "label": "|", "x": 1.25, "y": 4.25, "w": 1},
+ {"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": "Right Shift", "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "label": "\u2191", "x": 16.25, "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, 5], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 9], "label": "Alt", "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "label": "Win", "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "label": "Menu", "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, 14], "label": "\u2190", "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_split_bs_rshift": {
+ "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, 10], "label": "F10", "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "label": "F11", "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "label": "F12", "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "label": "F13", "x": 14, "y": 0},
+ {"matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "label": "Pause", "x": 17.25, "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": "Back Space", "x": 13, "y": 1.25},
+ {"matrix": [3, 14], "label": "Back Space", "x": 14, "y": 1.25},
+ {"matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "label": "PgUp", "x": 17.25, "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, 14], "label": "Delete", "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "label": "PgDn", "x": 17.25, "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": "SQ", "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "label": "~", "x": 12.75, "y": 3.25},
+ {"matrix": [2, 13], "label": "Enter", "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"matrix": [4, 0], "label": "Left Shift", "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "label": "|", "x": 1.25, "y": 4.25, "w": 1},
+ {"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": "Right Shift", "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "label": "Right Shift", "x": 14, "y": 4.25},
+ {"matrix": [4, 15], "label": "\u2191", "x": 16.25, "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, 5], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 9], "label": "Alt", "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "label": "Win", "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "label": "Menu", "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, 14], "label": "\u2190", "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "label": "\u2193", "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "label": "\u2192", "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_split_space_split_bs_rshift": {
+ "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, 10], "label": "F10", "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "label": "F11", "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "label": "F12", "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "label": "F13", "x": 14, "y": 0},
+ {"matrix": [0, 14], "label": "PrtSc", "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "label": "Scroll Lock", "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "label": "Pause", "x": 17.25, "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": "Back Space", "x": 13, "y": 1.25},
+ {"matrix": [3, 14], "label": "Back Space", "x": 14, "y": 1.25},
+ {"matrix": [1, 14], "label": "Insert", "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "label": "Home", "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "label": "PgUp", "x": 17.25, "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, 14], "label": "Delete", "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "label": "End", "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "label": "PgDn", "x": 17.25, "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": "SQ", "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "label": "~", "x": 12.75, "y": 3.25},
+ {"matrix": [2, 13], "label": "Enter", "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"matrix": [4, 0], "label": "Left Shift", "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "label": "|", "x": 1.25, "y": 4.25, "w": 1},
+ {"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": "Right Shift", "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "label": "Right Shift", "x": 14, "y": 4.25},
{"matrix": [4, 15], "label": "\u2191", "x": 16.25, "y": 4.25},
{"matrix": [5, 0], "label": "Ctrl", "x": 0, "y": 5.25, "w": 1.25},
@@ -116,7 +716,7 @@
{"matrix": [5, 2], "label": "Alt", "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 4], "x": 3.75, "y": 5.25, "w": 2.75},
{"matrix": [5, 5], "x": 6.5, "y": 5.25, "w": 1.25},
- {"matrix": [5, 8], "x": 6.75, "y": 5.25, "w": 2.25},
+ {"matrix": [5, 8], "x": 7.75, "y": 5.25, "w": 2.25},
{"matrix": [5, 9], "label": "Alt", "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [5, 10], "label": "Win", "x": 11.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 11], "label": "Menu", "x": 12.5, "y": 5.25, "w": 1.25},
diff --git a/keyboards/lucid/velvet_solder/keymaps/default/keymap.c b/keyboards/lucid/velvet_solder/keymaps/default/keymap.c
index dbe2f58a81ad..57fa9bf2bc02 100644
--- a/keyboards/lucid/velvet_solder/keymaps/default/keymap.c
+++ b/keyboards/lucid/velvet_solder/keymaps/default/keymap.c
@@ -20,22 +20,22 @@ enum layers {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_LAYER0] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSPC, KC_ENT,
- KC_LSFT, 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_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+
+ [_LAYER0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, 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_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [_LAYER1] = 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,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_LAYER1] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
diff --git a/keyboards/lucid/velvet_solder/keymaps/via/keymap.c b/keyboards/lucid/velvet_solder/keymaps/via/keymap.c
index b6d8377e4c49..2c7cd72db8b4 100644
--- a/keyboards/lucid/velvet_solder/keymaps/via/keymap.c
+++ b/keyboards/lucid/velvet_solder/keymaps/via/keymap.c
@@ -23,39 +23,39 @@ enum layers {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, 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_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ [_LAYER0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, 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_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [_LAYER1] = 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,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_LAYER1] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [_LAYER2] = 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,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_LAYER2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
- [_LAYER3] = 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,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_LAYER3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
-};
\ No newline at end of file
+};
diff --git a/keyboards/lucid/velvet_solder/matrix_diagram.md b/keyboards/lucid/velvet_solder/matrix_diagram.md
new file mode 100644
index 000000000000..3269c061aa93
--- /dev/null
+++ b/keyboards/lucid/velvet_solder/matrix_diagram.md
@@ -0,0 +1,30 @@
+# Matrix Diagram for FJLaboratories Velvet Solder
+
+```
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+│00 ││01 │02 │03 │04 ││05 │06 │07 │08 ││09 │0A │0B │0C ││0D ││0E │0F │0G │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │3E ││1E │1F │1G │ │1D │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ └─┬─────┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D ││2E │2F │2G │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘ ┌──┴┐2D │ ISO Enter
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │ │3D │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ └───┴────┘
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │ │4F │
+├────┼───┴┬──┴─┬─┴───┴───┴┬──┴─┬─┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
+│50 │51 │52 │54 │55 │58 │59 │5A │5B │5D ││5E │5F │5G │
+└────┴────┴────┴──────────┴────┴────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌────────┐ ┌──────────┐
+│40 │ 2.25u LShift 2.75u RShift │4C │
+└────────┘ └──────────┘
+┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
+│50 │51 │52 │55 │59 │5A │5B │5D │ Standard
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌─────┬───┬─────┬──────────┬─────┬──────────┬─────┬───┬─────┐
+│50 │51 │52 │54 │55 │58 │5A │5B │5D │ Tsangan/WKL with Split Spacebar
+└─────┴───┴─────┴──────────┴─────┴──────────┴─────┴───┴─────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│50 │51 │52 │55 │5A │5B │5D │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/lw75/info.json b/keyboards/lw75/info.json
index d236546c3bff..bb9aceb95f9f 100644
--- a/keyboards/lw75/info.json
+++ b/keyboards/lw75/info.json
@@ -107,9 +107,9 @@
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
- {"matrix": [4, 13], "x": 15.5, "y": 4.25},
+ {"matrix": [4, 13], "x": 14.25, "y": 4.5},
- {"matrix": [4, 14], "x": 14.25, "y": 4.5},
+ {"matrix": [4, 14], "x": 15.5, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
@@ -211,9 +211,9 @@
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
- {"matrix": [4, 13], "x": 15.5, "y": 4.25},
+ {"matrix": [4, 13], "x": 14.25, "y": 4.5},
- {"matrix": [4, 14], "x": 14.25, "y": 4.5},
+ {"matrix": [4, 14], "x": 15.5, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
@@ -315,9 +315,9 @@
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
- {"matrix": [4, 13], "x": 15.5, "y": 4.25},
+ {"matrix": [4, 13], "x": 14.25, "y": 4.5},
- {"matrix": [4, 14], "x": 14.25, "y": 4.5},
+ {"matrix": [4, 14], "x": 15.5, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
@@ -420,9 +420,9 @@
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
- {"matrix": [4, 13], "x": 15.5, "y": 4.25},
+ {"matrix": [4, 13], "x": 14.25, "y": 4.5},
- {"matrix": [4, 14], "x": 14.25, "y": 4.5},
+ {"matrix": [4, 14], "x": 15.5, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
diff --git a/keyboards/mazestudio/jocker/info.json b/keyboards/mazestudio/jocker/info.json
new file mode 100644
index 000000000000..5c5d4d6c0877
--- /dev/null
+++ b/keyboards/mazestudio/jocker/info.json
@@ -0,0 +1,150 @@
+{
+ "manufacturer": "Maze Studio",
+ "keyboard_name": "Jocker 1800",
+ "maintainer": "mazestd",
+ "bootloader": "atmel-dfu",
+ "processor": "atmega32u4",
+ "url": "",
+ "usb": {
+ "vid": "0x70F5",
+ "pid": "0x4A01",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "dynamic_keymap": {
+ "layer_count": 3
+ },
+ "bootmagic":{
+ "matrix": [1, 0]
+ },
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7", "C6", "B2", "B3"],
+ "rows": ["B1", "B0", "D1", "D0", "D5", "D3", "B7", "D2", "D4", "D6", "B4", "D7"]
+ },
+
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "Esc", "matrix": [1,0], "x":0, "y":0},
+ {"label": "F1", "matrix": [0,0], "x":1.25, "y":0},
+ {"label": "F2", "matrix": [1,1], "x":2.25, "y":0},
+ {"label": "F3", "matrix": [0,1], "x":3.25, "y":0},
+ {"label": "F4", "matrix": [1,2], "x":4.25, "y":0},
+ {"label": "F5", "matrix": [0,2], "x":5.5, "y":0},
+ {"label": "F6", "matrix": [1,3], "x":6.5, "y":0},
+ {"label": "F7", "matrix": [0,3], "x":7.5, "y":0},
+ {"label": "F8", "matrix": [1,4], "x":8.5, "y":0},
+ {"label": "F9", "matrix": [1,5], "x":9.75, "y":0},
+ {"label": "F10", "matrix": [0,5], "x":10.75, "y":0},
+ {"label": "F11", "matrix": [1,6], "x":11.75, "y":0},
+ {"label": "F12", "matrix": [0,6], "x":12.75, "y":0},
+ {"label": "F13", "matrix": [1,7], "x":14, "y":0},
+ {"label": "Scroll Lock", "matrix": [0,7], "x":15.25, "y":0},
+ {"label": "Pause Break", "matrix": [1,8], "x":16.5, "y":0},
+ {"label": "Insert", "matrix": [0,8], "x":17.5, "y":0},
+ {"label": "Home", "matrix": [1,9], "x":18.5, "y":0},
+ {"label": "Print Screen", "matrix": [0,9], "x":19.5, "y":0},
+
+ {"label": "~", "matrix": [3,0], "x":0, "y":1.25},
+ {"label": "1", "matrix": [2,0], "x":1, "y":1.25},
+ {"label": "2", "matrix": [3,1], "x":2, "y":1.25},
+ {"label": "3", "matrix": [2,1], "x":3, "y":1.25},
+ {"label": "4", "matrix": [3,2], "x":4, "y":1.25},
+ {"label": "5", "matrix": [2,2], "x":5, "y":1.25},
+ {"label": "6", "matrix": [3,3], "x":6, "y":1.25},
+ {"label": "7", "matrix": [2,3], "x":7, "y":1.25},
+ {"label": "8", "matrix": [3,4], "x":8, "y":1.25},
+ {"label": "9", "matrix": [2,4], "x":9, "y":1.25},
+ {"label": "0", "matrix": [3,5], "x":10, "y":1.25},
+ {"label": "-", "matrix": [2,5], "x":11, "y":1.25},
+ {"label": "=", "matrix": [3,6], "x":12, "y":1.25},
+ {"label": "|", "matrix": [2,6], "x":13, "y":1.25},
+ {"label": "Delete", "matrix": [3,7], "x":14, "y":1.25},
+ {"label": "Page Up", "matrix": [2,7], "x":15.25, "y":1.25},
+ {"label": "Num Lock", "matrix": [3,8], "x":16.5, "y":1.25},
+ {"label": "/", "matrix": [2,8], "x":17.5, "y":1.25},
+ {"label": "*", "matrix": [3,9], "x":18.5, "y":1.25},
+ {"label": "-", "matrix": [2,9], "x":19.5, "y":1.25},
+
+ {"label": "Tab", "matrix": [5,0], "x":0, "y":2.25, "w":1.5},
+ {"label": "Q", "matrix": [4,0], "x":1.5, "y":2.25},
+ {"label": "W", "matrix": [5,1], "x":2.5, "y":2.25},
+ {"label": "E", "matrix": [4,1], "x":3.5, "y":2.25},
+ {"label": "R", "matrix": [5,2], "x":4.5, "y":2.25},
+ {"label": "T", "matrix": [4,2], "x":5.5, "y":2.25},
+ {"label": "Y", "matrix": [5,3], "x":6.5, "y":2.25},
+ {"label": "U", "matrix": [4,3], "x":7.5, "y":2.25},
+ {"label": "I", "matrix": [5,4], "x":8.5, "y":2.25},
+ {"label": "O", "matrix": [4,4], "x":9.5, "y":2.25},
+ {"label": "P", "matrix": [5,5], "x":10.5, "y":2.25},
+ {"label": "[", "matrix": [4,5], "x":11.5, "y":2.25},
+ {"label": "]", "matrix": [5,6], "x":12.5, "y":2.25},
+ {"label": "Backspace", "matrix": [5,7], "x":13.5, "y":2.25, "w":1.5},
+ {"label": "Page Down", "matrix": [4,7], "x":15.25, "y":2.25},
+ {"label": "Num 7", "matrix": [5,8], "x":16.5, "y":2.25},
+ {"label": "Num 8", "matrix": [4,8], "x":17.5, "y":2.25},
+ {"label": "Num 9", "matrix": [5,9], "x":18.5, "y":2.25},
+ {"label": "Num Plus", "matrix": [4,9], "x":19.5, "y":2.25, "h":2},
+
+ {"label": "Caps Lock", "matrix": [7,0], "x":0, "y":3.25, "w":1.75},
+ {"label": "A", "matrix": [6,0], "x":1.75, "y":3.25},
+ {"label": "S", "matrix": [7,1], "x":2.75, "y":3.25},
+ {"label": "D", "matrix": [6,1], "x":3.75, "y":3.25},
+ {"label": "F", "matrix": [7,2], "x":4.75, "y":3.25},
+ {"label": "G", "matrix": [6,2], "x":5.75, "y":3.25},
+ {"label": "H", "matrix": [7,3], "x":6.75, "y":3.25},
+ {"label": "J", "matrix": [6,3], "x":7.75, "y":3.25},
+ {"label": "K", "matrix": [7,4], "x":8.75, "y":3.25},
+ {"label": "L", "matrix": [6,4], "x":9.75, "y":3.25},
+ {"label": ";", "matrix": [7,5], "x":10.75, "y":3.25},
+ {"label": "'", "matrix": [6,5], "x":11.75, "y":3.25},
+ {"label": "Enter", "matrix": [6,6], "x":12.75, "y":3.25, "w":2.25},
+ {"label": "Delete", "matrix": [6,7], "x":15.25, "y":3.25},
+ {"label": "Num 4", "matrix": [7,8], "x":16.5, "y":3.25},
+ {"label": "Num 5", "matrix": [6,8], "x":17.5, "y":3.25},
+ {"label": "Num 6", "matrix": [7,9], "x":18.5, "y":3.25},
+
+ {"label": "Left Shift", "matrix": [9,0], "x":0, "y":4.25, "w":2.25},
+ {"label": "Z", "matrix": [8,0], "x":2.25, "y":4.25},
+ {"label": "X", "matrix": [9,1], "x":3.25, "y":4.25},
+ {"label": "C", "matrix": [8,1], "x":4.25, "y":4.25},
+ {"label": "V", "matrix": [9,2], "x":5.25, "y":4.25},
+ {"label": "B", "matrix": [8,2], "x":6.25, "y":4.25},
+ {"label": "N", "matrix": [9,3], "x":7.25, "y":4.25},
+ {"label": "M", "matrix": [8,3], "x":8.25, "y":4.25},
+ {"label": ",", "matrix": [9,4], "x":9.25, "y":4.25},
+ {"label": ".", "matrix": [8,4], "x":10.25, "y":4.25},
+ {"label": "/", "matrix": [9,5], "x":11.25, "y":4.25},
+ {"label": "Right Shift", "matrix": [9,6], "x":12.25, "y":4.25, "w":1.75},
+ {"label": "Up", "matrix": [9,7], "x":14.25, "y":4.5},
+ {"label": "Num 1", "matrix": [9,8], "x":16.5, "y":4.25},
+ {"label": "Num 2", "matrix": [8,8], "x":17.5, "y":4.25},
+ {"label": "Num 3", "matrix": [9,9], "x":18.5, "y":4.25},
+ {"label": "Enter", "matrix": [8,9], "x":19.5, "y":4.25, "h":2},
+
+ {"label": "Left Ctrl", "matrix": [11,0], "x":0, "y":5.25, "w":1.25},
+ {"label": "Left Win", "matrix": [10,0], "x":1.25, "y":5.25, "w":1.25},
+ {"label": "Left Alt", "matrix": [11,1], "x":2.5, "y":5.25, "w":1.25},
+ {"label": "Space", "matrix": [10,2], "x":3.75, "y":5.25, "w":6.25},
+ {"label": "Right Alt", "matrix": [10,4], "x":10, "y":5.25, "w":1.5},
+ {"label": "Right Ctrl", "matrix": [10,5], "x":11.5, "y":5.25, "w":1.5},
+ {"label": "Left", "matrix": [10,6], "x":13.25, "y":5.5},
+ {"label": "Down", "matrix": [11,7], "x":14.25, "y":5.5},
+ {"label": "Right", "matrix": [10,7], "x":15.25, "y":5.5},
+ {"label": "Num 0", "matrix": [10,8], "x":16.5, "y":5.25, "w":2},
+ {"label": "Num Del", "matrix": [11,9], "x":18.5, "y":5.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/mazestudio/jocker/keymaps/default/keymap.c b/keyboards/mazestudio/jocker/keymaps/default/keymap.c
new file mode 100644
index 000000000000..b64c4a299f0c
--- /dev/null
+++ b/keyboards/mazestudio/jocker/keymaps/default/keymap.c
@@ -0,0 +1,16 @@
+// Copyright 2023 Maze Studio
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_SCRL, KC_PAUS, KC_INS, KC_HOME, KC_PSCR,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+
+ )
+};
\ No newline at end of file
diff --git a/keyboards/mazestudio/jocker/keymaps/via/keymap.c b/keyboards/mazestudio/jocker/keymaps/via/keymap.c
new file mode 100644
index 000000000000..b64c4a299f0c
--- /dev/null
+++ b/keyboards/mazestudio/jocker/keymaps/via/keymap.c
@@ -0,0 +1,16 @@
+// Copyright 2023 Maze Studio
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_SCRL, KC_PAUS, KC_INS, KC_HOME, KC_PSCR,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+
+ )
+};
\ No newline at end of file
diff --git a/keyboards/mazestudio/jocker/keymaps/via/rules.mk b/keyboards/mazestudio/jocker/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/mazestudio/jocker/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/mazestudio/jocker/readme.md b/keyboards/mazestudio/jocker/readme.md
new file mode 100644
index 000000000000..8dcc6390b08a
--- /dev/null
+++ b/keyboards/mazestudio/jocker/readme.md
@@ -0,0 +1,27 @@
+# Jocker 1800
+
+![jocker1800]( https://i.imgur.com/aQEiE4Hh.jpg )
+
+PCB Replacement for Austin 1800
+
+* Keyboard Maintainer: [Maze Studio](https://github.com/mazestd)
+* Hardware Supported: Jocker PCB, Atmega32u4
+* Hardware Availability: Local Group Buy
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mazestd/jocker:default
+
+Flashing example for this keyboard:
+
+ make mazestd/jocker:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (1,0) in the matrix or Escape Key and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/mazestudio/jocker/rules.mk b/keyboards/mazestudio/jocker/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/mazestudio/jocker/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/mechlovin/zed60/config.h b/keyboards/mechlovin/zed60/config.h
index ebee58857b6d..01e1b51b1cc9 100644
--- a/keyboards/mechlovin/zed60/config.h
+++ b/keyboards/mechlovin/zed60/config.h
@@ -21,7 +21,7 @@ along with this program. If not, see .
#define RGBLED_NUM 22
#define WS2812_SPI SPID1 // default: SPID1
-#define WS2812_SPI_MOSI_PAL_MODE 5 // MOSI pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 5
+#define WS2812_SPI_MOSI_PAL_MODE 6 // MOSI pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 5
# define RGBLIGHT_HUE_STEP 8
# define RGBLIGHT_SAT_STEP 8
diff --git a/keyboards/mechlovin/zed65/910/config.h b/keyboards/mechlovin/zed65/910/config.h
new file mode 100644
index 000000000000..a5902fa9c1d1
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2023 Mechlovin'
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define WS2812_SPI SPID1 // default: SPID1
+#define WS2812_SPI_MOSI_PAL_MODE 6 // MOSI pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 5
diff --git a/keyboards/mechlovin/zed65/910/halconf.h b/keyboards/mechlovin/zed65/910/halconf.h
new file mode 100644
index 000000000000..e4ef339ffb8c
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next
+
diff --git a/keyboards/mechlovin/zed65/910/info.json b/keyboards/mechlovin/zed65/910/info.json
new file mode 100644
index 000000000000..7874c09e2dd2
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/info.json
@@ -0,0 +1,350 @@
+{
+ "manufacturer": "Mechlovin Studio",
+ "url": "https://mechlovin.studio/",
+ "maintainer": "mechlovin",
+ "keyboard_name": "Zed65 910 Rev1",
+ "usb": {
+ "vid": "0x4D4C",
+ "pid": "0x6505",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "backlight": false,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "rows": ["B15", "B14", "B13", "B12", "A1"],
+ "cols": ["B11", "B10", "B2", "B1", "B0", "A6", "A5", "A4", "A3", "C13", "B7", "B6", "B5", "B4", "B3"]
+ },
+ "indicators": {
+ "caps_lock": "B9",
+ "on_state": 0
+ },
+ "diode_direction": "COL2ROW",
+ "rgblight": {
+ "led_count": 4,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "pin": "A7",
+ "driver": "spi"
+ },
+ "layouts": {
+ "LAYOUT_65_iso_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 12], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [1, 13], "x": 12.75, "y": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4},
+ {"matrix": [4, 10], "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12, "y": 4},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 12], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4},
+ {"matrix": [4, 10], "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12, "y": 4},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4},
+ {"matrix": [4, 10], "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12, "y": 4},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+
+ "LAYOUT_65_ansi_blocker_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mechlovin/zed65/910/keymaps/default/keymap.c b/keyboards/mechlovin/zed65/910/keymaps/default/keymap.c
new file mode 100644
index 000000000000..1c530e8420b9
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/*
+Copyright 2023 Mechlovin'
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_tsangan_split_bs(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
\ No newline at end of file
diff --git a/keyboards/mechlovin/zed65/910/keymaps/via/keymap.c b/keyboards/mechlovin/zed65/910/keymaps/via/keymap.c
new file mode 100644
index 000000000000..d41ff0347229
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/keymaps/via/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2023 Mechlovin'
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_tsangan_split_bs(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+
diff --git a/keyboards/mechlovin/zed65/910/keymaps/via/rules.mk b/keyboards/mechlovin/zed65/910/keymaps/via/rules.mk
new file mode 100644
index 000000000000..36b7ba9cbc98
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/mechlovin/zed65/910/mcuconf.h b/keyboards/mechlovin/zed65/910/mcuconf.h
new file mode 100644
index 000000000000..ab20db61c306
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/mcuconf.h
@@ -0,0 +1,23 @@
+/* Copyright 2023 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
diff --git a/keyboards/mechlovin/zed65/910/readme.md b/keyboards/mechlovin/zed65/910/readme.md
new file mode 100644
index 000000000000..7a207e2b4486
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/readme.md
@@ -0,0 +1,28 @@
+# zed65
+
+![Zed65](https://i.imgur.com/PevF9snh.png)
+
+A 65% PCB, APM32F103.
+
+* Keyboard Maintainer: [Mechlovin](https://github.com/mechlovin)
+* Hardware Supported: TGRxGSK 910
+* Hardware Availability: [Mechlovin' Studio](https://mechlovin.studio/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechlovin/zed65/910:default
+
+Flashing example for this keyboard:
+
+ make mechlovin/zed65/910:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 4 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Bootloader reset**: Hold down the key at (0,13) in the matrix (usually the Back Space) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/mechlovin/zed65/910/rules.mk b/keyboards/mechlovin/zed65/910/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/mechlovin/zed65/910/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/mechlovin/zed65/rev1/info.json b/keyboards/mechlovin/zed65/rev1/info.json
index 869564c6716c..55b3566b8b7f 100644
--- a/keyboards/mechlovin/zed65/rev1/info.json
+++ b/keyboards/mechlovin/zed65/rev1/info.json
@@ -42,6 +42,9 @@
"driver": "spi"
},
"community_layouts": ["65_ansi_blocker_tsangan"],
+ "layout_aliases": {
+ "LAYOUT_65_ansi_tsangan": "LAYOUT_65_ansi"
+ },
"layouts": {
"LAYOUT_65_iso_tsangan_split_bs": {
"layout": [
@@ -199,7 +202,7 @@
{"matrix": [4, 14], "x": 15, "y": 4}
]
},
- "LAYOUT_65_ansi_tsangan": {
+ "LAYOUT_65_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/mechlovin/zed65/rev1/matrix_diagram.md b/keyboards/mechlovin/zed65/rev1/matrix_diagram.md
new file mode 100644
index 000000000000..6af22df46c76
--- /dev/null
+++ b/keyboards/mechlovin/zed65/rev1/matrix_diagram.md
@@ -0,0 +1,36 @@
+# Matrix Diagram for Mechlovin Studio Zed65 Rev1
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │2C │0E │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │ │1E │ │1D │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2D ├───┤ ┌──┴─────┤ ANSI Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │1D │ │2E │ │2D │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤ └────────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+│40 │41 │42 │46 │49 │4A │4B │4C │4D │4E │
+└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+┌────────┐ ┌──────────┐
+│30 │ 2.25u LShift 2.75u RShift │3C │
+└────────┘ └──────────┘
+┌─────┬─────┬───────────────────────────┬───┬───┬───┐
+│40 │41 │46 │49 │4A │4B │ LWKL
+└─────┴─────┴───────────────────────────┴───┴───┴───┘
+┌────┬────┬────┬────────────────────────┬─────┬─────┐
+│40 │41 │42 │46 │49 │4A │ RWKL
+└────┴────┴────┴────────────────────────┴─────┴─────┘
+┌─────┬─────┬───────────────────────────┬─────┬─────┐
+│40 │41 │46 │49 │4A │ WKL
+└─────┴─────┴───────────────────────────┴─────┴─────┘
+┌────┬────┬────┬────────────────────────┬────┬────┐
+│40 │41 │42 │46 │49 │4A │ Blocker
+└────┴────┴────┴────────────────────────┴────┴────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┐
+│40 │41 │42 │46 │4A │ Blocker Tsangan
+└─────┴───┴─────┴───────────────────────────┴─────┘
+```
diff --git a/keyboards/mechwild/bde/rev2/keymaps/miketronic/config.h b/keyboards/mechwild/bde/rev2/keymaps/miketronic/config.h
new file mode 100644
index 000000000000..658c829f048a
--- /dev/null
+++ b/keyboards/mechwild/bde/rev2/keymaps/miketronic/config.h
@@ -0,0 +1,10 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+
+# define TAPPING_TERM 160
+# define TAPPING_TERM_PER_KEY
+# define HOLD_ON_OTHER_KEY_PRESS
+# define QUICK_TAP_TERM TAPPING_TERM / 2
+# define QUICK_TAP_TERM_PER_KEY
diff --git a/keyboards/mechwild/bde/rev2/keymaps/miketronic/keymap.c b/keyboards/mechwild/bde/rev2/keymaps/miketronic/keymap.c
new file mode 100644
index 000000000000..e8a26fd28a22
--- /dev/null
+++ b/keyboards/mechwild/bde/rev2/keymaps/miketronic/keymap.c
@@ -0,0 +1,221 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* WORKMAN
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ Q │ D │ R │ W │ B │ 7 │ 8 │ 9 │ J │ F │ U │ P │ BSPC│BSPC │
+ * │ ESC │ │ │ │ SYM │ │ │ │ SYM │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │ A │ S │ H ┃ T ┃ G │ 4 │ 5 │ 6 │ Y ┃ N ┃ E │ O │ I │UP │
+ * │SHIFT│ │ ┃ EX ┃ │ │ │ │ ┃ ┃ │ │ │RIGHT│
+ * ├─────┼─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ Z │ X │ M │ C │ V │ 1 │ 2 │ 3 │ K │ L │ SPC │ SPC │ENTER│DOWN │
+ * │ FN │ CTRL│ OS │ ALT │LOWER│ │ 0 │ │RAISE│RAISE│ │ │ │LEFT │
+ * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ *
+ */
+
+ [_WM] = LAYOUT_3x14_wrapper (
+ _____________WORKMAN_310_001_L_____________, _________NUMBER_01__________, _____________WORKMAN_310_001_R_____________, KC_BSPC,
+ _____________WORKMAN_310_002_L_____________, _________NUMBER_02__________, _____________WORKMAN_310_002_R_____________, TD_UR,
+ _____________WORKMAN_310_003_L_____________, _________NUMBER_03__________, _____________WORKMAN_310_003_R_____________, TD_DL
+ ),
+
+ [_QW] = LAYOUT_3x14_wrapper (
+ _________________QWERTY_L1_________________, _________NUMBER_01__________, _________________QWERTY_R1_________________, KC_MUTE,
+ _________________QWERTY_L2_________________, _________NUMBER_02__________, _________________QWERTY_R2_________________, TD_UR,
+ _________________QWERTY_L3_________________, _________NUMBER_03__________, _________________QWERTY_R3_________________, TD_DL
+ ),
+
+
+ /* LOWER
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ () │ [] │ /\ │ │ │ │ 7 │ 8 │ 9 │ 0 │ │ │ │LEAD │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ @ # │ & % │ ┃ ┃ │ ┃ 4 ┃ 5 │ 6 │ │ │ │ │ │
+ * │ │ │ ┃ ┃ │ ┃ ┃ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ 0 │ 1 │ 2 │ 3 │ . │ │ │ │ │
+ * │ │ │ │ │LOWER│ │ │ 0 │ │ ENT │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ *
+ */
+
+ [_LOWER] = LAYOUT_3x14_wrapper (
+ _______________LOWER_310_L1________________, _________NUMBER_01__________, _______________LOWER_310_R1________________, QK_LEAD,
+ _______________LOWER_310_L2________________, _________NUMBER_02__________, _______________LOWER_310_R2________________, TD_UR,
+ _______________LOWER_310_L3________________, _________NUMBER_03__________, _______________LOWER_310_R3________________, TD_DL
+ ),
+
+
+ /* RAISE
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ BOOT│DEBUG│ │ │ MAKE│ │ F7 │ F8 │ F9 │ F10 │ │ │ │LEAD │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ RGB │ RGB ┃ RGB ┃ RGB │ _ ┃ F4 ┃ F5 │ F6 │ F11 │ │ │ │ │
+ * │ │ TOG │ MOD ┃ HUI ┃ HUD │ - ┃ ┃ _ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ RGB │ RGB │ RGB │ RGB │RAISE│ F1 │ F2 │ F3 │ F12 │ │ │ │ │
+ * │ │ SAI │ SAD │ VAI │ VAD │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ *
+ */
+
+ [_RAISE] = LAYOUT_3x14_wrapper (
+ _______________RAISE_310_L1________________, _________NUMBER_01__________, _______________RAISE_310_R1________________, QK_LEAD,
+ _______________RAISE_310_L2________________, _________NUMBER_02__________, _______________RAISE_310_R2________________, TD_UR,
+ _______________RAISE_310_L3________________, _________NUMBER_03__________, _______________RAISE_310_R3________________, TD_DL
+ ),
+
+
+ /* EXTRAS
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ ! │ │ │ │ │ │ /\ | () | [] | ; │ │ │ │LEAD │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ ┃EXTRA┃ │ ┃ @ # ┃ & % | | ' | │ │ │ │
+ * │ │ │ ┃ ┃ │ ┃ ┃ _ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ , | . | ? │ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [_EX] = LAYOUT_3x14_wrapper (
+ ______________EXTRAS_310_L1________________, _________NUMBER_01__________, ______________EXTRAS_310_R1________________, QK_LEAD,
+ ______________EXTRAS_310_L2________________, _________NUMBER_02__________, ______________EXTRAS_310_R2________________, TD_UR,
+ ______________EXTRAS_310_L3________________, _________NUMBER_03__________, ______________EXTRAS_310_R3________________, TD_DL
+),
+
+
+ /* FUNCTION
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │COPY │CLIP │ SS │ │ │ │ │ │ | /\ │ UP │ │ DEL │LEAD │
+ * │PASTE│ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┼─────╆━━━━━╅─────┼─────┼─────┼─────┤
+ * │SHIFT│ M05 │ M06 ┃ M07 ┃ M08 │ │ │ │ ┃ LEFT┃ DOWN│RIGHT│ │ UP │
+ * │ │ │ ┃ ┃ │ │ │ │ ┃ ┃ │ │ │RIGHT│
+ * ├─────┼─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┼─────╄━━━━━╃─────┼─────┼─────┼─────┤
+ * │ │ M01 │ M02 │ M03 │ M04 │ │ │ | | │ , │ . │ │DOWN │
+ * │ FN │ │ │ │ │ │ │ │ │ │ │ │ │LEFT │
+ * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [_FN] = LAYOUT_3x14_wrapper (
+ _____________FUNCTION_310_L1_______________, _________NUMBER_01__________, _____________FUNCTION_310_R1_______________, QK_LEAD,
+ _____________FUNCTION_310_L2_______________, _________NUMBER_02__________, _____________FUNCTION_310_R2_______________, TD_UR,
+ _____________FUNCTION_310_L3_______________, _________NUMBER_03__________, _____________FUNCTION_310_R3_______________, TD_DL
+ ),
+
+
+
+ /* SYMBOLS
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │ $ │ ^ │ < │ > │ │ │ │ | │ [ │ ] │ - │
+ * │ │ │ │ │ SYMB│ │ SYMB│ │ │ │ │
+ * ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
+ * │ % │ : │ ; ┃ + ┃ = │ │ ┃ ┃ ( │ ) │ _ │
+ * │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │
+ * ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
+ * │ & │ ' │ " │ * │ # │ │ ! │ ? │ / │ \ │ @ │
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [_SYMB] = LAYOUT_3x14_wrapper (
+ _____________SYMBOLS_310_L1________________, _________NUMBER_01__________, _____________SYMBOLS_310_R1________________, QK_LEAD,
+ _____________SYMBOLS_310_L2________________, _________NUMBER_02__________, _____________SYMBOLS_310_R2________________, TD_UR,
+ _____________SYMBOLS_310_L3________________, _________NUMBER_03__________, _____________SYMBOLS_310_R3________________, TD_DL
+ ),
+
+
+
+};
+
+
+#ifndef NUM_DIRECTIONS
+# define NUM_DIRECTIONS 2
+#endif
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_WM] = { ENCODER_CCW_CW(LCTL(KC_V), LCTL(KC_C)) },
+ [_QW] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_LOWER] = { ENCODER_CCW_CW(____, ____) },
+ [_RAISE] = { ENCODER_CCW_CW(____, ____) },
+ [_EX] = { ENCODER_CCW_CW(____, ____) },
+ [_FN] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD) },
+ [_SYMB] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
+
+bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_A):
+ // Do not force the mod-tap key press to be handled as a modifier
+ // if any other key was pressed while the mod-tap key is held down.
+ return false;
+ case TEX:
+ return false;
+ case CTRLX:
+ return false;
+ case FNZ:
+ return false;
+ case MGUI:
+ return false;
+ case VLOWER:
+ return false;
+ case KRAISE:
+ return false;
+ default:
+ // Force the dual-role key press to be handled as a modifier if any
+ // other key was pressed while the mod-tap key is held down.
+ return true;
+ }
+}
+
+#ifdef AUDIO_ENABLE
+float leader_start_song[][2] = SONG(ONE_UP_SOUND);
+float leader_succeed_song[][2] = SONG(ALL_STAR);
+float leader_fail_song[][2] = SONG(RICK_ROLL);
+#endif
+
+void matrix_scan_user(void);
+
+void leader_start_user(void) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(leader_start_song);
+#endif
+}
+
+bool did_leader_succeed;
+
+void leader_end_user(void) {
+ did_leader_succeed = false;
+
+ if (leader_sequence_one_key(KC_E)) {
+ SEND_STRING(SS_LCTL(SS_LSFT("t")));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_E, KC_D)) {
+ SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
+ did_leader_succeed = true;
+ } else if (leader_sequence_two_keys(KC_A, KC_T)) {
+ SEND_STRING("@guidehouse.com");
+ did_leader_succeed = true;
+ }
+
+
+#ifdef AUDIO_ENABLE
+ if (did_leader_succeed) {
+ PLAY_SONG(leader_succeed_song);
+ } else {
+ PLAY_SONG(leader_fail_song);
+ }
+#endif
+}
\ No newline at end of file
diff --git a/keyboards/mechwild/bde/rev2/keymaps/miketronic/rules.mk b/keyboards/mechwild/bde/rev2/keymaps/miketronic/rules.mk
new file mode 100644
index 000000000000..540fbaecb220
--- /dev/null
+++ b/keyboards/mechwild/bde/rev2/keymaps/miketronic/rules.mk
@@ -0,0 +1,13 @@
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+EXTRAKEY_ENABLE = yes # Audio control and System control
+TAP_DANCE_ENABLE = yes # Tap Dance keys
+NKRO_ENABLE = yes # Enable N-Key Rollover
+MACROS_ENABLED = yes
+LEADER_ENABLE = yes
+
+ENCODER_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+OLED_ENABLE = yes # Enable OLED Screen
+OLED_DRIVER = SSD1306 # Set OLED Driver
+
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
\ No newline at end of file
diff --git a/keyboards/mode/m256wh/config.h b/keyboards/mode/m256wh/config.h
new file mode 100644
index 000000000000..c976b6bcc5bf
--- /dev/null
+++ b/keyboards/mode/m256wh/config.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2022 Gondolindrim
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define WS2812_PWM_COMPLEMENTARY_OUTPUT
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
+#define WS2812_DMA_CHANNEL 6
+
+#define EECONFIG_KB_DATA_SIZE (1)
diff --git a/keyboards/mode/m256wh/halconf.h b/keyboards/mode/m256wh/halconf.h
new file mode 100644
index 000000000000..485d48ef3067
--- /dev/null
+++ b/keyboards/mode/m256wh/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+#define HAL_USE_PAL TRUE
+
+#include_next
diff --git a/keyboards/mode/m256wh/info.json b/keyboards/mode/m256wh/info.json
new file mode 100644
index 000000000000..3e2d0eb27644
--- /dev/null
+++ b/keyboards/mode/m256wh/info.json
@@ -0,0 +1,116 @@
+{
+ "manufacturer": "Mode Designs",
+ "keyboard_name": "M256W-H",
+ "maintainer": "Gondolindrim",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "extrakey": true,
+ "lto": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["C9", "B1", "B0", "A10", "A15", "C10", "C11", "D2", "B3", "B4", "B8", "B9", "C0", "C1", "C2", "C4"],
+ "rows": ["C6", "C7", "C8", "C12", "A7", "C5"]
+ },
+ "processor": "STM32F401",
+ "rgblight": {
+ "led_count": 30,
+ "animations": {
+ "breathing": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "knight": true,
+ "christmas": true,
+ "static_gradient": true,
+ "rgb_test": true,
+ "alternating": true,
+ "twinkle": true
+ }
+ },
+ "url": "https://modedesigns.com/pages/envoy",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x5754",
+ "vid": "0x00DE"
+ },
+ "ws2812": {
+ "pin": "B15"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0)", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"label": "Del", "matrix": [0, 14], "x": 15, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "\\|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Page Up", "matrix": [1, 14], "x": 15, "y": 1},
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Page Down", "matrix": [2, 14], "x": 15, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "End", "matrix": [3, 14], "x": 15, "y": 3},
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [5, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [5, 15], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 11], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 12], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mode/m256wh/keymaps/default/keymap.c b/keyboards/mode/m256wh/keymaps/default/keymap.c
new file mode 100644
index 000000000000..fcf350323047
--- /dev/null
+++ b/keyboards/mode/m256wh/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_DEL ,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_PGDN,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_END ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_LEFT, KC_DOWN, KC_RGHT
+),
+[1] = LAYOUT(
+ QK_BOOT, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_TRNS, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+)
+};
diff --git a/keyboards/mode/m256wh/keymaps/via/keymap.c b/keyboards/mode/m256wh/keymaps/via/keymap.c
new file mode 100644
index 000000000000..fcf350323047
--- /dev/null
+++ b/keyboards/mode/m256wh/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_DEL ,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_PGDN,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_END ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_LEFT, KC_DOWN, KC_RGHT
+),
+[1] = LAYOUT(
+ QK_BOOT, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_TRNS, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+)
+};
diff --git a/keyboards/mode/m256wh/keymaps/via/rules.mk b/keyboards/mode/m256wh/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/mode/m256wh/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/mode/m256wh/m256wh.c b/keyboards/mode/m256wh/m256wh.c
new file mode 100644
index 000000000000..cec427f329cb
--- /dev/null
+++ b/keyboards/mode/m256wh/m256wh.c
@@ -0,0 +1,154 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifdef VIA_ENABLE
+bool is_second_rgb_row_active;
+enum via_secondrow_enable {
+ id_is_second_rgb_row_active = 0
+};
+
+// Sets the second RGB row on or off; done by setting effect range.
+void set_second_rgb_row(bool is_active) {
+ rgblight_disable_noeeprom();
+ switch (is_active)
+ {
+ case true:
+ {
+ rgblight_set_effect_range(0,30);
+ break;
+ }
+ case false:
+ {
+ rgblight_set_effect_range(0,15);
+ break;
+ }
+ }
+ rgblight_enable_noeeprom();
+}
+
+// At the keyboard start, retrieves PMEM stored configs
+void keyboard_post_init_kb(void) {
+ rgblight_disable_noeeprom();
+ wait_ms(20);
+ eeconfig_read_kb_datablock(&is_second_rgb_row_active);
+ set_second_rgb_row(is_second_rgb_row_active);
+ rgblight_reload_from_eeprom();
+ rgblight_set();
+}
+
+void eeconfig_init_kb(void) { // EEPROM is getting reset!
+ // rgblight_disable(); // Enable RGB by default
+ // Define the defualt value and write it to EEPROM
+ is_second_rgb_row_active = true;
+ set_second_rgb_row(is_second_rgb_row_active);
+ eeconfig_update_kb_datablock(&is_second_rgb_row_active);
+
+ // Disable rgblight by default on EEPROM initialization
+ rgblight_disable();
+
+ // Run user code if any
+ eeconfig_init_user();
+}
+
+void secondrow_config_set_value( uint8_t *data )
+{
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch ( *value_id )
+ {
+ case id_is_second_rgb_row_active:
+ {
+ is_second_rgb_row_active = (bool) *value_data;
+ break;
+ }
+ default:
+ {
+ is_second_rgb_row_active = true;
+ }
+ }
+ set_second_rgb_row(is_second_rgb_row_active);
+}
+
+void secondrow_config_get_value( uint8_t *data )
+{
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch ( *value_id )
+ {
+ case id_is_second_rgb_row_active:
+ {
+ *value_data = is_second_rgb_row_active;
+ break;
+ }
+ default:
+ {
+ *value_data = false;
+ }
+ }
+}
+
+void secondrow_config_save(void)
+{
+
+ eeconfig_update_kb_datablock(&is_second_rgb_row_active);
+}
+
+void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
+ // data = [ command_id, channel_id, value_id, value_data ]
+ uint8_t *command_id = &(data[0]);
+ uint8_t *channel_id = &(data[1]);
+ uint8_t *value_id_and_data = &(data[2]);
+
+ if ( *channel_id == id_custom_channel ) {
+ switch ( *command_id )
+ {
+ case id_custom_set_value:
+ {
+ secondrow_config_set_value(value_id_and_data);
+ break;
+ }
+ case id_custom_get_value:
+ {
+ secondrow_config_get_value(value_id_and_data);
+ break;
+ }
+ case id_custom_save:
+ {
+ secondrow_config_save();
+ break;
+ }
+ default:
+ {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+ return;
+ }
+
+ // Return the unhandled state
+ *command_id = id_unhandled;
+
+ // DO NOT call raw_hid_send(data,length) here, let caller do this
+}
+#endif
diff --git a/keyboards/mode/m256wh/mcuconf.h b/keyboards/mode/m256wh/mcuconf.h
new file mode 100644
index 000000000000..3d1d05c307c4
--- /dev/null
+++ b/keyboards/mode/m256wh/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_ADVANCED
+#define STM32_PWM_USE_ADVANCED TRUE
+
+#undef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
diff --git a/keyboards/mode/m256wh/readme.md b/keyboards/mode/m256wh/readme.md
new file mode 100644
index 000000000000..8b253f427e14
--- /dev/null
+++ b/keyboards/mode/m256wh/readme.md
@@ -0,0 +1,25 @@
+# Mode M256-WH PCB QMK Firmware
+
+![m256wh](https://imgur.com/97KRZCrh.jpg)
+
+The M256-WH is the hotswap version PCB support for the Mode Envoy.
+
+* Keyboard Maintainer: [Gondolindrim](https://github.com/Gondolindrim)
+* Hardware Supported: proprietary PCBs using the STM32F401 microcontroller;
+* Hardware Availability: as of april 18, these PCBs are on the verge of being sold with the first kits of the Mode Envoy.
+
+## How to flash
+
+In order to flash this PCB, first build the default layout (after setting up your build environment):
+
+ make mode/m256wh:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: press the button on the back of the PCB for at least five seconds
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available (escape key, layer 1 of the default keymap)
diff --git a/keyboards/mode/m256wh/rules.mk b/keyboards/mode/m256wh/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/mode/m256ws/config.h b/keyboards/mode/m256ws/config.h
new file mode 100644
index 000000000000..c976b6bcc5bf
--- /dev/null
+++ b/keyboards/mode/m256ws/config.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2022 Gondolindrim
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define WS2812_PWM_COMPLEMENTARY_OUTPUT
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
+#define WS2812_DMA_CHANNEL 6
+
+#define EECONFIG_KB_DATA_SIZE (1)
diff --git a/keyboards/mode/m256ws/halconf.h b/keyboards/mode/m256ws/halconf.h
new file mode 100644
index 000000000000..485d48ef3067
--- /dev/null
+++ b/keyboards/mode/m256ws/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+#define HAL_USE_PAL TRUE
+
+#include_next
diff --git a/keyboards/mode/m256ws/info.json b/keyboards/mode/m256ws/info.json
new file mode 100644
index 000000000000..8f837e316c29
--- /dev/null
+++ b/keyboards/mode/m256ws/info.json
@@ -0,0 +1,122 @@
+{
+ "manufacturer": "Mode Designs",
+ "keyboard_name": "M256W-S",
+ "maintainer": "Gondolindrim",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "lto": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["A4", "C6", "B8", "C7", "C8", "C9", "A8", "A10", "B4", "B3", "D2", "C12", "C11", "A15", "C10"],
+ "rows": ["B10", "B12", "B9", "C0", "C1", "A3"]
+ },
+ "processor": "STM32F401",
+ "rgblight": {
+ "led_count": 30,
+ "animations": {
+ "breathing": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "knight": true,
+ "christmas": true,
+ "static_gradient": true,
+ "rgb_test": true,
+ "alternating": true,
+ "twinkle": true
+ }
+ },
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x5753",
+ "vid": "0x00DE"
+ },
+ "ws2812": {
+ "pin": "B15"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0)", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Backspace", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "\\|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Delete", "matrix": [1, 14], "x": 15, "y": 0},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "#~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
+ {"label": "Page Down", "matrix": [2, 14], "x": 15, "y": 2},
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "\\|", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "\u2191", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "End", "matrix": [3, 14], "x": 15, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "\u2190", "matrix": [4, 11], "x": 13, "y": 4},
+ {"label": "\u2193", "matrix": [4, 12], "x": 14, "y": 4},
+ {"label": "\u2192", "matrix": [4, 13], "x": 15, "y": 4},
+ {"label": "Page Up", "matrix": [4, 14], "x": 15, "y": 1},
+ {"label": "Caps Lock", "matrix": [5, 0], "x": 0, "y": 2, "w": 1.75}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mode/m256ws/keymaps/default/keymap.c b/keyboards/mode/m256ws/keymaps/default/keymap.c
new file mode 100644
index 000000000000..03b49aac2226
--- /dev/null
+++ b/keyboards/mode/m256ws/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL ,
+ KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT , KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_END ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, KC_CAPS
+),
+[1] = LAYOUT(
+ QK_BOOT, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS
+)
+};
diff --git a/keyboards/mode/m256ws/keymaps/via/keymap.c b/keyboards/mode/m256ws/keymaps/via/keymap.c
new file mode 100644
index 000000000000..03b49aac2226
--- /dev/null
+++ b/keyboards/mode/m256ws/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL ,
+ KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT , KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_END ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, KC_CAPS
+),
+[1] = LAYOUT(
+ QK_BOOT, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS
+)
+};
diff --git a/keyboards/mode/m256ws/keymaps/via/rules.mk b/keyboards/mode/m256ws/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/mode/m256ws/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/mode/m256ws/m256ws.c b/keyboards/mode/m256ws/m256ws.c
new file mode 100644
index 000000000000..5603de7b01b7
--- /dev/null
+++ b/keyboards/mode/m256ws/m256ws.c
@@ -0,0 +1,153 @@
+/* Copyright 2022 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifdef VIA_ENABLE
+bool is_second_rgb_row_active;
+enum via_secondrow_enable {
+ id_is_second_rgb_row_active = 0
+};
+
+// Sets the second RGB row on or off; done by setting effect range.
+void set_second_rgb_row(bool is_active) {
+ rgblight_disable_noeeprom();
+ switch (is_active)
+ {
+ case true:
+ {
+ rgblight_set_effect_range(0,30);
+ break;
+ }
+ case false:
+ {
+ rgblight_set_effect_range(0,15);
+ break;
+ }
+ }
+ rgblight_enable_noeeprom();
+}
+
+// At the keyboard start, retrieves PMEM stored configs
+void keyboard_post_init_kb(void) {
+ rgblight_disable_noeeprom();
+ wait_ms(20);
+ eeconfig_read_kb_datablock(&is_second_rgb_row_active);
+ set_second_rgb_row(is_second_rgb_row_active);
+ rgblight_reload_from_eeprom();
+ rgblight_set();
+}
+
+void eeconfig_init_kb(void) { // EEPROM is getting reset!
+ // rgblight_disable(); // Enable RGB by default
+ // Define the defualt value and write it to EEPROM
+ is_second_rgb_row_active = true;
+ set_second_rgb_row(is_second_rgb_row_active);
+ eeconfig_update_kb_datablock(&is_second_rgb_row_active);
+
+ // Disable rgblight by default on EEPROM initialization
+ rgblight_disable();
+
+ // Run user code, if any
+ eeconfig_init_user();
+}
+
+void secondrow_config_set_value( uint8_t *data )
+{
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch ( *value_id )
+ {
+ case id_is_second_rgb_row_active:
+ {
+ is_second_rgb_row_active = (bool) *value_data;
+ break;
+ }
+ default:
+ {
+ is_second_rgb_row_active = true;
+ }
+ }
+ set_second_rgb_row(is_second_rgb_row_active);
+}
+
+void secondrow_config_get_value( uint8_t *data )
+{
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch ( *value_id )
+ {
+ case id_is_second_rgb_row_active:
+ {
+ *value_data = is_second_rgb_row_active;
+ break;
+ }
+ default:
+ {
+ *value_data = false;
+ }
+ }
+}
+
+void secondrow_config_save(void)
+{
+
+ eeconfig_update_kb_datablock(&is_second_rgb_row_active);
+}
+
+void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
+ // data = [ command_id, channel_id, value_id, value_data ]
+ uint8_t *command_id = &(data[0]);
+ uint8_t *channel_id = &(data[1]);
+ uint8_t *value_id_and_data = &(data[2]);
+
+ if ( *channel_id == id_custom_channel ) {
+ switch ( *command_id )
+ {
+ case id_custom_set_value:
+ {
+ secondrow_config_set_value(value_id_and_data);
+ break;
+ }
+ case id_custom_get_value:
+ {
+ secondrow_config_get_value(value_id_and_data);
+ break;
+ }
+ case id_custom_save:
+ {
+ secondrow_config_save();
+ break;
+ }
+ default:
+ {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+ return;
+ }
+
+ // Return the unhandled state
+ *command_id = id_unhandled;
+
+}
+#endif // VIA ENABLE
diff --git a/keyboards/mode/m256ws/mcuconf.h b/keyboards/mode/m256ws/mcuconf.h
new file mode 100644
index 000000000000..3d1d05c307c4
--- /dev/null
+++ b/keyboards/mode/m256ws/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_ADVANCED
+#define STM32_PWM_USE_ADVANCED TRUE
+
+#undef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
diff --git a/keyboards/mode/m256ws/readme.md b/keyboards/mode/m256ws/readme.md
new file mode 100644
index 000000000000..dee23c9a8ca9
--- /dev/null
+++ b/keyboards/mode/m256ws/readme.md
@@ -0,0 +1,25 @@
+# Mode M256-WS PCB QMK Firmware
+
+![m256wh](https://imgur.com/97KRZCrh.jpg)
+
+The M256-WS is the hotswap version PCB support for the Mode Envoy.
+
+* Keyboard Maintainer: [Gondolindrim](https://github.com/Gondolindrim)
+* Hardware Supported: proprietary PCBs using the STM32F401 microcontroller
+* Hardware Availability: as of april 18, these PCBs are on the verge of being sold with the first kits of the Mode Envoy.
+
+## How to flash
+
+In order to flash this PCB, first build the default layout (after setting up your build environment):
+
+ make mode/m256ws:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: press the button on the back of the PCB for at least five seconds
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available (escape key, layer 1 of the default keymap)
diff --git a/keyboards/mode/m256ws/rules.mk b/keyboards/mode/m256ws/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/mode/m75h/config.h b/keyboards/mode/m75h/config.h
index 640cc43a5ac0..c6d7d037ec84 100644
--- a/keyboards/mode/m75h/config.h
+++ b/keyboards/mode/m75h/config.h
@@ -17,33 +17,5 @@ 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 EEPROM_I2C_24LC256
-//#define I2C1_CLOCK_SPEED 400000
-//#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
-
-#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
-
-/*
- * 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
-
-#define TAP_CODE_DELAY 50
-
-#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 16383 // Overriding to use more EEPROM
+#define WEAR_LEVELING_LOGICAL_SIZE 2048
+#define WEAR_LEVELING_BACKING_SIZE 4096
diff --git a/keyboards/mode/m75h/halconf.h b/keyboards/mode/m75h/halconf.h
index 6c53f594c769..d4831df0d73f 100644
--- a/keyboards/mode/m75h/halconf.h
+++ b/keyboards/mode/m75h/halconf.h
@@ -21,6 +21,4 @@
#pragma once
-#define HAL_USE_I2C TRUE
-
#include_next
diff --git a/keyboards/mode/m75h/info.json b/keyboards/mode/m75h/info.json
index 1ebbb8f29faa..f57aac383efe 100644
--- a/keyboards/mode/m75h/info.json
+++ b/keyboards/mode/m75h/info.json
@@ -1,5 +1,5 @@
{
- "keyboard_name": "75H",
+ "keyboard_name": "M75H",
"manufacturer": "Mode",
"url": "",
"maintainer": "Gondolindrim",
diff --git a/keyboards/mode/m75h/rules.mk b/keyboards/mode/m75h/rules.mk
index ee752a964b3b..5302cbfc1927 100644
--- a/keyboards/mode/m75h/rules.mk
+++ b/keyboards/mode/m75h/rules.mk
@@ -1,16 +1,15 @@
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
+NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-EEPROM_DRIVER = i2c
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
LTO_ENABLE = yes
# Enter lower-power sleep mode when on the ChibiOS idle thread
diff --git a/keyboards/mode/m75s/config.h b/keyboards/mode/m75s/config.h
index b8307f43960b..c17bf51b35cd 100644
--- a/keyboards/mode/m75s/config.h
+++ b/keyboards/mode/m75s/config.h
@@ -17,11 +17,6 @@ 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 BACKLIGHT_DEFAULT_LEVEL 20
#define BACKLIGHT_PWM_DRIVER PWMD3
#define BACKLIGHT_PWM_CHANNEL 1
diff --git a/keyboards/modelh/config.h b/keyboards/modelh/config.h
new file mode 100644
index 000000000000..ac95ccfe662f
--- /dev/null
+++ b/keyboards/modelh/config.h
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 John Hawthorn
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+
+/* Model H customizations */
+
+#define MODELH_STATUS_LED C13
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/modelh/info.json b/keyboards/modelh/info.json
new file mode 100644
index 000000000000..6d55d5c6bdda
--- /dev/null
+++ b/keyboards/modelh/info.json
@@ -0,0 +1,282 @@
+{
+ "manufacturer": "IBM",
+ "keyboard_name": "Model M",
+ "maintainer": "jhawthorn",
+ "bootloader": "stm32duino",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": false,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": false,
+ "nkro": false
+ },
+ "indicators": {
+ "caps_lock": "B8",
+ "num_lock": "B7",
+ "scroll_lock": "B9",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4", "A3"],
+ "rows": ["B6", "B5", "B4", "A15", "B3", "A0", "A2", "A1"]
+ },
+ "processor": "STM32F103",
+ "url": "modelh.club",
+ "usb": {
+ "device_version": "1.0.0",
+ "max_power": 100,
+ "pid": "0xB155",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT_fullsize_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 2], "x": 0, "y": 0},
+
+ {"matrix": [2, 3], "x": 2, "y": 0},
+ {"matrix": [2, 4], "x": 3, "y": 0},
+ {"matrix": [1, 4], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 8], "x": 7.5, "y": 0},
+ {"matrix": [1, 9], "x": 8.5, "y": 0},
+ {"matrix": [2, 9], "x": 9.5, "y": 0},
+
+ {"matrix": [2, 6], "x": 11, "y": 0},
+ {"matrix": [3, 6], "x": 12, "y": 0},
+ {"matrix": [3, 11], "x": 13, "y": 0},
+ {"matrix": [3, 12], "x": 14, "y": 0},
+
+ {"matrix": [3, 15], "x": 15.25, "y": 0},
+ {"matrix": [4, 15], "x": 16.25, "y": 0},
+ {"matrix": [6, 14], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 2], "x": 0, "y": 1.5},
+ {"matrix": [3, 2], "x": 1, "y": 1.5},
+ {"matrix": [3, 3], "x": 2, "y": 1.5},
+ {"matrix": [3, 4], "x": 3, "y": 1.5},
+ {"matrix": [3, 5], "x": 4, "y": 1.5},
+ {"matrix": [2, 5], "x": 5, "y": 1.5},
+ {"matrix": [2, 7], "x": 6, "y": 1.5},
+ {"matrix": [3, 7], "x": 7, "y": 1.5},
+ {"matrix": [3, 8], "x": 8, "y": 1.5},
+ {"matrix": [3, 9], "x": 9, "y": 1.5},
+ {"matrix": [3, 10], "x": 10, "y": 1.5},
+ {"matrix": [2, 10], "x": 11, "y": 1.5},
+ {"matrix": [2, 8], "x": 12, "y": 1.5},
+ {"matrix": [1, 6], "x": 13, "y": 1.5, "w": 2},
+
+ {"matrix": [2, 12], "x": 15.25, "y": 1.5},
+ {"matrix": [2, 14], "x": 16.25, "y": 1.5},
+ {"matrix": [2, 13], "x": 17.25, "y": 1.5},
+
+ {"matrix": [6, 11], "x": 18.5, "y": 1.5},
+ {"matrix": [6, 12], "x": 19.5, "y": 1.5},
+ {"matrix": [6, 13], "x": 20.5, "y": 1.5},
+ {"matrix": [7, 13], "x": 21.5, "y": 1.5},
+
+ {"matrix": [1, 2], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [4, 2], "x": 1.5, "y": 2.5},
+ {"matrix": [4, 3], "x": 2.5, "y": 2.5},
+ {"matrix": [4, 4], "x": 3.5, "y": 2.5},
+ {"matrix": [4, 5], "x": 4.5, "y": 2.5},
+ {"matrix": [1, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [1, 7], "x": 6.5, "y": 2.5},
+ {"matrix": [4, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [4, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [4, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [4, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [1, 10], "x": 11.5, "y": 2.5},
+ {"matrix": [1, 8], "x": 12.5, "y": 2.5},
+ {"matrix": [5, 6], "x": 13.5, "y": 2.5, "w": 1.5},
+
+ {"matrix": [2, 11], "x": 15.25, "y": 2.5},
+ {"matrix": [3, 14], "x": 16.25, "y": 2.5},
+ {"matrix": [3, 13], "x": 17.25, "y": 2.5},
+
+ {"matrix": [4, 11], "x": 18.5, "y": 2.5},
+ {"matrix": [4, 12], "x": 19.5, "y": 2.5},
+ {"matrix": [4, 13], "x": 20.5, "y": 2.5},
+ {"matrix": [4, 14], "x": 21.5, "y": 2.5, "h": 2},
+
+ {"matrix": [1, 3], "x": 0, "y": 3.5, "w": 1.5},
+ {"matrix": [5, 2], "x": 1.75, "y": 3.5},
+ {"matrix": [5, 3], "x": 2.75, "y": 3.5},
+ {"matrix": [5, 4], "x": 3.75, "y": 3.5},
+ {"matrix": [5, 5], "x": 4.75, "y": 3.5},
+ {"matrix": [0, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [0, 7], "x": 6.75, "y": 3.5},
+ {"matrix": [5, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [5, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [5, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [5, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [0, 10], "x": 11.75, "y": 3.5},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.5, "w": 2.25},
+
+ {"matrix": [1, 11], "x": 18.5, "y": 3.5},
+ {"matrix": [1, 12], "x": 19.5, "y": 3.5},
+ {"matrix": [1, 13], "x": 20.5, "y": 3.5},
+
+ {"matrix": [1, 1], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [6, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [6, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [6, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [6, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [7, 5], "x": 6.25, "y": 4.5},
+ {"matrix": [7, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [6, 7], "x": 8.25, "y": 4.5},
+ {"matrix": [6, 8], "x": 9.25, "y": 4.5},
+ {"matrix": [6, 9], "x": 10.25, "y": 4.5},
+ {"matrix": [7, 10], "x": 11.25, "y": 4.5},
+ {"matrix": [6, 1], "x": 12.25, "y": 4.5, "w": 2.75},
+
+ {"matrix": [0, 14], "x": 16.25, "y": 4.5},
+
+ {"matrix": [5, 11], "x": 18.5, "y": 4.5},
+ {"matrix": [5, 12], "x": 19.5, "y": 4.5},
+ {"matrix": [5, 13], "x": 20.5, "y": 4.5},
+ {"matrix": [5, 14], "x": 21.5, "y": 4.5, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [0, 15], "x": 2.5, "y": 5.5, "w": 1.5},
+ {"matrix": [7, 6], "x": 4, "y": 5.5, "w": 7},
+ {"matrix": [7, 15], "x": 11, "y": 5.5, "w": 1.5},
+ {"matrix": [6, 0], "x": 13.5, "y": 5.5, "w": 1.5},
+
+ {"matrix": [7, 14], "x": 15.25, "y": 5.5},
+ {"matrix": [7, 11], "x": 16.25, "y": 5.5},
+ {"matrix": [7, 12], "x": 17.25, "y": 5.5},
+
+ {"matrix": [0, 12], "x": 18.5, "y": 5.5, "w": 2},
+ {"matrix": [0, 13], "x": 20.5, "y": 5.5}
+ ]
+ },
+ "LAYOUT_fullsize_iso_wkl": {
+ "layout": [
+ {"matrix": [0, 2], "x": 0, "y": 0},
+
+ {"matrix": [2, 3], "x": 2, "y": 0},
+ {"matrix": [2, 4], "x": 3, "y": 0},
+ {"matrix": [1, 4], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 8], "x": 7.5, "y": 0},
+ {"matrix": [1, 9], "x": 8.5, "y": 0},
+ {"matrix": [2, 9], "x": 9.5, "y": 0},
+
+ {"matrix": [2, 6], "x": 11, "y": 0},
+ {"matrix": [3, 6], "x": 12, "y": 0},
+ {"matrix": [3, 11], "x": 13, "y": 0},
+ {"matrix": [3, 12], "x": 14, "y": 0},
+
+ {"matrix": [3, 15], "x": 15.25, "y": 0},
+ {"matrix": [4, 15], "x": 16.25, "y": 0},
+ {"matrix": [6, 14], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 2], "x": 0, "y": 1.5},
+ {"matrix": [3, 2], "x": 1, "y": 1.5},
+ {"matrix": [3, 3], "x": 2, "y": 1.5},
+ {"matrix": [3, 4], "x": 3, "y": 1.5},
+ {"matrix": [3, 5], "x": 4, "y": 1.5},
+ {"matrix": [2, 5], "x": 5, "y": 1.5},
+ {"matrix": [2, 7], "x": 6, "y": 1.5},
+ {"matrix": [3, 7], "x": 7, "y": 1.5},
+ {"matrix": [3, 8], "x": 8, "y": 1.5},
+ {"matrix": [3, 9], "x": 9, "y": 1.5},
+ {"matrix": [3, 10], "x": 10, "y": 1.5},
+ {"matrix": [2, 10], "x": 11, "y": 1.5},
+ {"matrix": [2, 8], "x": 12, "y": 1.5},
+ {"matrix": [1, 6], "x": 13, "y": 1.5, "w": 2},
+
+ {"matrix": [2, 12], "x": 15.25, "y": 1.5},
+ {"matrix": [2, 14], "x": 16.25, "y": 1.5},
+ {"matrix": [2, 13], "x": 17.25, "y": 1.5},
+
+ {"matrix": [6, 11], "x": 18.5, "y": 1.5},
+ {"matrix": [6, 12], "x": 19.5, "y": 1.5},
+ {"matrix": [6, 13], "x": 20.5, "y": 1.5},
+ {"matrix": [7, 13], "x": 21.5, "y": 1.5},
+
+ {"matrix": [1, 2], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [4, 2], "x": 1.5, "y": 2.5},
+ {"matrix": [4, 3], "x": 2.5, "y": 2.5},
+ {"matrix": [4, 4], "x": 3.5, "y": 2.5},
+ {"matrix": [4, 5], "x": 4.5, "y": 2.5},
+ {"matrix": [1, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [1, 7], "x": 6.5, "y": 2.5},
+ {"matrix": [4, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [4, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [4, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [4, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [1, 10], "x": 11.5, "y": 2.5},
+ {"matrix": [1, 8], "x": 12.5, "y": 2.5},
+
+ {"matrix": [2, 11], "x": 15.25, "y": 2.5},
+ {"matrix": [3, 14], "x": 16.25, "y": 2.5},
+ {"matrix": [3, 13], "x": 17.25, "y": 2.5},
+
+ {"matrix": [4, 11], "x": 18.5, "y": 2.5},
+ {"matrix": [4, 12], "x": 19.5, "y": 2.5},
+ {"matrix": [4, 13], "x": 20.5, "y": 2.5},
+ {"matrix": [4, 14], "x": 21.5, "y": 2.5, "h": 2},
+
+ {"matrix": [1, 3], "x": 0, "y": 3.5, "w": 1.5},
+ {"matrix": [5, 2], "x": 1.75, "y": 3.5},
+ {"matrix": [5, 3], "x": 2.75, "y": 3.5},
+ {"matrix": [5, 4], "x": 3.75, "y": 3.5},
+ {"matrix": [5, 5], "x": 4.75, "y": 3.5},
+ {"matrix": [0, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [0, 7], "x": 6.75, "y": 3.5},
+ {"matrix": [5, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [5, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [5, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [5, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [0, 10], "x": 11.75, "y": 3.5},
+ {"matrix": [6, 10], "x": 12.75, "y": 3.5},
+ {"matrix": [6, 6], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+
+ {"matrix": [1, 11], "x": 18.5, "y": 3.5},
+ {"matrix": [1, 12], "x": 19.5, "y": 3.5},
+ {"matrix": [1, 13], "x": 20.5, "y": 3.5},
+
+ {"matrix": [1, 1], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [0, 3], "x": 1.25, "y": 4.5},
+ {"matrix": [6, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [6, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [6, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [6, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [7, 5], "x": 6.25, "y": 4.5},
+ {"matrix": [7, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [6, 7], "x": 8.25, "y": 4.5},
+ {"matrix": [6, 8], "x": 9.25, "y": 4.5},
+ {"matrix": [6, 9], "x": 10.25, "y": 4.5},
+ {"matrix": [7, 10], "x": 11.25, "y": 4.5},
+ {"matrix": [6, 1], "x": 12.25, "y": 4.5, "w": 2.75},
+
+ {"matrix": [0, 14], "x": 16.25, "y": 4.5},
+
+ {"matrix": [5, 11], "x": 18.5, "y": 4.5},
+ {"matrix": [5, 12], "x": 19.5, "y": 4.5},
+ {"matrix": [5, 13], "x": 20.5, "y": 4.5},
+ {"matrix": [5, 14], "x": 21.5, "y": 4.5, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [0, 15], "x": 2.5, "y": 5.5, "w": 1.5},
+ {"matrix": [7, 6], "x": 4, "y": 5.5, "w": 7},
+ {"matrix": [7, 15], "x": 11, "y": 5.5, "w": 1.5},
+ {"matrix": [6, 0], "x": 13.5, "y": 5.5, "w": 1.5},
+
+ {"matrix": [7, 14], "x": 15.25, "y": 5.5},
+ {"matrix": [7, 11], "x": 16.25, "y": 5.5},
+ {"matrix": [7, 12], "x": 17.25, "y": 5.5},
+
+ {"matrix": [0, 12], "x": 18.5, "y": 5.5, "w": 2},
+ {"matrix": [0, 13], "x": 20.5, "y": 5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/modelh/keymaps/default/keymap.c b/keyboards/modelh/keymaps/default/keymap.c
new file mode 100644
index 000000000000..9098b869b302
--- /dev/null
+++ b/keyboards/modelh/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2020 John Hawthorn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_fullsize_ansi_wkl( /* Base layer */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+};
diff --git a/keyboards/modelh/modelh.c b/keyboards/modelh/modelh.c
new file mode 100644
index 000000000000..5384b3733854
--- /dev/null
+++ b/keyboards/modelh/modelh.c
@@ -0,0 +1,25 @@
+/* Copyright 2020 John Hawthorn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+
+void keyboard_pre_init_kb(void) {
+ setPinOutput(MODELH_STATUS_LED);
+ writePin(MODELH_STATUS_LED, 0);
+
+ keyboard_pre_init_user();
+}
diff --git a/keyboards/modelh/readme.md b/keyboards/modelh/readme.md
new file mode 100644
index 000000000000..8cd68c111a8b
--- /dev/null
+++ b/keyboards/modelh/readme.md
@@ -0,0 +1,19 @@
+# Model H - A USB capable PCB for the IBM Model M keyboard
+
+![modelh](https://i.imgur.com/4ymGdkM.jpg)
+
+This conversion kit allows you to replace your IBM Model M's original internal controller board with a modern USB board. This aims to match the footprint of the original controller and plugs into the original keyboard matrix, but exposes a USB port through the original SDL connector.
+
+* Keyboard Maintainer: [John Hawthorn](https://github.com/jhawthorn)
+* Hardware Supported: IBM Model M
+* Hardware Availability: [www.modelh.club](www.modelh.club)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make modelh:default
+
+Flashing example for this keyboard:
+
+ make modelh:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/modelh/rules.mk b/keyboards/modelh/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/monsgeek/m1/config.h b/keyboards/monsgeek/m1/config.h
new file mode 100644
index 000000000000..3e44e815fa0d
--- /dev/null
+++ b/keyboards/monsgeek/m1/config.h
@@ -0,0 +1,54 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Use 6 dynamic keymap layers */
+#define DYNAMIC_KEYMAP_LAYER_COUNT 6
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#define ENCODER_DEFAULT_POS 0x3
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
+#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
+
+/* I2C Config for LED Driver */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000 /* 400000 */
+
+#define DRIVER_1_LED_TOTAL 63
+#define DRIVER_2_LED_TOTAL 21
+#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL + 22)
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_TRIGGER_ON_KEYDOWN
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
diff --git a/keyboards/monsgeek/m1/halconf.h b/keyboards/monsgeek/m1/halconf.h
new file mode 100644
index 000000000000..2f64e65393a5
--- /dev/null
+++ b/keyboards/monsgeek/m1/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/monsgeek/m1/info.json b/keyboards/monsgeek/m1/info.json
new file mode 100644
index 000000000000..17d028fb5617
--- /dev/null
+++ b/keyboards/monsgeek/m1/info.json
@@ -0,0 +1,439 @@
+{
+ "keyboard_name": "M1",
+ "manufacturer": "MonsGeek",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "force_nkro": true,
+ "vid": "0xFFFE",
+ "pid": "0x0005",
+ "device_version": "1.1.0",
+ "suspend_wakeup_delay": 400
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "encoder": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C1", "C2", "C3", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B2"],
+ "rows": ["B15", "C6", "C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B14", "pin_b": "B13"}
+ ]
+ },
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "max_brightness": 200,
+ "val_steps": 20,
+ "animations": {
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "raindrops": true,
+ "typing_heatmap": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "multisplash": true
+ },
+ "layout":[
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 0 },
+ { "flags": 4, "matrix": [0, 1], "x": 14, "y": 0 },
+ { "flags": 4, "matrix": [0, 2], "x": 29, "y": 0 },
+ { "flags": 4, "matrix": [0, 3], "x": 44, "y": 0 },
+ { "flags": 4, "matrix": [0, 4], "x": 59, "y": 0 },
+ { "flags": 4, "matrix": [0, 5], "x": 74, "y": 0 },
+ { "flags": 4, "matrix": [0, 6], "x": 89, "y": 0 },
+ { "flags": 4, "matrix": [0, 7], "x":104, "y": 0 },
+ { "flags": 4, "matrix": [0, 8], "x":119, "y": 0 },
+ { "flags": 4, "matrix": [0, 9], "x":134, "y": 0 },
+ { "flags": 4, "matrix": [0, 10], "x":149, "y": 0 },
+ { "flags": 4, "matrix": [0, 11], "x":164, "y": 0 },
+ { "flags": 4, "matrix": [0, 12], "x":179, "y": 0 },
+ { "flags": 4, "matrix": [0, 13], "x":196, "y": 0 },
+
+ { "flags": 4, "matrix": [1, 0], "x": 0, "y": 12},
+ { "flags": 4, "matrix": [1, 1], "x": 14, "y": 12},
+ { "flags": 4, "matrix": [1, 2], "x": 28, "y": 12},
+ { "flags": 4, "matrix": [1, 3], "x": 42, "y": 12},
+ { "flags": 4, "matrix": [1, 4], "x": 56, "y": 12},
+ { "flags": 4, "matrix": [1, 5], "x": 70, "y": 12},
+ { "flags": 4, "matrix": [1, 6], "x": 84, "y": 12},
+ { "flags": 4, "matrix": [1, 7], "x": 98, "y": 12},
+ { "flags": 4, "matrix": [1, 8], "x":112, "y": 12},
+ { "flags": 4, "matrix": [1, 9], "x":126, "y": 12},
+ { "flags": 4, "matrix": [1, 10], "x":140, "y": 12},
+ { "flags": 4, "matrix": [1, 11], "x":154, "y": 12},
+ { "flags": 4, "matrix": [1, 12], "x":168, "y": 12},
+ { "flags": 4, "matrix": [1, 13], "x":182, "y": 12},
+ { "flags": 4, "matrix": [1, 15], "x":224, "y": 12},
+
+ { "flags": 4, "matrix": [2, 0], "x": 0, "y": 25},
+ { "flags": 4, "matrix": [2, 1], "x": 14, "y": 25},
+ { "flags": 4, "matrix": [2, 2], "x": 28, "y": 25},
+ { "flags": 4, "matrix": [2, 3], "x": 42, "y": 25},
+ { "flags": 4, "matrix": [2, 4], "x": 56, "y": 25},
+ { "flags": 4, "matrix": [2, 5], "x": 70, "y": 25},
+ { "flags": 4, "matrix": [2, 6], "x": 84, "y": 25},
+ { "flags": 4, "matrix": [2, 7], "x": 98, "y": 25},
+ { "flags": 4, "matrix": [2, 8], "x":112, "y": 25},
+ { "flags": 4, "matrix": [2, 9], "x":126, "y": 25},
+ { "flags": 4, "matrix": [2, 10], "x":140, "y": 25},
+ { "flags": 4, "matrix": [2, 11], "x":154, "y": 25},
+ { "flags": 4, "matrix": [2, 12], "x":168, "y": 25},
+ { "flags": 4, "matrix": [2, 13], "x":182, "y": 25},
+ { "flags": 4, "matrix": [2, 15], "x":224, "y": 25},
+
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 38},
+ { "flags": 4, "matrix": [3, 1], "x": 28, "y": 38},
+ { "flags": 4, "matrix": [3, 2], "x": 42, "y": 38},
+ { "flags": 4, "matrix": [3, 3], "x": 56, "y": 38},
+ { "flags": 4, "matrix": [3, 4], "x": 70, "y": 38},
+ { "flags": 4, "matrix": [3, 5], "x": 84, "y": 38},
+ { "flags": 4, "matrix": [3, 6], "x": 98, "y": 38},
+ { "flags": 4, "matrix": [3, 7], "x":112, "y": 38},
+ { "flags": 4, "matrix": [3, 8], "x":126, "y": 38},
+ { "flags": 4, "matrix": [3, 9], "x":140, "y": 38},
+ { "flags": 4, "matrix": [3, 10], "x":154, "y": 38},
+ { "flags": 4, "matrix": [3, 11], "x":168, "y": 38},
+ { "flags": 4, "matrix": [3, 12], "x":182, "y": 38},
+ { "flags": 4, "matrix": [3, 13], "x":196, "y": 38},
+ { "flags": 4, "matrix": [3, 15], "x":224, "y": 38},
+
+ { "flags": 4, "matrix": [4, 0], "x": 0, "y": 51},
+ { "flags": 4, "matrix": [4, 11], "x": 14, "y": 51},
+ { "flags": 4, "matrix": [4, 1], "x": 28, "y": 51},
+ { "flags": 4, "matrix": [4, 2], "x": 37, "y": 51},
+ { "flags": 4, "matrix": [4, 3], "x": 56, "y": 51},
+ { "flags": 4, "matrix": [4, 4], "x": 74, "y": 51},
+ { "flags": 4, "matrix": [4, 5], "x": 93, "y": 51},
+ { "flags": 4, "matrix": [4, 6], "x":112, "y": 51},
+ { "flags": 4, "matrix": [4, 7], "x":130, "y": 51},
+ { "flags": 4, "matrix": [4, 8], "x":149, "y": 51},
+ { "flags": 4, "matrix": [4, 9], "x":168, "y": 51},
+ { "flags": 4, "matrix": [4, 10], "x":186, "y": 51},
+ { "flags": 4, "matrix": [4, 13], "x":200, "y": 51},
+ { "flags": 4, "matrix": [4, 14], "x":214, "y": 51},
+ { "flags": 4, "matrix": [4, 15], "x":224, "y": 51},
+
+ { "flags": 4, "matrix": [5, 0], "x": 0, "y": 64},
+ { "flags": 4, "matrix": [5, 1], "x": 18, "y": 64},
+ { "flags": 4, "matrix": [5, 2], "x": 37, "y": 64},
+ { "flags": 4, "matrix": [5, 5], "x": 92, "y": 64},
+ { "flags": 4, "matrix": [5, 9], "x":140, "y": 64},
+ { "flags": 4, "matrix": [5, 10], "x":154, "y": 64},
+ { "flags": 4, "matrix": [5, 11], "x":168, "y": 64},
+ { "flags": 4, "matrix": [5, 13], "x":196, "y": 64},
+ { "flags": 4, "matrix": [5, 14], "x":210, "y": 64},
+ { "flags": 4, "matrix": [5, 15], "x":224, "y": 64},
+
+ { "flags": 2, "x":0, "y":0},
+ { "flags": 2, "x":0, "y":6},
+ { "flags": 2, "x":0, "y":13},
+ { "flags": 2, "x":0, "y":19},
+ { "flags": 2, "x":0, "y":25},
+ { "flags": 2, "x":0, "y":32},
+ { "flags": 2, "x":0, "y":38},
+ { "flags": 2, "x":0, "y":45},
+ { "flags": 2, "x":0, "y":51},
+ { "flags": 2, "x":0, "y":57},
+ { "flags": 2, "x":0, "y":64},
+
+ { "flags": 2, "x":224, "y":0},
+ { "flags": 2, "x":224, "y":6},
+ { "flags": 2, "x":224, "y":13},
+ { "flags": 2, "x":224, "y":19},
+ { "flags": 2, "x":224, "y":25},
+ { "flags": 2, "x":224, "y":32},
+ { "flags": 2, "x":224, "y":38},
+ { "flags": 2, "x":224, "y":45},
+ { "flags": 2, "x":224, "y":51},
+ { "flags": 2, "x":224, "y":57},
+ { "flags": 2, "x":224, "y":64}
+ ]
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "label": "Del", "matrix": [0, 13], "x": 14, "y": 0 },
+ { "label": "Mute", "matrix": [0, 15], "x": 15.5, "y": 0 },
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "*", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "(", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": ")", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "_", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "+", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "Bksp", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "Home", "matrix": [1, 15], "x": 15.5, "y": 1.25 },
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "{", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "}", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "|", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "PageUp", "matrix": [2, 15], "x": 15.5, "y": 2.25 },
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": ":", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "\"", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": ":", "matrix": [3, 12], "x": 12.75, "y": 3.25 },
+ { "label": "Enter", "matrix": [3, 13], "w": 1.25, "x": 13.75, "y": 3.25 },
+ { "label": "PageDn", "matrix": [3, 15], "x": 15.5, "y": 3.25 },
+ { "label": "Shift", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "label": ":", "matrix": [4, 11], "x": 1.25, "y": 4.25 },
+ { "label": "Z", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "N", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "M", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "<", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": ">", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "?", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "Shift", "matrix": [4, 13], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "label": "Up", "matrix": [4, 14], "x": 14.25, "y": 4.25 },
+ { "label": "End", "matrix": [4, 15], "x": 15.5, "y": 4.25 },
+ { "label": "Ctrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "Win", "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "Alt", "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "label": "Space", "matrix": [5, 5], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25 },
+ { "label": "Fn", "matrix": [5, 10], "x": 11, "y": 5.25 },
+ { "label": "Ctrl", "matrix": [5, 11], "x": 12, "y": 5.25 },
+ { "label": "Left", "matrix": [5, 13], "x": 13.25, "y": 5.25 },
+ { "label": "Down", "matrix": [5, 14], "x": 14.25, "y": 5.25 },
+ { "label": "Right", "matrix": [5, 15], "x": 15.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "label": "Del", "matrix": [0, 13], "x": 14, "y": 0 },
+ { "label": "Mute", "matrix": [0, 15], "x": 15.5, "y": 0 },
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "*", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "(", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": ")", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "_", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "+", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "Bksp", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "Home", "matrix": [1, 15], "x": 15.5, "y": 1.25 },
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "{", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "}", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "|", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "label": "PageUp", "matrix": [2, 15], "x": 15.5, "y": 2.25 },
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": ":", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "\"", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": "Enter", "matrix": [3, 13], "w": 2.25, "x": 12.75, "y": 3.25 },
+ { "label": "PageDn", "matrix": [3, 15], "x": 15.5, "y": 3.25 },
+ { "label": "Shift", "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
+ { "label": "Z", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "N", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "M", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "<", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": ">", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "?", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "Shift", "matrix": [4, 13], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "label": "Up", "matrix": [4, 14], "x": 14.25, "y": 4.25 },
+ { "label": "End", "matrix": [4, 15], "x": 15.5, "y": 4.25 },
+ { "label": "Ctrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "Win", "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "Alt", "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "label": "Space", "matrix": [5, 5], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25 },
+ { "label": "Fn", "matrix": [5, 10], "x": 11, "y": 5.25 },
+ { "label": "Ctrl", "matrix": [5, 11], "x": 12, "y": 5.25 },
+ { "label": "Left", "matrix": [5, 13], "x": 13.25, "y": 5.25 },
+ { "label": "Down", "matrix": [5, 14], "x": 14.25, "y": 5.25 },
+ { "label": "Right", "matrix": [5, 15], "x": 15.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_iso": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0 },
+ { "label": "F2", "matrix": [0, 2], "x": 2.25, "y": 0 },
+ { "label": "F3", "matrix": [0, 3], "x": 3.25, "y": 0 },
+ { "label": "F4", "matrix": [0, 4], "x": 4.25, "y": 0 },
+ { "label": "F5", "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "label": "F9", "matrix": [0, 9], "x": 9.75, "y": 0 },
+ { "label": "F10", "matrix": [0, 10], "x": 10.75, "y": 0 },
+ { "label": "F11", "matrix": [0, 11], "x": 11.75, "y": 0 },
+ { "label": "F12", "matrix": [0, 12], "x": 12.75, "y": 0 },
+ { "label": "Del", "matrix": [0, 13], "x": 14, "y": 0 },
+ { "label": "Mute", "matrix": [0, 15], "x": 15.5, "y": 0 },
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "*", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "(", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": ")", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "_", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "+", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "Bksp", "matrix": [1, 13], "w": 2, "x": 13, "y": 1.25 },
+ { "label": "Home", "matrix": [1, 15], "x": 15.5, "y": 1.25 },
+ { "label": "Tab", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
+ { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "{", "matrix": [2, 11], "x": 11.5, "y": 2.25 },
+ { "label": "}", "matrix": [2, 12], "x": 12.5, "y": 2.25 },
+ { "label": "PageUp", "matrix": [2, 15], "x": 15.5, "y": 2.25 },
+ { "label": "Caps Lock", "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
+ { "label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25 },
+ { "label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25 },
+ { "label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25 },
+ { "label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25 },
+ { "label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25 },
+ { "label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25 },
+ { "label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25 },
+ { "label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25 },
+ { "label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25 },
+ { "label": ":", "matrix": [3, 10], "x": 10.75, "y": 3.25 },
+ { "label": "\"", "matrix": [3, 11], "x": 11.75, "y": 3.25 },
+ { "label": ":", "matrix": [3, 12], "x": 12.75, "y": 3.25 },
+ { "label": "Enter", "matrix": [3, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 2.25 },
+ { "label": "PageDn", "matrix": [3, 15], "x": 15.5, "y": 3.25 },
+ { "label": "Shift", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
+ { "label": ":", "matrix": [4, 11], "x": 1.25, "y": 4.25 },
+ { "label": "Z", "matrix": [4, 1], "x": 2.25, "y": 4.25 },
+ { "label": "X", "matrix": [4, 2], "x": 3.25, "y": 4.25 },
+ { "label": "C", "matrix": [4, 3], "x": 4.25, "y": 4.25 },
+ { "label": "V", "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "label": "B", "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "label": "N", "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "label": "M", "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "label": "<", "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "label": ">", "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "label": "?", "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "label": "Shift", "matrix": [4, 13], "w": 1.75, "x": 12.25, "y": 4.25 },
+ { "label": "Up", "matrix": [4, 14], "x": 14.25, "y": 4.25 },
+ { "label": "End", "matrix": [4, 15], "x": 15.5, "y": 4.25 },
+ { "label": "Ctrl", "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
+ { "label": "Win", "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
+ { "label": "Alt", "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
+ { "label": "Space", "matrix": [5, 5], "w": 6.25, "x": 3.75, "y": 5.25 },
+ { "label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25 },
+ { "label": "Fn", "matrix": [5, 10], "x": 11, "y": 5.25 },
+ { "label": "Ctrl", "matrix": [5, 11], "x": 12, "y": 5.25 },
+ { "label": "Left", "matrix": [5, 13], "x": 13.25, "y": 5.25 },
+ { "label": "Down", "matrix": [5, 14], "x": 14.25, "y": 5.25 },
+ { "label": "Right", "matrix": [5, 15], "x": 15.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/monsgeek/m1/keymaps/default/keymap.c b/keyboards/monsgeek/m1/keymaps/default/keymap.c
new file mode 100644
index 000000000000..a0929d083ff5
--- /dev/null
+++ b/keyboards/monsgeek/m1/keymaps/default/keymap.c
@@ -0,0 +1,95 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT_all( /* Base */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_W] = LAYOUT_all( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______,
+ _______, _______, _______, _______, _______,MO(WIN_FN),_______, KC_A, KC_S, KC_D),
+
+ [WIN_FN] = LAYOUT_all( /* WASD/↑←↓→ */
+ _______, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM, KC_MSEL, KC_MPLY, KC_MPRV, KC_MNXT, _______, _______, _______, _______, _______, RGB_MOD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______,
+ _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, KC_INS, DF(MAC_B),KC_PSCR,_______, _______, RGB_MOD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_MOD, RGB_HUI, _______,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI, _______,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+
+ [MAC_B] = LAYOUT_all( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, KC_DEL, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_W] = LAYOUT_all( /* WASD/↑←↓→ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______,
+ _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D),
+
+ [MAC_FN] = LAYOUT_all( /* FN */
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, RGB_MOD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______,
+ _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, KC_INS, DF(WIN_B),KC_PSCR,_______, _______, RGB_MOD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_MOD, RGB_HUI, _______,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI)
+};
+
+
+// clang-format off
+#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_W] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_VAI, RGB_VAD) },
+ [MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_W] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_VAI, RGB_VAD) }
+};
+#endif
+
diff --git a/keyboards/monsgeek/m1/keymaps/default/rules.mk b/keyboards/monsgeek/m1/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/monsgeek/m1/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/monsgeek/m1/keymaps/via/keymap.c b/keyboards/monsgeek/m1/keymaps/via/keymap.c
new file mode 100644
index 000000000000..a0929d083ff5
--- /dev/null
+++ b/keyboards/monsgeek/m1/keymaps/via/keymap.c
@@ -0,0 +1,95 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT_all( /* Base */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_W] = LAYOUT_all( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______,
+ _______, _______, _______, _______, _______,MO(WIN_FN),_______, KC_A, KC_S, KC_D),
+
+ [WIN_FN] = LAYOUT_all( /* WASD/↑←↓→ */
+ _______, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM, KC_MSEL, KC_MPLY, KC_MPRV, KC_MNXT, _______, _______, _______, _______, _______, RGB_MOD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______,
+ _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, KC_INS, DF(MAC_B),KC_PSCR,_______, _______, RGB_MOD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_MOD, RGB_HUI, _______,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI, _______,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+
+ [MAC_B] = LAYOUT_all( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, KC_DEL, KC_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_W] = LAYOUT_all( /* WASD/↑←↓→ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______,
+ _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D),
+
+ [MAC_FN] = LAYOUT_all( /* FN */
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, RGB_MOD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______,
+ _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, KC_INS, DF(WIN_B),KC_PSCR,_______, _______, RGB_MOD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_MOD, RGB_HUI, _______,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI)
+};
+
+
+// clang-format off
+#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_W] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [WIN_FN] = { ENCODER_CCW_CW(RGB_VAI, RGB_VAD) },
+ [MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_W] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [MAC_FN] = { ENCODER_CCW_CW(RGB_VAI, RGB_VAD) }
+};
+#endif
+
diff --git a/keyboards/monsgeek/m1/keymaps/via/rules.mk b/keyboards/monsgeek/m1/keymaps/via/rules.mk
new file mode 100644
index 000000000000..f1adcab005e8
--- /dev/null
+++ b/keyboards/monsgeek/m1/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/monsgeek/m1/m1.c b/keyboards/monsgeek/m1/m1.c
new file mode 100644
index 000000000000..ac00bb4e2bd0
--- /dev/null
+++ b/keyboards/monsgeek/m1/m1.c
@@ -0,0 +1,216 @@
+/* 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"
+
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {1, A_1, B_1, C_1},
+ {1, A_2, B_2, C_2},
+ {1, A_3, B_3, C_3},
+ {1, A_4, B_4, C_4},
+ {1, A_5, B_5, C_5},
+ {1, A_6, B_6, C_6},
+ {1, A_7, B_7, C_7},
+ {1, A_8, B_8, C_8},
+ {1, A_9, B_9, C_9},
+ {1, A_10, B_10, C_10},
+ {1, A_11, B_11, C_11},
+ {1, A_12, B_12, C_12},
+ {1, A_13, B_13, C_13},
+ {1, A_14, B_14, C_14},
+
+ {0, A_1, B_1, C_1},
+ {0, A_2, B_2, C_2},
+ {0, A_3, B_3, C_3},
+ {0, A_4, B_4, C_4},
+ {0, A_5, B_5, C_5},
+ {0, A_6, B_6, C_6},
+ {0, A_7, B_7, C_7},
+ {0, A_8, B_8, C_8},
+ {0, A_9, B_9, C_9},
+ {0, A_10, B_10, C_10},
+ {0, A_11, B_11, C_11},
+ {0, A_12, B_12, C_12},
+ {0, A_13, B_13, C_13},
+ {0, A_14, B_14, C_14},
+ {1, D_1, E_1, F_1},
+
+ {0, D_1, E_1, F_1},
+ {0, D_2, E_2, F_2},
+ {0, D_3, E_3, F_3},
+ {0, D_4, E_4, F_4},
+ {0, D_5, E_5, F_5},
+ {0, D_6, E_6, F_6},
+ {0, D_7, E_7, F_7},
+ {0, D_8, E_8, F_8},
+ {0, D_9, E_9, F_9},
+ {0, D_10, E_10, F_10},
+ {0, D_11, E_11, F_11},
+ {0, D_12, E_12, F_12},
+ {0, D_13, E_13, F_13},
+ {0, D_14, E_14, F_14},
+ {1, D_2, E_2, F_2},
+
+ {0, G_1, H_1, I_1},
+ {0, G_2, H_2, I_2},
+ {0, G_3, H_3, I_3},
+ {0, G_4, H_4, I_4},
+ {0, G_5, H_5, I_5},
+ {0, G_6, H_6, I_6},
+ {0, G_7, H_7, I_7},
+ {0, G_8, H_8, I_8},
+ {0, G_9, H_9, I_9},
+ {0, G_10, H_10, I_10},
+ {0, G_11, H_11, I_11},
+ {0, G_12, H_12, I_12},
+ {0, A_15, B_15, C_15},
+ {0, G_13, H_13, I_13},
+ {1, D_3, E_3, F_3},
+
+ {0, J_1, K_1, L_1},
+ {0, A_16, B_16, C_16},
+ {0, J_2, K_2, L_2},
+ {0, J_3, K_3, L_3},
+ {0, J_4, K_4, L_4},
+ {0, J_5, K_5, L_5},
+ {0, J_6, K_6, L_6},
+ {0, J_7, K_7, L_7},
+ {0, J_8, K_8, L_8},
+ {0, J_9, K_9, L_9},
+ {0, J_10, K_10, L_10},
+ {0, J_11, K_11, L_11},
+ {0, J_12, K_12, L_12},
+ {1, D_7, E_7, F_7},
+ {1, D_4, E_4, F_4},
+
+ {0, J_13, K_13, L_13},
+ {0, J_14, K_14, L_14},
+ {0, J_15, K_15, L_15},
+ {0, J_16, K_16, L_16},
+
+ {0, G_14, H_14, I_14},
+ {0, G_15, H_15, I_15},
+ {0, G_16, H_16, I_16},
+
+ {0, D_15, E_15, F_15},
+ {1, D_6, E_6, F_6},
+ {1, D_5, E_5, F_5},
+
+ {1, G_1, H_1, I_1},
+ {1, G_2, H_2, I_2},
+ {1, G_3, H_3, I_3},
+ {1, G_4, H_4, I_4},
+ {1, G_5, H_5, I_5},
+ {1, G_6, H_6, I_6},
+ {1, G_7, H_7, I_7},
+ {1, G_8, H_8, I_8},
+ {1, G_9, H_9, I_9},
+ {1, G_10, H_10, I_10},
+ {1, G_11, H_11, I_11},
+
+ {1, J_1, K_1, L_1},
+ {1, J_2, K_2, L_2},
+ {1, J_3, K_3, L_3},
+ {1, J_4, K_4, L_4},
+ {1, J_5, K_5, L_5},
+ {1, J_6, K_6, L_6},
+ {1, J_7, K_7, L_7},
+ {1, J_8, K_8, L_8},
+ {1, J_9, K_9, L_9},
+ {1, J_10, K_10, L_10},
+ {1, J_11, K_11, L_11},
+};
+
+// clang-format on
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
+ return false;
+ }
+
+ if (host_keyboard_led_state().caps_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(44, 255, 255, 255);
+ } else {
+ if (!rgb_matrix_get_flags()) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(44, 0, 0, 0);
+ }
+ }
+ if (keymap_config.no_gui) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(75, 255, 255, 255);
+ } else {
+ if (!rgb_matrix_get_flags()) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(75, 0, 0, 0);
+ }
+ }
+ return true;
+}
+#endif
+
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN
+};
+
+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);
+ layer_state_set(1<event.pressed) {
+ set_single_persistent_default_layer(MAC_B);
+ layer_state_set(1<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/m1/mcuconf.h b/keyboards/monsgeek/m1/mcuconf.h
new file mode 100644
index 000000000000..e2884f3828f6
--- /dev/null
+++ b/keyboards/monsgeek/m1/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/m1/readme.md b/keyboards/monsgeek/m1/readme.md
new file mode 100644
index 000000000000..72af4c4382bc
--- /dev/null
+++ b/keyboards/monsgeek/m1/readme.md
@@ -0,0 +1,19 @@
+# monsgeek m1 keyboard
+
+A customizable 75% encoder keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: m1
+* Hardware Availability: [monsgeek](https://www.monsgeek.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make monsgeek/m1:default
+
+Flashing example for this keyboard:
+
+ make monsgeek/m1:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, which programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/monsgeek/m1/rules.mk b/keyboards/monsgeek/m1/rules.mk
new file mode 100644
index 000000000000..b753f0682e56
--- /dev/null
+++ b/keyboards/monsgeek/m1/rules.mk
@@ -0,0 +1,6 @@
+# Build Options
+# change yes to no to disable
+#
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
+
diff --git a/keyboards/monsgeek/m5/config.h b/keyboards/monsgeek/m5/config.h
new file mode 100644
index 000000000000..6d43bd4f2677
--- /dev/null
+++ b/keyboards/monsgeek/m5/config.h
@@ -0,0 +1,54 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Use 5 dynamic keymap layers */
+#define DYNAMIC_KEYMAP_LAYER_COUNT 6
+
+/* LED Indicators */
+#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 I2C1_SCL_PAL_MODE 4
+
+#define RGB_MATRIX_LED_COUNT 108
+
+#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
+#define RGB_MATRIX_KEYRELEASES
diff --git a/keyboards/monsgeek/m5/halconf.h b/keyboards/monsgeek/m5/halconf.h
new file mode 100644
index 000000000000..2f64e65393a5
--- /dev/null
+++ b/keyboards/monsgeek/m5/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/monsgeek/m5/info.json b/keyboards/monsgeek/m5/info.json
new file mode 100644
index 000000000000..03711c9a1b62
--- /dev/null
+++ b/keyboards/monsgeek/m5/info.json
@@ -0,0 +1,290 @@
+{
+ "keyboard_name": "M5",
+ "manufacturer": "MonsGeek",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "vid": "0xFFFE",
+ "pid": "0x000A",
+ "device_version": "1.0.4",
+ "suspend_wakeup_delay": 400,
+ "force_nkro": true
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C1","C2","C3","A0","A1","A2","A3","A4","A5","A6","A7","C4","C5","B0","B1","B2","B10","B11","B12","B13","B14"],
+ "rows": ["B15", "C6", "C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "indicators": {
+ "num_lock":"A15",
+ "caps_lock": "C10"
+ },
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "max_brightness": 180,
+ "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": 20, "y": 0 },
+ { "flags": 4, "matrix": [0, 2], "x": 30, "y": 0 },
+ { "flags": 4, "matrix": [0, 3], "x": 40, "y": 0 },
+ { "flags": 4, "matrix": [0, 4], "x": 50, "y": 0 },
+ { "flags": 4, "matrix": [0, 5], "x": 70, "y": 0 },
+ { "flags": 4, "matrix": [0, 6], "x": 80, "y": 0 },
+ { "flags": 4, "matrix": [0, 7], "x": 90, "y": 0 },
+ { "flags": 4, "matrix": [0, 8], "x": 100, "y": 0 },
+ { "flags": 4, "matrix": [0, 9], "x": 110, "y": 0 },
+ { "flags": 4, "matrix": [0, 10], "x": 120, "y": 0 },
+ { "flags": 4, "matrix": [0, 11], "x": 130, "y": 0 },
+ { "flags": 4, "matrix": [0, 12], "x": 140, "y": 0 },
+ { "flags": 4, "matrix": [0, 14], "x": 156, "y": 0 },
+ { "flags": 4, "matrix": [0, 15], "x": 166, "y": 0 },
+ { "flags": 4, "matrix": [0, 16], "x": 176, "y": 0 },
+ { "flags": 4, "matrix": [0, 17], "x": 194, "y": 0 },
+ { "flags": 4, "matrix": [0, 18], "x": 204, "y": 0 },
+ { "flags": 4, "matrix": [0, 19], "x": 214, "y": 0 },
+ { "flags": 4, "matrix": [0, 20], "x": 224, "y": 0 },
+
+
+ { "flags": 4, "matrix": [1, 0], "x": 0, "y": 13 },
+ { "flags": 4, "matrix": [1, 1], "x": 10, "y": 13 },
+ { "flags": 4, "matrix": [1, 2], "x": 20, "y": 13 },
+ { "flags": 4, "matrix": [1, 3], "x": 30, "y": 13 },
+ { "flags": 4, "matrix": [1, 4], "x": 40, "y": 13 },
+ { "flags": 4, "matrix": [1, 5], "x": 50, "y": 13 },
+ { "flags": 4, "matrix": [1, 6], "x": 60, "y": 13 },
+ { "flags": 4, "matrix": [1, 7], "x": 70, "y": 13 },
+ { "flags": 4, "matrix": [1, 8], "x": 80, "y": 13 },
+ { "flags": 4, "matrix": [1, 9], "x": 90, "y": 13 },
+ { "flags": 4, "matrix": [1, 10], "x": 100, "y": 13 },
+ { "flags": 4, "matrix": [1, 11], "x": 110, "y": 13 },
+ { "flags": 4, "matrix": [1, 12], "x": 120, "y": 13 },
+ { "flags": 4, "matrix": [1, 13], "x": 140, "y": 13 },
+ { "flags": 4, "matrix": [1, 14], "x": 156, "y": 13 },
+ { "flags": 4, "matrix": [1, 15], "x": 166, "y": 13 },
+ { "flags": 4, "matrix": [1, 16], "x": 176, "y": 13 },
+ { "flags": 4, "matrix": [1, 17], "x": 194, "y": 13 },
+ { "flags": 4, "matrix": [1, 18], "x": 204, "y": 13 },
+ { "flags": 4, "matrix": [1, 19], "x": 214, "y": 13 },
+ { "flags": 4, "matrix": [1, 20], "x": 224, "y": 13 },
+
+ { "flags": 4, "matrix": [2, 0], "x": 0, "y": 26 },
+ { "flags": 4, "matrix": [2, 1], "x": 10, "y": 26 },
+ { "flags": 4, "matrix": [2, 2], "x": 20, "y": 26 },
+ { "flags": 4, "matrix": [2, 3], "x": 30, "y": 26 },
+ { "flags": 4, "matrix": [2, 4], "x": 40, "y": 26 },
+ { "flags": 4, "matrix": [2, 5], "x": 50, "y": 26 },
+ { "flags": 4, "matrix": [2, 6], "x": 60, "y": 26 },
+ { "flags": 4, "matrix": [2, 7], "x": 70, "y": 26 },
+ { "flags": 4, "matrix": [2, 8], "x": 80, "y": 26 },
+ { "flags": 4, "matrix": [2, 9], "x": 90, "y": 26 },
+ { "flags": 4, "matrix": [2, 10], "x": 100, "y": 26 },
+ { "flags": 4, "matrix": [2, 11], "x": 110, "y": 26 },
+ { "flags": 4, "matrix": [2, 12], "x": 128, "y": 26 },
+ { "flags": 4, "matrix": [2, 13], "x": 140, "y": 26 },
+ { "flags": 4, "matrix": [2, 14], "x": 156, "y": 26 },
+ { "flags": 4, "matrix": [2, 15], "x": 166, "y": 26 },
+ { "flags": 4, "matrix": [2, 16], "x": 176, "y": 26 },
+ { "flags": 4, "matrix": [2, 17], "x": 194, "y": 26 },
+ { "flags": 4, "matrix": [2, 18], "x": 204, "y": 26 },
+ { "flags": 4, "matrix": [2, 19], "x": 214, "y": 26 },
+ { "flags": 4, "matrix": [2, 20], "x": 224, "y": 26 },
+
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 38 },
+ { "flags": 4, "matrix": [3, 1], "x": 10, "y": 38 },
+ { "flags": 4, "matrix": [3, 2], "x": 20, "y": 38 },
+ { "flags": 4, "matrix": [3, 3], "x": 30, "y": 38 },
+ { "flags": 4, "matrix": [3, 4], "x": 40, "y": 38 },
+ { "flags": 4, "matrix": [3, 5], "x": 50, "y": 38 },
+ { "flags": 4, "matrix": [3, 6], "x": 60, "y": 38 },
+ { "flags": 4, "matrix": [3, 7], "x": 70, "y": 38 },
+ { "flags": 4, "matrix": [3, 8], "x": 80, "y": 38 },
+ { "flags": 4, "matrix": [3, 9], "x": 90, "y": 38 },
+ { "flags": 4, "matrix": [3, 10], "x": 100, "y": 38 },
+ { "flags": 4, "matrix": [3, 11], "x": 110, "y": 38 },
+ { "flags": 4, "matrix": [3, 13], "x": 135, "y": 38 },
+ { "flags": 4, "matrix": [3, 17], "x": 194, "y": 38 },
+ { "flags": 4, "matrix": [3, 18], "x": 204, "y": 38 },
+ { "flags": 4, "matrix": [3, 19], "x": 214, "y": 38 },
+
+ { "flags": 4, "matrix": [4, 0], "x": 5, "y": 51 },
+ { "flags": 4, "matrix": [4, 1], "x": 20, "y": 51 },
+ { "flags": 4, "matrix": [4, 2], "x": 30, "y": 51 },
+ { "flags": 4, "matrix": [4, 3], "x": 40, "y": 51 },
+ { "flags": 4, "matrix": [4, 4], "x": 50, "y": 51 },
+ { "flags": 4, "matrix": [4, 5], "x": 60, "y": 51 },
+ { "flags": 4, "matrix": [4, 6], "x": 70, "y": 51 },
+ { "flags": 4, "matrix": [4, 7], "x": 80, "y": 51 },
+ { "flags": 4, "matrix": [4, 8], "x": 90, "y": 51 },
+ { "flags": 4, "matrix": [4, 9], "x": 100, "y": 51 },
+ { "flags": 4, "matrix": [4, 10], "x": 110, "y": 51 },
+ { "flags": 4, "matrix": [4, 13], "x": 135, "y": 51 },
+ { "flags": 4, "matrix": [4, 15], "x": 166, "y": 51 },
+ { "flags": 4, "matrix": [4, 17], "x": 194, "y": 51 },
+ { "flags": 4, "matrix": [4, 18], "x": 204, "y": 51 },
+ { "flags": 4, "matrix": [4, 19], "x": 214, "y": 51 },
+ { "flags": 4, "matrix": [4, 20], "x": 224, "y": 51 },
+
+ { "flags": 4, "matrix": [5, 0], "x": 0, "y": 64 },
+ { "flags": 4, "matrix": [5, 1], "x": 10, "y": 64 },
+ { "flags": 4, "matrix": [5, 2], "x": 20, "y": 64 },
+ { "flags": 4, "matrix": [5, 5], "x": 60, "y": 64 },
+ { "flags": 4, "matrix": [5, 9], "x": 100, "y": 64 },
+ { "flags": 4, "matrix": [5, 10], "x": 110, "y": 64 },
+ { "flags": 4, "matrix": [5, 11], "x": 130, "y": 64 },
+ { "flags": 4, "matrix": [5, 13], "x": 140, "y": 64 },
+ { "flags": 4, "matrix": [5, 14], "x": 156, "y": 64 },
+ { "flags": 4, "matrix": [5, 15], "x": 166, "y": 64 },
+ { "flags": 4, "matrix": [5, 16], "x": 176, "y": 64 },
+ { "flags": 4, "matrix": [5, 18], "x": 199, "y": 64 },
+ { "flags": 4, "matrix": [5, 19], "x": 214, "y": 64 }
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "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": "Cal", "matrix": [0, 17], "x": 18.5, "y": 0 },
+ { "label": "Mute", "matrix": [0, 18], "x": 19.5, "y": 0 },
+ { "label": "Vold", "matrix": [0, 19], "x": 20.5, "y": 0 },
+ { "label": "Volu", "matrix": [0, 20], "x": 21.5, "y": 0 },
+
+ { "label": "~", "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "label": "!", "matrix": [1, 1], "x": 1, "y": 1.25 },
+ { "label": "@", "matrix": [1, 2], "x": 2, "y": 1.25 },
+ { "label": "#", "matrix": [1, 3], "x": 3, "y": 1.25 },
+ { "label": "$", "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "label": "%", "matrix": [1, 5], "x": 5, "y": 1.25 },
+ { "label": "^", "matrix": [1, 6], "x": 6, "y": 1.25 },
+ { "label": "&", "matrix": [1, 7], "x": 7, "y": 1.25 },
+ { "label": "*", "matrix": [1, 8], "x": 8, "y": 1.25 },
+ { "label": "(", "matrix": [1, 9], "x": 9, "y": 1.25 },
+ { "label": ")", "matrix": [1, 10], "x": 10, "y": 1.25 },
+ { "label": "_", "matrix": [1, 11], "x": 11, "y": 1.25 },
+ { "label": "+", "matrix": [1, 12], "x": 12, "y": 1.25 },
+ { "label": "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": "Num", "matrix": [1, 17], "x": 18.5, "y": 1.25 },
+ { "label": "/", "matrix": [1, 18], "x": 19.5, "y": 1.25 },
+ { "label": "*", "matrix": [1, 19], "x": 20.5, "y": 1.25 },
+ { "label": "-", "matrix": [1, 20], "x": 21.5, "y": 1.25 },
+
+ { "label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5 },
+ { "label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25 },
+ { "label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25 },
+ { "label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25 },
+ { "label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25 },
+ { "label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25 },
+ { "label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25 },
+ { "label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25 },
+ { "label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25 },
+ { "label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25 },
+ { "label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25 },
+ { "label": "{", "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": "7", "matrix": [2, 17], "x": 18.5, "y": 2.25 },
+ { "label": "8", "matrix": [2, 18], "x": 19.5, "y": 2.25 },
+ { "label": "9", "matrix": [2, 19], "x": 20.5, "y": 2.25 },
+ { "label": "+", "matrix": [2, 20], "x": 21.5, "y": 2.25, "h": 2 },
+
+ { "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": "4", "matrix": [3, 17], "x": 18.5, "y": 3.25 },
+ { "label": "5", "matrix": [3, 18], "x": 19.5, "y": 3.25 },
+ { "label": "6", "matrix": [3, 19], "x": 20.5, "y": 3.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": "1", "matrix": [4, 17], "x": 18.5, "y": 4.25 },
+ { "label": "2", "matrix": [4, 18], "x": 19.5, "y": 4.25 },
+ { "label": "3", "matrix": [4, 19], "x": 20.5, "y": 4.25 },
+ { "label": "Enter", "matrix": [4, 20], "x": 21.5, "y": 4.25, "h": 2 },
+
+ { "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 },
+ { "label": "0", "matrix": [5, 18], "x": 18.5, "y": 5.25, "w": 2 },
+ { "label": ".", "matrix": [5, 19], "x": 20.5, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/monsgeek/m5/keymaps/default/keymap.c b/keyboards/monsgeek/m5/keymaps/default/keymap.c
new file mode 100644
index 000000000000..28c433736cc6
--- /dev/null
+++ b/keyboards/monsgeek/m5/keymaps/default/keymap.c
@@ -0,0 +1,79 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_WASD,
+ WIN_FN,
+ MAC_B,
+ MAC_WASD,
+ MAC_FN
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT( /* Base */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_CALC, KC_MUTE, KC_VOLD, KC_VOLU,
+ 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, KC_RGUI, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
+
+ [WIN_WASD] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(WIN_FN), _______, KC_A, KC_S, KC_D, _______, _______),
+
+
+ [WIN_FN] = LAYOUT( /* FN */
+ _______, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM, KC_MSEL, KC_MPLY, KC_MPRV, KC_MNXT, _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______,TG(WIN_WASD),_______,_______,_______,_______, _______, _______, DF(MAC_B),_______,_______, _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_HUI, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______,
+ _______, GUI_TOG, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI, _______, _______),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_SCRL, KC_PAUS, KC_CALC, KC_MUTE, KC_VOLD, KC_VOLU,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
+
+ [MAC_WASD] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D, _______, _______),
+ [MAC_FN] = LAYOUT( /* 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_WASD),_______,_______,_______,_______, _______, _______, DF(WIN_B),_______,_______, _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, RGB_HUI, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI, _______, _______)
+};
+// clang-format on
diff --git a/keyboards/monsgeek/m5/keymaps/via/keymap.c b/keyboards/monsgeek/m5/keymaps/via/keymap.c
new file mode 100644
index 000000000000..12c200870584
--- /dev/null
+++ b/keyboards/monsgeek/m5/keymaps/via/keymap.c
@@ -0,0 +1,79 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#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( /* 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_CALC, KC_MUTE, KC_VOLD, KC_VOLU,
+ 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, KC_RGUI, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
+
+ [WIN_W] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(WIN_FN), _______, KC_A, KC_S, KC_D, _______, _______),
+
+
+ [WIN_FN] = LAYOUT( /* 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______,
+ _______, GU_TOGG, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI, _______, _______),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_SCRL, KC_PAUS, KC_CALC, KC_MUTE, KC_VOLD, KC_VOLU,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
+
+ [MAC_W] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(MAC_FN), _______, KC_A, KC_S, KC_D, _______, _______),
+ [MAC_FN] = LAYOUT( /* 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI, _______, _______)
+};
+// clang-format on
diff --git a/keyboards/monsgeek/m5/keymaps/via/rules.mk b/keyboards/monsgeek/m5/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/monsgeek/m5/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/monsgeek/m5/m5.c b/keyboards/monsgeek/m5/m5.c
new file mode 100644
index 000000000000..7dbc3111bf00
--- /dev/null
+++ b/keyboards/monsgeek/m5/m5.c
@@ -0,0 +1,163 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ /*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},
+ {1, D_11, E_11, F_11},
+ {1, D_12, E_12, F_12},
+ {1, D_13, E_13, F_13},
+ {1, D_14, E_14, F_14},
+
+ /*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},
+ {1, D_4, E_4, F_4},
+ {1, D_5, E_5, F_5},
+ {1, D_6, E_6, F_6},
+ {1, D_7, E_7, F_7},
+
+ /*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},
+ {1, D_8, E_8, F_8},
+ {1, D_9, E_9, F_9},
+ {1, D_10, E_10, F_10},
+ {1, G_7, H_7, I_7},
+
+ /*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},
+ {1, G_4, H_4, I_4},
+ {1, G_5, H_5, I_5},
+ {1, G_6, H_6, I_6},
+
+
+ /*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},
+ {1, J_7, K_7, L_7},
+ {1, J_8, K_8, L_8},
+ {1, J_9, K_9, L_9},
+ {1, J_10, K_10, L_10},
+
+ /*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},
+ {1, J_5, K_5, L_5},
+ {1, J_6, K_6, L_6},
+
+};
+#endif
+
+void keyboard_pre_init_kb(void) {
+ setPinOutput(LED_WIN_LOCK_PIN); // LED3 Win Lock
+ writePinLow(LED_WIN_LOCK_PIN);
+ keyboard_pre_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res) {
+ writePin(LED_WIN_LOCK_PIN, keymap_config.no_gui);
+ }
+ return res;
+}
diff --git a/keyboards/monsgeek/m5/mcuconf.h b/keyboards/monsgeek/m5/mcuconf.h
new file mode 100644
index 000000000000..0d16f4f04e46
--- /dev/null
+++ b/keyboards/monsgeek/m5/mcuconf.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#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/m5/readme.md b/keyboards/monsgeek/m5/readme.md
new file mode 100644
index 000000000000..6574b3d6631b
--- /dev/null
+++ b/keyboards/monsgeek/m5/readme.md
@@ -0,0 +1,20 @@
+# m5
+
+A customizable 100% keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: m5
+* Hardware Availability: [monsgeek](https://www.monsgeek.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make monsgeek/m5:default
+
+Flashing example for this keyboard:
+
+ make monsgeek/m5:default:flash
+
+## Bootloader
+**Reset Key**: Hold down the key located at *K000*, which programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/monsgeek/m5/rules.mk b/keyboards/monsgeek/m5/rules.mk
new file mode 100644
index 000000000000..24d5f6f52ecc
--- /dev/null
+++ b/keyboards/monsgeek/m5/rules.mk
@@ -0,0 +1,2 @@
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/monsgeek/m6/config.h b/keyboards/monsgeek/m6/config.h
new file mode 100644
index 000000000000..5fcd897429a9
--- /dev/null
+++ b/keyboards/monsgeek/m6/config.h
@@ -0,0 +1,51 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Use 6 dynamic keymap layers */
+#define DYNAMIC_KEYMAP_LAYER_COUNT 6
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
+#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
+
+/* I2C Config for LED Driver */
+#define DRIVER_COUNT 2
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define I2C1_SCL_PAL_MODE 4
+#define I2C1_OPMODE OPMODE_I2C
+#define I2C1_CLOCK_SPEED 400000 /* 400000 */
+
+#define RGB_MATRIX_LED_COUNT 92
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_TRIGGER_ON_KEYDOWN
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
diff --git a/keyboards/monsgeek/m6/halconf.h b/keyboards/monsgeek/m6/halconf.h
new file mode 100644
index 000000000000..2f64e65393a5
--- /dev/null
+++ b/keyboards/monsgeek/m6/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright (C) 2022 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/monsgeek/m6/info.json b/keyboards/monsgeek/m6/info.json
new file mode 100644
index 000000000000..78d6c1bf943c
--- /dev/null
+++ b/keyboards/monsgeek/m6/info.json
@@ -0,0 +1,232 @@
+{
+ "keyboard_name": "M6",
+ "manufacturer": "MonsGeek",
+ "maintainer": "jonylee@hfd",
+ "usb": {
+ "force_nkro": true,
+ "vid": "0xFFFE",
+ "pid": "0x0011",
+ "device_version": "1.0.0",
+ "suspend_wakeup_delay": 400
+ },
+ "processor": "WB32FQ95",
+ "bootloader": "wb32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C1", "C2", "C3", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B2"],
+ "rows": ["C6", "C7", "C8", "C9", "A8"]
+ },
+ "diode_direction": "ROW2COL",
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "max_brightness": 200,
+ "val_steps": 20,
+ "animations": {
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "raindrops": true,
+ "typing_heatmap": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "multisplash": true
+ },
+ "layout":[
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 0},
+ { "flags": 4, "matrix": [0, 1], "x": 13, "y": 0},
+ { "flags": 4, "matrix": [0, 2], "x": 26, "y": 0},
+ { "flags": 4, "matrix": [0, 3], "x": 39, "y": 0},
+ { "flags": 4, "matrix": [0, 4], "x": 52, "y": 0},
+ { "flags": 4, "matrix": [0, 5], "x": 65, "y": 0},
+ { "flags": 4, "matrix": [0, 6], "x": 78, "y": 0},
+ { "flags": 4, "matrix": [0, 7], "x":115, "y": 0},
+ { "flags": 4, "matrix": [0, 8], "x":128, "y": 0},
+ { "flags": 4, "matrix": [0, 9], "x":141, "y": 0},
+ { "flags": 4, "matrix": [0, 10], "x":154, "y": 0},
+ { "flags": 4, "matrix": [0, 11], "x":167, "y": 0},
+ { "flags": 4, "matrix": [0, 12], "x":180, "y": 0},
+ { "flags": 4, "matrix": [0, 13], "x":193, "y": 0},
+ { "flags": 4, "matrix": [0, 15], "x":224, "y": 0},
+
+ { "flags": 4, "matrix": [1, 0], "x": 0, "y": 16},
+ { "flags": 4, "matrix": [1, 1], "x": 19, "y": 16},
+ { "flags": 4, "matrix": [1, 2], "x": 33, "y": 16},
+ { "flags": 4, "matrix": [1, 3], "x": 46, "y": 16},
+ { "flags": 4, "matrix": [1, 4], "x": 59, "y": 16},
+ { "flags": 4, "matrix": [1, 5], "x": 72, "y": 16},
+ { "flags": 4, "matrix": [1, 6], "x":108, "y": 16},
+ { "flags": 4, "matrix": [1, 7], "x":122, "y": 16},
+ { "flags": 4, "matrix": [1, 8], "x":135, "y": 16},
+ { "flags": 4, "matrix": [1, 9], "x":148, "y": 16},
+ { "flags": 4, "matrix": [1, 10], "x":161, "y": 16},
+ { "flags": 4, "matrix": [1, 11], "x":174, "y": 16},
+ { "flags": 4, "matrix": [1, 12], "x":187, "y": 16},
+ { "flags": 4, "matrix": [1, 13], "x":200, "y": 16},
+ { "flags": 4, "matrix": [1, 15], "x":224, "y": 16},
+
+ { "flags": 4, "matrix": [2, 0], "x": 0, "y": 32},
+ { "flags": 4, "matrix": [2, 1], "x": 23, "y": 32},
+ { "flags": 4, "matrix": [2, 2], "x": 36, "y": 32},
+ { "flags": 4, "matrix": [2, 3], "x": 49, "y": 32},
+ { "flags": 4, "matrix": [2, 4], "x": 62, "y": 32},
+ { "flags": 4, "matrix": [2, 5], "x": 75, "y": 32},
+ { "flags": 4, "matrix": [2, 6], "x":112, "y": 32},
+ { "flags": 4, "matrix": [2, 7], "x":125, "y": 32},
+ { "flags": 4, "matrix": [2, 8], "x":138, "y": 32},
+ { "flags": 4, "matrix": [2, 9], "x":151, "y": 32},
+ { "flags": 4, "matrix": [2, 10], "x":164, "y": 32},
+ { "flags": 4, "matrix": [2, 11], "x":177, "y": 32},
+ { "flags": 4, "matrix": [2, 12], "x":190, "y": 32},
+ { "flags": 4, "matrix": [2, 13], "x":203, "y": 32},
+ { "flags": 4, "matrix": [2, 15], "x":224, "y": 32},
+
+ { "flags": 4, "matrix": [3, 0], "x": 0, "y": 48},
+ { "flags": 4, "matrix": [3, 11], "x": 16, "y": 48},
+ { "flags": 4, "matrix": [3, 1], "x": 29, "y": 48},
+ { "flags": 4, "matrix": [3, 2], "x": 42, "y": 48},
+ { "flags": 4, "matrix": [3, 3], "x": 65, "y": 48},
+ { "flags": 4, "matrix": [3, 4], "x": 78, "y": 48},
+ { "flags": 4, "matrix": [3, 5], "x": 91, "y": 48},
+ { "flags": 4, "matrix": [3, 6], "x":105, "y": 48},
+ { "flags": 4, "matrix": [3, 7], "x":118, "y": 48},
+ { "flags": 4, "matrix": [3, 8], "x":131, "y": 48},
+ { "flags": 4, "matrix": [3, 9], "x":144, "y": 48},
+ { "flags": 4, "matrix": [3, 10], "x":158, "y": 48},
+ { "flags": 4, "matrix": [3, 13], "x":171, "y": 48},
+ { "flags": 4, "matrix": [3, 14], "x":184, "y": 48},
+ { "flags": 4, "matrix": [3, 15], "x":210, "y": 48},
+
+ { "flags": 4, "matrix": [4, 0], "x": 0, "y": 64},
+ { "flags": 4, "matrix": [4, 1], "x": 37, "y": 64},
+ { "flags": 4, "matrix": [4, 2], "x": 59, "y": 64},
+ { "flags": 4, "matrix": [4, 5], "x": 85, "y": 64},
+ { "flags": 4, "matrix": [4, 9], "x":105, "y": 64},
+ { "flags": 4, "matrix": [4, 10], "x":138, "y": 64},
+ { "flags": 4, "matrix": [4, 11], "x":158, "y": 64},
+ { "flags": 4, "matrix": [4, 13], "x":196, "y": 64},
+ { "flags": 4, "matrix": [4, 14], "x":210, "y": 64},
+ { "flags": 4, "matrix": [4, 15], "x":224, "y": 64},
+
+ { "flags": 2, "x":0, "y":0},
+ { "flags": 2, "x":0, "y":6},
+ { "flags": 2, "x":0, "y":13},
+ { "flags": 2, "x":0, "y":19},
+ { "flags": 2, "x":0, "y":25},
+ { "flags": 2, "x":0, "y":32},
+ { "flags": 2, "x":0, "y":38},
+ { "flags": 2, "x":0, "y":45},
+ { "flags": 2, "x":0, "y":51},
+ { "flags": 2, "x":0, "y":57},
+ { "flags": 2, "x":0, "y":64},
+
+ { "flags": 2, "x":224, "y":0},
+ { "flags": 2, "x":224, "y":6},
+ { "flags": 2, "x":224, "y":13},
+ { "flags": 2, "x":224, "y":19},
+ { "flags": 2, "x":224, "y":25},
+ { "flags": 2, "x":224, "y":32},
+ { "flags": 2, "x":224, "y":38},
+ { "flags": 2, "x":224, "y":45},
+ { "flags": 2, "x":224, "y":51},
+ { "flags": 2, "x":224, "y":57},
+ { "flags": 2, "x":224, "y":64}
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "!", "matrix": [0, 1], "x": 1, "y":0 },
+ { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "&", "matrix": [0, 7], "x": 8.75, "y": 0 },
+ { "label": "*", "matrix": [0, 8], "x": 9.75, "y": 0 },
+ { "label": "(", "matrix": [0, 9], "x": 10.75, "y": 0 },
+ { "label": ")", "matrix": [0, 10], "x": 11.75, "y": 0 },
+ { "label": "_", "matrix": [0, 11], "x": 12.75, "y": 0 },
+ { "label": "+", "matrix": [0, 12], "x": 13.75, "y": 0 },
+ { "label": "Bksp", "matrix": [0, 13], "w": 2, "x": 14.75, "y": 0 },
+ { "label": "Del", "matrix": [0, 15], "x": 17, "y": 0 },
+
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1.25 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1.25 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1.25 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1.25 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1.25 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1.25 },
+ { "label": "Y", "matrix": [1, 6], "x": 8.25, "y": 1.25 },
+ { "label": "U", "matrix": [1, 7], "x": 9.25, "y": 1.25 },
+ { "label": "I", "matrix": [1, 8], "x": 10.25, "y": 1.25 },
+ { "label": "O", "matrix": [1, 9], "x": 11.25, "y": 1.25 },
+ { "label": "P", "matrix": [1, 10], "x": 12.25, "y": 1.25 },
+ { "label": "{", "matrix": [1, 11], "x": 13.25, "y": 1.25 },
+ { "label": "}", "matrix": [1, 12], "x": 14.25, "y": 1.25 },
+ { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 15.25, "y": 1.25 },
+ { "label": "PageUp", "matrix": [1, 15], "x": 17, "y": 1.25 },
+
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2.25 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2.25 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2.25 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2.25 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2.25 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2.25 },
+ { "label": "H", "matrix": [2, 6], "x": 8.5, "y": 2.25 },
+ { "label": "J", "matrix": [2, 7], "x": 9.5, "y": 2.25 },
+ { "label": "K", "matrix": [2, 8], "x": 10.5, "y": 2.25 },
+ { "label": "L", "matrix": [2, 9], "x": 11.5, "y": 2.25 },
+ { "label": ":", "matrix": [2, 10], "x": 12.5, "y": 2.25 },
+ { "label": "'", "matrix": [2, 11], "x": 13.5, "y": 2.25 },
+ { "label": ":", "matrix": [2, 12], "x": 14.5, "y": 2.25 },
+ { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 14.5, "y": 2.25 },
+ { "label": "PageDn", "matrix": [2, 15], "x": 17, "y": 2.25 },
+
+ { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3.25 },
+ { "label": ":", "matrix": [3, 11], "x": 1.25, "y": 3.25 },
+ { "label": "Z", "matrix": [3, 1], "x": 2.25, "y": 3.25 },
+ { "label": "X", "matrix": [3, 2], "x": 3.25, "y": 3.25 },
+ { "label": "C", "matrix": [3, 3], "x": 4.25, "y": 3.25 },
+ { "label": "V", "matrix": [3, 4], "x": 5.25, "y": 3.25 },
+ { "label": "B", "matrix": [3, 5], "x": 6.25, "y": 3.25 },
+ { "label": "B", "matrix": [3, 6], "x": 8, "y": 3.25 },
+ { "label": "N", "matrix": [3, 7], "x": 9, "y": 3.25 },
+ { "label": "M", "matrix": [3, 8], "x": 10, "y": 3.25 },
+ { "label": "<", "matrix": [3, 9], "x": 11, "y": 3.25 },
+ { "label": ">", "matrix": [3, 10], "x": 12, "y": 3.25 },
+ { "label": "?", "matrix": [3, 13], "x": 13, "y": 3.25 },
+ { "label": "Shift", "matrix": [3, 14], "w": 1.75, "x": 14, "y": 3.25 },
+ { "label": "Up", "matrix": [3, 15], "x": 16, "y": 3.25 },
+
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4.25 },
+ { "label": "Alt", "matrix": [4, 1], "w": 1.5, "x": 3, "y": 4.25 },
+ { "label": "Space", "matrix": [4, 2], "w": 2, "x": 4.5, "y": 4.25 },
+ { "label": "Win", "matrix": [4, 5], "w": 1.25, "x": 6.5, "y": 4.25 },
+ { "label": "Space", "matrix": [4, 9], "w": 2.5, "x": 8, "y": 4.25 },
+ { "label": "Alt", "matrix": [4, 10], "w":1.5, "x": 10.5, "y": 4.25 },
+ { "label": "Fn", "matrix": [4, 11], "w":1.5, "x": 12, "y": 4.25 },
+ { "label": "Left", "matrix": [4, 13], "x": 15, "y": 4.25 },
+ { "label": "Down", "matrix": [4, 14], "x": 16, "y": 4.25 },
+ { "label": "Right", "matrix": [4, 15], "x": 17, "y": 4.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/monsgeek/m6/keymaps/default/keymap.c b/keyboards/monsgeek/m6/keymaps/default/keymap.c
new file mode 100644
index 000000000000..8a03db1790bc
--- /dev/null
+++ b/keyboards/monsgeek/m6/keymaps/default/keymap.c
@@ -0,0 +1,76 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, MO(WIN_FN), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_W] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
+
+ [WIN_FN] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RGB_MOD,
+ _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, KC_INS, DF(MAC_B),KC_PSCR,_______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, GU_TOGG, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_SPC, KC_LALT, KC_SPC, KC_RGUI, MO(WIN_FN), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_W] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
+
+ [MAC_FN] = LAYOUT( /* FN */
+ KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, _______, RGB_MOD,
+ _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, KC_INS, DF(WIN_B),KC_PSCR,_______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+};
+
diff --git a/keyboards/monsgeek/m6/keymaps/via/keymap.c b/keyboards/monsgeek/m6/keymaps/via/keymap.c
new file mode 100644
index 000000000000..b7e8cecd71d1
--- /dev/null
+++ b/keyboards/monsgeek/m6/keymaps/via/keymap.c
@@ -0,0 +1,76 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum __layers {
+ WIN_B,
+ WIN_W,
+ WIN_FN,
+ MAC_B,
+ MAC_W,
+ MAC_FN
+};
+
+#define KC_TASK LGUI(KC_TAB)
+#define KC_FLXP LGUI(KC_E)
+#define KC_SIRI LCMD(KC_SPC)
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WIN_B] = LAYOUT( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, MO(WIN_FN), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [WIN_W] = LAYOUT( /* Base */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
+
+ [WIN_FN] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RGB_MOD,
+ _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, KC_INS, DF(MAC_B),KC_PSCR,_______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, GU_TOGG, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+
+ [MAC_B] = LAYOUT( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_SPC, KC_LALT, KC_SPC, KC_RGUI, MO(MAC_FN), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [MAC_W] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
+ _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
+
+ [MAC_FN] = LAYOUT( /* FN */
+ KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_SIRI, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, _______, RGB_MOD,
+ _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, KC_INS, DF(WIN_B),KC_PSCR,_______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
+};
+
diff --git a/keyboards/monsgeek/m6/keymaps/via/rules.mk b/keyboards/monsgeek/m6/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/monsgeek/m6/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/monsgeek/m6/m6.c b/keyboards/monsgeek/m6/m6.c
new file mode 100644
index 000000000000..1823d865ccec
--- /dev/null
+++ b/keyboards/monsgeek/m6/m6.c
@@ -0,0 +1,197 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, A_1, B_1, C_1},
+ {0, A_2, B_2, C_2},
+ {0, A_3, B_3, C_3},
+ {0, A_4, B_4, C_4},
+ {0, A_5, B_5, C_5},
+ {0, A_6, B_6, C_6},
+ {0, A_7, B_7, C_7},
+ {0, A_8, B_8, C_8},
+ {0, A_9, B_9, C_9},
+ {0, A_10, B_10, C_10},
+ {0, A_11, B_11, C_11},
+ {0, A_12, B_12, C_12},
+ {0, A_13, B_13, C_13},
+ {0, A_14, B_14, C_14},
+ {1, D_1, E_1, F_1},
+
+ {0, D_1, E_1, F_1},
+ {0, D_2, E_2, F_2},
+ {0, D_3, E_3, F_3},
+ {0, D_4, E_4, F_4},
+ {0, D_5, E_5, F_5},
+ {0, D_6, E_6, F_6},
+ {0, D_7, E_7, F_7},
+ {0, D_8, E_8, F_8},
+ {0, D_9, E_9, F_9},
+ {0, D_10, E_10, F_10},
+ {0, D_11, E_11, F_11},
+ {0, D_12, E_12, F_12},
+ {0, D_13, E_13, F_13},
+ {0, D_14, E_14, F_14},
+ {1, D_2, E_2, F_2},
+
+ {0, G_1, H_1, I_1},
+ {0, G_2, H_2, I_2},
+ {0, G_3, H_3, I_3},
+ {0, G_4, H_4, I_4},
+ {0, G_5, H_5, I_5},
+ {0, G_6, H_6, I_6},
+ {0, G_7, H_7, I_7},
+ {0, G_8, H_8, I_8},
+ {0, G_9, H_9, I_9},
+ {0, G_10, H_10, I_10},
+ {0, G_11, H_11, I_11},
+ {0, G_12, H_12, I_12},
+ {0, A_15, B_15, C_15},
+ {0, G_13, H_13, I_13},
+ {1, D_3, E_3, F_3},
+
+ {0, J_1, K_1, L_1},
+ {0, A_16, B_16, C_16},
+ {0, J_2, K_2, L_2},
+ {0, J_3, K_3, L_3},
+ {0, J_4, K_4, L_4},
+ {0, J_5, K_5, L_5},
+ {0, J_6, K_6, L_6},
+ {0, J_7, K_7, L_7},
+ {0, J_8, K_8, L_8},
+ {0, J_9, K_9, L_9},
+ {0, J_10, K_10, L_10},
+ {0, J_11, K_11, L_11},
+ {0, J_12, K_12, L_12},
+ {1, D_7, E_7, F_7},
+ {1, D_4, E_4, F_4},
+
+ {0, J_13, K_13, L_13},
+ {0, J_14, K_14, L_14},
+ {0, J_15, K_15, L_15},
+ {0, J_16, K_16, L_16},
+ {0, G_14, H_14, I_14},
+ {0, G_15, H_15, I_15},
+ {0, G_16, H_16, I_16},
+ {0, D_15, E_15, F_15},
+ {1, D_6, E_6, F_6},
+ {1, D_5, E_5, F_5},
+
+
+ {1, G_1, H_1, I_1},
+ {1, G_2, H_2, I_2},
+ {1, G_3, H_3, I_3},
+ {1, G_4, H_4, I_4},
+ {1, G_5, H_5, I_5},
+ {1, G_6, H_6, I_6},
+ {1, G_7, H_7, I_7},
+ {1, G_8, H_8, I_8},
+ {1, G_9, H_9, I_9},
+ {1, G_10, H_10, I_10},
+ {1, G_11, H_11, I_11},
+
+ {1, J_1, K_1, L_1},
+ {1, J_2, K_2, L_2},
+ {1, J_3, K_3, L_3},
+ {1, J_4, K_4, L_4},
+ {1, J_5, K_5, L_5},
+ {1, J_6, K_6, L_6},
+ {1, J_7, K_7, L_7},
+ {1, J_8, K_8, L_8},
+ {1, J_9, K_9, L_9},
+ {1, J_10, K_10, L_10},
+ {1, J_11, K_11, L_11},
+};
+
+// clang-format on
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max)
+{
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max))
+ {
+ return false;
+ }
+
+ if (host_keyboard_led_state().caps_lock)
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(30, 255, 255, 255);
+ }
+ else
+ {
+ if (!rgb_matrix_get_flags())
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(30, 0, 0, 0);
+ }
+ }
+ if (keymap_config.no_gui)
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(63, 255, 255, 255);
+ }
+ else
+ {
+ if (!rgb_matrix_get_flags())
+ {
+ RGB_MATRIX_INDICATOR_SET_COLOR(63, 0, 0, 0);
+ }
+ }
+ return true;
+}
+
+#endif
+bool process_record_kb(uint16_t keycode, keyrecord_t *record)
+{
+ if (!process_record_user(keycode, record))
+ {
+ return false;
+ }
+ switch (keycode)
+ {
+ case RGB_TOG:
+ if (record->event.pressed)
+ {
+ switch (rgb_matrix_get_flags())
+ {
+ case LED_FLAG_ALL:
+ {
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ break;
+ default:
+ {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ }
+ break;
+ }
+ }
+ if (!rgb_matrix_is_enabled())
+ {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ rgb_matrix_enable();
+ }
+ return false;
+ default:
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/keyboards/monsgeek/m6/mcuconf.h b/keyboards/monsgeek/m6/mcuconf.h
new file mode 100644
index 000000000000..e2884f3828f6
--- /dev/null
+++ b/keyboards/monsgeek/m6/mcuconf.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2023 jonylee@hfd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include_next
+
+#undef WB32_SPI_USE_QSPI
+#define WB32_SPI_USE_QSPI TRUE
+
+#undef WB32_I2C_USE_I2C1
+#define WB32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/monsgeek/m6/readme.md b/keyboards/monsgeek/m6/readme.md
new file mode 100644
index 000000000000..ca30e5da2043
--- /dev/null
+++ b/keyboards/monsgeek/m6/readme.md
@@ -0,0 +1,19 @@
+# monsgeek m6 keyboard
+
+A customizable 60% keyboard.
+
+* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
+* Hardware Supported: m6
+* Hardware Availability: [monsgeek](https://www.monsgeek.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make monsgeek/m6:default
+
+Flashing example for this keyboard:
+
+ make monsgeek/m6:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, which programmed as *Esc* while plugging in the keyboard.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/monsgeek/m6/rules.mk b/keyboards/monsgeek/m6/rules.mk
new file mode 100644
index 000000000000..24d5f6f52ecc
--- /dev/null
+++ b/keyboards/monsgeek/m6/rules.mk
@@ -0,0 +1,2 @@
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/moondrop/dash75/keymaps/default/keymap.json b/keyboards/moondrop/dash75/keymaps/default/keymap.json
index 67811c18a376..8e2797ebf51c 100644
--- a/keyboards/moondrop/dash75/keymaps/default/keymap.json
+++ b/keyboards/moondrop/dash75/keymaps/default/keymap.json
@@ -1,7 +1,7 @@
{
"version": 1,
"notes": "This file is a keymap.json file for moondrop/dash75",
- "keyboard": "moondrop/dash75",
+ "keyboard": "moondrop/dash75/r1",
"keymap": "default",
"layout": "LAYOUT",
"author": "vinorodrigues",
diff --git a/keyboards/moondrop/dash75/keymaps/via/keymap.json b/keyboards/moondrop/dash75/keymaps/via/keymap.json
index 6d43ee82c80f..d811aaa78034 100644
--- a/keyboards/moondrop/dash75/keymaps/via/keymap.json
+++ b/keyboards/moondrop/dash75/keymaps/via/keymap.json
@@ -1,7 +1,7 @@
{
"version": 1,
"notes": "This file is a keymap.json file for moondrop/dash75",
- "keyboard": "moondrop/dash75",
+ "keyboard": "moondrop/dash75/r1",
"keymap": "via",
"layout": "LAYOUT",
"author": "vinorodrigues",
diff --git a/keyboards/mothwing/info.json b/keyboards/mothwing/info.json
new file mode 100644
index 000000000000..350c52c72e4e
--- /dev/null
+++ b/keyboards/mothwing/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "mothwing",
+ "manufacturer": "Luana co.ltd.",
+ "url": "",
+ "maintainer": "tan-t",
+ "usb": {
+ "vid": "0x4D77",
+ "pid": "0x0001",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["F4", "F5", "F6", "F7", "B1", "B3"],
+ "rows": ["D4", "C6", "D7", "E6"]
+ },
+ "diode_direction": "COL2ROW",
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "D2"
+ },
+ "development_board": "promicro",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 1.18},
+ {"matrix": [0, 1], "x": 1, "y": 1.03},
+ {"matrix": [0, 2], "x": 2, "y": 0.35},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.05},
+ {"matrix": [0, 5], "x": 5, "y": 0.1},
+
+ {"matrix": [4, 5], "x": 11.5, "y": 0.1},
+ {"matrix": [4, 4], "x": 12.5, "y": 0.05},
+ {"matrix": [4, 3], "x": 13.5, "y": 0},
+ {"matrix": [4, 2], "x": 14.5, "y": 0.35},
+ {"matrix": [4, 1], "x": 15.5, "y": 1.08},
+ {"matrix": [4, 0], "x": 16.5, "y": 1.18},
+
+ {"matrix": [1, 0], "x": 0, "y": 2.18},
+ {"matrix": [1, 1], "x": 1, "y": 2.03},
+ {"matrix": [1, 2], "x": 2, "y": 1.35},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.05},
+ {"matrix": [1, 5], "x": 5, "y": 1.1},
+
+ {"matrix": [5, 5], "x": 11.5, "y": 1.1},
+ {"matrix": [5, 4], "x": 12.5, "y": 1.05},
+ {"matrix": [5, 3], "x": 13.5, "y": 1},
+ {"matrix": [5, 2], "x": 14.5, "y": 1.35},
+ {"matrix": [5, 1], "x": 15.5, "y": 2.03},
+ {"matrix": [5, 0], "x": 16.5, "y": 2.18},
+
+ {"matrix": [2, 0], "x": 0, "y": 3.18},
+ {"matrix": [2, 1], "x": 1, "y": 3.03},
+ {"matrix": [2, 2], "x": 2, "y": 2.35},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.05},
+ {"matrix": [2, 5], "x": 5, "y": 2.1},
+
+ {"matrix": [6, 5], "x": 11.5, "y": 2.1},
+ {"matrix": [6, 4], "x": 12.5, "y": 2.05},
+ {"matrix": [6, 3], "x": 13.5, "y": 2},
+ {"matrix": [6, 2], "x": 14.5, "y": 2.35},
+ {"matrix": [6, 1], "x": 15.5, "y": 3.03},
+ {"matrix": [6, 0], "x": 16.5, "y": 3.18},
+
+ {"matrix": [3, 2], "x": 4, "y": 3.05},
+ {"matrix": [3, 3], "x": 5, "y": 3.1},
+ {"matrix": [3, 4], "x": 6, "y": 3.2, "w": 1.25},
+ {"matrix": [3, 5], "x": 7.25, "y": 3.5},
+
+ {"matrix": [7, 5], "x": 9.25, "y": 3.5},
+ {"matrix": [7, 4], "x": 10.25, "y": 3.2, "w": 1.25},
+ {"matrix": [7, 3], "x": 11.5, "y": 3.1},
+ {"matrix": [7, 2], "x": 12.5, "y": 3.05}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mothwing/keymaps/default/keymap.c b/keyboards/mothwing/keymaps/default/keymap.c
new file mode 100644
index 000000000000..0c6923403dd8
--- /dev/null
+++ b/keyboards/mothwing/keymaps/default/keymap.c
@@ -0,0 +1,72 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+enum layer_number {
+ _QWERTY,
+ _RAISE,
+ _LOWER,
+};
+
+#define KC_L_SPC LT(_LOWER, KC_SPC) // lower
+#define KC_R_ENT LT(_RAISE, KC_ENT) // raise
+#define KC_G_JA LGUI_T(KC_LNG1) // cmd or win
+#define KC_G_EN LGUI_T(KC_LNG2) // cmd or win
+#define KC_C_BS LCTL_T(KC_BSPC) // ctrl
+#define KC_A_DEL ALT_T(KC_DEL) // alt
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //,--------+--------+---------+--------+---------+--------. ,--------+---------+--------+---------+--------+--------.
+ KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS,
+ //|--------+--------+---------+--------+---------+--------| |--------+---------+--------+---------+--------+--------|
+ KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
+ //|--------+--------+---------+--------+---------+--------| |--------+---------+--------+---------+--------+--------|
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
+ //`--------+--------+---------+--------+---------+--------/ \--------+---------+--------+---------+--------+--------'
+ KC_A_DEL, KC_G_EN, KC_L_SPC, KC_C_BS, KC_C_BS, KC_R_ENT, KC_G_JA, KC_A_DEL
+ // `----------+--------+---------+--------' `--------+---------+--------+---------'
+ ),
+
+ [_RAISE] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, KC_BSLS, KC_CIRC, KC_EXLM, KC_AMPR, KC_PIPE, KC_AT , KC_EQL , KC_PLUS, KC_ASTR, KC_PERC, KC_MINS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LPRN, KC_HASH, KC_DLR , KC_DQT , KC_QUOT, KC_TILD, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_GRV , KC_RPRN,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, KC_LCBR, KC_LBRC, KC_RBRC, KC_RCBR, _______, _______, _______, _______,
+ //`--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------'
+ _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ // `--------+--------+--------+--------' `--------+--------+--------+--------'
+ ),
+
+ [_LOWER] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , _______, KC_EQL , KC_PLUS, KC_ASTR, KC_PERC, KC_MINS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______, KC_COMM, KC_DOT , KC_SLSH, _______,
+ //`--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------'
+ QK_BOOT , _______, _______, _______, _______, _______, _______, _______
+ // `--------+--------+--------+--------' `--------+--------+--------+--------'
+ ),
+};
diff --git a/keyboards/mothwing/keymaps/via/keymap.c b/keyboards/mothwing/keymaps/via/keymap.c
new file mode 100644
index 000000000000..ba3f5353d971
--- /dev/null
+++ b/keyboards/mothwing/keymaps/via/keymap.c
@@ -0,0 +1,72 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+enum layer_number {
+ _QWERTY,
+ _RAISE,
+ _LOWER
+};
+
+#define KC_L_SPC LT(_LOWER, KC_SPC) // lower
+#define KC_R_ENT LT(_RAISE, KC_ENT) // raise
+#define KC_G_JA LGUI_T(KC_LNG1) // cmd or win
+#define KC_G_EN LGUI_T(KC_LNG2) // cmd or win
+#define KC_C_BS LCTL_T(KC_BSPC) // ctrl
+#define KC_A_DEL ALT_T(KC_DEL) // alt
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //,--------+--------+---------+--------+---------+--------. ,--------+---------+--------+---------+--------+--------.
+ KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS,
+ //|--------+--------+---------+--------+---------+--------| |--------+---------+--------+---------+--------+--------|
+ KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
+ //|--------+--------+---------+--------+---------+--------| |--------+---------+--------+---------+--------+--------|
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
+ //`--------+--------+---------+--------+---------+--------/ \--------+---------+--------+---------+--------+--------'
+ KC_A_DEL, KC_G_EN, KC_L_SPC, KC_C_BS, KC_C_BS, KC_R_ENT, KC_G_JA, KC_A_DEL
+ // `----------+--------+---------+--------' `--------+---------+--------+---------'
+ ),
+
+ [_RAISE] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, KC_BSLS, KC_CIRC, KC_EXLM, KC_AMPR, KC_PIPE, KC_AT , KC_EQL , KC_PLUS, KC_ASTR, KC_PERC, KC_MINS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LPRN, KC_HASH, KC_DLR , KC_DQT , KC_QUOT, KC_TILD, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_GRV , KC_RPRN,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, KC_LCBR, KC_LBRC, KC_RBRC, KC_RCBR, _______, _______, _______, _______,
+ //`--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------'
+ _______, _______, _______, _______, _______, _______, _______, QK_BOOT
+ // `--------+--------+--------+--------' `--------+--------+--------+--------'
+ ),
+
+ [_LOWER] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , _______, KC_EQL , KC_PLUS, KC_ASTR, KC_PERC, KC_MINS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______, KC_COMM, KC_DOT , KC_SLSH, _______,
+ //`--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------'
+ QK_BOOT , _______, _______, _______, _______, _______, _______, _______
+ // `--------+--------+--------+--------' `--------+--------+--------+--------'
+ )
+};
diff --git a/keyboards/mothwing/keymaps/via/rules.mk b/keyboards/mothwing/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/mothwing/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/mothwing/readme.md b/keyboards/mothwing/readme.md
new file mode 100644
index 000000000000..184f608c5d55
--- /dev/null
+++ b/keyboards/mothwing/readme.md
@@ -0,0 +1,23 @@
+# MOTHWING
+
+A split keyboard with 3x6 vertically staggered keys and 4 thumb keys.
+
+* Keyboard Maintainer: [tan-t](https://github.com/tan-t)
+* Hardware Supported: MOTHWING PCB
+* Hardware Availability: currently unavailable. merch will be open around August 2023.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mothwing:default
+
+Flashing example for this keyboard:
+
+ make mothwing:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader by:
+
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/mothwing/rules.mk b/keyboards/mothwing/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/nacly/bigsmoothknob/config.h b/keyboards/nacly/bigsmoothknob/config.h
new file mode 100644
index 000000000000..a6e9a6c480fd
--- /dev/null
+++ b/keyboards/nacly/bigsmoothknob/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2023 nacly (https://github.com/Na-Cly)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
diff --git a/keyboards/nacly/bigsmoothknob/info.json b/keyboards/nacly/bigsmoothknob/info.json
new file mode 100644
index 000000000000..85f1431b29d4
--- /dev/null
+++ b/keyboards/nacly/bigsmoothknob/info.json
@@ -0,0 +1,44 @@
+{
+ "keyboard_name": "bigsmoothknob",
+ "name":"bigsmoothknob",
+ "url": "https://nacly.net",
+ "maintainer": "na-cly",
+ "manufacturer": "na-cly",
+ "usb": {
+ "pid": "0x6273",
+ "vid": "0x6B70",
+ "device_version": "1.0.0"
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "GP26", "pin_b": "GP27" }
+ ]
+ },
+ "matrix_pins": {
+ "cols":["GP18","GP15","GP14","GP13"],
+ "rows":["GP12","GP11"]
+ },
+ "diode_direction": "COL2ROW",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "encoder": true
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "1", "x": 0, "y": 0, "matrix": [0, 0]},
+ {"label": "2", "x": 1, "y": 0, "matrix": [0, 1]},
+ {"label": "3", "x": 2, "y": 0, "matrix": [0, 2]},
+ {"label": "4", "x": 3, "y": 0, "matrix": [0, 3]},
+ {"label": "5", "x": 0, "y": 1, "matrix": [1, 0]},
+ {"label": "6", "x": 1, "y": 1, "matrix": [1, 1]},
+ {"label": "7", "x": 2, "y": 1, "matrix": [1, 2]},
+ {"label": "8", "x": 3, "y": 1, "matrix": [1, 3]}
+ ]
+ }
+ }
+}
diff --git a/keyboards/nacly/bigsmoothknob/keymaps/default/keymap.c b/keyboards/nacly/bigsmoothknob/keymaps/default/keymap.c
new file mode 100644
index 000000000000..dab8a50c4586
--- /dev/null
+++ b/keyboards/nacly/bigsmoothknob/keymaps/default/keymap.c
@@ -0,0 +1,30 @@
+/* Copyright 2023 nacly (https://github.com/Na-Cly)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4,
+ KC_5, KC_6, KC_7, KC_8
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
diff --git a/keyboards/nacly/bigsmoothknob/keymaps/default/rules.mk b/keyboards/nacly/bigsmoothknob/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/nacly/bigsmoothknob/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/nacly/bigsmoothknob/keymaps/via/keymap.c b/keyboards/nacly/bigsmoothknob/keymaps/via/keymap.c
new file mode 100644
index 000000000000..dab8a50c4586
--- /dev/null
+++ b/keyboards/nacly/bigsmoothknob/keymaps/via/keymap.c
@@ -0,0 +1,30 @@
+/* Copyright 2023 nacly (https://github.com/Na-Cly)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4,
+ KC_5, KC_6, KC_7, KC_8
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
diff --git a/keyboards/nacly/bigsmoothknob/keymaps/via/rules.mk b/keyboards/nacly/bigsmoothknob/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1189f4ad1927
--- /dev/null
+++ b/keyboards/nacly/bigsmoothknob/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/nacly/bigsmoothknob/readme.md b/keyboards/nacly/bigsmoothknob/readme.md
new file mode 100644
index 000000000000..0a928205c727
--- /dev/null
+++ b/keyboards/nacly/bigsmoothknob/readme.md
@@ -0,0 +1,22 @@
+# Big Smooth Knob
+8 key macro pad with a gigantic knob.
+
+
+* Keyboard Maintainer: [na-cly](https://github.com/na-cly)
+* Hardware Supported: Big Smooth Knob
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nacly/bigsmoothknob:default
+
+Flashing example for this keyboard:
+
+ make nacly/bigsmoothknob: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:
+
+* **boot button**: Hold the BOOT button on the back of the PCB while plug in usb cable
diff --git a/keyboards/nacly/bigsmoothknob/rules.mk b/keyboards/nacly/bigsmoothknob/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/nacly/bigsmoothknob/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/neson_design/nico/info.json b/keyboards/neson_design/nico/info.json
new file mode 100644
index 000000000000..f21b644f569b
--- /dev/null
+++ b/keyboards/neson_design/nico/info.json
@@ -0,0 +1,121 @@
+{
+ "manufacturer": "Neson Design",
+ "keyboard_name": "Nico",
+ "maintainer": "yulei",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "indicators": {
+ "caps_lock": "E2"
+ },
+ "matrix_pins": {
+ "cols": ["C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "B7", "B3", "B2", "B1", "F6", "F7"],
+ "rows": ["F0", "E6", "F5", "F4", "F1"]
+ },
+ "processor": "atmega32u4",
+ "ws2812": {
+ "pin": "B0"
+ },
+ "rgblight": {
+ "led_count": 5
+ },
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "no_startup_check": true,
+ "pid": "0x6E65",
+ "vid": "0x4E65"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "K017", "matrix": [0, 15], "x": 0, "y": 0 },
+ { "label": "K018", "matrix": [0, 16], "x": 1, "y": 0 },
+ { "label": "K00", "matrix": [0, 0], "x": 2.5, "y": 0 },
+ { "label": "K01", "matrix": [0, 1], "x": 3.5, "y": 0 },
+ { "label": "K02", "matrix": [0, 2], "x": 4.5, "y": 0 },
+ { "label": "K03", "matrix": [0, 3], "x": 5.5, "y": 0 },
+ { "label": "K04", "matrix": [0, 4], "x": 6.5, "y": 0 },
+ { "label": "K05", "matrix": [0, 5], "x": 7.5, "y": 0 },
+ { "label": "K06", "matrix": [0, 6], "x": 8.5, "y": 0 },
+ { "label": "K07", "matrix": [0, 7], "x": 9.5, "y": 0 },
+ { "label": "K08", "matrix": [0, 8], "x": 10.5, "y": 0 },
+ { "label": "K09", "matrix": [0, 9], "x": 11.5, "y": 0 },
+ { "label": "K0A", "matrix": [0, 10], "x": 12.5, "y": 0 },
+ { "label": "K0B", "matrix": [0, 11], "x": 13.5, "y": 0 },
+ { "label": "K0C", "matrix": [0, 12], "x": 14.5, "y": 0 },
+ { "label": "K0D", "matrix": [0, 13], "x": 15.5, "y": 0 },
+ { "label": "K0E", "matrix": [0, 14], "x": 16.5, "y": 0 },
+ { "label": "K4E", "matrix": [4, 14], "x": 17.5, "y": 0 },
+ { "label": "K116", "matrix": [1, 15], "x": 0, "y": 1 },
+ { "label": "K117", "matrix": [1, 16], "x": 1, "y": 1 },
+ { "label": "K10", "matrix": [1, 0], "w": 1.5, "x": 2.5, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "x": 4, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 5, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 6, "y": 1 },
+ { "label": "K14", "matrix": [1, 4], "x": 7, "y": 1 },
+ { "label": "K15", "matrix": [1, 5], "x": 8, "y": 1 },
+ { "label": "K16", "matrix": [1, 6], "x": 9, "y": 1 },
+ { "label": "K17", "matrix": [1, 7], "x": 10, "y": 1 },
+ { "label": "K18", "matrix": [1, 8], "x": 11, "y": 1 },
+ { "label": "K19", "matrix": [1, 9], "x": 12, "y": 1 },
+ { "label": "K1A", "matrix": [1, 10], "x": 13, "y": 1 },
+ { "label": "K1B", "matrix": [1, 11], "x": 14, "y": 1 },
+ { "label": "K1C", "matrix": [1, 12], "x": 15, "y": 1 },
+ { "label": "K1D", "matrix": [1, 13], "w": 1.5, "x": 16, "y": 1 },
+ { "label": "K1E", "matrix": [1, 14], "x": 17.5, "y": 1 },
+ { "label": "K216", "matrix": [2, 15], "x": 0, "y": 2 },
+ { "label": "K217", "matrix": [2, 16], "x": 1, "y": 2 },
+ { "label": "K20", "matrix": [2, 0], "w": 1.75, "x": 2.5, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "x": 4.25, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 5.25, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 6.25, "y": 2 },
+ { "label": "K24", "matrix": [2, 4], "x": 7.25, "y": 2 },
+ { "label": "K25", "matrix": [2, 5], "x": 8.25, "y": 2 },
+ { "label": "K26", "matrix": [2, 6], "x": 9.25, "y": 2 },
+ { "label": "K27", "matrix": [2, 7], "x": 10.25, "y": 2 },
+ { "label": "K28", "matrix": [2, 8], "x": 11.25, "y": 2 },
+ { "label": "K29", "matrix": [2, 9], "x": 12.25, "y": 2 },
+ { "label": "K2A", "matrix": [2, 10], "x": 13.25, "y": 2 },
+ { "label": "K2B", "matrix": [2, 11], "x": 14.25, "y": 2 },
+ { "label": "K2D", "matrix": [2, 13], "w": 2.25, "x": 15.25, "y": 2 },
+ { "label": "K2E", "matrix": [2, 14], "x": 17.5, "y": 2 },
+ { "label": "K316", "matrix": [3, 15], "x": 0, "y": 3 },
+ { "label": "K317", "matrix": [3, 16], "x": 1, "y": 3 },
+ { "label": "K30", "matrix": [3, 0], "w": 2.25, "x": 2.5, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 4.75, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 5.75, "y": 3 },
+ { "label": "K34", "matrix": [3, 4], "x": 6.75, "y": 3 },
+ { "label": "K35", "matrix": [3, 5], "x": 7.75, "y": 3 },
+ { "label": "K36", "matrix": [3, 6], "x": 8.75, "y": 3 },
+ { "label": "K37", "matrix": [3, 7], "x": 9.75, "y": 3 },
+ { "label": "K38", "matrix": [3, 8], "x": 10.75, "y": 3 },
+ { "label": "K39", "matrix": [3, 9], "x": 11.75, "y": 3 },
+ { "label": "K3A", "matrix": [3, 10], "x": 12.75, "y": 3 },
+ { "label": "K3B", "matrix": [3, 11], "x": 13.75, "y": 3 },
+ { "label": "K3C", "matrix": [3, 12], "w": 1.75, "x": 14.75, "y": 3 },
+ { "label": "K3D", "matrix": [3, 13], "x": 16.5, "y": 3 },
+ { "label": "K3E", "matrix": [3, 14], "x": 17.5, "y": 3 },
+ { "label": "K416", "matrix": [4, 15], "x": 0, "y": 4 },
+ { "label": "K417", "matrix": [4, 16], "x": 1, "y": 4 },
+ { "label": "K40", "matrix": [4, 0], "w": 1.25, "x": 2.5, "y": 4 },
+ { "label": "K41", "matrix": [4, 1], "w": 1.25, "x": 3.75, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "w": 1.25, "x": 5, "y": 4 },
+ { "label": "K48", "matrix": [4, 8], "w": 6.25, "x": 6.25, "y": 4 },
+ { "label": "K49", "matrix": [4, 9], "w": 1.25, "x": 12.5, "y": 4 },
+ { "label": "K4A", "matrix": [4, 10], "w": 1.25, "x": 13.75, "y": 4 },
+ { "label": "K4B", "matrix": [4, 11], "x": 15.5, "y": 4 },
+ { "label": "K4C", "matrix": [4, 12], "x": 16.5, "y": 4 },
+ { "label": "K4D", "matrix": [4, 13], "x": 17.5, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/neson_design/nico/keymaps/default/keymap.c b/keyboards/neson_design/nico/keymaps/default/keymap.c
new file mode 100644
index 000000000000..d481379e210c
--- /dev/null
+++ b/keyboards/neson_design/nico/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/**
+ Copyright 2023 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC, KC_PSCR,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_HOME,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_END,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, MO(1),
+ KC_F9,KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_LEFT,KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT(
+ _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,KC_PSCR,_______,
+ _______, _______, QK_BOOT, RGB_TOG,RGB_MOD,_______, KC_F16, KC_F17,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,_______,
+ _______, _______, _______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME, KC_END, _______,_______,
+ _______, _______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,
+ _______, _______, _______,_______,_______, _______, _______,_______, _______,_______,_______),
+};
diff --git a/keyboards/neson_design/nico/keymaps/via/keymap.c b/keyboards/neson_design/nico/keymaps/via/keymap.c
new file mode 100644
index 000000000000..9de688505e45
--- /dev/null
+++ b/keyboards/neson_design/nico/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+/**
+ Copyright 2023 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC, KC_PSCR,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_HOME,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_END,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, MO(1),
+ KC_F9,KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_LEFT,KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______, QK_BOOT, RGB_TOG,RGB_MOD,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,
+ _______, _______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,
+ _______, _______, _______,_______,_______, _______, _______,_______, _______,_______,_______)
+};
diff --git a/keyboards/neson_design/nico/keymaps/via/rules.mk b/keyboards/neson_design/nico/keymaps/via/rules.mk
new file mode 100644
index 000000000000..43061db1dd46
--- /dev/null
+++ b/keyboards/neson_design/nico/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/neson_design/nico/nico.c b/keyboards/neson_design/nico/nico.c
new file mode 100644
index 000000000000..63f08b8639f6
--- /dev/null
+++ b/keyboards/neson_design/nico/nico.c
@@ -0,0 +1,85 @@
+/**
+ * @file nico.c
+ *
+ Copyright 2023 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
+
+#include "quantum.h"
+#ifdef RGBLIGHT_ENABLE
+
+static bool alert = false;
+static bool backup = false;
+static LED_TYPE caps_led;
+static uint16_t last_ticks = 0;
+
+#define ALERT_INTERVAL 500
+#define ALERM_LED_R 0xFF
+#define ALERM_LED_G 0xA5
+#define ALERM_LED_B 0x00
+//golden 0xFF, 0xD9, 0x00
+
+void housekeeping_task_kb(void)
+{
+ if (host_keyboard_led_state().caps_lock) {
+ if (!backup) {
+ caps_led.r = led[4].r;
+ caps_led.g = led[4].g;
+ caps_led.b = led[4].b;
+ backup = true;
+ }
+ if(alert) {
+ led[4].r = ALERM_LED_G;
+ led[4].g = ALERM_LED_R;
+ led[4].b = ALERM_LED_B;
+ } else {
+ led[4].r = 0;
+ led[4].g = 0;
+ led[4].b = 0;
+ }
+ if (timer_elapsed(last_ticks) > ALERT_INTERVAL) {
+ alert = !alert;
+ last_ticks = timer_read();
+ }
+ ws2812_setleds(led, RGBLED_NUM);
+ } else {
+ if (backup) {
+ led[4].r = caps_led.r;
+ led[4].g = caps_led.g;
+ led[4].b = caps_led.b;
+ backup = false;
+ ws2812_setleds(led, RGBLED_NUM);
+ }
+ }
+ housekeeping_task_user();
+}
+
+void rgblight_call_driver(LED_TYPE *start_led, uint8_t num_leds)
+{
+ start_led[2].r = start_led[0].r;
+ start_led[2].g = start_led[0].g;
+ start_led[2].b = start_led[0].b;
+
+ start_led[3].r = start_led[1].r;
+ start_led[3].g = start_led[1].g;
+ start_led[3].b = start_led[1].b;
+
+ uint8_t tmp = start_led[4].g;
+ start_led[4].g = start_led[4].r;
+ start_led[4].r = tmp;
+ ws2812_setleds(start_led, RGBLED_NUM);
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/neson_design/nico/readme.md b/keyboards/neson_design/nico/readme.md
new file mode 100644
index 000000000000..9b821c16d027
--- /dev/null
+++ b/keyboards/neson_design/nico/readme.md
@@ -0,0 +1,21 @@
+# Neson Design (formerly iNETT Studio) Nico
+
+A 65% keyboard with F area from the Neson Design's N series.
+
+* Keyboard Maintainer: [astro](https://github.com/yulei)
+* Hardware Supported: Nico keyboard
+* Hardware Availability: Limited gb
+
+Make example for this keyboard (after setting up your build environment):
+
+ make neson_design/nico:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard.
+* **Physical reset button**: Briefly press the *RST* button on the back of the PCB.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.
\ No newline at end of file
diff --git a/keyboards/neson_design/nico/rules.mk b/keyboards/neson_design/nico/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/neson_design/nico/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/nix_studio/lilith/config.h b/keyboards/nix_studio/lilith/config.h
new file mode 100644
index 000000000000..225e6ac51b24
--- /dev/null
+++ b/keyboards/nix_studio/lilith/config.h
@@ -0,0 +1,7 @@
+// Copyright 2022 Martin Arnstad (@arnstadm)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Set HSE clock since it differs from F411 default */
+#define STM32_HSECLK 16000000
diff --git a/keyboards/nix_studio/lilith/info.json b/keyboards/nix_studio/lilith/info.json
new file mode 100644
index 000000000000..e648cf98fbed
--- /dev/null
+++ b/keyboards/nix_studio/lilith/info.json
@@ -0,0 +1,388 @@
+{
+ "manufacturer": "Nix Studio",
+ "keyboard_name": "lilith",
+ "maintainer": "arnstadm",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B13", "B7", "B6", "B5", "B4", "B3", "A15", "A14", "B1", "B0", "A7", "A6", "A5", "A4", "A2", "A3"],
+ "rows": ["A8", "A1", "B12", "B14", "B15"]
+ },
+ "processor": "STM32F411",
+ "url": "https://www.antipode.no/",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x4C49",
+ "vid": "0x6E78"
+ },
+ "community_layouts": [ "65_ansi_blocker", "65_iso_blocker", "65_ansi_blocker_tsangan_split_bs", "65_iso_blocker_tsangan" ],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [0, 14], "x": 14, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ },
+ "LAYOUT_65_ansi_blocker": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_tsangan_split_bs": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [0, 14], "x": 14, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ },
+ "LAYOUT_65_iso_blocker_tsangan": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
+ { "matrix": [0, 15], "x": 15, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 15], "x": 15, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
+ { "matrix": [2, 15], "x": 15, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 15, "y": 3 },
+ { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
+ { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 },
+ { "matrix": [4, 15], "x": 15, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker/keymap.c b/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker/keymap.c
new file mode 100644
index 000000000000..3afe91ac88a0
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker/keymap.c
@@ -0,0 +1,50 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgD│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │Alt│ Fn│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_65_ansi_blocker(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │ │ │ │ │Ins│ │ │ │ │PSc│Scr│Pause│ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │ │ │ │ │ │ │Mut│Vl-│Vl+│ │ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+ [1] = LAYOUT_65_ansi_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker_tsangan_split_bs/keymap.c b/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker_tsangan_split_bs/keymap.c
new file mode 100644
index 000000000000..b13fd0838831
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/65_ansi_blocker_tsangan_split_bs/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_65_ansi_blocker_tsangan_split_bs(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_65_ansi_blocker_tsangan_split_bs(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/65_iso_blocker/keymap.c b/keyboards/nix_studio/lilith/keymaps/65_iso_blocker/keymap.c
new file mode 100644
index 000000000000..83ac675d043f
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/65_iso_blocker/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+ [0] = LAYOUT_65_iso_blocker(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_65_iso_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/65_iso_blocker_tsangan/keymap.c b/keyboards/nix_studio/lilith/keymaps/65_iso_blocker_tsangan/keymap.c
new file mode 100644
index 000000000000..900a7af04bf3
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/65_iso_blocker_tsangan/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+ [0] = LAYOUT_65_iso_blocker_tsangan(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_65_iso_blocker_tsangan(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/default/keymap.c b/keyboards/nix_studio/lilith/keymaps/default/keymap.c
new file mode 100644
index 000000000000..217eab037bcb
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/default/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/via/keymap.c b/keyboards/nix_studio/lilith/keymaps/via/keymap.c
new file mode 100644
index 000000000000..217eab037bcb
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/via/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2018-2022 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_DEL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/nix_studio/lilith/keymaps/via/rules.mk b/keyboards/nix_studio/lilith/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/nix_studio/lilith/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/nix_studio/lilith/mcuconf.h b/keyboards/nix_studio/lilith/mcuconf.h
new file mode 100644
index 000000000000..e93fdc1d2365
--- /dev/null
+++ b/keyboards/nix_studio/lilith/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+/* Set PLL M divider from 4 (F411 GENERIC default) to 8, because of 16 MHz crystal on board */
+#undef STM32_PLLM_VALUE
+#define STM32_PLLM_VALUE 8
diff --git a/keyboards/nix_studio/lilith/readme.md b/keyboards/nix_studio/lilith/readme.md
new file mode 100644
index 000000000000..b5c9adce0975
--- /dev/null
+++ b/keyboards/nix_studio/lilith/readme.md
@@ -0,0 +1,27 @@
+# lilith
+
+![lilith](https://i.imgur.com/aHr3Iiah.jpg)
+
+Lilith by nix studio. 65% keyboard with gasket mount
+
+* Keyboard Maintainer: [Martin Arnstad](https://github.com/arnstadm)
+* Hardware Supported: Lilith PCB
+* Hardware Availability: https://www.antipode.no/products/nix-lilith
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile nix_studio/lilith -km default
+
+Flashing example for this keyboard:
+
+ qmk flash nix_studio/lilith -km default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the top left key and plug in the keyboard. This will also clear emulated EEPROM, so it is a good first step if the keyboard is misbehaving.
+* **Physical reset button**: Briefly press the button on the back of the PCB, located on the top right
+* **Keycode in layout**: There is no key mapped to `QK_BOOT` in the pre-created keymaps, but you may assign this key in any keymaps you create.
diff --git a/keyboards/nix_studio/lilith/rules.mk b/keyboards/nix_studio/lilith/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/nix_studio/lilith/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/novelkeys/nk_plus/info.json b/keyboards/novelkeys/nk_plus/info.json
index 6444b82d37d8..4fdbf80f5c0e 100755
--- a/keyboards/novelkeys/nk_plus/info.json
+++ b/keyboards/novelkeys/nk_plus/info.json
@@ -111,8 +111,11 @@
"ws2812": {
"pin": "B4"
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_65_xt_ansi_blocker_tsangan"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_65_xt_ansi_blocker_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -129,11 +132,12 @@
{"matrix": [0, 12], "x": 12.5, "y": 0},
{"matrix": [0, 13], "x": 13.5, "y": 0},
{"matrix": [0, 14], "x": 14.5, "y": 0},
- {"matrix": [0, 15], "x": 15.5, "y": 0},
+ {"matrix": [0, 15], "x": 15.5, "y": 0, "w": 2},
{"matrix": [0, 16], "x": 17.5, "y": 0},
+
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
- {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1, "w": 1.5},
{"matrix": [1, 3], "x": 4, "y": 1},
{"matrix": [1, 4], "x": 5, "y": 1},
{"matrix": [1, 5], "x": 6, "y": 1},
@@ -146,11 +150,12 @@
{"matrix": [1, 12], "x": 13, "y": 1},
{"matrix": [1, 13], "x": 14, "y": 1},
{"matrix": [1, 14], "x": 15, "y": 1},
- {"matrix": [1, 15], "x": 16, "y": 1},
+ {"matrix": [1, 15], "x": 16, "y": 1, "w": 1.5},
{"matrix": [1, 16], "x": 17.5, "y": 1},
+
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
- {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2, "w": 1.75},
{"matrix": [2, 3], "x": 4.25, "y": 2},
{"matrix": [2, 4], "x": 5.25, "y": 2},
{"matrix": [2, 5], "x": 6.25, "y": 2},
@@ -162,11 +167,12 @@
{"matrix": [2, 11], "x": 12.25, "y": 2},
{"matrix": [2, 12], "x": 13.25, "y": 2},
{"matrix": [2, 13], "x": 14.25, "y": 2},
- {"matrix": [2, 15], "x": 15.25, "y": 2},
+ {"matrix": [2, 15], "x": 15.25, "y": 2, "w": 2.25},
{"matrix": [2, 16], "x": 17.5, "y": 2},
+
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1, "y": 3},
- {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 2.25},
{"matrix": [3, 4], "x": 4.75, "y": 3},
{"matrix": [3, 5], "x": 5.75, "y": 3},
{"matrix": [3, 6], "x": 6.75, "y": 3},
@@ -177,16 +183,17 @@
{"matrix": [3, 11], "x": 11.75, "y": 3},
{"matrix": [3, 12], "x": 12.75, "y": 3},
{"matrix": [3, 13], "x": 13.75, "y": 3},
- {"matrix": [3, 14], "x": 14.75, "y": 3},
+ {"matrix": [3, 14], "x": 14.75, "y": 3, "w": 1.75},
{"matrix": [3, 15], "x": 16.5, "y": 3},
{"matrix": [3, 16], "x": 17.5, "y": 3},
+
{"matrix": [4, 0], "x": 0, "y": 4},
{"matrix": [4, 1], "x": 1, "y": 4},
- {"matrix": [4, 2], "x": 2.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 3], "x": 4, "y": 4},
- {"matrix": [4, 4], "x": 5, "y": 4},
- {"matrix": [4, 8], "x": 6.5, "y": 4},
- {"matrix": [4, 13], "x": 13.5, "y": 4},
+ {"matrix": [4, 4], "x": 5, "y": 4, "w": 1.5},
+ {"matrix": [4, 8], "x": 6.5, "y": 4, "w": 7},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5},
{"matrix": [4, 14], "x": 15.5, "y": 4},
{"matrix": [4, 15], "x": 16.5, "y": 4},
{"matrix": [4, 16], "x": 17.5, "y": 4}
diff --git a/keyboards/novelkeys/nk_plus/keymaps/default/keymap.c b/keyboards/novelkeys/nk_plus/keymaps/default/keymap.c
index b5697a731d94..358ea8b18ba9 100644
--- a/keyboards/novelkeys/nk_plus/keymaps/default/keymap.c
+++ b/keyboards/novelkeys/nk_plus/keymaps/default/keymap.c
@@ -16,14 +16,14 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT( /* Base */
+[0] = LAYOUT_65_xt_ansi_blocker_tsangan( /* Base */
KC_F1, KC_F2, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
-[1] = LAYOUT( /* FN */
+[1] = LAYOUT_65_xt_ansi_blocker_tsangan( /* FN */
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/novelkeys/nk_plus/keymaps/via/keymap.c b/keyboards/novelkeys/nk_plus/keymaps/via/keymap.c
index 9e877b98048e..0d29c5da8223 100644
--- a/keyboards/novelkeys/nk_plus/keymaps/via/keymap.c
+++ b/keyboards/novelkeys/nk_plus/keymaps/via/keymap.c
@@ -16,14 +16,14 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT( /* Base */
+[0] = LAYOUT_65_xt_ansi_blocker_tsangan( /* Base */
KC_F1, KC_F2, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
-[1] = LAYOUT( /* FN */
+[1] = LAYOUT_65_xt_ansi_blocker_tsangan( /* FN */
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/owlab/jelly_evolv/config.h b/keyboards/owlab/jelly_evolv/config.h
new file mode 100644
index 000000000000..95c5ca604837
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/config.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2023 owlab
+ *
+ * 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 Strip*/
+# define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL + 5
+# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.0
+# define RGBLIGHT_EFFECT_BREATHE_MAX 100
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/hotswap/625u/info.json b/keyboards/owlab/jelly_evolv/hotswap/625u/info.json
new file mode 100644
index 000000000000..ec25908b601e
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/625u/info.json
@@ -0,0 +1,93 @@
+{
+ "keyboard_name": "Jelly Evolv Hotswap_6.25U",
+ "usb": {
+ "pid": "0x3655",
+ "device_version": "0.0.1"
+ },
+ "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":6, "y":0},
+ {"matrix": [0, 6], "x":7, "y":0},
+ {"matrix": [0, 7], "x":8, "y":0},
+ {"matrix": [0, 8], "x":9, "y":0},
+ {"matrix": [0, 9], "x":10.5, "y":0},
+ {"matrix": [0, 10], "x":11.5, "y":0},
+ {"matrix": [0, 11], "x":12.5, "y":0},
+ {"matrix": [0, 12], "x":13.5, "y":0},
+ {"matrix": [0, 14], "x":15, "y":0},
+ {"matrix": [1, 0], "x":0, "y":1.5},
+ {"matrix": [1, 1], "x":1, "y":1.5},
+ {"matrix": [1, 2], "x":2, "y":1.5},
+ {"matrix": [1, 3], "x":3, "y":1.5},
+ {"matrix": [1, 4], "x":4, "y":1.5},
+ {"matrix": [1, 5], "x":5, "y":1.5},
+ {"matrix": [1, 6], "x":6, "y":1.5},
+ {"matrix": [1, 7], "x":7, "y":1.5},
+ {"matrix": [1, 8], "x":8, "y":1.5},
+ {"matrix": [1, 9], "x":9, "y":1.5},
+ {"matrix": [1, 10], "x":10, "y":1.5},
+ {"matrix": [1, 11], "x":11, "y":1.5},
+ {"matrix": [1, 12], "x":12, "y":1.5},
+ {"matrix": [1, 13], "x":13, "y":1.5, "w":2},
+ {"matrix": [1, 14], "x":15, "y":1.5},
+ {"matrix": [2, 0], "x":0, "y":2.5, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.5},
+ {"matrix": [2, 2], "x":2.5, "y":2.5},
+ {"matrix": [2, 3], "x":3.5, "y":2.5},
+ {"matrix": [2, 4], "x":4.5, "y":2.5},
+ {"matrix": [2, 5], "x":5.5, "y":2.5},
+ {"matrix": [2, 6], "x":6.5, "y":2.5},
+ {"matrix": [2, 7], "x":7.5, "y":2.5},
+ {"matrix": [2, 8], "x":8.5, "y":2.5},
+ {"matrix": [2, 9], "x":9.5, "y":2.5},
+ {"matrix": [2, 10], "x":10.5, "y":2.5},
+ {"matrix": [2, 11], "x":11.5, "y":2.5},
+ {"matrix": [2, 12], "x":12.5, "y":2.5},
+ {"matrix": [2, 13], "x":13.5, "y":2.5, "w":1.5},
+ {"matrix": [2, 14], "x":15, "y":2.5},
+ {"matrix": [3, 0], "x":0, "y":3.5, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.5},
+ {"matrix": [3, 2], "x":2.75, "y":3.5},
+ {"matrix": [3, 3], "x":3.75, "y":3.5},
+ {"matrix": [3, 4], "x":4.75, "y":3.5},
+ {"matrix": [3, 5], "x":5.75, "y":3.5},
+ {"matrix": [3, 6], "x":6.75, "y":3.5},
+ {"matrix": [3, 7], "x":7.75, "y":3.5},
+ {"matrix": [3, 8], "x":8.75, "y":3.5},
+ {"matrix": [3, 9], "x":9.75, "y":3.5},
+ {"matrix": [3, 10], "x":10.75, "y":3.5},
+ {"matrix": [3, 11], "x":11.75, "y":3.5},
+ {"matrix": [3, 13], "x":12.75, "y":3.5, "w":2.25},
+ {"matrix": [3, 14], "x":15, "y":3.5},
+ {"matrix": [4, 0], "x":0, "y":4.5, "w":2.25},
+ {"matrix": [4, 1], "x":2.25, "y":4.5},
+ {"matrix": [4, 2], "x":3.25, "y":4.5},
+ {"matrix": [4, 3], "x":4.25, "y":4.5},
+ {"matrix": [4, 4], "x":5.25, "y":4.5},
+ {"matrix": [4, 5], "x":6.25, "y":4.5},
+ {"matrix": [4, 6], "x":7.25, "y":4.5},
+ {"matrix": [4, 7], "x":8.25, "y":4.5},
+ {"matrix": [4, 8], "x":9.25, "y":4.5},
+ {"matrix": [4, 9], "x":10.25, "y":4.5},
+ {"matrix": [4, 10], "x":11.25, "y":4.5},
+ {"matrix": [4, 11], "x":12.25, "y":4.5, "w":1.75},
+ {"matrix": [4, 13], "x":14, "y":4.5},
+ {"matrix": [5, 0], "x":0, "y":5.5, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.5, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.5, "w":1.25},
+ {"matrix": [5, 5], "x":3.75, "y":5.5, "w":6.25},
+ {"matrix": [5, 9], "x":10, "y":5.5, "w":1.25},
+ {"matrix": [5, 10], "x":11.25, "y":5.5, "w":1.25},
+ {"matrix": [5, 12], "x":13, "y":5.5},
+ {"matrix": [5, 13], "x":14, "y":5.5},
+ {"matrix": [5, 14], "x":15, "y":5.5}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/hotswap/625u/keymaps/default/keymap.c b/keyboards/owlab/jelly_evolv/hotswap/625u/keymaps/default/keymap.c
new file mode 100644
index 000000000000..27e63d44fc91
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/625u/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 owlab
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/owlab/jelly_evolv/hotswap/625u/keymaps/via/keymap.c b/keyboards/owlab/jelly_evolv/hotswap/625u/keymaps/via/keymap.c
new file mode 100644
index 000000000000..27e63d44fc91
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/625u/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 owlab
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/owlab/jelly_evolv/hotswap/625u/keymaps/via/rules.mk b/keyboards/owlab/jelly_evolv/hotswap/625u/keymaps/via/rules.mk
new file mode 100644
index 000000000000..43061db1dd46
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/625u/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/hotswap/625u/readme.md b/keyboards/owlab/jelly_evolv/hotswap/625u/readme.md
new file mode 100644
index 000000000000..9bbd09d2cd91
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/625u/readme.md
@@ -0,0 +1,21 @@
+# Jelly Evolv - Hotswap 6.25U PCB
+
+![jelly evolv](https://i.imgur.com/vkHux8Fh.jpg)
+
+A 75% made by Owlab.
+
+* Keyboard Maintainer: [owlab](https://github.com/lizhenmingdirk)
+* Hardware Supported: Jelly Evolv Hotswap 6.25U PCB
+* Hardware Availability: Ended groupbuy: https://www.zfrontier.com/app/flow/W58MLYOGdVVQ
+
+Make example for this keyboard (after setting up your build environment):
+
+ make owlab/jelly_evolv/hotswap/625u:default
+
+Flashing example for this keyboard:
+
+ make owlab/jelly_evolv/hotswap/625u:default:flash
+
+**Bootloader:** Press the button B of the PCB while plugging in the board.
+
+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).
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/hotswap/625u/rules.mk b/keyboards/owlab/jelly_evolv/hotswap/625u/rules.mk
new file mode 100644
index 000000000000..dfd7b8e20848
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/625u/rules.mk
@@ -0,0 +1,5 @@
+MCU_LDSCRIPT = STM32F103x8_0x08006000_bootloader
+DFU_ARGS = -d 1688:2220 -a 0 -s 0x08006000
+DFU_SUFFIX_ARGS = -v 1688 -p 2220
+BOOTLOADER_TYPE = stm32duino
+OPT_DEFS += -DBOOTLOADER_STM32DUINO
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/hotswap/7u/info.json b/keyboards/owlab/jelly_evolv/hotswap/7u/info.json
new file mode 100644
index 000000000000..dc62266add22
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/7u/info.json
@@ -0,0 +1,92 @@
+{
+ "keyboard_name": "Jelly Evolv Hotswap_7U",
+ "usb": {
+ "pid": "0x3755",
+ "device_version": "0.0.1"
+ },
+ "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":6, "y":0},
+ {"matrix": [0, 6], "x":7, "y":0},
+ {"matrix": [0, 7], "x":8, "y":0},
+ {"matrix": [0, 8], "x":9, "y":0},
+ {"matrix": [0, 9], "x":10.5, "y":0},
+ {"matrix": [0, 10], "x":11.5, "y":0},
+ {"matrix": [0, 11], "x":12.5, "y":0},
+ {"matrix": [0, 12], "x":13.5, "y":0},
+ {"matrix": [0, 14], "x":15, "y":0},
+ {"matrix": [1, 0], "x":0, "y":1.5},
+ {"matrix": [1, 1], "x":1, "y":1.5},
+ {"matrix": [1, 2], "x":2, "y":1.5},
+ {"matrix": [1, 3], "x":3, "y":1.5},
+ {"matrix": [1, 4], "x":4, "y":1.5},
+ {"matrix": [1, 5], "x":5, "y":1.5},
+ {"matrix": [1, 6], "x":6, "y":1.5},
+ {"matrix": [1, 7], "x":7, "y":1.5},
+ {"matrix": [1, 8], "x":8, "y":1.5},
+ {"matrix": [1, 9], "x":9, "y":1.5},
+ {"matrix": [1, 10], "x":10, "y":1.5},
+ {"matrix": [1, 11], "x":11, "y":1.5},
+ {"matrix": [1, 12], "x":12, "y":1.5},
+ {"matrix": [1, 13], "x":13, "y":1.5, "w":2},
+ {"matrix": [1, 14], "x":15, "y":1.5},
+ {"matrix": [2, 0], "x":0, "y":2.5, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.5},
+ {"matrix": [2, 2], "x":2.5, "y":2.5},
+ {"matrix": [2, 3], "x":3.5, "y":2.5},
+ {"matrix": [2, 4], "x":4.5, "y":2.5},
+ {"matrix": [2, 5], "x":5.5, "y":2.5},
+ {"matrix": [2, 6], "x":6.5, "y":2.5},
+ {"matrix": [2, 7], "x":7.5, "y":2.5},
+ {"matrix": [2, 8], "x":8.5, "y":2.5},
+ {"matrix": [2, 9], "x":9.5, "y":2.5},
+ {"matrix": [2, 10], "x":10.5, "y":2.5},
+ {"matrix": [2, 11], "x":11.5, "y":2.5},
+ {"matrix": [2, 12], "x":12.5, "y":2.5},
+ {"matrix": [2, 13], "x":13.5, "y":2.5, "w":1.5},
+ {"matrix": [2, 14], "x":15, "y":2.5},
+ {"matrix": [3, 0], "x":0, "y":3.5, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.5},
+ {"matrix": [3, 2], "x":2.75, "y":3.5},
+ {"matrix": [3, 3], "x":3.75, "y":3.5},
+ {"matrix": [3, 4], "x":4.75, "y":3.5},
+ {"matrix": [3, 5], "x":5.75, "y":3.5},
+ {"matrix": [3, 6], "x":6.75, "y":3.5},
+ {"matrix": [3, 7], "x":7.75, "y":3.5},
+ {"matrix": [3, 8], "x":8.75, "y":3.5},
+ {"matrix": [3, 9], "x":9.75, "y":3.5},
+ {"matrix": [3, 10], "x":10.75, "y":3.5},
+ {"matrix": [3, 11], "x":11.75, "y":3.5},
+ {"matrix": [3, 13], "x":12.75, "y":3.5, "w":2.25},
+ {"matrix": [3, 14], "x":15, "y":3.5},
+ {"matrix": [4, 0], "x":0, "y":4.5, "w":2.25},
+ {"matrix": [4, 1], "x":2.25, "y":4.5},
+ {"matrix": [4, 2], "x":3.25, "y":4.5},
+ {"matrix": [4, 3], "x":4.25, "y":4.5},
+ {"matrix": [4, 4], "x":5.25, "y":4.5},
+ {"matrix": [4, 5], "x":6.25, "y":4.5},
+ {"matrix": [4, 6], "x":7.25, "y":4.5},
+ {"matrix": [4, 7], "x":8.25, "y":4.5},
+ {"matrix": [4, 8], "x":9.25, "y":4.5},
+ {"matrix": [4, 9], "x":10.25, "y":4.5},
+ {"matrix": [4, 10], "x":11.25, "y":4.5},
+ {"matrix": [4, 11], "x":12.25, "y":4.5, "w":1.75},
+ {"matrix": [4, 13], "x":14, "y":4.5},
+ {"matrix": [5, 0], "x":0, "y":5.5, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.5, "w":1.5},
+ {"matrix": [5, 2], "x":3.5, "y":5.5},
+ {"matrix": [5, 5], "x":4.5, "y":5.5, "w":7},
+ {"matrix": [5, 10], "x":11.5, "y":5.5},
+ {"matrix": [5, 12], "x":13, "y":5.5},
+ {"matrix": [5, 13], "x":14, "y":5.5},
+ {"matrix": [5, 14], "x":15, "y":5.5}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/hotswap/7u/keymaps/default/keymap.c b/keyboards/owlab/jelly_evolv/hotswap/7u/keymaps/default/keymap.c
new file mode 100644
index 000000000000..1cf53b1fe509
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/7u/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 owlab
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/owlab/jelly_evolv/hotswap/7u/keymaps/via/keymap.c b/keyboards/owlab/jelly_evolv/hotswap/7u/keymaps/via/keymap.c
new file mode 100644
index 000000000000..1cf53b1fe509
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/7u/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 owlab
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/owlab/jelly_evolv/hotswap/7u/keymaps/via/rules.mk b/keyboards/owlab/jelly_evolv/hotswap/7u/keymaps/via/rules.mk
new file mode 100644
index 000000000000..43061db1dd46
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/7u/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/hotswap/7u/readme.md b/keyboards/owlab/jelly_evolv/hotswap/7u/readme.md
new file mode 100644
index 000000000000..31615a8486c2
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/7u/readme.md
@@ -0,0 +1,21 @@
+# Jelly Evolv - Hotswap 7U PCB
+
+![jelly evolv](https://i.imgur.com/yZ89zVkh.jpg)
+
+A 75% made by Owlab.
+
+* Keyboard Maintainer: [owlab](https://github.com/lizhenmingdirk)
+* Hardware Supported: Jelly Evolv Hotswap 7U PCB
+* Hardware Availability: Ended groupbuy: https://www.zfrontier.com/app/flow/W58MLYOGdVVQ
+
+Make example for this keyboard (after setting up your build environment):
+
+ make owlab/jelly_evolv/hotswap/7u:default
+
+Flashing example for this keyboard:
+
+ make owlab/jelly_evolv/hotswap/7u:default:flash
+
+**Bootloader:** Press the button B of the PCB while plugging in the board.
+
+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).
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/hotswap/7u/rules.mk b/keyboards/owlab/jelly_evolv/hotswap/7u/rules.mk
new file mode 100644
index 000000000000..dfd7b8e20848
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/hotswap/7u/rules.mk
@@ -0,0 +1,5 @@
+MCU_LDSCRIPT = STM32F103x8_0x08006000_bootloader
+DFU_ARGS = -d 1688:2220 -a 0 -s 0x08006000
+DFU_SUFFIX_ARGS = -v 1688 -p 2220
+BOOTLOADER_TYPE = stm32duino
+OPT_DEFS += -DBOOTLOADER_STM32DUINO
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/info.json b/keyboards/owlab/jelly_evolv/info.json
new file mode 100644
index 000000000000..999bcca477dc
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/info.json
@@ -0,0 +1,44 @@
+{
+ "manufacturer": "OwLab",
+ "url": "",
+ "maintainer": "Owlab",
+ "usb": {
+ "vid": "0x4F53"
+ },
+ "matrix_pins": {
+ "cols": ["A7", "B0", "B1", "B2", "B10", "B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10", "A15", "B4"],
+ "rows": ["A1", "A2", "A3", "A5", "A4", "A6"]
+ },
+ "diode_direction": "COL2ROW",
+ "ws2812": {
+ "pin": "B3"
+ },
+ "indicators": {
+ "caps_lock": "A0",
+ "on_state": 0
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "processor": "STM32F103",
+ "board": "STM32_F103_STM32DUINO",
+ "rgblight": {
+ "animations": {
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "static_gradient": true
+ },
+ "brightness_steps": 10,
+ "led_count": 123,
+ "max_brightness": 100,
+ "saturation_steps": 8
+ }
+}
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/ld/STM32F103x8_0x08006000_bootloader.ld b/keyboards/owlab/jelly_evolv/ld/STM32F103x8_0x08006000_bootloader.ld
new file mode 100644
index 000000000000..a40e12668aa0
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/ld/STM32F103x8_0x08006000_bootloader.ld
@@ -0,0 +1,89 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ * STM32F103x8 memory setup for use with the STM32Duino bootloader.
+ */
+f103_flash_size = 128k;
+
+MEMORY
+{
+ /*Here we give 22K flash to bootloader*/
+ /*0x08005800 : the application bin start address*/
+ flash0 : org = 0x08006000, len = f103_flash_size - 0x6000
+ flash1 : org = 0x00000000, len = 0
+ flash2 : org = 0x00000000, len = 0
+ flash3 : org = 0x00000000, len = 0
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x20000000, len = 20k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash0);
+REGION_ALIAS("XTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash0);
+REGION_ALIAS("TEXT_FLASH_LMA", flash0);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash0);
+REGION_ALIAS("RODATA_FLASH_LMA", flash0);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash0);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash0);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/solder/info.json b/keyboards/owlab/jelly_evolv/solder/info.json
new file mode 100644
index 000000000000..1c31904ecf51
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/solder/info.json
@@ -0,0 +1,95 @@
+{
+ "keyboard_name": "Jelly Evolv Solder",
+ "usb": {
+ "pid": "0x4A56",
+ "device_version": "0.0.1"
+ },
+ "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":6, "y":0},
+ {"matrix": [0, 6], "x":7, "y":0},
+ {"matrix": [0, 7], "x":8, "y":0},
+ {"matrix": [0, 8], "x":9, "y":0},
+ {"matrix": [0, 9], "x":10.5, "y":0},
+ {"matrix": [0, 10], "x":11.5, "y":0},
+ {"matrix": [0, 11], "x":12.5, "y":0},
+ {"matrix": [0, 12], "x":13.5, "y":0},
+ {"matrix": [0, 14], "x":15, "y":0},
+ {"matrix": [1, 0], "x":0, "y":1.5},
+ {"matrix": [1, 1], "x":1, "y":1.5},
+ {"matrix": [1, 2], "x":2, "y":1.5},
+ {"matrix": [1, 3], "x":3, "y":1.5},
+ {"matrix": [1, 4], "x":4, "y":1.5},
+ {"matrix": [1, 5], "x":5, "y":1.5},
+ {"matrix": [1, 6], "x":6, "y":1.5},
+ {"matrix": [1, 7], "x":7, "y":1.5},
+ {"matrix": [1, 8], "x":8, "y":1.5},
+ {"matrix": [1, 9], "x":9, "y":1.5},
+ {"matrix": [1, 10], "x":10, "y":1.5},
+ {"matrix": [1, 11], "x":11, "y":1.5},
+ {"matrix": [1, 12], "x":12, "y":1.5},
+ {"matrix": [2, 13], "x":13, "y":1.5},
+ {"matrix": [1, 13], "x":14, "y":1.5},
+ {"matrix": [1, 14], "x":15, "y":1.5},
+ {"matrix": [2, 0], "x":0, "y":2.5, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.5},
+ {"matrix": [2, 2], "x":2.5, "y":2.5},
+ {"matrix": [2, 3], "x":3.5, "y":2.5},
+ {"matrix": [2, 4], "x":4.5, "y":2.5},
+ {"matrix": [2, 5], "x":5.5, "y":2.5},
+ {"matrix": [2, 6], "x":6.5, "y":2.5},
+ {"matrix": [2, 7], "x":7.5, "y":2.5},
+ {"matrix": [2, 8], "x":8.5, "y":2.5},
+ {"matrix": [2, 9], "x":9.5, "y":2.5},
+ {"matrix": [2, 10], "x":10.5, "y":2.5},
+ {"matrix": [2, 11], "x":11.5, "y":2.5},
+ {"matrix": [2, 12], "x":12.5, "y":2.5},
+ {"matrix": [3, 12], "x":13.5, "y":2.5, "w":1.5},
+ {"matrix": [2, 14], "x":15, "y":2.5},
+ {"matrix": [3, 0], "x":0, "y":3.5, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.5},
+ {"matrix": [3, 2], "x":2.75, "y":3.5},
+ {"matrix": [3, 3], "x":3.75, "y":3.5},
+ {"matrix": [3, 4], "x":4.75, "y":3.5},
+ {"matrix": [3, 5], "x":5.75, "y":3.5},
+ {"matrix": [3, 6], "x":6.75, "y":3.5},
+ {"matrix": [3, 7], "x":7.75, "y":3.5},
+ {"matrix": [3, 8], "x":8.75, "y":3.5},
+ {"matrix": [3, 9], "x":9.75, "y":3.5},
+ {"matrix": [3, 10], "x":10.75, "y":3.5},
+ {"matrix": [3, 11], "x":11.75, "y":3.5},
+ {"matrix": [3, 13], "x":12.75, "y":3.5, "w":2.25},
+ {"matrix": [3, 14], "x":15, "y":3.5},
+ {"matrix": [4, 0], "x":0, "y":4.5, "w":1.25},
+ {"matrix": [5, 3], "x":1.25, "y":4.5},
+ {"matrix": [4, 1], "x":2.25, "y":4.5},
+ {"matrix": [4, 2], "x":3.25, "y":4.5},
+ {"matrix": [4, 3], "x":4.25, "y":4.5},
+ {"matrix": [4, 4], "x":5.25, "y":4.5},
+ {"matrix": [4, 5], "x":6.25, "y":4.5},
+ {"matrix": [4, 6], "x":7.25, "y":4.5},
+ {"matrix": [4, 7], "x":8.25, "y":4.5},
+ {"matrix": [4, 8], "x":9.25, "y":4.5},
+ {"matrix": [4, 9], "x":10.25, "y":4.5},
+ {"matrix": [4, 10], "x":11.25, "y":4.5},
+ {"matrix": [4, 11], "x":12.25, "y":4.5, "w":1.75},
+ {"matrix": [4, 13], "x":14, "y":4.5},
+ {"matrix": [5, 0], "x":0, "y":5.5, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.5, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.5, "w":1.25},
+ {"matrix": [5, 5], "x":3.75, "y":5.5, "w":6.25},
+ {"matrix": [5, 9], "x":10, "y":5.5, "w":1.25},
+ {"matrix": [5, 10], "x":11.25, "y":5.5, "w":1.25},
+ {"matrix": [5, 12], "x":13, "y":5.5},
+ {"matrix": [5, 13], "x":14, "y":5.5},
+ {"matrix": [5, 14], "x":15, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/owlab/jelly_evolv/solder/keymaps/default/keymap.c b/keyboards/owlab/jelly_evolv/solder/keymaps/default/keymap.c
new file mode 100644
index 000000000000..b45d40340a66
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/solder/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 owlab
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/owlab/jelly_evolv/solder/keymaps/via/keymap.c b/keyboards/owlab/jelly_evolv/solder/keymaps/via/keymap.c
new file mode 100644
index 000000000000..b45d40340a66
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/solder/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 owlab
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/owlab/jelly_evolv/solder/keymaps/via/rules.mk b/keyboards/owlab/jelly_evolv/solder/keymaps/via/rules.mk
new file mode 100644
index 000000000000..43061db1dd46
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/solder/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/solder/readme.md b/keyboards/owlab/jelly_evolv/solder/readme.md
new file mode 100644
index 000000000000..89843dac2dc2
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/solder/readme.md
@@ -0,0 +1,21 @@
+# Jelly Evolv - soldered PCB
+
+![jelly evolv](https://i.imgur.com/Kk49RUVh.jpg)
+
+A 75% made by Owlab.
+
+* Keyboard Maintainer: [owlab](https://github.com/lizhenmingdirk)
+* Hardware Supported: Jelly Evolv solder PCB
+* Hardware Availability: Ended groupbuy: https://www.zfrontier.com/app/flow/W58MLYOGdVVQ
+
+Make example for this keyboard (after setting up your build environment):
+
+ make owlab/jelly_evolv/solder:default
+
+Flashing example for this keyboard:
+
+ make owlab/jelly_evolv/solder:default:flash
+
+**Bootloader:** Press the button B of the PCB while plugging in the board.
+
+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).
\ No newline at end of file
diff --git a/keyboards/owlab/jelly_evolv/solder/rules.mk b/keyboards/owlab/jelly_evolv/solder/rules.mk
new file mode 100644
index 000000000000..dfd7b8e20848
--- /dev/null
+++ b/keyboards/owlab/jelly_evolv/solder/rules.mk
@@ -0,0 +1,5 @@
+MCU_LDSCRIPT = STM32F103x8_0x08006000_bootloader
+DFU_ARGS = -d 1688:2220 -a 0 -s 0x08006000
+DFU_SUFFIX_ARGS = -v 1688 -p 2220
+BOOTLOADER_TYPE = stm32duino
+OPT_DEFS += -DBOOTLOADER_STM32DUINO
\ No newline at end of file
diff --git a/keyboards/pangorin/tan67/config.h b/keyboards/pangorin/tan67/config.h
new file mode 100644
index 000000000000..62ccc4f273f9
--- /dev/null
+++ b/keyboards/pangorin/tan67/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2023 Pangorin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+#ifdef RGB_MATRIX_ENABLE
+ /* RGB Matrix config */
+ #define RGB_MATRIX_LED_COUNT 84
+ #define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+ #define RGB_MATRIX_KEYPRESSES
+ #define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#endif
diff --git a/keyboards/pangorin/tan67/info.json b/keyboards/pangorin/tan67/info.json
new file mode 100644
index 000000000000..4aab01aa8d3c
--- /dev/null
+++ b/keyboards/pangorin/tan67/info.json
@@ -0,0 +1,246 @@
+{
+ "keyboard_name": "Tan67",
+ "manufacturer": "Unknown",
+ "maintainer": "Pangorin",
+ "usb": {
+ "vid": "0x4D4B",
+ "pid": "0x6067",
+ "device_version": "0.0.1"
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["A5", "B10", "A3", "A2", "B0", "A9", "B1", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15"],
+ "rows": ["B12", "B11", "B14", "A8", "A1"]
+ },
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "ws2812": {
+ "pin": "B15"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "max_brightness": 200,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_rain": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "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, 0], "x": 4, "y": 16, "flags": 1},
+ {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4},
+ {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4},
+ {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4},
+ {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4},
+ {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4},
+ {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4},
+ {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4},
+ {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4},
+ {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4},
+ {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4},
+ {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4},
+ {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4},
+ {"matrix": [1, 13], "x": 205, "y": 16, "flags": 4},
+ {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4},
+
+ {"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, 12], "x": 200, "y": 32, "flags": 1},
+ {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4},
+
+ {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1},
+ {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4},
+ {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4},
+ {"matrix": [3, 3], "x": 63, "y": 48, "flags": 4},
+ {"matrix": [3, 4], "x": 78, "y": 48, "flags": 4},
+ {"matrix": [3, 5], "x": 93, "y": 48, "flags": 4},
+ {"matrix": [3, 6], "x": 108, "y": 48, "flags": 4},
+ {"matrix": [3, 7], "x": 123, "y": 48, "flags": 4},
+ {"matrix": [3, 8], "x": 138, "y": 48, "flags": 4},
+ {"matrix": [3, 9], "x": 153, "y": 48, "flags": 4},
+ {"matrix": [3, 10], "x": 168, "y": 48, "flags": 4},
+ {"matrix": [3, 11], "x": 189, "y": 48, "flags": 1},
+ {"matrix": [3, 12], "x": 209, "y": 48, "flags": 4},
+ {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4},
+
+ {"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, 5], "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, 11], "x": 194, "y": 64, "flags": 4},
+ {"matrix": [4, 12], "x": 209, "y": 64, "flags": 4},
+ {"matrix": [4, 13], "x": 224, "y": 64, "flags": 4},
+
+ {"x": 220, "y": 56, "flags": 2},
+ {"x": 202, "y": 56, "flags": 2},
+ {"x": 179, "y": 56, "flags": 2},
+ {"x": 161, "y": 56, "flags": 2},
+ {"x": 131, "y": 56, "flags": 2},
+ {"x": 105, "y": 56, "flags": 2},
+ {"x": 82, "y": 56, "flags": 2},
+ {"x": 52, "y": 56, "flags": 2},
+ {"x": 30, "y": 56, "flags": 2},
+ {"x": 4, "y": 56, "flags": 2},
+ {"x": 19, "y": 8, "flags": 2},
+ {"x": 52, "y": 8, "flags": 2},
+ {"x": 90, "y": 8, "flags": 2},
+ {"x": 127, "y": 8, "flags": 2},
+ {"x": 164, "y": 8, "flags": 2},
+ {"x": 205, "y": 8, "flags": 2}
+ ]
+ },
+ "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, 12], "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, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 6], "x": 7.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [3, 11], "w": 1.75, "x": 12.25, "y": 3},
+ {"matrix": [3, 12], "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, 5], "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, 11], "x": 13, "y": 4},
+ {"matrix": [4, 12], "x": 14, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/pangorin/tan67/keymaps/default/keymap.c b/keyboards/pangorin/tan67/keymaps/default/keymap.c
new file mode 100644
index 000000000000..2b46433eeff3
--- /dev/null
+++ b/keyboards/pangorin/tan67/keymaps/default/keymap.c
@@ -0,0 +1,80 @@
+/* Copyright 2023 Pangorin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────────┐┌────┐
+│` ││1 ││2 ││3 ││4 ││5 ││6 ││7 ││8 ││9 ││0 ││- ││= ││Bksp ││Home│
+└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────────┘└────┘
+┌──────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌──────┐┌────┐
+│Tab ││Q ││W ││E ││R ││T ││Y ││U ││I ││O ││P ││[ ││] │|\ ││PgUp │
+└──────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└──────┘└────┘
+┌───────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌───────────┐┌────┐
+│Caps ││A ││S ││D ││F ││G ││H ││J ││K ││L ││; ││' ││Enter ││PgDn│
+└───────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└───────────┘└────┘
+┌───────────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌───────┐┌────┐┌────┐
+│Shift ││Z ││X ││C ││V ││B ││N ││M ││, ││. ││/ ││RShift ││Up ││End │
+└───────────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└───────┘└────┘└────┘
+┌─────┐┌─────┐┌─────┐┌─────────────────────────────────────┐┌─────┐┌─────┐ ┌────┐┌────┐┌────┐
+│LCtrl││Win ││LAlt ││Space ││MO(1)││RCtrl│ │Left││Down││Righ│
+└─────┘└─────┘└─────┘└─────────────────────────────────────┘└─────┘└─────┘ └────┘└────┘└────┘
+*/
+ /* 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_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+/*
+┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────────┐┌────┐
+│` ││F1 ││F2 ││F3 ││F4 ││F5 ││F6 ││F7 ││F8 ││F9 ││F10 ││F11 ││F12 ││Reset ││ │
+└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────────┘└────┘
+┌──────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌──────┐┌────┐
+│ ││ ││Togg││ ││ ││ ││ ││ ││ ││ ││ ││ ││ │| ││ │
+└──────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└──────┘└────┘
+┌───────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌───────────┐┌────┐
+│ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ │
+└───────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└───────────┘└────┘
+┌───────────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌───────┐┌────┐┌────┐
+│ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││Vai+││ │
+└───────────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└───────┘└────┘└────┘
+┌─────┐┌─────┐┌─────┐┌─────────────────────────────────────┐┌─────┐┌─────┐ ┌────┐┌────┐┌────┐
+│ ││ ││ ││ ││ ││ │ │ ││Vai-││ │
+└─────┘└─────┘└─────┘└─────────────────────────────────────┘└─────┘└─────┘ └────┘└────┘└────┘
+*/
+ /* Row: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
+ [_FN1] = 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, QK_BOOT, _______,
+ _______, _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_VAD, _______
+ )
+};
diff --git a/keyboards/pangorin/tan67/keymaps/via/keymap.c b/keyboards/pangorin/tan67/keymaps/via/keymap.c
new file mode 100644
index 000000000000..2b46433eeff3
--- /dev/null
+++ b/keyboards/pangorin/tan67/keymaps/via/keymap.c
@@ -0,0 +1,80 @@
+/* Copyright 2023 Pangorin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────────┐┌────┐
+│` ││1 ││2 ││3 ││4 ││5 ││6 ││7 ││8 ││9 ││0 ││- ││= ││Bksp ││Home│
+└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────────┘└────┘
+┌──────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌──────┐┌────┐
+│Tab ││Q ││W ││E ││R ││T ││Y ││U ││I ││O ││P ││[ ││] │|\ ││PgUp │
+└──────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└──────┘└────┘
+┌───────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌───────────┐┌────┐
+│Caps ││A ││S ││D ││F ││G ││H ││J ││K ││L ││; ││' ││Enter ││PgDn│
+└───────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└───────────┘└────┘
+┌───────────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌───────┐┌────┐┌────┐
+│Shift ││Z ││X ││C ││V ││B ││N ││M ││, ││. ││/ ││RShift ││Up ││End │
+└───────────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└───────┘└────┘└────┘
+┌─────┐┌─────┐┌─────┐┌─────────────────────────────────────┐┌─────┐┌─────┐ ┌────┐┌────┐┌────┐
+│LCtrl││Win ││LAlt ││Space ││MO(1)││RCtrl│ │Left││Down││Righ│
+└─────┘└─────┘└─────┘└─────────────────────────────────────┘└─────┘└─────┘ └────┘└────┘└────┘
+*/
+ /* 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_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+/*
+┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────────┐┌────┐
+│` ││F1 ││F2 ││F3 ││F4 ││F5 ││F6 ││F7 ││F8 ││F9 ││F10 ││F11 ││F12 ││Reset ││ │
+└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────────┘└────┘
+┌──────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌──────┐┌────┐
+│ ││ ││Togg││ ││ ││ ││ ││ ││ ││ ││ ││ ││ │| ││ │
+└──────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└──────┘└────┘
+┌───────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌───────────┐┌────┐
+│ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ │
+└───────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└───────────┘└────┘
+┌───────────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐┌───────┐┌────┐┌────┐
+│ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││Vai+││ │
+└───────────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└────┘└───────┘└────┘└────┘
+┌─────┐┌─────┐┌─────┐┌─────────────────────────────────────┐┌─────┐┌─────┐ ┌────┐┌────┐┌────┐
+│ ││ ││ ││ ││ ││ │ │ ││Vai-││ │
+└─────┘└─────┘└─────┘└─────────────────────────────────────┘└─────┘└─────┘ └────┘└────┘└────┘
+*/
+ /* Row: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
+ [_FN1] = 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, QK_BOOT, _______,
+ _______, _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, _______, RGB_VAD, _______
+ )
+};
diff --git a/keyboards/pangorin/tan67/keymaps/via/rules.mk b/keyboards/pangorin/tan67/keymaps/via/rules.mk
new file mode 100644
index 000000000000..16d33cd89fe4
--- /dev/null
+++ b/keyboards/pangorin/tan67/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+
diff --git a/keyboards/pangorin/tan67/readme.md b/keyboards/pangorin/tan67/readme.md
new file mode 100644
index 000000000000..6fdb4effbd54
--- /dev/null
+++ b/keyboards/pangorin/tan67/readme.md
@@ -0,0 +1,23 @@
+# TAN67 PCB
+
+A 65% PCB, which controlled by an STM32F072 chipset.
+
+* Keyboard Maintainer: [Pangorin](https://github.com/pangorin)
+* Hardware Supported: STM32F072
+
+Make example for this keyboard (after setting up your build environment):
+
+ make pangorin/tan67:default
+
+Flashing example for this keyboard:
+
+ make pangorin/tan67: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 and plug in the keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/pangorin/tan67/rules.mk b/keyboards/pangorin/tan67/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/pangorin/tan67/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/pangorin/tan67/tan67.c b/keyboards/pangorin/tan67/tan67.c
new file mode 100644
index 000000000000..574624c1576a
--- /dev/null
+++ b/keyboards/pangorin/tan67/tan67.c
@@ -0,0 +1,52 @@
+/* Copyright 2023 Pangorin
+ *
+ * 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_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR);
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ break;
+ case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): {
+ rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ break;
+ case (LED_FLAG_UNDERGLOW): {
+ 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;
+ }
+ return process_record_user(keycode, record);
+}
+#endif
+
diff --git a/keyboards/planck/keymaps/janat-t/config.h b/keyboards/planck/keymaps/janat-t/config.h
new file mode 100644
index 000000000000..5d7616f7ca32
--- /dev/null
+++ b/keyboards/planck/keymaps/janat-t/config.h
@@ -0,0 +1,48 @@
+/* Copyright 2023 Taerakul Janat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#ifdef AUDIO_ENABLE
+# define STARTUP_SONG SONG(PLANCK_SOUND)
+# define DEFAULT_LAYER_SONGS \
+ { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(QWERTY_SOUND) }
+#endif
+
+#define MIDI_BASIC
+
+// Configure the global tapping term (default: 200ms)
+#define TAPPING_TERM 180
+
+// Prevent normal rollover on alphas from accidentally triggering mods.
+#define PERMISSIVE_HOLD
+
+#ifndef MOUSEKEY_INTERVAL
+#define MOUSEKEY_INTERVAL 10
+#endif
+#ifndef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 3
+#endif
+#ifndef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 100
+#endif
+
+// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
+#define QUICK_TAP_TERM 0
+
+#define TRI_LAYER_LOWER_LAYER 3
+#define TRI_LAYER_UPPER_LAYER 4
+#define TRI_LAYER_ADJUST_LAYER 7
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/janat-t/keymap.c b/keyboards/planck/keymaps/janat-t/keymap.c
new file mode 100644
index 000000000000..27166091d260
--- /dev/null
+++ b/keyboards/planck/keymaps/janat-t/keymap.c
@@ -0,0 +1,328 @@
+/* Copyright 2023 Taerakul Janat
+ *
+ * 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
+
+#ifdef AUDIO_ENABLE
+# include "muse.h"
+#endif
+
+enum planck_layers {
+ _QWERTY,
+ _COLEMAK,
+ _NOMOD,
+ _LOWER,
+ _RAISE,
+ _NAV,
+ _MOUSE,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ NOMOD
+};
+
+#define MOU_Z LT(_MOUSE, KC_Z)
+#define MOU_SCLN LT(_MOUSE, KC_SCLN)
+#define NAV_SLSH LT(_NAV, KC_SLSH)
+#define NAV_Z LT(_NAV, KC_Z)
+
+// Left-hand home row mods QWERTY
+#define CTL_A LCTL_T(KC_A)
+#define ALT_S LALT_T(KC_S)
+#define GUI_D LGUI_T(KC_D)
+#define SFT_F LSFT_T(KC_F)
+
+// Right-hand home row mods QWERTY
+#define SFT_J RSFT_T(KC_J)
+#define GUI_K RGUI_T(KC_K)
+#define ALT_L LALT_T(KC_L)
+#define CTL_SCLN RCTL_T(KC_SCLN)
+
+// Left-hand home row mods COLEMAK
+#define CTL_A LCTL_T(KC_A)
+#define ALT_R LALT_T(KC_R)
+#define GUI_S LGUI_T(KC_S)
+#define SHFT_T LSFT_T(KC_T)
+
+// Right-hand home row mods COLEMAK
+#define SFT_N RSFT_T(KC_N)
+#define GUI_E RGUI_T(KC_E)
+#define ALT_I LALT_T(KC_I)
+#define CTL_O RCTL_T(KC_O)
+
+#define HYPER MEH(KC_LGUI)
+
+#define CT_ESC CTL_T(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | BS |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ESC |Ctl-A |Alt-S |GUI-D |Shft-F| G | H |Shft-J|GUI-K |Alt-L |Ctl-; | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CW |MOU-Z | X | C | V | B | N | M | , | . |NAV-/ |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | HYPER| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ CT_ESC, CTL_A, ALT_S, GUI_D, SFT_F, KC_G, KC_H, SFT_J, GUI_K, ALT_L, CTL_SCLN,KC_QUOT,
+ CW_TOGG, MOU_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, NAV_SLSH,KC_ENT,
+ HYPER, KC_LCTL, KC_LALT, KC_LGUI, TL_LOWR, KC_SPC, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | B | J | L | U | Y | ; | BS |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ESC |Ctl-A |Alt-R |GUI-S |Shft-T| G | M |Shft-N|GUI-E |Alt-I |Ctl-O | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CW |MOU-Z | X | C | D | V | K | H | , | . |NAV-/ |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | HYPER| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ CT_ESC, CTL_A, ALT_R, GUI_S, SHFT_T, KC_G, KC_M, SFT_N, GUI_E, ALT_I, CTL_O, KC_QUOT,
+ CW_TOGG, MOU_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, NAV_SLSH,KC_ENT,
+ HYPER, KC_LCTL, KC_LALT, KC_LGUI, TL_LOWR, KC_SPC, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+/* Qwerty without home row mod
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | BS |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ESC | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | HYPER| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NOMOD] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ CT_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,
+ HYPER, KC_LCTL, KC_LALT, KC_LGUI, TL_LOWR, KC_SPC, KC_SPC, TL_UPPR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | BS |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F13 | F14 | F15 | F16 | F17 | F18 | _ | + | { | } | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F19 | F20 | F21 | F22 | F23 | F24 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | |Adjust| Prev | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BS |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | |Adjust| | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Nav
+ * /-----------------------------------------------------------------------------------\
+ * | | Home | PgUp | PgDn | End | | T1 | T← | T→ | T9 | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Ctrl | Alt | GUI |Shift | | ← | ↓ | ↑ | → | Del | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | |[Nav] | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | Shift | | | | | |
+ * \-----------------------------------------------------------------------------------/
+ */
+[_NAV] = LAYOUT_planck_grid(
+ _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END, _______, G(KC_1), SCMD(KC_LBRC), SCMD(KC_RBRC), G(KC_9), _______, _______,
+ _______, KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, KC_LSFT, KC_LSFT, _______, _______, _______, _______, _______
+),
+
+/* Mouse
+ * /-----------------------------------------------------------------------------------\
+ * | | | S↓ | M↑ | S↑ | | S← | S↓ | S↑ | S→ | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | M← | M↓ | M→ | | M← | M↓ | M↑ | M→ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |[Mou] | | | | M3 | M3 | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | M2 | LeftClick | M2 | | | | |
+ * \-----------------------------------------------------------------------------------/
+ */
+[_MOUSE] = LAYOUT_planck_grid(
+ _______, _______, KC_WH_D, KC_MS_U, KC_WH_U, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, _______, _______,
+ _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______,
+ _______, _______, _______, _______, _______, KC_BTN3, KC_BTN3, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, KC_BTN2, KC_BTN1, KC_BTN1, KC_BTN2, _______, _______, _______, _______
+),
+
+/* Adjust (Lower + Raise)
+ * v------------------------RGB CONTROL--------------------v
+ * ,-----------------------------------------------------------------------------------.
+ * | PWR | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|NoMod | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ KC_PWR, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL,
+ _______, _______, MU_NEXT, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, NOMOD, _______, _______,
+ _______, AU_PREV, AU_NEXT, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case NOMOD:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_NOMOD);
+ }
+ return false;
+ break;
+
+ }
+ return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ #ifdef MOUSEKEY_ENABLE
+ tap_code(KC_MS_WH_DOWN);
+ #else
+ tap_code(KC_PGDN);
+ #endif
+ } else {
+ #ifdef MOUSEKEY_ENABLE
+ tap_code(KC_MS_WH_UP);
+ #else
+ tap_code(KC_PGUP);
+ #endif
+ }
+ }
+ return true;
+}
+
+bool dip_switch_update_user(uint8_t index, bool active) {
+ switch (index) {
+ case 0: {
+ if (active) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ break;
+ }
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ }
+ }
+ return true;
+}
+
+void matrix_scan_user(void) {
+#ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ } else {
+ if (muse_counter) {
+ stop_all_notes();
+ muse_counter = 0;
+ }
+ }
+#endif
+}
diff --git a/keyboards/planck/keymaps/janat-t/readme.md b/keyboards/planck/keymaps/janat-t/readme.md
new file mode 100644
index 000000000000..159558d2351a
--- /dev/null
+++ b/keyboards/planck/keymaps/janat-t/readme.md
@@ -0,0 +1,112 @@
+# Janat's Planck Layout
+- MIT Layout
+- QWERTY and Colemak-DH with [Home Row Mods](https://precondition.github.io/home-row-mods)
+- QWERTY w/o mods for muggles
+- Lower + Uper + J/K/L: QWERTY/COLEMAK/NOMOD
+- Left Shift: [Caps Word](https://docs.qmk.fm/#/feature_caps_word)
+- Hold /: [Navigation Layer](#6-navigation-layer)
+- Hold Z: [Mouse Layer](#7-mouse-layer)
+
+## 1. QWERTY Layer - Qwerty with Home Row Mods
+```
+,-----------------------------------------------------------------------------------.
+| Tab | Q | W | E | R | T | Y | U | I | O | P | BS |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| ESC |Ctl-A |Alt-S |GUI-D |Shft-F| G | H |Shft-J|GUI-K |Alt-L |Ctl-; | " |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| CW |MOU-Z | X | C | V | B | N | M | , | . |NAV-/ |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| HYPER| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+```
+
+## 2. COLEMAK Layer - Colemak-DH with Home Row Mods
+```
+,-----------------------------------------------------------------------------------.
+| Tab | Q | W | F | P | B | J | L | U | Y | ; | BS |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| ESC |Ctl-A |Alt-R |GUI-S |Shft-T| G | M |Shft-N|GUI-E |Alt-I |Ctl-O | " |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| CW |MOU-Z | X | C | D | V | K | H | , | . |NAV-/ |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| HYPER| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+```
+
+## 3. NOMOD Layer - QWERTY without Home Row Mods
+```
+,-----------------------------------------------------------------------------------.
+| Tab | Q | W | E | R | T | Y | U | I | O | P | BS |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| ESC | A | S | D | F | G | H | J | K | L | ; | " |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| HYPER| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+```
+
+## 4. Lower Layer
+```
+,-----------------------------------------------------------------------------------.
+| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | BS |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Del | F13 | F14 | F15 | F16 | F17 | F18 | _ | + | { | } | | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | F19 | F20 | F21 | F22 | F23 | F24 |ISO ~ |ISO | | Home | End | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | |Adjust| Prev | Vol- | Vol+ | Play |
+`-----------------------------------------------------------------------------------'
+```
+
+## 5. Raise Layer
+```
+,-----------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BS |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | |Adjust| | | Next | Vol- | Vol+ | Play |
+`-----------------------------------------------------------------------------------'
+```
+## 6. Navigation Layer
+```
+/-----------------------------------------------------------------------------------\
+| | Home | PgUp | PgDn | End | | T1 | T← | T→ | T9 | | |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| | Ctrl | Alt | GUI |Shift | | ← | ↓ | ↑ | → | Del | |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| | | | | | | | | | |[Nav] | |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| | | | | | Shift | | | | | |
+\-----------------------------------------------------------------------------------/
+```
+
+## 7. Mouse Layer
+```
+/-----------------------------------------------------------------------------------\
+| | | S↓ | M↑ | S↑ | | S← | S↓ | S↑ | S→ | | |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| | | M← | M↓ | M→ | | M← | M↓ | M↑ | M→ | | |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| |[Mou] | | | | M3 | M3 | | | | | |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| | | | | M2 | LeftClick | M2 | | | | |
+\-----------------------------------------------------------------------------------/
+```
+
+## 8. Adjust Layer (Lower + Raise)
+```
+ v------------------------RGB CONTROL--------------------v
+,-----------------------------------------------------------------------------------.
+| PWR | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|NoMod | | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | | | | |
+`-----------------------------------------------------------------------------------'
+```
diff --git a/keyboards/planck/keymaps/janat-t/rules.mk b/keyboards/planck/keymaps/janat-t/rules.mk
new file mode 100644
index 000000000000..b0ed6ad92272
--- /dev/null
+++ b/keyboards/planck/keymaps/janat-t/rules.mk
@@ -0,0 +1,7 @@
+ifeq ($(strip $(AUDIO_ENABLE)), yes)
+ SRC += muse.c
+endif
+
+MIDI_ENABLE = yes
+CAPS_WORD_ENABLE = yes
+TRI_LAYER_ENABLE = yes
diff --git a/keyboards/planck/keymaps/lindgrenj6/config.h b/keyboards/planck/keymaps/lindgrenj6/config.h
new file mode 100644
index 000000000000..4fcdb0fc7a77
--- /dev/null
+++ b/keyboards/planck/keymaps/lindgrenj6/config.h
@@ -0,0 +1,51 @@
+/* Copyright 2015-2021 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#ifdef AUDIO_ENABLE
+# define STARTUP_SONG SONG(PLANCK_SOUND)
+// #define STARTUP_SONG SONG(NO_SOUND)
+
+# define DEFAULT_LAYER_SONGS \
+ { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
+
+#define TAPPING_TERM 160
diff --git a/keyboards/planck/keymaps/lindgrenj6/keymap.c b/keyboards/planck/keymaps/lindgrenj6/keymap.c
new file mode 100644
index 000000000000..94353e324836
--- /dev/null
+++ b/keyboards/planck/keymaps/lindgrenj6/keymap.c
@@ -0,0 +1,220 @@
+/* Copyright 2015-2021 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum planck_layers {
+ _BASE,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _NUMPAD,
+ _EXTRA,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, LT(_BASE, KC_MINUS),
+ MT(MOD_LCTL, KC_ESCAPE), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE,
+ KC_LSFT, MT(MOD_LCTL|MOD_LSFT ,KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_INSERT,
+ LT(_EXTRA, KC_GRAVE), TG(_NUMPAD), KC_LGUI, KC_LALT, LT(_LOWER, KC_BSPC), KC_SPACE, KC_SPACE, LT(_RAISE, KC_ENTER), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+
+ [_LOWER] = LAYOUT_planck_grid(
+ KC_TILDE, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, LT(KC_LBRC, KC_7), LT(KC_RBRC, KC_8), KC_MINUS, KC_UNDS, LT(KC_PGUP, KC_HOME),
+ _______, _______, _______, _______, _______, _______, KC_PIPE, KC_LCBR, KC_RCBR, KC_PLUS, KC_EQUAL, LT(KC_PGDN, KC_END),
+ _______, _______, _______, _______, _______, _______, _______, KC_LPRN, KC_RPRN, _______, KC_BSLS, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, _______, _______, C(S(KC_LEFT)), C(KC_MINUS), C(S(KC_PLUS)), C(S(KC_RIGHT))
+ ),
+
+ [_RAISE] = LAYOUT_planck_grid(
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, LGUI(KC_PGUP),
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, _______, _______, _______, _______, LGUI(KC_PGDN),
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, _______, _______, _______, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, KC_PSCR, KC_PSCR, _______, _______, _______, _______, KC_MPLY
+ ),
+
+ [_ADJUST] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, AU_ON, AU_OFF, AU_TOGG, RGB_SPI, _______, RGB_TOG, RGB_VAI, RGB_HUI, KC_BRIGHTNESS_UP, QK_BOOT,
+ _______, _______, MU_ON, MU_OFF, MU_TOGG, RGB_SPD, _______, RGB_MOD, RGB_VAD, RGB_HUD, KC_BRIGHTNESS_DOWN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_NUMPAD] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, KC_CALCULATOR, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS, KC_KP_SLASH,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_KP_ASTERISK,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_0, _______, KC_KP_DOT, KC_KP_ENTER, _______
+ ),
+
+ [_EXTRA] = LAYOUT_planck_grid(
+ G(KC_L), KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______,
+ _______, _______, KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, LT(_EXTRA, KC_MPLY)
+ ),
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case(LT(_BASE,KC_MINUS)):
+ if (record->tap.count && record->event.pressed) {
+ return true;
+ } else if(record->event.pressed) {
+ tap_code(KC_BSLS);
+ return false;
+ }
+ break;
+
+ case(LT(KC_LBRC, KC_7)):
+ if (record->tap.count && record->event.pressed) {
+ tap_code(KC_LBRC);
+ return false;
+ } else if(record->event.pressed) {
+ tap_code16(KC_AMPERSAND);
+ return false;
+ }
+ break;
+
+ case(LT(KC_RBRC, KC_8)):
+ if (record->tap.count && record->event.pressed) {
+ tap_code(KC_RBRC);
+ return false;
+ } else if(record->event.pressed) {
+ tap_code16(KC_ASTERISK);
+ return false;
+ }
+ break;
+
+ case(LT(KC_PGUP, KC_HOME)):
+ if (record->tap.count && record->event.pressed) {
+ tap_code(KC_PGUP);
+ return false;
+ } else if(record->event.pressed) {
+ tap_code(KC_HOME);
+ return false;
+ }
+ break;
+
+ case(LT(KC_PGDN, KC_END)):
+ if (record->tap.count && record->event.pressed) {
+ tap_code(KC_PGDN);
+ return false;
+ } else if(record->event.pressed) {
+ tap_code(KC_END);
+ return false;
+ }
+ break;
+
+ case(LT(_EXTRA, KC_MPLY)):
+ if (record->tap.count == 2 && record->event.pressed) {
+ tap_code(KC_MNXT);
+ return false;
+ } else if(record->event.pressed) {
+ tap_code(KC_MPLY);
+ return false;
+ }
+ break;
+ }
+ return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ #ifdef MOUSEKEY_ENABLE
+ tap_code(KC_MS_WH_DOWN);
+ #else
+ tap_code(KC_PGDN);
+ #endif
+ } else {
+ #ifdef MOUSEKEY_ENABLE
+ tap_code(KC_MS_WH_UP);
+ #else
+ tap_code(KC_PGUP);
+ #endif
+ }
+ }
+ return true;
+}
+
+bool dip_switch_update_user(uint8_t index, bool active) {
+ switch (index) {
+ case 0: {
+#ifdef AUDIO_ENABLE
+ static bool play_sound = false;
+#endif
+ if (active) {
+#ifdef AUDIO_ENABLE
+ if (play_sound) { PLAY_SONG(plover_song); }
+#endif
+ layer_on(_ADJUST);
+ } else {
+#ifdef AUDIO_ENABLE
+ if (play_sound) { PLAY_SONG(plover_gb_song); }
+#endif
+ layer_off(_ADJUST);
+ }
+#ifdef AUDIO_ENABLE
+ play_sound = true;
+#endif
+ break;
+ }
+ case 1:
+ muse_mode = false;
+ }
+ return true;
+}
+
+void matrix_scan_user(void) {
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case LT(_RAISE, KC_ENTER):
+ case LT(_LOWER, KC_BSPC):
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/lindgrenj6/rules.mk b/keyboards/planck/keymaps/lindgrenj6/rules.mk
new file mode 100644
index 000000000000..7aa6b2130f02
--- /dev/null
+++ b/keyboards/planck/keymaps/lindgrenj6/rules.mk
@@ -0,0 +1,5 @@
+ifeq ($(strip $(AUDIO_ENABLE)), yes)
+ SRC += muse.c
+endif
+
+TRI_LAYER_ENABLE = yes
diff --git a/keyboards/planck/rev6_drop/matrix.c b/keyboards/planck/rev6_drop/matrix.c
index fae7de179c83..e31e473ae251 100644
--- a/keyboards/planck/rev6_drop/matrix.c
+++ b/keyboards/planck/rev6_drop/matrix.c
@@ -27,6 +27,7 @@ void matrix_init_custom(void) {
// actual matrix setup - cols
for (int i = 0; i < MATRIX_COLS; i++) {
setPinOutput(matrix_col_pins[i]);
+ writePinLow(matrix_col_pins[i]);
}
// rows
diff --git a/keyboards/planck/rev7/keymaps/default/config.h b/keyboards/planck/rev7/keymaps/default/config.h
index c3de26365b22..fbbab996e1e7 100644
--- a/keyboards/planck/rev7/keymaps/default/config.h
+++ b/keyboards/planck/rev7/keymaps/default/config.h
@@ -41,9 +41,3 @@
- etc.
*/
// #define MIDI_ADVANCED
-
-/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-// #define MIDI_TONE_KEYCODE_OCTAVES 2
-
-// Most tactile encoders have detents every 4 stages
-#define ENCODER_RESOLUTION 4
diff --git a/keyboards/planck/rev7/keymaps/default/keymap.c b/keyboards/planck/rev7/keymaps/default/keymap.c
index 37d7ba0d23c4..4ac4c0de4f88 100644
--- a/keyboards/planck/rev7/keymaps/default/keymap.c
+++ b/keyboards/planck/rev7/keymaps/default/keymap.c
@@ -189,17 +189,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case BACKLIT:
if (record->event.pressed) {
register_code(KC_RSFT);
-#ifdef BACKLIGHT_ENABLE
- backlight_step();
-#endif
-#ifdef KEYBOARD_planck_rev5
- writePinLow(E6);
-#endif
} else {
unregister_code(KC_RSFT);
-#ifdef KEYBOARD_planck_rev5
- writePinHigh(E6);
-#endif
}
return false;
break;
diff --git a/keyboards/planck/rev7/keymaps/peterfalken/config.h b/keyboards/planck/rev7/keymaps/peterfalken/config.h
new file mode 100644
index 000000000000..c3de26365b22
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/peterfalken/config.h
@@ -0,0 +1,49 @@
+/* Copyright 2015-2023 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#ifdef AUDIO_ENABLE
+# define STARTUP_SONG SONG(PLANCK_SOUND)
+// #define STARTUP_SONG SONG(NO_SOUND)
+
+# define DEFAULT_LAYER_SONGS \
+ { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+// #define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+// #define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
diff --git a/keyboards/planck/rev7/keymaps/peterfalken/keymap.c b/keyboards/planck/rev7/keymaps/peterfalken/keymap.c
new file mode 100644
index 000000000000..140149c47233
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/peterfalken/keymap.c
@@ -0,0 +1,80 @@
+// Copyright 2023 Peter.Falken (@PeterFalken)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "muse.h"
+#include "peterfalken.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | Ctrl | Opt | Cmd | LWR | Space | RSE | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ _______, KC_LCTL, KC_LOPT, KC_LCMD, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | ▽ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | ▽ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | RSET | ▽ | M.AP | M.AL | LPAD | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ | SLEP |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CPWD | UN | CU | CO | PA | MV | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ▽ | ▽ | ▽ | ▽ | ▽ | ▽ ▽ | ▽ | ▽ | ▽ | ▽ | ▽ |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ QK_BOOT, _______, CK_M1, KC_MCTL, KC_LPAD, _______, _______, _______, _______, _______, _______, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CK_SLP,
+ CK_CW, _______, CK_CU, CK_CO, CK_PA, CK_MV, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
diff --git a/keyboards/planck/rev7/keymaps/peterfalken/readme.md b/keyboards/planck/rev7/keymaps/peterfalken/readme.md
new file mode 100644
index 000000000000..f64d682a51ed
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/peterfalken/readme.md
@@ -0,0 +1,14 @@
+Copyright 2023 LEG @PeterFalken
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
diff --git a/keyboards/planck/rev7/keymaps/peterfalken/rules.mk b/keyboards/planck/rev7/keymaps/peterfalken/rules.mk
new file mode 100644
index 000000000000..4db223543d7a
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/peterfalken/rules.mk
@@ -0,0 +1,4 @@
+# Setup keymap QMK features
+# TODO: Check for space optimizations
+AUDIO_ENABLE = yes # Enable Audio Output
+ENCODER_ENABLE = no # Disable encoder
diff --git a/keyboards/planck/rev7/matrix.c b/keyboards/planck/rev7/matrix.c
index 6b45d618611f..c89c399a40d2 100644
--- a/keyboards/planck/rev7/matrix.c
+++ b/keyboards/planck/rev7/matrix.c
@@ -19,6 +19,7 @@
#include "hal_pal.h"
#include "hal_pal_lld.h"
#include "quantum.h"
+#include
// STM32-specific watchdog config calculations
// timeout = 31.25us * PR * (RL + 1)
@@ -31,21 +32,36 @@
#define STM32_IWDG_RL_MS(s) STM32_IWDG_RL_US(s * 1000.0)
#define STM32_IWDG_RL_S(s) STM32_IWDG_RL_US(s * 1000000.0)
+#if !defined(PLANCK_ENCODER_RESOLUTION)
+# define PLANCK_ENCODER_RESOLUTION 4
+#endif
+
+#if !defined(PLANCK_WATCHDOG_TIMEOUT)
+# define PLANCK_WATCHDOG_TIMEOUT 1.0
+#endif
+
+#ifdef ENCODER_MAP_ENABLE
+#error "The encoder map feature is not currently supported by the Planck's encoder matrix"
+#endif
+
/* matrix state(1:on, 0:off) */
static pin_t matrix_row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
static pin_t matrix_col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
static matrix_row_t matrix_inverted[MATRIX_COLS];
+#ifdef ENCODER_ENABLE
int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
uint8_t encoder_state[8] = {0};
int8_t encoder_pulses[8] = {0};
uint8_t encoder_value[8] = {0};
+#endif
void matrix_init_custom(void) {
// actual matrix setup - cols
for (int i = 0; i < MATRIX_COLS; i++) {
setPinOutput(matrix_col_pins[i]);
+ writePinLow(matrix_col_pins[i]);
}
// rows
@@ -57,50 +73,47 @@ void matrix_init_custom(void) {
setPinInputLow(B12);
setPinInputLow(B13);
- // setup watchdog timer for 1 second
+#ifndef PLANCK_WATCHDOG_DISABLE
wdgInit();
static WDGConfig wdgcfg;
- wdgcfg.pr = STM32_IWDG_PR_S(1.0);
- wdgcfg.rlr = STM32_IWDG_RL_S(1.0);
+ wdgcfg.pr = STM32_IWDG_PR_S(PLANCK_WATCHDOG_TIMEOUT);
+ wdgcfg.rlr = STM32_IWDG_RL_S(PLANCK_WATCHDOG_TIMEOUT);
wdgcfg.winr = STM32_IWDG_WIN_DISABLED;
wdgStart(&WDGD1, &wdgcfg);
+#endif
}
+#ifdef ENCODER_ENABLE
bool encoder_update(uint8_t index, uint8_t state) {
bool changed = false;
uint8_t i = index;
encoder_pulses[i] += encoder_LUT[state & 0xF];
- if (encoder_pulses[i] >= ENCODER_RESOLUTION) {
+ if (encoder_pulses[i] >= PLANCK_ENCODER_RESOLUTION) {
encoder_value[index]++;
changed = true;
-#ifdef ENCODER_MAP_ENABLE
- encoder_exec_mapping(index, false);
-#else // ENCODER_MAP_ENABLE
encoder_update_kb(index, false);
-#endif // ENCODER_MAP_ENABLE
}
- if (encoder_pulses[i] <= -ENCODER_RESOLUTION) {
+ if (encoder_pulses[i] <= -PLANCK_ENCODER_RESOLUTION) {
encoder_value[index]--;
changed = true;
-#ifdef ENCODER_MAP_ENABLE
- encoder_exec_mapping(index, true);
-#else // ENCODER_MAP_ENABLE
encoder_update_kb(index, true);
-#endif // ENCODER_MAP_ENABLE
}
- encoder_pulses[i] %= ENCODER_RESOLUTION;
+ encoder_pulses[i] %= PLANCK_ENCODER_RESOLUTION;
#ifdef ENCODER_DEFAULT_POS
encoder_pulses[i] = 0;
#endif
return changed;
}
+#endif
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+#ifndef PLANCK_WATCHDOG_DISABLE
// reset watchdog
wdgReset(&WDGD1);
+#endif
bool changed = false;
@@ -136,6 +149,7 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {
changed |= old != current_matrix[row];
}
+#ifdef ENCODER_ENABLE
// encoder-matrix functionality
// set up C/rows for encoder read
@@ -168,6 +182,7 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {
for (int i = 0; i < MATRIX_ROWS; i++) {
setPinInputLow(matrix_row_pins[i]);
}
+#endif
return changed;
}
diff --git a/keyboards/planck/rev7/readme.md b/keyboards/planck/rev7/readme.md
index 9b531a4e0942..6a4df377046a 100644
--- a/keyboards/planck/rev7/readme.md
+++ b/keyboards/planck/rev7/readme.md
@@ -14,7 +14,7 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
## Encoders
-Encoders must have matching pulse & detent resolutions (e.g. 24/24) for the scanning to work properly. Multiple encoders can be used at the same time, and are zero-indexed (compared to being one-indexed on the PCB's silkscreen) in the `encoder_update_user(index, clockwise)` function:
+Encoders must have matching pulse & detent resolutions (e.g. 24/24) for the scanning to work properly. Multiple encoders can be used at the same time, and are zero-indexed (compared to being one-indexed on the PCB's silkscreen) in the `encoder_update_user(uint8_t index, bool clockwise)` function:
```
,-----------------------------------------------------------------------------------.
@@ -28,4 +28,15 @@ Encoders must have matching pulse & detent resolutions (e.g. 24/24) for the scan
`-----------------------------------------------------------------------------------'
```
-If an encoder has a switch built-in, it's connected to the key at that location. On the default keymap, each encoder will play its own rising/falling tone sequence when rotated, and will reset the pitch after one second of inactivity.
+If an encoder has a switch built-in, it's connected to the key at that location. On the default keymap, each encoder will play its own rising/falling tone sequence when rotated, and will reset the pitch after one second of inactivity. The encoder map feature is not currently supported.
+
+## Some Planck-specific config.h options:
+
+```c
+// sets the length (in seconds) of the watchdog timer, which will reset the keyboard due to hang/crash in the code
+#define PLANCK_WATCHDOG_TIMEOUT 1.0
+// disables the watchdog timer - you may want to disable the watchdog timer if you use longer macros
+#define PLANCK_WATCHDOG_DISABLE
+// the resolution of the encoders used in the encoder matrix
+#define PLANCK_ENCODER_RESOLUTION 4
+```
diff --git a/keyboards/plywrks/ply8x/config.h b/keyboards/plywrks/ply8x/config.h
new file mode 100644
index 000000000000..2180b9887f34
--- /dev/null
+++ b/keyboards/plywrks/ply8x/config.h
@@ -0,0 +1,14 @@
+// Copyright 2023 Ramon Imbao (@ramonimbao)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* RGB */
+#define WS2812_SPI SPID2
+#define WS2812_SPI_MOSI_PAL_MODE 0
+#define WS2812_SPI_SCK_PIN B13
+#define WS2812_SPI_SCK_PAL_MODE 0
+#define WS2812_EXTERNAL_PULLUP
+#define RGB_MATRIX_LED_COUNT 6
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/plywrks/ply8x/halconf.h b/keyboards/plywrks/ply8x/halconf.h
new file mode 100644
index 000000000000..e215e323c5d9
--- /dev/null
+++ b/keyboards/plywrks/ply8x/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Ramon Imbao (@ramonimbao)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next
diff --git a/keyboards/plywrks/ply8x/info.json b/keyboards/plywrks/ply8x/info.json
new file mode 100644
index 000000000000..8c5766e2c1c8
--- /dev/null
+++ b/keyboards/plywrks/ply8x/info.json
@@ -0,0 +1,978 @@
+{
+ "manufacturer": "plywrks",
+ "keyboard_name": "ply8x",
+ "maintainer": "ramonimbao",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "rows": ["B2", "B1", "B0", "A7", "A10", "A2"],
+ "cols": ["A9", "A8", "B12", "B11", "B10", "A6", "A5", "A4", "A15", "C13", "C14", "B9", "B7", "B6", "B5", "B4", "B3"]
+ },
+ "processor": "STM32F072",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x7905",
+ "vid": "0x706C"
+ },
+ "ws2812": {
+ "pin": "B15",
+ "driver": "spi"
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_rain": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "WS2812",
+ "layout": [
+ {"flags": 8, "matrix": [3, 0], "x":2, "y":27},
+ {"flags": 8, "matrix": [0,15], "x":211, "y":0},
+ {"flags": 2, "x":0, "y":0},
+ {"flags": 2, "x":10, "y":0},
+ {"flags": 2, "x":20, "y":0},
+ {"flags": 2, "x":30, "y":0}
+ ]
+ },
+ "layout_aliases": {
+ "LAYOUT_ansi": "LAYOUT_tkl_ansi",
+ "LAYOUT_iso": "LAYOUT_tkl_iso"
+ },
+ "community_layouts": [
+ "tkl_ansi",
+ "tkl_ansi_split_bs_rshift",
+ "tkl_ansi_tsangan",
+ "tkl_ansi_tsangan_split_bs_rshift",
+ "tkl_iso",
+ "tkl_iso_split_bs_rshift",
+ "tkl_iso_tsangan",
+ "tkl_iso_tsangan_split_bs_rshift"
+ ],
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "x":12.5, "y":5.25},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "x":12.5, "y":5.25},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25},
+ {"matrix": [2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25},
+ {"matrix": [2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25},
+ {"matrix": [2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "x":12.5, "y":5.25},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25},
+ {"matrix": [2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "x":12.5, "y":5.25},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/plywrks/ply8x/keymaps/default/keymap.c b/keyboards/plywrks/ply8x/keymaps/default/keymap.c
new file mode 100644
index 000000000000..4ca5b29581d8
--- /dev/null
+++ b/keyboards/plywrks/ply8x/keymaps/default/keymap.c
@@ -0,0 +1,47 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+
+#ifdef RGB_MATRIX_ENABLE
+bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
+ led_t led_state = host_keyboard_led_state();
+ if (!led_state.scroll_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(1, 0, 0, 0);
+ }
+
+ if (!led_state.caps_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0);
+ }
+
+ return true;
+}
+#endif
diff --git a/keyboards/plywrks/ply8x/keymaps/via/keymap.c b/keyboards/plywrks/ply8x/keymaps/via/keymap.c
new file mode 100644
index 000000000000..e357a16d89ba
--- /dev/null
+++ b/keyboards/plywrks/ply8x/keymaps/via/keymap.c
@@ -0,0 +1,30 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+
+#ifdef RGB_MATRIX_ENABLE
+bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
+ led_t led_state = host_keyboard_led_state();
+ if (!led_state.scroll_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(1, 0, 0, 0);
+ }
+
+ if (!led_state.caps_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0);
+ }
+
+ return true;
+}
+#endif
diff --git a/keyboards/plywrks/ply8x/keymaps/via/rules.mk b/keyboards/plywrks/ply8x/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/plywrks/ply8x/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/plywrks/ply8x/mcuconf.h b/keyboards/plywrks/ply8x/mcuconf.h
new file mode 100644
index 000000000000..aceb2e3dfc0e
--- /dev/null
+++ b/keyboards/plywrks/ply8x/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 Ramon Imbao (@ramonimbao)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef STM32_SPI_USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
diff --git a/keyboards/plywrks/ply8x/readme.md b/keyboards/plywrks/ply8x/readme.md
new file mode 100644
index 000000000000..91b49344e5db
--- /dev/null
+++ b/keyboards/plywrks/ply8x/readme.md
@@ -0,0 +1,26 @@
+# Plywrks ply8x
+
+![ply8x](https://i.imgur.com/SYY9eKih.png)
+
+F12 coreless keyboard PCB.
+
+* Keyboard Maintainer: [Ramon Imbao](https://github.com/ramonimbao)
+* Hardware Supported: STM32F072
+
+Make example for this keyboard (after setting up your build environment):
+
+ make plywrks/ply8x:default
+
+Flashing example for this keyboard:
+
+ make plywrks/ply8x:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Set the slide switch to `BOOTLOADER`, then briefly press the button on the back of the PCB.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/plywrks/ply8x/rules.mk b/keyboards/plywrks/ply8x/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/plywrks/ply8x/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/preonic/keymaps/dothtm60/config.h b/keyboards/preonic/keymaps/dothtm60/config.h
new file mode 100644
index 000000000000..718b2d4b6507
--- /dev/null
+++ b/keyboards/preonic/keymaps/dothtm60/config.h
@@ -0,0 +1,47 @@
+/* Copyright 2015-2021 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#ifdef AUDIO_ENABLE
+# define STARTUP_SONG SONG(PREONIC_SOUND)
+// #define STARTUP_SONG SONG(NO_SOUND)
+
+# define DEFAULT_LAYER_SONGS \
+ { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) }
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+// #define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+#define MIDI_ADVANCED
+
+#define HOLD_ON_OTHER_KEY_PRESS
diff --git a/keyboards/preonic/keymaps/dothtm60/keymap.c b/keyboards/preonic/keymaps/dothtm60/keymap.c
new file mode 100644
index 000000000000..fbcdb9b7974c
--- /dev/null
+++ b/keyboards/preonic/keymaps/dothtm60/keymap.c
@@ -0,0 +1,159 @@
+/* Copyright 2015-2021 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 7 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+
+#include QMK_KEYBOARD_H
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // [0] = LAYOUT_ortho_5x12(
+ [0] = LAYOUT_ortho_5x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
+ MO(2), KC_LCTL, KC_LALT, KC_LGUI, LT(1,KC_SPC), KC_SPC, KC_SPC, LT(1,KC_SPC), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ortho_5x12(
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, LGUI(KC_MINS), LGUI(KC_EQL), KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
+ KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, LGUI(KC_LCBR), LGUI(KC_RCBR), KC_LCBR, KC_RCBR, KC_DQUO, KC_QUOT, KC_BSLS,
+ KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, LGUI(KC_LBRC), LGUI(KC_RBRC), KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_PENT,
+ KC_TRNS, KC_UNDS, KC_PLUS, KC_MINS, KC_EQL, LGUI(KC_QUES), LGUI(KC_SLSH), KC_QUES, KC_SLSH, KC_QUES, LCAG(KC_UP), KC_TRNS,
+ MO(15), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LGUI(KC_SPC), LGUI(KC_SPC), KC_TRNS, KC_TRNS, LGUI(KC_LBRC), LCAG(KC_DOWN), LGUI(KC_RBRC)
+ ),
+
+ [2] = LAYOUT_ortho_5x12(
+ DB_TOGG, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
+ RGB_TOG, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_NO,
+ HYPR(KC_H), KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO,
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(15), KC_NO, KC_NO, MO(15), KC_TRNS, KC_HOME, KC_PGDN, KC_END
+ ),
+
+
+
+
+ // Musical keys
+
+ [7] = LAYOUT_ortho_5x12(
+
+ // Chromatic Scale Vertical
+ // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ KC_ESC, MI_C, MI_E, MI_Gs, MI_C1, MI_E1, MI_Gs1, MI_C2, MI_E2, MI_Gs2, MI_C3, MI_TR0,
+ KC_TAB, MI_Cs, MI_F, MI_A, MI_Cs1, MI_F1, MI_A1, MI_Cs2, MI_F2, MI_A2, MI_Cs3, MI_TRSU,
+ KC_SPC, MI_D, MI_Fs, MI_As, MI_D1, MI_Fs1, MI_As1, MI_D2, MI_Fs2, MI_As2, MI_D3, MI_TRSD,
+ MI_SUST, MI_Ds, MI_G, MI_B, MI_Ds1, MI_G1, MI_B1, MI_Ds2, MI_G2, MI_B2, MI_Ds3, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+ ),
+
+
+ [8] = LAYOUT_ortho_5x12(
+ // Pocket Operator Scale Vertical
+ //1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ KC_ESC, MI_C, MI_G, MI_C1, MI_G1, MI_C2, MI_G2, MI_C3, MI_G3, MI_C4, MI_G4, MI_TR0,
+ KC_TAB, MI_D, MI_Gs, MI_D1, MI_Gs1, MI_D2, MI_Gs2, MI_D3, MI_Gs3, MI_D4, MI_Gs4, MI_TRSU,
+ KC_SPC, MI_Ds, MI_As, MI_Ds1, MI_As1, MI_Ds2, MI_As2, MI_Ds3, MI_As3, MI_Ds4, MI_As4, MI_TRSD,
+ MI_SUST, MI_F, MI_B, MI_F1, MI_B1, MI_F2, MI_B2, MI_F3, MI_B3, MI_F4, MI_B4, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+ ),
+
+ [9] = LAYOUT_ortho_5x12(
+ // Major scale Vertical
+ // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ KC_ESC, MI_C, MI_G, MI_D1, MI_A1, MI_E2, MI_B2, MI_F3, MI_C4, MI_G4, MI_D5, MI_TR0,
+ KC_TAB, MI_D, MI_A, MI_E1, MI_B1, MI_F2, MI_C3, MI_G3, MI_D4, MI_A4, MI_E5, MI_TRSU,
+ KC_SPC, MI_E, MI_B, MI_F1, MI_C2, MI_G2, MI_D3, MI_A3, MI_E4, MI_B4, MI_F5, MI_TRSD,
+ MI_SUST, MI_F, MI_C1, MI_G1, MI_D2, MI_A2, MI_E3, MI_B3, MI_F4, MI_C5, MI_G5, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+ ),
+
+ [10] = LAYOUT_ortho_5x12(
+ // Black Keys Vertical
+ // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ KC_ESC, MI_C, MI_A, MI_G1, MI_F2, MI_D3, MI_C4, MI_A4, MI_G5, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_C1, MI_A1, MI_G2, MI_F3, MI_D4, MI_C5, MI_A5, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_F, MI_D1, MI_C2, MI_A2, MI_G3, MI_F4, MI_D5, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_G, MI_F1, MI_D2, MI_C3, MI_A3, MI_G4, MI_F5, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+ ),
+
+
+ [11] = LAYOUT_ortho_5x12(
+ // Chromatic Scale Horizontal
+ //1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ KC_ESC, MI_C, MI_Cs, MI_D, MI_Ds, MI_E, MI_F, MI_Fs, MI_G, MI_Gs, MI_A, MI_TR0,
+ KC_TAB, MI_As, MI_B, MI_C1, MI_Cs1, MI_D1, MI_Ds1, MI_E1, MI_F1, MI_Fs1, MI_G1, MI_TRSU,
+ KC_SPC, MI_Gs1, MI_A1, MI_As1, MI_B1, MI_C2, MI_Cs2, MI_D2, MI_Ds2, MI_E2, MI_F2, MI_TRSD,
+ MI_SUST, MI_Fs2, MI_G2, MI_Gs2, MI_A2, MI_As2, MI_B2, MI_C3, MI_Cs3, MI_D3, MI_Ds3, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+ [12] = LAYOUT_ortho_5x12(
+ // Pocket Operator Scale Horizontal
+ //1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ KC_ESC, MI_C, MI_D, MI_Ds, MI_F, MI_G, MI_Gs, MI_As, MI_B, MI_C1, MI_D1, MI_TR0,
+ KC_TAB, MI_Ds1, MI_F1, MI_G1, MI_Gs1, MI_As1, MI_B1, MI_C2, MI_D2, MI_Ds2, MI_F2, MI_TRSU,
+ KC_SPC, MI_G2, MI_Gs2, MI_As2, MI_B2, MI_C3, MI_D3, MI_Ds3, MI_F3, MI_G3, MI_Gs3, MI_TRSD,
+ MI_SUST, MI_As3, MI_B3, MI_C4, MI_D4, MI_Ds4, MI_F4, MI_G4, MI_Gs4, MI_As4, MI_B4, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+
+
+ ),
+
+
+ [13] = LAYOUT_ortho_5x12(
+ // Major scale Horizontal
+ //1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ KC_ESC, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C1, MI_D1, MI_E1, MI_TR0,
+ KC_TAB, MI_F1, MI_G1, MI_A1, MI_B1, MI_C2, MI_D2, MI_E2, MI_F2, MI_G2, MI_A2, MI_TRSU,
+ KC_SPC, MI_B2, MI_C3, MI_D3, MI_E3, MI_F3, MI_G3, MI_A3, MI_B3, MI_C4, MI_D4, MI_TRSD,
+ MI_SUST, MI_E4, MI_F4, MI_G4, MI_A4, MI_B4, MI_C5, MI_D5, MI_E5, MI_F5, MI_G5, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+
+ ),
+ [14] = LAYOUT_ortho_5x12(
+ // Black Keys Horizontal
+ //1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ KC_ESC, MI_C, MI_D, MI_F, MI_G, MI_A, MI_C1, MI_D1, MI_F1, MI_G1, MI_A1, MI_TR0,
+ KC_TAB, MI_C2, MI_D2, MI_F2, MI_G2, MI_A2, MI_C3, MI_D3, MI_F3, MI_G3, MI_A3, MI_TRSU,
+ KC_SPC, MI_C4, MI_D4, MI_F4, MI_G4, MI_A4, MI_C, MI_D, MI_F, MI_G, MI_A, MI_TRSD,
+ MI_SUST, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_BNDU, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+
+
+
+
+
+
+ // Settings
+ [15] = LAYOUT_ortho_5x12(
+ DB_TOGG, MI_CH1, MI_CH2, MI_CH3, MI_CH4, MI_CH5, MI_CH6, MI_CH7, MI_CH8, AU_TOGG, KC_NO, QK_BOOT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_NO, DF(11), DF(12), DF(13), DF(14), KC_NO, DB_TOGG,
+ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_NO, DF(7), DF(8), DF(9), DF(10), KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS, DF(0), DF(0), KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO
+ )
+
+
+};
+
diff --git a/keyboards/preonic/keymaps/dothtm60/rules.mk b/keyboards/preonic/keymaps/dothtm60/rules.mk
new file mode 100644
index 000000000000..4745e5384a73
--- /dev/null
+++ b/keyboards/preonic/keymaps/dothtm60/rules.mk
@@ -0,0 +1,3 @@
+SRC += muse.c
+
+MIDI_ENABLE = yes
diff --git a/keyboards/preonic/rev3/info.json b/keyboards/preonic/rev3/info.json
index d6d494e005c7..e69aacf144e9 100644
--- a/keyboards/preonic/rev3/info.json
+++ b/keyboards/preonic/rev3/info.json
@@ -90,7 +90,7 @@
{"matrix": [8, 2], "x": 2, "y": 4},
{"matrix": [9, 3], "x": 3, "y": 4},
{"matrix": [9, 4], "x": 4, "y": 4},
- {"matrix": [9, 5], "x": 5, "y": 4, "w": 2},
+ {"matrix": [9, 0], "x": 5, "y": 4, "w": 2},
{"matrix": [9, 1], "x": 7, "y": 4},
{"matrix": [9, 2], "x": 8, "y": 4},
{"matrix": [8, 3], "x": 9, "y": 4},
@@ -223,7 +223,7 @@
{"matrix": [8, 1], "x": 1, "y": 4},
{"matrix": [8, 2], "x": 2, "y": 4},
{"matrix": [9, 3], "x": 3, "y": 4},
- {"matrix": [9, 4], "x": 4, "y": 4, "w": 2},
+ {"matrix": [9, 5], "x": 4, "y": 4, "w": 2},
{"matrix": [9, 0], "x": 6, "y": 4},
{"matrix": [9, 1], "x": 7, "y": 4},
{"matrix": [9, 2], "x": 8, "y": 4},
@@ -290,8 +290,8 @@
{"matrix": [8, 1], "x": 1, "y": 4},
{"matrix": [8, 2], "x": 2, "y": 4},
{"matrix": [9, 3], "x": 3, "y": 4},
- {"matrix": [9, 4], "x": 4, "y": 4, "w": 2},
- {"matrix": [9, 0], "x": 6, "y": 4, "w": 2},
+ {"matrix": [9, 5], "x": 4, "y": 4, "w": 2},
+ {"matrix": [9, 1], "x": 6, "y": 4, "w": 2},
{"matrix": [9, 2], "x": 8, "y": 4},
{"matrix": [8, 3], "x": 9, "y": 4},
{"matrix": [8, 4], "x": 10, "y": 4},
diff --git a/keyboards/preonic/rev3_drop/info.json b/keyboards/preonic/rev3_drop/info.json
index a3eac4eaf40b..7e5eace3d5cd 100644
--- a/keyboards/preonic/rev3_drop/info.json
+++ b/keyboards/preonic/rev3_drop/info.json
@@ -89,7 +89,7 @@
{"matrix": [8, 2], "x": 2, "y": 4},
{"matrix": [9, 3], "x": 3, "y": 4},
{"matrix": [9, 4], "x": 4, "y": 4},
- {"matrix": [9, 5], "x": 5, "y": 4, "w": 2},
+ {"matrix": [9, 0], "x": 5, "y": 4, "w": 2},
{"matrix": [9, 1], "x": 7, "y": 4},
{"matrix": [9, 2], "x": 8, "y": 4},
{"matrix": [8, 3], "x": 9, "y": 4},
@@ -290,7 +290,7 @@
{"matrix": [8, 2], "x": 2, "y": 4},
{"matrix": [9, 3], "x": 3, "y": 4},
{"matrix": [9, 5], "x": 4, "y": 4, "w": 2},
- {"matrix": [9, 0], "x": 6, "y": 4, "w": 2},
+ {"matrix": [9, 1], "x": 6, "y": 4, "w": 2},
{"matrix": [9, 2], "x": 8, "y": 4},
{"matrix": [8, 3], "x": 9, "y": 4},
{"matrix": [8, 4], "x": 10, "y": 4},
diff --git a/keyboards/projectd/65/projectd_65_ansi/config.h b/keyboards/projectd/65/projectd_65_ansi/config.h
new file mode 100644
index 000000000000..312a72979f57
--- /dev/null
+++ b/keyboards/projectd/65/projectd_65_ansi/config.h
@@ -0,0 +1,42 @@
+/* Copyright 2023 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
+
+/* 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 (4 * 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 1
+#define RGB_MATRIX_LED_COUNT 71
diff --git a/keyboards/projectd/65/projectd_65_ansi/halconf.h b/keyboards/projectd/65/projectd_65_ansi/halconf.h
new file mode 100644
index 000000000000..64a184eb924e
--- /dev/null
+++ b/keyboards/projectd/65/projectd_65_ansi/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/projectd/65/projectd_65_ansi/info.json b/keyboards/projectd/65/projectd_65_ansi/info.json
new file mode 100644
index 000000000000..41ac577c8d16
--- /dev/null
+++ b/keyboards/projectd/65/projectd_65_ansi/info.json
@@ -0,0 +1,235 @@
+{
+ "manufacturer": "ProjectD",
+ "keyboard_name": "ProjectD 65% ANSI",
+ "maintainer": "Gsky",
+ "bootloader": "wb32-dfu",
+ "bootmagic": {
+ "matrix": [1, 3]
+ },
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 13
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["A0", "A1", "A2", "A3", "A4", "A8", "A9", "A10"],
+ "rows": ["B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8"]
+ },
+ "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": [1, 7], "x": 10, "y": 0 },
+ { "flags": 4, "matrix": [2, 7], "x": 20, "y": 0 },
+ { "flags": 4, "matrix": [3, 7], "x": 30, "y": 0 },
+ { "flags": 4, "matrix": [4, 7], "x": 40, "y": 0 },
+ { "flags": 4, "matrix": [4, 6], "x": 50, "y": 0 },
+ { "flags": 4, "matrix": [5, 6], "x": 60, "y": 0 },
+ { "flags": 4, "matrix": [5, 7], "x": 70, "y": 0 },
+ { "flags": 4, "matrix": [6, 7], "x": 80, "y": 0 },
+ { "flags": 4, "matrix": [7, 7], "x": 90, "y": 0 },
+ { "flags": 4, "matrix": [8, 7], "x": 100, "y": 0 },
+ { "flags": 4, "matrix": [8, 6], "x": 110, "y": 0 },
+ { "flags": 4, "matrix": [6, 6], "x": 120, "y": 0 },
+ { "flags": 4, "matrix": [7, 1], "x": 130, "y": 0 },
+ { "flags": 4, "matrix": [2, 3], "x": 150, "y": 0 },
+ { "flags": 4, "matrix": [1, 1], "x": 0, "y": 10 },
+ { "flags": 4, "matrix": [1, 0], "x": 15, "y": 10 },
+ { "flags": 4, "matrix": [2, 0], "x": 25, "y": 10 },
+ { "flags": 4, "matrix": [3, 0], "x": 35, "y": 10 },
+ { "flags": 4, "matrix": [4, 0], "x": 45, "y": 10 },
+ { "flags": 4, "matrix": [4, 1], "x": 55, "y": 10 },
+ { "flags": 4, "matrix": [5, 1], "x": 65, "y": 10 },
+ { "flags": 4, "matrix": [5, 0], "x": 75, "y": 10 },
+ { "flags": 4, "matrix": [6, 0], "x": 85, "y": 10 },
+ { "flags": 4, "matrix": [7, 0], "x": 95, "y": 10 },
+ { "flags": 4, "matrix": [8, 0], "x": 105, "y": 10 },
+ { "flags": 4, "matrix": [8, 1], "x": 115, "y": 10 },
+ { "flags": 4, "matrix": [6, 1], "x": 125, "y": 10 },
+ { "flags": 4, "matrix": [7, 5], "x": 135, "y": 10 },
+ { "flags": 4, "matrix": [7, 3], "x": 150, "y": 10 },
+ { "flags": 1, "matrix": [2, 1], "x": 0, "y": 20 },
+ { "flags": 4, "matrix": [1, 2], "x": 17.5, "y": 20 },
+ { "flags": 4, "matrix": [2, 2], "x": 27.5, "y": 20 },
+ { "flags": 4, "matrix": [3, 2], "x": 37.5, "y": 20 },
+ { "flags": 4, "matrix": [4, 2], "x": 47.5, "y": 20 },
+ { "flags": 4, "matrix": [4, 3], "x": 57.5, "y": 20 },
+ { "flags": 4, "matrix": [5, 3], "x": 67.5, "y": 20 },
+ { "flags": 4, "matrix": [5, 2], "x": 77.5, "y": 20 },
+ { "flags": 4, "matrix": [6, 2], "x": 87.5, "y": 20 },
+ { "flags": 4, "matrix": [7, 2], "x": 97.5, "y": 20 },
+ { "flags": 4, "matrix": [8, 2], "x": 107.5, "y": 20 },
+ { "flags": 4, "matrix": [8, 3], "x": 117.5, "y": 20 },
+ { "flags": 4, "matrix": [8, 4], "x": 127.5, "y": 20 },
+ { "flags": 4, "matrix": [2, 6], "x": 150, "y": 20 },
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 30 },
+ { "flags": 4, "matrix": [1, 4], "x": 22.5, "y": 30 },
+ { "flags": 4, "matrix": [2, 4], "x": 32.5, "y": 30 },
+ { "flags": 4, "matrix": [3, 4], "x": 42.5, "y": 30 },
+ { "flags": 4, "matrix": [4, 4], "x": 52.5, "y": 30 },
+ { "flags": 4, "matrix": [4, 5], "x": 62.5, "y": 30 },
+ { "flags": 4, "matrix": [5, 5], "x": 72.5, "y": 30 },
+ { "flags": 4, "matrix": [5, 4], "x": 82.5, "y": 30 },
+ { "flags": 4, "matrix": [6, 4], "x": 92.5, "y": 30 },
+ { "flags": 4, "matrix": [7, 4], "x": 102.5, "y": 30 },
+ { "flags": 4, "matrix": [8, 5], "x": 112.5, "y": 30 },
+ { "flags": 4, "matrix": [0, 7], "x": 122.5, "y": 30 },
+ { "flags": 4, "matrix": [1, 6], "x": 140, "y": 30 },
+ { "flags": 4, "matrix": [6, 3], "x": 150, "y": 30 },
+ { "flags": 4, "matrix": [0, 6], "x": 0, "y": 40 },
+ { "flags": 4, "matrix": [0, 5], "x": 12.5, "y": 40 },
+ { "flags": 4, "matrix": [0, 2], "x": 25, "y": 40 },
+ { "flags": 4, "x": 61.5, "y": 40 },
+ { "flags": 4, "x": 62.5, "y": 40 },
+ { "flags": 4, "matrix": [0, 1], "x": 65, "y": 40 },
+ { "flags": 4, "x": 67.5, "y": 40 },
+ { "flags": 4, "x": 68.5, "y": 40 },
+ { "flags": 4, "matrix": [3, 6], "x": 100, "y": 40 },
+ { "flags": 4, "matrix": [3, 3], "x": 112.5, "y": 40 },
+ { "flags": 4, "matrix": [0, 3], "x": 130, "y": 40 },
+ { "flags": 4, "matrix": [1, 5], "x": 140, "y": 40 },
+ { "flags": 4, "matrix": [2, 5], "x": 150, "y": 40 }
+ ]
+ },
+ "url": "",
+ "usb": {
+ "device_version": "0.0.4",
+ "pid": "0x5319",
+ "vid": "0x3233"
+ },
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_65_ansi_blocker"
+ },
+ "community_layouts": ["65_ansi_blocker"],
+ "layouts": {
+ "LAYOUT_65_ansi_blocker": {
+ "layout": [
+ { "label": "Esc", "matrix": [1, 3], "x": 0, "y": 0 },
+ { "label": "1", "matrix": [1, 7], "x": 1, "y": 0 },
+ { "label": "2", "matrix": [2, 7], "x": 2, "y": 0 },
+ { "label": "3", "matrix": [3, 7], "x": 3, "y": 0 },
+ { "label": "4", "matrix": [4, 7], "x": 4, "y": 0 },
+ { "label": "5", "matrix": [4, 6], "x": 5, "y": 0 },
+ { "label": "6", "matrix": [5, 6], "x": 6, "y": 0 },
+ { "label": "7", "matrix": [5, 7], "x": 7, "y": 0 },
+ { "label": "8", "matrix": [6, 7], "x": 8, "y": 0 },
+ { "label": "9", "matrix": [7, 7], "x": 9, "y": 0 },
+ { "label": "0", "matrix": [8, 7], "x": 10, "y": 0 },
+ { "label": "-", "matrix": [8, 6], "x": 11, "y": 0 },
+ { "label": "=", "matrix": [6, 6], "x": 12, "y": 0 },
+ { "label": "Backspace", "matrix": [7, 1], "w": 2, "x": 13, "y": 0 },
+ { "label": "Del", "matrix": [2, 3], "x": 15, "y": 0 },
+ { "label": "Tab", "matrix": [1, 1], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "Q", "matrix": [1, 0], "x": 1.5, "y": 1 },
+ { "label": "W", "matrix": [2, 0], "x": 2.5, "y": 1 },
+ { "label": "E", "matrix": [3, 0], "x": 3.5, "y": 1 },
+ { "label": "R", "matrix": [4, 0], "x": 4.5, "y": 1 },
+ { "label": "T", "matrix": [4, 1], "x": 5.5, "y": 1 },
+ { "label": "Y", "matrix": [5, 1], "x": 6.5, "y": 1 },
+ { "label": "U", "matrix": [5, 0], "x": 7.5, "y": 1 },
+ { "label": "I", "matrix": [6, 0], "x": 8.5, "y": 1 },
+ { "label": "O", "matrix": [7, 0], "x": 9.5, "y": 1 },
+ { "label": "P", "matrix": [8, 0], "x": 10.5, "y": 1 },
+ { "label": "[", "matrix": [8, 1], "x": 11.5, "y": 1 },
+ { "label": "]", "matrix": [6, 1], "x": 12.5, "y": 1 },
+ { "label": "\\", "matrix": [7, 5], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "PGUP", "matrix": [7, 3], "x": 15, "y": 1 },
+ { "label": "Caps Lock", "matrix": [2, 1], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "A", "matrix": [1, 2], "x": 1.75, "y": 2 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "D", "matrix": [3, 2], "x": 3.75, "y": 2 },
+ { "label": "F", "matrix": [4, 2], "x": 4.75, "y": 2 },
+ { "label": "G", "matrix": [4, 3], "x": 5.75, "y": 2 },
+ { "label": "H", "matrix": [5, 3], "x": 6.75, "y": 2 },
+ { "label": "J", "matrix": [5, 2], "x": 7.75, "y": 2 },
+ { "label": "K", "matrix": [6, 2], "x": 8.75, "y": 2 },
+ { "label": "L", "matrix": [7, 2], "x": 9.75, "y": 2 },
+ { "label": ";", "matrix": [8, 2], "x": 10.75, "y": 2 },
+ { "label": "'", "matrix": [8, 3], "x": 11.75, "y": 2 },
+ { "label": "Enter", "matrix": [8, 4], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "PGDN", "matrix": [2, 6], "x": 15, "y": 2 },
+ { "label": "LShift", "matrix": [0, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "label": "Z", "matrix": [1, 4], "x": 2.25, "y": 3 },
+ { "label": "X", "matrix": [2, 4], "x": 3.25, "y": 3 },
+ { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "label": "V", "matrix": [4, 4], "x": 5.25, "y": 3 },
+ { "label": "B", "matrix": [4, 5], "x": 6.25, "y": 3 },
+ { "label": "N", "matrix": [5, 5], "x": 7.25, "y": 3 },
+ { "label": "M", "matrix": [5, 4], "x": 8.25, "y": 3 },
+ { "label": ",", "matrix": [6, 4], "x": 9.25, "y": 3 },
+ { "label": ".", "matrix": [7, 4], "x": 10.25, "y": 3 },
+ { "label": "/", "matrix": [8, 5], "x": 11.25, "y": 3 },
+ { "label": "RShift", "matrix": [0, 7], "w": 1.75, "x": 12.25, "y": 3 },
+ { "label": "Up", "matrix": [1, 6], "x": 14, "y": 3 },
+ { "label": "End", "matrix": [6, 3], "x": 15, "y": 3 },
+ { "label": "LCtrl", "matrix": [0, 6], "w": 1.25, "x": 0, "y": 4 },
+ { "label": "LWin", "matrix": [0, 5], "w": 1.25, "x": 1.25, "y": 4 },
+ { "label": "LAlt", "matrix": [0, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "label": "Space", "matrix": [0, 1], "w": 6.25, "x": 3.75, "y": 4 },
+ { "label": "RAlt", "matrix": [3, 6], "w": 1.25, "x": 10, "y": 4 },
+ { "label": "FN", "matrix": [3, 3], "w": 1.25, "x": 11.25, "y": 4 },
+ { "label": "Left", "matrix": [0, 3], "x": 13, "y": 4 },
+ { "label": "Down", "matrix": [1, 5], "x": 14, "y": 4 },
+ { "label": "Right", "matrix": [2, 5], "x": 15, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/projectd/65/projectd_65_ansi/keymaps/default/keymap.c b/keyboards/projectd/65/projectd_65_ansi/keymaps/default/keymap.c
new file mode 100644
index 000000000000..e7a34d3467d7
--- /dev/null
+++ b/keyboards/projectd/65/projectd_65_ansi/keymaps/default/keymap.c
@@ -0,0 +1,93 @@
+/* Copyright 2023 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 .
+ */
+
+#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 my_keycodes {
+ RGB_R = QK_USER,
+ RGB_G,
+ RGB_B,
+ RGB_W,
+ SW_cy,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ switch (keycode) {
+
+ case RGB_R:
+ if (record->event.pressed) {
+ rgb_matrix_sethsv(0, 255, 255);
+ rgb_matrix_mode(1);
+ }
+ return false; /* Skip all further processing of this key */
+
+ case RGB_G:
+ if (record->event.pressed) {
+ rgb_matrix_sethsv(85, 255, 255);
+ rgb_matrix_mode(1);
+ }
+ return false; /* Skip all further processing of this key */
+
+ case RGB_B:
+ if (record->event.pressed) {
+ rgb_matrix_sethsv(170, 255, 255);
+ rgb_matrix_mode(1);
+ }
+ return false; /* Skip all further processing of this key */
+
+ case RGB_W:
+ if (record->event.pressed) {
+ rgb_matrix_sethsv(0, 0, 255);
+ rgb_matrix_mode(1);
+ }
+ return false; /* Skip all further processing of this key */
+
+ case SW_cy:
+ rgb_matrix_sethsv(0, 255, 255);
+ rgb_matrix_mode(13);
+ return false; /* Skip all further processing of this key */
+
+
+ default:
+ return true; /* Process all other keycodes normally */
+ }
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[0] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+[1] = LAYOUT(
+ 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_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_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_RSFT, RGB_VAI, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, RGB_SPD, RGB_VAD, RGB_SPI),
+[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,
+ 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, RGB_R, RGB_G, RGB_B, RGB_W, SW_cy, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/projectd/65/projectd_65_ansi/keymaps/via/keymap.c b/keyboards/projectd/65/projectd_65_ansi/keymaps/via/keymap.c
new file mode 100644
index 000000000000..035c038b7411
--- /dev/null
+++ b/keyboards/projectd/65/projectd_65_ansi/keymaps/via/keymap.c
@@ -0,0 +1,93 @@
+/* Copyright 2023 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 .
+ */
+
+#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 my_keycodes {
+ RGB_R = QK_USER,
+ RGB_G,
+ RGB_B,
+ RGB_W,
+ SW_cy,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ switch (keycode) {
+
+ case RGB_R:
+ if (record->event.pressed) {
+ rgb_matrix_sethsv(0, 255, 255);
+ rgb_matrix_mode(1);
+ }
+ return false; /* Skip all further processing of this key */
+
+ case RGB_G:
+ if (record->event.pressed) {
+ rgb_matrix_sethsv(85, 255, 255);
+ rgb_matrix_mode(1);
+ }
+ return false; /* Skip all further processing of this key */
+
+ case RGB_B:
+ if (record->event.pressed) {
+ rgb_matrix_sethsv(170, 255, 255);
+ rgb_matrix_mode(1);
+ }
+ return false; /* Skip all further processing of this key */
+
+ case RGB_W:
+ if (record->event.pressed) {
+ rgb_matrix_sethsv(0, 0, 255);
+ rgb_matrix_mode(1);
+ }
+ return false; /* Skip all further processing of this key */
+
+ case SW_cy:
+ rgb_matrix_sethsv(0, 255, 255);
+ rgb_matrix_mode(13);
+ return false; /* Skip all further processing of this key */
+
+
+ default:
+ return true; /* Process all other keycodes normally */
+ }
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[0] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+[1] = LAYOUT(
+ 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_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_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_RSFT, RGB_VAI, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, RGB_SPD, RGB_VAD, RGB_SPI),
+[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,
+ 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, RGB_R, RGB_G, RGB_B, RGB_W, SW_cy, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/projectd/65/projectd_65_ansi/keymaps/via/rules.mk b/keyboards/projectd/65/projectd_65_ansi/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/projectd/65/projectd_65_ansi/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/projectd/65/projectd_65_ansi/mcuconf.h b/keyboards/projectd/65/projectd_65_ansi/mcuconf.h
new file mode 100644
index 000000000000..e4b8d1f97328
--- /dev/null
+++ b/keyboards/projectd/65/projectd_65_ansi/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/projectd/65/projectd_65_ansi/projectd_65_ansi.c b/keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c
new file mode 100644
index 000000000000..6027128a96ef
--- /dev/null
+++ b/keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c
@@ -0,0 +1,143 @@
+/* Copyright 2023 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 .
+ */
+
+#include "quantum.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, Esc
+
+ {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, Esc
+ {0, CS4_SW2, CS5_SW2, CS6_SW2}, // 1, 1
+ {0, CS4_SW3, CS5_SW3, CS6_SW3}, // 2, 2
+ {0, CS4_SW4, CS5_SW4, CS6_SW4}, // 3, 3
+ {0, CS4_SW5, CS5_SW5, CS6_SW5}, // 4, 4
+ {0, CS4_SW6, CS5_SW6, CS6_SW6}, // 5, 5
+ {0, CS4_SW7, CS5_SW7, CS6_SW7}, // 6, 6
+ {0, CS4_SW8, CS5_SW8, CS6_SW8}, // 7, 7
+ {0, CS4_SW9, CS5_SW9, CS6_SW9}, // 8, 8
+ {0, CS4_SW10, CS5_SW10, CS6_SW10}, // 9, 9
+ {0, CS4_SW11, CS5_SW11, CS6_SW11}, // 10, 0
+ {0, CS4_SW12, CS5_SW12, CS6_SW12}, // 11, -
+ {0, CS1_SW9, CS2_SW9, CS3_SW9}, // 12, =
+ {0, CS1_SW10, CS2_SW10, CS3_SW10}, // 13, Backspace
+ {0, CS1_SW5, CS2_SW5, CS3_SW5}, // 14, Del
+
+ {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 15, Tab
+ {0, CS7_SW2, CS8_SW2, CS9_SW2}, // 16, Q
+ {0, CS7_SW3, CS8_SW3, CS9_SW3}, // 17, W
+ {0, CS7_SW4, CS8_SW4, CS9_SW4}, // 18, E
+ {0, CS7_SW5, CS8_SW5, CS9_SW5}, // 19, R
+ {0, CS7_SW6, CS8_SW6, CS9_SW6}, // 20, T
+ {0, CS7_SW7, CS8_SW7, CS9_SW7}, // 21, Y
+ {0, CS7_SW8, CS8_SW8, CS9_SW8}, // 22, U
+ {0, CS7_SW9, CS8_SW9, CS9_SW9}, // 23, I
+ {0, CS7_SW10, CS8_SW10, CS9_SW10}, // 24, O
+ {0, CS7_SW11, CS8_SW11, CS9_SW11}, // 25, P
+ {0, CS7_SW12, CS8_SW12, CS9_SW12}, // 26, [
+ {0, CS1_SW11, CS2_SW11, CS3_SW11}, // 27, ]
+ {0, CS1_SW12, CS2_SW12, CS3_SW12}, // 28, "\\"
+ {0, CS1_SW4, CS2_SW4, CS3_SW4}, // 29, PGUP
+
+ {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 30, CapsLock
+ {0, CS10_SW2, CS11_SW2, CS12_SW2}, // 31, A
+ {0, CS10_SW3, CS11_SW3, CS12_SW3}, // 32, S
+ {0, CS10_SW4, CS11_SW4, CS12_SW4}, // 33, D
+ {0, CS10_SW5, CS11_SW5, CS12_SW5}, // 34, F
+ {0, CS10_SW6, CS11_SW6, CS12_SW6}, // 35, G
+ {0, CS10_SW7, CS11_SW7, CS12_SW7}, // 36, H
+ {0, CS10_SW8, CS11_SW8, CS12_SW8}, // 37, J
+ {0, CS10_SW9, CS11_SW9, CS12_SW9}, // 38, K
+ {0, CS10_SW10, CS11_SW10, CS12_SW10}, // 39, L
+ {0, CS10_SW11, CS11_SW11, CS12_SW11}, // 40, ;
+ {0, CS10_SW12, CS11_SW12, CS12_SW12}, // 41, '
+ {0, CS13_SW12, CS14_SW12, CS15_SW12}, // 42, Enter
+ {0, CS1_SW7, CS2_SW7, CS3_SW7}, // 43, PGDN
+
+ {0, CS10_SW1, CS11_SW1, CS12_SW1}, // 44, LShift
+ {0, CS13_SW2, CS14_SW2, CS15_SW2}, // 45, Z
+ {0, CS13_SW3, CS14_SW3, CS15_SW3}, // 46, X
+ {0, CS13_SW4, CS14_SW4, CS15_SW4}, // 47, C
+ {0, CS13_SW5, CS14_SW5, CS15_SW5}, // 48, V
+ {0, CS13_SW6, CS14_SW6, CS15_SW6}, // 49, B
+ {0, CS13_SW7, CS14_SW7, CS15_SW7}, // 50, N
+ {0, CS13_SW8, CS14_SW8, CS15_SW8}, // 51, M
+ {0, CS13_SW9, CS14_SW9, CS15_SW9}, // 52, ,
+ {0, CS13_SW10, CS14_SW10, CS15_SW10}, // 53, .
+ {0, CS13_SW11, CS14_SW11, CS15_SW11}, // 54, /
+ {0, CS16_SW8, CS17_SW8, CS18_SW8}, // 55, RShift
+ {0, CS16_SW9, CS17_SW9, CS18_SW9}, // 56, Up
+ {0, CS1_SW6, CS2_SW6, CS3_SW6}, // 57, END
+
+ {0, CS16_SW1, CS17_SW1, CS18_SW1}, // 58, LCtrl
+ {0, CS16_SW2, CS17_SW2, CS18_SW2}, // 59, LWin
+ {0, CS16_SW3, CS17_SW3, CS18_SW3}, // 60, LAlt
+ {0, CS1_SW2, CS2_SW2, CS3_SW2}, // 61, LED71
+ {0, CS1_SW3, CS2_SW3, CS3_SW3}, // 62, LED72
+ {0, CS16_SW4, CS17_SW4, CS18_SW4}, // 63, Space
+ {0, CS16_SW7, CS17_SW7, CS18_SW7}, // 64, LED73
+ {0, CS1_SW8, CS2_SW8, CS3_SW8}, // 65, LED74
+ {0, CS16_SW5, CS17_SW5, CS18_SW5}, // 66, RAlt
+ {0, CS16_SW6, CS17_SW6, CS18_SW6}, // 67, FN
+
+ {0, CS16_SW10, CS17_SW10, CS18_SW10}, // 68, Left
+ {0, CS16_SW11, CS17_SW11, CS18_SW11}, // 69, Down
+ {0, CS16_SW12, CS17_SW12, CS18_SW12}, // 70, Right
+
+};
+
+#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
+
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
+ return false;
+}
+ if (host_keyboard_led_state().caps_lock) {
+ RGB_MATRIX_INDICATOR_SET_COLOR(30, 255, 255, 255); // assuming caps lock is at led #30
+ }
+ return false;
+}
diff --git a/keyboards/projectd/65/projectd_65_ansi/readme.md b/keyboards/projectd/65/projectd_65_ansi/readme.md
new file mode 100644
index 000000000000..56e7e4d5591d
--- /dev/null
+++ b/keyboards/projectd/65/projectd_65_ansi/readme.md
@@ -0,0 +1,23 @@
+# ProjectD 65% ANSI
+
+A 65% keyboard, Equipped with the WestBerry Q95 microcontroller.
+
+* Keyboard Maintainer: [GSKY](https://github.com/gksygithub)
+* Hardware Supported: projectd_65_ansi
+* Hardware Availability: [GSKY](https://github.com/gksygithub/projectd_65_ansi)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make projectd/65/projectd_65_ansi:default
+
+Flashing example for this keyboard:
+
+ make projectd/65/projectd_65_ansi:default:flash
+
+To reset the board into bootloader mode, do one of the following:
+
+* Hold the Reset switch mounted under the space key after the USB cable is connected
+* Hold the Esc key while connecting the USB cable (also erases persistent settings)
+* Fn+Alt+Tab 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/projectd/65/projectd_65_ansi/rules.mk b/keyboards/projectd/65/projectd_65_ansi/rules.mk
new file mode 100644
index 000000000000..24d5f6f52ecc
--- /dev/null
+++ b/keyboards/projectd/65/projectd_65_ansi/rules.mk
@@ -0,0 +1,2 @@
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/pteropus/info.json b/keyboards/pteropus/info.json
index b1e0556b61d6..76cbe67eee53 100644
--- a/keyboards/pteropus/info.json
+++ b/keyboards/pteropus/info.json
@@ -37,6 +37,7 @@
{"matrix": [0, 7], "x": 10, "y": 0},
{"matrix": [0, 8], "x": 11, "y": 0.125},
{"matrix": [0, 9], "x": 12, "y": 0.25},
+
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.125},
{"matrix": [1, 2], "x": 2, "y": 1},
@@ -47,16 +48,18 @@
{"matrix": [1, 7], "x": 10, "y": 1},
{"matrix": [1, 8], "x": 11, "y": 1.125},
{"matrix": [1, 9], "x": 12, "y": 1.25},
- {"matrix": [2, 0], "x": 0, "y": 1.25},
- {"matrix": [2, 1], "x": 1, "y": 1.125},
- {"matrix": [2, 2], "x": 2, "y": 1},
- {"matrix": [2, 3], "x": 3, "y": 1.125},
- {"matrix": [2, 4], "x": 4, "y": 1.25},
- {"matrix": [2, 5], "x": 8, "y": 1.25},
- {"matrix": [2, 6], "x": 9, "y": 1.125},
- {"matrix": [2, 7], "x": 10, "y": 1},
- {"matrix": [2, 8], "x": 11, "y": 1.125},
- {"matrix": [2, 9], "x": 12, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25},
+ {"matrix": [2, 1], "x": 1, "y": 2.125},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2.125},
+ {"matrix": [2, 4], "x": 4, "y": 2.25},
+ {"matrix": [2, 5], "x": 8, "y": 2.25},
+ {"matrix": [2, 6], "x": 9, "y": 2.125},
+ {"matrix": [2, 7], "x": 10, "y": 2},
+ {"matrix": [2, 8], "x": 11, "y": 2.125},
+ {"matrix": [2, 9], "x": 12, "y": 2.25},
+
{"matrix": [3, 2], "x": 3, "y": 3.25},
{"matrix": [3, 3], "x": 4, "y": 3.5},
{"matrix": [3, 4], "x": 5, "y": 3.75},
diff --git a/keyboards/quarkeys/z40/info.json b/keyboards/quarkeys/z40/info.json
index cf4729fdd26f..3841e8c16a26 100644
--- a/keyboards/quarkeys/z40/info.json
+++ b/keyboards/quarkeys/z40/info.json
@@ -1,31 +1,37 @@
{
"keyboard_name": "Z40 Ortho",
- "manufacturer": "Quarkeys Stuidio",
- "url": "www.quarkeys.com",
- "maintainer": "TommyZ",
- "usb": {
- "vid": "0x8490",
- "pid": "0x2801",
- "device_version": "0.0.1"
- },
+ "manufacturer": "Quarkeys Studio",
+ "url": "https://www.quarkeys.com/",
+ "maintainer": "tommyamoszhao",
+ "usb": {
+ "vid": "0x8490",
+ "pid": "0x2801",
+ "device_version": "0.0.1"
+ },
"rgb_matrix": {
- "driver": "WS2812"
+ "driver": "WS2812"
},
"rgblight": {
"max_brightness": 130
},
"matrix_pins": {
- "cols": ["F4", "F5", "F6", "F7", "B6", "B5", "B4", "D7", "D6", "D0", "B1", "B0"],
- "rows": ["E6", "B3", "C7", "C6"]
+ "cols": ["F4", "F5", "F6", "F7", "B6", "B5", "B4", "D7", "D6", "D0", "B1", "B0"],
+ "rows": ["E6", "B3", "C7", "C6"]
},
"ws2812": {
- "pin": "F1"
+ "pin": "F1"
},
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_planck_mit"
+ },
+ "community_layouts": [
+ "planck_mit"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_planck_mit": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/quarkeys/z40/keymaps/default/keymap.c b/keyboards/quarkeys/z40/keymaps/default/keymap.c
index e54316ec2968..8a08e47153f4 100644
--- a/keyboards/quarkeys/z40/keymaps/default/keymap.c
+++ b/keyboards/quarkeys/z40/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
-/*
+/*
/ Copyright 2022 quarkeys
/ 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
@@ -26,11 +26,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | Caps | ALT | OS | Ly1 | SPACE | Ly2 | M1 | M2 | M3 | Enter |
* `-------------------------------------------------------------------------------------'
*/
- [0] = LAYOUT(
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- KC_LCTL, KC_CAPS, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), MO(3), _______, _______, KC_ENT
+ [0] = LAYOUT_planck_mit(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_CAPS, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), MO(3), _______, _______, KC_ENT
),
/* [1]
@@ -44,13 +44,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | 0 | | | . | | = |
* `-------+------+------+------+------+-------------+------+------+------+-------+------'
*/
-
- [1] = LAYOUT(
- QK_BOOT, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL, KC_BSLS, KC_7, KC_8, KC_9, RGB_TOG, _______,
- _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_PLUS, KC_MINS, KC_4, KC_5, KC_6, RGB_MOD, _______,
- _______, KC_VOLD, KC_VOLU, _______, _______, KC_ASTR, KC_SLSH, KC_1, KC_2, KC_3, RGB_HUI, _______,
- RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_0, _______, _______, KC_DOT, RGB_HUD, KC_EQL
- ),
+ [1] = LAYOUT_planck_mit(
+ QK_BOOT, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL, KC_BSLS, KC_7, KC_8, KC_9, RGB_TOG, _______,
+ _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_PLUS, KC_MINS, KC_4, KC_5, KC_6, RGB_MOD, _______,
+ _______, KC_VOLD, KC_VOLU, _______, _______, KC_ASTR, KC_SLSH, KC_1, KC_2, KC_3, RGB_HUI, _______,
+ RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_0, _______, _______, KC_DOT, RGB_HUD, KC_EQL
+ ),
/* [2]
* ,-------------------------------------------------------------------------------------.
@@ -63,13 +62,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-------------------------------------------------------------------------------------'
*/
- [2] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- _______, KC_AMPR, KC_PIPE, KC_LPRN, KC_RPRN, KC_PLUS, KC_MINS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, _______,
- _______, KC_EXLM, KC_AT, KC_HASH, KC_CIRC, KC_ASTR, KC_SLSH, KC_TILD, KC_LABK, KC_RABK, KC_QUES, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
+ [2] = LAYOUT_planck_mit(
+ 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_AMPR, KC_PIPE, KC_LPRN, KC_RPRN, KC_PLUS, KC_MINS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, _______,
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_CIRC, KC_ASTR, KC_SLSH, KC_TILD, KC_LABK, KC_RABK, KC_QUES, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
#ifdef RGBLIGHT_ENABLE
const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({9, 1, HSV_RED});
@@ -78,10 +77,10 @@ const rgblight_segment_t PROGMEM my_symbol_layer[] = RGBLIGHT_LAYER_SEGMENTS({28
const rgblight_segment_t PROGMEM my_other_layer[] = RGBLIGHT_LAYER_SEGMENTS({16, 2, HSV_WHITE});
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
- my_capslock_layer, // Caplock indicator
- my_ar_numpad_layer, // Arrow keys & Numpad, Operator keys, reset key, RGB control and media control
- my_symbol_layer, // F1-F12 keys & Symbols
- my_other_layer // Self-Defined
+ my_capslock_layer, // Caplock indicator
+ my_ar_numpad_layer, // Arrow keys & Numpad, Operator keys, reset key, RGB control and media control
+ my_symbol_layer, // F1-F12 keys & Symbols
+ my_other_layer // Self-Defined
);
void keyboard_post_init_user(void) {
diff --git a/keyboards/quarkeys/z40/keymaps/via/keymap.c b/keyboards/quarkeys/z40/keymaps/via/keymap.c
index f235747a709c..fe596b98ff03 100644
--- a/keyboards/quarkeys/z40/keymaps/via/keymap.c
+++ b/keyboards/quarkeys/z40/keymaps/via/keymap.c
@@ -1,4 +1,4 @@
-/*
+/*
/ Copyright 2022 quarkeys
/ 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
@@ -15,27 +15,27 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- KC_LCTL, KC_CAPS, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), MO(3), _______, _______, KC_ENT
+ [0] = LAYOUT_planck_mit(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_CAPS, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), MO(3), _______, _______, KC_ENT
),
- [1] = LAYOUT(
- QK_BOOT, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL, KC_BSLS, KC_7, KC_8, KC_9, RGB_TOG, _______,
- _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_PLUS, KC_MINS, KC_4, KC_5, KC_6, RGB_MOD, _______,
- _______, KC_VOLD, KC_VOLU, _______, _______, KC_ASTR, KC_SLSH, KC_1, KC_2, KC_3, RGB_HUI, _______,
- RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_0, _______, _______, KC_DOT, RGB_HUD, KC_EQL
- ),
+ [1] = LAYOUT_planck_mit(
+ QK_BOOT, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL, KC_BSLS, KC_7, KC_8, KC_9, RGB_TOG, _______,
+ _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_PLUS, KC_MINS, KC_4, KC_5, KC_6, RGB_MOD, _______,
+ _______, KC_VOLD, KC_VOLU, _______, _______, KC_ASTR, KC_SLSH, KC_1, KC_2, KC_3, RGB_HUI, _______,
+ RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_0, _______, _______, KC_DOT, RGB_HUD, KC_EQL
+ ),
- [2] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- _______, KC_AMPR, KC_PIPE, KC_LPRN, KC_RPRN, KC_PLUS, KC_MINS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, _______,
- _______, KC_EXLM, KC_AT, KC_HASH, KC_CIRC, KC_ASTR, KC_SLSH, KC_TILD, KC_LABK, KC_RABK, KC_QUES, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
+ [2] = LAYOUT_planck_mit(
+ 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_AMPR, KC_PIPE, KC_LPRN, KC_RPRN, KC_PLUS, KC_MINS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, _______,
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_CIRC, KC_ASTR, KC_SLSH, KC_TILD, KC_LABK, KC_RABK, KC_QUES, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
#ifdef RGBLIGHT_ENABLE
const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({9, 1, HSV_RED});
@@ -44,10 +44,10 @@ const rgblight_segment_t PROGMEM my_symbol_layer[] = RGBLIGHT_LAYER_SEGMENTS({28
const rgblight_segment_t PROGMEM my_other_layer[] = RGBLIGHT_LAYER_SEGMENTS({16, 2, HSV_WHITE});
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
- my_capslock_layer, // Caplock indicator
- my_ar_numpad_layer, // Arrow keys & Numpad, Operator keys, reset key, RGB control and media control
- my_symbol_layer, // F1-F12 keys & Symbols
- my_other_layer // Self-Defined
+ my_capslock_layer, // Caplock indicator
+ my_ar_numpad_layer, // Arrow keys & Numpad, Operator keys, reset key, RGB control and media control
+ my_symbol_layer, // F1-F12 keys & Symbols
+ my_other_layer // Self-Defined
);
void keyboard_post_init_user(void) {
diff --git a/keyboards/quarkeys/z40/readme.md b/keyboards/quarkeys/z40/readme.md
index d3428dd2061d..b1f2bb42be54 100644
--- a/keyboards/quarkeys/z40/readme.md
+++ b/keyboards/quarkeys/z40/readme.md
@@ -1,14 +1,18 @@
# Quarkeys Z40 Low Profile Keyboard
-![Quarkeys Z40 Pastry](https://raw.githubusercontent.com/tommyamoszhao/keyboardimage/main/Z40/Z40_1024.png)
+![Quarkeys Z40 Pastry](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/quarkeys/z40/72b918_ef3d9bc5f32e4b2ba224b0a25bc017f4~mv2.png "Quarkeys Z40 PCB render")
A 40% Bottom mount low-profile & MX switch compatible keyboard.
-* Keyboard Maintainer: [Quarkeys Studio](www.quarkeys.com)
+* Keyboard Maintainer: [TommyZ](https://github.com/tommyamoszhao)
* Hardware Supported: Z40-ACR, Z40-Pastry
-* Hardware Specs: Per-key RGBs, layer & Capslock indicators
-* For [RGB Matrix feature](https://docs.qmk.fm/#/feature_rgb_matrix): `RGB_MATRIX_ENABLE = yes`, `RGBLIGHT_ENABLE = no`.
-* For [RGB Light feature](https://docs.qmk.fm/#/feature_rgblight): `RGB_MATRIX_ENABLE = no`, `RGBLIGHT_ENABLE = yes`.
+* Hardware Availability: [Quarkeys Studio](https://www.quarkeys.com/product-page/z40-extra-pcb)
+
+## Hardware Specs
+
+* Per-key RGBs, layer & Capslock indicators
+ * For [RGB Matrix feature](https://docs.qmk.fm/#/feature_rgb_matrix): `RGB_MATRIX_ENABLE = yes`, `RGBLIGHT_ENABLE = no`.
+ * For [RGB Light feature](https://docs.qmk.fm/#/feature_rgblight): `RGB_MATRIX_ENABLE = no`, `RGBLIGHT_ENABLE = yes`.
Make example for this keyboard solder version keymap(after setting up your build environment):
@@ -20,4 +24,4 @@ Flashing example for this keyboard:
**Bootloader:** Press the `QK_BOOT` keycode at ESC position of layer 1.
-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).
\ No newline at end of file
+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/qvex/lynepad2/config.h b/keyboards/qvex/lynepad2/config.h
new file mode 100644
index 000000000000..7b9d3ce306ed
--- /dev/null
+++ b/keyboards/qvex/lynepad2/config.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2023 QVEX Tech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 5
+
+//Digital joystick (4-way switch + encoder)
+#define PIN_JU D4
+#define PIN_JD B6
+#define PIN_JL D7
+#define PIN_JR B4
+#define PIN_JC C6
+
+//Thumbwheel
+#define PIN_TC D2
+
+//Backlighting
+#define BACKLIGHT_DEFAULT_LEVEL 5
+
+//RGB arc
+#define RGBLIGHT_DEFAULT_VAL 64
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/info.json b/keyboards/qvex/lynepad2/info.json
new file mode 100644
index 000000000000..02b6198bcd8b
--- /dev/null
+++ b/keyboards/qvex/lynepad2/info.json
@@ -0,0 +1,69 @@
+{
+ "manufacturer": "QVEX Tech",
+ "keyboard_name": "Lynepad",
+ "maintainer": "QVEX-Tech",
+ "bootloader": "caterina",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": [ "F0", "F1", "F4", "F5"],
+ "rows": [ "C7", "F7" ,"F6", null, null]
+ },
+ "processor": "atmega32u4",
+ "url": "https://qvex.eu",
+ "usb": {
+ "device_version": "1.0.0",
+ "vid": "0x04D8",
+ "pid": "0xE678"
+ },
+ "encoder": {
+ "rotary": [
+ {"pin_a": "D6", "pin_b": "B5", "resolution": 2},
+ {"pin_a": "D1", "pin_b": "D0", "resolution": 2}
+ ]
+ },
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "rgblight": true
+ },
+ "rgblight": {
+ "led_count": 5,
+ "max_brightness": 192,
+ "sleep": true
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "backlight": {
+ "breathing": true,
+ "levels": 8,
+ "max_brightness": 192,
+ "pin": "B7"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [1, 3], "x": 3, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [3, 0], "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1, "y": 3 },
+ { "matrix": [3, 2], "x": 2, "y": 3 },
+ { "matrix": [3, 3], "x": 3, "y": 3 },
+ { "matrix": [4, 0], "x": 0, "y": 4 },
+ { "matrix": [4, 1], "x": 1, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/default/keymap.c b/keyboards/qvex/lynepad2/keymaps/default/keymap.c
new file mode 100644
index 000000000000..22286170f134
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/default/keymap.c
@@ -0,0 +1,142 @@
+/*
+Copyright 2023 QVEX Tech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+#define RGB_HUE_LAYER0 0 //default layer
+#define RGB_HUE_LAYER1 50
+#define RGB_HUE_LAYER2 100
+#define RGB_HUE_LAYER3 150
+#define RGB_HUE_LAYER4 200
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT //Default
+ (
+ G(KC_D), G(KC_TAB), C(G(KC_LEFT)), C(G(KC_RIGHT)),
+ G(KC_E), XXXXXXX, C(KC_C), C(KC_V),
+ KC_LGUI, XXXXXXX, XXXXXXX,
+
+ KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, //joystick up, down, left, right
+ KC_MPLY, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [1] = LAYOUT //KiCad
+ (
+ KC_ESC, KC_R, KC_M, KC_DEL,
+ KC_V, KC_G, KC_D, KC_X,
+ MO(3), KC_B, C(KC_V),
+
+ KC_PLUS, KC_MINUS, C(KC_Y), C(KC_Z), //joystick up, down, left, right
+ KC_PGDN, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [2] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [3] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [4] = LAYOUT
+ (
+ TO(0), TO(1), TO(2), TO(3),
+ BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX,
+ QK_RBT, EE_CLR, QK_BOOT,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ RGB_TOG, XXXXXXX //joystick center push, thumbwheel push
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU),
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU)
+ },
+
+ [1] = {
+ ENCODER_CCW_CW(LSFT(KC_W), KC_W),
+ ENCODER_CCW_CW(KC_N, LSFT(KC_N))
+ },
+
+ [2] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [3] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [4] = {
+ ENCODER_CCW_CW(RGB_VAD, RGB_VAI),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ }
+};
+#endif
+
+//set only hue, retain saturation, and value
+void rgblight_sethue_noeeprom(uint8_t hue){
+ //only if rgb led ring is on
+ if (rgblight_get_mode()) {
+ rgblight_sethsv_noeeprom(hue,rgblight_get_sat(),rgblight_get_val());
+ }
+}
+
+//set correct layer hue on layer change
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case 1:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER1);
+ break;
+ case 2:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER2);
+ break;
+ case 3:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER3);
+ break;
+ case 4:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER4);
+ break;
+ default:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+ break;
+
+ }
+ return state;
+}
+
+//set default layer hue upon init
+void keyboard_post_init_user(void) {
+ rgblight_init();
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+}
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/default/rules.mk b/keyboards/qvex/lynepad2/keymaps/default/rules.mk
new file mode 100644
index 000000000000..a40474b4d5c7
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c b/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c
new file mode 100644
index 000000000000..ead8ab40a6da
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c
@@ -0,0 +1,142 @@
+/*
+Copyright 2023 QVEX Tech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+#define RGB_HUE_LAYER0 0 //default layer
+#define RGB_HUE_LAYER1 50
+#define RGB_HUE_LAYER2 100
+#define RGB_HUE_LAYER3 150
+#define RGB_HUE_LAYER4 200
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT //Default
+ (
+ KC_MS_BTN4, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1,
+ KC_MS_BTN5, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT,
+ KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2,
+
+ KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, //joystick up, down, left, right
+ KC_MPLY, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [1] = LAYOUT //KiCad
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [2] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [3] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [4] = LAYOUT
+ (
+ TO(0), TO(1), TO(2), TO(3),
+ BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX,
+ QK_RBT, EE_CLR, QK_BOOT,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ RGB_TOG, XXXXXXX //joystick center push, thumbwheel push
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU),
+ ENCODER_CCW_CW(KC_MS_WH_DOWN, KC_MS_WH_UP)
+ },
+
+ [1] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [2] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [3] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [4] = {
+ ENCODER_CCW_CW(RGB_VAD, RGB_VAI),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ }
+};
+#endif
+
+//set only hue, retain saturation, and value
+void rgblight_sethue_noeeprom(uint8_t hue) {
+ //only if rgb led ring is on
+ if (rgblight_get_mode()) {
+ rgblight_sethsv_noeeprom(hue,rgblight_get_sat(),rgblight_get_val());
+ }
+}
+
+//set correct layer hue on layer change
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case 1:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER1);
+ break;
+ case 2:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER2);
+ break;
+ case 3:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER3);
+ break;
+ case 4:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER4);
+ break;
+ default:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+ break;
+
+ }
+ return state;
+}
+
+//set default layer hue upon init
+void keyboard_post_init_user(void) {
+ rgblight_init();
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+}
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk b/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk
new file mode 100644
index 000000000000..a40474b4d5c7
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/via/keymap.c b/keyboards/qvex/lynepad2/keymaps/via/keymap.c
new file mode 100644
index 000000000000..ff86cdc7fa18
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/via/keymap.c
@@ -0,0 +1,142 @@
+/*
+Copyright 2023 QVEX Tech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+#define RGB_HUE_LAYER0 0 //default layer
+#define RGB_HUE_LAYER1 50
+#define RGB_HUE_LAYER2 100
+#define RGB_HUE_LAYER3 150
+#define RGB_HUE_LAYER4 200
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT //Default
+ (
+ G(KC_D), G(KC_TAB), C(G(KC_LEFT)), C(G(KC_RIGHT)),
+ G(KC_E), XXXXXXX, C(KC_C), C(KC_V),
+ KC_LGUI, XXXXXXX, XXXXXXX,
+
+ KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, //joystick up, down, left, right
+ KC_MPLY, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [1] = LAYOUT //KiCad
+ (
+ KC_ESC, KC_R, KC_M, KC_DEL,
+ KC_V, KC_G, KC_D, KC_X,
+ MO(3), KC_B, C(KC_V),
+
+ KC_PLUS, KC_MINUS, C(KC_Y), C(KC_Z), //joystick up, down, left, right
+ KC_PGDN, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [2] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [3] = LAYOUT
+ (
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ XXXXXXX, MO(4) //joystick center push, thumbwheel push
+ ),
+
+ [4] = LAYOUT
+ (
+ TO(0), TO(1), TO(2), TO(3),
+ BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX,
+ QK_RBT, EE_CLR, QK_BOOT,
+
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right
+ RGB_TOG, XXXXXXX //joystick center push, thumbwheel push
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU),
+ ENCODER_CCW_CW(KC_VOLD, KC_VOLU)
+ },
+
+ [1] = {
+ ENCODER_CCW_CW(LSFT(KC_W), KC_W),
+ ENCODER_CCW_CW(KC_N, LSFT(KC_N))
+ },
+
+ [2] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [3] = {
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ },
+
+ [4] = {
+ ENCODER_CCW_CW(RGB_VAD, RGB_VAI),
+ ENCODER_CCW_CW(XXXXXXX, XXXXXXX)
+ }
+};
+#endif
+
+//set only hue, retain saturation, and value
+void rgblight_sethue_noeeprom(uint8_t hue) {
+ //only if rgb led ring is on
+ if (rgblight_get_mode()) {
+ rgblight_sethsv_noeeprom(hue,rgblight_get_sat(),rgblight_get_val());
+ }
+}
+
+//set correct layer hue on layer change
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case 1:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER1);
+ break;
+ case 2:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER2);
+ break;
+ case 3:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER3);
+ break;
+ case 4:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER4);
+ break;
+ default:
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+ break;
+
+ }
+ return state;
+}
+
+//set default layer hue upon init
+void keyboard_post_init_user(void) {
+ rgblight_init();
+ rgblight_sethue_noeeprom(RGB_HUE_LAYER0);
+}
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/keymaps/via/rules.mk b/keyboards/qvex/lynepad2/keymaps/via/rules.mk
new file mode 100644
index 000000000000..6ccd6d91943d
--- /dev/null
+++ b/keyboards/qvex/lynepad2/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+ENCODER_MAP_ENABLE = yes
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/matrix.c b/keyboards/qvex/lynepad2/matrix.c
new file mode 100644
index 000000000000..878ee6e2f724
--- /dev/null
+++ b/keyboards/qvex/lynepad2/matrix.c
@@ -0,0 +1,119 @@
+/*
+Copyright 2023 QVEX Tech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include
+#include
+#include
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+#include "quantum.h"
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
+extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values
+
+static void select_row(uint8_t row) {
+ setPinOutput(row_pins[row]);
+ writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row) {
+ setPinInputHigh(row_pins[row]);
+}
+
+static void unselect_rows(void) {
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+ setPinInputHigh(PIN_JU);
+ setPinInputHigh(PIN_JD);
+ setPinInputHigh(PIN_JL);
+ setPinInputHigh(PIN_JR);
+ setPinInputHigh(PIN_JC);
+ setPinInputHigh(PIN_TC);
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+ if (current_row > 2) return false;
+
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ current_matrix[current_row] = 0;
+
+ select_row(current_row);
+ wait_us(30);
+
+ for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+ uint8_t pin_state = readPin(col_pins[col_index]);
+ current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
+ }
+
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+static bool read_encoder_switches(matrix_row_t current_matrix[]) {
+ matrix_row_t last_fourth_row = current_matrix[3];
+ matrix_row_t last_fifth_row = current_matrix[4];
+
+ current_matrix[3] = 0;
+ current_matrix[4] = 0;
+
+ current_matrix[4] |= !readPin(PIN_TC) ? (1 << 1) : 0;
+
+ if (!readPin(PIN_JC)) {
+ if (!readPin(PIN_JU)) {
+ current_matrix[3] |= (1 << 0);
+ } else if (!readPin(PIN_JD)) {
+ current_matrix[3] |= (1 << 1);
+ } else if (!readPin(PIN_JL)) {
+ current_matrix[3] |= (1 << 2);
+ } else if (!readPin(PIN_JR)) {
+ current_matrix[3] |= (1 << 3);
+ } else {
+ current_matrix[4] |= (1 << 0);
+ }
+ }
+
+ return last_fourth_row != current_matrix[3] || last_fifth_row != current_matrix[4];
+}
+
+void matrix_init_custom(void) {
+ init_pins();
+}
+
+bool matrix_scan_custom(void) {
+ bool changed = false;
+
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+ changed |= read_cols_on_row(raw_matrix, current_row);
+ }
+
+ changed |= read_encoder_switches(raw_matrix);
+
+ return changed;
+}
\ No newline at end of file
diff --git a/keyboards/qvex/lynepad2/readme.md b/keyboards/qvex/lynepad2/readme.md
new file mode 100644
index 000000000000..c374b617c3ee
--- /dev/null
+++ b/keyboards/qvex/lynepad2/readme.md
@@ -0,0 +1,27 @@
+# QVEX Lynepad 2
+
+![QVEX Lynepad 2.1](https://i.imgur.com/eDvVaE4h.jpeg)
+
+*Macropad with 11 keys, thumbwheel, and a rotary 4-way switch*
+
+* Keyboard Maintainer: [QVEX Tech](https://github.com/QVEX-Tech) ([seflm](https://github.com/seflm))
+* Hardware Supported: QVEX Lynepad
+* Hardware Availability: [QVEX Lynepad on Tindie](https://www.tindie.com/products/qvex_tech/lynepad-21-hot-swap-macropad-w-joystick/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make qvex/lynepad:default
+
+Flashing example for this keyboard:
+
+ make qvex/lynepad:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+### Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the top left key and plug in the keyboard
+* **Physical reset button**: Briefly press the reset button on the back of the Lynepad using SIM tool (rev.2.0 or newer)
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/qvex/lynepad2/rules.mk b/keyboards/qvex/lynepad2/rules.mk
new file mode 100644
index 000000000000..c25bdff0cf95
--- /dev/null
+++ b/keyboards/qvex/lynepad2/rules.mk
@@ -0,0 +1,2 @@
+CUSTOM_MATRIX = lite
+SRC += matrix.c
\ No newline at end of file
diff --git a/keyboards/raindrop/config.h b/keyboards/raindrop/config.h
new file mode 100644
index 000000000000..1f083ec616b7
--- /dev/null
+++ b/keyboards/raindrop/config.h
@@ -0,0 +1,10 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#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/raindrop/info.json b/keyboards/raindrop/info.json
new file mode 100644
index 000000000000..738e1719ea97
--- /dev/null
+++ b/keyboards/raindrop/info.json
@@ -0,0 +1,315 @@
+{
+ "keyboard_name": "Raindrop",
+ "manufacturer": "Laneware Peripherals",
+ "url": "https://lanewareperipherals.com/collections/raindrop-60",
+ "maintainer": "qmk",
+ "usb": {
+ "vid": "0x4C50",
+ "pid": "0x3333",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["D3", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "F7", "F6", "F5", "F4", "F1", "F0", "D5"],
+ "rows": ["E6", "B7", "D0", "D1", "D2"]
+ },
+ "diode_direction": "COL2ROW",
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "backlight": false,
+ "audio": false,
+ "rgblight": false,
+ "sleep_led": false
+ },
+ "community_layouts": ["60_hhkb", "60_ansi", "64_ansi"],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 1], "x":1, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6, "y":0},
+ {"matrix": [0, 7], "x":7, "y":0},
+ {"matrix": [0, 8], "x":8, "y":0},
+ {"matrix": [0, 9], "x":9, "y":0},
+ {"matrix": [0, 10], "x":10, "y":0},
+ {"matrix": [0, 11], "x":11, "y":0},
+ {"matrix": [0, 12], "x":12, "y":0},
+ {"matrix": [0, 13], "x":13, "y":0, "w":2},
+
+ {"matrix": [1, 0], "x":0, "y":1, "w":1.5},
+ {"matrix": [1, 1], "x":1.5, "y":1},
+ {"matrix": [1, 2], "x":2.5, "y":1},
+ {"matrix": [1, 3], "x":3.5, "y":1},
+ {"matrix": [1, 4], "x":4.5, "y":1},
+ {"matrix": [1, 5], "x":5.5, "y":1},
+ {"matrix": [1, 6], "x":6.5, "y":1},
+ {"matrix": [1, 7], "x":7.5, "y":1},
+ {"matrix": [1, 8], "x":8.5, "y":1},
+ {"matrix": [1, 9], "x":9.5, "y":1},
+ {"matrix": [1, 10], "x":10.5, "y":1},
+ {"matrix": [1, 11], "x":11.5, "y":1},
+ {"matrix": [1, 12], "x":12.5, "y":1},
+ {"matrix": [1, 13], "x":13.5, "y":1, "w":1.5},
+
+ {"matrix": [2, 0], "x":0, "y":2, "w":1.75},
+ {"matrix": [2, 1], "x":1.75, "y":2},
+ {"matrix": [2, 2], "x":2.75, "y":2},
+ {"matrix": [2, 3], "x":3.75, "y":2},
+ {"matrix": [2, 4], "x":4.75, "y":2},
+ {"matrix": [2, 5], "x":5.75, "y":2},
+ {"matrix": [2, 6], "x":6.75, "y":2},
+ {"matrix": [2, 7], "x":7.75, "y":2},
+ {"matrix": [2, 8], "x":8.75, "y":2},
+ {"matrix": [2, 9], "x":9.75, "y":2},
+ {"matrix": [2, 10], "x":10.75, "y":2},
+ {"matrix": [2, 11], "x":11.75, "y":2},
+ {"matrix": [2, 12], "x":12.75, "y":2, "w":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3, "w":2.25},
+ {"matrix": [3, 1], "x":2.25, "y":3},
+ {"matrix": [3, 2], "x":3.25, "y":3},
+ {"matrix": [3, 3], "x":4.25, "y":3},
+ {"matrix": [3, 4], "x":5.25, "y":3},
+ {"matrix": [3, 5], "x":6.25, "y":3},
+ {"matrix": [3, 6], "x":7.25, "y":3},
+ {"matrix": [3, 7], "x":8.25, "y":3},
+ {"matrix": [3, 8], "x":9.25, "y":3},
+ {"matrix": [3, 9], "x":10.25, "y":3},
+ {"matrix": [3, 10], "x":11.25, "y":3},
+ {"matrix": [3, 11], "x":12.25, "y":3, "w":2.75},
+
+ {"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, 3], "x":3.75, "y":4, "w":6.25},
+ {"matrix": [4, 4], "x":10, "y":4, "w":1.25},
+ {"matrix": [4, 5], "x":11.25, "y":4, "w":1.25},
+ {"matrix": [4, 6], "x":12.5, "y":4, "w":1.25},
+ {"matrix": [4, 7], "x":13.75, "y":4, "w":1.25}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 1], "x":1, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6, "y":0},
+ {"matrix": [0, 7], "x":7, "y":0},
+ {"matrix": [0, 8], "x":8, "y":0},
+ {"matrix": [0, 9], "x":9, "y":0},
+ {"matrix": [0, 10], "x":10, "y":0},
+ {"matrix": [0, 11], "x":11, "y":0},
+ {"matrix": [0, 12], "x":12, "y":0},
+ {"matrix": [0, 13], "x":13, "y":0},
+ {"matrix": [0, 14], "x":14, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1, "w":1.5},
+ {"matrix": [1, 1], "x":1.5, "y":1},
+ {"matrix": [1, 2], "x":2.5, "y":1},
+ {"matrix": [1, 3], "x":3.5, "y":1},
+ {"matrix": [1, 4], "x":4.5, "y":1},
+ {"matrix": [1, 5], "x":5.5, "y":1},
+ {"matrix": [1, 6], "x":6.5, "y":1},
+ {"matrix": [1, 7], "x":7.5, "y":1},
+ {"matrix": [1, 8], "x":8.5, "y":1},
+ {"matrix": [1, 9], "x":9.5, "y":1},
+ {"matrix": [1, 10], "x":10.5, "y":1},
+ {"matrix": [1, 11], "x":11.5, "y":1},
+ {"matrix": [1, 12], "x":12.5, "y":1},
+ {"matrix": [1, 13], "x":13.5, "y":1, "w":1.5},
+
+ {"matrix": [2, 0], "x":0, "y":2, "w":1.75},
+ {"matrix": [2, 1], "x":1.75, "y":2},
+ {"matrix": [2, 2], "x":2.75, "y":2},
+ {"matrix": [2, 3], "x":3.75, "y":2},
+ {"matrix": [2, 4], "x":4.75, "y":2},
+ {"matrix": [2, 5], "x":5.75, "y":2},
+ {"matrix": [2, 6], "x":6.75, "y":2},
+ {"matrix": [2, 7], "x":7.75, "y":2},
+ {"matrix": [2, 8], "x":8.75, "y":2},
+ {"matrix": [2, 9], "x":9.75, "y":2},
+ {"matrix": [2, 10], "x":10.75, "y":2},
+ {"matrix": [2, 11], "x":11.75, "y":2},
+ {"matrix": [2, 12], "x":12.75, "y":2, "w":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3, "w":2.25},
+ {"matrix": [3, 1], "x":2.25, "y":3},
+ {"matrix": [3, 2], "x":3.25, "y":3},
+ {"matrix": [3, 3], "x":4.25, "y":3},
+ {"matrix": [3, 4], "x":5.25, "y":3},
+ {"matrix": [3, 5], "x":6.25, "y":3},
+ {"matrix": [3, 6], "x":7.25, "y":3},
+ {"matrix": [3, 7], "x":8.25, "y":3},
+ {"matrix": [3, 8], "x":9.25, "y":3},
+ {"matrix": [3, 9], "x":10.25, "y":3},
+ {"matrix": [3, 10], "x":11.25, "y":3},
+ {"matrix": [3, 11], "x":12.25, "y":3, "w":1.75},
+ {"matrix": [3, 13], "x":14, "y":3},
+
+ {"matrix": [4, 1], "x": 1.75, "y": 4},
+ {"matrix": [4, 2], "x": 2.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4, "w": 6.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_64_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, 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": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2},
+ {"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, 10], "x": 11, "y": 3},
+ {"matrix": [3, 11], "x": 12, "y": 3},
+ {"matrix": [3, 12], "x": 13, "y": 3},
+ {"matrix": [3, 13], "x": 14, "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, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 4], "x": 10, "y": 4},
+ {"matrix": [4, 5], "x": 11, "y": 4},
+ {"matrix": [4, 6], "x": 12, "y": 4},
+ {"matrix": [4, 7], "x": 13, "y": 4},
+ {"matrix": [4, 8], "x": 14, "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": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [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": [3, 0], "x": 0, "y": 3, "w": 2},
+ {"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, 10], "x": 11, "y": 3},
+ {"matrix": [3, 11], "x": 12, "y": 3},
+ {"matrix": [3, 12], "x": 13, "y": 3},
+ {"matrix": [3, 13], "x": 14, "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, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 4], "x": 10, "y": 4},
+ {"matrix": [4, 5], "x": 11, "y": 4},
+ {"matrix": [4, 6], "x": 12, "y": 4},
+ {"matrix": [4, 7], "x": 13, "y": 4},
+ {"matrix": [4, 8], "x": 14, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/raindrop/keymaps/arrows/keymap.c b/keyboards/raindrop/keymaps/arrows/keymap.c
new file mode 100644
index 000000000000..a13614f75118
--- /dev/null
+++ b/keyboards/raindrop/keymaps/arrows/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#define RS_GRV RSFT_T(KC_GRV)
+#define RG_DEL RGUI_T(KC_DEL)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_64_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ 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, RS_GRV, KC_UP, RG_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_64_ansi(
+ 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_INS, KC_NO, KC_HOME, KC_END, KC_NO, KC_NO, KC_PGUP, KC_PGDN, KC_NO, KC_SCRL, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_NO, KC_NO, KC_PAUS, KC_NO, KC_NO, KC_NO, KC_RSFT, KC_NO, KC_RGUI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/raindrop/keymaps/default/keymap.c b/keyboards/raindrop/keymaps/default/keymap.c
new file mode 100644
index 000000000000..8456863bb0d4
--- /dev/null
+++ b/keyboards/raindrop/keymaps/default/keymap.c
@@ -0,0 +1,21 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ ),
+ [1] = LAYOUT_60_ansi(
+ 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_INS, KC_NO, KC_HOME, KC_END, KC_NO, KC_NO, KC_PGUP, KC_PGDN, KC_NO, KC_SCRL, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_NO, KC_NO, KC_PAUS, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/raindrop/keymaps/hhkb/keymap.c b/keyboards/raindrop/keymaps/hhkb/keymap.c
new file mode 100644
index 000000000000..b08984c9aa75
--- /dev/null
+++ b/keyboards/raindrop/keymaps/hhkb/keymap.c
@@ -0,0 +1,21 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_hhkb(
+ 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_LSFT, 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_LCTL, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI
+ ),
+ [1] = LAYOUT_60_hhkb(
+ 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_NO, KC_NO,
+ KC_NO, KC_NO, KC_PSCR, KC_SCRL, KC_PAUS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_INS, KC_HOME, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_DEL, KC_END, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/raindrop/readme.md b/keyboards/raindrop/readme.md
new file mode 100644
index 000000000000..2741cfafa75f
--- /dev/null
+++ b/keyboards/raindrop/readme.md
@@ -0,0 +1,38 @@
+# Raindrop
+
+![stacked](https://i.imgur.com/R2iPqjIh.png)
+*Casing*
+![PCB Front](https://i.imgur.com/00TpL3nh.png)
+*PCB Front*
+
+60% sized keyboard with a gasket mounted plate and aluminium case, made by Laneware Peripherals.
+
+* Keyboard Maintainer: [Laneware Peripherals](https://github.com/laneware)
+* Hardware Supported: Raindrop PCB
+* Hardware Availability: Group Buy
+
+## Layouts
+The Raindrop PCB can be configured in the following key layouts:
+| Key Layout | Keymap | Diagram |
+| :---: | :---: | :---: |
+| Standard 60% | default | ![diagram_ansi](https://i.imgur.com/oibG44o.png) |
+| 2u Left Shift with Arrow Keys | arrows | ![diagram_arrows](https://i.imgur.com/cQ4Kwb5h.png) |
+| HHKB with 6.25 Spacebar | hhkb | ![diagram_hhkb](https://i.imgur.com/WU6gb1Qh.png) |
+
+Make example for this keyboard (after setting up your build environment):
+
+ make raindrop:default
+
+Flashing example for this keyboard:
+
+ make raindrop: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/raindrop/rules.mk b/keyboards/raindrop/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/rico/phoenix_project_no1/config.h b/keyboards/rico/phoenix_project_no1/config.h
new file mode 100644
index 000000000000..43fb63ce470f
--- /dev/null
+++ b/keyboards/rico/phoenix_project_no1/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2023 Eric Becourt (Rico at https://github.com/mymakercorner)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
diff --git a/keyboards/rico/phoenix_project_no1/info.json b/keyboards/rico/phoenix_project_no1/info.json
new file mode 100644
index 000000000000..7b13e4a0dfa4
--- /dev/null
+++ b/keyboards/rico/phoenix_project_no1/info.json
@@ -0,0 +1,123 @@
+{
+ "manufacturer": "Rico",
+ "keyboard_name": "Phoenix Project No 1",
+ "maintainer": "Rico",
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["GP24", "GP0", "GP14", "GP13", "GP12", "GP10", "GP9", "GP8", "GP7", "GP6", "GP5", "GP4", "GP3", "GP25", "GP2", "GP1"],
+ "rows": ["GP27", "GP29", "GP19", "GP20", "GP26"]
+ },
+ "processor": "RP2040",
+ "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
+ },
+ "url": "https://github.com/mymakercorner/Phoenix_Project_No1",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x9901",
+ "vid": "0x21C0"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP28"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [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, 14], "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, 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": [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, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 11.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/rico/phoenix_project_no1/keymaps/default/keymap.c b/keyboards/rico/phoenix_project_no1/keymaps/default/keymap.c
new file mode 100644
index 000000000000..a4d58d9097e0
--- /dev/null
+++ b/keyboards/rico/phoenix_project_no1/keymaps/default/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2023 Eric Becourt (Rico at https://github.com/mymakercorner)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+enum layer_names {
+ _BASE,
+ _FN,
+ _FN2
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, KC_PGDN,
+ 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, KC_UP, MO(_FN),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [_FN] = LAYOUT(
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, MO(_FN2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [_FN2] = LAYOUT(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+// clang-format on
diff --git a/keyboards/rico/phoenix_project_no1/keymaps/via/keymap.c b/keyboards/rico/phoenix_project_no1/keymaps/via/keymap.c
new file mode 100644
index 000000000000..a4d58d9097e0
--- /dev/null
+++ b/keyboards/rico/phoenix_project_no1/keymaps/via/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2023 Eric Becourt (Rico at https://github.com/mymakercorner)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+enum layer_names {
+ _BASE,
+ _FN,
+ _FN2
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, KC_PGDN,
+ 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, KC_UP, MO(_FN),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [_FN] = LAYOUT(
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, MO(_FN2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [_FN2] = LAYOUT(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+// clang-format on
diff --git a/keyboards/rico/phoenix_project_no1/keymaps/via/rules.mk b/keyboards/rico/phoenix_project_no1/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/rico/phoenix_project_no1/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/rico/phoenix_project_no1/readme.md b/keyboards/rico/phoenix_project_no1/readme.md
new file mode 100644
index 000000000000..c70b944717fe
--- /dev/null
+++ b/keyboards/rico/phoenix_project_no1/readme.md
@@ -0,0 +1,34 @@
+# Phoenix Project No 1
+
+![Type S](https://i.imgur.com/YJaz6P3h.jpeg)
+![Type H](https://i.imgur.com/7Lz9oRLh.jpeg)
+
+This is an open source collection of M65-A keyboard replacement PCBs, available both in solderable and hotswap variants.
+
+* Keyboard Maintainer: [Eric Becourt, aka Rico](https://github.com/mymakercorner)
+* Hardware Supported: Phoenix Project No 1 Type S (solder) and Type H (hotswap)
+* Hardware Availability: hardware is open source, Github repository contains everything to easily have fully assembled PCBs at JLCPCB
+
+More details in Github repository [here](https://github.com/mymakercorner/Phoenix_Project_No1)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rico/phoenix_project_no1:default
+
+Flashing example for this keyboard:
+
+ make rico/phoenix_project_no1: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
+
+You can enter the bootloader in 5 ways:
+
+* **QMK software ways:**
+ * **Bootmagic reset**: hold down the key at (0,0) in the matrix (the top left key or Escape) and plug in the keyboard
+ * **Keycode in layout**: press the key mapped to `QK_BOOT` that is the top left key or Escape on layer 2
+ * **Physical BOOTSEL button**: double tap the BOOTSEL button
+* **Native RP2040 MCU ways:**
+ * **Physical BOOTSEL and RESET button**: while keyboard is plugged maintain RESET button pressed, press BOOTSEL button then release the RESET button
+ * **Physical RESET button**: maintain RESET button pressed while plugging in the keyboard
diff --git a/keyboards/rico/phoenix_project_no1/rules.mk b/keyboards/rico/phoenix_project_no1/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/rico/phoenix_project_no1/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/rmkeebs/rm_fullsize/info.json b/keyboards/rmkeebs/rm_fullsize/info.json
new file mode 100644
index 000000000000..4b02137ad3e3
--- /dev/null
+++ b/keyboards/rmkeebs/rm_fullsize/info.json
@@ -0,0 +1,155 @@
+{
+ "manufacturer": "RuckerMachine",
+ "keyboard_name": "rm_fullsize",
+ "maintainer": "RuckerMachine",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "encoder": true
+ },
+ "matrix_pins": {
+ "cols": ["GP22", "GP23", "GP24", "GP25", "GP26", "GP27", "GP28", "GP29", "GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP12", "GP13", "GP14", "GP16", "GP17"],
+ "rows": ["GP8", "GP7", "GP9", "GP20", "GP18", "GP19"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "GP11", "pin_b": "GP10" }
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0.25 },
+ { "matrix": [0, 2], "x": 2, "y": 0.25 },
+ { "matrix": [0, 3], "x": 3, "y": 0.25 },
+ { "matrix": [0, 4], "x": 4, "y": 0.25 },
+ { "matrix": [0, 5], "x": 5, "y": 0.25 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0.25 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0.25 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0.25 },
+ { "matrix": [0, 9], "x": 9.5, "y": 0.25 },
+ { "matrix": [0, 10], "x": 11, "y": 0.25 },
+ { "matrix": [0, 11], "x": 12, "y": 0.25 },
+ { "matrix": [0, 12], "x": 13, "y": 0.25 },
+ { "matrix": [0, 13], "x": 14, "y": 0.25 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0.25 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0.25 },
+ { "matrix": [3, 15], "x": 17.25, "y": 0.25 },
+ { "matrix": [0, 16], "x": 18.5, "y": 0.25 },
+ { "matrix": [0, 17], "x": 19.5, "y": 0.25 },
+ { "matrix": [0, 18], "x": 20.5, "y": 0.25 },
+ { "matrix": [0, 19], "x": 21.75, "y": 0 },
+
+ { "matrix": [1, 0], "x": 0, "y": 1.5 },
+ { "matrix": [1, 1], "x": 1, "y": 1.5 },
+ { "matrix": [1, 2], "x": 2, "y": 1.5 },
+ { "matrix": [1, 3], "x": 3, "y": 1.5 },
+ { "matrix": [1, 4], "x": 4, "y": 1.5 },
+ { "matrix": [1, 5], "x": 5, "y": 1.5 },
+ { "matrix": [1, 6], "x": 6, "y": 1.5 },
+ { "matrix": [1, 7], "x": 7, "y": 1.5 },
+ { "matrix": [1, 8], "x": 8, "y": 1.5 },
+ { "matrix": [1, 9], "x": 9, "y": 1.5 },
+ { "matrix": [1, 10], "x": 10, "y": 1.5 },
+ { "matrix": [1, 11], "x": 11, "y": 1.5 },
+ { "matrix": [1, 12], "x": 12, "y": 1.5 },
+ { "matrix": [1, 13], "x": 13, "y": 1.5 },
+ { "matrix": [2, 13], "x": 14, "y": 1.5 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1.5 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1.5 },
+ { "matrix": [4, 15], "x": 17.25, "y": 1.5 },
+ { "matrix": [1, 16], "x": 18.5, "y": 1.5 },
+ { "matrix": [1, 17], "x": 19.5, "y": 1.5 },
+ { "matrix": [1, 18], "x": 20.5, "y": 1.5 },
+ { "matrix": [1, 19], "x": 21.5, "y": 1.5 },
+
+ { "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.5 },
+ { "matrix": [2, 1], "x": 1.5, "y": 2.5 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2.5 },
+ { "matrix": [2, 3], "x": 3.5, "y": 2.5 },
+ { "matrix": [2, 4], "x": 4.5, "y": 2.5 },
+ { "matrix": [2, 5], "x": 5.5, "y": 2.5 },
+ { "matrix": [2, 6], "x": 6.5, "y": 2.5 },
+ { "matrix": [2, 7], "x": 7.5, "y": 2.5 },
+ { "matrix": [2, 8], "x": 8.5, "y": 2.5 },
+ { "matrix": [2, 9], "x": 9.5, "y": 2.5 },
+ { "matrix": [2, 10], "x": 10.5, "y": 2.5 },
+ { "matrix": [2, 11], "x": 11.5, "y": 2.5 },
+ { "matrix": [2, 12], "x": 12.5, "y": 2.5 },
+ { "matrix": [3, 13], "w": 1.5, "x": 13.5, "y": 2.5 },
+ { "matrix": [2, 14], "x": 15.25, "y": 2.5 },
+ { "matrix": [2, 15], "x": 16.25, "y": 2.5 },
+ { "matrix": [5, 15], "x": 17.25, "y": 2.5 },
+ { "matrix": [2, 16], "x": 18.5, "y": 2.5 },
+ { "matrix": [2, 17], "x": 19.5, "y": 2.5 },
+ { "matrix": [2, 18], "x": 20.5, "y": 2.5 },
+ { "matrix": [2, 19], "x": 21.5, "y": 2.5 },
+
+ { "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.5 },
+ { "matrix": [3, 1], "x": 1.75, "y": 3.5 },
+ { "matrix": [3, 2], "x": 2.75, "y": 3.5 },
+ { "matrix": [3, 3], "x": 3.75, "y": 3.5 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3.5 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3.5 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3.5 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3.5 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3.5 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3.5 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3.5 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3.5 },
+ { "matrix": [3, 12], "w": 2.25, "x": 12.75, "y": 3.5 },
+ { "matrix": [3, 16], "x": 18.5, "y": 3.5 },
+ { "matrix": [3, 17], "x": 19.5, "y": 3.5 },
+ { "matrix": [3, 18], "x": 20.5, "y": 3.5 },
+ { "matrix": [3, 19], "x": 21.5, "y": 3.5 },
+
+ { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.5 },
+ { "matrix": [4, 1], "x": 2.25, "y": 4.5 },
+ { "matrix": [4, 2], "x": 3.25, "y": 4.5 },
+ { "matrix": [4, 3], "x": 4.25, "y": 4.5 },
+ { "matrix": [4, 4], "x": 5.25, "y": 4.5 },
+ { "matrix": [4, 5], "x": 6.25, "y": 4.5 },
+ { "matrix": [4, 6], "x": 7.25, "y": 4.5 },
+ { "matrix": [4, 7], "x": 8.25, "y": 4.5 },
+ { "matrix": [4, 8], "x": 9.25, "y": 4.5 },
+ { "matrix": [4, 9], "x": 10.25, "y": 4.5 },
+ { "matrix": [4, 10], "x": 11.25, "y": 4.5 },
+ { "matrix": [4, 11], "w": 2.75, "x": 12.25, "y": 4.5 },
+ { "matrix": [3, 14], "x": 16.25, "y": 4.5 },
+ { "matrix": [4, 16], "x": 18.5, "y": 4.5 },
+ { "matrix": [4, 17], "x": 19.5, "y": 4.5 },
+ { "matrix": [4, 18], "x": 20.5, "y": 4.5 },
+ { "matrix": [4, 19], "x": 21.5, "y": 4.5 },
+
+ { "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.5 },
+ { "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.5 },
+ { "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.5 },
+ { "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.5 },
+ { "matrix": [5, 9], "w": 1.25, "x": 10, "y": 5.5 },
+ { "matrix": [5, 10], "w": 1.25, "x": 11.25, "y": 5.5 },
+ { "matrix": [5, 11], "w": 1.25, "x": 12.5, "y": 5.5 },
+ { "matrix": [5, 12], "w": 1.25, "x": 13.75, "y": 5.5 },
+ { "matrix": [5, 13], "x": 15.25, "y": 5.5 },
+ { "matrix": [4, 14], "x": 16.25, "y": 5.5 },
+ { "matrix": [5, 14], "x": 17.25, "y": 5.5 },
+ { "matrix": [5, 16], "x": 18.5, "y": 5.5 },
+ { "matrix": [5, 17], "x": 19.5, "y": 5.5 },
+ { "matrix": [5, 18], "x": 20.5, "y": 5.5 },
+ { "matrix": [5, 19], "x": 21.5, "y": 5.5 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/rmkeebs/rm_fullsize/keymaps/default/keymap.c b/keyboards/rmkeebs/rm_fullsize/keymaps/default/keymap.c
new file mode 100644
index 000000000000..c94cc2e526e3
--- /dev/null
+++ b/keyboards/rmkeebs/rm_fullsize/keymaps/default/keymap.c
@@ -0,0 +1,54 @@
+// Copyright 2022 JRucker (@JRucker)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+ KC_00 = QK_USER
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* ┌───┐
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┐ │ENC│
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│ │PLA│PRV│NXT│ └───┘
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Und│Bsp│ │Ins│Hom│PgU│ │Num│ / │ * │ - │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ │ 7 │ 8 │ 9 │ = │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┼───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ │ 4 │ 5 │ 6 │ + │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ ├───┼───┼───┼───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │Ent│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┼───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │ │ 0 │ 00│ . │Del│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───┴───┴───┴───┘
+ */
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_MPLY, KC_MPRV, KC_MNXT, KC_MUTE,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, C(KC_Z), KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PEQL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_00, KC_PDOT, KC_PENT
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_00:
+ if (record->event.pressed) {
+ // when keycode KC_00 is pressed
+ SEND_STRING("00");
+ }
+ return false;
+ }
+ return true;
+};
diff --git a/keyboards/rmkeebs/rm_fullsize/keymaps/default/rules.mk b/keyboards/rmkeebs/rm_fullsize/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/rmkeebs/rm_fullsize/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/rmkeebs/rm_fullsize/readme.md b/keyboards/rmkeebs/rm_fullsize/readme.md
new file mode 100644
index 000000000000..5158d447c6f5
--- /dev/null
+++ b/keyboards/rmkeebs/rm_fullsize/readme.md
@@ -0,0 +1,26 @@
+# rm_fullsize
+
+![rm_full](https://i.imgur.com/k61zEtah.jpg)
+
+A fullsized keyboard with multiple layout options and a big knob. The case is manchined out of 6061 Aluminum by Rucker Machine in the USA.
+
+* Keyboard Maintainer: [Rucker Machine](https://github.com/RuckerMachine)
+* Hardware Supported: RM Fullsized PCB, RP2040 controller
+* Hardware Availability: [RM Fullsized](https://www.rmkeebs.com/product/rm-fullsized/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rmkeebs/rm_fullsize:default
+
+Flashing example for this keyboard:
+
+ make rmkeebs/rm_fullsize:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (Escape key) and plug in the keyboard
+* **Physical reset button**: Hold down the button on the back of the PCB labeled BOOTLOADER, then press and hold the button labeled RESET for 3 seconds, then release both buttons.
diff --git a/keyboards/rmkeebs/rm_fullsize/rules.mk b/keyboards/rmkeebs/rm_fullsize/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/rmkeebs/rm_fullsize/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/shostudio/arc/info.json b/keyboards/shostudio/arc/info.json
new file mode 100644
index 000000000000..0e7f21464961
--- /dev/null
+++ b/keyboards/shostudio/arc/info.json
@@ -0,0 +1,297 @@
+{
+ "keyboard_name": "ARC",
+ "manufacturer": "Mechlovin Studio",
+ "url": "",
+ "maintainer": "Shostudio",
+ "usb": {
+ "vid": "0x5050",
+ "pid": "0x65AC",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["B11", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A15", "C13", "B9", "B8", "B7", "B6", "B5", "B4", "B3"],
+ "rows": ["B13", "B14", "A8", "A9", "A2"]
+ },
+ "diode_direction": "COL2ROW",
+ "indicators": {
+ "caps_lock": "B12",
+ "on_state": 0
+ },
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "console": true,
+ "extrakey": true,
+ "nkro": true,
+ "mousekey": true
+ },
+ "processor": "STM32F103",
+ "bootloader": "stm32duino",
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "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": [4, 7], "x": 8.25, "y": 0},
+ {"matrix": [0, 8], "x": 10.75, "y": 0},
+ {"matrix": [0, 9], "x": 11.75, "y": 0},
+ {"matrix": [0, 10], "x": 12.75, "y": 0},
+ {"matrix": [0, 11], "x": 13.75, "y": 0},
+ {"matrix": [0, 12], "x": 14.75, "y": 0},
+ {"matrix": [0, 13], "x": 15.75, "y": 0},
+ {"matrix": [0, 14], "x": 16.75, "y": 0},
+ {"matrix": [0, 15], "x": 17.75, "y": 0},
+ {"matrix": [0, 16], "x": 18.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.25, "y": 1},
+ {"matrix": [1, 9], "x": 11.25, "y": 1},
+ {"matrix": [1, 10], "x": 12.25, "y": 1},
+ {"matrix": [1, 11], "x": 13.25, "y": 1},
+ {"matrix": [1, 12], "x": 14.25, "y": 1},
+ {"matrix": [1, 13], "x": 15.25, "y": 1},
+ {"matrix": [1, 14], "x": 16.25, "y": 1},
+ {"matrix": [1, 15], "x": 17.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 16], "x": 18.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 10.5, "y": 2},
+ {"matrix": [2, 9], "x": 11.5, "y": 2},
+ {"matrix": [2, 10], "x": 12.5, "y": 2},
+ {"matrix": [2, 11], "x": 13.5, "y": 2},
+ {"matrix": [2, 12], "x": 14.5, "y": 2},
+ {"matrix": [2, 13], "x": 15.5, "y": 2},
+ {"matrix": [2, 14], "x": 16.5, "y": 2},
+ {"matrix": [2, 15], "x": 17.5, "y": 2, "w": 1.25},
+ {"matrix": [2, 16], "x": 18.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 1.25},
+ {"matrix": [4, 3], "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": 8.5, "y": 3},
+ {"matrix": [3, 8], "x": 10, "y": 3},
+ {"matrix": [3, 9], "x": 11, "y": 3},
+ {"matrix": [3, 10], "x": 12, "y": 3},
+ {"matrix": [3, 11], "x": 13, "y": 3},
+ {"matrix": [3, 12], "x": 14, "y": 3},
+ {"matrix": [3, 13], "x": 15, "y": 3},
+ {"matrix": [3, 14], "x": 16, "y": 3, "w": 1.75},
+ {"matrix": [3, 15], "x": 17.75, "y": 3},
+ {"matrix": [3, 16], "x": 18.75, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 4], "x": 5, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 6.5, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 8.75, "y": 4},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 2.75},
+ {"matrix": [4, 11], "x": 12.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 14, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 16.75, "y": 4},
+ {"matrix": [4, 15], "x": 17.75, "y": 4},
+ {"matrix": [4, 16], "x": 18.75, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "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": [4, 7], "x": 8.25, "y": 0},
+ {"matrix": [0, 8], "x": 10.75, "y": 0},
+ {"matrix": [0, 9], "x": 11.75, "y": 0},
+ {"matrix": [0, 10], "x": 12.75, "y": 0},
+ {"matrix": [0, 11], "x": 13.75, "y": 0},
+ {"matrix": [0, 12], "x": 14.75, "y": 0},
+ {"matrix": [0, 13], "x": 15.75, "y": 0},
+ {"matrix": [0, 14], "x": 16.75, "y": 0, "w": 2},
+ {"matrix": [0, 16], "x": 18.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.25, "y": 1},
+ {"matrix": [1, 9], "x": 11.25, "y": 1},
+ {"matrix": [1, 10], "x": 12.25, "y": 1},
+ {"matrix": [1, 11], "x": 13.25, "y": 1},
+ {"matrix": [1, 12], "x": 14.25, "y": 1},
+ {"matrix": [1, 13], "x": 15.25, "y": 1},
+ {"matrix": [1, 14], "x": 16.25, "y": 1},
+ {"matrix": [1, 15], "x": 17.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 16], "x": 18.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 10.5, "y": 2},
+ {"matrix": [2, 9], "x": 11.5, "y": 2},
+ {"matrix": [2, 10], "x": 12.5, "y": 2},
+ {"matrix": [2, 11], "x": 13.5, "y": 2},
+ {"matrix": [2, 12], "x": 14.5, "y": 2},
+ {"matrix": [2, 13], "x": 15.5, "y": 2},
+ {"matrix": [2, 15], "x": 16.5, "y": 2, "w": 2.25},
+ {"matrix": [2, 16], "x": 18.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+ {"matrix": [3, 7], "x": 8.5, "y": 3},
+ {"matrix": [3, 8], "x": 10, "y": 3},
+ {"matrix": [3, 9], "x": 11, "y": 3},
+ {"matrix": [3, 10], "x": 12, "y": 3},
+ {"matrix": [3, 11], "x": 13, "y": 3},
+ {"matrix": [3, 12], "x": 14, "y": 3},
+ {"matrix": [3, 13], "x": 15, "y": 3},
+ {"matrix": [3, 14], "x": 16, "y": 3, "w": 1.75},
+ {"matrix": [3, 15], "x": 17.75, "y": 3},
+ {"matrix": [3, 16], "x": 18.75, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 4], "x": 5, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 6.5, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 8.75, "y": 4},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 2.75},
+ {"matrix": [4, 11], "x": 12.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 14, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 16.75, "y": 4},
+ {"matrix": [4, 15], "x": 17.75, "y": 4},
+ {"matrix": [4, 16], "x": 18.75, "y": 4}
+ ]
+ },
+ "LAYOUT_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "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": [4, 7], "x": 8.25, "y": 0},
+ {"matrix": [0, 8], "x": 10.75, "y": 0},
+ {"matrix": [0, 9], "x": 11.75, "y": 0},
+ {"matrix": [0, 10], "x": 12.75, "y": 0},
+ {"matrix": [0, 11], "x": 13.75, "y": 0},
+ {"matrix": [0, 12], "x": 14.75, "y": 0},
+ {"matrix": [0, 13], "x": 15.75, "y": 0},
+ {"matrix": [0, 14], "x": 16.75, "y": 0, "w": 2},
+ {"matrix": [0, 16], "x": 18.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.25, "y": 1},
+ {"matrix": [1, 9], "x": 11.25, "y": 1},
+ {"matrix": [1, 10], "x": 12.25, "y": 1},
+ {"matrix": [1, 11], "x": 13.25, "y": 1},
+ {"matrix": [1, 12], "x": 14.25, "y": 1},
+ {"matrix": [1, 13], "x": 15.25, "y": 1},
+ {"matrix": [1, 14], "x": 16.25, "y": 1},
+ {"matrix": [2, 15], "x": 17.5, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [1, 16], "x": 18.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 10.5, "y": 2},
+ {"matrix": [2, 9], "x": 11.5, "y": 2},
+ {"matrix": [2, 10], "x": 12.5, "y": 2},
+ {"matrix": [2, 11], "x": 13.5, "y": 2},
+ {"matrix": [2, 12], "x": 14.5, "y": 2},
+ {"matrix": [2, 13], "x": 15.5, "y": 2},
+ {"matrix": [2, 14], "x": 16.5, "y": 2},
+ {"matrix": [2, 16], "x": 18.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 1.25},
+ {"matrix": [4, 3], "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": 8.5, "y": 3},
+ {"matrix": [3, 8], "x": 10, "y": 3},
+ {"matrix": [3, 9], "x": 11, "y": 3},
+ {"matrix": [3, 10], "x": 12, "y": 3},
+ {"matrix": [3, 11], "x": 13, "y": 3},
+ {"matrix": [3, 12], "x": 14, "y": 3},
+ {"matrix": [3, 13], "x": 15, "y": 3},
+ {"matrix": [3, 14], "x": 16, "y": 3, "w": 1.75},
+ {"matrix": [3, 15], "x": 17.75, "y": 3},
+ {"matrix": [3, 16], "x": 18.75, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 4], "x": 5, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 6.5, "y": 4, "w": 2.25},
+ {"matrix": [4, 6], "x": 8.75, "y": 4},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 2.75},
+ {"matrix": [4, 11], "x": 12.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 14, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 16.75, "y": 4},
+ {"matrix": [4, 15], "x": 17.75, "y": 4},
+ {"matrix": [4, 16], "x": 18.75, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/shostudio/arc/keymaps/default/keymap.c b/keyboards/shostudio/arc/keymaps/default/keymap.c
new file mode 100644
index 000000000000..591f1928a156
--- /dev/null
+++ b/keyboards/shostudio/arc/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 Mechlovin'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+#define LT1_CAP LT(1, KC_CAPS)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F5, KC_F6, LT1_CAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, TO(1),
+ KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_ansi(
+ KC_TRNS, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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/shostudio/arc/keymaps/via/keymap.c b/keyboards/shostudio/arc/keymaps/via/keymap.c
new file mode 100644
index 000000000000..663823d915ba
--- /dev/null
+++ b/keyboards/shostudio/arc/keymaps/via/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2023 Mechlovin'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+#define LT1_CAP LT(1, KC_CAPS)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F5, KC_F6, LT1_CAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, TO(1),
+ KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_ansi(
+ KC_TRNS, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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/shostudio/arc/keymaps/via/rules.mk b/keyboards/shostudio/arc/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/shostudio/arc/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/shostudio/arc/readme.md b/keyboards/shostudio/arc/readme.md
new file mode 100644
index 000000000000..b84d77e0b76f
--- /dev/null
+++ b/keyboards/shostudio/arc/readme.md
@@ -0,0 +1,27 @@
+# arc
+
+![arc](https://i.imgur.com/HQdls1nh.png)
+
+ARC PCB, An ergonomic 65% keyboard PCB.
+* Keyboard Maintainer: [shostudios](https://shostudios.co/)
+* Hardware Supported: ARC, APM32F103
+* Hardware Availability: [shostudios](https://shostudios.co/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make shostudio/arc:default
+
+Flashing example for this keyboard:
+
+ make shostudio/arc:default:flash
+
+## Bootloader
+
+Enter the bootloader in 4 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **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
+* **Bootloader**: Hold down the key at (0,13) in the matrix (Backspace) and plug in the keyboard
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/shostudio/arc/rules.mk b/keyboards/shostudio/arc/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/shostudio/arc/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/skeletonkbd/frost68/config.h b/keyboards/skeletonkbd/frost68/config.h
new file mode 100644
index 000000000000..eaf7a31fb6ef
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/config.h
@@ -0,0 +1,61 @@
+// Copyright 2023 skeletonkbd (@skeletonkbd)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define WS2812_PIO_USE_PIO1
+#define RGB_MATRIX_LED_COUNT 68
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define USB_SUSPEND_WAKEUP_DELAY 200
+
+#define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+#define ENABLE_RGB_MATRIX_BAND_SAT
+#define ENABLE_RGB_MATRIX_BAND_VAL
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#define ENABLE_RGB_MATRIX_DUAL_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#define ENABLE_RGB_MATRIX_RAINDROPS
+#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#define ENABLE_RGB_MATRIX_HUE_BREATHING
+#define ENABLE_RGB_MATRIX_HUE_PENDULUM
+#define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+#define ENABLE_RGB_MATRIX_PIXEL_FLOW
+#define ENABLE_RGB_MATRIX_PIXEL_RAIN
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_KEYRELEASES
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+#define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_UP_DOWN
diff --git a/keyboards/skeletonkbd/frost68/frost68.c b/keyboards/skeletonkbd/frost68/frost68.c
new file mode 100644
index 000000000000..4bfd3fa28f30
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/frost68.c
@@ -0,0 +1,18 @@
+// Copyright 2023 skeletonkbd (@skeletonkbd)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
+ return false;
+ }
+ if (host_keyboard_led_state().caps_lock) {
+ for (uint8_t i = led_min; i < led_max; i++) {
+ if (g_led_config.flags[i] & LED_FLAG_INDICATOR) {
+ rgb_matrix_set_color(i, RGB_RED);
+ }
+ }
+ }
+ return false;
+}
diff --git a/keyboards/skeletonkbd/frost68/info.json b/keyboards/skeletonkbd/frost68/info.json
new file mode 100644
index 000000000000..3099b26ecaa1
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/info.json
@@ -0,0 +1,182 @@
+{
+ "manufacturer": "skeletonkbd",
+ "keyboard_name": "Frost68",
+ "maintainer": "skeletonkbd",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP21", "GP22", "GP23", "GP24", "GP25", "GP26", "GP28", "GP3", "GP4", "GP5", "GP6", "GP9", "GP10", "GP11", "GP12", "GP13"],
+ "rows": ["GP29", "GP27", "GP20", "GP19", "GP18"]
+ },
+ "processor": "RP2040",
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP0"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "layout": [
+ {"matrix": [0, 0], "x": 33.1, "y": 3.7, "flags": 4},
+ {"matrix": [0, 1], "x": 45.7, "y": 3.7, "flags": 4},
+ {"matrix": [0, 2], "x": 58.3, "y": 2.4, "flags": 4},
+ {"matrix": [0, 3], "x": 71.1, "y": 6.4, "flags": 4},
+ {"matrix": [0, 4], "x": 83.4, "y": 10.4, "flags": 4},
+ {"matrix": [0, 5], "x": 95.7, "y": 14.3, "flags": 4},
+ {"matrix": [0, 6], "x": 108, "y": 18.3, "flags": 4},
+ {"matrix": [1, 5], "x": 99.3, "y": 35, "flags": 4},
+ {"matrix": [1, 4], "x": 86.9, "y": 31, "flags": 4},
+ {"matrix": [1, 3], "x": 74.6, "y": 27, "flags": 4},
+ {"matrix": [1, 2], "x": 62.3, "y": 23.1, "flags": 4},
+ {"matrix": [1, 1], "x": 49.2, "y": 22.7, "flags": 4},
+ {"matrix": [1, 0], "x": 33.5, "y": 22.7, "flags": 1},
+ {"matrix": [2, 0], "x": 32.3, "y": 41.8, "flags": 1},
+ {"matrix": [2, 1], "x": 49.7, "y": 41.8, "flags": 4},
+ {"matrix": [2, 2], "x": 62.7, "y": 42.7, "flags": 4},
+ {"matrix": [2, 3], "x": 75.1, "y": 46.7, "flags": 4},
+ {"matrix": [2, 4], "x": 87.4, "y": 50.6, "flags": 4},
+ {"matrix": [2, 5], "x": 99.7, "y": 54.6, "flags": 4},
+ {"matrix": [3, 5], "x": 103.3, "y": 75.2, "flags": 4},
+ {"matrix": [3, 4], "x": 90.9, "y": 71.2, "flags": 4},
+ {"matrix": [3, 3], "x": 78.6, "y": 67.3, "flags": 4},
+ {"matrix": [3, 2], "x": 66.3, "y": 63.3, "flags": 4},
+ {"matrix": [3, 1], "x": 53.3, "y": 60.8, "flags": 4},
+ {"matrix": [3, 0], "x": 32.8, "y": 60.8, "flags": 1},
+ {"matrix": [4, 0], "x": 28.1, "y": 79.9, "flags": 1},
+ {"matrix": [4, 1], "x": 47, "y": 79.9, "flags": 1},
+ {"matrix": [4, 3], "x": 80.6, "y": 87.4, "flags": 4},
+ {"matrix": [4, 5], "x": 100.6, "y": 93.8, "flags": 4},
+ {"matrix": [4, 7], "x": 140.2, "y": 90.4, "flags": 4},
+ {"matrix": [4, 10], "x": 166.4, "y": 82.5, "flags": 1},
+ {"matrix": [4, 12], "x": 195.7, "y": 79.9, "flags": 1},
+ {"matrix": [4, 13], "x": 211.4, "y": 79.9, "flags": 4},
+ {"matrix": [4, 14], "x": 224, "y": 79.9, "flags": 4},
+ {"matrix": [4, 15], "x": 236.6, "y": 79.9, "flags": 4},
+ {"matrix": [3, 14], "x": 224, "y": 60.8, "flags": 4},
+ {"matrix": [3, 13], "x": 206.7, "y": 60.8, "flags": 1},
+ {"matrix": [3, 12], "x": 189.4, "y": 60.8, "flags": 4},
+ {"matrix": [3, 11], "x": 176.8, "y": 60.8, "flags": 4},
+ {"matrix": [3, 10], "x": 163.7, "y": 63.3, "flags": 4},
+ {"matrix": [3, 9], "x": 151.4, "y": 67.3, "flags": 4},
+ {"matrix": [3, 8], "x": 139.1, "y": 71.2, "flags": 4},
+ {"matrix": [3, 7], "x": 126.8, "y": 75.2, "flags": 4},
+ {"matrix": [2, 7], "x": 130.3, "y": 54.6, "flags": 4},
+ {"matrix": [2, 8], "x": 142.6, "y": 50.6, "flags": 4},
+ {"matrix": [2, 9], "x": 155, "y": 46.7, "flags": 4},
+ {"matrix": [2, 10], "x": 167.3, "y": 42.7, "flags": 4},
+ {"matrix": [2, 11], "x": 180.4, "y": 41.8, "flags": 4},
+ {"matrix": [2, 12], "x": 193, "y": 41.8, "flags": 4},
+ {"matrix": [2, 13], "x": 213.4, "y": 41.8, "flags": 4},
+ {"matrix": [2, 15], "x": 236.6, "y": 39.6, "flags": 4},
+ {"matrix": [1, 15], "x": 235.3, "y": 20.5, "flags": 4},
+ {"matrix": [1, 14], "x": 217.4, "y": 22.7, "flags": 4},
+ {"matrix": [1, 13], "x": 201.6, "y": 22.7, "flags": 4},
+ {"matrix": [1, 12], "x": 189, "y": 22.7, "flags": 4},
+ {"matrix": [1, 11], "x": 176.4, "y": 22, "flags": 4},
+ {"matrix": [1, 10], "x": 163.4, "y": 24.5, "flags": 4},
+ {"matrix": [1, 9], "x": 151.1, "y": 28.4, "flags": 4},
+ {"matrix": [1, 8], "x": 138.7, "y": 32.4, "flags": 4},
+ {"matrix": [1, 7], "x": 126.4, "y": 36.4, "flags": 4},
+ {"matrix": [0, 7], "x": 128.1, "y": 16.3, "flags": 4},
+ {"matrix": [0, 8], "x": 140.5, "y": 12.4, "flags": 4},
+ {"matrix": [0, 9], "x": 152.8, "y": 8.4, "flags": 4},
+ {"matrix": [0, 10], "x": 165.1, "y": 4.4, "flags": 4},
+ {"matrix": [0, 11], "x": 178.2, "y": 2.9, "flags": 4},
+ {"matrix": [0, 12], "x": 190.8, "y": 3.7, "flags": 4},
+ {"matrix": [0, 14], "x": 209.7, "y": 3.7, "flags": 1},
+ {"matrix": [0, 15], "x": 233.9, "y": 1.5, "flags": 4}
+ ],
+ "max_brightness": 118,
+ "sat_steps": 8,
+ "speed_steps": 10,
+ "val_steps": 8
+ },
+ "url": "https://skeletonkbd.com/",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x68A0",
+ "vid": "0x1209"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 9, "y": 0},
+ {"matrix": [0, 8], "x": 10, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12, "y": 0},
+ {"matrix": [0, 11], "x": 13, "y": 0},
+ {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 13], "x": 15, "y": 0, "w": 2},
+ {"matrix": [0, 15], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 8.5, "y": 1},
+ {"matrix": [1, 8], "x": 9.5, "y": 1},
+ {"matrix": [1, 9], "x": 10.5, "y": 1},
+ {"matrix": [1, 10], "x": 11.5, "y": 1},
+ {"matrix": [1, 11], "x": 12.5, "y": 1},
+ {"matrix": [1, 12], "x": 13.5, "y": 1},
+ {"matrix": [1, 13], "x": 14.5, "y": 1},
+ {"matrix": [1, 14], "x": 15.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 15], "x": 17.25, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 8.75, "y": 2},
+ {"matrix": [2, 8], "x": 9.75, "y": 2},
+ {"matrix": [2, 9], "x": 10.75, "y": 2},
+ {"matrix": [2, 10], "x": 11.75, "y": 2},
+ {"matrix": [2, 11], "x": 12.75, "y": 2},
+ {"matrix": [2, 12], "x": 13.75, "y": 2},
+ {"matrix": [2, 13], "x": 14.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 15], "x": 17.25, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [3, 11], "x": 12.25, "y": 3},
+ {"matrix": [3, 12], "x": 13.25, "y": 3},
+ {"matrix": [3, 13], "x": 14.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 16, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 4, "y": 4, "w": 2.25},
+ {"matrix": [4, 5], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 8.25, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 15, "y": 4},
+ {"matrix": [4, 14], "x": 16, "y": 4},
+ {"matrix": [4, 15], "x": 17, "y": 4}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/skeletonkbd/frost68/keymaps/default/keymap.c b/keyboards/skeletonkbd/frost68/keymaps/default/keymap.c
new file mode 100644
index 000000000000..3d0d6dc794c4
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+// Copyright 2023 skeletonkbd (@skeletonkbd)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _L1,
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LNG1, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, MO(_L1), KC_SPC, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_L1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_PSCR,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_SCRL, KC_PAUS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LNG2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS),
+
+
+};
\ No newline at end of file
diff --git a/keyboards/skeletonkbd/frost68/keymaps/via/keymap.c b/keyboards/skeletonkbd/frost68/keymaps/via/keymap.c
new file mode 100644
index 000000000000..16d734b83f35
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/keymaps/via/keymap.c
@@ -0,0 +1,29 @@
+// Copyright 2023 skeletonkbd (@skeletonkbd)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _L1,
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LNG1, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, MO(_L1), KC_SPC, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_L1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_PSCR,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_SCRL, KC_PAUS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LNG2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS),
+
+
+};
\ No newline at end of file
diff --git a/keyboards/skeletonkbd/frost68/keymaps/via/rules.mk b/keyboards/skeletonkbd/frost68/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/skeletonkbd/frost68/readme.md b/keyboards/skeletonkbd/frost68/readme.md
new file mode 100644
index 000000000000..4864fd1a19e0
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/readme.md
@@ -0,0 +1,27 @@
+# skeletonkbd/skeleton68
+
+![skeletonkbd/skeleton68](https://i.imgur.com/ZrtbBNPh.jpg)
+
+Alice layout keyboard with acrylic case.
+
+- Keyboard Maintainer: [SkeletonKBD](https://github.com/skeletonkbd)
+- Hardware Supported: Frost68
+- Hardware Availability: https://github.com/skeletonkbd/Frost68
+
+Make example for this keyboard (after setting up your build environment):
+
+ make skeletonkbd/skeleton68:default
+
+Flashing example for this keyboard:
+
+ make skeletonkbd/skeleton68:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+- **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+- **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/skeletonkbd/frost68/rules.mk b/keyboards/skeletonkbd/frost68/rules.mk
new file mode 100644
index 000000000000..13195723492d
--- /dev/null
+++ b/keyboards/skeletonkbd/frost68/rules.mk
@@ -0,0 +1 @@
+DEBOUNCE_TYPE = sym_eager_pk
diff --git a/keyboards/smithrune/iron160/iron160_h/info.json b/keyboards/smithrune/iron160/iron160_h/info.json
index 5bef68523762..ae65246d26e7 100644
--- a/keyboards/smithrune/iron160/iron160_h/info.json
+++ b/keyboards/smithrune/iron160/iron160_h/info.json
@@ -21,71 +21,150 @@
"led_count": 1
},
"diode_direction": "COL2ROW",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_60_tsangan_hhkb"
+ },
+ "community_layouts": [
+ "60_tsangan_hhkb"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_60_ansi_tsangan_split_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "MO(1)", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
"layout": [
- {"label": "Esc", "matrix": [0, 0], "w": 1, "x": 0, "y": 0},
- {"label": "1", "matrix": [0, 1], "w": 1, "x": 1, "y": 0},
- {"label": "2", "matrix": [0, 2], "w": 1, "x": 2, "y": 0},
- {"label": "3", "matrix": [0, 3], "w": 1, "x": 3, "y": 0},
- {"label": "4", "matrix": [0, 4], "w": 1, "x": 4, "y": 0},
- {"label": "5", "matrix": [0, 5], "w": 1, "x": 5, "y": 0},
- {"label": "6", "matrix": [0, 6], "w": 1, "x": 6, "y": 0},
- {"label": "7", "matrix": [0, 7], "w": 1, "x": 7, "y": 0},
- {"label": "8", "matrix": [0, 8], "w": 1, "x": 8, "y": 0},
- {"label": "9", "matrix": [0, 9], "w": 1, "x": 9, "y": 0},
- {"label": "0", "matrix": [0, 10], "w": 1, "x": 10, "y": 0},
- {"label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0},
- {"label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0},
- {"label": "Bspc", "matrix": [0, 13], "w": 1, "x": 13, "y": 0},
- {"label": "Bspc", "matrix": [4, 13], "w": 1, "x": 14, "y": 0},
- {"label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
- {"label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1},
- {"label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1},
- {"label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1},
- {"label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1},
- {"label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1},
- {"label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1},
- {"label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1},
- {"label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1},
- {"label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1},
- {"label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1},
- {"label": "{", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1},
- {"label": "}", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1},
- {"label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1},
- {"label": "Caps", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2},
- {"label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2},
- {"label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2},
- {"label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2},
- {"label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2},
- {"label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2},
- {"label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2},
- {"label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2},
- {"label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2},
- {"label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2},
- {"label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2},
- {"label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2},
- {"label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 12.75, "y": 2},
- {"label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3},
- {"label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3},
- {"label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3},
- {"label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3},
- {"label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3},
- {"label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3},
- {"label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3},
- {"label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3},
- {"label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3},
- {"label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3},
- {"label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3},
- {"label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3},
- {"label": "MO(1)", "matrix": [3, 13], "w": 1, "x": 14, "y": 3},
- {"label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4},
- {"label": "Win", "matrix": [4, 1], "w": 1, "x": 1.5, "y": 4},
- {"label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4},
- {"label": "Space", "matrix": [4, 6], "w": 7, "x": 4, "y": 4},
- {"label": "Alt", "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4},
- {"label": "Win", "matrix": [4, 11], "w": 1, "x": 12.5, "y": 4},
- {"label": "Ctrl", "matrix": [4, 12], "w": 1.5, "x": 13.5, "y": 4}
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 13], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "MO(1)", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
diff --git a/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c b/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c
index b39e8d72eb40..b8dc909c9471 100755
--- a/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c
+++ b/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c
@@ -18,18 +18,18 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC,
+ [0] = LAYOUT_60_tsangan_hhkb(
+ 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_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
- KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, KC_RCTL
),
- [1] = LAYOUT(
- QK_BOOT , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ [1] = LAYOUT_60_tsangan_hhkb(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______
)
};
diff --git a/keyboards/smithrune/iron160/iron160_h/keymaps/via/keymap.c b/keyboards/smithrune/iron160/iron160_h/keymaps/via/keymap.c
index 5a700c2ee870..653a3dcd32ac 100755
--- a/keyboards/smithrune/iron160/iron160_h/keymaps/via/keymap.c
+++ b/keyboards/smithrune/iron160/iron160_h/keymaps/via/keymap.c
@@ -18,32 +18,32 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC,
+ [0] = LAYOUT_60_tsangan_hhkb(
+ 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_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
- KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, KC_RCTL, KC_BSPC
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, KC_RCTL
),
- [1] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ [1] = LAYOUT_60_tsangan_hhkb(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______
),
- [2] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ [2] = LAYOUT_60_tsangan_hhkb(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______
),
- [3] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ [3] = LAYOUT_60_tsangan_hhkb(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
- ),
+ _______, _______, _______, _______, _______, _______, _______
+ )
};
diff --git a/keyboards/smithrune/iron160/iron160_s/info.json b/keyboards/smithrune/iron160/iron160_s/info.json
index f5d80be17884..91c66a3d4fb7 100644
--- a/keyboards/smithrune/iron160/iron160_s/info.json
+++ b/keyboards/smithrune/iron160/iron160_s/info.json
@@ -24,74 +24,650 @@
"indicators": {
"caps_lock": "B0"
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_tsangan_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 13], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "]", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "[", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "MO(1)", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "]", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "[", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 13], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "]", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "[", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "MO(1)", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "]", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "[", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 13], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "]", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "[", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "MO(1)", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "]", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "[", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 13], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "]", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "[", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "MO(1)", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "]", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "[", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
"layout": [
- {"label": "~", "matrix": [0, 0], "w": 1, "x": 0, "y": 0},
- {"label": "!", "matrix": [0, 1], "w": 1, "x": 1, "y": 0},
- {"label": "@", "matrix": [0, 2], "w": 1, "x": 2, "y": 0},
- {"label": "#", "matrix": [0, 3], "w": 1, "x": 3, "y": 0},
- {"label": "$", "matrix": [0, 4], "w": 1, "x": 4, "y": 0},
- {"label": "%", "matrix": [0, 5], "w": 1, "x": 5, "y": 0},
- {"label": "^", "matrix": [0, 6], "w": 1, "x": 6, "y": 0},
- {"label": "&", "matrix": [0, 7], "w": 1, "x": 7, "y": 0},
- {"label": "*", "matrix": [0, 8], "w": 1, "x": 8, "y": 0},
- {"label": "(", "matrix": [0, 9], "w": 1, "x": 9, "y": 0},
- {"label": ")", "matrix": [0, 10], "w": 1, "x": 10, "y": 0},
- {"label": "_", "matrix": [0, 11], "w": 1, "x": 11, "y": 0},
- {"label": "+", "matrix": [0, 12], "w": 1, "x": 12, "y": 0},
- {"label": "Bspc", "matrix": [0, 13], "w": 1, "x": 13, "y": 0},
- {"label": "Bspc", "matrix": [4, 13], "w": 1, "x": 14, "y": 0},
- {"label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
- {"label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1},
- {"label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1},
- {"label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1},
- {"label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1},
- {"label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1},
- {"label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1},
- {"label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1},
- {"label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1},
- {"label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1},
- {"label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1},
- {"label": "]", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1},
- {"label": "[", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1},
- {"label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1},
- {"label": "Caps", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2},
- {"label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2},
- {"label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2},
- {"label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2},
- {"label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2},
- {"label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2},
- {"label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2},
- {"label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2},
- {"label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2},
- {"label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2},
- {"label": ":", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2},
- {"label": "\"", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2},
- {"label": "~", "matrix": [2, 12], "w": 1, "x": 12.75, "y": 2},
- {"label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2},
- {"label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3},
- {"label": "|", "matrix": [3, 1], "w": 1, "x": 1.25, "y": 3},
- {"label": "Z", "matrix": [3, 2], "w": 1, "x": 2.25, "y": 3},
- {"label": "X", "matrix": [3, 3], "w": 1, "x": 3.25, "y": 3},
- {"label": "C", "matrix": [3, 4], "w": 1, "x": 4.25, "y": 3},
- {"label": "V", "matrix": [3, 5], "w": 1, "x": 5.25, "y": 3},
- {"label": "B", "matrix": [3, 6], "w": 1, "x": 6.25, "y": 3},
- {"label": "N", "matrix": [3, 7], "w": 1, "x": 7.25, "y": 3},
- {"label": "M", "matrix": [3, 8], "w": 1, "x": 8.25, "y": 3},
- {"label": "<", "matrix": [3, 9], "w": 1, "x": 9.25, "y": 3},
- {"label": ">", "matrix": [3, 10], "w": 1, "x": 10.25, "y": 3},
- {"label": "?", "matrix": [3, 11], "w": 1, "x": 11.25, "y": 3},
- {"label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3},
- {"label": "MO(1)", "matrix": [3, 13], "w": 1, "x": 14, "y": 3},
- {"label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4},
- {"label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4},
- {"label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4},
- {"label": "Space", "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4},
- {"label": "Alt", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4},
- {"label": "Win", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4},
- {"label": "Menu", "matrix": [4, 11], "w": 1.25, "x": 12.5, "y": 4},
- {"label": "Ctrl", "matrix": [4, 12], "w": 1.25, "x": 13.75, "y": 4}
+ {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Bspc", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Bspc", "matrix": [4, 13], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "]", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "[", "matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "~", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "MO(1)", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Menu", "matrix": [4, 11], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
diff --git a/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c b/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c
index 1cc3dea2f6da..a8efb9749dd2 100755
--- a/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c
+++ b/keyboards/smithrune/iron160/iron160_s/keymaps/default/keymap.c
@@ -18,18 +18,18 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC,
+ [0] = LAYOUT_all(
+ QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT ,
- KC_LSFT, KC_BSLS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
- KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL, KC_BSPC
+ KC_LSFT, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL
),
- [1] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______, _______
)
};
diff --git a/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c b/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c
index f8790cc60076..0bbaa7e8456c 100755
--- a/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c
+++ b/keyboards/smithrune/iron160/iron160_s/keymaps/via/keymap.c
@@ -18,32 +18,32 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC,
+ [0] = LAYOUT_all(
+ QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT ,
- KC_LSFT, KC_BSLS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
- KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL, KC_BSPC
+ KC_LSFT, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, MO(1) , KC_RCTL
),
- [1] = LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______, _______
),
- [2] = LAYOUT(
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______, _______
),
- [3] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______, _______
),
};
diff --git a/keyboards/smithrune/iron160/iron160_s/matrix_diagram.md b/keyboards/smithrune/iron160/iron160_s/matrix_diagram.md
new file mode 100644
index 000000000000..3b4d9bc57898
--- /dev/null
+++ b/keyboards/smithrune/iron160/iron160_s/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for SmithRune I160-S
+
+```
+ ┌───────┐
+ 2u Backspace │0D │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │4D │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ┌──┴┐2D │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2D │ │2C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
+│40 │41 │42 │46 │49 │4A │4B │4C │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌────────┐ ┌──────────┐
+│30 │ 2.25u LShift 2.75u RShift │3C │
+└────────┘ └──────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │46 │4A │4B │4C │ Tsangan/WKL/HHKB
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/soda/mango/config.h b/keyboards/soda/mango/config.h
new file mode 100644
index 000000000000..6e9f18cd5d29
--- /dev/null
+++ b/keyboards/soda/mango/config.h
@@ -0,0 +1,14 @@
+// Copyright 2023 devzhaoyou (@gevzhaoyou)
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+#define RGB_MATRIX_LED_COUNT 17
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED //
+
diff --git a/keyboards/soda/mango/info.json b/keyboards/soda/mango/info.json
index a2b3d4b0e09d..1524d99da3fc 100644
--- a/keyboards/soda/mango/info.json
+++ b/keyboards/soda/mango/info.json
@@ -20,7 +20,82 @@
"bootmagic": true,
"extrakey": true,
"mousekey": true,
- "nkro": true
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "ws2812": {
+ "pin": "A2"
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "WS2812",
+ "layout": [
+ {"flags": 1, "matrix": [0, 0], "x": 0, "y": 0},
+ {"flags": 1, "matrix": [0, 1], "x": 75, "y": 0},
+ {"flags": 1, "matrix": [0, 2], "x": 150, "y": 0},
+ {"flags": 1, "matrix": [0, 3], "x": 224, "y": 0},
+ {"flags": 1, "matrix": [1, 0], "x": 0, "y": 16},
+ {"flags": 1, "matrix": [1, 1], "x": 75, "y": 16},
+ {"flags": 1, "matrix": [1, 2], "x": 150, "y": 16},
+ {"flags": 1, "matrix": [2, 0], "x": 0, "y": 32},
+ {"flags": 1, "matrix": [2, 1], "x": 75, "y": 32},
+ {"flags": 1, "matrix": [2, 2], "x": 150, "y": 32},
+ {"flags": 1, "matrix": [2, 3], "x": 224, "y": 24},
+ {"flags": 1, "matrix": [3, 0], "x": 0, "y": 48},
+ {"flags": 1, "matrix": [3, 1], "x": 75, "y": 48},
+ {"flags": 1, "matrix": [3, 2], "x": 150, "y": 48},
+ {"flags": 1, "matrix": [4, 0], "x": 32, "y": 64},
+ {"flags": 1, "matrix": [4, 1], "x": 150, "y": 64},
+ {"flags": 1, "matrix": [4, 2], "x": 224, "y": 64}
+ ]
+ },
+ "indicators": {
+ "caps_lock": "B15",
+ "on_state": 0
},
"community_layouts": ["numpad_5x4"],
"layouts": {
diff --git a/keyboards/soda/pocket/info.json b/keyboards/soda/pocket/info.json
index cef1aec57b06..c1396ab3a194 100644
--- a/keyboards/soda/pocket/info.json
+++ b/keyboards/soda/pocket/info.json
@@ -50,25 +50,25 @@
{"matrix": [2, 3], "x": 3.25, "y": 2.25},
{"matrix": [2, 4], "x": 4.25, "y": 2.25},
{"matrix": [2, 5], "x": 5.25, "y": 2.25},
- {"matrix": [3, 3], "x": 6.25, "y": 2.25, "h": 2},
- {"matrix": [3, 4], "x": 3.25, "y": 3.25},
- {"matrix": [3, 5], "x": 4.25, "y": 3.25},
- {"matrix": [3, 6], "x": 5.25, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.25, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.25, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.25, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.25, "y": 2.25, "h": 2},
{"matrix": [4, 1], "x": 1, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
{"matrix": [4, 5], "x": 5.25, "y": 4.25},
- {"matrix": [5, 0], "x": 6.25, "y": 4.25, "h": 2},
- {"matrix": [5, 1], "x": 0, "y": 5.25},
- {"matrix": [5, 2], "x": 1, "y": 5.25},
- {"matrix": [5, 4], "x": 2, "y": 5.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25},
+ {"matrix": [5, 1], "x": 1, "y": 5.25},
+ {"matrix": [5, 2], "x": 2, "y": 5.25},
- {"matrix": [5, 5], "x": 3.25, "y": 5.25, "w": 2},
- {"matrix": [5, 6], "x": 5.25, "y": 5.25}
+ {"matrix": [5, 4], "x": 3.25, "y": 5.25, "w": 2},
+ {"matrix": [5, 5], "x": 5.25, "y": 5.25},
+ {"matrix": [5, 6], "x": 6.25, "y": 4.25, "h": 2}
]
}
}
diff --git a/keyboards/sofle/keymaps/devdev/rules.mk b/keyboards/sofle/keymaps/devdev/rules.mk
index 92a293196f2f..860c2122da25 100644
--- a/keyboards/sofle/keymaps/devdev/rules.mk
+++ b/keyboards/sofle/keymaps/devdev/rules.mk
@@ -1,6 +1,6 @@
MOUSEKEY_ENABLE = yes
EXTRAKEY_ENABLE = yes
-CONSOLE_ENABLE = yes
+CONSOLE_ENABLE = no
RGBLIGHT_ENABLE = yes
ENCODER_ENABLE = yes
LTO_ENABLE = yes
diff --git a/keyboards/sofle/keymaps/via/config.h b/keyboards/sofle/keymaps/via/config.h
index 439ad2c0c6dc..e53881987da6 100644
--- a/keyboards/sofle/keymaps/via/config.h
+++ b/keyboards/sofle/keymaps/via/config.h
@@ -24,7 +24,7 @@ for more options. */
#if defined(KEYBOARD_sofle_rev1)
// Add RGB underglow and top facing lighting
# define WS2812_DI_PIN D3
-# define RGBLED_NUM 70
+# define RGBLED_NUM 72
# define RGBLED_SPLIT \
{ 36, 36 }
# ifdef RGB_MATRIX_ENABLE
diff --git a/keyboards/spleeb/info.json b/keyboards/spleeb/info.json
index 10cd0e35b8aa..e03faa7c3e96 100644
--- a/keyboards/spleeb/info.json
+++ b/keyboards/spleeb/info.json
@@ -54,6 +54,7 @@
{"matrix": [0, 4], "x": 4, "y": 0.2},
{"matrix": [0, 5], "x": 5, "y": 0.4},
{"matrix": [0, 6], "x": 6, "y": 0.9},
+
{"matrix": [5, 6], "x": 9.75, "y": 0.9},
{"matrix": [5, 5], "x": 10.75, "y": 0.4},
{"matrix": [5, 4], "x": 11.75, "y": 0.2},
@@ -61,6 +62,7 @@
{"matrix": [5, 2], "x": 13.75, "y": 0.2},
{"matrix": [5, 1], "x": 14.75, "y": 0.6},
{"matrix": [5, 0], "x": 15.75, "y": 0.6},
+
{"matrix": [1, 0], "x": 0, "y": 1.6},
{"matrix": [1, 1], "x": 1, "y": 1.6},
{"matrix": [1, 2], "x": 2, "y": 1.2},
@@ -68,6 +70,7 @@
{"matrix": [1, 4], "x": 4, "y": 1.2},
{"matrix": [1, 5], "x": 5, "y": 1.4},
{"matrix": [1, 6], "x": 6, "y": 1.9},
+
{"matrix": [6, 6], "x": 9.75, "y": 1.9},
{"matrix": [6, 5], "x": 10.75, "y": 1.4},
{"matrix": [6, 4], "x": 11.75, "y": 1.2},
@@ -75,6 +78,7 @@
{"matrix": [6, 2], "x": 13.75, "y": 1.2},
{"matrix": [6, 1], "x": 14.75, "y": 1.6},
{"matrix": [6, 0], "x": 15.75, "y": 1.6},
+
{"matrix": [2, 0], "x": 0, "y": 2.6},
{"matrix": [2, 1], "x": 1, "y": 2.6},
{"matrix": [2, 2], "x": 2, "y": 2.2},
@@ -82,6 +86,7 @@
{"matrix": [2, 4], "x": 4, "y": 2.2},
{"matrix": [2, 5], "x": 5, "y": 2.4},
{"matrix": [2, 6], "x": 6, "y": 2.9},
+
{"matrix": [7, 6], "x": 9.75, "y": 2.9},
{"matrix": [7, 5], "x": 10.75, "y": 2.4},
{"matrix": [7, 4], "x": 11.75, "y": 2.2},
@@ -89,26 +94,30 @@
{"matrix": [7, 2], "x": 13.75, "y": 2.2},
{"matrix": [7, 1], "x": 14.75, "y": 2.6},
{"matrix": [7, 0], "x": 15.75, "y": 2.6},
+
{"matrix": [3, 1], "x": 1, "y": 3.6},
{"matrix": [3, 2], "x": 2, "y": 3.2},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3.2},
{"matrix": [3, 5], "x": 5, "y": 3.4},
{"matrix": [3, 6], "x": 7.2, "y": 3.15},
+
{"matrix": [8, 6], "x": 8.6, "y": 3.15},
{"matrix": [8, 5], "x": 10.75, "y": 3.4},
{"matrix": [8, 4], "x": 11.75, "y": 3.2},
{"matrix": [8, 3], "x": 12.75, "y": 3},
{"matrix": [8, 2], "x": 13.75, "y": 3.2},
{"matrix": [8, 1], "x": 14.75, "y": 3.6},
+
{"matrix": [4, 2], "x": 3, "y": 4.45},
{"matrix": [4, 3], "x": 4, "y": 4.45},
- {"matrix": [4, 4], "x": -0.15, "y": 4.65},
- {"h": 1.25, "matrix": [4, 5], "x": 0.85, "y": 4.4},
- {"h": 1.25, "matrix": [4, 6], "x": 1.85, "y": 4.4},
- {"h": 1.25, "matrix": [9, 6], "x": -3.1, "y": 4.6},
- {"h": 1.25, "matrix": [9, 5], "x": -2.1, "y": 4.6},
- {"matrix": [9, 4], "x": -1.1, "y": 4.85},
+ {"matrix": [4, 4], "x": 5, "y": 4.45},
+ {"matrix": [4, 5], "x": 6, "y": 4.3, "h": 1.25},
+ {"matrix": [4, 6], "x": 7, "y": 4.4, "h": 1.25},
+
+ {"matrix": [9, 6], "x": 8.75, "y": 4.4, "h": 1.25},
+ {"matrix": [9, 5], "x": 9.75, "y": 4.3, "h": 1.25},
+ {"matrix": [9, 4], "x": 10.75, "y": 4.45},
{"matrix": [9, 3], "x": 11.75, "y": 4.45},
{"matrix": [9, 2], "x": 12.75, "y": 4.45}
]
diff --git a/keyboards/splitkb/aurora/sofle_v2/config.h b/keyboards/splitkb/aurora/sofle_v2/config.h
new file mode 100644
index 000000000000..7b00c716459a
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 splitkb.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#ifdef OLED_ENABLE
+# define OLED_FONT_H "keyboards/splitkb/aurora/sofle_v2/glcdfont.c"
+#endif
\ No newline at end of file
diff --git a/keyboards/crkbd/keymaps/rpbaptist/glcdfont.c b/keyboards/splitkb/aurora/sofle_v2/glcdfont.c
similarity index 53%
rename from keyboards/crkbd/keymaps/rpbaptist/glcdfont.c
rename to keyboards/splitkb/aurora/sofle_v2/glcdfont.c
index ac1f11dbbe2b..e75b1b4df6a0 100644
--- a/keyboards/crkbd/keymaps/rpbaptist/glcdfont.c
+++ b/keyboards/splitkb/aurora/sofle_v2/glcdfont.c
@@ -1,7 +1,26 @@
+/* Copyright 2023 splitkb.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
#include "progmem.h"
-// Helidox 8x6 font with QMK Firmware Logo
-// Online editor: http://teripom.x0.com/
+// NOTE: This file is a copy of `crkbd/soundmonster/glcdfont.c`
+
+// Corne 8x6 font with QMK Firmware Logo
+// Online editor: https://helixfonteditor.netlify.com/
+// See also: https://github.com/soundmonster/glcdfont_converter
const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -133,99 +152,99 @@ const unsigned char font[] PROGMEM = {
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
-0x38, 0x1C, 0x0C, 0x06, 0x03, 0x03,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x03, 0x03, 0x82, 0x86, 0xCC, 0xF8,
-0xF0, 0xF0, 0x38, 0x1C, 0x0C, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0xC0, 0x70,
-0xF8, 0x0C, 0x04, 0xC6, 0xA2, 0xB3,
-0x9F, 0x87, 0x01, 0x01, 0x1F, 0x66,
-0x66, 0x44, 0x4C, 0x58, 0x70, 0xE0,
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
-0xE0, 0x78, 0x18, 0x8C, 0xC6, 0xE6,
-0xE3, 0xE3, 0xC3, 0x83, 0x03, 0x03,
-0x73, 0x76, 0x76, 0x0C, 0x18, 0xF8,
-0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
-0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
-0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
-0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
-0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
-0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
-0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
-0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x80, 0xC0, 0x40, 0x7F, 0xF3,
-0x60, 0x20, 0x30, 0x30, 0x38, 0x18,
-0x9C, 0xCC, 0x6C, 0x6E, 0x3E, 0x3E,
-0x1F, 0x0F, 0x0F, 0x03, 0x03, 0x01,
-0xC0, 0xFF, 0x3E, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x7F, 0xC1, 0x00,
-0x1D, 0x67, 0xC0, 0x80, 0x01, 0x00,
-0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00,
-0x0C, 0x1A, 0x32, 0xC2, 0x01, 0xC1,
-0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x7E, 0xFF,
-0x80, 0x00, 0x00, 0xC3, 0xC7, 0xC7,
-0x8F, 0x0F, 0x07, 0x03, 0x80, 0xC0,
-0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x07,
-0x0F, 0xFF, 0x7F, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
-0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
-0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
-0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
-0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
-0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
-0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
-0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x01, 0x00, 0x40, 0x60, 0x31,
-0x3B, 0x1E, 0x0C, 0x1E, 0x36, 0x23,
-0x61, 0x60, 0x60, 0x60, 0x60, 0x60,
-0x60, 0x30, 0x1C, 0x3E, 0x3E, 0x3F,
-0x1D, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
-0x0C, 0x18, 0x10, 0x33, 0x3E, 0x38,
-0x6E, 0x67, 0x60, 0x60, 0x60, 0x20,
-0x30, 0x18, 0x08, 0x0F, 0x06, 0x03,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x03, 0x06, 0x0C, 0x19, 0x31, 0x21,
-0x60, 0x60, 0x60, 0x60, 0x61, 0x63,
-0x67, 0x67, 0x33, 0x39, 0x18, 0x0E,
-0x07, 0x03, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 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, 0xE0, 0xF0, 0xF8,
+0xF8, 0x18, 0x00, 0xC0, 0xF0, 0xFC,
+0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00,
+0x00, 0xF8, 0x04, 0x22, 0x52, 0xE2,
+0x42, 0x42, 0x42, 0xE2, 0x52, 0x22,
+0x22, 0x22, 0x42, 0x82, 0x02, 0x02,
+0x22, 0x22, 0x02, 0x04, 0xF8, 0x00,
+0x00, 0xF8, 0x04, 0x02, 0x02, 0x82,
+0x42, 0x22, 0x42, 0x82, 0x02, 0x02,
+0x02, 0x82, 0x42, 0x22, 0x12, 0x22,
+0x42, 0x82, 0x02, 0x04, 0xF8, 0x00,
+0x00, 0xF8, 0xFC, 0xDE, 0xAE, 0x1E,
+0xBE, 0xBE, 0xBE, 0x1E, 0xAE, 0xDE,
+0xDE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE,
+0xDE, 0xDE, 0xFE, 0xFC, 0xF8, 0x00,
+0x00, 0xF8, 0xFC, 0xFE, 0xFE, 0x7E,
+0xBE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x80, 0x40, 0x40, 0x20, 0x20,
+0x10, 0x10, 0x08, 0x08, 0x10, 0x10,
+0x20, 0x20, 0x40, 0x40, 0x80, 0x80,
+0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0,
+0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0,
+0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80,
+0x80, 0x80, 0x40, 0x40, 0x20, 0x20,
+0x10, 0x10, 0x08, 0x08, 0x10, 0x10,
+0x20, 0x20, 0x40, 0x40, 0x80, 0x80,
+0x80, 0x80, 0x40, 0xC0, 0x60, 0xA0,
+0x50, 0xB0, 0x58, 0xA8, 0x50, 0xB0,
+0x60, 0xA0, 0x40, 0xC0, 0x80, 0x80,
+0x00, 0xF8, 0xFC, 0xFE, 0xFF, 0xE0,
+0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
+0x07, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x1F, 0x20, 0x44, 0x4A, 0x47,
+0x42, 0x42, 0x42, 0x47, 0x4A, 0x44,
+0x40, 0x40, 0x40, 0x40, 0x41, 0x42,
+0x44, 0x44, 0x40, 0x20, 0x1F, 0x00,
+0x00, 0x1F, 0x20, 0x40, 0x41, 0x40,
+0x40, 0x40, 0x40, 0x40, 0x41, 0x40,
+0x41, 0x41, 0x4F, 0x48, 0x48, 0x48,
+0x4F, 0x41, 0x41, 0x20, 0x1F, 0x00,
+0x00, 0x1F, 0x3F, 0x7B, 0x75, 0x78,
+0x7D, 0x7D, 0x7D, 0x78, 0x75, 0x7B,
+0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7D,
+0x7B, 0x7B, 0x7F, 0x3F, 0x1F, 0x00,
+0x00, 0x1F, 0x3F, 0x7F, 0x7E, 0x7F,
+0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7F,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E,
+0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C,
+0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88,
+0x88, 0x88, 0x55, 0x55, 0x23, 0x23,
+0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47,
+0x23, 0x23, 0x55, 0x55, 0x88, 0x88,
+0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2,
+0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4,
+0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88,
+0x88, 0x88, 0x5D, 0xD5, 0x6B, 0xB6,
+0x6D, 0xD6, 0xAD, 0xDA, 0x6D, 0xD6,
+0x6B, 0xB6, 0x5D, 0xD5, 0x88, 0x88,
+0x00, 0x03, 0x0F, 0x1F, 0x3F, 0x3F,
+0x3F, 0x3F, 0x1F, 0x1F, 0x3F, 0x3F,
+0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x1F,
+0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7C,
+0x78, 0x78, 0x38, 0x1C, 0x0F, 0x00,
+0x04, 0xF8, 0x00, 0x00, 0xF8, 0x04,
+0x20, 0x1F, 0x00, 0x00, 0x1F, 0x20,
+0xFC, 0xF8, 0x00, 0x00, 0xF8, 0x04,
+0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x20,
+0x04, 0xF8, 0x00, 0x00, 0xF8, 0xFC,
+0x20, 0x1F, 0x00, 0x00, 0x1F, 0x3F,
+0xFC, 0xF8, 0x00, 0x00, 0xF8, 0xFC,
+0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x3F,
+0xFE, 0x7E, 0xBE, 0xDE, 0xEE, 0xDE,
+0xBE, 0x7E, 0xFE, 0xFC, 0xF8, 0x00,
+0x7E, 0x7E, 0x70, 0x77, 0x77, 0x77,
+0x70, 0x7E, 0x7E, 0x3F, 0x1F, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
+0x04, 0x04, 0x08, 0x08, 0x04, 0x04,
+0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
+0x04, 0x04, 0x08, 0x08, 0x04, 0x04,
+0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x01, 0x03, 0x03,
+0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07,
+0x03, 0x03, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x01, 0x03, 0x02,
+0x05, 0x06, 0x0D, 0x0A, 0x05, 0x06,
+0x03, 0x02, 0x01, 0x01, 0x00, 0x00
};
diff --git a/keyboards/splitkb/aurora/sofle_v2/info.json b/keyboards/splitkb/aurora/sofle_v2/info.json
new file mode 100644
index 000000000000..4782d0da8f65
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/info.json
@@ -0,0 +1,16 @@
+{
+ "manufacturer": "splitkb.com",
+ "maintainer": "splitkb",
+ "build": {
+ "lto": true
+ },
+ "development_board": "elite_c",
+ "split": {
+ "enabled": true
+ },
+ "url": "https://splitkb.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "vid": "0x8D1D"
+ }
+}
diff --git a/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/config.h b/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/config.h
new file mode 100644
index 000000000000..a15def3fb913
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2023 splitkb.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define RGBLIGHT_EFFECT_BREATHING
\ No newline at end of file
diff --git a/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/keymap.c b/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/keymap.c
new file mode 100644
index 000000000000..b9383db32511
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/keymap.c
@@ -0,0 +1,69 @@
+/* Copyright 2023 splitkb.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _DEFAULT = 0,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_DEFAULT] = LAYOUT(
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, S(KC_F), S(KC_E), S(KC_D), S(KC_C), S(KC_B), S(KC_A),
+ KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, S(KC_L), S(KC_K), S(KC_J), S(KC_I), S(KC_H), S(KC_G),
+ KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, S(KC_R), S(KC_Q), S(KC_P), S(KC_O), S(KC_N), S(KC_M),
+ KC_S, KC_T, KC_U, KC_V, KC_W, KC_X, KC_Y, S(KC_Y), S(KC_X), S(KC_W), S(KC_V), S(KC_U), S(KC_T), S(KC_S),
+ KC_Z, KC_1, KC_2, KC_3, KC_4, S(KC_4), S(KC_3), S(KC_2), S(KC_1), S(KC_Z)
+
+ )
+};
+
+#ifdef RGBLIGHT_ENABLE
+void keyboard_post_init_user(void) {
+ rgblight_enable_noeeprom(); // enables RGB, without saving settings
+ rgblight_sethsv_noeeprom(HSV_RED); // sets the color to red without saving
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // sets mode to Fast breathing without saving
+}
+#endif
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ // 0 is left-half encoder
+ // 1 is right-half encoder
+ if (index == 0) {
+ tap_code(KC_0);
+ } else if (index == 1) {
+ tap_code(KC_1);
+ }
+
+ if (clockwise) {
+ tap_code16(KC_PLUS);
+ } else {
+ tap_code(KC_MINUS);
+ }
+
+ return false;
+}
+#endif
+
+#ifdef OLED_ENABLE
+bool oled_task_user(void) {
+ // A 128x32 OLED rotated 90 degrees is 5 characters wide and 16 characters tall
+ // This example string should fill that neatly
+ oled_write_P(PSTR("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789!@#$%^&*()[]{}-=_+?"), false);
+ return false;
+}
+#endif
\ No newline at end of file
diff --git a/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/readme.md b/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/readme.md
new file mode 100644
index 000000000000..c429b0246db1
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/readme.md
@@ -0,0 +1,24 @@
+# Aurora Sofle's Debug Keymap
+
+To make debugging your build as easy as possible, we have provided a special debugging keymap. It is not intended to actually type on, it is just here to make sure that your hardware is working correctly.
+
+## Keys
+
+![Keys](https://i.imgur.com/1qRAV6sh.png)
+
+The left side uses lowercase letters, the right side uses uppercase ones.
+
+## Encoders
+
+Encoders output a number of 0 or 1, depending on the installed position.
+These correspond to the index used for custom encoder code: the left half uses index 0, the right half uses index 1.
+
+The number is followed by either a `+` or a `-`, depending on the direction turned.
+
+## LEDs
+
+Both underglow and per-key RGB should be fading between red and off.
+
+## OLEDs
+
+Both the primary and secondary side should be filled with characters.
\ No newline at end of file
diff --git a/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/rules.mk b/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/rules.mk
new file mode 100644
index 000000000000..9c9df9b126e7
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/keymaps/debug/rules.mk
@@ -0,0 +1,8 @@
+# NOTE: These are already enabled by default at the revision level
+#ENCODER_ENABLE = yes
+#OLED_ENABLE = yes
+
+# RGB Matrix is enabled at the revision level,
+# while we use the regular RGB underglow for testing
+RGB_MATRIX_ENABLE = no
+RGBLIGHT_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/splitkb/aurora/sofle_v2/keymaps/default/config.h b/keyboards/splitkb/aurora/sofle_v2/keymaps/default/config.h
new file mode 100644
index 000000000000..353c0ee34952
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/keymaps/default/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2023 splitkb.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_KEYPRESSES
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
\ No newline at end of file
diff --git a/keyboards/splitkb/aurora/sofle_v2/keymaps/default/keymap.json b/keyboards/splitkb/aurora/sofle_v2/keymaps/default/keymap.json
new file mode 100644
index 000000000000..226952964b9c
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/keymaps/default/keymap.json
@@ -0,0 +1,52 @@
+{
+ "keyboard": "splitkb/aurora/sofle_v2/rev1",
+ "keymap": "default",
+ "version": 1,
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_GRV" , "KC_1" , "KC_2" , "KC_3" , "KC_4" , "KC_5" , "KC_6" , "KC_7" , "KC_8" , "KC_9" , "KC_0" , "KC_GRV" ,
+ "KC_ESC" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T" , "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_BSPC" ,
+ "KC_TAB" , "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G" , "KC_H" , "KC_J" , "KC_K" , "KC_L" , "KC_SCLN" , "KC_QUOT" ,
+ "KC_LSFT" , "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "KC_MUTE" , "XXXXXXX" , "KC_N" , "KC_M" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT" ,
+ "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "MO(1)" , "KC_ENT" , "KC_SPC" , "MO(2)" , "KC_RCTL" , "KC_RALT" , "KC_RGUI"
+ ],
+ [
+ "_______" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5" , "KC_F6" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11" ,
+ "KC_GRV" , "KC_1" , "KC_2" , "KC_3" , "KC_4" , "KC_5" , "KC_6" , "KC_7" , "KC_8" , "KC_9" , "KC_0" , "KC_F12" ,
+ "_______" , "KC_EXLM" , "KC_AT" , "KC_HASH" , "KC_DLR" , "KC_PERC" , "KC_CIRC" , "KC_AMPR" , "KC_ASTR" , "KC_LPRN" , "KC_RPRN" , "KC_PIPE" ,
+ "_______" , "KC_EQL" , "KC_MINS" , "KC_PLUS" , "KC_LCBR" , "KC_RCBR" , "_______" , "_______" , "KC_LBRC" , "KC_RBRC" , "KC_SCLN" , "KC_COLN" , "KC_BSLS" , "_______" ,
+ "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "MO(3)" , "_______" , "_______" , "_______"
+ ],
+ [
+ "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" ,
+ "_______" , "KC_INS" , "KC_PSCR" , "KC_APP" , "XXXXXXX" , "XXXXXXX" , "KC_PGUP" , "C(KC_LEFT)", "KC_UP" , "C(KC_RGHT)", "C(KC_BSPC)", "KC_BSPC" ,
+ "_______" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "XXXXXXX" , "KC_CAPS" , "KC_PGDN" , "KC_LEFT" , "KC_DOWN" , "KC_RGHT" , "KC_DEL" , "KC_BSPC" ,
+ "_______" , "C(KC_Z)" , "C(KC_X)" , "C(KC_C)" , "C(KC_V)" , "XXXXXXX" , "_______" , "_______" , "XXXXXXX" , "KC_HOME" , "XXXXXXX" , "KC_END" , "XXXXXXX" , "_______" ,
+ "_______" , "_______" , "_______" , "MO(3)" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______"
+ ],
+ [
+ "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" ,
+ "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" ,
+ "XXXXXXX" , "RGB_TOG" , "RGB_HUI" , "RGB_SAI" , "RGB_VAI" , "XXXXXXX" , "XXXXXXX" , "KC_VOLD" , "KC_MUTE" , "KC_VOLU" , "XXXXXXX" , "XXXXXXX" ,
+ "XXXXXXX" , "RGB_MOD" , "RGB_HUD" , "RGB_SAD" , "RGB_VAD" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "XXXXXXX" , "KC_MPRV" , "KC_MPLY" , "KC_MNXT" , "XXXXXXX" , "XXXXXXX" ,
+ "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______"
+ ]
+ ],
+ "config": {
+ "features": {
+ "oled": true,
+ "rgb_matrix": true,
+ "rgblight": false
+ },
+ "encoder": {
+ "enabled": true
+ },
+ "rgblight": {
+ "hue_steps": 8,
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "sleep": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/splitkb/aurora/sofle_v2/keymaps/default/readme.md b/keyboards/splitkb/aurora/sofle_v2/keymaps/default/readme.md
new file mode 100644
index 000000000000..6ff79a4f9936
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/keymaps/default/readme.md
@@ -0,0 +1,88 @@
+# Aurora Sofle v2's Default Keymap
+_This keymap is a copy of the [Sofle default keymap](https://github.com/qmk/qmk_firmware/tree/master/keyboards/sofle/keymaps/default), with some modifications._
+
+A simple default keymap for the Aurora Sofle v2
+===============================================
+
+Keymaps in general are quite personal, so it is difficult to come up with a default that will suit every user. We hope this keymap serves as a good starting point for your own - although it should be fairly usable out-of-the-box.
+
+What do all these layers do?
+----------------------------
+
+### Layer 0: Base layer
+
+![Layer 0](https://i.imgur.com/uk6ckvfh.png)
+
+This is where your basic letters live.
+
+The homing thumb fingers are used to access the different layers.
+
+* The homing left thumb finger gives access to the Symbols (or lower) layer
+* The homing right thumb finger gives access to the Navigation (or raise) layer
+* Pressing both homing thumb fingers gives access to the Adjust layer
+
+### Layer 1: Lower
+
+![Layer 1](https://i.imgur.com/6t0ErtEh.png)
+
+The Lower layer gives access to the F keys on the top row row, number keys on the second row, and shifted number keys on the home row. The bottom role contains the remaining symbol keys and some shifted symbol keys.
+
+### Layer 2: Raise
+
+![Layer 2](https://i.imgur.com/URCBKfqh.png)
+
+The Raise layer gives access the arrow keys on the right hand, in addition to some other navigation keys. The left hand provides easy acces to Undo/Cut/Copy/Paste.
+
+### Layer 3: Adjust
+
+![Layer 3](https://i.imgur.com/b4tacMeh.png)
+
+The Adjust layer exposes RGB adjustment keys on the left hand, and media controls on the right hand.
+
+Where is the keymap.c?
+----------------------
+
+The keymap.c file is not published to the repository. It is generated from `keymap.json` by the build system.
+
+This avoids duplicating information and allow users to edit their keymap from the QMK Configurator web interface.
+
+How do I edit and update the keymap?
+------------------------------------
+
+The `keymap.json` file is generated from the QMK Configurator interface and formatted for better readability in the context of the Ferris keyboard.
+
+To edit it, you may:
+* Edit it directly from a text editor.
+* Edit it from the QMK Configurator.
+
+If you decide to use the latter workflow, here are the steps to follow:
+
+* From the [QMK Configurator](https://config.qmk.fm/#/splitkb/aurora/sofle/rev1/LAYOUT), hit the "import QMK keymap json file" button (it has a drawing with an up arrow on it).
+* Browse to the location of your keymap (for example, `/keyboards/splitkb/aurora/sofle_v2/keymaps/default/keymap.json`)
+* Perform any modification to the keymap in the web UI
+* Export the keymap to your downloads folder, by hitting the "Export QMK keymap json file" button (it has a drawing with a down arrow on it)
+* Replace your original keymap with the one you just downloaded
+
+_**Note:** At the time of writing (the 24th of October 2022), not every feature used in the default keymap is supported by the QMK Configurator. You cannot yet upload the default `keymap.json` due to a file format mismatch - use the "Load Default" button to load the default keymap instead. Additionally, custom configuration options are still being worked on: if your keymap depends on them, please compile your firmware offline for now._
+
+I want to do more than the JSON format supports!
+-------------------------------------------------
+
+While the `json` format is easy to use, it does lack certain functionality - most notably custom OLED or encoder behaviour.
+
+To add this, you need to convert it to the `c` format. Do keep in mind that this is generally a one-way operation.
+
+First, from the root of your qmk repo, move to your keymap folder
+
+```bash
+cd ./keyboards/splitkb/aurora/sofle_v2/keymaps/my_personal_keymap
+```
+
+Next, convert your `keymap.json` to a `keymap.c`
+
+```bash
+qmk json2c -o keymap.c keymap.json
+```
+
+You can add custom C code to the newly generated `keymap.c` file. Do note that you have to use **either** a C file **or** a JSON file - you cannot do both!
+**If a JSON file is present, the C file is ignored.**
\ No newline at end of file
diff --git a/keyboards/splitkb/aurora/sofle_v2/readme.md b/keyboards/splitkb/aurora/sofle_v2/readme.md
new file mode 100644
index 000000000000..13f1d84bbbb3
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/readme.md
@@ -0,0 +1,48 @@
+![Aurora Sofle v2](https://i.imgur.com/8MlWV7h.jpg)
+
+# Aurora Sofle v2
+The Aurora Sofle v2 is a redesign by splitkb.com of the popular Sofle v2 by Josef Adamcik.
+
+Keyboard Maintainer: [splitkb.com](https://github.com/splitkb)
+Hardware Supported: Pro Micro 5V/16MHz and compatible.
+Hardware Availability: [splitkb.com](https://splitkb.com).
+
+Make example for this keyboard (after setting up your build environment):
+
+ make splitkb/aurora/sofle_v2/rev1:default
+
+Example of flashing this keyboard:
+
+ make splitkb/aurora/sofle_v2/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
+You can enter the bootloader in 3 ways:
+
+* **Physical reset button**: Briefly press the button on the side of the PCB, next to the TRRS socket.
+* **Bootmagic reset**: Hold down the bootmagic key and plug in the keyboard. For the left half, this is the top-left button. For the right half, this is the top-right button.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.
+
+# Assembly
+A build guide for the entire Aurora series is available at [https://splitkb.com/aurora-build](https://splitkb.com/aurora-build).
+
+# Features
+The Aurora Sofle supports the following features:
+
+- Support for MX or Kailh Choc (v1 sold at splitkb.com, not v2) switches;
+- Top mounted controllers for a lower profile;
+- Up to two 128×32 pixel OLED displays;
+- Up to one EC11 rotary encoder per half in one of three possible positions;
+- Per-key RGB backlight by individual RGB LEDs;
+- Underglow by individual RGB LEDs;
+- Support for a power switch for wireless controllers;
+- Support for the splitkb.com tenting puck.
+
+# What is the Aurora Series?
+
+The Aurora series were designed as a homage to open source keyboard kits that have carved their space into the community. Kits that provided something new and unique, kits that resonated with the community and that have both received and have given a lot of love in return.
+
+With the Aurora series, we aim to make these kits available to the community in a way that both honors the original, while also offering the best possible feature set and a consistent, well-documented build experience.
+
+For each kit sold, we give back to the community by donating €1 across [the firmware projects we support](https://opencollective.com/splitkb). This way we support open source projects and benefit everyone using keyboards, whether they use our kits or their own.
\ No newline at end of file
diff --git a/keyboards/splitkb/aurora/sofle_v2/rev1/config.h b/keyboards/splitkb/aurora/sofle_v2/rev1/config.h
new file mode 100644
index 000000000000..1896af3cb5c2
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/rev1/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2023 splitkb.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define SPLIT_HAND_PIN F4
+
+#define OLED_DISPLAY_128X32
+#define SPLIT_OLED_ENABLE
+
+#define RGB_MATRIX_LED_COUNT 70
\ No newline at end of file
diff --git a/keyboards/splitkb/aurora/sofle_v2/rev1/info.json b/keyboards/splitkb/aurora/sofle_v2/rev1/info.json
new file mode 100644
index 000000000000..ab0d9c514c02
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/rev1/info.json
@@ -0,0 +1,196 @@
+{
+ "keyboard_name": "Aurora Sofle v2 rev1",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {"pin_a": "B2", "pin_b": "B6"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "oled": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
+ "rows": ["F5", "B1", "F7", "F6", "B3"]
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "layout": [
+ {"x": 67, "y": 18, "flags": 2},
+ {"x": 24, "y": 16, "flags": 2},
+ {"x": 5, "y": 22, "flags": 2},
+ {"x": 5, "y": 52, "flags": 2},
+ {"x": 41, "y": 60, "flags": 2},
+ {"x": 63, "y": 59, "flags": 2},
+ {"matrix": [0, 0], "x": 72, "y": 4, "flags": 4},
+ {"matrix": [0, 1], "x": 58, "y": 2, "flags": 4},
+ {"matrix": [0, 2], "x": 43, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 29, "y": 2, "flags": 4},
+ {"matrix": [0, 4], "x": 14, "y": 5, "flags": 4},
+ {"matrix": [0, 5], "x": 0, "y": 7, "flags": 4},
+ {"matrix": [1, 0], "x": 72, "y": 18, "flags": 4},
+ {"matrix": [1, 1], "x": 58, "y": 16, "flags": 4},
+ {"matrix": [1, 2], "x": 43, "y": 15, "flags": 4},
+ {"matrix": [1, 3], "x": 29, "y": 16, "flags": 4},
+ {"matrix": [1, 4], "x": 14, "y": 20, "flags": 4},
+ {"matrix": [1, 5], "x": 0, "y": 22, "flags": 4},
+ {"matrix": [2, 0], "x": 72, "y": 33, "flags": 4},
+ {"matrix": [2, 1], "x": 58, "y": 31, "flags": 4},
+ {"matrix": [2, 2], "x": 43, "y": 29, "flags": 4},
+ {"matrix": [2, 3], "x": 29, "y": 31, "flags": 4},
+ {"matrix": [2, 4], "x": 14, "y": 35, "flags": 4},
+ {"matrix": [2, 5], "x": 0, "y": 37, "flags": 4},
+ {"matrix": [3, 0], "x": 72, "y": 48, "flags": 4},
+ {"matrix": [3, 1], "x": 58, "y": 46, "flags": 4},
+ {"matrix": [3, 2], "x": 43, "y": 44, "flags": 4},
+ {"matrix": [3, 3], "x": 29, "y": 46, "flags": 4},
+ {"matrix": [3, 4], "x": 14, "y": 49, "flags": 4},
+ {"matrix": [3, 5], "x": 0, "y": 51, "flags": 4},
+ {"matrix": [4, 1], "x": 87, "y": 62, "flags": 4},
+ {"matrix": [4, 2], "x": 65, "y": 62, "flags": 4},
+ {"matrix": [4, 3], "x": 51, "y": 61, "flags": 4},
+ {"matrix": [4, 4], "x": 36, "y": 60, "flags": 4},
+ {"matrix": [4, 5], "x": 22, "y": 64, "flags": 4},
+ {"x": 157, "y": 22, "flags": 2},
+ {"x": 190, "y": 15, "flags": 2},
+ {"x": 219, "y": 18, "flags": 2},
+ {"x": 219, "y": 55, "flags": 2},
+ {"x": 183, "y": 60, "flags": 2},
+ {"x": 149, "y": 62, "flags": 2},
+ {"matrix": [5, 0], "x": 152, "y": 7, "flags": 4},
+ {"matrix": [5, 1], "x": 166, "y": 5, "flags": 4},
+ {"matrix": [5, 2], "x": 181, "y": 2, "flags": 4},
+ {"matrix": [5, 3], "x": 195, "y": 0, "flags": 4},
+ {"matrix": [5, 4], "x": 210, "y": 2, "flags": 4},
+ {"matrix": [5, 5], "x": 224, "y": 4, "flags": 4},
+ {"matrix": [6, 0], "x": 152, "y": 22, "flags": 4},
+ {"matrix": [6, 1], "x": 166, "y": 20, "flags": 4},
+ {"matrix": [6, 2], "x": 181, "y": 16, "flags": 4},
+ {"matrix": [6, 3], "x": 195, "y": 15, "flags": 4},
+ {"matrix": [6, 4], "x": 210, "y": 16, "flags": 4},
+ {"matrix": [6, 5], "x": 224, "y": 18, "flags": 4},
+ {"matrix": [7, 0], "x": 152, "y": 37, "flags": 4},
+ {"matrix": [7, 1], "x": 166, "y": 35, "flags": 4},
+ {"matrix": [7, 2], "x": 181, "y": 31, "flags": 4},
+ {"matrix": [7, 3], "x": 195, "y": 29, "flags": 4},
+ {"matrix": [7, 4], "x": 210, "y": 31, "flags": 4},
+ {"matrix": [7, 5], "x": 224, "y": 33, "flags": 4},
+ {"matrix": [8, 0], "x": 152, "y": 49, "flags": 4},
+ {"matrix": [8, 1], "x": 166, "y": 46, "flags": 4},
+ {"matrix": [8, 2], "x": 181, "y": 44, "flags": 4},
+ {"matrix": [8, 3], "x": 195, "y": 46, "flags": 4},
+ {"matrix": [8, 4], "x": 210, "y": 38, "flags": 4},
+ {"matrix": [8, 5], "x": 224, "y": 55, "flags": 4},
+ {"matrix": [9, 1], "x": 137, "y": 62, "flags": 4},
+ {"matrix": [9, 2], "x": 159, "y": 62, "flags": 4},
+ {"matrix": [9, 3], "x": 173, "y": 61, "flags": 4},
+ {"matrix": [9, 4], "x": 188, "y": 60, "flags": 4},
+ {"matrix": [9, 5], "x": 202, "y": 64, "flags": 4}
+ ],
+ "max_brightness": 128,
+ "split_count": [35, 35]
+ },
+ "rgblight": {
+ "led_count": 70,
+ "max_brightness": 128,
+ "split": true,
+ "split_count": [35, 35]
+ },
+ "split": {
+ "bootmagic": {
+ "matrix": [5, 0]
+ },
+ "encoder": {
+ "right": {
+ "rotary": [
+ {"pin_a": "B2", "pin_b": "B6"}
+ ]
+ }
+ },
+ "main": "matrix_grid",
+ "matrix_pins": {
+ "right": {
+ "cols": ["D7", "E6", "B4", "B5", "D4", "C6"],
+ "rows": ["B3", "B1", "F7", "F6", "F5"]
+ }
+ },
+ "soft_serial_pin": "D2"
+ },
+ "usb": {
+ "pid": "0xEC32"
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "L06", "matrix": [0, 5], "x": 0, "y": 0.5},
+ {"label": "L05", "matrix": [0, 4], "x": 1, "y": 0.375},
+ {"label": "L04", "matrix": [0, 3], "x": 2, "y": 0.125},
+ {"label": "L03", "matrix": [0, 2], "x": 3, "y": 0},
+ {"label": "L02", "matrix": [0, 1], "x": 4, "y": 0.125},
+ {"label": "L01", "matrix": [0, 0], "x": 5, "y": 0.25},
+ {"label": "R01", "matrix": [5, 0], "x": 10.5, "y": 0.25},
+ {"label": "R02", "matrix": [5, 1], "x": 11.5, "y": 0.125},
+ {"label": "R03", "matrix": [5, 2], "x": 12.5, "y": 0},
+ {"label": "R04", "matrix": [5, 3], "x": 13.5, "y": 0.125},
+ {"label": "R05", "matrix": [5, 4], "x": 14.5, "y": 0.375},
+ {"label": "R06", "matrix": [5, 5], "x": 15.5, "y": 0.5},
+ {"label": "L12", "matrix": [1, 5], "x": 0, "y": 1.5},
+ {"label": "L11", "matrix": [1, 4], "x": 1, "y": 1.375},
+ {"label": "L10", "matrix": [1, 3], "x": 2, "y": 1.125},
+ {"label": "L09", "matrix": [1, 2], "x": 3, "y": 1},
+ {"label": "L08", "matrix": [1, 1], "x": 4, "y": 1.125},
+ {"label": "L07", "matrix": [1, 0], "x": 5, "y": 1.25},
+ {"label": "R07", "matrix": [6, 0], "x": 10.5, "y": 1.25},
+ {"label": "R08", "matrix": [6, 1], "x": 11.5, "y": 1.125},
+ {"label": "R09", "matrix": [6, 2], "x": 12.5, "y": 1},
+ {"label": "R10", "matrix": [6, 3], "x": 13.5, "y": 1.125},
+ {"label": "R11", "matrix": [6, 4], "x": 14.5, "y": 1.375},
+ {"label": "R12", "matrix": [6, 5], "x": 15.5, "y": 1.5},
+ {"label": "L18", "matrix": [2, 5], "x": 0, "y": 2.5},
+ {"label": "L17", "matrix": [2, 4], "x": 1, "y": 2.375},
+ {"label": "L16", "matrix": [2, 3], "x": 2, "y": 2.125},
+ {"label": "L15", "matrix": [2, 2], "x": 3, "y": 2},
+ {"label": "L14", "matrix": [2, 1], "x": 4, "y": 2.125},
+ {"label": "L13", "matrix": [2, 0], "x": 5, "y": 2.25},
+ {"label": "R13", "matrix": [7, 0], "x": 10.5, "y": 2.25},
+ {"label": "R14", "matrix": [7, 1], "x": 11.5, "y": 2.125},
+ {"label": "R15", "matrix": [7, 2], "x": 12.5, "y": 2},
+ {"label": "R16", "matrix": [7, 3], "x": 13.5, "y": 2.125},
+ {"label": "R17", "matrix": [7, 4], "x": 14.5, "y": 2.375},
+ {"label": "R18", "matrix": [7, 5], "x": 15.5, "y": 2.5},
+ {"label": "L24", "matrix": [3, 5], "x": 0, "y": 3.5},
+ {"label": "L23", "matrix": [3, 4], "x": 1, "y": 3.375},
+ {"label": "L22", "matrix": [3, 3], "x": 2, "y": 3.125},
+ {"label": "L21", "matrix": [3, 2], "x": 3, "y": 3},
+ {"label": "L20", "matrix": [3, 1], "x": 4, "y": 3.125},
+ {"label": "L19", "matrix": [3, 0], "x": 5, "y": 3.25},
+ {"label": "L25", "matrix": [4, 0], "x": 6, "y": 2.75},
+ {"label": "R25", "matrix": [9, 0], "x": 9.5, "y": 2.75},
+ {"label": "R19", "matrix": [8, 0], "x": 10.5, "y": 3.25},
+ {"label": "R20", "matrix": [8, 1], "x": 11.5, "y": 3.125},
+ {"label": "R21", "matrix": [8, 2], "x": 12.5, "y": 3},
+ {"label": "R22", "matrix": [8, 3], "x": 13.5, "y": 3.125},
+ {"label": "R23", "matrix": [8, 4], "x": 14.5, "y": 3.375},
+ {"label": "R24", "matrix": [8, 5], "x": 15.5, "y": 3.5},
+ {"label": "L30", "matrix": [4, 5], "x": 1.5, "y": 4.375},
+ {"label": "L29", "matrix": [4, 4], "x": 2.5, "y": 4.125},
+ {"label": "L28", "matrix": [4, 3], "x": 3.5, "y": 4.15},
+ {"label": "L27", "matrix": [4, 2], "x": 4.5, "y": 4.25},
+ {"label": "L26", "matrix": [4, 1], "x": 6, "y": 4.25, "h": 1.5},
+ {"label": "R26", "matrix": [9, 1], "x": 9.5, "y": 4.25, "h": 1.5},
+ {"label": "R27", "matrix": [9, 2], "x": 11, "y": 4.25},
+ {"label": "R28", "matrix": [9, 3], "x": 12, "y": 4.15},
+ {"label": "R29", "matrix": [9, 4], "x": 13, "y": 4.125},
+ {"label": "R30", "matrix": [9, 5], "x": 14, "y": 4.375}
+ ]
+ }
+ }
+}
diff --git a/keyboards/splitkb/aurora/sofle_v2/rev1/rev1.c b/keyboards/splitkb/aurora/sofle_v2/rev1/rev1.c
new file mode 100644
index 000000000000..b0de2b93f23f
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/rev1/rev1.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 splitkb.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+#ifdef SWAP_HANDS_ENABLE
+// clang-format off
+ __attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
+ {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}},
+ {{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}}
+ };
+// clang-format on
+# ifdef ENCODER_MAP_ENABLE
+ const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1,0};
+# endif
+#endif
diff --git a/keyboards/splitkb/aurora/sofle_v2/rev1/rules.mk b/keyboards/splitkb/aurora/sofle_v2/rev1/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/splitkb/aurora/sofle_v2/rules.mk b/keyboards/splitkb/aurora/sofle_v2/rules.mk
new file mode 100644
index 000000000000..4a50c4dbb13d
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = splitkb/aurora/sofle_v2/rev1
\ No newline at end of file
diff --git a/keyboards/splitkb/aurora/sofle_v2/sofle_v2.c b/keyboards/splitkb/aurora/sofle_v2/sofle_v2.c
new file mode 100644
index 000000000000..f5cb0573ce4f
--- /dev/null
+++ b/keyboards/splitkb/aurora/sofle_v2/sofle_v2.c
@@ -0,0 +1,308 @@
+/* Copyright 2023 splitkb.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+// The first four layers gets a name for readability, which is then used in the OLED below.
+enum layers {
+ _DEFAULT,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+#ifdef OLED_ENABLE
+// NOTE: Most of the OLED code was originally written by Soundmonster for the Corne,
+// and has been copied directly from `crkbd/soundmonster/keymap.c`
+
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ return OLED_ROTATION_270;
+}
+
+void render_space(void) {
+ oled_write_P(PSTR(" "), false);
+}
+
+void render_mod_status_gui_alt(uint8_t modifiers) {
+ static const char PROGMEM gui_off_1[] = {0x85, 0x86, 0};
+ static const char PROGMEM gui_off_2[] = {0xa5, 0xa6, 0};
+ static const char PROGMEM gui_on_1[] = {0x8d, 0x8e, 0};
+ static const char PROGMEM gui_on_2[] = {0xad, 0xae, 0};
+
+ static const char PROGMEM alt_off_1[] = {0x87, 0x88, 0};
+ static const char PROGMEM alt_off_2[] = {0xa7, 0xa8, 0};
+ static const char PROGMEM alt_on_1[] = {0x8f, 0x90, 0};
+ static const char PROGMEM alt_on_2[] = {0xaf, 0xb0, 0};
+
+ // fillers between the modifier icons bleed into the icon frames
+ static const char PROGMEM off_off_1[] = {0xc5, 0};
+ static const char PROGMEM off_off_2[] = {0xc6, 0};
+ static const char PROGMEM on_off_1[] = {0xc7, 0};
+ static const char PROGMEM on_off_2[] = {0xc8, 0};
+ static const char PROGMEM off_on_1[] = {0xc9, 0};
+ static const char PROGMEM off_on_2[] = {0xca, 0};
+ static const char PROGMEM on_on_1[] = {0xcb, 0};
+ static const char PROGMEM on_on_2[] = {0xcc, 0};
+
+ if(modifiers & MOD_MASK_GUI) {
+ oled_write_P(gui_on_1, false);
+ } else {
+ oled_write_P(gui_off_1, false);
+ }
+
+ if ((modifiers & MOD_MASK_GUI) && (modifiers & MOD_MASK_ALT)) {
+ oled_write_P(on_on_1, false);
+ } else if(modifiers & MOD_MASK_GUI) {
+ oled_write_P(on_off_1, false);
+ } else if(modifiers & MOD_MASK_ALT) {
+ oled_write_P(off_on_1, false);
+ } else {
+ oled_write_P(off_off_1, false);
+ }
+
+ if(modifiers & MOD_MASK_ALT) {
+ oled_write_P(alt_on_1, false);
+ } else {
+ oled_write_P(alt_off_1, false);
+ }
+
+ if(modifiers & MOD_MASK_GUI) {
+ oled_write_P(gui_on_2, false);
+ } else {
+ oled_write_P(gui_off_2, false);
+ }
+
+ if (modifiers & MOD_MASK_GUI & MOD_MASK_ALT) {
+ oled_write_P(on_on_2, false);
+ } else if(modifiers & MOD_MASK_GUI) {
+ oled_write_P(on_off_2, false);
+ } else if(modifiers & MOD_MASK_ALT) {
+ oled_write_P(off_on_2, false);
+ } else {
+ oled_write_P(off_off_2, false);
+ }
+
+ if(modifiers & MOD_MASK_ALT) {
+ oled_write_P(alt_on_2, false);
+ } else {
+ oled_write_P(alt_off_2, false);
+ }
+}
+
+void render_mod_status_ctrl_shift(uint8_t modifiers) {
+ static const char PROGMEM ctrl_off_1[] = {0x89, 0x8a, 0};
+ static const char PROGMEM ctrl_off_2[] = {0xa9, 0xaa, 0};
+ static const char PROGMEM ctrl_on_1[] = {0x91, 0x92, 0};
+ static const char PROGMEM ctrl_on_2[] = {0xb1, 0xb2, 0};
+
+ static const char PROGMEM shift_off_1[] = {0x8b, 0x8c, 0};
+ static const char PROGMEM shift_off_2[] = {0xab, 0xac, 0};
+ static const char PROGMEM shift_on_1[] = {0xcd, 0xce, 0};
+ static const char PROGMEM shift_on_2[] = {0xcf, 0xd0, 0};
+
+ // fillers between the modifier icons bleed into the icon frames
+ static const char PROGMEM off_off_1[] = {0xc5, 0};
+ static const char PROGMEM off_off_2[] = {0xc6, 0};
+ static const char PROGMEM on_off_1[] = {0xc7, 0};
+ static const char PROGMEM on_off_2[] = {0xc8, 0};
+ static const char PROGMEM off_on_1[] = {0xc9, 0};
+ static const char PROGMEM off_on_2[] = {0xca, 0};
+ static const char PROGMEM on_on_1[] = {0xcb, 0};
+ static const char PROGMEM on_on_2[] = {0xcc, 0};
+
+ if(modifiers & MOD_MASK_CTRL) {
+ oled_write_P(ctrl_on_1, false);
+ } else {
+ oled_write_P(ctrl_off_1, false);
+ }
+
+ if ((modifiers & MOD_MASK_CTRL) && (modifiers & MOD_MASK_SHIFT)) {
+ oled_write_P(on_on_1, false);
+ } else if(modifiers & MOD_MASK_CTRL) {
+ oled_write_P(on_off_1, false);
+ } else if(modifiers & MOD_MASK_SHIFT) {
+ oled_write_P(off_on_1, false);
+ } else {
+ oled_write_P(off_off_1, false);
+ }
+
+ if(modifiers & MOD_MASK_SHIFT) {
+ oled_write_P(shift_on_1, false);
+ } else {
+ oled_write_P(shift_off_1, false);
+ }
+
+ if(modifiers & MOD_MASK_CTRL) {
+ oled_write_P(ctrl_on_2, false);
+ } else {
+ oled_write_P(ctrl_off_2, false);
+ }
+
+ if (modifiers & MOD_MASK_CTRL & MOD_MASK_SHIFT) {
+ oled_write_P(on_on_2, false);
+ } else if(modifiers & MOD_MASK_CTRL) {
+ oled_write_P(on_off_2, false);
+ } else if(modifiers & MOD_MASK_SHIFT) {
+ oled_write_P(off_on_2, false);
+ } else {
+ oled_write_P(off_off_2, false);
+ }
+
+ if(modifiers & MOD_MASK_SHIFT) {
+ oled_write_P(shift_on_2, false);
+ } else {
+ oled_write_P(shift_off_2, false);
+ }
+}
+
+void render_logo(void) {
+ static const char PROGMEM aurora_logo[] = {
+ 0x00, 0x00, 0x00, 0xe0, 0x00, 0xf8, 0xc0, 0xf8, 0xe0, 0xc0, 0xfc, 0x00, 0x7e, 0x18, 0x00, 0x80,
+ 0x00, 0x02, 0x80, 0xf0, 0x00, 0xc0, 0x80, 0xf8, 0xc0, 0xe0, 0x70, 0x60, 0x3c, 0x38, 0x3c, 0x1c,
+ 0x00, 0x3f, 0x0c, 0x0f, 0x1f, 0x03, 0x07, 0x01, 0xc3, 0x00, 0xe0, 0x80, 0x00, 0xe0, 0x80, 0xf8,
+ 0x80, 0xc0, 0xf7, 0xc7, 0x6f, 0x7b, 0x39, 0x30, 0x00, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0xc2, 0xe0,
+ 0x00, 0x40, 0x38, 0x30, 0x38, 0x1e, 0x18, 0x1e, 0x0f, 0x0c, 0x07, 0x07, 0x07, 0x03, 0x03, 0x21,
+ 0x21, 0x31, 0x30, 0x18, 0x18, 0x1c, 0x08, 0x0c, 0x0e, 0x07, 0x06, 0x07, 0x03, 0xc3, 0x03, 0x01,
+ 0x4c, 0xcc, 0xc2, 0xc2, 0x41, 0x49, 0x09, 0x2b, 0x2a, 0x6a, 0x6e, 0x24, 0x24, 0x04, 0x92, 0x92,
+ 0xb1, 0xf1, 0xf1, 0xf2, 0xe6, 0xa4, 0xa4, 0x04, 0x04, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28
+ };
+ oled_write_raw_P(aurora_logo, sizeof(aurora_logo));
+ oled_set_cursor(0, 4);
+}
+
+void render_logo_text(void) {
+ oled_write_P(PSTR("sofle"), false);
+}
+
+void render_kb_LED_state(void) {
+ // Host Keyboard LED Status
+ led_t led_usb_state = host_keyboard_led_state();
+ oled_write_P(led_usb_state.num_lock ? PSTR("N ") : PSTR(" "), false);
+ oled_write_P(led_usb_state.caps_lock ? PSTR("C ") : PSTR(" "), false);
+ oled_write_P(led_usb_state.scroll_lock ? PSTR("S ") : PSTR(" "), false);
+}
+
+void render_layer_state(void) {
+ static const char PROGMEM default_layer[] = {
+ 0x20, 0x94, 0x95, 0x96, 0x20,
+ 0x20, 0xb4, 0xb5, 0xb6, 0x20,
+ 0x20, 0xd4, 0xd5, 0xd6, 0x20, 0};
+ static const char PROGMEM raise_layer[] = {
+ 0x20, 0x97, 0x98, 0x99, 0x20,
+ 0x20, 0xb7, 0xb8, 0xb9, 0x20,
+ 0x20, 0xd7, 0xd8, 0xd9, 0x20, 0};
+ static const char PROGMEM lower_layer[] = {
+ 0x20, 0x9a, 0x9b, 0x9c, 0x20,
+ 0x20, 0xba, 0xbb, 0xbc, 0x20,
+ 0x20, 0xda, 0xdb, 0xdc, 0x20, 0};
+ static const char PROGMEM adjust_layer[] = {
+ 0x20, 0x9d, 0x9e, 0x9f, 0x20,
+ 0x20, 0xbd, 0xbe, 0xbf, 0x20,
+ 0x20, 0xdd, 0xde, 0xdf, 0x20, 0};
+ if(layer_state_is(_LOWER)) {
+ oled_write_P(lower_layer, false);
+ } else if(layer_state_is(_RAISE)) {
+ oled_write_P(raise_layer, false);
+ } else if(layer_state_is(_DEFAULT)) {
+ oled_write_P(default_layer, false);
+ } else {
+ oled_write_P(adjust_layer, false);
+ }
+}
+
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ if (is_keyboard_master()) {
+ // Renders the current keyboard state (layers and mods)
+ render_logo();
+ render_logo_text();
+ render_space();
+ render_layer_state();
+ render_space();
+ render_mod_status_gui_alt(get_mods()|get_oneshot_mods());
+ render_mod_status_ctrl_shift(get_mods()|get_oneshot_mods());
+ render_kb_LED_state();
+ } else {
+ // clang-format off
+ static const char PROGMEM aurora_art[] = {
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1c, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x40,
+ 0xe0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x80,
+ 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x80, 0x00, 0xf0, 0x00, 0x00, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x81, 0x00, 0xc0, 0x00, 0xfe, 0x00, 0xfc, 0x00, 0xff, 0x20, 0xff, 0xf0, 0x0f, 0xf0, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0xf8, 0x00, 0x00, 0xf8,
+ 0xff, 0x10, 0xff, 0x84, 0xff, 0x60, 0xff, 0x36, 0xff, 0x0f, 0xff, 0x3f, 0x00, 0x5f, 0x00, 0x05,
+ 0x80, 0x00, 0x80, 0x00, 0xc0, 0x38, 0x00, 0xec, 0xf0, 0x00, 0xfb, 0x80, 0xff, 0xf0, 0xff, 0xef,
+ 0xff, 0xe8, 0xff, 0x03, 0xff, 0x0c, 0xff, 0x00, 0xff, 0x00, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x80,
+ 0xff, 0x20, 0xff, 0xd0, 0xff, 0xe0, 0xfe, 0xf8, 0xff, 0xfc, 0xff, 0xff, 0x0f, 0xff, 0x01, 0x3f,
+ 0xff, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x03, 0x00, 0xfe, 0x80, 0xfe, 0x00, 0xc0, 0xff, 0xc4, 0xfb,
+ 0xff, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x07, 0xff, 0x03, 0x3f, 0x00, 0x0f, 0xc0, 0x00,
+ 0x00, 0x00, 0xb8, 0x00, 0xff, 0x40, 0xbe, 0xf0, 0xff, 0xf1, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0x1f, 0xff, 0x67, 0x00, 0xef, 0x00, 0x1f, 0x00, 0x00, 0x07, 0x00, 0x00, 0xe0, 0x00, 0xff, 0xf0,
+ 0xff, 0x88, 0xff, 0xc4, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x7f, 0x0f, 0xff,
+ 0x00, 0x07, 0xfe, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xc0, 0x3f, 0xf8, 0xe7, 0xff,
+ 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0x1f, 0x3f, 0x01, 0xff, 0x0b, 0x00, 0xff, 0x00, 0x00, 0x05,
+ 0x00, 0x00, 0x00, 0xe0, 0x00, 0xf8, 0x60, 0x80, 0xfe, 0xe3, 0xfc, 0xff, 0x1e, 0xff, 0xff, 0x23,
+ 0xff, 0x09, 0xff, 0x20, 0x00, 0x3f, 0x02, 0x00, 0x00, 0x0f, 0x00, 0x40, 0x00, 0xc0, 0x00, 0xfc,
+ 0xe0, 0xfc, 0xf0, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0x0f, 0xff, 0x07, 0x1f, 0x00, 0x01, 0x0f, 0x00,
+ 0x0f, 0x00, 0x81, 0x70, 0x0c, 0xf0, 0x80, 0x00, 0x00, 0xe4, 0xf8, 0xe6, 0x70, 0x3f, 0xcf, 0xff,
+ 0x1f, 0xff, 0x48, 0xff, 0x0f, 0x00, 0x07, 0x00, 0x00, 0x43, 0x60, 0xf8, 0xf0, 0xfe, 0x38, 0xfe,
+ 0x00, 0xfc, 0x03, 0x00, 0xc8, 0x72, 0xcf, 0xfc, 0x00, 0x03, 0x0f, 0x01, 0xe0, 0x1c, 0xe0, 0x03,
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x06, 0xf9, 0x00, 0x03, 0x00, 0x07,
+ 0xff, 0x00, 0x10, 0x12, 0xc9, 0xf0, 0xcf, 0xb4, 0x7f, 0x80, 0xe0, 0x1e, 0x01, 0x40, 0x65, 0x5e,
+ 0xe0, 0x00, 0x00, 0xf0, 0x0c, 0xf0, 0x00, 0x80, 0x7e, 0x01, 0x80, 0x93, 0xfc, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x89, 0x18, 0x2c, 0x46, 0x00, 0x07, 0x21, 0x10, 0x10, 0x80, 0x09, 0x13,
+ 0x31, 0xbf, 0xff, 0x00, 0x08, 0x1a, 0xf7, 0x0f, 0x00, 0x00, 0x44, 0x45, 0x34, 0xbf, 0xb8, 0x00,
+ 0x10, 0xf0, 0x08, 0xf4, 0x18, 0x11, 0xfc, 0x18, 0xfb, 0x0e, 0x10, 0xf8, 0x04, 0xf8, 0x10, 0x20,
+ 0x18, 0x09, 0xff, 0x0c, 0xea, 0x1f, 0x28, 0x60, 0x30, 0xf8, 0x20, 0xc0, 0x42, 0x33, 0x21, 0x00
+ };
+ // clang-format on
+ oled_write_raw_P(aurora_art, sizeof(aurora_art));
+ }
+ return false;
+}
+#endif
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+ // 0 is left-half encoder,
+ // 1 is right-half encoder
+ if (index == 0) {
+ // Volume control
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) {
+ // Page up/Page down
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+ return true;
+}
+#endif
diff --git a/keyboards/stront/config.h b/keyboards/stront/config.h
new file mode 100644
index 000000000000..4c88e411acc1
--- /dev/null
+++ b/keyboards/stront/config.h
@@ -0,0 +1,95 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_PIN_SWAP
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+/* any side can be master by default, enable split sync to support it */
+#define EE_HANDS
+#define SPLIT_LED_STATE_ENABLE
+#define SPLIT_MODS_ENABLE
+#define SPLIT_POINTING_ENABLE
+
+/* SPI config for display/touchpad */
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN GP10
+#define SPI_MOSI_PIN GP11
+#define SPI_MISO_PIN GP12
+
+/* touchpad config */
+#define POINTING_DEVICE_RIGHT
+#define POINTING_DEVICE_CS_PIN GP9
+#define POINTING_DEVICE_ROTATION_180
+#define CIRQUE_PINNACLE_DIAMETER_MM 40
+
+/* LCD config */
+#define LCD_DC_PIN GP12
+#define LCD_CS_PIN GP9
+#define LCD_RST_PIN GP13
+#define BACKLIGHT_PWM_DRIVER PWMD7
+#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A
+#define QUANTUM_PAINTER_LVGL_USE_CUSTOM_CONF
+
+/* RGB config */
+#ifdef RGB_MATRIX_ENABLE
+# define SPLIT_TRANSPORT_MIRROR
+# define RGB_MATRIX_LED_COUNT RGBLED_NUM
+# define RGB_DISABLE_WHEN_USB_SUSPENDED
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define RGB_MATRIX_KEYPRESSES
+
+# define ENABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue, speed is hue for secondary hue
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static gradient top to bottom, speed controls how much gradient changes
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Static gradient left to right, speed controls how much gradient changes
+# define ENABLE_RGB_MATRIX_BREATHING // Single hue brightness cycling animation
+# define ENABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right
+# define ENABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades saturation
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Single hue 3 blade spinning pinwheel fades brightness
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Single hue spinning spiral fades saturation
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness
+# define ENABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard solid hue cycling through full gradient
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Full gradient scrolling left to right
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Full gradient scrolling out to in
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Full dual gradients scrolling out to in
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradient Chevron shaped scrolling left to right
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Full gradient spinning pinwheel around center of keyboard
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard
+# define ENABLE_RGB_MATRIX_DUAL_BEACON // Full gradient spinning around center of keyboard
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON // Full tighter gradient spinning around center of keyboard
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Full dual gradients spinning two halfs of keyboard
+# define ENABLE_RGB_MATRIX_RAINDROPS // Randomly changes a single key's hue
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation
+# define ENABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight amount at the same time, then shifts back
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight amount in a wave to the right, then back to the left
+# define ENABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight amount and then back down in a wave to the right
+# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL // Single hue fractal filled keys pulsing horizontally out to edges
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW // Pulsing RGB flow along LED wiring with random hues
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN // Randomly light keys with random hues
+# if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP // How hot is your WPM!
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN // That famous computer simulation
+# endif
+# if defined(RGB_MATRIX_KEYPRESSES) || defined(RGB_MATRIX_KEYRELEASES)
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Pulses keys hit to hue & value then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE // Static single hue, pulses keys hit to shifted hue then fades to current hue
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Hue & value pulse near multiple key hits then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Hue & value pulse the same column and row of a single key hit then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of a single key hit then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out
+# define ENABLE_RGB_MATRIX_SPLASH // Full gradient & value pulse away from a single key hit then fades value out
+# define ENABLE_RGB_MATRIX_MULTISPLASH // Full gradient & value pulse away from multiple key hits then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH // Hue & value pulse away from a single key hit then fades value out
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Hue & value pulse away from multiple key hits then fades value out
+# endif
+#endif
diff --git a/keyboards/stront/display.c b/keyboards/stront/display.c
new file mode 100644
index 000000000000..f7b071d1a9ac
--- /dev/null
+++ b/keyboards/stront/display.c
@@ -0,0 +1,125 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "display.h"
+#include "qp.h"
+#include "lvgl_helpers.h"
+
+/* shared styles */
+lv_style_t style_screen;
+lv_style_t style_container;
+lv_style_t style_button;
+lv_style_t style_button_active;
+
+/* screens */
+static lv_obj_t *screen_home;
+
+/* home screen content */
+static lv_obj_t *label_shift;
+static lv_obj_t *label_ctrl;
+static lv_obj_t *label_alt;
+static lv_obj_t *label_gui;
+static lv_obj_t *label_caps;
+
+void init_styles(void) {
+ lv_style_init(&style_screen);
+ lv_style_set_bg_color(&style_screen, lv_color_black());
+
+ lv_style_init(&style_container);
+ lv_style_set_pad_top(&style_container, 0);
+ lv_style_set_pad_bottom(&style_container, 0);
+ lv_style_set_pad_left(&style_container, 0);
+ lv_style_set_pad_right(&style_container, 0);
+ lv_style_set_bg_opa(&style_container, 0);
+ lv_style_set_border_width(&style_container, 0);
+ lv_style_set_width(&style_container, lv_pct(100));
+ lv_style_set_height(&style_container, LV_SIZE_CONTENT);
+
+ lv_style_init(&style_button);
+ lv_style_set_pad_top(&style_button, 4);
+ lv_style_set_pad_bottom(&style_button, 4);
+ lv_style_set_pad_left(&style_button, 4);
+ lv_style_set_pad_right(&style_button, 4);
+ lv_style_set_radius(&style_button, 6);
+ lv_style_set_text_color(&style_button, lv_palette_main(LV_PALETTE_AMBER));
+
+ lv_style_init(&style_button_active);
+ lv_style_set_bg_color(&style_button_active, lv_palette_main(LV_PALETTE_AMBER));
+ lv_style_set_bg_opa(&style_button_active, LV_OPA_100);
+ lv_style_set_text_color(&style_button_active, lv_color_black());
+}
+
+void init_screen_home(void) {
+ screen_home = lv_scr_act();
+
+ lv_obj_add_style(screen_home, &style_screen, 0);
+ use_flex_column(screen_home);
+
+ lv_obj_t *mods = lv_obj_create(screen_home);
+ lv_obj_add_style(mods, &style_container, 0);
+ use_flex_column(mods);
+
+ lv_obj_t *mods_row1 = lv_obj_create(mods);
+ lv_obj_add_style(mods_row1, &style_container, 0);
+ use_flex_row(mods_row1);
+ label_gui = create_button(mods_row1, "GUI", &style_button, &style_button_active);
+ label_alt = create_button(mods_row1, "ALT", &style_button, &style_button_active);
+
+ lv_obj_t *mods_row2 = lv_obj_create(mods);
+ lv_obj_add_style(mods_row2, &style_container, 0);
+ use_flex_row(mods_row2);
+ label_ctrl = create_button(mods_row2, "CTL", &style_button, &style_button_active);
+ label_shift = create_button(mods_row2, "SFT", &style_button, &style_button_active);
+
+ lv_obj_t *label_stront = lv_label_create(screen_home);
+ lv_label_set_text(label_stront, "stront");
+#if LV_FONT_MONTSERRAT_48
+ lv_obj_set_style_text_font(label_stront, &lv_font_montserrat_48, LV_PART_MAIN);
+#endif
+
+ label_caps = create_button(screen_home, "CAPS", &style_button, &style_button_active);
+}
+
+bool display_init_kb(void) {
+ dprint("display_init_kb - start\n");
+
+ backlight_enable();
+
+ painter_device_t display = qp_st7789_make_spi_device(240, 300, LCD_CS_PIN, LCD_DC_PIN, LCD_RST_PIN, 16, 3);
+ qp_set_viewport_offsets(display, 0, 20);
+
+ if (!qp_init(display, QP_ROTATION_180) || !qp_power(display, true) || !qp_lvgl_attach(display)) return false;
+
+ dprint("display_init_kb - initialised\n");
+
+ lv_disp_t *lv_display = lv_disp_get_default();
+ lv_theme_t *lv_theme = lv_theme_default_init(lv_display, lv_palette_main(LV_PALETTE_AMBER), lv_palette_main(LV_PALETTE_BLUE), true, LV_FONT_DEFAULT);
+ lv_disp_set_theme(lv_display, lv_theme);
+ init_styles();
+
+ bool res = display_init_user();
+ if (res) {
+ dprint("display_init_kb - adding default home screen\n");
+ init_screen_home();
+ }
+
+ return true;
+}
+
+__attribute__((weak)) bool display_init_user(void) {
+ return true;
+}
+
+__attribute__((weak)) void display_housekeeping_task(void) {
+ dprint("display_housekeeping_task_kb\n");
+
+ toggle_state(label_shift, LV_STATE_PRESSED, MODS_SHIFT);
+ toggle_state(label_ctrl, LV_STATE_PRESSED, MODS_CTRL);
+ toggle_state(label_alt, LV_STATE_PRESSED, MODS_ALT);
+ toggle_state(label_gui, LV_STATE_PRESSED, MODS_GUI);
+}
+
+__attribute__((weak)) void display_process_caps(bool active) {
+ dprint("display_process_caps\n");
+ toggle_state(label_caps, LV_STATE_PRESSED, active);
+}
diff --git a/keyboards/stront/display.h b/keyboards/stront/display.h
new file mode 100644
index 000000000000..4249ff468ee0
--- /dev/null
+++ b/keyboards/stront/display.h
@@ -0,0 +1,20 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "qp_lvgl.h"
+
+#define MODS_SHIFT ((get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT)
+#define MODS_CTRL ((get_mods() | get_oneshot_mods()) & MOD_MASK_CTRL)
+#define MODS_ALT ((get_mods() | get_oneshot_mods()) & MOD_MASK_ALT)
+#define MODS_GUI ((get_mods() | get_oneshot_mods()) & MOD_MASK_GUI)
+
+/* shared styles */
+extern lv_style_t style_screen;
+extern lv_style_t style_container;
+extern lv_style_t style_button;
+extern lv_style_t style_button_active;
+
+bool display_init_kb(void);
+bool display_init_user(void);
+void display_housekeeping_task(void);
+void display_process_caps(bool active);
diff --git a/keyboards/stront/halconf.h b/keyboards/stront/halconf.h
new file mode 100644
index 000000000000..0aa1ff58d8af
--- /dev/null
+++ b/keyboards/stront/halconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/stront/info.json b/keyboards/stront/info.json
new file mode 100644
index 000000000000..97df3477af32
--- /dev/null
+++ b/keyboards/stront/info.json
@@ -0,0 +1,147 @@
+{
+ "keyboard_name": "stront",
+ "manufacturer": "zzeneg",
+ "url": "https://github.com/zzeneg/stront",
+ "maintainer": "zzeneg",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 1], "x": 2, "y": 0 },
+ { "matrix": [0, 2], "x": 3, "y": 0 },
+ { "matrix": [0, 3], "x": 4, "y": 0 },
+ { "matrix": [0, 4], "x": 5, "y": 0 },
+
+ { "matrix": [4, 4], "x": 8, "y": 0 },
+ { "matrix": [4, 3], "x": 9, "y": 0 },
+ { "matrix": [4, 2], "x": 10, "y": 0 },
+ { "matrix": [4, 1], "x": 11, "y": 0 },
+
+ { "matrix": [0, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 0], "x": 1, "y": 1 },
+ { "matrix": [1, 1], "x": 2, "y": 1 },
+ { "matrix": [1, 2], "x": 3, "y": 1 },
+ { "matrix": [1, 3], "x": 4, "y": 1 },
+ { "matrix": [1, 4], "x": 5, "y": 1 },
+
+ { "matrix": [5, 4], "x": 8, "y": 1 },
+ { "matrix": [5, 3], "x": 9, "y": 1 },
+ { "matrix": [5, 2], "x": 10, "y": 1 },
+ { "matrix": [5, 1], "x": 11, "y": 1 },
+ { "matrix": [5, 0], "x": 12, "y": 1 },
+ { "matrix": [4, 0], "x": 13, "y": 1 },
+
+ { "matrix": [3, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 0], "x": 1, "y": 2 },
+ { "matrix": [2, 1], "x": 2, "y": 2 },
+ { "matrix": [2, 2], "x": 3, "y": 2 },
+ { "matrix": [2, 3], "x": 4, "y": 2 },
+ { "matrix": [2, 4], "x": 5, "y": 2 },
+
+ { "matrix": [6, 4], "x": 8, "y": 2 },
+ { "matrix": [6, 3], "x": 9, "y": 2 },
+ { "matrix": [6, 2], "x": 10, "y": 2 },
+ { "matrix": [6, 1], "x": 11, "y": 2 },
+ { "matrix": [6, 0], "x": 12, "y": 2 },
+ { "matrix": [7, 0], "x": 13, "y": 2 },
+
+ { "matrix": [3, 2], "x": 4, "y": 3 },
+ { "matrix": [3, 3], "x": 5, "y": 3 },
+ { "matrix": [3, 4], "x": 6, "y": 3 },
+ { "matrix": [7, 4], "x": 7, "y": 3 },
+ { "matrix": [7, 3], "x": 8, "y": 3 },
+ { "matrix": [7, 2], "x": 9, "y": 3 }
+ ]
+ }
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6"],
+ "rows": ["GP28", "GP27", "GP26", "GP15"]
+ },
+ "split": {
+ "enabled": true
+ },
+ "encoder": {
+ "rotary": [
+ {
+ "pin_a": "GP7",
+ "pin_b": "GP8",
+ "resolution": 4
+ }
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "console": false,
+ "encoder": true,
+ "backlight": true,
+ "extrakey": true,
+ "rgblight": false,
+ "rgb_matrix": true,
+ "nkro": false
+ },
+ "backlight": {
+ "pin": "GP14"
+ },
+ "ws2812": {
+ "pin": "GP29"
+ },
+ "rgblight": {
+ "led_count": 38,
+ "split": true,
+ "split_count": [19, 19]
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "led_count": 38,
+ "split_count": [19, 19],
+ "layout": [
+ { "flags": 4, "matrix": [0, 4], "x": 71, "y": 7 },
+ { "flags": 4, "matrix": [0, 3], "x": 57, "y": 5 },
+ { "flags": 4, "matrix": [0, 2], "x": 44, "y": 0 },
+ { "flags": 4, "matrix": [0, 1], "x": 27, "y": 5 },
+ { "flags": 4, "matrix": [1, 1], "x": 29, "y": 22 },
+ { "flags": 4, "matrix": [1, 0], "x": 14, "y": 26 },
+ { "flags": 4, "matrix": [0, 0], "x": 0, "y": 26 },
+ { "flags": 4, "matrix": [3, 0], "x": 2, "y": 43 },
+ { "flags": 4, "matrix": [2, 0], "x": 16, "y": 43 },
+ { "flags": 4, "matrix": [2, 1], "x": 30, "y": 38 },
+ { "flags": 4, "matrix": [2, 2], "x": 44, "y": 33 },
+ { "flags": 4, "matrix": [1, 2], "x": 44, "y": 17 },
+ { "flags": 4, "matrix": [1, 3], "x": 57, "y": 22 },
+ { "flags": 4, "matrix": [1, 4], "x": 71, "y": 24 },
+ { "flags": 4, "matrix": [2, 4], "x": 71, "y": 40 },
+ { "flags": 4, "matrix": [2, 3], "x": 57, "y": 38 },
+ { "flags": 4, "matrix": [3, 2], "x": 56, "y": 57 },
+ { "flags": 4, "matrix": [3, 3], "x": 71, "y": 59 },
+ { "flags": 4, "matrix": [3, 4], "x": 85, "y": 64 },
+
+ { "flags": 4, "matrix": [7, 4], "x": 139, "y": 64 },
+ { "flags": 4, "matrix": [7, 3], "x": 153, "y": 59 },
+ { "flags": 4, "matrix": [7, 2], "x": 168, "y": 57 },
+ { "flags": 4, "matrix": [6, 3], "x": 167, "y": 38 },
+ { "flags": 4, "matrix": [6, 4], "x": 153, "y": 40 },
+ { "flags": 4, "matrix": [5, 4], "x": 153, "y": 24 },
+ { "flags": 4, "matrix": [5, 3], "x": 167, "y": 22 },
+ { "flags": 4, "matrix": [5, 2], "x": 180, "y": 17 },
+ { "flags": 4, "matrix": [6, 2], "x": 180, "y": 33 },
+ { "flags": 4, "matrix": [6, 1], "x": 194, "y": 38 },
+ { "flags": 4, "matrix": [6, 0], "x": 208, "y": 43 },
+ { "flags": 4, "matrix": [7, 0], "x": 222, "y": 43 },
+ { "flags": 4, "matrix": [4, 0], "x": 224, "y": 26 },
+ { "flags": 4, "matrix": [5, 0], "x": 210, "y": 26 },
+ { "flags": 4, "matrix": [5, 1], "x": 195, "y": 22 },
+ { "flags": 4, "matrix": [4, 1], "x": 197, "y": 5 },
+ { "flags": 4, "matrix": [4, 2], "x": 180, "y": 0 },
+ { "flags": 4, "matrix": [4, 3], "x": 167, "y": 5 },
+ { "flags": 4, "matrix": [4, 4], "x": 153, "y": 7 }
+ ]
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0844",
+ "vid": "0xFEED"
+ }
+}
diff --git a/keyboards/stront/keymaps/default/keymap.c b/keyboards/stront/keymaps/default/keymap.c
new file mode 100644
index 000000000000..793a2495c7cd
--- /dev/null
+++ b/keyboards/stront/keymaps/default/keymap.c
@@ -0,0 +1,107 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_number {
+ // clang-format off
+ _QWERTY = 0,
+ _GAME,
+ _NAV,
+ _NUMBER,
+ _SYMBOL,
+ _FUNC,
+ _SYS
+ // clang-format on
+};
+
+// Left-hand home row mods
+#define HOME_A LGUI_T(KC_A)
+#define HOME_S LALT_T(KC_S)
+#define HOME_D LCTL_T(KC_D)
+#define HOME_F LSFT_T(KC_F)
+
+// Right-hand home row mods
+#define HOME_J RSFT_T(KC_J)
+#define HOME_K RCTL_T(KC_K)
+#define HOME_L LALT_T(KC_L)
+#define HOME_SCLN RGUI_T(KC_SCLN)
+
+// bottom mods
+#define SYM_SPC LT(_SYMBOL, KC_SPC)
+#define NUM_TAB LT(_NUMBER, KC_TAB)
+#define FUNC_ESC LT(_FUNC, KC_ESC)
+#define FUNC_ENT LT(_FUNC, KC_ENT)
+#define NAV_BSPC LT(_NAV, KC_BSPC)
+#define RALT_DEL LALT_T(KC_DEL)
+
+// game layer mods
+#define LALT_Q LALT_T(KC_Q)
+#define LSFT_MINS LSFT_T(KC_MINS)
+#define LCTL_ESC LCTL_T(KC_ESC)
+#define LGUI_QUOT LGUI_T(KC_QUOT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * .---------------------------. .---------------------------.
+ * | W | E | R | T | | Y | U | I | O |
+ * .------+------+------+------+------+------| |------+------+------+------+------+------.
+ * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
+ * '-----------------------------------------/ / \ \-----------------------------------------'
+ * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
+ * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | RAlt |
+ * `-------------''-------' '-------''-------------'
+ */
+ // clang-format off
+ [_QWERTY] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_SCLN, KC_P,
+ KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_GAME] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_P,
+ LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
+ LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_NAV] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
+ XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
+ FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, RALT_DEL
+ ),
+
+ [_NUMBER] = LAYOUT(
+ KC_7, KC_8, KC_9, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_EQL, KC_0, KC_4, KC_5, KC_6, KC_LBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_MINS, KC_BSLS, KC_1, KC_2, KC_3, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_SYMBOL] = LAYOUT(
+ LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_GRV), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ LSFT(KC_EQL), LSFT(KC_0), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_LBRC), XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ LSFT(KC_MINS), LSFT(KC_BSLS), LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_FUNC] = LAYOUT(
+ KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
+ KC_F12, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
+ ),
+
+ [_SYS] = LAYOUT(
+ BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
+ EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
+ _______, QK_BOOT, _______, _______, QK_BOOT, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/stront/keymaps/hid/config.h b/keyboards/stront/keymaps/hid/config.h
new file mode 100644
index 000000000000..e96512f93ffb
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/config.h
@@ -0,0 +1,7 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_HID_SYNC, RPC_ID_USER_CAPS_WORD_SYNC, RPC_ID_USER_LAYER_SYNC
+#define QUANTUM_PAINTER_DISPLAY_TIMEOUT 0
diff --git a/keyboards/stront/keymaps/hid/hid_display.c b/keyboards/stront/keymaps/hid/hid_display.c
new file mode 100644
index 000000000000..a1e131171300
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/hid_display.c
@@ -0,0 +1,240 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "hid_display.h"
+#include "display.h"
+#include "raw_hid.h"
+#include "lvgl_helpers.h"
+
+uint16_t home_screen_timer = 0;
+
+/* screens */
+static lv_obj_t *screen_home;
+static lv_obj_t *screen_volume;
+static lv_obj_t *screen_media;
+
+/* home screen content */
+static lv_obj_t *label_time;
+static lv_obj_t *label_volume_home;
+static lv_obj_t *label_shift;
+static lv_obj_t *label_ctrl;
+static lv_obj_t *label_alt;
+static lv_obj_t *label_gui;
+static lv_obj_t *label_layer;
+static lv_obj_t *label_caps;
+#ifdef CAPS_WORD_ENABLE
+static lv_obj_t *label_caps_word;
+#endif
+static lv_obj_t *label_layout;
+
+/* volume screen content */
+static lv_obj_t *arc_volume;
+static lv_obj_t *label_volume_arc;
+
+/* media screen content */
+static lv_obj_t *label_media_artist;
+static lv_obj_t *label_media_title;
+
+enum layout { _EN = 0, _RU };
+void set_layout_label(uint8_t layout) {
+ switch (layout) {
+ case _EN:
+ lv_label_set_text(label_layout, "EN");
+ break;
+
+ case _RU:
+ lv_label_set_text(label_layout, "RU");
+ break;
+ }
+}
+
+void read_string(uint8_t *data, char *string_data) {
+ uint8_t data_length = data[1];
+ memcpy(string_data, data + 2, data_length);
+ string_data[data_length] = '\0';
+}
+
+void start_home_screen_timer(void) {
+ dprint("start_home_screen_timer\n");
+ home_screen_timer = timer_read();
+}
+
+void init_screen_home_custom(void) {
+ screen_home = lv_scr_act();
+ lv_obj_add_style(screen_home, &style_screen, 0);
+ use_flex_column(screen_home);
+
+ label_volume_home = lv_label_create(screen_home);
+ lv_label_set_text(label_volume_home, "");
+
+ lv_obj_t *mods = lv_obj_create(screen_home);
+ lv_obj_add_style(mods, &style_container, 0);
+ use_flex_row(mods);
+
+ label_gui = create_button(mods, "GUI", &style_button, &style_button_active);
+ label_alt = create_button(mods, "ALT", &style_button, &style_button_active);
+ label_ctrl = create_button(mods, "CTL", &style_button, &style_button_active);
+ label_shift = create_button(mods, "SFT", &style_button, &style_button_active);
+
+ label_time = lv_label_create(screen_home);
+ lv_label_set_text(label_time, "00:00");
+ lv_obj_set_style_text_font(label_time, &lv_font_montserrat_48, LV_PART_MAIN);
+
+ lv_obj_t *caps = lv_obj_create(screen_home);
+ lv_obj_add_style(caps, &style_container, 0);
+ use_flex_row(caps);
+
+ label_caps = create_button(caps, "CAPS", &style_button, &style_button_active);
+#ifdef CAPS_WORD_ENABLE
+ label_caps_word = create_button(caps, "CAPS WORD", &style_button, &style_button_active);
+#endif
+
+ lv_obj_t *bottom_row = lv_obj_create(screen_home);
+ lv_obj_add_style(bottom_row, &style_container, 0);
+
+ label_layer = lv_label_create(bottom_row);
+ lv_label_set_text(label_layer, "");
+ lv_obj_align(label_layer, LV_ALIGN_LEFT_MID, 10, 0);
+ display_process_layer_state(0);
+
+ label_layout = lv_label_create(bottom_row);
+ lv_label_set_text(label_layout, "");
+ lv_obj_align(label_layout, LV_ALIGN_RIGHT_MID, -10, 0);
+ set_layout_label(0);
+}
+
+void init_screen_volume(void) {
+ screen_volume = lv_obj_create(NULL);
+ lv_obj_add_style(screen_volume, &style_screen, 0);
+
+ arc_volume = lv_arc_create(screen_volume);
+ lv_obj_set_size(arc_volume, 200, 200);
+ lv_obj_center(arc_volume);
+
+ label_volume_arc = lv_label_create(screen_volume);
+ lv_label_set_text(label_volume_arc, "00");
+ lv_obj_set_style_text_font(label_volume_arc, &lv_font_montserrat_48, LV_PART_MAIN);
+ lv_obj_center(label_volume_arc);
+
+ lv_obj_t *volume_text_label = lv_label_create(screen_volume);
+ lv_label_set_text(volume_text_label, "Volume");
+ lv_obj_align(volume_text_label, LV_ALIGN_BOTTOM_MID, 0, -10);
+}
+
+void init_screen_media(void) {
+ screen_media = lv_obj_create(NULL);
+ lv_obj_add_style(screen_media, &style_screen, 0);
+ use_flex_column(screen_media);
+ lv_obj_set_flex_align(screen_media, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
+
+ label_media_artist = lv_label_create(screen_media);
+ lv_label_set_text(label_media_artist, "N/A");
+ lv_label_set_long_mode(label_media_artist, LV_LABEL_LONG_WRAP);
+ lv_obj_set_width(label_media_artist, lv_pct(90));
+ lv_obj_set_style_text_align(label_media_artist, LV_TEXT_ALIGN_CENTER, 0);
+
+ label_media_title = lv_label_create(screen_media);
+ lv_label_set_text(label_media_title, "N/A");
+ lv_label_set_long_mode(label_media_title, LV_LABEL_LONG_WRAP);
+ lv_obj_set_width(label_media_title, lv_pct(90));
+ lv_obj_set_style_text_align(label_media_title, LV_TEXT_ALIGN_CENTER, 0);
+}
+
+bool display_init_user(void) {
+ init_screen_home_custom();
+ init_screen_volume();
+ init_screen_media();
+
+ return false;
+}
+
+void display_process_raw_hid_data(uint8_t *data, uint8_t length) {
+ uint8_t data_type = data[0];
+ char string_data[length - 2];
+ dprintf("display_process_raw_hid_data - received data_type %u \n", data_type);
+ switch (data_type) {
+ case _TIME:
+ dprintf("time %02d:%02d\n", data[1], data[2]);
+ lv_label_set_text_fmt(label_time, "%02d:%02d", data[1], data[2]);
+ break;
+
+ case _VOLUME:
+ dprintf("volume %d\n", data[1]);
+ lv_label_set_text_fmt(label_volume_home, "Volume: %02d%%", data[1]);
+ lv_label_set_text_fmt(label_volume_arc, "%02d", data[1]);
+ lv_arc_set_value(arc_volume, data[1]);
+ lv_scr_load(screen_volume);
+ start_home_screen_timer();
+ break;
+
+ case _LAYOUT:
+ dprintf("layout %d\n", data[1]);
+ set_layout_label(data[1]);
+ break;
+
+ case _MEDIA_ARTIST:
+ read_string(data, string_data);
+ dprintf("media artist %s\n", string_data);
+ lv_label_set_text(label_media_artist, string_data);
+ lv_scr_load(screen_media);
+ start_home_screen_timer();
+ break;
+
+ case _MEDIA_TITLE:
+ read_string(data, string_data);
+ dprintf("media title %s\n", string_data);
+ lv_label_set_text(label_media_title, string_data);
+ lv_scr_load(screen_media);
+ start_home_screen_timer();
+ break;
+ }
+}
+
+void display_process_layer_state(uint8_t layer) {
+ switch (layer) {
+ case _QWERTY:
+ lv_label_set_text(label_layer, "QWERTY");
+ break;
+ case _GAME:
+ lv_label_set_text(label_layer, "GAME");
+ break;
+ case _NAV:
+ lv_label_set_text(label_layer, "NAV");
+ break;
+ case _NUMBER:
+ lv_label_set_text(label_layer, "NUMBER");
+ break;
+ case _SYMBOL:
+ lv_label_set_text(label_layer, "SYMBOL");
+ break;
+ case _FUNC:
+ lv_label_set_text(label_layer, "FUNC");
+ break;
+ case _SYS:
+ lv_label_set_text(label_layer, "SYSTEM");
+ break;
+ }
+}
+
+void display_housekeeping_task(void) {
+ if (home_screen_timer && timer_elapsed(home_screen_timer) > 5000) {
+ home_screen_timer = 0;
+ lv_scr_load(screen_home);
+ }
+
+ toggle_state(label_shift, LV_STATE_PRESSED, MODS_SHIFT);
+ toggle_state(label_ctrl, LV_STATE_PRESSED, MODS_CTRL);
+ toggle_state(label_alt, LV_STATE_PRESSED, MODS_ALT);
+ toggle_state(label_gui, LV_STATE_PRESSED, MODS_GUI);
+}
+
+void display_process_caps(bool active) {
+ toggle_state(label_caps, LV_STATE_PRESSED, active);
+}
+
+#ifdef CAPS_WORD_ENABLE
+void display_process_caps_word(bool active) {
+ dprint("display_process_caps_word\n");
+ toggle_state(label_caps_word, LV_STATE_PRESSED, active);
+}
+#endif
diff --git a/keyboards/stront/keymaps/hid/hid_display.h b/keyboards/stront/keymaps/hid/hid_display.h
new file mode 100644
index 000000000000..b93bf6471695
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/hid_display.h
@@ -0,0 +1,29 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+typedef enum {
+ _QWERTY = 0,
+ _GAME,
+ _EU,
+ _NAV,
+ _NUMBER,
+ _SYMBOL,
+ _FUNC,
+ _SYS,
+} layer_number;
+
+typedef enum {
+ _TIME = 0,
+ _VOLUME,
+ _LAYOUT,
+ _MEDIA_ARTIST,
+ _MEDIA_TITLE,
+} hid_data_type;
+
+void display_process_raw_hid_data(uint8_t *data, uint8_t length);
+void display_process_layer_state(uint8_t layer);
+#ifdef CAPS_WORD_ENABLE
+void display_process_caps_word(bool active);
+#endif
diff --git a/keyboards/stront/keymaps/hid/keymap.c b/keyboards/stront/keymaps/hid/keymap.c
new file mode 100644
index 000000000000..11cb89c48ee0
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/keymap.c
@@ -0,0 +1,187 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#include "hid_display.h"
+#include "raw_hid.h"
+#include "transactions.h"
+
+// Left-hand home row mods
+#define HOME_A LGUI_T(KC_A)
+#define HOME_S LALT_T(KC_S)
+#define HOME_D LCTL_T(KC_D)
+#define HOME_F LSFT_T(KC_F)
+
+// Right-hand home row mods
+#define HOME_J RSFT_T(KC_J)
+#define HOME_K RCTL_T(KC_K)
+#define HOME_L LALT_T(KC_L)
+#define HOME_SCLN RGUI_T(KC_SCLN)
+
+// bottom mods
+#define SYM_SPC LT(_SYMBOL, KC_SPC)
+#define NUM_TAB LT(_NUMBER, KC_TAB)
+#define FUNC_ESC LT(_FUNC, KC_ESC)
+#define FUNC_ENT LT(_FUNC, KC_ENT)
+#define NAV_BSPC LT(_NAV, KC_BSPC)
+#define RALT_DEL LALT_T(KC_DEL)
+
+// game layer mods
+#define LALT_Q LALT_T(KC_Q)
+#define LSFT_MINS LSFT_T(KC_MINS)
+#define LCTL_ESC LCTL_T(KC_ESC)
+#define LGUI_QUOT LGUI_T(KC_QUOT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * .---------------------------. .---------------------------.
+ * | W | E | R | T | | Y | U | I | O |
+ * .------+------+------+------+------+------| |------+------+------+------+------+------.
+ * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
+ * '-----------------------------------------/ / \ \-----------------------------------------'
+ * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
+ * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | RAlt |
+ * `-------------''-------' '-------''-------------'
+ */
+ // clang-format off
+ [_QWERTY] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_SCLN, KC_P,
+ KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_GAME] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_P,
+ LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
+ LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_NAV] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
+ XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
+ FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, RALT_DEL
+ ),
+
+ [_NUMBER] = LAYOUT(
+ KC_7, KC_8, KC_9, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_EQL, KC_0, KC_4, KC_5, KC_6, KC_LBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_MINS, KC_BSLS, KC_1, KC_2, KC_3, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_SYMBOL] = LAYOUT(
+ LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_GRV), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ LSFT(KC_EQL), LSFT(KC_0), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_LBRC), XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ LSFT(KC_MINS), LSFT(KC_BSLS), LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_FUNC] = LAYOUT(
+ KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
+ KC_F12, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
+ ),
+
+ [_SYS] = LAYOUT(
+ BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
+ EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
+ _______, QK_BOOT, _______, _______, QK_BOOT, _______
+ )
+ // clang-format on
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ dprintf("process_record_user %u %s %s %d\n", keycode, record->event.pressed ? "pressed" : "depressed", record->tap.interrupted ? "interrupted" : "not interrupted", record->tap.count);
+
+ if (record->event.pressed) {
+ uint8_t data[32];
+ data[0] = 0;
+
+ switch (keycode) {
+ // send hid commands
+ case KC_VOLU:
+ case KC_VOLD:
+ data[0] = _VOLUME;
+ break;
+ }
+
+ if (data[0]) {
+ dprintf("raw_hid_send %u\n", data[0]);
+ raw_hid_send(data, sizeof(data));
+ }
+ }
+
+ return true;
+}
+
+/* Caps Word processing */
+#ifdef CAPS_WORD_ENABLE
+void caps_word_set_user(bool active) {
+ if (is_display_enabled()) {
+ display_process_caps_word(active);
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ dprintf("RPC_ID_USER_CAPS_WORD_SYNC: %s\n", active ? "active" : "inactive");
+ transaction_rpc_send(RPC_ID_USER_CAPS_WORD_SYNC, 1, &active);
+ }
+}
+#endif
+
+/* Active Layer processing */
+layer_state_t layer_state_set_user(layer_state_t state) {
+ if (is_display_enabled()) {
+ display_process_layer_state(get_highest_layer(state));
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ uint8_t layer = get_highest_layer(state);
+ dprintf("RPC_ID_USER_LAYER_SYNC: %u\n", layer);
+ transaction_rpc_send(RPC_ID_USER_LAYER_SYNC, 1, &layer);
+ }
+
+ return state;
+}
+
+/* Raw HID processing*/
+void raw_hid_receive(uint8_t *data, uint8_t length) {
+ dprintf("raw_hid_receive - received %u bytes \n", length);
+
+ if (is_display_enabled()) {
+ display_process_raw_hid_data(data, length);
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ dprint("RPC_ID_USER_HID_SYNC \n");
+ transaction_rpc_send(RPC_ID_USER_HID_SYNC, length, data);
+ }
+}
+
+void hid_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_raw_hid_data((uint8_t *)initiator2target_buffer, initiator2target_buffer_size);
+ }
+}
+
+void layer_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_layer_state(*(uint8_t *)initiator2target_buffer);
+ }
+}
+
+void caps_word_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_caps_word(*(bool *)initiator2target_buffer);
+ }
+}
+
+void keyboard_post_init_user() {
+ // sync received hid data
+ transaction_register_rpc(RPC_ID_USER_HID_SYNC, hid_sync);
+ // sync highest layer (a bit more performant than standard SPLIT_LAYER_STATE_ENABLE)
+ transaction_register_rpc(RPC_ID_USER_LAYER_SYNC, layer_sync);
+ // sync caps word state
+ transaction_register_rpc(RPC_ID_USER_CAPS_WORD_SYNC, caps_word_sync);
+}
diff --git a/keyboards/stront/keymaps/hid/lv_conf.h b/keyboards/stront/keymaps/hid/lv_conf.h
new file mode 100644
index 000000000000..f8f93b7c9ef0
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/lv_conf.h
@@ -0,0 +1,15 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef LV_FONT_DEFAULT
+#define LV_FONT_DEFAULT &lv_font_montserrat_20
+
+#undef LV_FONT_MONTSERRAT_20
+#define LV_FONT_MONTSERRAT_20 1
+
+#undef LV_FONT_MONTSERRAT_28
+#define LV_FONT_MONTSERRAT_28 0
diff --git a/keyboards/stront/keymaps/hid/rules.mk b/keyboards/stront/keymaps/hid/rules.mk
new file mode 100644
index 000000000000..beaf344b665c
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/rules.mk
@@ -0,0 +1,5 @@
+CAPS_WORD_ENABLE = yes
+
+RAW_ENABLE = yes
+
+SRC += hid_display.c
diff --git a/keyboards/stront/keymaps/i2c/config.h b/keyboards/stront/keymaps/i2c/config.h
new file mode 100644
index 000000000000..8c71dad8355c
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/config.h
@@ -0,0 +1,8 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define I2C_DRIVER I2CD1
+#define I2C1_SDA_PIN GP10
+#define I2C1_SCL_PIN GP11
diff --git a/keyboards/stront/keymaps/i2c/halconf.h b/keyboards/stront/keymaps/i2c/halconf.h
new file mode 100644
index 000000000000..46c5a48c9a91
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/stront/keymaps/i2c/keymap.c b/keyboards/stront/keymaps/i2c/keymap.c
new file mode 100644
index 000000000000..793a2495c7cd
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/keymap.c
@@ -0,0 +1,107 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_number {
+ // clang-format off
+ _QWERTY = 0,
+ _GAME,
+ _NAV,
+ _NUMBER,
+ _SYMBOL,
+ _FUNC,
+ _SYS
+ // clang-format on
+};
+
+// Left-hand home row mods
+#define HOME_A LGUI_T(KC_A)
+#define HOME_S LALT_T(KC_S)
+#define HOME_D LCTL_T(KC_D)
+#define HOME_F LSFT_T(KC_F)
+
+// Right-hand home row mods
+#define HOME_J RSFT_T(KC_J)
+#define HOME_K RCTL_T(KC_K)
+#define HOME_L LALT_T(KC_L)
+#define HOME_SCLN RGUI_T(KC_SCLN)
+
+// bottom mods
+#define SYM_SPC LT(_SYMBOL, KC_SPC)
+#define NUM_TAB LT(_NUMBER, KC_TAB)
+#define FUNC_ESC LT(_FUNC, KC_ESC)
+#define FUNC_ENT LT(_FUNC, KC_ENT)
+#define NAV_BSPC LT(_NAV, KC_BSPC)
+#define RALT_DEL LALT_T(KC_DEL)
+
+// game layer mods
+#define LALT_Q LALT_T(KC_Q)
+#define LSFT_MINS LSFT_T(KC_MINS)
+#define LCTL_ESC LCTL_T(KC_ESC)
+#define LGUI_QUOT LGUI_T(KC_QUOT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * .---------------------------. .---------------------------.
+ * | W | E | R | T | | Y | U | I | O |
+ * .------+------+------+------+------+------| |------+------+------+------+------+------.
+ * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
+ * '-----------------------------------------/ / \ \-----------------------------------------'
+ * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
+ * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | RAlt |
+ * `-------------''-------' '-------''-------------'
+ */
+ // clang-format off
+ [_QWERTY] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_SCLN, KC_P,
+ KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_GAME] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_P,
+ LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
+ LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_NAV] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
+ XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
+ FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, RALT_DEL
+ ),
+
+ [_NUMBER] = LAYOUT(
+ KC_7, KC_8, KC_9, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_EQL, KC_0, KC_4, KC_5, KC_6, KC_LBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_MINS, KC_BSLS, KC_1, KC_2, KC_3, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_SYMBOL] = LAYOUT(
+ LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_GRV), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ LSFT(KC_EQL), LSFT(KC_0), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_LBRC), XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ LSFT(KC_MINS), LSFT(KC_BSLS), LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, RALT_DEL
+ ),
+
+ [_FUNC] = LAYOUT(
+ KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
+ KC_F12, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
+ ),
+
+ [_SYS] = LAYOUT(
+ BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
+ EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
+ _______, QK_BOOT, _______, _______, QK_BOOT, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/stront/keymaps/i2c/mcuconf.h b/keyboards/stront/keymaps/i2c/mcuconf.h
new file mode 100644
index 000000000000..47ee67119de6
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/stront/keymaps/i2c/rules.mk b/keyboards/stront/keymaps/i2c/rules.mk
new file mode 100644
index 000000000000..fedac72e2e2b
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/rules.mk
@@ -0,0 +1 @@
+POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c
diff --git a/keyboards/stront/keymaps/zzeneg/config.h b/keyboards/stront/keymaps/zzeneg/config.h
new file mode 100644
index 000000000000..38fad1c0fdda
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/config.h
@@ -0,0 +1,30 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// #define DEBUG_MATRIX_SCAN_RATE
+
+#define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_HID_SYNC, RPC_ID_USER_CAPS_WORD_SYNC, RPC_ID_USER_LAYER_SYNC
+#define QUANTUM_PAINTER_DISPLAY_TIMEOUT 0
+
+#define I2C_DRIVER I2CD1
+#define I2C1_SDA_PIN GP10
+#define I2C1_SCL_PIN GP11
+
+#define CIRQUE_PINNACLE_TAP_ENABLE
+#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE
+#define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
+#define MOUSE_EXTENDED_REPORT
+
+#define TAPPING_TERM 150
+#define TAPPING_TERM_PER_KEY
+#define QUICK_TAP_TERM 0
+
+#define CAPS_WORD_IDLE_TIMEOUT 2500
+#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_TIMEOUT 300000
+# define RGB_TRIGGER_ON_KEYDOWN
+#endif
diff --git a/keyboards/stront/keymaps/zzeneg/fonts/montserrat_20_en_ru.c b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_20_en_ru.c
new file mode 100644
index 000000000000..f03a7835a618
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_20_en_ru.c
@@ -0,0 +1,782 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ * Size: 20 px
+ * Bpp: 4
+ * Opts:
+ ******************************************************************************/
+
+#ifdef __has_include
+# if __has_include("lvgl.h")
+# ifndef LV_LVGL_H_INCLUDE_SIMPLE
+# define LV_LVGL_H_INCLUDE_SIMPLE
+# endif
+# endif
+#endif
+
+#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
+# include "lvgl.h"
+#else
+# include "lvgl/lvgl.h"
+#endif
+
+#ifndef MONTSERRAT_20_EN_RU
+# define MONTSERRAT_20_EN_RU 1
+#endif
+
+#if MONTSERRAT_20_EN_RU
+
+/*-----------------
+ * BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
+ /* U+0020 " " */
+
+ /* U+0021 "!" */
+ 0x3f, 0x63, 0xf6, 0x2f, 0x52, 0xf5, 0x1f, 0x41, 0xf4, 0xf, 0x40, 0xf3, 0xf, 0x30, 0xf2, 0x2, 0x0, 0x0, 0x1, 0x5, 0xf8, 0x3f, 0x60,
+
+ /* U+0022 "\"" */
+ 0x9a, 0x3, 0xf0, 0x99, 0x2, 0xf0, 0x99, 0x2, 0xf0, 0x89, 0x2, 0xf0, 0x89, 0x1, 0xf0, 0x44, 0x0, 0x70,
+
+ /* U+0023 "#" */
+ 0x0, 0x0, 0x6b, 0x0, 0x2, 0xe0, 0x0, 0x0, 0x0, 0x79, 0x0, 0x4, 0xc0, 0x0, 0x0, 0x0, 0x97, 0x0, 0x6, 0xa0, 0x0, 0x0, 0x0, 0xb6, 0x0, 0x8, 0x80, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x1, 0x22, 0xf4, 0x22, 0x2c, 0x62, 0x20, 0x0, 0x1, 0xf0, 0x0, 0xd, 0x30, 0x0, 0x0, 0x2, 0xe0, 0x0, 0xf, 0x10, 0x0, 0x0, 0x4, 0xc0, 0x0, 0x1f, 0x0, 0x0, 0x0, 0x6, 0xa0, 0x0, 0x3d, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x12, 0x2b, 0x82, 0x22, 0x8b, 0x22, 0x10, 0x0, 0xc, 0x50, 0x0, 0x88, 0x0, 0x0, 0x0, 0xe, 0x30, 0x0, 0xa6, 0x0, 0x0, 0x0, 0xf, 0x10, 0x0, 0xc4, 0x0, 0x0,
+
+ /* U+0024 "$" */
+ 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x6, 0xcf, 0xfe, 0xb6, 0x0, 0x0, 0xbf, 0x98, 0xd6, 0xaf, 0x90, 0x6, 0xf4, 0x4, 0xb0, 0x1, 0x20, 0xa, 0xc0, 0x4, 0xb0, 0x0, 0x0, 0xb, 0xc0, 0x4, 0xb0, 0x0, 0x0, 0x7, 0xf6, 0x4, 0xb0, 0x0, 0x0, 0x0, 0xcf, 0xca, 0xb0, 0x0, 0x0, 0x0, 0x6, 0xcf, 0xfe, 0x92, 0x0, 0x0, 0x0, 0x5, 0xda, 0xff, 0x60, 0x0, 0x0, 0x4, 0xb0, 0x1b, 0xf1, 0x0, 0x0, 0x4, 0xb0, 0x3, 0xf5, 0x0, 0x0, 0x4, 0xb0, 0x2, 0xf4, 0xb, 0x50, 0x4, 0xb0, 0x9, 0xf1, 0x9, 0xfd, 0x88, 0xd7, 0xcf, 0x50, 0x0, 0x29, 0xdf, 0xfe, 0xa3, 0x0, 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x50, 0x0, 0x0,
+
+ /* U+0025 "%" */
+ 0x0, 0x9d, 0xd9, 0x0, 0x0, 0x0, 0xd5, 0x0, 0x8, 0x90, 0x9, 0x80, 0x0, 0x7, 0xb0, 0x0, 0xe, 0x10, 0x1, 0xe0, 0x0, 0x2e, 0x10, 0x0, 0x2d, 0x0, 0x0, 0xd2, 0x0, 0xb6, 0x0, 0x0, 0x2e, 0x0, 0x0, 0xe2, 0x6, 0xc0, 0x0, 0x0, 0xe, 0x10, 0x1, 0xe0, 0x1e, 0x20, 0x0, 0x0, 0x8, 0xb1, 0x1b, 0x80, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x8e, 0xe8, 0x4, 0xd0, 0x2b, 0xfd, 0x40, 0x0, 0x0, 0x0, 0xe, 0x30, 0xe5, 0x3, 0xe2, 0x0, 0x0, 0x0, 0x99, 0x6, 0xa0, 0x0, 0x88, 0x0, 0x0, 0x3, 0xe1, 0x8, 0x70, 0x0, 0x4b, 0x0, 0x0, 0xd, 0x50, 0x8, 0x70, 0x0, 0x4b, 0x0, 0x0, 0x7b, 0x0, 0x6, 0xa0, 0x0, 0x78, 0x0, 0x2, 0xe1, 0x0, 0x0, 0xe3, 0x2, 0xe2, 0x0, 0xc, 0x60, 0x0, 0x0, 0x2c, 0xdd, 0x40,
+
+ /* U+0026 "&" */
+ 0x0, 0x1, 0xae, 0xfd, 0x50, 0x0, 0x0, 0x0, 0xd, 0xc3, 0x16, 0xf3, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x0, 0xc8, 0x0, 0x0, 0x0, 0x3f, 0x10, 0x0, 0xc7, 0x0, 0x0, 0x0, 0xf, 0x70, 0x6, 0xf2, 0x0, 0x0, 0x0, 0x6, 0xf4, 0x9f, 0x50, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xfc, 0xe2, 0x0, 0x0, 0x0, 0x1, 0xdc, 0x10, 0xcd, 0x10, 0xa, 0x20, 0x9, 0xd0, 0x0, 0xd, 0xd1, 0x1f, 0x10, 0xf, 0x70, 0x0, 0x1, 0xdc, 0x8c, 0x0, 0xf, 0x60, 0x0, 0x0, 0x2e, 0xf6, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x1c, 0xfa, 0x0, 0x3, 0xfd, 0x63, 0x48, 0xec, 0x4f, 0x90, 0x0, 0x29, 0xef, 0xfc, 0x60, 0x4, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0027 "'" */
+ 0x9a, 0x99, 0x99, 0x89, 0x89, 0x44,
+
+ /* U+0028 "(" */
+ 0x0, 0xd8, 0x5, 0xf1, 0xc, 0x90, 0x1f, 0x40, 0x5f, 0x0, 0x9d, 0x0, 0xba, 0x0, 0xd9, 0x0, 0xe8, 0x0, 0xe7, 0x0, 0xe8, 0x0, 0xd9, 0x0, 0xba, 0x0, 0x9d, 0x0, 0x5f, 0x0, 0x1f, 0x40, 0xc, 0x90, 0x5, 0xf1, 0x0, 0xd8,
+
+ /* U+0029 ")" */
+ 0xe, 0x70, 0x0, 0x7e, 0x0, 0x1, 0xf5, 0x0, 0xb, 0xb0, 0x0, 0x7f, 0x0, 0x3, 0xf2, 0x0, 0x1f, 0x40, 0x0, 0xf6, 0x0, 0xe, 0x70, 0x0, 0xe7, 0x0, 0xe, 0x70, 0x0, 0xf6, 0x0, 0x1f, 0x40, 0x3, 0xf2, 0x0, 0x7f, 0x0, 0xb, 0xa0, 0x1, 0xf5, 0x0, 0x7e, 0x0, 0xe, 0x60, 0x0,
+
+ /* U+002A "*" */
+ 0x0, 0x9, 0x50, 0x0, 0x23, 0x9, 0x50, 0x50, 0x3e, 0x9a, 0x7c, 0xc1, 0x0, 0x9f, 0xf5, 0x0, 0x6, 0xed, 0xdd, 0x30, 0x5b, 0x29, 0x54, 0xd1, 0x0, 0x9, 0x50, 0x0, 0x0, 0x4, 0x20, 0x0,
+
+ /* U+002B "+" */
+ 0x0, 0x0, 0xb4, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xf1, 0x13, 0x33, 0xe8, 0x33, 0x30, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0,
+
+ /* U+002C "," */
+ 0x12, 0xd, 0xf1, 0xaf, 0x15, 0xc0, 0x88, 0xc, 0x30,
+
+ /* U+002D "-" */
+ 0x0, 0x0, 0x0, 0xcf, 0xff, 0xf7, 0x33, 0x33, 0x31,
+
+ /* U+002E "." */
+ 0x12, 0xd, 0xf1, 0xad, 0x0,
+
+ /* U+002F "/" */
+ 0x0, 0x0, 0x0, 0x7, 0x20, 0x0, 0x0, 0x3, 0xf1, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x4, 0xf1, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0,
+
+ /* U+0030 "0" */
+ 0x0, 0x8, 0xdf, 0xea, 0x20, 0x0, 0x1, 0xdf, 0x86, 0x7d, 0xf3, 0x0, 0xb, 0xe2, 0x0, 0x0, 0xce, 0x10, 0x3f, 0x50, 0x0, 0x0, 0x1f, 0x70, 0x9e, 0x0, 0x0, 0x0, 0xa, 0xd0, 0xca, 0x0, 0x0, 0x0, 0x7, 0xf0, 0xe8, 0x0, 0x0, 0x0, 0x4, 0xf2, 0xf8, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xe8, 0x0, 0x0, 0x0, 0x4, 0xf2, 0xca, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x9e, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x3f, 0x50, 0x0, 0x0, 0x1f, 0x70, 0xb, 0xe2, 0x0, 0x0, 0xce, 0x10, 0x1, 0xdf, 0x96, 0x7e, 0xf3, 0x0, 0x0, 0x8, 0xdf, 0xea, 0x20, 0x0,
+
+ /* U+0031 "1" */
+ 0xdf, 0xff, 0xe4, 0x55, 0xae, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0,
+
+ /* U+0032 "2" */
+ 0x0, 0x7c, 0xff, 0xea, 0x20, 0x2, 0xdf, 0x96, 0x68, 0xef, 0x20, 0x4c, 0x10, 0x0, 0x1, 0xea, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x0, 0x0, 0xc, 0xb0, 0x0, 0x0, 0x0, 0x4, 0xf5, 0x0, 0x0, 0x0, 0x2, 0xea, 0x0, 0x0, 0x0, 0x2, 0xec, 0x0, 0x0, 0x0, 0x1, 0xdc, 0x0, 0x0, 0x0, 0x1, 0xdd, 0x10, 0x0, 0x0, 0x1, 0xdd, 0x10, 0x0, 0x0, 0x0, 0xce, 0x10, 0x0, 0x0, 0x0, 0xcf, 0x75, 0x55, 0x55, 0x53, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x90,
+
+ /* U+0033 "3" */
+ 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x1, 0x55, 0x55, 0x55, 0x8f, 0x70, 0x0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x0, 0x3, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x20, 0x0, 0x0, 0x0, 0xf, 0xff, 0xb4, 0x0, 0x0, 0x0, 0x33, 0x5b, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x40, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x67, 0x0, 0x0, 0x0, 0xbf, 0x6, 0xfe, 0x96, 0x68, 0xdf, 0x50, 0x2, 0x8d, 0xff, 0xea, 0x30, 0x0,
+
+ /* U+0034 "4" */
+ 0x0, 0x0, 0x0, 0x2, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9e, 0x10, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x2e, 0x90, 0x0, 0x0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0x2a, 0x10, 0x0, 0x4, 0xf6, 0x0, 0x4, 0xf2, 0x0, 0x1, 0xea, 0x0, 0x0, 0x4f, 0x20, 0x0, 0xbe, 0x21, 0x11, 0x15, 0xf3, 0x10, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x44, 0x44, 0x44, 0x47, 0xf5, 0x43, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x20, 0x0,
+
+ /* U+0035 "5" */
+ 0x0, 0xef, 0xff, 0xff, 0xfc, 0x0, 0xf, 0x95, 0x55, 0x55, 0x40, 0x1, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x0, 0x0, 0x0, 0x4, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x11, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xeb, 0x40, 0x0, 0x24, 0x44, 0x47, 0xcf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x3c, 0x20, 0x0, 0x0, 0xaf, 0x13, 0xef, 0xb7, 0x67, 0xdf, 0x60, 0x0, 0x7c, 0xef, 0xeb, 0x40, 0x0,
+
+ /* U+0036 "6" */
+ 0x0, 0x5, 0xbe, 0xfe, 0xb4, 0x0, 0xa, 0xfa, 0x64, 0x6a, 0x60, 0x9, 0xf3, 0x0, 0x0, 0x0, 0x2, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x0, 0x0, 0xc, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x7, 0xdf, 0xfc, 0x50, 0xf, 0x8c, 0xc5, 0x35, 0xaf, 0x80, 0xee, 0xb0, 0x0, 0x0, 0x8f, 0x2d, 0xf2, 0x0, 0x0, 0x0, 0xf7, 0xaf, 0x0, 0x0, 0x0, 0xe, 0x85, 0xf3, 0x0, 0x0, 0x0, 0xf7, 0xd, 0xb0, 0x0, 0x0, 0x8f, 0x20, 0x2e, 0xd6, 0x45, 0xbf, 0x60, 0x0, 0x19, 0xdf, 0xfb, 0x40, 0x0,
+
+ /* U+0037 "7" */
+ 0x5f, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xf6, 0x55, 0x55, 0x55, 0xeb, 0x5f, 0x10, 0x0, 0x0, 0x3f, 0x55, 0xf1, 0x0, 0x0, 0xa, 0xe0, 0x2, 0x0, 0x0, 0x1, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x10, 0x0, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x5, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x60, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0x0, 0x0, 0x0, 0xd, 0xb0, 0x0, 0x0, 0x0, 0x4, 0xf4, 0x0, 0x0, 0x0,
+
+ /* U+0038 "8" */
+ 0x0, 0x5, 0xcf, 0xfe, 0xa3, 0x0, 0x0, 0x9f, 0xa5, 0x46, 0xcf, 0x50, 0x3, 0xf7, 0x0, 0x0, 0xb, 0xe0, 0x7, 0xf0, 0x0, 0x0, 0x4, 0xf3, 0x8, 0xf0, 0x0, 0x0, 0x3, 0xf4, 0x5, 0xf3, 0x0, 0x0, 0x7, 0xf1, 0x0, 0xce, 0x40, 0x0, 0x7f, 0x80, 0x0, 0x1e, 0xff, 0xff, 0xfb, 0x0, 0x2, 0xed, 0x63, 0x33, 0x7e, 0xc0, 0xc, 0xd0, 0x0, 0x0, 0x2, 0xf7, 0xf, 0x70, 0x0, 0x0, 0x0, 0xbc, 0xf, 0x80, 0x0, 0x0, 0x0, 0xcb, 0xb, 0xe1, 0x0, 0x0, 0x4, 0xf7, 0x2, 0xee, 0x85, 0x45, 0xaf, 0xc0, 0x0, 0x18, 0xdf, 0xfe, 0xb6, 0x0,
+
+ /* U+0039 "9" */
+ 0x0, 0x2a, 0xef, 0xea, 0x20, 0x0, 0x4, 0xfc, 0x64, 0x6c, 0xf4, 0x0, 0xe, 0xb0, 0x0, 0x0, 0x9e, 0x10, 0x3f, 0x30, 0x0, 0x0, 0x1f, 0x80, 0x5f, 0x10, 0x0, 0x0, 0xd, 0xd0, 0x4f, 0x20, 0x0, 0x0, 0xf, 0xf0, 0x1f, 0x90, 0x0, 0x0, 0x7f, 0xf1, 0x7, 0xf9, 0x21, 0x28, 0xf7, 0xf2, 0x0, 0x6e, 0xff, 0xfc, 0x35, 0xf1, 0x0, 0x0, 0x23, 0x10, 0x7, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x50, 0x0, 0x0, 0x0, 0x2, 0xdc, 0x0, 0x3, 0xb6, 0x55, 0x9f, 0xc1, 0x0, 0x3, 0xae, 0xff, 0xc6, 0x0, 0x0,
+
+ /* U+003A ":" */
+ 0xbe, 0x1d, 0xf1, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0xd, 0xf1, 0xad, 0x0,
+
+ /* U+003B ";" */
+ 0xbe, 0x1d, 0xf1, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0xd, 0xf1, 0xaf, 0x15, 0xc0, 0x88, 0xc, 0x30,
+
+ /* U+003C "<" */
+ 0x0, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x1, 0x7e, 0xe1, 0x0, 0x3, 0xaf, 0xc5, 0x0, 0x6, 0xdf, 0x93, 0x0, 0x0, 0x9f, 0x70, 0x0, 0x0, 0x0, 0x5d, 0xe8, 0x20, 0x0, 0x0, 0x0, 0x4b, 0xfb, 0x40, 0x0, 0x0, 0x0, 0x28, 0xee, 0x70, 0x0, 0x0, 0x0, 0x5, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+003D "=" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xf1, 0x13, 0x33, 0x33, 0x33, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xf1, 0x13, 0x33, 0x33, 0x33, 0x30,
+
+ /* U+003E ">" */
+ 0x41, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xb4, 0x0, 0x0, 0x0, 0x2, 0x9f, 0xd7, 0x10, 0x0, 0x0, 0x0, 0x6c, 0xf9, 0x30, 0x0, 0x0, 0x0, 0x3c, 0xf1, 0x0, 0x0, 0x5, 0xbf, 0xa0, 0x0, 0x18, 0xee, 0x81, 0x0, 0x3b, 0xfb, 0x50, 0x0, 0x0, 0x89, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+003F "?" */
+ 0x1, 0x7c, 0xff, 0xe9, 0x20, 0x2e, 0xe8, 0x55, 0x8e, 0xe2, 0x5b, 0x10, 0x0, 0x2, 0xfa, 0x0, 0x0, 0x0, 0x0, 0xbd, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x2, 0xf6, 0x0, 0x0, 0x0, 0x2e, 0xc0, 0x0, 0x0, 0x2, 0xec, 0x0, 0x0, 0x0, 0xc, 0xd0, 0x0, 0x0, 0x0, 0x3f, 0x50, 0x0, 0x0, 0x0, 0x27, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x50, 0x0, 0x0, 0x0, 0x5f, 0x40, 0x0,
+
+ /* U+0040 "@" */
+ 0x0, 0x0, 0x4, 0x9d, 0xff, 0xec, 0x82, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xe8, 0x31, 0x1, 0x49, 0xe9, 0x0, 0x0, 0x0, 0x4f, 0x80, 0x0, 0x0, 0x0, 0x1, 0xad, 0x10, 0x0, 0x2f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0xb, 0x80, 0x0, 0x4b, 0xff, 0xc5, 0xf, 0x50, 0xc7, 0x3, 0xf0, 0x0, 0x6f, 0x83, 0x25, 0xd7, 0xf5, 0x3, 0xe0, 0x89, 0x0, 0x2f, 0x50, 0x0, 0x0, 0xdf, 0x50, 0xd, 0x4c, 0x50, 0x9, 0xc0, 0x0, 0x0, 0x4, 0xf5, 0x0, 0x97, 0xe3, 0x0, 0xd8, 0x0, 0x0, 0x0, 0xf, 0x50, 0x7, 0x9f, 0x20, 0xe, 0x60, 0x0, 0x0, 0x0, 0xf5, 0x0, 0x69, 0xe3, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x1f, 0x50, 0x7, 0x9c, 0x50, 0x9, 0xd0, 0x0, 0x0, 0x5, 0xf5, 0x0, 0x96, 0x89, 0x0, 0x2f, 0x70, 0x0, 0x1, 0xdf, 0x50, 0xe, 0x23, 0xf0, 0x0, 0x6f, 0xa4, 0x36, 0xe7, 0xcc, 0x39, 0xb0, 0xb, 0x80, 0x0, 0x4b, 0xff, 0xc5, 0x3, 0xdf, 0xb1, 0x0, 0x2e, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xe8, 0x31, 0x12, 0x5a, 0x40, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9d, 0xff, 0xeb, 0x71, 0x0, 0x0, 0x0,
+
+ /* U+0041 "A" */
+ 0x0, 0x0, 0x0, 0xcf, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xc7, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x1f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x7e, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xe, 0x80, 0x3, 0xf4, 0x0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x3f, 0x40, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x0, 0x7f, 0x33, 0x33, 0x33, 0x33, 0xcc, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x5, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xe, 0xa0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x10,
+
+ /* U+0042 "B" */
+ 0xbf, 0xff, 0xff, 0xfe, 0xb4, 0x0, 0xbd, 0x44, 0x44, 0x46, 0xcf, 0x60, 0xbc, 0x0, 0x0, 0x0, 0xb, 0xf0, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x9, 0xe0, 0xbc, 0x0, 0x0, 0x2, 0x8f, 0x50, 0xbf, 0xff, 0xff, 0xff, 0xf9, 0x0, 0xbd, 0x33, 0x33, 0x34, 0x7d, 0xe2, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xda, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x8e, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xbc, 0x0, 0x0, 0x0, 0x1, 0xeb, 0xbd, 0x44, 0x44, 0x45, 0x7e, 0xf3, 0xbf, 0xff, 0xff, 0xff, 0xd9, 0x20,
+
+ /* U+0043 "C" */
+ 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x3, 0xef, 0xa7, 0x57, 0xbf, 0xc1, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3d, 0x20, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x4e, 0x30, 0x4, 0xef, 0xa7, 0x67, 0xbf, 0xb0, 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0,
+
+ /* U+0044 "D" */
+ 0xbf, 0xff, 0xff, 0xfd, 0xa3, 0x0, 0x0, 0xbd, 0x55, 0x55, 0x58, 0xdf, 0xa0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x5, 0xfb, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x70, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf4, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf6, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf4, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x70, 0xbc, 0x0, 0x0, 0x0, 0x5, 0xfb, 0x0, 0xbd, 0x55, 0x55, 0x58, 0xdf, 0xa0, 0x0, 0xbf, 0xff, 0xff, 0xfd, 0xa3, 0x0, 0x0,
+
+ /* U+0045 "E" */
+ 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xb, 0xd5, 0x55, 0x55, 0x55, 0x40, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0x0, 0xbd, 0x33, 0x33, 0x33, 0x30, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xd5, 0x55, 0x55, 0x55, 0x51, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x30,
+
+ /* U+0046 "F" */
+ 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xbd, 0x55, 0x55, 0x55, 0x54, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x11, 0x11, 0x11, 0x10, 0xbf, 0xff, 0xff, 0xff, 0xf0, 0xbd, 0x44, 0x44, 0x44, 0x40, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0047 "G" */
+ 0x0, 0x0, 0x6c, 0xef, 0xec, 0x60, 0x0, 0x3, 0xef, 0xa7, 0x57, 0xaf, 0xd2, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x2c, 0x40, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x64, 0xe9, 0x0, 0x0, 0x0, 0x0, 0xd, 0x9b, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x6f, 0x30, 0x0, 0x0, 0x0, 0xd, 0x90, 0xdd, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x2f, 0x90, 0x3, 0xef, 0xb7, 0x67, 0xbf, 0xe3, 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x60, 0x0,
+
+ /* U+0048 "H" */
+ 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x11, 0x11, 0x11, 0x11, 0x8f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0x44, 0x44, 0x44, 0x44, 0xaf, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f,
+
+ /* U+0049 "I" */
+ 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
+
+ /* U+004A "J" */
+ 0x0, 0xbf, 0xff, 0xff, 0xd0, 0x3, 0x55, 0x55, 0xbd, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0xbc, 0xb, 0x50, 0x0, 0x1f, 0x80, 0x9f, 0xa5, 0x6d, 0xf1, 0x0, 0x6d, 0xff, 0xb2, 0x0,
+
+ /* U+004B "K" */
+ 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf4, 0xb, 0xc0, 0x0, 0x0, 0x6, 0xf5, 0x0, 0xbc, 0x0, 0x0, 0x4, 0xf7, 0x0, 0xb, 0xc0, 0x0, 0x3, 0xf9, 0x0, 0x0, 0xbc, 0x0, 0x2, 0xea, 0x0, 0x0, 0xb, 0xc0, 0x1, 0xec, 0x0, 0x0, 0x0, 0xbc, 0x1, 0xde, 0x10, 0x0, 0x0, 0xb, 0xc0, 0xcf, 0xf3, 0x0, 0x0, 0x0, 0xbc, 0xbe, 0x3d, 0xe1, 0x0, 0x0, 0xb, 0xff, 0x30, 0x2f, 0xb0, 0x0, 0x0, 0xbf, 0x40, 0x0, 0x5f, 0x80, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x7f, 0x50, 0x0, 0xbc, 0x0, 0x0, 0x0, 0xaf, 0x20, 0xb, 0xc0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x2, 0xeb, 0x0,
+
+ /* U+004C "L" */
+ 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbd, 0x55, 0x55, 0x55, 0x53, 0xbf, 0xff, 0xff, 0xff, 0xf9,
+
+ /* U+004D "M" */
+ 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xdb, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfd, 0xbf, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xdb, 0xef, 0x60, 0x0, 0x0, 0x0, 0x4f, 0xed, 0xbb, 0xbe, 0x0, 0x0, 0x0, 0xd, 0xc9, 0xdb, 0xb2, 0xf7, 0x0, 0x0, 0x5, 0xf3, 0x9d, 0xbb, 0x9, 0xf1, 0x0, 0x0, 0xda, 0x9, 0xdb, 0xb0, 0x1e, 0x90, 0x0, 0x6f, 0x10, 0x9d, 0xbb, 0x0, 0x6f, 0x20, 0xe, 0x80, 0x9, 0xdb, 0xb0, 0x0, 0xda, 0x8, 0xe0, 0x0, 0x9d, 0xbb, 0x0, 0x4, 0xf4, 0xf6, 0x0, 0x9, 0xdb, 0xb0, 0x0, 0xb, 0xfd, 0x0, 0x0, 0x9d, 0xbb, 0x0, 0x0, 0x2f, 0x40, 0x0, 0x9, 0xdb, 0xb0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x9d, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xd0,
+
+ /* U+004E "N" */
+ 0xbd, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbf, 0xa0, 0x0, 0x0, 0x0, 0x7f, 0xbf, 0xf6, 0x0, 0x0, 0x0, 0x7f, 0xbd, 0xef, 0x30, 0x0, 0x0, 0x7f, 0xbc, 0x4f, 0xd1, 0x0, 0x0, 0x7f, 0xbc, 0x7, 0xfb, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0xbf, 0x70, 0x0, 0x7f, 0xbc, 0x0, 0x1e, 0xf3, 0x0, 0x7f, 0xbc, 0x0, 0x3, 0xfe, 0x10, 0x7f, 0xbc, 0x0, 0x0, 0x7f, 0xc0, 0x7f, 0xbc, 0x0, 0x0, 0xa, 0xf8, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0xdf, 0xcf, 0xbc, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xbc, 0x0, 0x0, 0x0, 0x6, 0xff, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x9f,
+
+ /* U+004F "O" */
+ 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x0, 0x3, 0xef, 0xa6, 0x57, 0xbf, 0xc1, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xa0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x2b, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xaf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xab, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xa0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0x3, 0xef, 0xa7, 0x67, 0xcf, 0xc1, 0x0, 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x0,
+
+ /* U+0050 "P" */
+ 0xbf, 0xff, 0xff, 0xec, 0x60, 0x0, 0xbd, 0x55, 0x55, 0x6a, 0xfc, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x3f, 0x90, 0xbc, 0x0, 0x0, 0x0, 0x8, 0xf0, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf1, 0xbc, 0x0, 0x0, 0x0, 0x1e, 0xb0, 0xbc, 0x11, 0x11, 0x26, 0xee, 0x20, 0xbf, 0xff, 0xff, 0xff, 0xa1, 0x0, 0xbd, 0x44, 0x44, 0x30, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0051 "Q" */
+ 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x0, 0x0, 0x3e, 0xfa, 0x65, 0x7b, 0xfc, 0x10, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x0, 0x2, 0xfa, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xa0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xa0, 0xbd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x70, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0xd, 0xd0, 0x0, 0x0, 0x0, 0x2, 0xfa, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0x0, 0x3e, 0xfa, 0x76, 0x7c, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x7c, 0xff, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf7, 0x0, 0x0, 0x50, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x81, 0x18, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x5, 0xef, 0xfe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x20, 0x0,
+
+ /* U+0052 "R" */
+ 0xbf, 0xff, 0xff, 0xec, 0x60, 0x0, 0xbd, 0x55, 0x55, 0x6a, 0xfc, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x3f, 0x90, 0xbc, 0x0, 0x0, 0x0, 0x8, 0xf0, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf1, 0xbc, 0x0, 0x0, 0x0, 0x1e, 0xb0, 0xbc, 0x11, 0x11, 0x26, 0xee, 0x20, 0xbf, 0xff, 0xff, 0xff, 0xa1, 0x0, 0xbd, 0x44, 0x43, 0x4f, 0x70, 0x0, 0xbc, 0x0, 0x0, 0x7, 0xf2, 0x0, 0xbc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x2f, 0x70, 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf2,
+
+ /* U+0053 "S" */
+ 0x0, 0x6, 0xcf, 0xfe, 0xb6, 0x0, 0x0, 0xbf, 0x95, 0x46, 0xaf, 0x90, 0x6, 0xf4, 0x0, 0x0, 0x1, 0x20, 0xa, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x6, 0xcf, 0xfe, 0x92, 0x0, 0x0, 0x0, 0x1, 0x5a, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf4, 0xb, 0x50, 0x0, 0x0, 0x9, 0xf1, 0x9, 0xfd, 0x85, 0x57, 0xcf, 0x50, 0x0, 0x29, 0xdf, 0xfe, 0xa3, 0x0,
+
+ /* U+0054 "T" */
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x45, 0x55, 0x5f, 0xa5, 0x55, 0x52, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0,
+
+ /* U+0055 "U" */
+ 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xcb, 0x0, 0x0, 0x0, 0x0, 0xd9, 0xad, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x6f, 0x30, 0x0, 0x0, 0x5, 0xf3, 0xe, 0xd1, 0x0, 0x0, 0x2e, 0xb0, 0x3, 0xee, 0x96, 0x69, 0xfd, 0x10, 0x0, 0x19, 0xdf, 0xfd, 0x80, 0x0,
+
+ /* U+0056 "V" */
+ 0xbd, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcb, 0x5f, 0x40, 0x0, 0x0, 0x0, 0x3, 0xf4, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x7, 0xf1, 0x0, 0x0, 0x0, 0x1f, 0x70, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x10, 0x0, 0xae, 0x0, 0x0, 0x0, 0xda, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x4, 0xf3, 0x0, 0x0, 0xd, 0xb0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x6, 0xf2, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x8f, 0x0, 0x0, 0x0, 0x0, 0x9e, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x65, 0xf2, 0x0, 0x0, 0x0, 0x0, 0xc, 0xcc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xee, 0x0, 0x0, 0x0,
+
+ /* U+0057 "W" */
+ 0x1f, 0x60, 0x0, 0x0, 0x0, 0xaf, 0x0, 0x0, 0x0, 0x1, 0xf5, 0xc, 0xb0, 0x0, 0x0, 0x0, 0xff, 0x50, 0x0, 0x0, 0x6, 0xf0, 0x7, 0xf1, 0x0, 0x0, 0x5, 0xfd, 0xa0, 0x0, 0x0, 0xb, 0xb0, 0x2, 0xf5, 0x0, 0x0, 0xa, 0xb7, 0xf0, 0x0, 0x0, 0xf, 0x60, 0x0, 0xda, 0x0, 0x0, 0xf, 0x62, 0xf4, 0x0, 0x0, 0x5f, 0x10, 0x0, 0x8f, 0x0, 0x0, 0x4f, 0x10, 0xd9, 0x0, 0x0, 0xac, 0x0, 0x0, 0x3f, 0x40, 0x0, 0x9b, 0x0, 0x8e, 0x0, 0x0, 0xf7, 0x0, 0x0, 0xe, 0x90, 0x0, 0xe6, 0x0, 0x2f, 0x30, 0x4, 0xf2, 0x0, 0x0, 0x9, 0xe0, 0x4, 0xf1, 0x0, 0xd, 0x80, 0x9, 0xd0, 0x0, 0x0, 0x4, 0xf3, 0x9, 0xc0, 0x0, 0x8, 0xd0, 0xe, 0x80, 0x0, 0x0, 0x0, 0xf8, 0xe, 0x70, 0x0, 0x3, 0xf3, 0x3f, 0x30, 0x0, 0x0, 0x0, 0xad, 0x3f, 0x20, 0x0, 0x0, 0xe8, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xbc, 0x0, 0x0, 0x0, 0x9d, 0xd9, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0, 0x0, 0x4f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf2, 0x0, 0x0, 0x0, 0xe, 0xe0, 0x0, 0x0,
+
+ /* U+0058 "X" */
+ 0x1e, 0xb0, 0x0, 0x0, 0x0, 0x8f, 0x20, 0x4f, 0x60, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x9f, 0x20, 0x0, 0xd, 0xb0, 0x0, 0x0, 0xec, 0x0, 0x9, 0xe1, 0x0, 0x0, 0x4, 0xf7, 0x4, 0xf5, 0x0, 0x0, 0x0, 0x9, 0xf4, 0xea, 0x0, 0x0, 0x0, 0x0, 0xd, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xcf, 0x50, 0x0, 0x0, 0x0, 0xd, 0xc0, 0xbe, 0x10, 0x0, 0x0, 0x8, 0xf2, 0x1, 0xeb, 0x0, 0x0, 0x4, 0xf6, 0x0, 0x5, 0xf6, 0x0, 0x0, 0xeb, 0x0, 0x0, 0xa, 0xf2, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x1e, 0xb0, 0x5f, 0x60, 0x0, 0x0, 0x0, 0x4f, 0x60,
+
+ /* U+0059 "Y" */
+ 0xbd, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x62, 0xf7, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x8, 0xf1, 0x0, 0x0, 0x3, 0xf4, 0x0, 0x1e, 0x90, 0x0, 0x0, 0xca, 0x0, 0x0, 0x6f, 0x20, 0x0, 0x5f, 0x20, 0x0, 0x0, 0xdb, 0x0, 0xe, 0x80, 0x0, 0x0, 0x4, 0xf4, 0x8, 0xe0, 0x0, 0x0, 0x0, 0xb, 0xd2, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xed, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x0,
+
+ /* U+005A "Z" */
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x55, 0x55, 0x55, 0x55, 0x6f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x1, 0xeb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x65, 0x55, 0x55, 0x55, 0x52, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60,
+
+ /* U+005B "[" */
+ 0xbf, 0xff, 0xbc, 0x33, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbc, 0x33, 0xbf, 0xff,
+
+ /* U+005C "\\" */
+ 0x45, 0x0, 0x0, 0x0, 0x5, 0xe0, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xa9, 0x0, 0x0, 0x0, 0x5, 0xe0, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x9a, 0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0x4, 0xf0,
+
+ /* U+005D "]" */
+ 0x9f, 0xff, 0x12, 0x37, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x12, 0x37, 0xf1, 0x9f, 0xff, 0x10,
+
+ /* U+005E "^" */
+ 0x0, 0x0, 0x73, 0x0, 0x0, 0x0, 0x4f, 0xc0, 0x0, 0x0, 0xa, 0x7e, 0x30, 0x0, 0x1, 0xf1, 0x89, 0x0, 0x0, 0x7a, 0x2, 0xf0, 0x0, 0xe, 0x40, 0xb, 0x60, 0x5, 0xd0, 0x0, 0x5d, 0x0, 0xb7, 0x0, 0x0, 0xe3, 0x2f, 0x10, 0x0, 0x8, 0xa0,
+
+ /* U+005F "_" */
+ 0xff, 0xff, 0xff, 0xff, 0xff,
+
+ /* U+0060 "`" */
+ 0x7, 0x60, 0x0, 0x2, 0xda, 0x0, 0x0, 0xb, 0xb0,
+
+ /* U+0061 "a" */
+ 0x4, 0xae, 0xff, 0xb3, 0x6, 0xfb, 0x64, 0x6d, 0xf3, 0x14, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, 0x8, 0xe0, 0x6c, 0xef, 0xff, 0xfe, 0x7f, 0x73, 0x22, 0x29, 0xed, 0x90, 0x0, 0x0, 0x8e, 0xd9, 0x0, 0x0, 0xd, 0xe7, 0xf7, 0x11, 0x4c, 0xde, 0x6, 0xdf, 0xfc, 0x57, 0xe0,
+
+ /* U+0062 "b" */
+ 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x61, 0x9e, 0xfe, 0x91, 0x0, 0xf, 0x9e, 0xb6, 0x47, 0xee, 0x30, 0xf, 0xf7, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x60, 0x0, 0x0, 0x0, 0xca, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0xf8, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0x8e, 0xb6, 0x58, 0xee, 0x20, 0xf, 0x52, 0x9e, 0xfe, 0x91, 0x0,
+
+ /* U+0063 "c" */
+ 0x0, 0x4, 0xbe, 0xfe, 0x91, 0x0, 0x7, 0xfb, 0x64, 0x7e, 0xe1, 0x4, 0xf7, 0x0, 0x0, 0x1a, 0x20, 0xcc, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf8, 0x0, 0x0, 0x1a, 0x20, 0x7, 0xfb, 0x65, 0x8e, 0xd1, 0x0, 0x3, 0xbe, 0xfe, 0x91, 0x0,
+
+ /* U+0064 "d" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xd9, 0x0, 0x8f, 0xb5, 0x47, 0xea, 0xd9, 0x5, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0xc, 0xc0, 0x0, 0x0, 0x3, 0xf9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xd9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0xc, 0xc0, 0x0, 0x0, 0x4, 0xf9, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0x0, 0x8f, 0xb6, 0x58, 0xea, 0xc9, 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xc9,
+
+ /* U+0065 "e" */
+ 0x0, 0x5, 0xcf, 0xfc, 0x50, 0x0, 0x0, 0x8f, 0x95, 0x49, 0xf9, 0x0, 0x4, 0xf4, 0x0, 0x0, 0x4f, 0x50, 0xc, 0xa0, 0x0, 0x0, 0x9, 0xc0, 0xf, 0x60, 0x0, 0x0, 0x4, 0xf0, 0x1f, 0xfe, 0xee, 0xee, 0xef, 0xf2, 0xf, 0x71, 0x11, 0x11, 0x11, 0x10, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf7, 0x0, 0x0, 0x5, 0x0, 0x0, 0x7f, 0xc6, 0x56, 0xcf, 0x30, 0x0, 0x3, 0xbe, 0xfe, 0xa2, 0x0,
+
+ /* U+0066 "f" */
+ 0x0, 0x7, 0xef, 0xd3, 0x0, 0x6f, 0x74, 0x72, 0x0, 0xbb, 0x0, 0x0, 0x0, 0xc9, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xd0, 0x23, 0xdb, 0x33, 0x30, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0,
+
+ /* U+0067 "g" */
+ 0x0, 0x4, 0xbf, 0xfd, 0x70, 0xab, 0x0, 0x8f, 0xa4, 0x35, 0xcc, 0xab, 0x4, 0xf6, 0x0, 0x0, 0xb, 0xfb, 0xc, 0xc0, 0x0, 0x0, 0x1, 0xfb, 0xf, 0x70, 0x0, 0x0, 0x0, 0xcb, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xbb, 0xf, 0x70, 0x0, 0x0, 0x0, 0xcb, 0xc, 0xc0, 0x0, 0x0, 0x2, 0xfb, 0x4, 0xf7, 0x0, 0x0, 0xc, 0xfb, 0x0, 0x8f, 0xb6, 0x57, 0xeb, 0xbb, 0x0, 0x4, 0xbf, 0xfd, 0x70, 0xba, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x50, 0x0, 0x0, 0x6, 0xf2, 0x3, 0xfd, 0x85, 0x46, 0xaf, 0x80, 0x0, 0x18, 0xcf, 0xfe, 0xb5, 0x0,
+
+ /* U+0068 "h" */
+ 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x63, 0xbe, 0xfd, 0x80, 0x0, 0xfa, 0xfa, 0x65, 0x9f, 0xb0, 0xf, 0xf4, 0x0, 0x0, 0x6f, 0x40, 0xfb, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x70, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0,
+
+ /* U+0069 "i" */
+ 0x2f, 0x83, 0xf9, 0x0, 0x0, 0x0, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60,
+
+ /* U+006A "j" */
+ 0x0, 0x1, 0xe9, 0x0, 0x1, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe7, 0x0, 0x0, 0xf6, 0x56, 0x4b, 0xf1, 0x6e, 0xfd, 0x40,
+
+ /* U+006B "k" */
+ 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0xcd, 0x10, 0xf6, 0x0, 0x1, 0xcd, 0x10, 0xf, 0x60, 0x1, 0xdd, 0x10, 0x0, 0xf6, 0x1, 0xdd, 0x10, 0x0, 0xf, 0x62, 0xef, 0x20, 0x0, 0x0, 0xf9, 0xec, 0xfb, 0x0, 0x0, 0xf, 0xfc, 0x5, 0xf7, 0x0, 0x0, 0xfc, 0x0, 0x8, 0xf3, 0x0, 0xf, 0x60, 0x0, 0xc, 0xe1, 0x0, 0xf6, 0x0, 0x0, 0x1e, 0xb0, 0xf, 0x60, 0x0, 0x0, 0x4f, 0x70,
+
+ /* U+006C "l" */
+ 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60,
+
+ /* U+006D "m" */
+ 0xf, 0x53, 0xbf, 0xfd, 0x60, 0x4, 0xcf, 0xfc, 0x50, 0x0, 0xf9, 0xf9, 0x56, 0xbf, 0x77, 0xf9, 0x56, 0xbf, 0x70, 0xf, 0xf4, 0x0, 0x0, 0xaf, 0xf4, 0x0, 0x0, 0xbf, 0x0, 0xfb, 0x0, 0x0, 0x3, 0xfa, 0x0, 0x0, 0x3, 0xf3, 0xf, 0x70, 0x0, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x1f, 0x50, 0xf6, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x1, 0xf5, 0xf, 0x60, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x1f, 0x50, 0xf6, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x1, 0xf5, 0xf, 0x60, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x1f, 0x50, 0xf6, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x1, 0xf5, 0xf, 0x60, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x1f, 0x50,
+
+ /* U+006E "n" */
+ 0xf, 0x53, 0xbe, 0xfd, 0x80, 0x0, 0xf9, 0xfa, 0x65, 0x9f, 0xb0, 0xf, 0xf4, 0x0, 0x0, 0x6f, 0x40, 0xfb, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x70, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0,
+
+ /* U+006F "o" */
+ 0x0, 0x4, 0xbf, 0xfd, 0x81, 0x0, 0x0, 0x8f, 0xb5, 0x47, 0xee, 0x20, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xd0, 0xc, 0xc0, 0x0, 0x0, 0x3, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xd9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xb, 0xc0, 0x0, 0x0, 0x4, 0xf4, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xc0, 0x0, 0x7f, 0xb6, 0x58, 0xee, 0x20, 0x0, 0x4, 0xbf, 0xfd, 0x81, 0x0,
+
+ /* U+0070 "p" */
+ 0xf, 0x52, 0xae, 0xfe, 0x91, 0x0, 0xf, 0x8e, 0xb6, 0x47, 0xee, 0x30, 0xf, 0xf7, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x60, 0x0, 0x0, 0x0, 0xca, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0xf8, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0x8e, 0xb6, 0x58, 0xee, 0x20, 0xf, 0x61, 0x9e, 0xfe, 0x91, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0071 "q" */
+ 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xc9, 0x0, 0x8f, 0xb5, 0x47, 0xea, 0xc9, 0x5, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0xc, 0xc0, 0x0, 0x0, 0x3, 0xf9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xd9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0xc, 0xc0, 0x0, 0x0, 0x4, 0xf9, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0x0, 0x8f, 0xb6, 0x58, 0xea, 0xd9, 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9,
+
+ /* U+0072 "r" */
+ 0xf, 0x53, 0xbf, 0x40, 0xf9, 0xf9, 0x51, 0xf, 0xf4, 0x0, 0x0, 0xfb, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0,
+
+ /* U+0073 "s" */
+ 0x0, 0x7d, 0xff, 0xd9, 0x20, 0x9, 0xf8, 0x44, 0x7d, 0x80, 0xf, 0x60, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0xb, 0xf8, 0x30, 0x0, 0x0, 0x0, 0x8e, 0xff, 0xc7, 0x0, 0x0, 0x0, 0x14, 0x8f, 0xb0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x3, 0x0, 0x0, 0x6, 0xf1, 0x4f, 0xc7, 0x55, 0x8f, 0xa0, 0x4, 0xae, 0xff, 0xc7, 0x0,
+
+ /* U+0074 "t" */
+ 0x0, 0x65, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xd0, 0x23, 0xdb, 0x33, 0x30, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x6f, 0x84, 0x82, 0x0, 0x8, 0xef, 0xc3,
+
+ /* U+0075 "u" */
+ 0x2f, 0x40, 0x0, 0x0, 0xf, 0x72, 0xf4, 0x0, 0x0, 0x0, 0xf7, 0x2f, 0x40, 0x0, 0x0, 0xf, 0x72, 0xf4, 0x0, 0x0, 0x0, 0xf7, 0x2f, 0x40, 0x0, 0x0, 0xf, 0x72, 0xf4, 0x0, 0x0, 0x0, 0xf7, 0x1f, 0x50, 0x0, 0x0, 0xf, 0x70, 0xf7, 0x0, 0x0, 0x4, 0xf7, 0xb, 0xe1, 0x0, 0x0, 0xcf, 0x70, 0x3f, 0xd7, 0x57, 0xda, 0xe7, 0x0, 0x2b, 0xef, 0xd7, 0xe, 0x70,
+
+ /* U+0076 "v" */
+ 0xcb, 0x0, 0x0, 0x0, 0xc, 0x95, 0xf2, 0x0, 0x0, 0x3, 0xf2, 0xe, 0x80, 0x0, 0x0, 0xac, 0x0, 0x8e, 0x0, 0x0, 0x1f, 0x50, 0x1, 0xf6, 0x0, 0x7, 0xe0, 0x0, 0xa, 0xc0, 0x0, 0xe7, 0x0, 0x0, 0x3f, 0x30, 0x5f, 0x10, 0x0, 0x0, 0xca, 0xc, 0xa0, 0x0, 0x0, 0x6, 0xf4, 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x50, 0x0, 0x0,
+
+ /* U+0077 "w" */
+ 0xab, 0x0, 0x0, 0x0, 0xf9, 0x0, 0x0, 0x1, 0xf3, 0x4f, 0x10, 0x0, 0x5, 0xfe, 0x0, 0x0, 0x6, 0xd0, 0xe, 0x60, 0x0, 0xb, 0xaf, 0x50, 0x0, 0xc, 0x80, 0x9, 0xc0, 0x0, 0x1f, 0x3a, 0xa0, 0x0, 0x2f, 0x20, 0x3, 0xf1, 0x0, 0x6d, 0x4, 0xf1, 0x0, 0x7c, 0x0, 0x0, 0xd7, 0x0, 0xc7, 0x0, 0xe6, 0x0, 0xd6, 0x0, 0x0, 0x8d, 0x2, 0xf1, 0x0, 0x8c, 0x3, 0xf1, 0x0, 0x0, 0x2f, 0x28, 0xc0, 0x0, 0x3f, 0x19, 0xb0, 0x0, 0x0, 0xc, 0x8e, 0x60, 0x0, 0xd, 0x7e, 0x50, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0x1, 0xfa, 0x0, 0x0, 0x1, 0xf9, 0x0, 0x0,
+
+ /* U+0078 "x" */
+ 0x1e, 0x80, 0x0, 0x0, 0xdb, 0x0, 0x5f, 0x40, 0x0, 0x9e, 0x10, 0x0, 0x9e, 0x10, 0x5f, 0x30, 0x0, 0x0, 0xcb, 0x2e, 0x70, 0x0, 0x0, 0x2, 0xfe, 0xb0, 0x0, 0x0, 0x0, 0xa, 0xf5, 0x0, 0x0, 0x0, 0x5, 0xfc, 0xe1, 0x0, 0x0, 0x1, 0xe8, 0xd, 0xb0, 0x0, 0x0, 0xcc, 0x0, 0x2f, 0x70, 0x0, 0x8f, 0x20, 0x0, 0x6f, 0x30, 0x4f, 0x50, 0x0, 0x0, 0xad, 0x0,
+
+ /* U+0079 "y" */
+ 0xc, 0xb0, 0x0, 0x0, 0x0, 0xc9, 0x5, 0xf2, 0x0, 0x0, 0x3, 0xf2, 0x0, 0xe9, 0x0, 0x0, 0xa, 0xb0, 0x0, 0x7f, 0x0, 0x0, 0x1f, 0x40, 0x0, 0x1f, 0x60, 0x0, 0x8d, 0x0, 0x0, 0x9, 0xd0, 0x0, 0xe7, 0x0, 0x0, 0x2, 0xf4, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xbb, 0xc, 0x90, 0x0, 0x0, 0x0, 0x5f, 0x5f, 0x20, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x3c, 0x55, 0xdd, 0x0, 0x0, 0x0, 0x1a, 0xff, 0xb1, 0x0, 0x0, 0x0,
+
+ /* U+007A "z" */
+ 0xf, 0xff, 0xff, 0xff, 0xf4, 0x3, 0x33, 0x33, 0x3d, 0xd0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0x0, 0x0, 0x3, 0xf5, 0x0, 0x0, 0x0, 0x1e, 0x90, 0x0, 0x0, 0x0, 0xbd, 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x0, 0x1, 0xe9, 0x0, 0x0, 0x0, 0xb, 0xe4, 0x33, 0x33, 0x31, 0x2f, 0xff, 0xff, 0xff, 0xf6,
+
+ /* U+007B "{" */
+ 0x0, 0x5d, 0xf4, 0x0, 0xfb, 0x40, 0x3, 0xf4, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x6, 0xf2, 0x0, 0xcf, 0xb0, 0x0, 0x28, 0xf1, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x0, 0xfb, 0x41, 0x0, 0x5d, 0xf4,
+
+ /* U+007C "|" */
+ 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
+
+ /* U+007D "}" */
+ 0x9f, 0xb2, 0x0, 0x25, 0xeb, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x7f, 0x20, 0x0, 0x1e, 0xf7, 0x0, 0x6f, 0x51, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x25, 0xeb, 0x0, 0x9f, 0xb2, 0x0,
+
+ /* U+007E "~" */
+ 0x9, 0xfd, 0x50, 0x0, 0xc3, 0x6c, 0x36, 0xe8, 0x4, 0xe0, 0xb4, 0x0, 0x2c, 0xff, 0x50, 0x10, 0x0, 0x0, 0x20, 0x0,
+
+ /* U+0401 "Ё" */
+ 0x0, 0x4e, 0x20, 0xba, 0x0, 0x0, 0x3, 0xb1, 0x8, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xae, 0x55, 0x55, 0x55, 0x55, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xf1, 0xa, 0xe3, 0x33, 0x33, 0x33, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xae, 0x55, 0x55, 0x55, 0x55, 0x1a, 0xff, 0xff, 0xff, 0xff, 0xf4,
+
+ /* U+0410 "А" */
+ 0x0, 0x0, 0x0, 0x8f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf5, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xca, 0xc, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x6f, 0x10, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x0, 0x8, 0xe0, 0x0, 0x0, 0x0, 0x8f, 0x0, 0x0, 0x2f, 0x50, 0x0, 0x0, 0xe, 0x80, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x5, 0xf3, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x3f, 0x63, 0x33, 0x33, 0x33, 0x8f, 0x10, 0xa, 0xe0, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x1, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0x7f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x50,
+
+ /* U+0411 "Б" */
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0x90, 0xad, 0x44, 0x44, 0x44, 0x44, 0x20, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xc6, 0x0, 0xad, 0x33, 0x33, 0x35, 0xaf, 0xa0, 0xad, 0x0, 0x0, 0x0, 0x7, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x0, 0x0, 0x0, 0x8, 0xf2, 0xad, 0x33, 0x33, 0x35, 0xaf, 0x80, 0xaf, 0xff, 0xff, 0xfe, 0xb4, 0x0,
+
+ /* U+0412 "В" */
+ 0xaf, 0xff, 0xff, 0xfe, 0xa2, 0x0, 0xad, 0x33, 0x33, 0x36, 0xdf, 0x30, 0xad, 0x0, 0x0, 0x0, 0x1e, 0xb0, 0xad, 0x0, 0x0, 0x0, 0x9, 0xe0, 0xad, 0x0, 0x0, 0x0, 0x9, 0xe0, 0xad, 0x0, 0x0, 0x0, 0xd, 0xa0, 0xad, 0x0, 0x0, 0x3, 0xbd, 0x10, 0xaf, 0xff, 0xff, 0xff, 0xf5, 0x0, 0xad, 0x33, 0x33, 0x34, 0x7e, 0xa0, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf5, 0xad, 0x0, 0x0, 0x0, 0x0, 0xd9, 0xad, 0x0, 0x0, 0x0, 0x0, 0xe9, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf6, 0xad, 0x33, 0x33, 0x34, 0x8f, 0xc0, 0xaf, 0xff, 0xff, 0xff, 0xc7, 0x0,
+
+ /* U+0413 "Г" */
+ 0xaf, 0xff, 0xff, 0xff, 0xf4, 0xad, 0x55, 0x55, 0x55, 0x51, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0414 "Д" */
+ 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x5, 0xf5, 0x55, 0x55, 0x58, 0xf2, 0x0, 0x0, 0x6, 0xe0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x7, 0xd0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x8, 0xc0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x9, 0xb0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xb, 0xa0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x3f, 0x20, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x49, 0xf8, 0x55, 0x55, 0x55, 0x58, 0xf6, 0x51, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf3, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf3, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf3, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40,
+
+ /* U+0415 "Е" */
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xa, 0xe5, 0x55, 0x55, 0x55, 0x50, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0x10, 0xae, 0x33, 0x33, 0x33, 0x30, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe5, 0x55, 0x55, 0x55, 0x51, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x40,
+
+ /* U+0416 "Ж" */
+ 0xd, 0xb0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x8, 0xf1, 0x4, 0xf5, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x2f, 0x70, 0x0, 0xad, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0xbd, 0x0, 0x0, 0x1f, 0x70, 0x0, 0x9, 0xd0, 0x0, 0x4, 0xf4, 0x0, 0x0, 0x7, 0xf1, 0x0, 0x9, 0xd0, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0xda, 0x0, 0x9, 0xd0, 0x0, 0x7f, 0x10, 0x0, 0x0, 0x0, 0x3f, 0x41, 0x1a, 0xd1, 0x12, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x74, 0x4b, 0xe4, 0x45, 0xf9, 0x0, 0x0, 0x0, 0x1, 0xfb, 0x0, 0x9, 0xd0, 0x0, 0x7f, 0x40, 0x0, 0x0, 0xa, 0xf1, 0x0, 0x9, 0xd0, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x4f, 0x60, 0x0, 0x9, 0xd0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0xec, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x9f, 0x20, 0x9, 0xf2, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0xe, 0xc0, 0x3f, 0x80, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x4, 0xf6,
+
+ /* U+0417 "З" */
+ 0x0, 0x15, 0x9a, 0x96, 0x10, 0x0, 0x7, 0xff, 0xdb, 0xcf, 0xf6, 0x0, 0x7, 0x71, 0x0, 0x1, 0xaf, 0x40, 0x0, 0x0, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x90, 0x0, 0x0, 0x0, 0x3, 0xbe, 0x10, 0x0, 0xb, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x2, 0x33, 0x35, 0xaf, 0x50, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf5, 0x9, 0x10, 0x0, 0x0, 0x1c, 0xf1, 0x1c, 0xfa, 0x64, 0x59, 0xef, 0x40, 0x0, 0x5b, 0xff, 0xfe, 0x92, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
+
+ /* U+0418 "И" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x4f, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x1e, 0xff, 0x2a, 0xd0, 0x0, 0x0, 0xb, 0xe6, 0xf2, 0xad, 0x0, 0x0, 0x7, 0xf4, 0x5f, 0x2a, 0xd0, 0x0, 0x3, 0xf9, 0x5, 0xf2, 0xad, 0x0, 0x0, 0xdc, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0xaf, 0x20, 0x5, 0xf2, 0xad, 0x0, 0x5f, 0x60, 0x0, 0x5f, 0x2a, 0xd0, 0x2f, 0xa0, 0x0, 0x5, 0xf2, 0xad, 0xc, 0xe1, 0x0, 0x0, 0x5f, 0x2a, 0xd8, 0xf3, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0xf8, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xfc, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0x20, 0x0, 0x0, 0x0, 0x5f, 0x20,
+
+ /* U+0419 "Й" */
+ 0x0, 0x8, 0x0, 0x0, 0x53, 0x0, 0x0, 0x0, 0xc8, 0x0, 0x3e, 0x30, 0x0, 0x0, 0x1, 0xad, 0xec, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x4f, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x1e, 0xff, 0x2a, 0xd0, 0x0, 0x0, 0xb, 0xe6, 0xf2, 0xad, 0x0, 0x0, 0x7, 0xf4, 0x5f, 0x2a, 0xd0, 0x0, 0x3, 0xf9, 0x5, 0xf2, 0xad, 0x0, 0x0, 0xdc, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0xaf, 0x20, 0x5, 0xf2, 0xad, 0x0, 0x5f, 0x60, 0x0, 0x5f, 0x2a, 0xd0, 0x2f, 0xa0, 0x0, 0x5, 0xf2, 0xad, 0xc, 0xe1, 0x0, 0x0, 0x5f, 0x2a, 0xd8, 0xf3, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0xf8, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xfc, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0x20, 0x0, 0x0, 0x0, 0x5f, 0x20,
+
+ /* U+041A "К" */
+ 0xac, 0x0, 0x0, 0x0, 0x9, 0xe1, 0xac, 0x0, 0x0, 0x0, 0x4f, 0x40, 0xac, 0x0, 0x0, 0x1, 0xe9, 0x0, 0xac, 0x0, 0x0, 0xa, 0xd0, 0x0, 0xac, 0x0, 0x0, 0x5f, 0x30, 0x0, 0xac, 0x0, 0x1, 0xf7, 0x0, 0x0, 0xad, 0x11, 0x1b, 0xc0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0x50, 0x0, 0x0, 0xad, 0x44, 0x4d, 0xd0, 0x0, 0x0, 0xac, 0x0, 0x2, 0xfa, 0x0, 0x0, 0xac, 0x0, 0x0, 0x5f, 0x50, 0x0, 0xac, 0x0, 0x0, 0xa, 0xf2, 0x0, 0xac, 0x0, 0x0, 0x0, 0xdc, 0x0, 0xac, 0x0, 0x0, 0x0, 0x3f, 0x80, 0xac, 0x0, 0x0, 0x0, 0x6, 0xf4,
+
+ /* U+041B "Л" */
+ 0x0, 0x2, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x3, 0xf6, 0x55, 0x55, 0x56, 0xf5, 0x0, 0x3, 0xf1, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x6, 0xe0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x7, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x9, 0xb0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0xb, 0x90, 0x0, 0x0, 0x2, 0xf5, 0x0, 0xf, 0x60, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x6f, 0x20, 0x0, 0x0, 0x2, 0xf5, 0x58, 0xfb, 0x0, 0x0, 0x0, 0x2, 0xf5, 0xbf, 0xb1, 0x0, 0x0, 0x0, 0x2, 0xf5,
+
+ /* U+041C "М" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xea, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x2, 0xfe, 0xaf, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xea, 0xef, 0x70, 0x0, 0x0, 0x0, 0x3f, 0xee, 0xac, 0x9f, 0x10, 0x0, 0x0, 0xb, 0xd8, 0xea, 0xc1, 0xf9, 0x0, 0x0, 0x4, 0xf4, 0x8e, 0xac, 0x7, 0xf2, 0x0, 0x0, 0xcb, 0x8, 0xea, 0xc0, 0xe, 0xa0, 0x0, 0x5f, 0x20, 0x8e, 0xac, 0x0, 0x5f, 0x30, 0xd, 0x90, 0x8, 0xea, 0xc0, 0x0, 0xcb, 0x6, 0xf1, 0x0, 0x8e, 0xac, 0x0, 0x3, 0xf5, 0xe7, 0x0, 0x8, 0xea, 0xc0, 0x0, 0xa, 0xfe, 0x0, 0x0, 0x8e, 0xac, 0x0, 0x0, 0x1f, 0x50, 0x0, 0x8, 0xea, 0xc0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x8e, 0xac, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xe0,
+
+ /* U+041D "Н" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x11, 0x11, 0x11, 0x11, 0x7f, 0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xae, 0x44, 0x44, 0x44, 0x44, 0x9f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10,
+
+ /* U+041E "О" */
+ 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0, 0x0, 0x2, 0xdf, 0xb7, 0x57, 0xbf, 0xd2, 0x0, 0x2, 0xed, 0x20, 0x0, 0x0, 0x3d, 0xe2, 0x0, 0xce, 0x10, 0x0, 0x0, 0x0, 0x1e, 0xc0, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x49, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0xca, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xcd, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0xca, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x40, 0xce, 0x10, 0x0, 0x0, 0x0, 0x1e, 0xc0, 0x2, 0xed, 0x20, 0x0, 0x0, 0x3d, 0xe2, 0x0, 0x2, 0xdf, 0xb7, 0x67, 0xbf, 0xd2, 0x0, 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0, 0x0,
+
+ /* U+041F "П" */
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0xe5, 0x55, 0x55, 0x55, 0x58, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x20,
+
+ /* U+0420 "Р" */
+ 0xaf, 0xff, 0xff, 0xfc, 0x70, 0x0, 0xae, 0x55, 0x55, 0x6a, 0xfd, 0x10, 0xad, 0x0, 0x0, 0x0, 0x3e, 0xa0, 0xad, 0x0, 0x0, 0x0, 0x7, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x2, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0xd, 0xc0, 0xad, 0x11, 0x11, 0x26, 0xdf, 0x30, 0xaf, 0xff, 0xff, 0xff, 0xb2, 0x0, 0xae, 0x44, 0x44, 0x30, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0421 "С" */
+ 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0, 0x2, 0xdf, 0xb7, 0x57, 0xaf, 0xd2, 0x2, 0xed, 0x30, 0x0, 0x0, 0x2d, 0x40, 0xce, 0x10, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce, 0x10, 0x0, 0x0, 0x0, 0x0, 0x2, 0xed, 0x30, 0x0, 0x0, 0x3d, 0x40, 0x2, 0xdf, 0xb7, 0x67, 0xbf, 0xd1, 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0,
+
+ /* U+0422 "Т" */
+ 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x45, 0x55, 0x5e, 0xb5, 0x55, 0x52, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0,
+
+ /* U+0423 "У" */
+ 0x5f, 0x40, 0x0, 0x0, 0x0, 0x6, 0xf2, 0xc, 0xc0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x4, 0xf3, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x4f, 0x30, 0x0, 0x6, 0xf1, 0x0, 0x0, 0xc, 0xb0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x4, 0xf3, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0xcb, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x36, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xc, 0xbd, 0x70, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x86, 0xaf, 0x50, 0x0, 0x0, 0x0, 0x2, 0xdf, 0xd5, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0424 "Ф" */
+ 0x0, 0x0, 0x0, 0x6, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c, 0xef, 0xff, 0xda, 0x50, 0x0, 0x0, 0xa, 0xfc, 0x75, 0xae, 0x46, 0xaf, 0xd3, 0x0, 0xc, 0xe4, 0x0, 0x8, 0xd0, 0x0, 0x1b, 0xf2, 0x6, 0xf3, 0x0, 0x0, 0x8d, 0x0, 0x0, 0xd, 0xc0, 0xca, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x5f, 0x2f, 0x70, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x2, 0xf4, 0xf7, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x1f, 0x5d, 0xa0, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x4, 0xf2, 0x8f, 0x10, 0x0, 0x8, 0xd0, 0x0, 0x0, 0xbd, 0x0, 0xdd, 0x20, 0x0, 0x8d, 0x0, 0x0, 0x9f, 0x40, 0x2, 0xdf, 0x94, 0x28, 0xd1, 0x37, 0xdf, 0x50, 0x0, 0x0, 0x6b, 0xff, 0xff, 0xff, 0xd8, 0x10, 0x0, 0x0, 0x0, 0x0, 0x19, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x59, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0425 "Х" */
+ 0xd, 0xd0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x9f, 0x30, 0x0, 0x9f, 0x30, 0x0, 0x3f, 0x80, 0x0, 0x0, 0xdd, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x3, 0xf8, 0x9, 0xf3, 0x0, 0x0, 0x0, 0x9, 0xf7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xe, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xdf, 0x40, 0x0, 0x0, 0x0, 0xd, 0xd0, 0xde, 0x0, 0x0, 0x0, 0x9, 0xf3, 0x3, 0xf9, 0x0, 0x0, 0x3, 0xf7, 0x0, 0x8, 0xf4, 0x0, 0x0, 0xdc, 0x0, 0x0, 0xd, 0xd0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x3f, 0x90, 0x3f, 0x70, 0x0, 0x0, 0x0, 0x8f, 0x30,
+
+ /* U+0426 "Ц" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xae, 0x55, 0x55, 0x55, 0x55, 0xdd, 0x55, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37,
+
+ /* U+0427 "Ч" */
+ 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xca, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xbd, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x6f, 0x50, 0x0, 0x0, 0x4, 0xf3, 0xc, 0xf8, 0x21, 0x25, 0xaf, 0xf3, 0x1, 0x9f, 0xff, 0xff, 0xb8, 0xf3, 0x0, 0x0, 0x34, 0x20, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3,
+
+ /* U+0428 "Ш" */
+ 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xae, 0x55, 0x55, 0x55, 0xdc, 0x55, 0x55, 0x55, 0xf8, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+
+ /* U+0429 "Щ" */
+ 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xae, 0x55, 0x55, 0x55, 0xdc, 0x55, 0x55, 0x55, 0xfa, 0x53, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x55,
+
+ /* U+042A "Ъ" */
+ 0xcf, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45, 0x55, 0x9f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xc6, 0x0, 0x0, 0x0, 0x6f, 0x43, 0x33, 0x35, 0xbf, 0x90, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x8, 0xf3, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x9, 0xf1, 0x0, 0x0, 0x6f, 0x43, 0x33, 0x35, 0xbf, 0x60, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xfe, 0xa3, 0x0,
+
+ /* U+042B "Ы" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xaf, 0xff, 0xff, 0xfe, 0xb4, 0x0, 0x4, 0xf3, 0xad, 0x33, 0x33, 0x46, 0xcf, 0x60, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0xb, 0xf0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x2, 0xf4, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0xc, 0xe0, 0x4, 0xf3, 0xad, 0x33, 0x33, 0x46, 0xdf, 0x40, 0x4, 0xf3, 0xaf, 0xff, 0xff, 0xfd, 0x92, 0x0, 0x4, 0xf3,
+
+ /* U+042C "Ь" */
+ 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xfe, 0xb4, 0x0, 0xad, 0x33, 0x33, 0x46, 0xcf, 0x60, 0xad, 0x0, 0x0, 0x0, 0xb, 0xf0, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x2, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0xc, 0xe0, 0xad, 0x33, 0x33, 0x46, 0xdf, 0x40, 0xaf, 0xff, 0xff, 0xfd, 0x92, 0x0,
+
+ /* U+042D "Э" */
+ 0x0, 0x39, 0xdf, 0xfd, 0x81, 0x0, 0x0, 0x8f, 0xd8, 0x66, 0x9f, 0xf4, 0x0, 0x1e, 0x70, 0x0, 0x0, 0x1b, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x23, 0x33, 0x33, 0x3b, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x0, 0x0, 0x0, 0xc, 0xe0, 0x1c, 0x50, 0x0, 0x0, 0x1b, 0xf4, 0x0, 0x9f, 0xd8, 0x66, 0xaf, 0xf5, 0x0, 0x0, 0x3a, 0xdf, 0xfd, 0x81, 0x0, 0x0,
+
+ /* U+042E "Ю" */
+ 0xad, 0x0, 0x0, 0x0, 0x3a, 0xef, 0xfc, 0x60, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x9f, 0xb6, 0x45, 0x9f, 0xd2, 0x0, 0xad, 0x0, 0x0, 0xaf, 0x50, 0x0, 0x0, 0x2d, 0xe1, 0xa, 0xd0, 0x0, 0x5f, 0x50, 0x0, 0x0, 0x0, 0x1e, 0xa0, 0xad, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x1a, 0xd0, 0x1, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x11, 0x5f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xe, 0x9a, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, 0xad, 0x44, 0x7f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xe, 0x9a, 0xd0, 0x1, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x1a, 0xd0, 0x0, 0x5f, 0x60, 0x0, 0x0, 0x0, 0x1e, 0xa0, 0xad, 0x0, 0x0, 0xaf, 0x50, 0x0, 0x0, 0x2d, 0xe1, 0xa, 0xd0, 0x0, 0x0, 0x9f, 0xb6, 0x45, 0x9f, 0xd2, 0x0, 0xad, 0x0, 0x0, 0x0, 0x3a, 0xef, 0xfc, 0x60, 0x0, 0x0,
+
+ /* U+042F "Я" */
+ 0x0, 0x29, 0xef, 0xff, 0xff, 0xf4, 0x5, 0xfd, 0x85, 0x55, 0x57, 0xf4, 0x1f, 0xb0, 0x0, 0x0, 0x3, 0xf4, 0x7f, 0x10, 0x0, 0x0, 0x3, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf4, 0x8f, 0x0, 0x0, 0x0, 0x3, 0xf4, 0x3f, 0x70, 0x0, 0x0, 0x3, 0xf4, 0x9, 0xf8, 0x31, 0x0, 0x3, 0xf4, 0x0, 0x7e, 0xff, 0xff, 0xff, 0xf4, 0x0, 0xd, 0xb3, 0x33, 0x36, 0xf4, 0x0, 0x7f, 0x10, 0x0, 0x3, 0xf4, 0x2, 0xf7, 0x0, 0x0, 0x3, 0xf4, 0xb, 0xd0, 0x0, 0x0, 0x3, 0xf4, 0x6f, 0x30, 0x0, 0x0, 0x3, 0xf4,
+
+ /* U+0430 "а" */
+ 0x4, 0xae, 0xff, 0xb3, 0x6, 0xfb, 0x64, 0x6d, 0xf3, 0x14, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x8, 0xe0, 0x6c, 0xef, 0xff, 0xfe, 0x7f, 0x73, 0x22, 0x29, 0xed, 0x90, 0x0, 0x0, 0x8e, 0xd9, 0x0, 0x0, 0xd, 0xe7, 0xf6, 0x11, 0x4c, 0xce, 0x6, 0xdf, 0xfc, 0x57, 0xe0,
+
+ /* U+0431 "б" */
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0x30, 0x0, 0x0, 0x5, 0x9d, 0xff, 0x80, 0x0, 0x8, 0xff, 0xd9, 0x52, 0x0, 0x0, 0xcf, 0x71, 0x0, 0x0, 0x0, 0x8, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x5, 0xcf, 0xfe, 0x80, 0x0, 0x8d, 0x8e, 0x74, 0x49, 0xfd, 0x0, 0xae, 0xd1, 0x0, 0x0, 0x3f, 0x90, 0xaf, 0x50, 0x0, 0x0, 0x9, 0xf0, 0x9f, 0x10, 0x0, 0x0, 0x5, 0xf2, 0x6f, 0x10, 0x0, 0x0, 0x5, 0xf1, 0x2f, 0x60, 0x0, 0x0, 0x9, 0xe0, 0xb, 0xe2, 0x0, 0x0, 0x4f, 0x70, 0x1, 0xee, 0x74, 0x48, 0xfb, 0x0, 0x0, 0x19, 0xef, 0xfc, 0x60, 0x0,
+
+ /* U+0432 "в" */
+ 0xff, 0xff, 0xff, 0xb3, 0xf, 0x72, 0x22, 0x4b, 0xf2, 0xf6, 0x0, 0x0, 0xf, 0x7f, 0x60, 0x0, 0x0, 0xf6, 0xf6, 0x0, 0x1, 0x9e, 0x1f, 0xff, 0xff, 0xff, 0x50, 0xf7, 0x22, 0x22, 0x6f, 0x6f, 0x60, 0x0, 0x0, 0xac, 0xf6, 0x0, 0x0, 0xa, 0xdf, 0x82, 0x22, 0x37, 0xf7, 0xff, 0xff, 0xff, 0xd7, 0x0,
+
+ /* U+0433 "г" */
+ 0xff, 0xff, 0xff, 0xf7, 0xf9, 0x44, 0x44, 0x42, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0,
+
+ /* U+0434 "д" */
+ 0x0, 0x2f, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x2, 0xf6, 0x44, 0x44, 0xda, 0x0, 0x0, 0x3f, 0x10, 0x0, 0xc, 0xa0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x5f, 0x0, 0x0, 0xc, 0xa0, 0x0, 0x6, 0xe0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x7d, 0x0, 0x0, 0xc, 0xa0, 0x0, 0xa, 0xa0, 0x0, 0x0, 0xca, 0x0, 0x0, 0xe6, 0x0, 0x0, 0xc, 0xa0, 0x3, 0xaf, 0x44, 0x44, 0x44, 0xdb, 0x41, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x80, 0x0, 0x0, 0x0, 0x1, 0xf4, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x46, 0x40, 0x0, 0x0, 0x0, 0x0, 0x82,
+
+ /* U+0435 "е" */
+ 0x0, 0x4b, 0xff, 0xc6, 0x0, 0x0, 0x7f, 0xa5, 0x48, 0xfa, 0x0, 0x3f, 0x50, 0x0, 0x3, 0xf6, 0xa, 0xb0, 0x0, 0x0, 0x8, 0xe0, 0xe7, 0x0, 0x0, 0x0, 0x3f, 0x2f, 0xfe, 0xee, 0xee, 0xef, 0xf3, 0xe8, 0x11, 0x11, 0x11, 0x11, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x51, 0x0, 0x6f, 0xc7, 0x56, 0xbf, 0x40, 0x0, 0x3a, 0xef, 0xea, 0x30, 0x0,
+
+ /* U+0436 "ж" */
+ 0x1f, 0x80, 0x0, 0x7, 0xf0, 0x0, 0x1, 0xe8, 0x0, 0x6f, 0x20, 0x0, 0x7f, 0x0, 0x0, 0x9e, 0x0, 0x0, 0xcb, 0x0, 0x7, 0xf0, 0x0, 0x3f, 0x40, 0x0, 0x2, 0xf5, 0x0, 0x7f, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x7, 0xe1, 0x7, 0xf0, 0x7, 0xe1, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x9, 0xf4, 0x39, 0xf3, 0x39, 0xf2, 0x0, 0x0, 0x4, 0xf6, 0x0, 0x7f, 0x0, 0xd, 0xc0, 0x0, 0x1, 0xeb, 0x0, 0x7, 0xf0, 0x0, 0x3f, 0x70, 0x0, 0xaf, 0x10, 0x0, 0x7f, 0x0, 0x0, 0x8f, 0x30, 0x5f, 0x60, 0x0, 0x7, 0xf0, 0x0, 0x0, 0xdd, 0x0,
+
+ /* U+0437 "з" */
+ 0x2, 0x9e, 0xff, 0xc6, 0x0, 0xc, 0xc7, 0x56, 0xaf, 0xa0, 0x1, 0x0, 0x0, 0x8, 0xf1, 0x0, 0x0, 0x0, 0x5, 0xf1, 0x0, 0x0, 0x0, 0x3d, 0x90, 0x0, 0x9, 0xff, 0xfb, 0x0, 0x0, 0x1, 0x22, 0x4c, 0xe1, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x1, 0x0, 0x0, 0x3, 0xf6, 0x3f, 0xa6, 0x45, 0x8f, 0xc0, 0x3, 0xae, 0xff, 0xc7, 0x0,
+
+ /* U+0438 "и" */
+ 0xf7, 0x0, 0x0, 0x1, 0xdb, 0xf7, 0x0, 0x0, 0xb, 0xfb, 0xf7, 0x0, 0x0, 0x8f, 0xdb, 0xf7, 0x0, 0x5, 0xf4, 0xbb, 0xf7, 0x0, 0x3f, 0x70, 0xbb, 0xf7, 0x1, 0xea, 0x0, 0xbb, 0xf7, 0xc, 0xd0, 0x0, 0xbb, 0xf7, 0x9f, 0x20, 0x0, 0xbb, 0xfc, 0xf4, 0x0, 0x0, 0xbb, 0xff, 0x70, 0x0, 0x0, 0xbb, 0xfb, 0x0, 0x0, 0x0, 0xbb,
+
+ /* U+0439 "й" */
+ 0x2, 0xe0, 0x0, 0x5b, 0x0, 0x0, 0xd7, 0x1, 0xc6, 0x0, 0x0, 0x2b, 0xed, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x1, 0xdb, 0xf7, 0x0, 0x0, 0xb, 0xfb, 0xf7, 0x0, 0x0, 0x8f, 0xdb, 0xf7, 0x0, 0x5, 0xf4, 0xbb, 0xf7, 0x0, 0x3f, 0x70, 0xbb, 0xf7, 0x1, 0xea, 0x0, 0xbb, 0xf7, 0xc, 0xd0, 0x0, 0xbb, 0xf7, 0x9f, 0x20, 0x0, 0xbb, 0xfc, 0xf4, 0x0, 0x0, 0xbb, 0xff, 0x70, 0x0, 0x0, 0xbb, 0xfb, 0x0, 0x0, 0x0, 0xbb,
+
+ /* U+043A "к" */
+ 0xf7, 0x0, 0x0, 0xc, 0xb0, 0xf7, 0x0, 0x0, 0x9e, 0x10, 0xf7, 0x0, 0x5, 0xf3, 0x0, 0xf7, 0x0, 0x2e, 0x70, 0x0, 0xf7, 0x0, 0xca, 0x0, 0x0, 0xff, 0xff, 0xf2, 0x0, 0x0, 0xf9, 0x33, 0xdc, 0x0, 0x0, 0xf7, 0x0, 0x2f, 0x90, 0x0, 0xf7, 0x0, 0x5, 0xf6, 0x0, 0xf7, 0x0, 0x0, 0x7f, 0x30, 0xf7, 0x0, 0x0, 0xa, 0xe1,
+
+ /* U+043B "л" */
+ 0x0, 0x1f, 0xff, 0xff, 0xff, 0xa0, 0x2, 0xf6, 0x44, 0x44, 0xda, 0x0, 0x3f, 0x10, 0x0, 0xc, 0xa0, 0x3, 0xf0, 0x0, 0x0, 0xca, 0x0, 0x4f, 0x0, 0x0, 0xc, 0xa0, 0x5, 0xe0, 0x0, 0x0, 0xca, 0x0, 0x7d, 0x0, 0x0, 0xc, 0xa0, 0x9, 0xb0, 0x0, 0x0, 0xca, 0x0, 0xd7, 0x0, 0x0, 0xc, 0xa3, 0x8f, 0x20, 0x0, 0x0, 0xca, 0xdf, 0x60, 0x0, 0x0, 0xc, 0xa0,
+
+ /* U+043C "м" */
+ 0xfb, 0x0, 0x0, 0x0, 0x0, 0xdc, 0xff, 0x40, 0x0, 0x0, 0x6, 0xfc, 0xfd, 0xd0, 0x0, 0x0, 0xe, 0xdc, 0xf5, 0xe6, 0x0, 0x0, 0x8c, 0x8c, 0xf5, 0x6e, 0x10, 0x2, 0xf3, 0x8c, 0xf5, 0xc, 0x80, 0xb, 0x90, 0x8c, 0xf5, 0x3, 0xf2, 0x4f, 0x10, 0x8c, 0xf5, 0x0, 0xab, 0xd7, 0x0, 0x8c, 0xf5, 0x0, 0x2f, 0xd0, 0x0, 0x8c, 0xf5, 0x0, 0x6, 0x40, 0x0, 0x8c, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x8c,
+
+ /* U+043D "н" */
+ 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf9, 0x33, 0x33, 0x33, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7,
+
+ /* U+043E "о" */
+ 0x0, 0x3b, 0xef, 0xe9, 0x10, 0x0, 0x6f, 0xb6, 0x47, 0xde, 0x30, 0x3f, 0x80, 0x0, 0x0, 0xce, 0xa, 0xd0, 0x0, 0x0, 0x2, 0xf6, 0xe8, 0x0, 0x0, 0x0, 0xd, 0x9f, 0x70, 0x0, 0x0, 0x0, 0xbb, 0xe8, 0x0, 0x0, 0x0, 0xd, 0x9a, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0x3f, 0x90, 0x0, 0x1, 0xcd, 0x0, 0x6f, 0xc6, 0x57, 0xee, 0x20, 0x0, 0x3b, 0xef, 0xe9, 0x10, 0x0,
+
+ /* U+043F "п" */
+ 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf9, 0x44, 0x44, 0x44, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7,
+
+ /* U+0440 "р" */
+ 0xf6, 0x19, 0xef, 0xe9, 0x10, 0xf, 0x8e, 0xb6, 0x47, 0xee, 0x30, 0xff, 0x80, 0x0, 0x1, 0xce, 0xf, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0xf8, 0x0, 0x0, 0x0, 0xd, 0x9f, 0x70, 0x0, 0x0, 0x0, 0xba, 0xf8, 0x0, 0x0, 0x0, 0xd, 0x9f, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0xff, 0x80, 0x0, 0x1, 0xcd, 0xf, 0x9e, 0xc6, 0x57, 0xee, 0x30, 0xf7, 0x19, 0xef, 0xe9, 0x10, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0441 "с" */
+ 0x0, 0x3a, 0xef, 0xe9, 0x10, 0x6, 0xfc, 0x64, 0x7d, 0xe2, 0x3f, 0x80, 0x0, 0x0, 0xa2, 0xad, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x90, 0x0, 0x0, 0xa2, 0x6, 0xfc, 0x65, 0x7e, 0xe2, 0x0, 0x3a, 0xef, 0xe9, 0x10,
+
+ /* U+0442 "т" */
+ 0xff, 0xff, 0xff, 0xff, 0xf6, 0x44, 0x44, 0xf9, 0x44, 0x42, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0,
+
+ /* U+0443 "у" */
+ 0xa, 0xd0, 0x0, 0x0, 0x0, 0xab, 0x3, 0xf4, 0x0, 0x0, 0x1, 0xf4, 0x0, 0xcb, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x5f, 0x20, 0x0, 0xe, 0x70, 0x0, 0xe, 0x90, 0x0, 0x5f, 0x0, 0x0, 0x7, 0xf0, 0x0, 0xc9, 0x0, 0x0, 0x1, 0xf6, 0x3, 0xf2, 0x0, 0x0, 0x0, 0x9d, 0xa, 0xb0, 0x0, 0x0, 0x0, 0x2f, 0x6f, 0x40, 0x0, 0x0, 0x0, 0xb, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x80, 0x0, 0x0, 0x1c, 0x65, 0xbe, 0x10, 0x0, 0x0, 0x9, 0xef, 0xc2, 0x0, 0x0, 0x0,
+
+ /* U+0444 "ф" */
+ 0x0, 0x0, 0x0, 0x6, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x18, 0xcf, 0xff, 0xeb, 0x60, 0x0, 0x0, 0x5f, 0xe8, 0x5e, 0xa6, 0xaf, 0xd2, 0x0, 0x3f, 0x90, 0x0, 0xd8, 0x0, 0x2d, 0xd0, 0xb, 0xd0, 0x0, 0xd, 0x80, 0x0, 0x2f, 0x60, 0xe7, 0x0, 0x0, 0xd8, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0xd, 0x80, 0x0, 0xb, 0xb0, 0xe7, 0x0, 0x0, 0xd8, 0x0, 0x0, 0xca, 0xb, 0xd0, 0x0, 0xd, 0x80, 0x0, 0x2f, 0x60, 0x3f, 0xa0, 0x0, 0xd8, 0x0, 0x2d, 0xd0, 0x0, 0x5f, 0xe8, 0x5e, 0xa6, 0xaf, 0xd2, 0x0, 0x0, 0x18, 0xcf, 0xff, 0xeb, 0x60, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0,
+
+ /* U+0445 "х" */
+ 0x2f, 0x70, 0x0, 0x1, 0xe9, 0x0, 0x6f, 0x30, 0x0, 0xad, 0x0, 0x0, 0xad, 0x0, 0x6f, 0x20, 0x0, 0x0, 0xda, 0x2f, 0x60, 0x0, 0x0, 0x3, 0xfe, 0xa0, 0x0, 0x0, 0x0, 0xb, 0xf3, 0x0, 0x0, 0x0, 0x6, 0xfc, 0xd0, 0x0, 0x0, 0x2, 0xf7, 0x1e, 0x90, 0x0, 0x0, 0xdb, 0x0, 0x3f, 0x50, 0x0, 0x9e, 0x10, 0x0, 0x8f, 0x20, 0x5f, 0x40, 0x0, 0x0, 0xcd, 0x0,
+
+ /* U+0446 "ц" */
+ 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x94, 0x44, 0x44, 0x6f, 0x74, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x27,
+
+ /* U+0447 "ч" */
+ 0x1f, 0x50, 0x0, 0x0, 0x7f, 0x1f, 0x50, 0x0, 0x0, 0x7f, 0x1f, 0x50, 0x0, 0x0, 0x7f, 0xf, 0x50, 0x0, 0x0, 0x7f, 0xf, 0x80, 0x0, 0x0, 0x7f, 0x9, 0xf6, 0x10, 0x26, 0xdf, 0x0, 0x9f, 0xff, 0xfc, 0xbf, 0x0, 0x0, 0x22, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x7f,
+
+ /* U+0448 "ш" */
+ 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x94, 0x44, 0x49, 0xf4, 0x44, 0x44, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+
+ /* U+0449 "щ" */
+ 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x94, 0x44, 0x49, 0xf4, 0x44, 0x44, 0xea, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x81,
+
+ /* U+044A "ъ" */
+ 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x44, 0x4c, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xeb, 0x30, 0x0, 0xb, 0xc2, 0x22, 0x4b, 0xf3, 0x0, 0xb, 0xb0, 0x0, 0x0, 0xe9, 0x0, 0xb, 0xb0, 0x0, 0x0, 0xbb, 0x0, 0xb, 0xb0, 0x0, 0x0, 0xe9, 0x0, 0xb, 0xc2, 0x22, 0x4b, 0xf3, 0x0, 0xb, 0xff, 0xff, 0xeb, 0x30,
+
+ /* U+044B "ы" */
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xff, 0xff, 0xfd, 0x91, 0x0, 0xbb, 0xf8, 0x22, 0x25, 0xde, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x2f, 0x60, 0xbb, 0xf7, 0x0, 0x0, 0xf, 0x70, 0xbb, 0xf7, 0x0, 0x0, 0x2f, 0x50, 0xbb, 0xf7, 0x11, 0x15, 0xdd, 0x0, 0xbb, 0xff, 0xff, 0xfd, 0x91, 0x0, 0xbb,
+
+ /* U+044C "ь" */
+ 0xf7, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0xff, 0xff, 0xfe, 0xa2, 0xf, 0x82, 0x22, 0x4c, 0xe1, 0xf7, 0x0, 0x0, 0x1f, 0x7f, 0x70, 0x0, 0x0, 0xe9, 0xf7, 0x0, 0x0, 0x1f, 0x7f, 0x81, 0x12, 0x4c, 0xe1, 0xff, 0xff, 0xfe, 0x91, 0x0,
+
+ /* U+044D "э" */
+ 0x1, 0x9d, 0xff, 0xc6, 0x0, 0x2, 0xfc, 0x63, 0x48, 0xfb, 0x0, 0x5, 0x0, 0x0, 0x2, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x8f, 0xff, 0xff, 0xf7, 0x0, 0x1, 0x22, 0x22, 0x2f, 0x50, 0x0, 0x0, 0x0, 0x5, 0xf1, 0x3, 0x0, 0x0, 0x2, 0xe9, 0x2, 0xfb, 0x63, 0x48, 0xfb, 0x0, 0x2, 0x9d, 0xff, 0xc6, 0x0, 0x0,
+
+ /* U+044E "ю" */
+ 0xf7, 0x0, 0x0, 0x5c, 0xff, 0xc6, 0x0, 0xf, 0x70, 0x0, 0x9f, 0x84, 0x37, 0xfb, 0x0, 0xf7, 0x0, 0x6f, 0x40, 0x0, 0x2, 0xf8, 0xf, 0x70, 0xd, 0xa0, 0x0, 0x0, 0x8, 0xf0, 0xf7, 0x12, 0xf5, 0x0, 0x0, 0x0, 0x3f, 0x3f, 0xff, 0xff, 0x30, 0x0, 0x0, 0x2, 0xf4, 0xf9, 0x45, 0xf5, 0x0, 0x0, 0x0, 0x3f, 0x3f, 0x70, 0xd, 0xa0, 0x0, 0x0, 0x8, 0xe0, 0xf7, 0x0, 0x6f, 0x40, 0x0, 0x3, 0xf7, 0xf, 0x70, 0x0, 0x9f, 0x84, 0x37, 0xfb, 0x0, 0xf7, 0x0, 0x0, 0x5c, 0xff, 0xc6, 0x0, 0x0,
+
+ /* U+044F "я" */
+ 0x2, 0xae, 0xff, 0xff, 0xf1, 0x3f, 0xd7, 0x44, 0x47, 0xf1, 0xae, 0x0, 0x0, 0x3, 0xf1, 0xca, 0x0, 0x0, 0x3, 0xf1, 0xbc, 0x0, 0x0, 0x3, 0xf1, 0x4f, 0x81, 0x0, 0x3, 0xf1, 0x5, 0xdf, 0xff, 0xff, 0xf1, 0x0, 0x9d, 0x22, 0x25, 0xf1, 0x4, 0xf4, 0x0, 0x3, 0xf1, 0xd, 0x90, 0x0, 0x3, 0xf1, 0x8e, 0x10, 0x0, 0x3, 0xf1,
+
+ /* U+0451 "ё" */
+ 0x0, 0x5e, 0x10, 0xc9, 0x0, 0x0, 0x3, 0xb1, 0x9, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4b, 0xff, 0xc6, 0x0, 0x0, 0x7f, 0xa5, 0x48, 0xfa, 0x0, 0x3f, 0x50, 0x0, 0x3, 0xf6, 0xa, 0xb0, 0x0, 0x0, 0x8, 0xe0, 0xe7, 0x0, 0x0, 0x0, 0x3f, 0x2f, 0xfe, 0xee, 0xee, 0xef, 0xf3, 0xe8, 0x11, 0x11, 0x11, 0x11, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x51, 0x0, 0x6f, 0xc7, 0x56, 0xbf, 0x40, 0x0, 0x3a, 0xef, 0xea, 0x30, 0x0};
+
+/*---------------------
+ * GLYPH DESCRIPTION
+ *--------------------*/
+
+static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
+ {.bitmap_index = 0, .adv_w = 84, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 0, .adv_w = 83, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 23, .adv_w = 119, .box_w = 6, .box_h = 6, .ofs_x = 1, .ofs_y = 9},
+ {.bitmap_index = 41, .adv_w = 223, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 146, .adv_w = 197, .box_w = 12, .box_h = 20, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 266, .adv_w = 265, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 386, .adv_w = 214, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 498, .adv_w = 65, .box_w = 2, .box_h = 6, .ofs_x = 1, .ofs_y = 9},
+ {.bitmap_index = 504, .adv_w = 105, .box_w = 4, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 542, .adv_w = 105, .box_w = 5, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 590, .adv_w = 124, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 7},
+ {.bitmap_index = 622, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 672, .adv_w = 68, .box_w = 3, .box_h = 6, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 681, .adv_w = 122, .box_w = 6, .box_h = 3, .ofs_x = 1, .ofs_y = 4},
+ {.bitmap_index = 690, .adv_w = 68, .box_w = 3, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 695, .adv_w = 107, .box_w = 9, .box_h = 20, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 785, .adv_w = 212, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 875, .adv_w = 116, .box_w = 5, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 913, .adv_w = 182, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 996, .adv_w = 180, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1079, .adv_w = 212, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1177, .adv_w = 181, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1260, .adv_w = 195, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1343, .adv_w = 188, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1426, .adv_w = 204, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1516, .adv_w = 195, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1606, .adv_w = 68, .box_w = 3, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1623, .adv_w = 68, .box_w = 3, .box_h = 14, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 1644, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 1694, .adv_w = 184, .box_w = 10, .box_h = 8, .ofs_x = 1, .ofs_y = 3},
+ {.bitmap_index = 1734, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 1784, .adv_w = 181, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1859, .adv_w = 331, .box_w = 19, .box_h = 19, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 2040, .adv_w = 229, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2153, .adv_w = 241, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2243, .adv_w = 230, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2341, .adv_w = 264, .box_w = 14, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2446, .adv_w = 214, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2529, .adv_w = 203, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2604, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2702, .adv_w = 260, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2792, .adv_w = 97, .box_w = 2, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2807, .adv_w = 160, .box_w = 9, .box_h = 15, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 2875, .adv_w = 228, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2973, .adv_w = 188, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3048, .adv_w = 306, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3161, .adv_w = 260, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3251, .adv_w = 268, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3364, .adv_w = 230, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3454, .adv_w = 268, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 3606, .adv_w = 231, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3696, .adv_w = 197, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3786, .adv_w = 184, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3876, .adv_w = 253, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3966, .adv_w = 223, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4071, .adv_w = 356, .box_w = 22, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4236, .adv_w = 210, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4334, .adv_w = 203, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4432, .adv_w = 208, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4530, .adv_w = 102, .box_w = 4, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 4568, .adv_w = 107, .box_w = 9, .box_h = 20, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 4658, .adv_w = 102, .box_w = 5, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 4706, .adv_w = 184, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 3},
+ {.bitmap_index = 4747, .adv_w = 160, .box_w = 10, .box_h = 1, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 4752, .adv_w = 192, .box_w = 6, .box_h = 3, .ofs_x = 2, .ofs_y = 13},
+ {.bitmap_index = 4761, .adv_w = 189, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4811, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4901, .adv_w = 180, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4962, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5052, .adv_w = 193, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5118, .adv_w = 108, .box_w = 8, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5178, .adv_w = 219, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 5268, .adv_w = 216, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5351, .adv_w = 86, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5374, .adv_w = 88, .box_w = 6, .box_h = 19, .ofs_x = -2, .ofs_y = -4},
+ {.bitmap_index = 5431, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5514, .adv_w = 86, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5537, .adv_w = 340, .box_w = 19, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5642, .adv_w = 216, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5703, .adv_w = 201, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5769, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 5859, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 5949, .adv_w = 128, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5988, .adv_w = 156, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6043, .adv_w = 130, .box_w = 8, .box_h = 14, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6099, .adv_w = 215, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 6160, .adv_w = 173, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6221, .adv_w = 281, .box_w = 18, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6320, .adv_w = 171, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6381, .adv_w = 173, .box_w = 12, .box_h = 15, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 6471, .adv_w = 164, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6526, .adv_w = 107, .box_w = 6, .box_h = 19, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 6583, .adv_w = 94, .box_w = 2, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 6602, .adv_w = 107, .box_w = 6, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 6659, .adv_w = 184, .box_w = 10, .box_h = 4, .ofs_x = 1, .ofs_y = 5},
+ {.bitmap_index = 6679, .adv_w = 211, .box_w = 11, .box_h = 18, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 6778, .adv_w = 238, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6891, .adv_w = 232, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 6981, .adv_w = 240, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7071, .adv_w = 183, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7146, .adv_w = 254, .box_w = 16, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 7298, .adv_w = 211, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7381, .adv_w = 324, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7531, .adv_w = 204, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 7627, .adv_w = 264, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7725, .adv_w = 264, .box_w = 13, .box_h = 19, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7849, .adv_w = 225, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 7939, .adv_w = 251, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8044, .adv_w = 308, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 8157, .adv_w = 263, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 8255, .adv_w = 272, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8368, .adv_w = 264, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 8466, .adv_w = 227, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 8556, .adv_w = 229, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8654, .adv_w = 188, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8744, .adv_w = 218, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8849, .adv_w = 293, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = -1},
+ {.bitmap_index = 8985, .adv_w = 208, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 9083, .adv_w = 265, .box_w = 14, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 9216, .adv_w = 234, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 9306, .adv_w = 350, .box_w = 18, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 9441, .adv_w = 357, .box_w = 20, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 9631, .adv_w = 262, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 9751, .adv_w = 313, .box_w = 16, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 9871, .adv_w = 227, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 9961, .adv_w = 226, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10059, .adv_w = 349, .box_w = 19, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 10202, .adv_w = 234, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10292, .adv_w = 187, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10342, .adv_w = 211, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10438, .adv_w = 195, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 10488, .adv_w = 152, .box_w = 8, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 10532, .adv_w = 208, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 10623, .adv_w = 198, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10684, .adv_w = 264, .box_w = 17, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10778, .adv_w = 171, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10833, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 10888, .adv_w = 220, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 10963, .adv_w = 186, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 11018, .adv_w = 202, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 11079, .adv_w = 253, .box_w = 12, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 11145, .adv_w = 216, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 11200, .adv_w = 204, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 11261, .adv_w = 216, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 11316, .adv_w = 220, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 11399, .adv_w = 180, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 11454, .adv_w = 151, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 11509, .adv_w = 179, .box_w = 12, .box_h = 15, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 11599, .adv_w = 251, .box_w = 15, .box_h = 20, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 11749, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 11810, .adv_w = 219, .box_w = 11, .box_h = 14, .ofs_x = 2, .ofs_y = -3},
+ {.bitmap_index = 11887, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 11942, .adv_w = 297, .box_w = 15, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 12025, .adv_w = 297, .box_w = 17, .box_h = 14, .ofs_x = 2, .ofs_y = -3},
+ {.bitmap_index = 12144, .adv_w = 199, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 12210, .adv_w = 251, .box_w = 12, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 12276, .adv_w = 180, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 12326, .adv_w = 183, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 12387, .adv_w = 277, .box_w = 15, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 12470, .adv_w = 194, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 12525, .adv_w = 198, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}};
+
+/*---------------------
+ * CHARACTER MAPPING
+ *--------------------*/
+
+/*Collect the unicode lists and glyph_id offsets*/
+static const lv_font_fmt_txt_cmap_t cmaps[] = {{.range_start = 32, .range_length = 95, .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}, {.range_start = 1025, .range_length = 1, .glyph_id_start = 96, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}, {.range_start = 1040, .range_length = 64, .glyph_id_start = 97, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}, {.range_start = 1105, .range_length = 1, .glyph_id_start = 161, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}};
+
+/*-----------------
+ * KERNING
+ *----------------*/
+
+/*Map glyph_ids to kern left classes*/
+static const uint8_t kern_left_class_mapping[] = {0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 0, 13, 14, 15, 16, 17, 18, 19, 12, 20, 20, 0, 0, 0, 21, 22, 23, 24, 25, 22, 26, 27, 28, 29, 29, 30, 31, 32, 29, 29, 22, 33, 34, 35, 3, 36, 30, 37, 37, 38, 39, 40, 41, 42, 43, 0, 44, 0, 45, 46, 47, 48, 49, 50, 51, 45, 52, 52, 53, 48, 45, 45, 46, 46, 54, 55, 56, 57, 51, 58, 58, 59, 58, 60, 41, 0, 0, 9, 26, 23, 61, 24, 62, 63, 26, 38, 24, 29, 29, 38, 29, 29, 29, 22, 29, 33, 25, 36, 37, 22, 38, 63, 29, 29, 63, 64, 29, 64, 22, 22, 29, 51, 46, 0, 65, 51, 49, 59, 0, 51, 51, 59, 51, 51, 51, 46, 51, 46, 47, 65, 58, 46, 59, 51, 51, 51, 51, 66, 51, 66, 46, 46, 51, 49};
+
+/*Map glyph_ids to kern right classes*/
+static const uint8_t kern_right_class_mapping[] = {0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 13, 14, 15, 16, 17, 12, 18, 19, 20, 21, 21, 0, 0, 0, 22, 23, 24, 25, 23, 25, 25, 25, 23, 25, 25, 26, 25, 25, 25, 25, 23, 25, 23, 25, 3, 27, 28, 29, 29, 30, 31, 32, 33, 34, 35, 0, 36, 0, 37, 38, 39, 39, 39, 40, 39, 38, 41, 42, 38, 38, 43, 43, 39, 43, 39, 43, 44, 45, 46, 47, 47, 48, 49, 50, 0, 0, 35, 9, 25, 24, 25, 25, 25, 51, 25, 30, 52, 25, 25, 25, 53, 25, 25, 23, 25, 25, 23, 27, 30, 23, 30, 25, 54, 25, 25, 27, 25, 25, 52, 25, 30, 37, 23, 43, 43, 55, 39, 48, 56, 43, 43, 43, 55, 43, 43, 39, 43, 43, 39, 57, 47, 39, 48, 43, 46, 43, 43, 57, 43, 43, 56, 43, 48, 39};
+
+/*Kern values between classes*/
+static const int8_t kern_class_values[] = {0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 8, 6, 0, 3, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 9, -8, 0, 0, 6, 0, -18, -19, 3, 15, 8, 6, -13, 3, 17, 1, 14, 3, 11, 0, -14, 0, 0, 2, 0, 0, 0, 0, 0, 0, 19, 2, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 0, -13, 0, 0, 0, 0, 0, -10, 0, 0, 0, 0, 0, -6, 6, 6, 0, 0, -3, 0, -3, 3, 0, -3, 0, -3, -2, -6, 0, 0, 0, 0, -3, 0, 0, -4, -5, 0, 0, -3, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, -6, 0, -6, -7, 0, -1, -4, 0, -9, 0, -38, 0, 0, -6, -16, 6, 10, 0, 0, -6, 3, 3, 11, 6, -6, 6, 0, 0, -19, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -12, 0, 0, 5, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -17, 0, -13, -3, 0, 0, -10, 0, 1, 14, 0, -10, -2, 0, 0, 0, -6, 0, 0, -2, -25, 0, 5, 0, 11, -9, 0, -6, 0, -13, 5, 0, -26, -2, 14, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, -4, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 11, 2, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, -4, -4, -7, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -11,
+ 0, 0, 0, 2, 6, 3, 10, -3, 0, 0, 6, -3, -10, -45, 3, 9, 6, 1, -4, 0, 13, 0, 11, 0, 11, 0, -29, 0, -4, 10, 0, 11, -3, 6, 3, 0, 0, 0, -3, 0, 0, -6, 0, 0, 0, 26, 0, 10, 0, 14, 4, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, -12, 0, 0, 0, -3, 0, -2, 0, 3, -5, -4, -6, 3, 0, -3, 0, 0, 0, -13, 3, -5, 0, -6, -10, 0, -7, -5, -10, 0, 0, -21, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, -4, -7, -4, -4, -2, -5, -6, -8, -4, -6, -7, 0, -18, 3, -20, 0, 0, 0, -10, -2, 0, 33, -4, -4, 3, 3, -4, 0, -4, 3, 0, 0, -17, -6, 11, 0, 19, -10, -3, -12, 0, -12, 6, 0, -31, 0, 3, 3, 0, -5, 0, 0, 3, 0, 0, -3, -5, -11, 0, -11, 0, 8, 0, 8, -16, 6, 0, -12, 0, 19, -6, 0, -12, 0, 10, 0, -21, -31, -21, -6, 10, 0, 0, -22, 0, 5, -7, 0, -5, 0, -6, -13,
+ 0, -3, 10, 0, 10, 0, 10, 0, 0, 10, 10, -40, -22, 0, -22, 0, 2, 0, -22, -22, -9, -22, -10, -20, -10, -22, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 3, -4, -6, 0, 0, 0, -3, 0, 0, -3, 0, 0, 0, -6, 0, -2, 0, -7, -6, 0, -8, -10, -10, -7, 0, -6, 0, -6, 0, 0, 0, 0, 0, -3, 0, 0, 3, 0, 3, -3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, -3, 3, 3, -1, 0, 0, 0, -7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 4, -3, 0, -4, 0, -5, 0, 0, -3, 0, 10, 0, 0, -3, 0, 0, 0, 0, 0, 0, -1, 1, -3, 1, -3, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, 0, -3, -4, 0, 0, 0, 0, 0, 1, 0, 0, -2, 0, -3, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -2, -4, -2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -10, -3, -10, 6, 0, 0, -6, 3, 6, 9, 0, -8, -1, -5, 0, -1, -16, 3, -3, 2, -17, 3, 0, 0, 0, -16, 0, -17, -2, -28, -3, 0, -16, 0, 6, 9, 0, 4, 0, 0, 0, 0, 0, 0, 0, -5, -4, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, -3, 0, 0, 0, 0, 0, -2, -2, 0, -2, -4, 0, 0, 0, 0, 0, 0, 0, -3, -3, 0, -2, -4, -3, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -6, 3, 0, 0, -5, 2, 3, 3, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 3, 0, 0, -3, 0, -3, -3, -5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, -3, 0, 0, 0, 0, -3, -5, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, -3, 0, -11, 0, 0, 9, -16, -17, -14, -6, 3, 0, -3, -21, -6, 0, -6, 0, -6,
+ 5, -6, -21, 0, -9, 0, 0, 2, -1, 2, -3, 0, 3, -1, -10, -12, 0, -16, 0, 0, -7, -8, -10, -5, -9, -1, -7, -1, -10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -3, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -2, 0, -1, -3, 0, -5, -7, -7, -1, 0, -10, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, -3, 0, 3, 0, 12, -3, 0, -7, -2, -12, 0, 0, -5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, -3, 3, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, -7, 0, 0, 5, 0, -16, -10, 0, 0, 0, -5, -16, 0, 0, -3, 3, 0, -10, 0, -13, 0, -9, 0, 0, -4, -5, -4, -3, -6, 0, 0, -7, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 3, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, 5, 0, 3, -6, -6, 0, -3, -3, -4, 0, 0, 0, 0, 0, 0, -10, 0, -3, 0, -5, -3, 0, -7, -8, -10, -3, 0, -6, 0, -10, 0, 0, 0, 0, 0, 26, 0, 0, 2, 0, 0, -4, 0, 0, -6, -6, -6, -5, -5, -6, -5, 0, -14, 0, 0, 0, 0, 0, -29, -5, 11, 10, -2, -13, 0, 3, -5, 0, -16, -2, -4, 3, -22, -3, 3, 0, 5, -11, -5, -12, -10, -13, 0, 0, -19, 0, 19, 0, 0, -2, 0, 0, 0, 0, -2, -2, -3, -8, -10, -8, 0, 0, 0, 0, -14, 0, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -2, -3, -5, 0, 0, -6, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -6, 0, 0, 6, 0, 4, 0, -7, 3, -3, -1, -10, -3, 0,
+ -4, -3, -1, 0, -5, -6, 0, 0, -3, 0, -3, -6, -5, 0, 0, -3, 0, 3, -3, 0, -7, 0, 0, 0, 0, -6, 0, -6, 0, -6, 0, -6, -6, 0, -6, -4, -8, -5, -5, 0, 0, 0, 0, 0, 0, 0, 0, -6, 3, 0, -5, 0, -3, -5, -12, -3, -3, -3, -1, -3, -5, -1, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, 0, 0, 5, -3, 0, -3, 0, 0, 0, 0, -3, -5, -3, -4, -5, -4, -4, 0, 0, 0, 0, 0, 0, 0, 2, 13, -1, 0, -10, 0, -3, 6, 0, -3, -14, -4, 5, -1, 0, -16, -6, 3, -6, 2, 0, -4, -3, -11, 0, -5, 2, 0, 0, -6, 0, 0, 0, 3, 3, -6, -7, 0, -6, 0, 0, -5, -3, -3, 0, -6, 2, -7, 2, -6, -13, -5, -13, -5, -13, -8, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, -4, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, 0, 0, -4, 0, 0, -3, -3, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -3, 0, 0, -7, 0, -7, -8, -5, -5, -5, 0, 0, -5, 0, -6, 0, 0, 0, -10, 0, 3, -7, 6, 0, -3, -15, 0, 0, -7, -3, 0, -13, -8, -9, 0, 0, -13, -3, -13, -12, -15, 0, -10, 0, 2, 22, -4, 0, -8, 0, 0, -1, -3, -6, -9, -6, -12, -12, -12, -7, -1, -8, -1, -11, 0, -8, -13, 0, 0, -3, 0, 0, 0, 0, -22, -4, 10, 8, -8, -12, 0, 0,
+ -12, 0, -16, -3, -3, 6, -30, -4, 0, 0, 0, -21, -4, -17, -3, -24, 0, 0, -22, 0, 20, 0, 0, -3, 0, 0, 0, 0, 0, -2, -3, -12, -3, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -11, 0, -4, 0, 0, -9, -15, 0, 0, -2, -5, -10, -3, 0, -2, 0, 0, 0, 0, -14, -3, -11, -11, -2, -5, -8, -3, -6, 0, -6, -4, -10, -5, 0, -4, 0, 0, -3, -7, 0, 2, 0, -3, -11, -3, 0, -11, -6, -11, -6, -14, -6, -4, 0, -6, 0, 0, 0, 0, 5, 0, 3, -6, 12, 0, -3, -3, -4, 0, 0, 0, 0, 0, 0, -10, 0, -3, 0, -5, -3, 0, -7, -8, -10, -3, 0, -6, 2, 13, 0, 0, 0, 0, 0, 26, 0, 0, 2, 0, 0, -4, 0, 0, -6, -6, -6, -5, -5, -6, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -6, 0, 0, 0, 0, 0, -2, 0, 0, 0, -3, -3, 0, 0, -6, -3, 0, 0, -6, 0, 6, -2, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, -4, 0, -11, -6, 0, 10, -10, -10, -6, -6, 13, 5, 3, -28, -2, 6, -3, 0, -3, 2, -3, -11, 0, -3, 3, -4, -2, -10, -2, 0, 0, 10, 6, 0, -9, 0, -18, 0, 0, 7, -4, -12, 0, -4, -11, -11, -11, -3, -12, 0, -12, -5, -22, -15, -7, 3, 0, -5, 0, -9, 0, 2, 11, -7, -12, -13, -8, 10, 0, 0, -23, -2, 3, -5, -2, -7, 0, -7, -12, -5, -5, -2, 0, 0, -7, -6, -3, 0, 10, 7, -3, -18, 0, -18, 0, -6, -6, -11, -18, 0, -10, -5, -11, -5, -9, -7, -1, -7, 0, -11, -15, -6, 0, 0, -4, 0, -6, -4, 0, -3, -5, 0, 6, -10, 3, 0, 0, -17, 0, -3, -7, -5, -2, -10, -8, -10, -8, 0, -10, -3, -7, -7, -10, -3, 0, 0, 0, 15, -5, 0, -10, 0, 0, 0, -3, -6, -7, -8, -8, -11, -8, -4, -4, -17, -4, -12, -5, -12, -16, 6, 0, -5, 0, -16, -5, 1, 6, -10, -12, -6, -10,
+ 10, -3, 2, -29, -5, 6, -7, -5, -12, 0, -10, -13, -5, -3, -2, -3, -6, -10, 0, 0, 0, 10, 8, -3, -21, 0, -19, 0, -4, 6, -12, -21, -6, -11, -13, -16, -13, -10, -9, 0, -9, -5, -18, -18, -7, 0, 0, 0, 0, -5, 0, 0, 3, -5, 6, 3, -7, 6, 0, 0, -12, -1, 0, -1, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 2, 10, 0, 0, -5, 0, 0, 0, 0, 0, -3, -3, -5, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, -3, 0, 11, 0, 5, 0, 0, -4, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 6, 0, 7, 0, 8, 0, 0, 10, 0, 8, -4, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 3, -4, -4, -4, -6, -5, -3, 0, -19, 0, -3, 6, 0, 10, -45, 0, 33, 5, -6, -6, 3, 3, -3, 0, -16, 0, 0, 14, -19, -6, 10, 0, 10, -6, -3, -13, 6, -6, 0, 0, -21, 11, 45, 0, 0, 0,
+ 0, 0, 38, 0, 0, 0, 0, 6, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, -7, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -5, -4, -5, -4, -4, 0, 0, -3, 6, -9, 0, 0, 0, -3, 0, 3, 43, -6, -3, 11, 9, -9, 3, 0, 0, 3, 3, -3, -10, 19, 10, 27, 0, -3, -3, 15, -3, 6, 0, -42, 8, 0, -3, 0, -9, 0, 0, 34, 0, 3, -6, -9, -4, 12, 6, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, 0, 0, -9, 0, 0, 0, 0, -7, -2, 0, 0, 0, -7, 0, -5, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -3, 0, 0, 0, 0, -18, 0, 0, -3, 0, -5, 0, -9, 0, 0, 0, -6, 3,
+ -5, 0, 0, -9, -3, -8, 0, 0, -9, 0, -3, 0, -15, 0, -2, 0, 0, -27, -7, -13, -2, -11, 0, 0, -22, 0, -9, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -6, -5, -3, -3, -8, -3, -8, -1, -1, -6, 0, 0, 0, 0, -8, 0, -7, 4, -2, 6, 0, -3, -8, -3, -6, -7, 0, -5, -2, -3, 2, -9, 0, 0, 0, 0, -30, -2, -3, 0, -5, 0, -3, -15, -4, 0, 0, -3, -3, 0, -3, 0, 0, 0, 2, 0, -3, -6, -3, -3, 0, 0, 0, 0, -6, -6, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 0, -3, 0, 0, 0, -6, 3, 0, 0, 0, -9, -3, -6, 0, 0, -9, 0, -3, 0, -15, 0, 0, 0, 0, -31, 0, -6, -12, -16, 0, 0, -22, 0, -2,
+ -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -5, -3, -2, -6, 0, -6, -7, -4, -5, -7, 0, 0, 0, 6, -4, 0, 9, 17, -3, -3, -10, 5, 17, 6, 8, -9, 5, 14, 5, 10, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 15, -5, -3, 0, -3, 1, 0, 13, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -29, -5, -2, -14, -17, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, -14, 0, -4, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -29, -5, -2, -14, -17, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, -14, 0, -4, 0, 0, 0, 0, 0, -2, 0,
+ 0, 0, -7, 3, 0, -3, 2, 5, 3, -10, 0, -1, -2, 3, 0, 2, 0, 0, 0, 0, -10, 0, -4, -3, -6, 0, -4, -13, 0, 21, -3, 0, -7, 0, 0, 0, -3, -5, 0, -3, -9, -6, -9, -4, 0, 0, 0, -6, 2, -7, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -29, -5, -2, -14, -17, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, -14, 0, -4, 0, 0, 0, -6, 0, -11, -5, -4, 10, -4, -3, -13, 0, -3, 0, -3, -10, 0, 7, 0, 2, 0, 2, -8, -12, -5, 0, -14, -7, -9, -14, -13, 0, -6, -6, -5, -4, -15, -3, -4, 0, -3, 0, -3, -1, 5, 0, 5, -3, 5, 0, -13, -7, -13, -6, -12, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, -9, 0, -2, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, -6, -3, 3, 0, -6, -7, -3, 0, -11, -3, -8, -2, -5, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 11, 0, 0, -6, 0, 0, 0, 0, 0, -4, 0, -3, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -7, 0, 0, 14, -4, -11, -9, 3, 2, 2, -1, -8, 3, 5, 3, 10, 3, 10, -3, -8, 0, 0, -16, 0, 0, -10, -9, 0, 0, -6, 0, -4, -5, 0, -5, 0, 0, -5, 0, -2, 5, 0, -2, -10, -2, -3, -8, 0, -8, -5, -7, -4, 0, 0, 0, -4, 0, -6, 0, 0, 4, -7, 0, 3, -3, 2, -1, 0, -10, 0, -3, 0, 0, -3, 2, -2, 0, 0, 0, -16, -5, -7, 0, -10, 0, 0, -15, 0, 12, -3, 0, -6, 0, 0, -1, 0, -3, 0, -3, -10, 0, -10, -3, 0, -2, 0, -8, 0, -10, -4, 0, 0, 0,
+ 0, -3, 0, 0, 3, -4, 0, 0, 0, -5, -3, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 8, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, -3, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, -13, -5, -11, -7, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -6, -5, 0, -6, 0, -6, -11, -4, -5, -9, 0, 0, 0, 0, 0, 0, 0, 0, -65, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -49, 0, -3, 0, -38, 0, 0, 0, -38, -38, -38, 0, -28, 0, -28, -6, -50, -45, -36, 0, -6, 0, 0, 0, 0, 0, 0, -8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, -8, 0, -8, 0,
+ -9, 0, 0, 0, 1, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, -11, -7, -11, 0, 0, 0, 0, -7, 0, -6, -10, 0, -9, -6, 0, 0, 0, -5, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, -2, 0, 0, -21, 0, -10, -14, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, -5, -6, 0, -8, -6, -8, -2, -5, -5, -8, 0, 0, 0, 0, 0, 0, -2, 0, -7, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, 0, 0, 0, -2, -11, -7, 0, 0, 0, 0, 0, 0, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, -13, 0, -13, -3, -10, -5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 0, 0, 0, 0, -35, 0, -12, -10, -10, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, -12, -10, 0, -5, 0, -5, -24, -6, -2, -17};
+
+/*Collect the kern class' data in one place*/
+static const lv_font_fmt_txt_kern_classes_t kern_classes = {
+ .class_pair_values = kern_class_values,
+ .left_class_mapping = kern_left_class_mapping,
+ .right_class_mapping = kern_right_class_mapping,
+ .left_class_cnt = 66,
+ .right_class_cnt = 57,
+};
+
+/*--------------------
+ * ALL CUSTOM DATA
+ *--------------------*/
+
+# if LV_VERSION_CHECK(8, 0, 0)
+/*Store all the custom data of the font*/
+static lv_font_fmt_txt_glyph_cache_t cache;
+static const lv_font_fmt_txt_dsc_t font_dsc = {
+# else
+static lv_font_fmt_txt_dsc_t font_dsc = {
+# endif
+ .glyph_bitmap = glyph_bitmap,
+ .glyph_dsc = glyph_dsc,
+ .cmaps = cmaps,
+ .kern_dsc = &kern_classes,
+ .kern_scale = 16,
+ .cmap_num = 4,
+ .bpp = 4,
+ .kern_classes = 1,
+ .bitmap_format = 0,
+# if LV_VERSION_CHECK(8, 0, 0)
+ .cache = &cache
+# endif
+};
+
+/*-----------------
+ * PUBLIC FONT
+ *----------------*/
+
+/*Initialize a public general font descriptor*/
+# if LV_VERSION_CHECK(8, 0, 0)
+const lv_font_t montserrat_20_en_ru = {
+# else
+lv_font_t montserrat_20_en_ru = {
+# endif
+ .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
+ .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
+ .line_height = 23, /*The maximum line height required by the font*/
+ .base_line = 4, /*Baseline measured from the bottom of the line*/
+# if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
+ .subpx = LV_FONT_SUBPX_NONE,
+# endif
+# if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
+ .underline_position = -2,
+ .underline_thickness = 1,
+# endif
+ .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
+};
+
+#endif /*#if MONTSERRAT_20_EN_RU*/
diff --git a/keyboards/stront/keymaps/zzeneg/fonts/montserrat_48_digits.c b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_48_digits.c
new file mode 100644
index 000000000000..ed0c74797d4d
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_48_digits.c
@@ -0,0 +1,189 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ * Size: 48 px
+ * Bpp: 4
+ * Opts:
+ ******************************************************************************/
+
+#ifdef __has_include
+# if __has_include("lvgl.h")
+# ifndef LV_LVGL_H_INCLUDE_SIMPLE
+# define LV_LVGL_H_INCLUDE_SIMPLE
+# endif
+# endif
+#endif
+
+#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
+# include "lvgl.h"
+#else
+# include "lvgl/lvgl.h"
+#endif
+
+#ifndef MONTSERRAT_48_DIGITS
+# define MONTSERRAT_48_DIGITS 1
+#endif
+
+#if MONTSERRAT_48_DIGITS
+
+/*-----------------
+ * BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
+ /* U+002E "." */
+ 0x0, 0x44, 0x0, 0xc, 0xff, 0xd1, 0x5f, 0xff, 0xf8, 0x6f, 0xff, 0xf9, 0x2f, 0xff, 0xf5, 0x6, 0xef, 0x80,
+
+ /* U+0030 "0" */
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x9c, 0xef, 0xfe, 0xb8, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xe8, 0x54, 0x45, 0x9e, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0x40, 0x0, 0x0, 0x1f, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xd0, 0x0, 0x0, 0x9f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6, 0x0, 0x1, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfd, 0x0, 0x6, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x30, 0xb, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0xf, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xc0, 0x2f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf0, 0x4f, 0xff,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf1, 0x6f, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf3, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf5, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf5, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0x6f, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf3, 0x4f, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf1, 0x2f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf0, 0xf, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xc0, 0xb, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x6, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x30, 0x1, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfd, 0x0, 0x0, 0x9f, 0xff, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6, 0x0, 0x0, 0x1f, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xd0, 0x0, 0x0, 0x7, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0x40, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xd8, 0x54, 0x45, 0x9e, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x9c, 0xef, 0xfe, 0xb8, 0x20, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0031 "1" */
+ 0x9f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x12, 0x22, 0x22, 0x22, 0xbf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0,
+ 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd,
+
+ /* U+0032 "2" */
+ 0x0, 0x0, 0x0, 0x4, 0x8b, 0xef, 0xff, 0xec, 0x95, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xb8, 0x54, 0x34, 0x69, 0xdf, 0xff, 0xfe, 0x10, 0x0, 0xc, 0xff, 0xff, 0x71, 0x0, 0x0, 0x0, 0x0, 0x5, 0xef, 0xff, 0xb0, 0x0, 0x6, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf3, 0x0, 0x0, 0x4a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xdf, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xef, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf7, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x1, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+
+ /* U+0033 "3" */
+ 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x2, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x28, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xec, 0xa6,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x59, 0xef, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x60, 0x5c, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf1, 0xe, 0xfe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xfa, 0x5, 0xff, 0xff, 0xd6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0xff,
+ 0xff, 0x10, 0x8, 0xff, 0xff, 0xff, 0xb8, 0x54, 0x34, 0x58, 0xcf, 0xff, 0xff, 0x40, 0x0, 0x3, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x10, 0x0, 0x0, 0x0, 0x0, 0x1, 0x69, 0xce, 0xff, 0xfe, 0xc9, 0x50, 0x0, 0x0, 0x0,
+
+ /* U+0034 "4" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
+ 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xc2, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x2f, 0xff, 0x72, 0x22, 0x22, 0x20, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x1f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0,
+
+ /* U+0035 "5" */
+ 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x3f, 0xff, 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x0, 0x0, 0x5, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf2, 0x22, 0x22, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x83, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x60, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x36, 0xae, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xef, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x0, 0x96, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xa0, 0x4f, 0xfa, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf3, 0xb, 0xff, 0xff, 0x92, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
+ 0xff, 0xf9, 0x0, 0x2d, 0xff, 0xff, 0xfd, 0x96, 0x44, 0x34, 0x6a, 0xef, 0xff, 0xfc, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x1, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x7a, 0xdf, 0xff, 0xfd, 0xb8, 0x30, 0x0, 0x0, 0x0,
+
+ /* U+0036 "6" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0xbd, 0xff, 0xfe, 0xda, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc4, 0x0, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xfc, 0x74, 0x21, 0x12, 0x47, 0xbf, 0xe0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xfa, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1, 0x40, 0x0, 0x0, 0x2, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x30, 0x0, 0x1, 0x7b, 0xdf, 0xff, 0xdb, 0x61, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x10, 0x1,
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x7f, 0xff, 0x4, 0xff, 0xfe, 0x84, 0x10, 0x1, 0x49, 0xef, 0xff, 0xf4, 0x0, 0x7f, 0xff, 0x2f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xfe, 0x10, 0x7f, 0xff, 0xbf, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xa0, 0x6f, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf1, 0x5f, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf6, 0x3f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9, 0xf, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfb, 0xd, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfb, 0x8, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfb, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9, 0x0, 0xdf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf5, 0x0, 0x5f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf0, 0x0, 0xb, 0xff, 0xf5,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x80, 0x0, 0x1, 0xef, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x19, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x3e, 0xff, 0xfe, 0x84, 0x10, 0x1, 0x48, 0xef, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x2, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x20, 0x0, 0x0, 0x0, 0x0, 0x7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9c, 0xef, 0xff, 0xda, 0x50, 0x0, 0x0, 0x0,
+
+ /* U+0037 "7" */
+ 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x7f, 0xff, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x2f, 0xff, 0xc0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x40, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfd, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf6, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x37, 0x77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x40, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+0038 "8" */
+ 0x0, 0x0, 0x0, 0x2, 0x6a, 0xde, 0xff, 0xfe, 0xb8, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x10, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xfd, 0x73, 0x10, 0x0, 0x25, 0x9f, 0xff, 0xff, 0x40, 0x0, 0x0, 0x6f, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19, 0xff, 0xfe, 0x10, 0x0, 0xe, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xf8, 0x0, 0x4, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xe0, 0x0, 0x7f, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x10, 0x7, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf1, 0x0, 0x6f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x3, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xd0, 0x0, 0xe, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf8, 0x0, 0x0, 0x5f, 0xff, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xfe, 0x10, 0x0, 0x0, 0x8f, 0xff, 0xf9, 0x40, 0x0, 0x0,
+ 0x1, 0x6c, 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x5e, 0xff, 0xff, 0xfe, 0xdc, 0xdf, 0xff, 0xff, 0xfb, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x30, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xfb, 0x63, 0x10, 0x0, 0x24, 0x8e, 0xff, 0xff, 0x60, 0x0, 0x0, 0xcf, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x60, 0x0, 0x8f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0x20, 0x1f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfa, 0x6, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf0, 0x9f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x3a, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0xbf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x49, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf3, 0x6f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0x1,
+ 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xb0, 0xa, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf3, 0x0, 0x1e, 0xff, 0xfc, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf9, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xb6, 0x31, 0x0, 0x2, 0x48, 0xef, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x6, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0xbd, 0xef, 0xff, 0xec, 0x95, 0x10, 0x0, 0x0, 0x0,
+
+ /* U+0039 "9" */
+ 0x0, 0x0, 0x0, 0x5, 0x9c, 0xef, 0xfe, 0xda, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xff, 0x94, 0x10, 0x1, 0x37, 0xcf, 0xff, 0xf5, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xa1, 0x0, 0x0, 0x0, 0x0, 0x4, 0xef, 0xff, 0x40, 0x0, 0x7, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xe1, 0x0, 0xe, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf9, 0x0, 0x3f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x10, 0x6f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x70, 0x7f, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xc0, 0x8f, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xf1, 0x6f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf4, 0x4f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf7, 0xf, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0xf9, 0x8,
+ 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff, 0xfa, 0x1, 0xef, 0xff, 0xa1, 0x0, 0x0, 0x0, 0x0, 0x4, 0xdf, 0xf7, 0xdf, 0xfb, 0x0, 0x3f, 0xff, 0xff, 0x95, 0x20, 0x0, 0x36, 0xcf, 0xff, 0xa0, 0xcf, 0xfb, 0x0, 0x3, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0xcf, 0xfb, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x40, 0x0, 0xcf, 0xfa, 0x0, 0x0, 0x0, 0x16, 0xad, 0xff, 0xfe, 0xc8, 0x30, 0x0, 0x0, 0xef, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xef, 0xff, 0x60, 0x0, 0x0, 0x4, 0x40, 0x0, 0x0, 0x0, 0x0, 0x1, 0x9f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xc, 0xfd, 0x85, 0x31, 0x12, 0x47, 0xbf, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x2b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0xac, 0xef, 0xff, 0xeb, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+003A ":" */
+ 0x6, 0xef, 0x80, 0x3f, 0xff, 0xf5, 0x6f, 0xff, 0xf9, 0x4f, 0xff, 0xf7, 0xb, 0xff, 0xd1, 0x0, 0x44, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0xc, 0xff, 0xd1, 0x5f, 0xff, 0xf8, 0x6f, 0xff, 0xf9, 0x2f, 0xff, 0xf5, 0x6, 0xef, 0x80};
+
+/*---------------------
+ * GLYPH DESCRIPTION
+ *--------------------*/
+
+static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
+ {.bitmap_index = 0, .adv_w = 163, .box_w = 6, .box_h = 6, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 18, .adv_w = 508, .box_w = 28, .box_h = 34, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 494, .adv_w = 277, .box_w = 12, .box_h = 34, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 698, .adv_w = 436, .box_w = 26, .box_h = 34, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1140, .adv_w = 433, .box_w = 25, .box_h = 34, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1565, .adv_w = 508, .box_w = 31, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2092, .adv_w = 435, .box_w = 25, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2517, .adv_w = 468, .box_w = 26, .box_h = 34, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2959, .adv_w = 452, .box_w = 26, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3401, .adv_w = 490, .box_w = 27, .box_h = 34, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3860, .adv_w = 468, .box_w = 26, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4302, .adv_w = 163, .box_w = 6, .box_h = 26, .ofs_x = 2, .ofs_y = 0}};
+
+/*---------------------
+ * CHARACTER MAPPING
+ *--------------------*/
+
+static const uint8_t glyph_id_ofs_list_0[] = {0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
+
+/*Collect the unicode lists and glyph_id offsets*/
+static const lv_font_fmt_txt_cmap_t cmaps[] = {{.range_start = 46, .range_length = 13, .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 13, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL}};
+
+/*-----------------
+ * KERNING
+ *----------------*/
+
+/*Map glyph_ids to kern left classes*/
+static const uint8_t kern_left_class_mapping[] = {0, 1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 2, 10};
+
+/*Map glyph_ids to kern right classes*/
+static const uint8_t kern_right_class_mapping[] = {0, 1, 2, 3, 4, 5, 6, 7, 2, 8, 9, 10, 11};
+
+/*Kern values between classes*/
+static const int8_t kern_class_values[] = {0, -8, -9, 8, 8, -10, 0, -9, 8, 0, 0, -8, 0, 0, 0, -8, 0, 0, -6, 0, 0, 0, 8, -2, 0, 0, 0, -18, 0, -2, 0, 0, 0, 0, 0, 0, -4, -4, 0, -8, -10, 0, 0, 0, 15, 0, -19, -2, -12, 0, -2, -38, 8, -6, 5, 0, 0, 0, -4, -4, 0, -4, -11, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, -41, -15, 8, 0, -7, -50, -15, 0, -15, 0, -15, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0};
+
+/*Collect the kern class' data in one place*/
+static const lv_font_fmt_txt_kern_classes_t kern_classes = {
+ .class_pair_values = kern_class_values,
+ .left_class_mapping = kern_left_class_mapping,
+ .right_class_mapping = kern_right_class_mapping,
+ .left_class_cnt = 10,
+ .right_class_cnt = 11,
+};
+
+/*--------------------
+ * ALL CUSTOM DATA
+ *--------------------*/
+
+# if LV_VERSION_CHECK(8, 0, 0)
+/*Store all the custom data of the font*/
+static lv_font_fmt_txt_glyph_cache_t cache;
+static const lv_font_fmt_txt_dsc_t font_dsc = {
+# else
+static lv_font_fmt_txt_dsc_t font_dsc = {
+# endif
+ .glyph_bitmap = glyph_bitmap,
+ .glyph_dsc = glyph_dsc,
+ .cmaps = cmaps,
+ .kern_dsc = &kern_classes,
+ .kern_scale = 16,
+ .cmap_num = 1,
+ .bpp = 4,
+ .kern_classes = 1,
+ .bitmap_format = 0,
+# if LV_VERSION_CHECK(8, 0, 0)
+ .cache = &cache
+# endif
+};
+
+/*-----------------
+ * PUBLIC FONT
+ *----------------*/
+
+/*Initialize a public general font descriptor*/
+# if LV_VERSION_CHECK(8, 0, 0)
+const lv_font_t montserrat_48_digits = {
+# else
+lv_font_t montserrat_48_digits = {
+# endif
+ .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
+ .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
+ .line_height = 34, /*The maximum line height required by the font*/
+ .base_line = 0, /*Baseline measured from the bottom of the line*/
+# if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
+ .subpx = LV_FONT_SUBPX_NONE,
+# endif
+# if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
+ .underline_position = -5,
+ .underline_thickness = 2,
+# endif
+ .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
+};
+
+#endif /*#if MONTSERRAT_48_DIGITS*/
diff --git a/keyboards/stront/keymaps/zzeneg/halconf.h b/keyboards/stront/keymaps/zzeneg/halconf.h
new file mode 100644
index 000000000000..46c5a48c9a91
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/stront/keymaps/zzeneg/icons/flag_pl.c b/keyboards/stront/keymaps/zzeneg/icons/flag_pl.c
new file mode 100644
index 000000000000..cac55d0eea6a
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/icons/flag_pl.c
@@ -0,0 +1,42 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef __has_include
+# if __has_include("lvgl.h")
+# ifndef LV_LVGL_H_INCLUDE_SIMPLE
+# define LV_LVGL_H_INCLUDE_SIMPLE
+# endif
+# endif
+#endif
+
+#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
+# include "lvgl.h"
+#else
+# include "lvgl/lvgl.h"
+#endif
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+# define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_FLAG_PL
+# define LV_ATTRIBUTE_IMG_FLAG_PL
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_FLAG_PL uint8_t flag_pl_map[] = {
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/
+ 0x3c, 0x14, 0xdc, 0xff, /*Color of index 1*/
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
+};
+
+const lv_img_dsc_t flag_pl = {
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .header.always_zero = 0,
+ .header.reserved = 0,
+ .header.w = 60,
+ .header.h = 40,
+ .data_size = 328,
+ .data = flag_pl_map,
+};
diff --git a/keyboards/stront/keymaps/zzeneg/icons/flag_ru.c b/keyboards/stront/keymaps/zzeneg/icons/flag_ru.c
new file mode 100644
index 000000000000..8019b0b41832
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/icons/flag_ru.c
@@ -0,0 +1,42 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef __has_include
+# if __has_include("lvgl.h")
+# ifndef LV_LVGL_H_INCLUDE_SIMPLE
+# define LV_LVGL_H_INCLUDE_SIMPLE
+# endif
+# endif
+#endif
+
+#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
+# include "lvgl.h"
+#else
+# include "lvgl/lvgl.h"
+#endif
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+# define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_FLAG_RU
+# define LV_ATTRIBUTE_IMG_FLAG_RU
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_FLAG_RU uint8_t flag_ru_map[] = {
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/
+ 0xd8, 0x88, 0x0c, 0xff, /*Color of index 1*/
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const lv_img_dsc_t flag_ru = {
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .header.always_zero = 0,
+ .header.reserved = 0,
+ .header.w = 60,
+ .header.h = 40,
+ .data_size = 328,
+ .data = flag_ru_map,
+};
diff --git a/keyboards/stront/keymaps/zzeneg/icons/flag_uk.c b/keyboards/stront/keymaps/zzeneg/icons/flag_uk.c
new file mode 100644
index 000000000000..8bf823482961
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/icons/flag_uk.c
@@ -0,0 +1,46 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#ifdef __has_include
+# if __has_include("lvgl.h")
+# ifndef LV_LVGL_H_INCLUDE_SIMPLE
+# define LV_LVGL_H_INCLUDE_SIMPLE
+# endif
+# endif
+#endif
+
+#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
+# include "lvgl.h"
+#else
+# include "lvgl/lvgl.h"
+#endif
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+# define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_FLAG_UK
+# define LV_ATTRIBUTE_IMG_FLAG_UK
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_FLAG_UK uint8_t flag_uk_map[] = {
+ 0xfe, 0xfe, 0xfe, 0xff, /*Color of index 0*/
+ 0x32, 0x15, 0xc9, 0xff, /*Color of index 1*/
+ 0x6c, 0x25, 0x06, 0xff, /*Color of index 2*/
+ 0xcd, 0xbd, 0xca, 0xff, /*Color of index 3*/
+
+ 0x40, 0x02, 0xaa, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xaa, 0xcd, 0x57, 0x50, 0x00, 0xea, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xab, 0xd5, 0x50, 0x55, 0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xb3, 0x55, 0xc0, 0xd5, 0x40, 0x03, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xf5, 0x54, 0x00, 0xc5, 0x54, 0x00, 0x2a, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xac, 0xd5, 0x70, 0x03, 0xb3, 0x55, 0x00, 0x0e, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xbd, 0x55, 0x00, 0x0a, 0xab, 0x15, 0x50, 0x00, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xab, 0x35, 0x5c, 0x00, 0xea, 0xaa, 0xcd, 0x54, 0x00, 0x3a, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaf, 0x55, 0x40, 0x02, 0xaa, 0xaa, 0xac, 0x55, 0x40, 0x02, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xcd, 0x57, 0x00, 0x3a, 0xaa, 0xaa, 0xab, 0x35, 0x50, 0x00, 0xea, 0x81, 0x55, 0x4e, 0xab, 0xd5, 0x50, 0x00, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xb1, 0x55, 0x00, 0x0a, 0x81, 0x55, 0x4e, 0xb3, 0x55, 0xc0, 0x0e, 0xaa, 0xaa, 0xaa, 0xaa, 0xac, 0xd5, 0x40, 0x03, 0x81, 0x55, 0x4e, 0xf5, 0x54, 0x00, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xc5, 0x54, 0x00, 0x01, 0x55, 0x40, 0xd5, 0x70, 0x03, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xc3, 0xfc, 0x00, 0x01, 0x55, 0x40, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0x01, 0x55, 0x40, 0x00, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0xaa, 0xc0, 0x0d, 0x54, 0x01, 0x55, 0x40, 0x00, 0xd5, 0x53, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xac, 0x00, 0x15, 0x53, 0x81, 0x55, 0x4e, 0xc0, 0x0d, 0x57, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xb0, 0x03, 0x55, 0x0a, 0x81, 0x55, 0x4e, 0xb0, 0x03, 0x55, 0x4e, 0xaa, 0xaa,
+ 0xaa, 0xab, 0x00, 0x05, 0x54, 0xea, 0x81, 0x55, 0x4e, 0xab, 0x00, 0x35, 0x5c, 0xaa, 0xaa, 0xaa, 0xac, 0x00, 0xd5, 0x42, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xc0, 0x0d, 0x55, 0x3a, 0xaa, 0xaa, 0xc0, 0x01, 0x55, 0x3a, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xac, 0x00, 0xd5, 0x72, 0xaa, 0xab, 0x00, 0x35, 0x50, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xab, 0x00, 0x35, 0x54, 0xea, 0xb0, 0x00, 0x55, 0x4e, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xb0, 0x03, 0x55, 0xca, 0xc0, 0x0d, 0x54, 0x2a, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xac, 0x00, 0xd5, 0x53, 0x00, 0x15, 0x53, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xc0, 0x0d, 0x57, 0x03, 0x55, 0x0a, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xb0, 0x03, 0x55, 0x05, 0x54, 0xea, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xab, 0x00, 0x35, 0xd5, 0x42, 0xaa, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0d,
+};
+
+const lv_img_dsc_t flag_uk = {
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .header.always_zero = 0,
+ .header.reserved = 0,
+ .header.w = 60,
+ .header.h = 40,
+ .data_size = 616,
+ .data = flag_uk_map,
+};
diff --git a/keyboards/stront/keymaps/zzeneg/keymap.c b/keyboards/stront/keymaps/zzeneg/keymap.c
new file mode 100644
index 000000000000..67cc52e142ce
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/keymap.c
@@ -0,0 +1,305 @@
+// Copyright 2022 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#include "zzeneg_display.h"
+#include "raw_hid.h"
+#include "transactions.h"
+
+// Left-hand home row mods
+#define HOME_A LGUI_T(KC_A)
+#define HOME_S LALT_T(KC_S)
+#define HOME_D LCTL_T(KC_D)
+#define HOME_F LSFT_T(KC_F)
+
+// Right-hand home row mods
+#define HOME_J RSFT_T(KC_J)
+#define HOME_K RCTL_T(KC_K)
+#define HOME_L LALT_T(KC_L)
+#define HOME_P RGUI_T(KC_P)
+
+// bottom mods
+#define SYM_SPC LT(_SYMBOL, KC_SPC)
+#define NUM_TAB LT(_NUMBER, KC_TAB)
+#define FUNC_ESC LT(_FUNC, KC_ESC)
+#define FUNC_ENT LT(_FUNC, KC_ENT)
+#define NAV_BSPC LT(_NAV, KC_BSPC)
+#define EU_DEL LT(_EU, KC_DEL)
+
+// game layer mods
+#define LALT_Q LALT_T(KC_Q)
+#define LSFT_MINS LSFT_T(KC_MINS)
+#define LCTL_ESC LCTL_T(KC_ESC)
+#define LGUI_QUOT LGUI_T(KC_QUOT)
+
+enum custom_keycodes {
+ M_EMAIL = SAFE_RANGE,
+ M_CBR,
+ M_PRN,
+ M_BRC,
+ M_ARROW,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * .---------------------------. .---------------------------.
+ * | W | E | R | T | | Y | U | I | O |
+ * .------+------+------+------+------+------| |------+------+------+------+------+------.
+ * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
+ * '-----------------------------------------/ / \ \-----------------------------------------'
+ * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
+ * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | _EU |
+ * `-------------''-------' '-------''-------------'
+ */
+ // clang-format off
+ [_QWERTY] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_P, KC_SCLN,
+ KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, EU_DEL
+ ),
+
+ [_GAME] = LAYOUT(
+ KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
+ LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_P, KC_SCLN,
+ LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
+ LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, EU_DEL
+ ),
+
+ [_EU] = LAYOUT(
+ XXXXXXX, RALT(KC_E), XXXXXXX, M_CBR, KC_MUTE, RALT(KC_U), XXXXXXX, RALT(KC_O),
+ XXXXXXX, RALT(KC_A), RALT(KC_S), LCTL(KC_C), KC_LSFT, M_PRN, M_EMAIL, KC_RSFT, M_ARROW, RALT(KC_L), XXXXXXX, XXXXXXX,
+ XXXXXXX, RALT(KC_Z), RALT(KC_X), RALT(KC_C), LCTL(KC_V), M_BRC, RALT(KC_N), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, XXXXXXX, _______
+ ),
+
+ [_NAV] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
+ XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, LALT(KC_UP), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LALT(KC_DOWN), KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
+ FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, EU_DEL
+ ),
+
+ [_NUMBER] = LAYOUT(
+ KC_7, KC_8, KC_9, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_GRV, KC_0, KC_4, KC_5, KC_6, KC_DOT, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_BSPC, KC_AT, KC_1, KC_2, KC_3, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, EU_DEL
+ ),
+
+ [_SYMBOL] = LAYOUT(
+ KC_PERC, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_DLR, KC_AMPR, KC_EXLM, KC_EQL, KC_LPRN, KC_RPRN, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_BSLS, KC_PIPE, KC_HASH, KC_ASTR, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, EU_DEL
+ ),
+
+ [_FUNC] = LAYOUT(
+ KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
+ KC_LCTL, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
+ KC_CIRC, KC_F10, KC_F1, KC_F2, KC_F3, KC_TILD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
+ ),
+
+ [_SYS] = LAYOUT(
+ BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
+ XXXXXXX, XXXXXXX, DT_UP, DT_DOWN, DT_PRNT, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
+ EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
+ _______, QK_BOOT, _______, _______, QK_BOOT, _______
+ )
+ // clang-format on
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ // clang-format off
+ [_QWERTY] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_GAME] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_EU] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_NAV] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+ [_NUMBER] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+ [_SYMBOL] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+ [_FUNC] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
+ [_SYS] = { ENCODER_CCW_CW(BL_DOWN, BL_UP), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }
+ // clang-format on
+};
+#endif // ENCODER_MAP_ENABLE
+
+/* different tapping term for different fingers */
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // pinkies
+ case HOME_A:
+ case HOME_P:
+ return 250;
+ // ring
+ case HOME_S:
+ case HOME_L:
+ return 200;
+ // middle
+ case HOME_D:
+ case HOME_K:
+ return 160;
+ // index
+ case HOME_F:
+ case HOME_J:
+ return 140;
+ // thumb and game
+ default:
+ return TAPPING_TERM;
+ }
+}
+
+/* helper function for custom increased tapping term for home row CTRL + other keys */
+uint16_t HOME_CTRL_pressed_time = 0;
+void custom_home_row_ctrl(keyrecord_t *record, uint16_t time) {
+ if (record->tap.count && get_mods() & MOD_MASK_CTRL) {
+ if (TIMER_DIFF_16(record->event.time, HOME_CTRL_pressed_time) < time) {
+ del_mods(MOD_MASK_CTRL);
+ tap_code(KC_D);
+ }
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ dprintf("process_record_user %u %s %s %d\n", keycode, record->event.pressed ? "pressed" : "depressed", record->tap.interrupted ? "interrupted" : "not interrupted", record->tap.count);
+
+ if (record->event.pressed) {
+ uint8_t data[32];
+ data[0] = 0;
+
+ switch (keycode) {
+ // send hid commands
+ case KC_VOLU:
+ case KC_VOLD:
+ data[0] = _VOLUME;
+ break;
+
+ // handle macros
+ case M_EMAIL:
+ SEND_STRING("zzeneg@gmail.com");
+ break;
+ case M_CBR:
+ SEND_STRING("{}" SS_TAP(X_LEFT));
+ break;
+ case M_PRN:
+ SEND_STRING("()" SS_TAP(X_LEFT));
+ break;
+ case M_BRC:
+ SEND_STRING("[]" SS_TAP(X_LEFT));
+ break;
+ case M_ARROW:
+ SEND_STRING("=>");
+ break;
+
+ // custom increased tapping term for home row CTRL + other keys
+ case HOME_D:
+ // save time when CTRL from D key is pressed
+ if (!record->tap.count) {
+ HOME_CTRL_pressed_time = record->event.time;
+ }
+ break;
+ case HOME_S:
+ // if S is pressed and CTRL is active, and < 150 passed since CTRL was pressed, cancel CTRL and send D instead
+ custom_home_row_ctrl(record, 150);
+ break;
+ case HOME_A:
+ // if A is pressed and CTRL is active, and < 180 passed since CTRL was pressed, cancel CTRL and send D instead
+ custom_home_row_ctrl(record, 180);
+ break;
+ }
+
+ if (data[0]) {
+ dprintf("raw_hid_send %u\n", data[0]);
+ raw_hid_send(data, sizeof(data));
+ }
+ }
+
+ return true;
+}
+
+/* Active Layer processing */
+layer_state_t layer_state_set_user(layer_state_t state) {
+ if (is_display_enabled()) {
+ display_process_layer_state(get_highest_layer(state));
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ uint8_t layer = get_highest_layer(state);
+ dprintf("RPC_ID_USER_LAYER_SYNC: %u\n", layer);
+ transaction_rpc_send(RPC_ID_USER_LAYER_SYNC, 1, &layer);
+ }
+
+ return state;
+}
+
+/* Caps Word processing */
+void caps_word_set_user(bool active) {
+ if (is_display_enabled()) {
+ display_process_caps_word(active);
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ dprintf("RPC_ID_USER_CAPS_WORD_SYNC: %s\n", active ? "active" : "inactive");
+ transaction_rpc_send(RPC_ID_USER_CAPS_WORD_SYNC, 1, &active);
+ }
+}
+
+/* default caps word logic that allows KC_MINS. Underscore can be typed with KC_RSFT + KC_MINS */
+bool caps_word_press_user(uint16_t keycode) {
+ switch (keycode) {
+ // Keycodes that continue Caps Word, with shift applied.
+ case KC_A ... KC_Z:
+ add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
+ return true;
+
+ // Keycodes that continue Caps Word, without shifting.
+ case KC_1 ... KC_0:
+ case KC_BSPC:
+ case KC_DEL:
+ case KC_MINS:
+ case KC_RSFT:
+ return true;
+
+ default:
+ return false; // Deactivate Caps Word.
+ }
+}
+
+/* Raw HID processing*/
+void raw_hid_receive(uint8_t *data, uint8_t length) {
+ dprintf("raw_hid_receive - received %u bytes \n", length);
+
+ if (is_display_enabled()) {
+ display_process_raw_hid_data(data, length);
+ } else if (is_keyboard_master() && !is_keyboard_left()) {
+ dprint("RPC_ID_USER_HID_SYNC \n");
+ transaction_rpc_send(RPC_ID_USER_HID_SYNC, length, data);
+ }
+}
+
+void hid_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_raw_hid_data((uint8_t *)initiator2target_buffer, initiator2target_buffer_size);
+ }
+}
+
+void layer_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_layer_state(*(uint8_t *)initiator2target_buffer);
+ }
+}
+
+void caps_word_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
+ if (is_display_enabled()) {
+ display_process_caps_word(*(bool *)initiator2target_buffer);
+ }
+}
+
+void keyboard_post_init_user() {
+ // sync received hid data
+ transaction_register_rpc(RPC_ID_USER_HID_SYNC, hid_sync);
+ // sync highest layer (a bit more performant than standard SPLIT_LAYER_STATE_ENABLE)
+ transaction_register_rpc(RPC_ID_USER_LAYER_SYNC, layer_sync);
+ // sync caps word state
+ transaction_register_rpc(RPC_ID_USER_CAPS_WORD_SYNC, caps_word_sync);
+}
diff --git a/keyboards/stront/keymaps/zzeneg/lv_conf.h b/keyboards/stront/keymaps/zzeneg/lv_conf.h
new file mode 100644
index 000000000000..8b0c1f3f8335
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/lv_conf.h
@@ -0,0 +1,148 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* disable some things before lv_conf include */
+#define LV_USE_CALENDAR 0
+#define LV_USE_SPAN 0
+#define LV_USE_ROLLER 0
+#define LV_USE_TEXTAREA 0
+
+#include_next
+
+/* Custom fonts:
+ - montserrat_20_en_ru - english/cyrillic symbols, range 0x20-0x7F,0x0410-0x044F,0x0401,0x0451
+ - montserrat_48_digits - digits, dot and colon only, range 0x2E,0x30-0x3A
+ */
+
+#undef LV_FONT_CUSTOM_DECLARE
+#define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(montserrat_20_en_ru) LV_FONT_DECLARE(montserrat_48_digits)
+
+#undef LV_FONT_DEFAULT
+#define LV_FONT_DEFAULT &montserrat_20_en_ru
+
+#undef LV_FONT_MONTSERRAT_20
+#define LV_FONT_MONTSERRAT_20 0
+
+#undef LV_FONT_MONTSERRAT_48
+#define LV_FONT_MONTSERRAT_48 0
+
+// #undef LV_FONT_MONTSERRAT_16
+// #define LV_FONT_MONTSERRAT_16 1
+
+// #undef LV_FONT_MONTSERRAT_18
+// #define LV_FONT_MONTSERRAT_18 1
+
+// #undef LV_FONT_MONTSERRAT_20
+// #define LV_FONT_MONTSERRAT_20 1
+
+// #undef LV_FONT_MONTSERRAT_22
+// #define LV_FONT_MONTSERRAT_22 1
+
+// #undef LV_FONT_MONTSERRAT_24
+// #define LV_FONT_MONTSERRAT_24 1
+
+// #undef LV_FONT_MONTSERRAT_26
+// #define LV_FONT_MONTSERRAT_26 1
+
+// #undef LV_FONT_MONTSERRAT_28
+// #define LV_FONT_MONTSERRAT_28 1
+
+// #undef LV_FONT_MONTSERRAT_30
+// #define LV_FONT_MONTSERRAT_30 1
+
+// #undef LV_FONT_MONTSERRAT_32
+// #define LV_FONT_MONTSERRAT_32 1
+
+// #undef LV_FONT_MONTSERRAT_34
+// #define LV_FONT_MONTSERRAT_34 1
+
+// #undef LV_FONT_MONTSERRAT_36
+// #define LV_FONT_MONTSERRAT_36 1
+
+// #undef LV_FONT_MONTSERRAT_38
+// #define LV_FONT_MONTSERRAT_38 1
+
+// #undef LV_FONT_MONTSERRAT_40
+// #define LV_FONT_MONTSERRAT_40 1
+
+// #undef LV_FONT_MONTSERRAT_42
+// #define LV_FONT_MONTSERRAT_42 1
+
+// #undef LV_FONT_MONTSERRAT_44
+// #define LV_FONT_MONTSERRAT_44 1
+
+// #undef LV_FONT_MONTSERRAT_46
+// #define LV_FONT_MONTSERRAT_46 1
+
+// #undef LV_FONT_MONTSERRAT_48
+// #define LV_FONT_MONTSERRAT_48 1
+
+/* disable widgets*/
+#undef LV_USE_ANIMIMG
+#define LV_USE_ANIMIMG 0
+#undef LV_USE_BAR
+#define LV_USE_BAR 0
+#undef LV_USE_BTN
+#define LV_USE_BTN 0
+#undef LV_USE_BTNMATRIX
+#define LV_USE_BTNMATRIX 0
+#undef LV_USE_CANVAS
+#define LV_USE_CANVAS 0
+#undef LV_USE_CHECKBOX
+#define LV_USE_CHECKBOX 0
+#undef LV_USE_DROPDOWN
+#define LV_USE_DROPDOWN 0
+#undef LV_USE_LINE
+#define LV_USE_LINE 0
+#undef LV_USE_SLIDER
+#define LV_USE_SLIDER 0
+#undef LV_USE_SWITCH
+#define LV_USE_SWITCH 0
+#undef LV_USE_TABLE
+#define LV_USE_TABLE 0
+
+/* disable extra components */
+#undef LV_USE_CHART
+#define LV_USE_CHART 0
+#undef LV_USE_COLORWHEEL
+#define LV_USE_COLORWHEEL 0
+#undef LV_USE_IMGBTN
+#define LV_USE_IMGBTN 0
+#undef LV_USE_KEYBOARD
+#define LV_USE_KEYBOARD 0
+#undef LV_USE_LED
+#define LV_USE_LED 0
+#undef LV_USE_LIST
+#define LV_USE_LIST 0
+#undef LV_USE_MENU
+#define LV_USE_MENU 0
+#undef LV_USE_METER
+#define LV_USE_METER 0
+#undef LV_USE_MSGBOX
+#define LV_USE_MSGBOX 0
+#undef LV_USE_SPINBOX
+#define LV_USE_SPINBOX 0
+#undef LV_USE_SPINNER
+#define LV_USE_SPINNER 0
+#undef LV_USE_TABVIEW
+#define LV_USE_TABVIEW 0
+#undef LV_USE_TILEVIEW
+#define LV_USE_TILEVIEW 0
+#undef LV_USE_WIN
+#define LV_USE_WIN 0
+
+/* disable themes */
+#undef LV_USE_THEME_BASIC
+#define LV_USE_THEME_BASIC 0
+#undef LV_USE_THEME_MONO
+#define LV_USE_THEME_MONO 0
+
+/* disable layouts */
+#undef LV_USE_GRID
+#define LV_USE_GRID 0
+
+/* disable build examples */
+#undef LV_BUILD_EXAMPLES
+#define LV_BUILD_EXAMPLES 0
diff --git a/keyboards/stront/keymaps/zzeneg/mcuconf.h b/keyboards/stront/keymaps/zzeneg/mcuconf.h
new file mode 100644
index 000000000000..47ee67119de6
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/stront/keymaps/zzeneg/rules.mk b/keyboards/stront/keymaps/zzeneg/rules.mk
new file mode 100644
index 000000000000..26ddf778031e
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/rules.mk
@@ -0,0 +1,17 @@
+# CONSOLE_ENABLE = yes
+
+EXTRAKEY_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+CAPS_WORD_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+DYNAMIC_TAPPING_TERM_ENABLE = yes
+
+POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c
+
+RAW_ENABLE = yes
+
+SRC += zzeneg_display.c \
+ fonts/montserrat_20_en_ru.c \
+ fonts/montserrat_48_digits.c \
+ icons/flag_uk.c \
+ icons/flag_ru.c
diff --git a/keyboards/stront/keymaps/zzeneg/zzeneg_display.c b/keyboards/stront/keymaps/zzeneg/zzeneg_display.c
new file mode 100644
index 000000000000..d8d6f4d70be6
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/zzeneg_display.c
@@ -0,0 +1,242 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "zzeneg_display.h"
+#include "display.h"
+#include "raw_hid.h"
+#include "lvgl_helpers.h"
+
+uint16_t home_screen_timer = 0;
+
+/* screens */
+static lv_obj_t *screen_home;
+static lv_obj_t *screen_volume;
+static lv_obj_t *screen_media;
+
+/* home screen content */
+static lv_obj_t *label_time;
+static lv_obj_t *label_volume_home;
+static lv_obj_t *label_shift;
+static lv_obj_t *label_ctrl;
+static lv_obj_t *label_alt;
+static lv_obj_t *label_gui;
+static lv_obj_t *label_layer;
+static lv_obj_t *label_caps;
+static lv_obj_t *label_caps_word;
+static lv_obj_t *icon_layout;
+
+/* volume screen content */
+static lv_obj_t *arc_volume;
+static lv_obj_t *label_volume_arc;
+
+/* media screen content */
+static lv_obj_t *label_media_artist;
+static lv_obj_t *label_media_title;
+
+LV_IMG_DECLARE(flag_ru);
+LV_IMG_DECLARE(flag_uk);
+/* can be replaced with PL flag (update rules.mk as well) */
+// LV_IMG_DECLARE(flag_pl);
+
+enum layout { _EN = 0, _RU };
+void set_layout_icon(uint8_t layout) {
+ switch (layout) {
+ case _EN:
+ lv_img_set_src(icon_layout, &flag_uk);
+ break;
+
+ case _RU:
+ lv_img_set_src(icon_layout, &flag_ru);
+ break;
+ }
+}
+
+void read_string(uint8_t *data, char *string_data) {
+ uint8_t data_length = data[1];
+ memcpy(string_data, data + 2, data_length);
+ string_data[data_length] = '\0';
+}
+
+void start_home_screen_timer(void) {
+ dprint("reset home screen\n");
+ home_screen_timer = timer_read();
+}
+
+void init_screen_home_custom(void) {
+ screen_home = lv_scr_act();
+ lv_obj_add_style(screen_home, &style_screen, 0);
+ use_flex_column(screen_home);
+
+ label_volume_home = lv_label_create(screen_home);
+ lv_label_set_text(label_volume_home, "");
+
+ lv_obj_t *mods = lv_obj_create(screen_home);
+ lv_obj_add_style(mods, &style_container, 0);
+ use_flex_row(mods);
+
+ label_gui = create_button(mods, "GUI", &style_button, &style_button_active);
+ label_alt = create_button(mods, "ALT", &style_button, &style_button_active);
+ label_ctrl = create_button(mods, "CTL", &style_button, &style_button_active);
+ label_shift = create_button(mods, "SFT", &style_button, &style_button_active);
+
+ label_time = lv_label_create(screen_home);
+ lv_label_set_text(label_time, "00:00");
+ lv_obj_set_style_text_font(label_time, &montserrat_48_digits, LV_PART_MAIN);
+
+ lv_obj_t *caps = lv_obj_create(screen_home);
+ lv_obj_add_style(caps, &style_container, 0);
+ use_flex_row(caps);
+
+ label_caps = create_button(caps, "CAPS", &style_button, &style_button_active);
+ label_caps_word = create_button(caps, "CAPS WORD", &style_button, &style_button_active);
+
+ lv_obj_t *bottom_row = lv_obj_create(screen_home);
+ lv_obj_add_style(bottom_row, &style_container, 0);
+
+ label_layer = lv_label_create(bottom_row);
+ lv_label_set_text(label_layer, "");
+ lv_obj_align(label_layer, LV_ALIGN_LEFT_MID, 10, 0);
+ display_process_layer_state(0);
+
+ icon_layout = lv_img_create(bottom_row);
+ lv_obj_set_style_radius(icon_layout, 4, 0);
+ lv_obj_set_style_clip_corner(icon_layout, true, 0);
+ lv_obj_align(icon_layout, LV_ALIGN_RIGHT_MID, -10, 0);
+}
+
+void init_screen_volume(void) {
+ screen_volume = lv_obj_create(NULL);
+ lv_obj_add_style(screen_volume, &style_screen, 0);
+
+ arc_volume = lv_arc_create(screen_volume);
+ lv_obj_set_size(arc_volume, 200, 200);
+ lv_obj_center(arc_volume);
+
+ label_volume_arc = lv_label_create(screen_volume);
+ lv_label_set_text(label_volume_arc, "00");
+ lv_obj_set_style_text_font(label_volume_arc, &montserrat_48_digits, LV_PART_MAIN);
+ lv_obj_center(label_volume_arc);
+
+ lv_obj_t *volume_text_label = lv_label_create(screen_volume);
+ lv_label_set_text(volume_text_label, "Volume");
+ lv_obj_align(volume_text_label, LV_ALIGN_BOTTOM_MID, 0, -10);
+}
+
+void init_screen_media(void) {
+ screen_media = lv_obj_create(NULL);
+ lv_obj_add_style(screen_media, &style_screen, 0);
+ use_flex_column(screen_media);
+ lv_obj_set_flex_align(screen_media, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
+
+ label_media_artist = lv_label_create(screen_media);
+ lv_label_set_text(label_media_artist, "N/A");
+ lv_label_set_long_mode(label_media_artist, LV_LABEL_LONG_WRAP);
+ lv_obj_set_width(label_media_artist, lv_pct(90));
+ lv_obj_set_style_text_align(label_media_artist, LV_TEXT_ALIGN_CENTER, 0);
+
+ label_media_title = lv_label_create(screen_media);
+ lv_label_set_text(label_media_title, "N/A");
+ lv_label_set_long_mode(label_media_title, LV_LABEL_LONG_WRAP);
+ lv_obj_set_width(label_media_title, lv_pct(90));
+ lv_obj_set_style_text_align(label_media_title, LV_TEXT_ALIGN_CENTER, 0);
+}
+
+bool display_init_user(void) {
+ init_screen_home_custom();
+ init_screen_volume();
+ init_screen_media();
+
+ return false;
+}
+
+void display_process_raw_hid_data(uint8_t *data, uint8_t length) {
+ uint8_t data_type = data[0];
+ char string_data[length - 2];
+ dprintf("display_process_raw_hid_data - received data_type %u \n", data_type);
+ switch (data_type) {
+ case _TIME:
+ dprintf("time %02d:%02d\n", data[1], data[2]);
+ lv_label_set_text_fmt(label_time, "%02d:%02d", data[1], data[2]);
+ break;
+
+ case _VOLUME:
+ dprintf("volume %d\n", data[1]);
+ lv_label_set_text_fmt(label_volume_home, "Volume: %02d%%", data[1]);
+ lv_label_set_text_fmt(label_volume_arc, "%02d", data[1]);
+ lv_arc_set_value(arc_volume, data[1]);
+ lv_scr_load(screen_volume);
+ start_home_screen_timer();
+ break;
+
+ case _LAYOUT:
+ dprintf("layout %d\n", data[1]);
+ set_layout_icon(data[1]);
+ break;
+
+ case _MEDIA_ARTIST:
+ read_string(data, string_data);
+ dprintf("media artist %s\n", string_data);
+ lv_label_set_text(label_media_artist, string_data);
+ lv_scr_load(screen_media);
+ start_home_screen_timer();
+ break;
+
+ case _MEDIA_TITLE:
+ read_string(data, string_data);
+ dprintf("media title %s\n", string_data);
+ lv_label_set_text(label_media_title, string_data);
+ lv_scr_load(screen_media);
+ start_home_screen_timer();
+ break;
+ }
+}
+
+void display_process_layer_state(uint8_t layer) {
+ switch (layer) {
+ case _QWERTY:
+ lv_label_set_text(label_layer, "QWERTY");
+ break;
+ case _GAME:
+ lv_label_set_text(label_layer, "GAME");
+ break;
+ case _EU:
+ lv_label_set_text(label_layer, "EU");
+ break;
+ case _NAV:
+ lv_label_set_text(label_layer, "NAV");
+ break;
+ case _NUMBER:
+ lv_label_set_text(label_layer, "NUMBER");
+ break;
+ case _SYMBOL:
+ lv_label_set_text(label_layer, "SYMBOL");
+ break;
+ case _FUNC:
+ lv_label_set_text(label_layer, "FUNC");
+ break;
+ case _SYS:
+ lv_label_set_text(label_layer, "SYSTEM");
+ break;
+ }
+}
+
+void display_housekeeping_task(void) {
+ if (home_screen_timer && timer_elapsed(home_screen_timer) > 5000) {
+ home_screen_timer = 0;
+ lv_scr_load(screen_home);
+ }
+
+ toggle_state(label_shift, LV_STATE_PRESSED, MODS_SHIFT);
+ toggle_state(label_ctrl, LV_STATE_PRESSED, MODS_CTRL);
+ toggle_state(label_alt, LV_STATE_PRESSED, MODS_ALT);
+ toggle_state(label_gui, LV_STATE_PRESSED, MODS_GUI);
+}
+
+void display_process_caps(bool active) {
+ toggle_state(label_caps, LV_STATE_PRESSED, active);
+}
+
+void display_process_caps_word(bool active) {
+ dprint("display_process_caps_word\n");
+ toggle_state(label_caps_word, LV_STATE_PRESSED, active);
+}
diff --git a/keyboards/stront/keymaps/zzeneg/zzeneg_display.h b/keyboards/stront/keymaps/zzeneg/zzeneg_display.h
new file mode 100644
index 000000000000..22b36793f404
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/zzeneg_display.h
@@ -0,0 +1,27 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+typedef enum {
+ _QWERTY = 0,
+ _GAME,
+ _EU,
+ _NAV,
+ _NUMBER,
+ _SYMBOL,
+ _FUNC,
+ _SYS,
+} layer_number;
+
+typedef enum {
+ _TIME = 0,
+ _VOLUME,
+ _LAYOUT,
+ _MEDIA_ARTIST,
+ _MEDIA_TITLE,
+} hid_data_type;
+
+void display_process_raw_hid_data(uint8_t *data, uint8_t length);
+void display_process_layer_state(uint8_t layer);
+void display_process_caps_word(bool active);
diff --git a/keyboards/stront/lv_conf.h b/keyboards/stront/lv_conf.h
new file mode 100644
index 000000000000..57b093d500ab
--- /dev/null
+++ b/keyboards/stront/lv_conf.h
@@ -0,0 +1,18 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef LV_FONT_DEFAULT
+#define LV_FONT_DEFAULT &lv_font_montserrat_28
+
+#undef LV_FONT_MONTSERRAT_14
+#define LV_FONT_MONTSERRAT_14 0
+
+#undef LV_FONT_MONTSERRAT_28
+#define LV_FONT_MONTSERRAT_28 1
+
+#undef LV_FONT_MONTSERRAT_48
+#define LV_FONT_MONTSERRAT_48 1
diff --git a/keyboards/stront/lvgl_helpers.c b/keyboards/stront/lvgl_helpers.c
new file mode 100644
index 000000000000..f4f069832156
--- /dev/null
+++ b/keyboards/stront/lvgl_helpers.c
@@ -0,0 +1,113 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "lvgl_helpers.h"
+
+lv_obj_t *create_button(lv_obj_t *parent, const char *text, lv_style_t *style, lv_style_t *style_pressed) {
+ lv_obj_t *label = lv_label_create(parent);
+ lv_label_set_text(label, text);
+ lv_obj_add_style(label, style, 0);
+ lv_obj_add_style(label, style_pressed, LV_STATE_PRESSED);
+ return label;
+}
+
+void use_flex_row(void *obj) {
+ lv_obj_set_layout(obj, LV_LAYOUT_FLEX);
+ lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_ROW);
+ lv_obj_set_flex_align(obj, LV_FLEX_ALIGN_SPACE_AROUND, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
+}
+
+void use_flex_column(void *obj) {
+ lv_obj_set_layout(obj, LV_LAYOUT_FLEX);
+ lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN);
+ lv_obj_set_flex_align(obj, LV_FLEX_ALIGN_SPACE_AROUND, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
+}
+
+void toggle_state(void *obj, lv_state_t state, bool enabled) {
+ if (enabled) {
+ lv_obj_add_state(obj, state);
+ } else {
+ lv_obj_clear_state(obj, state);
+ }
+}
+
+void toggle_hidden(void *obj, bool visible) {
+ if (visible) {
+ lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN);
+ } else {
+ lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
+ }
+}
+
+void resize_font(void *label, int32_t font_size) {
+ dprintf("font size %ld\n", font_size);
+#if LV_FONT_MONTSERRAT_8
+ if (font_size == 8) return lv_obj_set_style_text_font(label, &lv_font_montserrat_8, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_10
+ if (font_size <= 10) return lv_obj_set_style_text_font(label, &lv_font_montserrat_8, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_12
+ if (font_size <= 12) return lv_obj_set_style_text_font(label, &lv_font_montserrat_12, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_14
+ if (font_size <= 14) return lv_obj_set_style_text_font(label, &lv_font_montserrat_14, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_16
+ if (font_size <= 16) return lv_obj_set_style_text_font(label, &lv_font_montserrat_16, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_18
+ if (font_size <= 18) return lv_obj_set_style_text_font(label, &lv_font_montserrat_18, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_20
+ if (font_size <= 20) return lv_obj_set_style_text_font(label, &lv_font_montserrat_20, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_22
+ if (font_size <= 22) return lv_obj_set_style_text_font(label, &lv_font_montserrat_22, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_24
+ if (font_size <= 24) return lv_obj_set_style_text_font(label, &lv_font_montserrat_24, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_26
+ if (font_size <= 26) return lv_obj_set_style_text_font(label, &lv_font_montserrat_26, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_28
+ if (font_size <= 28) return lv_obj_set_style_text_font(label, &lv_font_montserrat_28, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_30
+ if (font_size <= 30) return lv_obj_set_style_text_font(label, &lv_font_montserrat_30, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_32
+ if (font_size <= 32) return lv_obj_set_style_text_font(label, &lv_font_montserrat_32, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_34
+ if (font_size <= 34) return lv_obj_set_style_text_font(label, &lv_font_montserrat_34, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_36
+ if (font_size <= 36) return lv_obj_set_style_text_font(label, &lv_font_montserrat_36, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_38
+ if (font_size <= 38) return lv_obj_set_style_text_font(label, &lv_font_montserrat_38, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_40
+ if (font_size <= 40) return lv_obj_set_style_text_font(label, &lv_font_montserrat_40, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_42
+ if (font_size <= 42) return lv_obj_set_style_text_font(label, &lv_font_montserrat_42, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_44
+ if (font_size <= 44) return lv_obj_set_style_text_font(label, &lv_font_montserrat_44, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_46
+ if (font_size <= 46) return lv_obj_set_style_text_font(label, &lv_font_montserrat_46, LV_PART_MAIN);
+#endif
+#if LV_FONT_MONTSERRAT_48
+ if (font_size <= 48) return lv_obj_set_style_text_font(label, &lv_font_montserrat_48, LV_PART_MAIN);
+#endif
+}
+
+void debug_set_obj_border(lv_obj_t *obj) {
+ lv_color_t red = lv_color_hex(0xFF0000);
+ lv_obj_set_style_border_color(obj, red, 0);
+ lv_obj_set_style_border_width(obj, 1, 0);
+}
diff --git a/keyboards/stront/lvgl_helpers.h b/keyboards/stront/lvgl_helpers.h
new file mode 100644
index 000000000000..671f6cccd2df
--- /dev/null
+++ b/keyboards/stront/lvgl_helpers.h
@@ -0,0 +1,13 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "qp_lvgl.h"
+
+lv_obj_t *create_button(lv_obj_t *parent, const char *text, lv_style_t *style, lv_style_t *style_pressed);
+
+void use_flex_row(void *obj);
+void use_flex_column(void *obj);
+void toggle_state(void *obj, lv_state_t state, bool enabled);
+void toggle_hidden(void *obj, bool visible);
+void resize_font(void *label, int32_t v);
+void debug_set_obj_border(lv_obj_t *obj);
diff --git a/keyboards/stront/mcuconf.h b/keyboards/stront/mcuconf.h
new file mode 100644
index 000000000000..f35384aa2868
--- /dev/null
+++ b/keyboards/stront/mcuconf.h
@@ -0,0 +1,12 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_SPI_USE_SPI1
+#define RP_SPI_USE_SPI1 TRUE
+
+#undef RP_PWM_USE_PWM7
+#define RP_PWM_USE_PWM7 TRUE
diff --git a/keyboards/stront/readme.md b/keyboards/stront/readme.md
new file mode 100644
index 000000000000..1da6f0bdd1a5
--- /dev/null
+++ b/keyboards/stront/readme.md
@@ -0,0 +1,45 @@
+# stront
+
+![stront](https://i.imgur.com/FOPnWhch.jpg)
+
+Split keyboard with 38 keys, LCD display and Cirque trackpad.
+
+- Keyboard Maintainer: [zzeneg](https://github.com/zzeneg)
+- Hardware Supported: Stront PCBs, Waveshare RP2040 Zero
+- Hardware Availability: [GitHub](https://github.com/zzeneg/stront)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make stront:default
+
+Flashing example for this keyboard:
+
+ make stront:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Keymaps
+
+- `default` - sample keymap with home row mods. Not recommended for longer use - create your own.
+- `hid` - default keymap with HID support. Requires additional software running on computer, see https://github.com/zzeneg/qmk-hid-host.
+- `i2c` - default keymap with I2C Cirque instead of default SPI
+- `zzeneg` - my highly customized layout, you can use as a reference
+
+Keymaps have [EE_HANDS](https://docs.qmk.fm/#/feature_split_keyboard?id=handedness-by-eeprom) enabled, so any side can be master (though using side with touchpad as master is recommended). You have to specify left/right side by flashing with different commands:
+
+`qmk flash -kb stront -km default -bl uf2-split-left`
+
+or
+
+`qmk flash -kb stront -km default -bl uf2-split-right`
+
+If your keyboard is flashed already, you can do it by pressing key combinations - hold inner thumb key, then hold outer thumb key to activate SYSTEM layer. Now press outer bottom pinky key for left side or inner bottom index key for right side. See [keymap](./keymaps/default/keymap.c) for better understanding. Reconnect the keyboard to apply changes.
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (outer top pinky key) and plug in the keyboard
+- **Keycode in layout**: Press the key mapped to `QK_BOOT` - by default you need to hold inner thumb key, then hold outer thumb key and press middle thumb key (see [keymap.c](./keymaps/default/keymap.c) for details). It's a complicated combination to avoid accidental activations.
+
+RP2040 Zero has physical boot/reset buttons but they are unaccessible after the keyboards is assembled, so always keep a `QK_BOOT` key and/or bootmagic feature in your keymaps.
diff --git a/keyboards/stront/rules.mk b/keyboards/stront/rules.mk
new file mode 100644
index 000000000000..940a592d11db
--- /dev/null
+++ b/keyboards/stront/rules.mk
@@ -0,0 +1,12 @@
+SERIAL_DRIVER = vendor
+WS2812_DRIVER = vendor
+
+POINTING_DEVICE_ENABLE = yes
+POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
+
+QUANTUM_PAINTER_ENABLE = yes
+QUANTUM_PAINTER_DRIVERS += st7789_spi
+QUANTUM_PAINTER_LVGL_INTEGRATION = yes
+
+SRC += lvgl_helpers.c \
+ display.c
diff --git a/keyboards/stront/stront.c b/keyboards/stront/stront.c
new file mode 100644
index 000000000000..dc1f588c9b8b
--- /dev/null
+++ b/keyboards/stront/stront.c
@@ -0,0 +1,61 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "stront.h"
+#include "display.h"
+
+static bool display_enabled;
+
+/* public function to be used in keymaps */
+bool is_display_enabled(void) {
+ return display_enabled;
+}
+
+/* default encoder keys */
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+ if (index == 0) {
+ if (clockwise) {
+ tap_code_delay(KC_VOLU, 10);
+ } else {
+ tap_code_delay(KC_VOLD, 10);
+ }
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code_delay(KC_RIGHT, 10);
+ } else {
+ tap_code_delay(KC_LEFT, 10);
+ }
+ }
+ return true;
+}
+
+/* Caps Lock processing */
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res && display_enabled) {
+ display_process_caps(led_state.caps_lock);
+ }
+
+ return res;
+}
+
+void housekeeping_task_kb(void) {
+ if (display_enabled) {
+ display_housekeeping_task();
+ }
+
+ housekeeping_task_user();
+}
+
+void keyboard_post_init_kb(void) {
+ display_enabled = false;
+
+ if (is_keyboard_left()) {
+ display_enabled = display_init_kb();
+ }
+
+ keyboard_post_init_user();
+}
diff --git a/keyboards/stront/stront.h b/keyboards/stront/stront.h
new file mode 100644
index 000000000000..9ca618a6fbbd
--- /dev/null
+++ b/keyboards/stront/stront.h
@@ -0,0 +1,6 @@
+// Copyright 2023 zzeneg (@zzeneg)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+bool is_display_enabled(void);
diff --git a/keyboards/studiokestra/galatea/readme.md b/keyboards/studiokestra/galatea/readme.md
index 580815fa6304..d336855bc263 100644
--- a/keyboards/studiokestra/galatea/readme.md
+++ b/keyboards/studiokestra/galatea/readme.md
@@ -9,6 +9,7 @@ TKL H87/88c compatible PCB with support for the most common layouts.
* Hardware Availability: https://RNDKBD.com; https://geon.works/
* Rev1 firmware is used for Galatea PCBs with no RGB underglow.
* Rev2 firmware is used for Galatea PCBs with RGB underglow.
+* Rev3 firmware is used for Galatea PCBs with RP2040 chip w/ RGB underglow.
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/studiokestra/galatea/rev2/config.h b/keyboards/studiokestra/galatea/rev2/config.h
deleted file mode 100644
index 7199179a4dee..000000000000
--- a/keyboards/studiokestra/galatea/rev2/config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2023 studiokestra (@studiokestra)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#define RGBLED_NUM 24
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
-#define RGBLIGHT_EFFECT_BREATHING
-#define RGBLIGHT_EFFECT_RAINBOW_MOOD
-#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#define RGBLIGHT_EFFECT_SNAKE
-#define RGBLIGHT_EFFECT_KNIGHT
-#define RGBLIGHT_EFFECT_CHRISTMAS
-#define RGBLIGHT_EFFECT_STATIC_GRADIENT
-#define RGBLIGHT_EFFECT_RGB_TEST
-#define RGBLIGHT_EFFECT_ALTERNATING
-#define RGBLIGHT_MODE_TWINKLE
diff --git a/keyboards/studiokestra/galatea/rev2/info.json b/keyboards/studiokestra/galatea/rev2/info.json
index a050f88d7dc3..7b29ba6ae9a0 100644
--- a/keyboards/studiokestra/galatea/rev2/info.json
+++ b/keyboards/studiokestra/galatea/rev2/info.json
@@ -33,7 +33,23 @@
"pin": "D4"
},
"rgblight": {
- "max_brightness": 200
+ "led_count": 24,
+ "hue_steps": 8,
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "max_brightness": 200,
+ "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": {
diff --git a/keyboards/studiokestra/galatea/rev3/info.json b/keyboards/studiokestra/galatea/rev3/info.json
new file mode 100644
index 000000000000..1669e3a18361
--- /dev/null
+++ b/keyboards/studiokestra/galatea/rev3/info.json
@@ -0,0 +1,374 @@
+{
+ "manufacturer": "Studio Kestra",
+ "keyboard_name": "Galatea",
+ "maintainer": "studiokestra",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP14", "GP6"],
+ "rows": ["GP3", "GP4", "GP1", "GP2", "GP5", "GP29", "GP20", "GP19", "GP17", "GP16", "GP13", "GP12"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x8803",
+ "vid": "0x7C10"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP15"
+ },
+ "rgblight": {
+ "led_count": 24,
+ "hue_steps": 8,
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "max_brightness": 200,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [1, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [0, 3], "x": 5.5, "y": 0},
+ {"matrix": [1, 3], "x": 6.5, "y": 0},
+ {"matrix": [0, 4], "x": 7.5, "y": 0},
+ {"matrix": [1, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [0, 5], "x": 9.75, "y": 0},
+ {"matrix": [1, 5], "x": 10.75, "y": 0},
+ {"matrix": [0, 6], "x": 11.75, "y": 0},
+ {"matrix": [1, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [0, 7], "x": 14, "y": 0},
+
+ {"matrix": [1, 7], "x": 15.25, "y": 0},
+ {"matrix": [0, 8], "x": 16.25, "y": 0},
+ {"matrix": [1, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25},
+ {"matrix": [2, 7], "x": 14, "y": 1.25},
+
+ {"matrix": [3, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 16.25, "y": 1.25},
+ {"matrix": [3, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+ {"matrix": [4, 7], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [5, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 16.25, "y": 2.25},
+ {"matrix": [5, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [8, 7], "x": 14, "y": 4.25},
+
+ {"matrix": [8, 8], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 3], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 7], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"matrix": [11, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 8], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [1, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [0, 3], "x": 5.5, "y": 0},
+ {"matrix": [1, 3], "x": 6.5, "y": 0},
+ {"matrix": [0, 4], "x": 7.5, "y": 0},
+ {"matrix": [1, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [0, 5], "x": 9.75, "y": 0},
+ {"matrix": [1, 5], "x": 10.75, "y": 0},
+ {"matrix": [0, 6], "x": 11.75, "y": 0},
+ {"matrix": [1, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [0, 7], "x": 14, "y": 0},
+
+ {"matrix": [1, 7], "x": 15.25, "y": 0},
+ {"matrix": [0, 8], "x": 16.25, "y": 0},
+ {"matrix": [1, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [3, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 16.25, "y": 1.25},
+ {"matrix": [3, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+ {"matrix": [4, 7], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [5, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 16.25, "y": 2.25},
+ {"matrix": [5, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [8, 8], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 3], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 7], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"matrix": [11, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 8], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [1, 2], "x": 4.25, "y": 0},
+
+ {"matrix": [0, 3], "x": 5.5, "y": 0},
+ {"matrix": [1, 3], "x": 6.5, "y": 0},
+ {"matrix": [0, 4], "x": 7.5, "y": 0},
+ {"matrix": [1, 4], "x": 8.5, "y": 0},
+
+ {"matrix": [0, 5], "x": 9.75, "y": 0},
+ {"matrix": [1, 5], "x": 10.75, "y": 0},
+ {"matrix": [0, 6], "x": 11.75, "y": 0},
+ {"matrix": [1, 6], "x": 12.75, "y": 0},
+
+ {"matrix": [0, 7], "x": 14, "y": 0},
+
+ {"matrix": [1, 7], "x": 15.25, "y": 0},
+ {"matrix": [0, 8], "x": 16.25, "y": 0},
+ {"matrix": [1, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1.25},
+ {"matrix": [3, 0], "x": 1, "y": 1.25},
+ {"matrix": [2, 1], "x": 2, "y": 1.25},
+ {"matrix": [3, 1], "x": 3, "y": 1.25},
+ {"matrix": [2, 2], "x": 4, "y": 1.25},
+ {"matrix": [3, 2], "x": 5, "y": 1.25},
+ {"matrix": [2, 3], "x": 6, "y": 1.25},
+ {"matrix": [3, 3], "x": 7, "y": 1.25},
+ {"matrix": [2, 4], "x": 8, "y": 1.25},
+ {"matrix": [3, 4], "x": 9, "y": 1.25},
+ {"matrix": [2, 5], "x": 10, "y": 1.25},
+ {"matrix": [3, 5], "x": 11, "y": 1.25},
+ {"matrix": [2, 6], "x": 12, "y": 1.25},
+ {"matrix": [3, 6], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [3, 7], "x": 15.25, "y": 1.25},
+ {"matrix": [2, 8], "x": 16.25, "y": 1.25},
+ {"matrix": [3, 8], "x": 17.25, "y": 1.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [5, 0], "x": 1.5, "y": 2.25},
+ {"matrix": [4, 1], "x": 2.5, "y": 2.25},
+ {"matrix": [5, 1], "x": 3.5, "y": 2.25},
+ {"matrix": [4, 2], "x": 4.5, "y": 2.25},
+ {"matrix": [5, 2], "x": 5.5, "y": 2.25},
+ {"matrix": [4, 3], "x": 6.5, "y": 2.25},
+ {"matrix": [5, 3], "x": 7.5, "y": 2.25},
+ {"matrix": [4, 4], "x": 8.5, "y": 2.25},
+ {"matrix": [5, 4], "x": 9.5, "y": 2.25},
+ {"matrix": [4, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [5, 5], "x": 11.5, "y": 2.25},
+ {"matrix": [4, 6], "x": 12.5, "y": 2.25},
+
+ {"matrix": [5, 7], "x": 15.25, "y": 2.25},
+ {"matrix": [4, 8], "x": 16.25, "y": 2.25},
+ {"matrix": [5, 8], "x": 17.25, "y": 2.25},
+
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [6, 6], "x": 12.75, "y": 3.25},
+ {"matrix": [4, 7], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+
+ {"matrix": [8, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4.25},
+ {"matrix": [8, 1], "x": 2.25, "y": 4.25},
+ {"matrix": [9, 1], "x": 3.25, "y": 4.25},
+ {"matrix": [8, 2], "x": 4.25, "y": 4.25},
+ {"matrix": [9, 2], "x": 5.25, "y": 4.25},
+ {"matrix": [8, 3], "x": 6.25, "y": 4.25},
+ {"matrix": [9, 3], "x": 7.25, "y": 4.25},
+ {"matrix": [8, 4], "x": 8.25, "y": 4.25},
+ {"matrix": [9, 4], "x": 9.25, "y": 4.25},
+ {"matrix": [8, 5], "x": 10.25, "y": 4.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4.25},
+ {"matrix": [8, 6], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [8, 8], "x": 16.25, "y": 4.25},
+
+ {"matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 0], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 1], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 3], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [11, 5], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 6], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 7], "x": 13.75, "y": 5.25, "w": 1.25},
+
+ {"matrix": [11, 7], "x": 15.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 16.25, "y": 5.25},
+ {"matrix": [11, 8], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/studiokestra/galatea/rev3/keymaps/default/keymap.c b/keyboards/studiokestra/galatea/rev3/keymaps/default/keymap.c
new file mode 100644
index 000000000000..32db99b386d0
--- /dev/null
+++ b/keyboards/studiokestra/galatea/rev3/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
+// Copyright 2023 studiokestra (@studiokestra)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+ * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │PSc│Scr│Pse│
+ * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │LBk│RBk│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Mo1│ │ ↑ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ),
+
+ [1] = LAYOUT(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
+ };
diff --git a/keyboards/studiokestra/galatea/rev3/keymaps/via/keymap.c b/keyboards/studiokestra/galatea/rev3/keymaps/via/keymap.c
new file mode 100644
index 000000000000..c0d093334932
--- /dev/null
+++ b/keyboards/studiokestra/galatea/rev3/keymaps/via/keymap.c
@@ -0,0 +1,40 @@
+// Copyright 2023 studiokestra (@studiokestra)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /*
+ * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+ * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │PSc│Scr│Pse│
+ * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │LBk│RBk│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Mo1│ │ ↑ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘
+ */
+
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ),
+
+ [1] = LAYOUT(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
+};
diff --git a/keyboards/studiokestra/galatea/rev3/keymaps/via/rules.mk b/keyboards/studiokestra/galatea/rev3/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/studiokestra/galatea/rev3/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/studiokestra/galatea/rev3/rules.mk b/keyboards/studiokestra/galatea/rev3/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/studiokestra/galatea/rev3/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/synthandkeys/bento_box/bento_box.c b/keyboards/synthandkeys/bento_box/bento_box.c
new file mode 100644
index 000000000000..5ef0678f5ec5
--- /dev/null
+++ b/keyboards/synthandkeys/bento_box/bento_box.c
@@ -0,0 +1,37 @@
+// Copyright 2023 Synth-and-Keys (@Synth-and-Keys)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+ /*Main Encoder*/
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ }
+ /* TOP LEFT*/
+ else if (index == 1) {
+ if (clockwise) {
+ tap_code16(C(KC_EQUAL));
+ } else {
+ tap_code16(C(KC_MINUS));
+ }
+ }
+ /* TOP RIGHT*/
+ else if (index == 2) {
+ if (clockwise) {
+ tap_code16(C(KC_Y));
+ } else {
+ tap_code16(C(KC_Z));
+ }
+ }
+ return true;
+}
+#endif
\ No newline at end of file
diff --git a/keyboards/synthandkeys/bento_box/info.json b/keyboards/synthandkeys/bento_box/info.json
new file mode 100644
index 000000000000..3cdc7a587083
--- /dev/null
+++ b/keyboards/synthandkeys/bento_box/info.json
@@ -0,0 +1,64 @@
+{
+ "manufacturer": "Synth-and-Keys",
+ "keyboard_name": "bento_box",
+ "maintainer": "Synth-and-Keys",
+ "bootloader": "stm32-dfu",
+ "bootmagic": {
+ "matrix": [2, 0]
+ },
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B2","pin_b": "B1"},
+ {"pin_a": "A13","pin_b": "A14"},
+ {"pin_a": "A15","pin_b": "B3"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "direct": [
+ [ "A9", "A8", "B10", "B9", "B6", "B0"],
+ [ "A5", "A2", "A7", "A4", "A1", "B8"],
+ [ "B5", "A6", "A3", "A0", "B7", "B4"]
+ ]
+ },
+ "processor": "STM32F072",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 3.5, "y": 0 },
+ { "matrix": [0, 1], "x": 4.5, "y": 0 },
+ { "matrix": [0, 2], "x": 1, "y": 0.5 },
+ { "matrix": [0, 3], "x": 3.5, "y": 1 },
+ { "matrix": [0, 4], "x": 4.5, "y": 1 },
+ { "matrix": [0, 5], "x": 0, "y": 2 },
+ { "matrix": [1, 0], "x": 1, "y": 2 },
+ { "matrix": [1, 1], "x": 2, "y": 2 },
+ { "matrix": [1, 2], "x": 0, "y": 3 },
+ { "matrix": [1, 3], "x": 1, "y": 3 },
+ { "matrix": [1, 4], "x": 2, "y": 3 },
+ { "matrix": [1, 5], "x": 3.5, "y": 2.5 },
+ { "matrix": [2, 0], "x": 4.5, "y": 2.5 },
+ { "matrix": [2, 1], "x": 0, "y": 4 },
+ { "matrix": [2, 2], "x": 1, "y": 4 },
+ { "matrix": [2, 3], "x": 2, "y": 4 },
+ { "matrix": [2, 4], "x": 3.5, "y": 3.5, "h": 1.5},
+ { "matrix": [2, 5], "x": 4.5, "y": 3.5, "h": 1.5}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/synthandkeys/bento_box/keymaps/default/keymap.c b/keyboards/synthandkeys/bento_box/keymaps/default/keymap.c
new file mode 100644
index 000000000000..bf8f26984bf8
--- /dev/null
+++ b/keyboards/synthandkeys/bento_box/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+// Copyright 2023 Synth-and-Keys (@Synth-and-Keys)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ----------------------------------------------------------------
+ * | | | | Ctrl+0 | GUI+Shift+S |
+ * ----------------------------------------------------------------
+ * | | Mute | | Copy | Paste |
+ * ----------------------------------------------------------------
+ * | Prev | Pause | Next | | |
+ * ----------------------------------------------------------------
+ * | Home | Up | End | Ctrl+T | Ctrl+W |
+ * ----------------------------------------------------------------
+ * | Left | Down | Right | Shift+Alt+Tab | Alt+Tab |
+ * ----------------------------------------------------------------
+ */
+ [0] = LAYOUT(
+ C(KC_0), G(S(KC_S)),
+ KC_MUTE, C(KC_C), C(KC_V),
+ KC_MPRV, KC_MPLY, KC_MNXT,
+ KC_HOME, KC_UP, KC_END, C(KC_T), C(KC_W),
+ KC_LEFT, KC_DOWN, KC_RIGHT, S(C(KC_TAB)), C(KC_TAB)
+ )
+};
+
+ /* LAYER TEMPLATE
+ * ------------------------------------
+ * | | | | | |
+ * ------------------------------------
+ * | | | | | |
+ * ------------------------------------
+ * | | | | | |
+ * ------------------------------------
+ * | | | | | |
+ * ------------------------------------
+ * | | | | | |
+ * ------------------------------------
+ */
\ No newline at end of file
diff --git a/keyboards/synthandkeys/bento_box/readme.md b/keyboards/synthandkeys/bento_box/readme.md
new file mode 100644
index 000000000000..32ce47a01374
--- /dev/null
+++ b/keyboards/synthandkeys/bento_box/readme.md
@@ -0,0 +1,26 @@
+# synthandkeys/bento_box
+
+![synthandkeys/bento_box](https://i.imgur.com/J8NkYO8h.jpeg)
+
+The Bento Box is a 15-key, 3-encoder macropad running on QMK.
+
+* Keyboard Maintainer: [Synth-and-Keys](https://github.com/Synth-and-Keys)
+* Hardware Supported: Bento Box PCB
+* Hardware Availability: https://www.etsy.com/shop/SynthandKeys
+
+Make example for this keyboard (after setting up your build environment):
+
+ make synthandkeys/bento_box:default
+
+Flashing example for this keyboard:
+
+ make synthandkeys/bento_box: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 top left key in the group of 9 and plug in the keyboard
+* **Physical reset button**: Hold down the reset button on the back of the PCB for 5 seconds and release
diff --git a/keyboards/synthandkeys/bento_box/rules.mk b/keyboards/synthandkeys/bento_box/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/synthandkeys/bento_box/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/takashicompany/baumkuchen/baumkuchen.c b/keyboards/takashicompany/baumkuchen/baumkuchen.c
new file mode 100644
index 000000000000..7d4f26b73e83
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/baumkuchen.c
@@ -0,0 +1,19 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+
+ if (clockwise) {
+ tap_code(KC_WH_D);
+ } else {
+ tap_code(KC_WH_U);
+ }
+
+ return true;
+}
\ No newline at end of file
diff --git a/keyboards/takashicompany/baumkuchen/info.json b/keyboards/takashicompany/baumkuchen/info.json
new file mode 100644
index 000000000000..e2318348827d
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/info.json
@@ -0,0 +1,75 @@
+{
+ "manufacturer": "takashicompany",
+ "keyboard_name": "Baumkuchen",
+ "maintainer": "takashicompany",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {
+ "pin_a": "D1",
+ "pin_b": "D0"
+ }
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "direct": [
+ ["B2", "B6", "D4", "C6", "F4", "F5", "D7", "E6", "F6", "F7", "B1", "B3", "B4", "B5", "B5"]
+ ]
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 6,
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0045",
+ "vid": "0x7463"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 0, "y": 1 },
+ { "matrix": [0, 5], "x": 1, "y": 1 },
+ { "matrix": [0, 6], "x": 2, "y": 1 },
+ { "matrix": [0, 7], "x": 3, "y": 1 },
+ { "matrix": [0, 8], "x": 0, "y": 2 },
+ { "matrix": [0, 9], "x": 1, "y": 2 },
+ { "matrix": [0, 10], "x": 2, "y": 2 },
+ { "matrix": [0, 11], "x": 3, "y": 2 },
+ { "matrix": [0, 12], "x": 4, "y": 2 },
+ { "matrix": [0, 13], "x": 3.5, "y": 3.25 },
+ { "matrix": [0, 14], "x": 4.5, "y": 3.25 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/takashicompany/baumkuchen/keymaps/build_test/keymap.c b/keyboards/takashicompany/baumkuchen/keymaps/build_test/keymap.c
new file mode 100644
index 000000000000..b99d3a3592b4
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/keymaps/build_test/keymap.c
@@ -0,0 +1,33 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R,
+ KC_A, KC_S, KC_D, KC_F,
+ KC_Z, KC_X, KC_C, KC_V, KC_B,
+ KC_NO, KC_NO
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ if (record->event.pressed) {
+ rgblight_toggle_noeeprom(); // for test
+ }
+
+ return true;
+}
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+
+ if (clockwise) {
+ tap_code(KC_1);
+ } else {
+ tap_code(KC_2);
+ }
+
+ return false;
+}
diff --git a/keyboards/takashicompany/baumkuchen/keymaps/default/keymap.c b/keyboards/takashicompany/baumkuchen/keymaps/default/keymap.c
new file mode 100644
index 000000000000..7ea01cbd5d30
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/keymaps/default/keymap.c
@@ -0,0 +1,19 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R,
+ KC_A, KC_S, KC_D, KC_F,
+ KC_Z, KC_X, KC_C, LT(1, KC_V), KC_B,
+ KC_NO, KC_NO
+ ),
+ [1] = LAYOUT(
+ RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/takashicompany/baumkuchen/keymaps/via/config.h b/keyboards/takashicompany/baumkuchen/keymaps/via/config.h
new file mode 100644
index 000000000000..1017b9cb4bdf
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/keymaps/via/config.h
@@ -0,0 +1,6 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 29
diff --git a/keyboards/takashicompany/baumkuchen/keymaps/via/keymap.c b/keyboards/takashicompany/baumkuchen/keymaps/via/keymap.c
new file mode 100644
index 000000000000..1e4624ca8832
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/keymaps/via/keymap.c
@@ -0,0 +1,28 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ LT(1, KC_ESC), KC_Q, KC_W, KC_E,
+ KC_TAB, KC_A, KC_S, KC_D,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V,
+ KC_WH_U, KC_WH_D
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS,
+ KC_TRNS,KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ RGB_TOG, RGB_MOD, KC_TRNS, QK_BOOT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS
+ )
+};
diff --git a/keyboards/takashicompany/baumkuchen/keymaps/via/rules.mk b/keyboards/takashicompany/baumkuchen/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/takashicompany/baumkuchen/readme.md b/keyboards/takashicompany/baumkuchen/readme.md
new file mode 100644
index 000000000000..adc3f2e00642
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/readme.md
@@ -0,0 +1,31 @@
+# Baumkuchen
+
+![takashicompany/baumkuchen](https://i.imgur.com/NS39x44h.png)
+
+Baumkuchen is a 13-key macropad with a radial key layout.
+The board can be used as a circuit or as a switch plate by cutting out the keyswitch Pro Micro part.
+It is compatible with Cherry MX compatible keyswitches, and a rotary encoder can be optionally installed.
+LEDs can also be mounted to make it glow.
+The board is reversible, allowing you to choose the arrangement of keys and Pro Micro according to your usage style.
+
+* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
+* Hardware Supported: Baumkuchen PCB, Pro Micro
+* Hardware Availability: https://github.com/takashicompany/baumkuchen
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashicompany/baumkuchen:default
+
+Flashing example for this keyboard:
+
+ make takashicompany/baumkuchen:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/takashicompany/baumkuchen/rules.mk b/keyboards/takashicompany/baumkuchen/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/takashicompany/baumkuchen/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/info.json b/keyboards/takashicompany/minidivide/info.json
new file mode 100644
index 000000000000..2234cd9b39e6
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/info.json
@@ -0,0 +1,105 @@
+{
+ "manufacturer": "takashicompany",
+ "keyboard_name": "miniDivide",
+ "maintainer": "takashicompany",
+ "build": {
+ "lto": true
+ },
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["D4", "C6", "D7", "E6", "B4"],
+ "rows": ["F4", "F5", "F6", "F7"]
+ },
+ "pin_compatible": "promicro",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 10,
+ "sleep": true,
+ "split_count": [5, 5]
+ },
+ "split": {
+ "enabled": true,
+ "matrix_pins": {
+ "right": {
+ "cols": ["B4", "E6", "D7", "C6", "D4"],
+ "rows": ["F4", "F5", "F6", "F7"]
+ }
+ },
+ "soft_serial_pin": "D2"
+ },
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0037",
+ "vid": "0x7463"
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.42},
+ {"matrix": [0, 1], "x": 0.84, "y": 0.21},
+ {"matrix": [0, 2], "x": 1.68, "y": 0},
+ {"matrix": [0, 3], "x": 2.52, "y": 0.21},
+ {"matrix": [0, 4], "x": 3.36, "y": 0.42},
+ {"matrix": [4, 0], "x": 6.3, "y": 0.42},
+ {"matrix": [4, 1], "x": 7.14, "y": 0.21},
+ {"matrix": [4, 2], "x": 7.98, "y": 0},
+ {"matrix": [4, 3], "x": 8.82, "y": 0.21},
+ {"matrix": [4, 4], "x": 9.66, "y": 0.42},
+ {"matrix": [1, 0], "x": 0, "y": 1.26},
+ {"matrix": [1, 1], "x": 0.84, "y": 1.05},
+ {"matrix": [1, 2], "x": 1.68, "y": 0.84},
+ {"matrix": [1, 3], "x": 2.52, "y": 1.05},
+ {"matrix": [1, 4], "x": 3.36, "y": 1.26},
+ {"matrix": [5, 0], "x": 6.3, "y": 1.26},
+ {"matrix": [5, 1], "x": 7.14, "y": 1.05},
+ {"matrix": [5, 2], "x": 7.98, "y": 0.84},
+ {"matrix": [5, 3], "x": 8.82, "y": 1.05},
+ {"matrix": [5, 4], "x": 9.66, "y": 1.26},
+ {"matrix": [2, 0], "x": 0, "y": 2.1},
+ {"matrix": [2, 1], "x": 0.84, "y": 1.89},
+ {"matrix": [2, 2], "x": 1.68, "y": 1.68},
+ {"matrix": [2, 3], "x": 2.52, "y": 1.89},
+ {"matrix": [2, 4], "x": 3.36, "y": 2.1},
+ {"matrix": [6, 0], "x": 6.3, "y": 2.1},
+ {"matrix": [6, 1], "x": 7.14, "y": 1.89},
+ {"matrix": [6, 2], "x": 7.98, "y": 1.68},
+ {"matrix": [6, 3], "x": 8.82, "y": 1.89},
+ {"matrix": [6, 4], "x": 9.66, "y": 2.1},
+ {"matrix": [3, 1], "x": 1.68, "y": 3.15},
+ {"matrix": [3, 2], "x": 2.52, "y": 3.15},
+ {"matrix": [3, 3], "x": 3.36, "y": 3.15},
+ {"matrix": [3, 4], "x": 4.2, "y": 3.15},
+ {"matrix": [7, 0], "x": 5.46, "y": 3.15},
+ {"matrix": [7, 1], "x": 6.3, "y": 3.15},
+ {"matrix": [7, 2], "x": 7.14, "y": 3.15},
+ {"matrix": [7, 3], "x": 7.98, "y": 3.15}
+ ]
+ }
+ }
+}
diff --git a/keyboards/takashicompany/minidivide/keymaps/default/keymap.c b/keyboards/takashicompany/minidivide/keymaps/default/keymap.c
new file mode 100644
index 000000000000..38b954f38da1
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/keymaps/default/keymap.c
@@ -0,0 +1,70 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LNG1), KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3,
+ LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3),
+ KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(5, KC_SPC), LT(4, KC_LNG1), KC_RGUI, KC_RCTL
+ ),
+
+ [4] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3,
+ LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [5] = LAYOUT(
+ KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS,
+ KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [6] = LAYOUT(
+ KC_ESC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO,
+ KC_LCTL, KC_TRNS, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [7] = LAYOUT(
+ KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), MO(9),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [8] = LAYOUT(
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, DF(0), DF(3),
+ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/keymaps/via/config.h b/keyboards/takashicompany/minidivide/keymaps/via/config.h
new file mode 100644
index 000000000000..f357dce30324
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/keymaps/via/config.h
@@ -0,0 +1,5 @@
+// Copyright 2022 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 10
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/keymaps/via/keymap.c b/keyboards/takashicompany/minidivide/keymaps/via/keymap.c
new file mode 100644
index 000000000000..38b954f38da1
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/keymaps/via/keymap.c
@@ -0,0 +1,70 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LNG1), KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3,
+ LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3),
+ KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LCTL, KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(5, KC_SPC), LT(4, KC_LNG1), KC_RGUI, KC_RCTL
+ ),
+
+ [4] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3,
+ LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [5] = LAYOUT(
+ KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS,
+ KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [6] = LAYOUT(
+ KC_ESC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO,
+ KC_LCTL, KC_TRNS, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [7] = LAYOUT(
+ KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), MO(9),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [8] = LAYOUT(
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, DF(0), DF(3),
+ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/keymaps/via/rules.mk b/keyboards/takashicompany/minidivide/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/minidivide.c b/keyboards/takashicompany/minidivide/minidivide.c
new file mode 100644
index 000000000000..abdb91fc47e8
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/minidivide.c
@@ -0,0 +1,48 @@
+// Copyright 2023 takashicompany (@takashicompany)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ return OLED_ROTATION_270;
+}
+
+//Variable that stores the number of times the key was pressed
+static uint16_t press_count = 0;
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_user(keycode, record)) {
+ return false;
+ }
+ // Increment the counter when a key is pressed
+ if (record->event.pressed) {
+ press_count++;
+ }
+
+ return process_record_user(keycode, record);
+}
+
+bool oled_task_kb(void) {
+
+ if (!oled_task_user()) { return false; }
+
+ oled_write_ln_P(PSTR("mini"), false);
+ oled_write_ln_P(PSTR("Divide"), false);
+
+ oled_set_cursor(0, 5);
+
+ oled_write_ln_P(PSTR("Layer"), false);
+ oled_write_ln(get_u8_str(get_highest_layer(layer_state), ' '), false);
+
+ oled_write_ln_P(PSTR(" "), false);
+ oled_write_ln_P(PSTR(" "), false);
+
+ oled_write_ln_P(PSTR("Count"), false);
+ oled_write_ln(get_u16_str(press_count, ' '), false);
+
+ return false;
+
+}
+#endif
\ No newline at end of file
diff --git a/keyboards/takashicompany/minidivide/readme.md b/keyboards/takashicompany/minidivide/readme.md
new file mode 100644
index 000000000000..de49c2892b48
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/readme.md
@@ -0,0 +1,43 @@
+# miniDivide
+
+![miniDivide](https://i.imgur.com/x91x9yjh.jpg)
+
+miniDivide is a split keyboard with 0.8u (16mm) key pitch.
+The size of a single key is 80% of that of a conventional keyboard key.
+Although the key size is more compact than usual, it has the advantage of requiring minimal finger movement.
+The number of keys is 19 keys for one hand and 38 keys for two hands.
+
+It is small and thin, making it easy to carry around.
+The option to mount a coin cell battery on the PCB is available so that the BLE Micro Pro can be installed.
+OLED can also be mounted.
+
+miniDivideは0.8u(16mm)キーピッチの分割型のキーボードです。
+一つのキーの大きさが従来のキーボードのキーと比較すると80%のサイズとなっています。
+通常よりコンパクトなキーサイズですが、指の動きが最小限で済むという強みがあります。
+キー数は片手で19キー、両手で38キーとなります。
+
+小さく、薄いので持ち運びにも便利です。
+またBLE Micro Proを搭載できるよう、コイン電池をPCBに搭載するオプションが可能です。
+OLEDも搭載できます。
+
+* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
+* Hardware Supported: PCB, Pro Micro
+* Hardware Availability: https://github.com/takashicompany/minidivide
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashicompany/minidivide:default
+
+Flashing example for this keyboard:
+
+ make takashicompany/minidivide:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/takashicompany/minidivide/rules.mk b/keyboards/takashicompany/minidivide/rules.mk
new file mode 100644
index 000000000000..7ff128fa692e
--- /dev/null
+++ b/keyboards/takashicompany/minidivide/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/teahouse/ayleen/info.json b/keyboards/teahouse/ayleen/info.json
index 408b7dc8a6ca..e979b07e8961 100644
--- a/keyboards/teahouse/ayleen/info.json
+++ b/keyboards/teahouse/ayleen/info.json
@@ -27,8 +27,14 @@
"pid": "0x4141",
"device_version": "0.0.1"
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_tkl_f13_ansi_tsangan"
+ },
+ "community_layouts": [
+ "tkl_f13_ansi_tsangan"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_tkl_f13_ansi_tsangan": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
@@ -39,89 +45,89 @@
{"label": "F6", "matrix": [0, 6], "x": 6.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 7.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 8.5, "y": 0},
- {"label": "F9", "matrix": [5, 8], "x": 9.5, "y": 0},
+ {"label": "F9", "matrix": [5, 8], "x": 9.75, "y": 0},
{"label": "F10", "matrix": [5, 7], "x": 10.75, "y": 0},
{"label": "F11", "matrix": [5, 6], "x": 11.75, "y": 0},
{"label": "F12", "matrix": [5, 5], "x": 12.75, "y": 0},
- {"label": "F13", "matrix": [5, 4], "x": 13.75, "y": 0},
+ {"label": "F13", "matrix": [5, 4], "x": 14, "y": 0},
{"label": "Prtsc", "matrix": [5, 3], "x": 15.25, "y": 0},
{"label": "Scrlk", "matrix": [5, 2], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [5, 1], "x": 17.25, "y": 0},
- {"label": "~", "matrix": [1, 0], "x": 0, "y": 1.5},
- {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.5},
- {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.5},
- {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.5},
- {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.5},
- {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.5},
- {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.5},
- {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.5},
- {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.5},
- {"label": "9", "matrix": [6, 8], "x": 9, "y": 1.5},
- {"label": "0", "matrix": [6, 7], "x": 10, "y": 1.5},
- {"label": "-", "matrix": [6, 6], "x": 11, "y": 1.5},
- {"label": "=", "matrix": [6, 5], "x": 12, "y": 1.5},
- {"label": "backspace", "matrix": [6, 4], "x": 13, "y": 1.5, "w": 2},
- {"label": "insert", "matrix": [6, 3], "x": 15.25, "y": 1.5},
- {"label": "home", "matrix": [6, 2], "x": 16.25, "y": 1.5},
- {"label": "pg up", "matrix": [6, 1], "x": 17.25, "y": 1.5},
+ {"label": "~", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [6, 8], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [6, 7], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [6, 6], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [6, 5], "x": 12, "y": 1.25},
+ {"label": "backspace", "matrix": [6, 4], "x": 13, "y": 1.25, "w": 2},
+ {"label": "insert", "matrix": [6, 3], "x": 15.25, "y": 1.25},
+ {"label": "home", "matrix": [6, 2], "x": 16.25, "y": 1.25},
+ {"label": "pg up", "matrix": [6, 1], "x": 17.25, "y": 1.25},
- {"label": "tab", "matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
- {"label": "q", "matrix": [2, 1], "x": 1.5, "y": 2.5},
- {"label": "w", "matrix": [2, 2], "x": 2.5, "y": 2.5},
- {"label": "e", "matrix": [2, 3], "x": 3.5, "y": 2.5},
- {"label": "r", "matrix": [2, 4], "x": 4.5, "y": 2.5},
- {"label": "t", "matrix": [2, 5], "x": 5.5, "y": 2.5},
- {"label": "y", "matrix": [2, 6], "x": 6.5, "y": 2.5},
- {"label": "u", "matrix": [2, 7], "x": 7.5, "y": 2.5},
- {"label": "i", "matrix": [2, 8], "x": 8.5, "y": 2.5},
- {"label": "o", "matrix": [7, 8], "x": 9.5, "y": 2.5},
- {"label": "p", "matrix": [7, 7], "x": 10.5, "y": 2.5},
- {"label": "{", "matrix": [7, 6], "x": 11.5, "y": 2.5},
- {"label": "}", "matrix": [7, 5], "x": 12.5, "y": 2.5},
- {"label": "|", "matrix": [7, 4], "x": 13.5, "y": 2.5, "w": 1.5},
- {"label": "delete", "matrix": [7, 3], "x": 15.25, "y": 2.5},
- {"label": "end", "matrix": [7, 2], "x": 16.25, "y": 2.5},
- {"label": "pg dn", "matrix": [7, 1], "x": 17.25, "y": 2.5},
+ {"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": [7, 8], "x": 9.5, "y": 2.25},
+ {"label": "p", "matrix": [7, 7], "x": 10.5, "y": 2.25},
+ {"label": "{", "matrix": [7, 6], "x": 11.5, "y": 2.25},
+ {"label": "}", "matrix": [7, 5], "x": 12.5, "y": 2.25},
+ {"label": "|", "matrix": [7, 4], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"label": "delete", "matrix": [7, 3], "x": 15.25, "y": 2.25},
+ {"label": "end", "matrix": [7, 2], "x": 16.25, "y": 2.25},
+ {"label": "pg dn", "matrix": [7, 1], "x": 17.25, "y": 2.25},
- {"label": "capslock", "matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
- {"label": "a", "matrix": [3, 1], "x": 1.75, "y": 3.5},
- {"label": "s", "matrix": [3, 2], "x": 2.75, "y": 3.5},
- {"label": "d", "matrix": [3, 3], "x": 3.75, "y": 3.5},
- {"label": "f", "matrix": [3, 4], "x": 4.75, "y": 3.5},
- {"label": "g", "matrix": [3, 5], "x": 5.75, "y": 3.5},
- {"label": "h", "matrix": [3, 6], "x": 6.75, "y": 3.5},
- {"label": "j", "matrix": [3, 7], "x": 7.75, "y": 3.5},
- {"label": "k", "matrix": [3, 8], "x": 8.75, "y": 3.5},
- {"label": "l", "matrix": [8, 8], "x": 9.75, "y": 3.5},
- {"label": ";", "matrix": [8, 7], "x": 10.75, "y": 3.5},
- {"label": "'", "matrix": [8, 6], "x": 11.75, "y": 3.5},
- {"label": "enter", "matrix": [8, 5], "x": 12.75, "y": 3.5, "w": 2.25},
+ {"label": "capslock", "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": [8, 8], "x": 9.75, "y": 3.25},
+ {"label": ";", "matrix": [8, 7], "x": 10.75, "y": 3.25},
+ {"label": "'", "matrix": [8, 6], "x": 11.75, "y": 3.25},
+ {"label": "enter", "matrix": [8, 5], "x": 12.75, "y": 3.25, "w": 2.25},
- {"label": "leftshift", "matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
- {"label": "z", "matrix": [4, 1], "x": 3.25, "y": 4.5},
- {"label": "x", "matrix": [4, 2], "x": 4.25, "y": 4.5},
- {"label": "c", "matrix": [4, 3], "x": 5.25, "y": 4.5},
- {"label": "v", "matrix": [4, 4], "x": 6.25, "y": 4.5},
- {"label": "b", "matrix": [4, 5], "x": 7.25, "y": 4.5},
- {"label": "n", "matrix": [4, 6], "x": 8.25, "y": 4.5},
- {"label": "m", "matrix": [4, 7], "x": 9.25, "y": 4.5},
- {"label": ",", "matrix": [4, 8], "x": 10.25, "y": 0},
- {"label": ".", "matrix": [9, 8], "x": 11.25, "y": 4.5},
- {"label": "/", "matrix": [9, 7], "x": 12.25, "y": 4.5},
- {"label": "rightshift", "matrix": [9, 6], "x": 13.25, "y": 4.5, "w": 2.75},
- {"label": "up", "matrix": [8, 2], "x": 18.25, "y": 4.5},
+ {"label": "leftshift", "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": [9, 8], "x": 10.25, "y": 4.25},
+ {"label": "/", "matrix": [9, 7], "x": 11.25, "y": 4.25},
+ {"label": "rightshift", "matrix": [9, 6], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"label": "up", "matrix": [8, 2], "x": 16.25, "y": 4.25},
- {"label": "lctrl", "matrix": [10, 0], "x": 0, "y": 5.5, "w": 1.5},
- {"label": "lwin", "matrix": [10, 1], "x": 1.5, "y": 5.5},
- {"label": "lalt", "matrix": [10, 2], "x": 2.5, "y": 5.5, "w": 1.5},
- {"label": "space", "matrix": [10, 3], "x": 4, "y": 5.5, "w": 7},
- {"label": "ralt", "matrix": [10, 4], "x": 11, "y": 5.5, "w": 1.5},
- {"label": "rwin", "matrix": [10, 5], "x": 12.5, "y": 5.5, "w": 1},
- {"label": "rctrl", "matrix": [10, 8], "x": 13.5, "y": 5.5, "w": 1.5},
- {"label": "left", "matrix": [9, 3], "x": 15.25, "y": 5.5},
- {"label": "down", "matrix": [9, 2], "x": 16.25, "y": 5.5},
- {"label": "right", "matrix": [9, 1], "x": 17.25, "y": 5.5}
+ {"label": "lctrl", "matrix": [10, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "lwin", "matrix": [10, 1], "x": 1.5, "y": 5.25},
+ {"label": "lalt", "matrix": [10, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "space", "matrix": [10, 3], "x": 4, "y": 5.25, "w": 7},
+ {"label": "ralt", "matrix": [10, 4], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "rwin", "matrix": [10, 5], "x": 12.5, "y": 5.25, "w": 1},
+ {"label": "rctrl", "matrix": [10, 8], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"label": "left", "matrix": [9, 3], "x": 15.25, "y": 5.25},
+ {"label": "down", "matrix": [9, 2], "x": 16.25, "y": 5.25},
+ {"label": "right", "matrix": [9, 1], "x": 17.25, "y": 5.25}
]
}
}
diff --git a/keyboards/teahouse/ayleen/keymaps/default/keymap.c b/keyboards/teahouse/ayleen/keymaps/default/keymap.c
index 5a99e2955d7d..e31939eb7abe 100644
--- a/keyboards/teahouse/ayleen/keymaps/default/keymap.c
+++ b/keyboards/teahouse/ayleen/keymaps/default/keymap.c
@@ -5,7 +5,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_tkl_f13_ansi_tsangan(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
diff --git a/keyboards/teahouse/ayleen/keymaps/via/keymap.c b/keyboards/teahouse/ayleen/keymaps/via/keymap.c
index 36f864fafcc7..030a35cd8f60 100644
--- a/keyboards/teahouse/ayleen/keymaps/via/keymap.c
+++ b/keyboards/teahouse/ayleen/keymaps/via/keymap.c
@@ -5,7 +5,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_tkl_f13_ansi_tsangan(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
@@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_tkl_f13_ansi_tsangan(
KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
- [2] = LAYOUT(
+ [2] = LAYOUT_tkl_f13_ansi_tsangan(
KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
- [3] = LAYOUT(
+ [3] = LAYOUT_tkl_f13_ansi_tsangan(
KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/teahouse/ayleen/keymaps/via_blink/keymap.c b/keyboards/teahouse/ayleen/keymaps/via_blink/keymap.c
index 7b72ccbf6173..a86498753d2d 100644
--- a/keyboards/teahouse/ayleen/keymaps/via_blink/keymap.c
+++ b/keyboards/teahouse/ayleen/keymaps/via_blink/keymap.c
@@ -5,7 +5,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_tkl_f13_ansi_tsangan(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
@@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_tkl_f13_ansi_tsangan(
KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
- [2] = LAYOUT(
+ [2] = LAYOUT_tkl_f13_ansi_tsangan(
KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
- [3] = LAYOUT(
+ [3] = LAYOUT_tkl_f13_ansi_tsangan(
KC_SPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/varanidae/info.json b/keyboards/varanidae/info.json
new file mode 100644
index 000000000000..f35e061dcf01
--- /dev/null
+++ b/keyboards/varanidae/info.json
@@ -0,0 +1,515 @@
+{
+ "keyboard_name": "Varanidae",
+ "manufacturer": "Tokage IT Lab.",
+ "url": "https://github.com/TokageItLab/Varanidae",
+ "maintainer": "Silc Renew",
+ "usb": {
+ "vid": "0x5369",
+ "pid": "0x0001",
+ "device_version": "1.0.0"
+ },
+ "pin_compatible": "elite_c",
+ "development_board": "elite_c",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ { "pin_a": "D0", "pin_b": "D1", "resolution": 2 }
+ ]
+ },
+ "dynamic_keymap": {
+ "layer_count": 3
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["D2", "F4", "D4", "D7", "B4", "B7", "C7", "F0", "B2", "B1", "F6"],
+ "rows": ["B0", "F5", "C6", "E6", "B5", "D5", "F1", "B6", "B3", "F7", "D3"]
+ },
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_iso_split_bs_rshift"
+ },
+ "layouts": {
+ "LAYOUT_ansi": {
+ "layout": [
+ { "label":"Middle Click", "matrix": [0, 0], "x": 0, "y": 0, "w": 1 },
+
+ { "label":"F16", "matrix": [0, 1], "x": 1, "y": 0, "w": 1 },
+ { "label":"F17", "matrix": [0, 2], "x": 2, "y": 0, "w": 1 },
+ { "label":"F18", "matrix": [0, 3], "x": 3, "y": 0, "w": 1 },
+ { "label":"F19", "matrix": [0, 4], "x": 4, "y": 0, "w": 1 },
+ { "label":"F1", "matrix": [0, 5], "x": 5.25, "y": 0, "w": 1 },
+ { "label":"F2", "matrix": [0, 6], "x": 6.25, "y": 0, "w": 1 },
+ { "label":"F3", "matrix": [0, 7], "x": 7.25, "y": 0, "w": 1 },
+ { "label":"F4", "matrix": [0, 8], "x": 8.25, "y": 0, "w": 1 },
+ { "label":"F5", "matrix": [0, 9], "x": 9.25, "y": 0, "w": 1 },
+ { "label":"F6", "matrix": [0, 10], "x": 10.25, "y": 0, "w": 1 },
+ { "label":"F7", "matrix": [5, 6], "x": 11.25, "y": 0, "w": 1 },
+ { "label":"F8", "matrix": [5, 7], "x": 12.25, "y": 0, "w": 1 },
+ { "label":"F9", "matrix": [5, 8], "x": 13.25, "y": 0, "w": 1 },
+ { "label":"F10", "matrix": [5, 9], "x": 14.25, "y": 0, "w": 1 },
+ { "label":"F11", "matrix": [5, 10], "x": 15.25, "y": 0, "w": 1 },
+ { "label":"F12", "matrix": [7, 1], "x": 16.25, "y": 0, "w": 1 },
+ { "label":"F13", "matrix": [7, 2], "x": 17.25, "y": 0, "w": 1 },
+ { "label":"F14", "matrix": [7, 3], "x": 18.25, "y": 0, "w": 1 },
+ { "label":"F15", "matrix": [7, 4], "x": 19.25, "y": 0, "w": 1 },
+
+ { "label":"F20", "matrix": [1, 1], "x": 0, "y": 1, "w": 1 },
+ { "label":"F21", "matrix": [1, 2], "x": 1, "y": 1, "w": 1 },
+ { "label":"F22", "matrix": [1, 3], "x": 2, "y": 1, "w": 1 },
+ { "label":"F23", "matrix": [1, 4], "x": 3, "y": 1, "w": 1 },
+ { "label":"F24", "matrix": [1, 5], "x": 4, "y": 1, "w": 1 },
+ { "label":"Esc", "matrix": [1, 6], "x": 5.25, "y": 1.25, "w": 1 },
+ { "label":"1", "matrix": [1, 7], "x": 6.25, "y": 1.25, "w": 1 },
+ { "label":"2", "matrix": [1, 8], "x": 7.25, "y": 1.25, "w": 1 },
+ { "label":"3", "matrix": [1, 9], "x": 8.25, "y": 1.25, "w": 1 },
+ { "label":"4", "matrix": [1, 10], "x": 9.25, "y": 1.25, "w": 1 },
+ { "label":"5", "matrix": [6, 6], "x": 10.25, "y": 1.25, "w": 1 },
+ { "label":"6", "matrix": [6, 7], "x": 11.25, "y": 1.25, "w": 1 },
+ { "label":"7", "matrix": [6, 8], "x": 12.25, "y": 1.25, "w": 1 },
+ { "label":"8", "matrix": [6, 9], "x": 13.25, "y": 1.25, "w": 1 },
+ { "label":"9", "matrix": [6, 10], "x": 14.25, "y": 1.25, "w": 1 },
+ { "label":"0", "matrix": [8, 1], "x": 15.25, "y": 1.25, "w": 1 },
+ { "label":"-", "matrix": [8, 2], "x": 16.25, "y": 1.25, "w": 1 },
+ { "label":"=", "matrix": [8, 3], "x": 17.25, "y": 1.25, "w": 1 },
+ { "label":"Backspace", "matrix": [7, 5], "x": 18.25, "y": 1.25, "w": 2 },
+
+ { "label":"/", "matrix": [2, 1], "x": 0, "y": 2.25, "w": 1 },
+ { "label":"7", "matrix": [2, 2], "x": 1, "y": 2.25, "w": 1 },
+ { "label":"8", "matrix": [2, 3], "x": 2, "y": 2.25, "w": 1 },
+ { "label":"9", "matrix": [2, 4], "x": 3, "y": 2.25, "w": 1 },
+ { "label":"Home", "matrix": [2, 5], "x": 4, "y": 2.25, "w": 1 },
+ { "label":"Tab", "matrix": [2, 6], "x": 5.25, "y": 2.25, "w": 1.5 },
+ { "label":"Q", "matrix": [2, 7], "x": 6.75, "y": 2.25, "w": 1 },
+ { "label":"W", "matrix": [2, 8], "x": 7.75, "y": 2.25, "w": 1 },
+ { "label":"E", "matrix": [2, 9], "x": 8.75, "y": 2.25, "w": 1 },
+ { "label":"R", "matrix": [2, 10], "x": 9.75, "y": 2.25, "w": 1 },
+ { "label":"T", "matrix": [7, 6], "x": 10.75, "y": 2.25, "w": 1 },
+ { "label":"Y", "matrix": [7, 7], "x": 11.75, "y": 2.25, "w": 1 },
+ { "label":"U", "matrix": [7, 8], "x": 12.75, "y": 2.25, "w": 1 },
+ { "label":"I", "matrix": [7, 9], "x": 13.75, "y": 2.25, "w": 1 },
+ { "label":"O", "matrix": [7, 10], "x": 14.75, "y": 2.25, "w": 1 },
+ { "label":"P", "matrix": [9, 1], "x": 15.75, "y": 2.25, "w": 1 },
+ { "label":"[", "matrix": [9, 2], "x": 16.75, "y": 2.25, "w": 1 },
+ { "label":"]", "matrix": [9, 3], "x": 17.75, "y": 2.25, "w": 1 },
+ { "label":"\\", "matrix": [10, 3], "x": 18.75, "y": 2.25, "w": 1.5 },
+
+ { "label":"*", "matrix": [3, 1], "x": 0, "y": 3.25, "w": 1 },
+ { "label":"4", "matrix": [3, 2], "x": 1, "y": 3.25, "w": 1 },
+ { "label":"5", "matrix": [3, 3], "x": 2, "y": 3.25, "w": 1 },
+ { "label":"6", "matrix": [3, 4], "x": 3, "y": 3.25, "w": 1 },
+ { "label":"End", "matrix": [3, 5], "x": 4, "y": 3.25, "w": 1 },
+ { "label":"Alt", "matrix": [3, 6], "x": 5.25, "y": 3.25, "w": 1.75 },
+ { "label":"A", "matrix": [3, 7], "x": 7, "y": 3.25, "w": 1 },
+ { "label":"S", "matrix": [3, 8], "x": 8, "y": 3.25, "w": 1 },
+ { "label":"D", "matrix": [3, 9], "x": 9, "y": 3.25, "w": 1 },
+ { "label":"F", "matrix": [3, 10], "x": 10, "y": 3.25, "w": 1 },
+ { "label":"G", "matrix": [8, 6], "x": 11, "y": 3.25, "w": 1 },
+ { "label":"H", "matrix": [8, 7], "x": 12, "y": 3.25, "w": 1 },
+ { "label":"J", "matrix": [8, 8], "x": 13, "y": 3.25, "w": 1 },
+ { "label":"K", "matrix": [8, 9], "x": 14, "y": 3.25, "w": 1 },
+ { "label":"L", "matrix": [8, 10], "x": 15, "y": 3.25, "w": 1 },
+ { "label":";", "matrix": [10, 1], "x": 16, "y": 3.25, "w": 1 },
+ { "label":"'", "matrix": [10, 2], "x": 17, "y": 3.25, "w": 1 },
+ { "label":"Enter", "matrix": [9, 4], "x": 18, "y": 3.25, "w": 2.25},
+
+ { "label":"-", "matrix": [4, 1], "x": 0, "y": 4.25, "w": 1 },
+ { "label":"1", "matrix": [4, 2], "x": 1, "y": 4.25, "w": 1 },
+ { "label":"2", "matrix": [4, 3], "x": 2, "y": 4.25, "w": 1 },
+ { "label":"3", "matrix": [4, 4], "x": 3, "y": 4.25, "w": 1 },
+ { "label":"Page Up", "matrix": [4, 5], "x": 4, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [4, 6], "x": 5.25, "y": 4.25, "w": 2.25},
+ { "label":"Z", "matrix": [4, 8], "x": 7.5, "y": 4.25, "w": 1 },
+ { "label":"X", "matrix": [4, 9], "x": 8.5, "y": 4.25, "w": 1 },
+ { "label":"C", "matrix": [4, 10], "x": 9.5, "y": 4.25, "w": 1 },
+ { "label":"V", "matrix": [9, 6], "x": 10.5, "y": 4.25, "w": 1 },
+ { "label":"B", "matrix": [9, 7], "x": 11.5, "y": 4.25, "w": 1 },
+ { "label":"N", "matrix": [9, 8], "x": 12.5, "y": 4.25, "w": 1 },
+ { "label":"M", "matrix": [9, 9], "x": 13.5, "y": 4.25, "w": 1 },
+ { "label":",", "matrix": [9, 10], "x": 14.5, "y": 4.25, "w": 1 },
+ { "label":".", "matrix": [10, 4], "x": 15.5, "y": 4.25, "w": 1 },
+ { "label":"/", "matrix": [10, 5], "x": 16.5, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [8, 5], "x": 17.5, "y": 4.25, "w": 2.75 },
+
+ { "label":"+", "matrix": [5, 1], "x": 0, "y": 5.25, "w": 1 },
+ { "label":"0", "matrix": [5, 2], "x": 1, "y": 5.25, "w": 1 },
+ { "label":".", "matrix": [5, 3], "x": 2, "y": 5.25, "w": 1 },
+ { "label":"Enter", "matrix": [5, 4], "x": 3, "y": 5.25, "w": 1 },
+ { "label":"Page Down", "matrix": [5, 5], "x": 4, "y": 5.25, "w": 1 },
+ { "label":"Win", "matrix": [6, 1], "x": 5.25, "y": 5.25, "w": 1 },
+ { "label":"Ctrl", "matrix": [6, 2], "x": 6.25, "y": 5.25, "w": 1 },
+ { "label":"Print", "matrix": [6, 3], "x": 7.25, "y": 5.25, "w": 1 },
+ { "label":"Muhenkan", "matrix": [6, 4], "x": 8.25, "y": 5.25, "w": 1 },
+ { "label":"Space", "matrix": [6, 5], "x": 9.25, "y": 5.25, "w": 6 },
+ { "label":"Henkan", "matrix": [10, 6], "x": 15.25, "y": 5.25, "w": 1 },
+ { "label":"Left", "matrix": [10, 7], "x": 16.25, "y": 5.25, "w": 1 },
+ { "label":"Up", "matrix": [10, 8], "x": 17.25, "y": 5.25, "w": 1 },
+ { "label":"Down", "matrix": [10, 9], "x": 18.25, "y": 5.25, "w": 1 },
+ { "label":"Right", "matrix": [10, 10], "x": 19.25, "y": 5.25, "w": 1 }
+ ]
+ },
+ "LAYOUT_ansi_split_bs_rshift": {
+ "layout": [
+ { "label":"Middle Click", "matrix": [0, 0], "x": 0, "y": 0, "w": 1 },
+
+ { "label":"F16", "matrix": [0, 1], "x": 1, "y": 0, "w": 1 },
+ { "label":"F17", "matrix": [0, 2], "x": 2, "y": 0, "w": 1 },
+ { "label":"F18", "matrix": [0, 3], "x": 3, "y": 0, "w": 1 },
+ { "label":"F19", "matrix": [0, 4], "x": 4, "y": 0, "w": 1 },
+ { "label":"F1", "matrix": [0, 5], "x": 5.25, "y": 0, "w": 1 },
+ { "label":"F2", "matrix": [0, 6], "x": 6.25, "y": 0, "w": 1 },
+ { "label":"F3", "matrix": [0, 7], "x": 7.25, "y": 0, "w": 1 },
+ { "label":"F4", "matrix": [0, 8], "x": 8.25, "y": 0, "w": 1 },
+ { "label":"F5", "matrix": [0, 9], "x": 9.25, "y": 0, "w": 1 },
+ { "label":"F6", "matrix": [0, 10], "x": 10.25, "y": 0, "w": 1 },
+ { "label":"F7", "matrix": [5, 6], "x": 11.25, "y": 0, "w": 1 },
+ { "label":"F8", "matrix": [5, 7], "x": 12.25, "y": 0, "w": 1 },
+ { "label":"F9", "matrix": [5, 8], "x": 13.25, "y": 0, "w": 1 },
+ { "label":"F10", "matrix": [5, 9], "x": 14.25, "y": 0, "w": 1 },
+ { "label":"F11", "matrix": [5, 10], "x": 15.25, "y": 0, "w": 1 },
+ { "label":"F12", "matrix": [7, 1], "x": 16.25, "y": 0, "w": 1 },
+ { "label":"F13", "matrix": [7, 2], "x": 17.25, "y": 0, "w": 1 },
+ { "label":"F14", "matrix": [7, 3], "x": 18.25, "y": 0, "w": 1 },
+ { "label":"F15", "matrix": [7, 4], "x": 19.25, "y": 0, "w": 1 },
+
+ { "label":"F20", "matrix": [1, 1], "x": 0, "y": 1, "w": 1 },
+ { "label":"F21", "matrix": [1, 2], "x": 1, "y": 1, "w": 1 },
+ { "label":"F22", "matrix": [1, 3], "x": 2, "y": 1, "w": 1 },
+ { "label":"F23", "matrix": [1, 4], "x": 3, "y": 1, "w": 1 },
+ { "label":"F24", "matrix": [1, 5], "x": 4, "y": 1, "w": 1 },
+ { "label":"Esc", "matrix": [1, 6], "x": 5.25, "y": 1.25, "w": 1 },
+ { "label":"1", "matrix": [1, 7], "x": 6.25, "y": 1.25, "w": 1 },
+ { "label":"2", "matrix": [1, 8], "x": 7.25, "y": 1.25, "w": 1 },
+ { "label":"3", "matrix": [1, 9], "x": 8.25, "y": 1.25, "w": 1 },
+ { "label":"4", "matrix": [1, 10], "x": 9.25, "y": 1.25, "w": 1 },
+ { "label":"5", "matrix": [6, 6], "x": 10.25, "y": 1.25, "w": 1 },
+ { "label":"6", "matrix": [6, 7], "x": 11.25, "y": 1.25, "w": 1 },
+ { "label":"7", "matrix": [6, 8], "x": 12.25, "y": 1.25, "w": 1 },
+ { "label":"8", "matrix": [6, 9], "x": 13.25, "y": 1.25, "w": 1 },
+ { "label":"9", "matrix": [6, 10], "x": 14.25, "y": 1.25, "w": 1 },
+ { "label":"0", "matrix": [8, 1], "x": 15.25, "y": 1.25, "w": 1 },
+ { "label":"-", "matrix": [8, 2], "x": 16.25, "y": 1.25, "w": 1 },
+ { "label":"=", "matrix": [8, 3], "x": 17.25, "y": 1.25, "w": 1 },
+ { "label":"Delete", "matrix": [8, 4], "x": 18.25, "y": 1.25, "w": 1 },
+ { "label":"Backspace", "matrix": [7, 5], "x": 19.25, "y": 1.25, "w": 1 },
+
+ { "label":"/", "matrix": [2, 1], "x": 0, "y": 2.25, "w": 1 },
+ { "label":"7", "matrix": [2, 2], "x": 1, "y": 2.25, "w": 1 },
+ { "label":"8", "matrix": [2, 3], "x": 2, "y": 2.25, "w": 1 },
+ { "label":"9", "matrix": [2, 4], "x": 3, "y": 2.25, "w": 1 },
+ { "label":"Home", "matrix": [2, 5], "x": 4, "y": 2.25, "w": 1 },
+ { "label":"Tab", "matrix": [2, 6], "x": 5.25, "y": 2.25, "w": 1.5 },
+ { "label":"Q", "matrix": [2, 7], "x": 6.75, "y": 2.25, "w": 1 },
+ { "label":"W", "matrix": [2, 8], "x": 7.75, "y": 2.25, "w": 1 },
+ { "label":"E", "matrix": [2, 9], "x": 8.75, "y": 2.25, "w": 1 },
+ { "label":"R", "matrix": [2, 10], "x": 9.75, "y": 2.25, "w": 1 },
+ { "label":"T", "matrix": [7, 6], "x": 10.75, "y": 2.25, "w": 1 },
+ { "label":"Y", "matrix": [7, 7], "x": 11.75, "y": 2.25, "w": 1 },
+ { "label":"U", "matrix": [7, 8], "x": 12.75, "y": 2.25, "w": 1 },
+ { "label":"I", "matrix": [7, 9], "x": 13.75, "y": 2.25, "w": 1 },
+ { "label":"O", "matrix": [7, 10], "x": 14.75, "y": 2.25, "w": 1 },
+ { "label":"P", "matrix": [9, 1], "x": 15.75, "y": 2.25, "w": 1 },
+ { "label":"[", "matrix": [9, 2], "x": 16.75, "y": 2.25, "w": 1 },
+ { "label":"]", "matrix": [9, 3], "x": 17.75, "y": 2.25, "w": 1 },
+ { "label":"\\", "matrix": [10, 3], "x": 18.75, "y": 2.25, "w": 1.5 },
+
+ { "label":"*", "matrix": [3, 1], "x": 0, "y": 3.25, "w": 1 },
+ { "label":"4", "matrix": [3, 2], "x": 1, "y": 3.25, "w": 1 },
+ { "label":"5", "matrix": [3, 3], "x": 2, "y": 3.25, "w": 1 },
+ { "label":"6", "matrix": [3, 4], "x": 3, "y": 3.25, "w": 1 },
+ { "label":"End", "matrix": [3, 5], "x": 4, "y": 3.25, "w": 1 },
+ { "label":"Alt", "matrix": [3, 6], "x": 5.25, "y": 3.25, "w": 1.75 },
+ { "label":"A", "matrix": [3, 7], "x": 7, "y": 3.25, "w": 1 },
+ { "label":"S", "matrix": [3, 8], "x": 8, "y": 3.25, "w": 1 },
+ { "label":"D", "matrix": [3, 9], "x": 9, "y": 3.25, "w": 1 },
+ { "label":"F", "matrix": [3, 10], "x": 10, "y": 3.25, "w": 1 },
+ { "label":"G", "matrix": [8, 6], "x": 11, "y": 3.25, "w": 1 },
+ { "label":"H", "matrix": [8, 7], "x": 12, "y": 3.25, "w": 1 },
+ { "label":"J", "matrix": [8, 8], "x": 13, "y": 3.25, "w": 1 },
+ { "label":"K", "matrix": [8, 9], "x": 14, "y": 3.25, "w": 1 },
+ { "label":"L", "matrix": [8, 10], "x": 15, "y": 3.25, "w": 1 },
+ { "label":";", "matrix": [10, 1], "x": 16, "y": 3.25, "w": 1 },
+ { "label":"'", "matrix": [10, 2], "x": 17, "y": 3.25, "w": 1 },
+ { "label":"Enter", "matrix": [9, 4], "x": 18, "y": 3.25, "w": 2.25},
+
+ { "label":"-", "matrix": [4, 1], "x": 0, "y": 4.25, "w": 1 },
+ { "label":"1", "matrix": [4, 2], "x": 1, "y": 4.25, "w": 1 },
+ { "label":"2", "matrix": [4, 3], "x": 2, "y": 4.25, "w": 1 },
+ { "label":"3", "matrix": [4, 4], "x": 3, "y": 4.25, "w": 1 },
+ { "label":"Page Up", "matrix": [4, 5], "x": 4, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [4, 6], "x": 5.25, "y": 4.25, "w": 2.25},
+ { "label":"Z", "matrix": [4, 8], "x": 7.5, "y": 4.25, "w": 1 },
+ { "label":"X", "matrix": [4, 9], "x": 8.5, "y": 4.25, "w": 1 },
+ { "label":"C", "matrix": [4, 10], "x": 9.5, "y": 4.25, "w": 1 },
+ { "label":"V", "matrix": [9, 6], "x": 10.5, "y": 4.25, "w": 1 },
+ { "label":"B", "matrix": [9, 7], "x": 11.5, "y": 4.25, "w": 1 },
+ { "label":"N", "matrix": [9, 8], "x": 12.5, "y": 4.25, "w": 1 },
+ { "label":"M", "matrix": [9, 9], "x": 13.5, "y": 4.25, "w": 1 },
+ { "label":",", "matrix": [9, 10], "x": 14.5, "y": 4.25, "w": 1 },
+ { "label":".", "matrix": [10, 4], "x": 15.5, "y": 4.25, "w": 1 },
+ { "label":"/", "matrix": [10, 5], "x": 16.5, "y": 4.25, "w": 1 },
+ { "label":"`", "matrix": [9, 5], "x": 17.5, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [8, 5], "x": 18.5, "y": 4.25, "w": 1.75 },
+
+ { "label":"+", "matrix": [5, 1], "x": 0, "y": 5.25, "w": 1 },
+ { "label":"0", "matrix": [5, 2], "x": 1, "y": 5.25, "w": 1 },
+ { "label":".", "matrix": [5, 3], "x": 2, "y": 5.25, "w": 1 },
+ { "label":"Enter", "matrix": [5, 4], "x": 3, "y": 5.25, "w": 1 },
+ { "label":"Page Down", "matrix": [5, 5], "x": 4, "y": 5.25, "w": 1 },
+ { "label":"Win", "matrix": [6, 1], "x": 5.25, "y": 5.25, "w": 1 },
+ { "label":"Ctrl", "matrix": [6, 2], "x": 6.25, "y": 5.25, "w": 1 },
+ { "label":"Print", "matrix": [6, 3], "x": 7.25, "y": 5.25, "w": 1 },
+ { "label":"Muhenkan", "matrix": [6, 4], "x": 8.25, "y": 5.25, "w": 1 },
+ { "label":"Space", "matrix": [6, 5], "x": 9.25, "y": 5.25, "w": 6 },
+ { "label":"Henkan", "matrix": [10, 6], "x": 15.25, "y": 5.25, "w": 1 },
+ { "label":"Left", "matrix": [10, 7], "x": 16.25, "y": 5.25, "w": 1 },
+ { "label":"Up", "matrix": [10, 8], "x": 17.25, "y": 5.25, "w": 1 },
+ { "label":"Down", "matrix": [10, 9], "x": 18.25, "y": 5.25, "w": 1 },
+ { "label":"Right", "matrix": [10, 10], "x": 19.25, "y": 5.25, "w": 1 }
+ ]
+ },
+ "LAYOUT_iso": {
+ "layout": [
+ { "label":"Middle Click", "matrix": [0, 0], "x": 0, "y": 0, "w": 1 },
+
+ { "label":"F16", "matrix": [0, 1], "x": 1, "y": 0, "w": 1 },
+ { "label":"F17", "matrix": [0, 2], "x": 2, "y": 0, "w": 1 },
+ { "label":"F18", "matrix": [0, 3], "x": 3, "y": 0, "w": 1 },
+ { "label":"F19", "matrix": [0, 4], "x": 4, "y": 0, "w": 1 },
+ { "label":"F1", "matrix": [0, 5], "x": 5.25, "y": 0, "w": 1 },
+ { "label":"F2", "matrix": [0, 6], "x": 6.25, "y": 0, "w": 1 },
+ { "label":"F3", "matrix": [0, 7], "x": 7.25, "y": 0, "w": 1 },
+ { "label":"F4", "matrix": [0, 8], "x": 8.25, "y": 0, "w": 1 },
+ { "label":"F5", "matrix": [0, 9], "x": 9.25, "y": 0, "w": 1 },
+ { "label":"F6", "matrix": [0, 10], "x": 10.25, "y": 0, "w": 1 },
+ { "label":"F7", "matrix": [5, 6], "x": 11.25, "y": 0, "w": 1 },
+ { "label":"F8", "matrix": [5, 7], "x": 12.25, "y": 0, "w": 1 },
+ { "label":"F9", "matrix": [5, 8], "x": 13.25, "y": 0, "w": 1 },
+ { "label":"F10", "matrix": [5, 9], "x": 14.25, "y": 0, "w": 1 },
+ { "label":"F11", "matrix": [5, 10], "x": 15.25, "y": 0, "w": 1 },
+ { "label":"F12", "matrix": [7, 1], "x": 16.25, "y": 0, "w": 1 },
+ { "label":"F13", "matrix": [7, 2], "x": 17.25, "y": 0, "w": 1 },
+ { "label":"F14", "matrix": [7, 3], "x": 18.25, "y": 0, "w": 1 },
+ { "label":"F15", "matrix": [7, 4], "x": 19.25, "y": 0, "w": 1 },
+
+ { "label":"F20", "matrix": [1, 1], "x": 0, "y": 1, "w": 1 },
+ { "label":"F21", "matrix": [1, 2], "x": 1, "y": 1, "w": 1 },
+ { "label":"F22", "matrix": [1, 3], "x": 2, "y": 1, "w": 1 },
+ { "label":"F23", "matrix": [1, 4], "x": 3, "y": 1, "w": 1 },
+ { "label":"F24", "matrix": [1, 5], "x": 4, "y": 1, "w": 1 },
+ { "label":"Esc", "matrix": [1, 6], "x": 5.25, "y": 1.25, "w": 1 },
+ { "label":"1", "matrix": [1, 7], "x": 6.25, "y": 1.25, "w": 1 },
+ { "label":"2", "matrix": [1, 8], "x": 7.25, "y": 1.25, "w": 1 },
+ { "label":"3", "matrix": [1, 9], "x": 8.25, "y": 1.25, "w": 1 },
+ { "label":"4", "matrix": [1, 10], "x": 9.25, "y": 1.25, "w": 1 },
+ { "label":"5", "matrix": [6, 6], "x": 10.25, "y": 1.25, "w": 1 },
+ { "label":"6", "matrix": [6, 7], "x": 11.25, "y": 1.25, "w": 1 },
+ { "label":"7", "matrix": [6, 8], "x": 12.25, "y": 1.25, "w": 1 },
+ { "label":"8", "matrix": [6, 9], "x": 13.25, "y": 1.25, "w": 1 },
+ { "label":"9", "matrix": [6, 10], "x": 14.25, "y": 1.25, "w": 1 },
+ { "label":"0", "matrix": [8, 1], "x": 15.25, "y": 1.25, "w": 1 },
+ { "label":"-", "matrix": [8, 2], "x": 16.25, "y": 1.25, "w": 1 },
+ { "label":"=", "matrix": [8, 3], "x": 17.25, "y": 1.25, "w": 1 },
+ { "label":"Backspace", "matrix": [7, 5], "x": 18.25, "y": 1.25, "w": 2 },
+
+ { "label":"/", "matrix": [2, 1], "x": 0, "y": 2.25, "w": 1 },
+ { "label":"7", "matrix": [2, 2], "x": 1, "y": 2.25, "w": 1 },
+ { "label":"8", "matrix": [2, 3], "x": 2, "y": 2.25, "w": 1 },
+ { "label":"9", "matrix": [2, 4], "x": 3, "y": 2.25, "w": 1 },
+ { "label":"Home", "matrix": [2, 5], "x": 4, "y": 2.25, "w": 1 },
+ { "label":"Tab", "matrix": [2, 6], "x": 5.25, "y": 2.25, "w": 1.5 },
+ { "label":"Q", "matrix": [2, 7], "x": 6.75, "y": 2.25, "w": 1 },
+ { "label":"W", "matrix": [2, 8], "x": 7.75, "y": 2.25, "w": 1 },
+ { "label":"E", "matrix": [2, 9], "x": 8.75, "y": 2.25, "w": 1 },
+ { "label":"R", "matrix": [2, 10], "x": 9.75, "y": 2.25, "w": 1 },
+ { "label":"T", "matrix": [7, 6], "x": 10.75, "y": 2.25, "w": 1 },
+ { "label":"Y", "matrix": [7, 7], "x": 11.75, "y": 2.25, "w": 1 },
+ { "label":"U", "matrix": [7, 8], "x": 12.75, "y": 2.25, "w": 1 },
+ { "label":"I", "matrix": [7, 9], "x": 13.75, "y": 2.25, "w": 1 },
+ { "label":"O", "matrix": [7, 10], "x": 14.75, "y": 2.25, "w": 1 },
+ { "label":"P", "matrix": [9, 1], "x": 15.75, "y": 2.25, "w": 1 },
+ { "label":"[", "matrix": [9, 2], "x": 16.75, "y": 2.25, "w": 1 },
+ { "label":"]", "matrix": [9, 3], "x": 17.75, "y": 2.25, "w": 1 },
+
+ { "label":"*", "matrix": [3, 1], "x": 0, "y": 3.25, "w": 1 },
+ { "label":"4", "matrix": [3, 2], "x": 1, "y": 3.25, "w": 1 },
+ { "label":"5", "matrix": [3, 3], "x": 2, "y": 3.25, "w": 1 },
+ { "label":"6", "matrix": [3, 4], "x": 3, "y": 3.25, "w": 1 },
+ { "label":"End", "matrix": [3, 5], "x": 4, "y": 3.25, "w": 1 },
+ { "label":"Alt", "matrix": [3, 6], "x": 5.25, "y": 3.25, "w": 1.75 },
+ { "label":"A", "matrix": [3, 7], "x": 7, "y": 3.25, "w": 1 },
+ { "label":"S", "matrix": [3, 8], "x": 8, "y": 3.25, "w": 1 },
+ { "label":"D", "matrix": [3, 9], "x": 9, "y": 3.25, "w": 1 },
+ { "label":"F", "matrix": [3, 10], "x": 10, "y": 3.25, "w": 1 },
+ { "label":"G", "matrix": [8, 6], "x": 11, "y": 3.25, "w": 1 },
+ { "label":"H", "matrix": [8, 7], "x": 12, "y": 3.25, "w": 1 },
+ { "label":"J", "matrix": [8, 8], "x": 13, "y": 3.25, "w": 1 },
+ { "label":"K", "matrix": [8, 9], "x": 14, "y": 3.25, "w": 1 },
+ { "label":"L", "matrix": [8, 10], "x": 15, "y": 3.25, "w": 1 },
+ { "label":";", "matrix": [10, 1], "x": 16, "y": 3.25, "w": 1 },
+ { "label":"'", "matrix": [10, 2], "x": 17, "y": 3.25, "w": 1 },
+ { "label":"\\", "matrix": [10, 3], "x": 18, "y": 3.25, "w": 1 },
+ { "label":"Enter", "matrix": [9, 4], "x": 19, "y": 2.25, "w": 1.25, "h": 2 },
+
+ { "label":"-", "matrix": [4, 1], "x": 0, "y": 4.25, "w": 1 },
+ { "label":"1", "matrix": [4, 2], "x": 1, "y": 4.25, "w": 1 },
+ { "label":"2", "matrix": [4, 3], "x": 2, "y": 4.25, "w": 1 },
+ { "label":"3", "matrix": [4, 4], "x": 3, "y": 4.25, "w": 1 },
+ { "label":"Page Up", "matrix": [4, 5], "x": 4, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [4, 6], "x": 5.25, "y": 4.25, "w": 1.25},
+ { "label":"\\", "matrix": [4, 7], "x": 6.5, "y": 4.25, "w": 1 },
+ { "label":"Z", "matrix": [4, 8], "x": 7.5, "y": 4.25, "w": 1 },
+ { "label":"X", "matrix": [4, 9], "x": 8.5, "y": 4.25, "w": 1 },
+ { "label":"C", "matrix": [4, 10], "x": 9.5, "y": 4.25, "w": 1 },
+ { "label":"V", "matrix": [9, 6], "x": 10.5, "y": 4.25, "w": 1 },
+ { "label":"B", "matrix": [9, 7], "x": 11.5, "y": 4.25, "w": 1 },
+ { "label":"N", "matrix": [9, 8], "x": 12.5, "y": 4.25, "w": 1 },
+ { "label":"M", "matrix": [9, 9], "x": 13.5, "y": 4.25, "w": 1 },
+ { "label":",", "matrix": [9, 10], "x": 14.5, "y": 4.25, "w": 1 },
+ { "label":".", "matrix": [10, 4], "x": 15.5, "y": 4.25, "w": 1 },
+ { "label":"/", "matrix": [10, 5], "x": 16.5, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [8, 5], "x": 17.5, "y": 4.25, "w": 2.75 },
+
+ { "label":"+", "matrix": [5, 1], "x": 0, "y": 5.25, "w": 1 },
+ { "label":"0", "matrix": [5, 2], "x": 1, "y": 5.25, "w": 1 },
+ { "label":".", "matrix": [5, 3], "x": 2, "y": 5.25, "w": 1 },
+ { "label":"Enter", "matrix": [5, 4], "x": 3, "y": 5.25, "w": 1 },
+ { "label":"Page Down", "matrix": [5, 5], "x": 4, "y": 5.25, "w": 1 },
+ { "label":"Win", "matrix": [6, 1], "x": 5.25, "y": 5.25, "w": 1 },
+ { "label":"Ctrl", "matrix": [6, 2], "x": 6.25, "y": 5.25, "w": 1 },
+ { "label":"Print", "matrix": [6, 3], "x": 7.25, "y": 5.25, "w": 1 },
+ { "label":"Muhenkan", "matrix": [6, 4], "x": 8.25, "y": 5.25, "w": 1 },
+ { "label":"Space", "matrix": [6, 5], "x": 9.25, "y": 5.25, "w": 6 },
+ { "label":"Henkan", "matrix": [10, 6], "x": 15.25, "y": 5.25, "w": 1 },
+ { "label":"Left", "matrix": [10, 7], "x": 16.25, "y": 5.25, "w": 1 },
+ { "label":"Up", "matrix": [10, 8], "x": 17.25, "y": 5.25, "w": 1 },
+ { "label":"Down", "matrix": [10, 9], "x": 18.25, "y": 5.25, "w": 1 },
+ { "label":"Right", "matrix": [10, 10], "x": 19.25, "y": 5.25, "w": 1 }
+ ]
+ },
+ "LAYOUT_iso_split_bs_rshift": {
+ "layout": [
+ { "label":"Middle Click", "matrix": [0, 0], "x": 0, "y": 0, "w": 1 },
+
+ { "label":"F16", "matrix": [0, 1], "x": 1, "y": 0, "w": 1 },
+ { "label":"F17", "matrix": [0, 2], "x": 2, "y": 0, "w": 1 },
+ { "label":"F18", "matrix": [0, 3], "x": 3, "y": 0, "w": 1 },
+ { "label":"F19", "matrix": [0, 4], "x": 4, "y": 0, "w": 1 },
+ { "label":"F1", "matrix": [0, 5], "x": 5.25, "y": 0, "w": 1 },
+ { "label":"F2", "matrix": [0, 6], "x": 6.25, "y": 0, "w": 1 },
+ { "label":"F3", "matrix": [0, 7], "x": 7.25, "y": 0, "w": 1 },
+ { "label":"F4", "matrix": [0, 8], "x": 8.25, "y": 0, "w": 1 },
+ { "label":"F5", "matrix": [0, 9], "x": 9.25, "y": 0, "w": 1 },
+ { "label":"F6", "matrix": [0, 10], "x": 10.25, "y": 0, "w": 1 },
+ { "label":"F7", "matrix": [5, 6], "x": 11.25, "y": 0, "w": 1 },
+ { "label":"F8", "matrix": [5, 7], "x": 12.25, "y": 0, "w": 1 },
+ { "label":"F9", "matrix": [5, 8], "x": 13.25, "y": 0, "w": 1 },
+ { "label":"F10", "matrix": [5, 9], "x": 14.25, "y": 0, "w": 1 },
+ { "label":"F11", "matrix": [5, 10], "x": 15.25, "y": 0, "w": 1 },
+ { "label":"F12", "matrix": [7, 1], "x": 16.25, "y": 0, "w": 1 },
+ { "label":"F13", "matrix": [7, 2], "x": 17.25, "y": 0, "w": 1 },
+ { "label":"F14", "matrix": [7, 3], "x": 18.25, "y": 0, "w": 1 },
+ { "label":"F15", "matrix": [7, 4], "x": 19.25, "y": 0, "w": 1 },
+
+ { "label":"F20", "matrix": [1, 1], "x": 0, "y": 1, "w": 1 },
+ { "label":"F21", "matrix": [1, 2], "x": 1, "y": 1, "w": 1 },
+ { "label":"F22", "matrix": [1, 3], "x": 2, "y": 1, "w": 1 },
+ { "label":"F23", "matrix": [1, 4], "x": 3, "y": 1, "w": 1 },
+ { "label":"F24", "matrix": [1, 5], "x": 4, "y": 1, "w": 1 },
+ { "label":"Esc", "matrix": [1, 6], "x": 5.25, "y": 1.25, "w": 1 },
+ { "label":"1", "matrix": [1, 7], "x": 6.25, "y": 1.25, "w": 1 },
+ { "label":"2", "matrix": [1, 8], "x": 7.25, "y": 1.25, "w": 1 },
+ { "label":"3", "matrix": [1, 9], "x": 8.25, "y": 1.25, "w": 1 },
+ { "label":"4", "matrix": [1, 10], "x": 9.25, "y": 1.25, "w": 1 },
+ { "label":"5", "matrix": [6, 6], "x": 10.25, "y": 1.25, "w": 1 },
+ { "label":"6", "matrix": [6, 7], "x": 11.25, "y": 1.25, "w": 1 },
+ { "label":"7", "matrix": [6, 8], "x": 12.25, "y": 1.25, "w": 1 },
+ { "label":"8", "matrix": [6, 9], "x": 13.25, "y": 1.25, "w": 1 },
+ { "label":"9", "matrix": [6, 10], "x": 14.25, "y": 1.25, "w": 1 },
+ { "label":"0", "matrix": [8, 1], "x": 15.25, "y": 1.25, "w": 1 },
+ { "label":"-", "matrix": [8, 2], "x": 16.25, "y": 1.25, "w": 1 },
+ { "label":"=", "matrix": [8, 3], "x": 17.25, "y": 1.25, "w": 1 },
+ { "label":"Delete", "matrix": [8, 4], "x": 18.25, "y": 1.25, "w": 1 },
+ { "label":"Backspace", "matrix": [7, 5], "x": 19.25, "y": 1.25, "w": 1 },
+
+ { "label":"/", "matrix": [2, 1], "x": 0, "y": 2.25, "w": 1 },
+ { "label":"7", "matrix": [2, 2], "x": 1, "y": 2.25, "w": 1 },
+ { "label":"8", "matrix": [2, 3], "x": 2, "y": 2.25, "w": 1 },
+ { "label":"9", "matrix": [2, 4], "x": 3, "y": 2.25, "w": 1 },
+ { "label":"Home", "matrix": [2, 5], "x": 4, "y": 2.25, "w": 1 },
+ { "label":"Tab", "matrix": [2, 6], "x": 5.25, "y": 2.25, "w": 1.5 },
+ { "label":"Q", "matrix": [2, 7], "x": 6.75, "y": 2.25, "w": 1 },
+ { "label":"W", "matrix": [2, 8], "x": 7.75, "y": 2.25, "w": 1 },
+ { "label":"E", "matrix": [2, 9], "x": 8.75, "y": 2.25, "w": 1 },
+ { "label":"R", "matrix": [2, 10], "x": 9.75, "y": 2.25, "w": 1 },
+ { "label":"T", "matrix": [7, 6], "x": 10.75, "y": 2.25, "w": 1 },
+ { "label":"Y", "matrix": [7, 7], "x": 11.75, "y": 2.25, "w": 1 },
+ { "label":"U", "matrix": [7, 8], "x": 12.75, "y": 2.25, "w": 1 },
+ { "label":"I", "matrix": [7, 9], "x": 13.75, "y": 2.25, "w": 1 },
+ { "label":"O", "matrix": [7, 10], "x": 14.75, "y": 2.25, "w": 1 },
+ { "label":"P", "matrix": [9, 1], "x": 15.75, "y": 2.25, "w": 1 },
+ { "label":"[", "matrix": [9, 2], "x": 16.75, "y": 2.25, "w": 1 },
+ { "label":"]", "matrix": [9, 3], "x": 17.75, "y": 2.25, "w": 1 },
+
+ { "label":"*", "matrix": [3, 1], "x": 0, "y": 3.25, "w": 1 },
+ { "label":"4", "matrix": [3, 2], "x": 1, "y": 3.25, "w": 1 },
+ { "label":"5", "matrix": [3, 3], "x": 2, "y": 3.25, "w": 1 },
+ { "label":"6", "matrix": [3, 4], "x": 3, "y": 3.25, "w": 1 },
+ { "label":"End", "matrix": [3, 5], "x": 4, "y": 3.25, "w": 1 },
+ { "label":"Alt", "matrix": [3, 6], "x": 5.25, "y": 3.25, "w": 1.75 },
+ { "label":"A", "matrix": [3, 7], "x": 7, "y": 3.25, "w": 1 },
+ { "label":"S", "matrix": [3, 8], "x": 8, "y": 3.25, "w": 1 },
+ { "label":"D", "matrix": [3, 9], "x": 9, "y": 3.25, "w": 1 },
+ { "label":"F", "matrix": [3, 10], "x": 10, "y": 3.25, "w": 1 },
+ { "label":"G", "matrix": [8, 6], "x": 11, "y": 3.25, "w": 1 },
+ { "label":"H", "matrix": [8, 7], "x": 12, "y": 3.25, "w": 1 },
+ { "label":"J", "matrix": [8, 8], "x": 13, "y": 3.25, "w": 1 },
+ { "label":"K", "matrix": [8, 9], "x": 14, "y": 3.25, "w": 1 },
+ { "label":"L", "matrix": [8, 10], "x": 15, "y": 3.25, "w": 1 },
+ { "label":";", "matrix": [10, 1], "x": 16, "y": 3.25, "w": 1 },
+ { "label":"'", "matrix": [10, 2], "x": 17, "y": 3.25, "w": 1 },
+ { "label":"\\", "matrix": [10, 3], "x": 18, "y": 3.25, "w": 1 },
+ { "label":"Enter", "matrix": [9, 4], "x": 19, "y": 2.25, "w": 1.25, "h": 2 },
+
+ { "label":"-", "matrix": [4, 1], "x": 0, "y": 4.25, "w": 1 },
+ { "label":"1", "matrix": [4, 2], "x": 1, "y": 4.25, "w": 1 },
+ { "label":"2", "matrix": [4, 3], "x": 2, "y": 4.25, "w": 1 },
+ { "label":"3", "matrix": [4, 4], "x": 3, "y": 4.25, "w": 1 },
+ { "label":"Page Up", "matrix": [4, 5], "x": 4, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [4, 6], "x": 5.25, "y": 4.25, "w": 1.25},
+ { "label":"\\", "matrix": [4, 7], "x": 6.5, "y": 4.25, "w": 1 },
+ { "label":"Z", "matrix": [4, 8], "x": 7.5, "y": 4.25, "w": 1 },
+ { "label":"X", "matrix": [4, 9], "x": 8.5, "y": 4.25, "w": 1 },
+ { "label":"C", "matrix": [4, 10], "x": 9.5, "y": 4.25, "w": 1 },
+ { "label":"V", "matrix": [9, 6], "x": 10.5, "y": 4.25, "w": 1 },
+ { "label":"B", "matrix": [9, 7], "x": 11.5, "y": 4.25, "w": 1 },
+ { "label":"N", "matrix": [9, 8], "x": 12.5, "y": 4.25, "w": 1 },
+ { "label":"M", "matrix": [9, 9], "x": 13.5, "y": 4.25, "w": 1 },
+ { "label":",", "matrix": [9, 10], "x": 14.5, "y": 4.25, "w": 1 },
+ { "label":".", "matrix": [10, 4], "x": 15.5, "y": 4.25, "w": 1 },
+ { "label":"/", "matrix": [10, 5], "x": 16.5, "y": 4.25, "w": 1 },
+ { "label":"`", "matrix": [9, 5], "x": 17.5, "y": 4.25, "w": 1 },
+ { "label":"Shift", "matrix": [8, 5], "x": 18.5, "y": 4.25, "w": 1.75 },
+
+ { "label":"+", "matrix": [5, 1], "x": 0, "y": 5.25, "w": 1 },
+ { "label":"0", "matrix": [5, 2], "x": 1, "y": 5.25, "w": 1 },
+ { "label":".", "matrix": [5, 3], "x": 2, "y": 5.25, "w": 1 },
+ { "label":"Enter", "matrix": [5, 4], "x": 3, "y": 5.25, "w": 1 },
+ { "label":"Page Down", "matrix": [5, 5], "x": 4, "y": 5.25, "w": 1 },
+ { "label":"Win", "matrix": [6, 1], "x": 5.25, "y": 5.25, "w": 1 },
+ { "label":"Ctrl", "matrix": [6, 2], "x": 6.25, "y": 5.25, "w": 1 },
+ { "label":"Print", "matrix": [6, 3], "x": 7.25, "y": 5.25, "w": 1 },
+ { "label":"Muhenkan", "matrix": [6, 4], "x": 8.25, "y": 5.25, "w": 1 },
+ { "label":"Space", "matrix": [6, 5], "x": 9.25, "y": 5.25, "w": 6 },
+ { "label":"Henkan", "matrix": [10, 6], "x": 15.25, "y": 5.25, "w": 1 },
+ { "label":"Left", "matrix": [10, 7], "x": 16.25, "y": 5.25, "w": 1 },
+ { "label":"Up", "matrix": [10, 8], "x": 17.25, "y": 5.25, "w": 1 },
+ { "label":"Down", "matrix": [10, 9], "x": 18.25, "y": 5.25, "w": 1 },
+ { "label":"Right", "matrix": [10, 10], "x": 19.25, "y": 5.25, "w": 1 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/varanidae/keymaps/ansi/keymap.c b/keyboards/varanidae/keymaps/ansi/keymap.c
new file mode 100644
index 000000000000..c020bd671889
--- /dev/null
+++ b/keyboards/varanidae/keymaps/ansi/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/ansi/rules.mk b/keyboards/varanidae/keymaps/ansi/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/varanidae/keymaps/ansi/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/keymaps/ansi_split_bs_rshift/keymap.c b/keyboards/varanidae/keymaps/ansi_split_bs_rshift/keymap.c
new file mode 100644
index 000000000000..becb8120711f
--- /dev/null
+++ b/keyboards/varanidae/keymaps/ansi_split_bs_rshift/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi_split_bs_rshift(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_GRV, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/ansi_split_bs_rshift/rules.mk b/keyboards/varanidae/keymaps/ansi_split_bs_rshift/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/varanidae/keymaps/ansi_split_bs_rshift/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/keymaps/default/keymap.c b/keyboards/varanidae/keymaps/default/keymap.c
new file mode 100644
index 000000000000..4c43532108bf
--- /dev/null
+++ b/keyboards/varanidae/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_GRV, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/default/rules.mk b/keyboards/varanidae/keymaps/default/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/varanidae/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/keymaps/iso/keymap.c b/keyboards/varanidae/keymaps/iso/keymap.c
new file mode 100644
index 000000000000..b1f1b0c9a4d0
--- /dev/null
+++ b/keyboards/varanidae/keymaps/iso/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_iso(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/iso/rules.mk b/keyboards/varanidae/keymaps/iso/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/varanidae/keymaps/iso/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/keymaps/iso_split_bs_rshift/keymap.c b/keyboards/varanidae/keymaps/iso_split_bs_rshift/keymap.c
new file mode 100644
index 000000000000..7324f6287721
--- /dev/null
+++ b/keyboards/varanidae/keymaps/iso_split_bs_rshift/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_iso_split_bs_rshift(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_GRV, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/iso_split_bs_rshift/rules.mk b/keyboards/varanidae/keymaps/iso_split_bs_rshift/rules.mk
new file mode 100644
index 000000000000..ee325681483f
--- /dev/null
+++ b/keyboards/varanidae/keymaps/iso_split_bs_rshift/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/keymaps/via/keymap.c b/keyboards/varanidae/keymaps/via/keymap.c
new file mode 100644
index 000000000000..20e942e455ab
--- /dev/null
+++ b/keyboards/varanidae/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 QMK
+ * Copyright 2023 Silc Renew / Tokage IT Lab.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_BTN3, KC_F16, KC_F17, KC_F18, KC_F19, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15,
+ KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC,
+ KC_PSLS, KC_P7, KC_P8, KC_P9, KC_HOME, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_PAST, KC_P4, KC_P5, KC_P6, KC_END, KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
+ KC_PMNS, KC_P1, KC_P2, KC_P3, KC_PGUP, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_GRV, KC_RSFT,
+ KC_PPLS, KC_P0, KC_PDOT, KC_PENT, KC_PGDN, KC_LWIN, KC_LCTL, KC_PSCR, KC_INT5, KC_SPC, KC_INT4, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) }
+};
+#endif
diff --git a/keyboards/varanidae/keymaps/via/rules.mk b/keyboards/varanidae/keymaps/via/rules.mk
new file mode 100644
index 000000000000..f1adcab005e8
--- /dev/null
+++ b/keyboards/varanidae/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/varanidae/readme.md b/keyboards/varanidae/readme.md
new file mode 100644
index 000000000000..fbaaa77d640f
--- /dev/null
+++ b/keyboards/varanidae/readme.md
@@ -0,0 +1,24 @@
+# Varanidae
+
+![Varanidae](https://i.imgur.com/0wWfmE1h.png)
+
+Varanidae the left-side pad 110 keys keyboard for creators powered by Elite-C.
+
+* Keyboard Maintainer: [Silc Renew](https://github.com/TokageItLab)
+* Hardware Supported: Varanidae
+* Hardware Availability: [TokageItLab / Varanidae](https://github.com/TokageItLab/Varanidae)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make varanidae:default
+ make varanidae:via
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the switch at (0,0) in the matrix (usually the encoder push switch) and plug in the keyboard
+* **Physical reset button**: Briefly press the reset switch on the Elite-C
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/varanidae/rules.mk b/keyboards/varanidae/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/varanidae/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/viktus/osav2_numpad/info.json b/keyboards/viktus/osav2_numpad/info.json
index d347631ccc90..941d65f36785 100644
--- a/keyboards/viktus/osav2_numpad/info.json
+++ b/keyboards/viktus/osav2_numpad/info.json
@@ -39,8 +39,16 @@
"twinkle": true
}
},
+ "layout_aliases": {
+ "LAYOUT_all_split": "LAYOUT_ortho_5x4",
+ "LAYOUT_2u_plus_2u_enter_2u_zero": "LAYOUT_numpad_5x4"
+ },
+ "community_layouts": [
+ "ortho_5x4",
+ "numpad_5x4"
+ ],
"layouts": {
- "LAYOUT_all_split": {
+ "LAYOUT_ortho_5x4": {
"layout": [
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
@@ -84,7 +92,7 @@
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "K41", "matrix": [4, 1], "x": 1, "y": 4},
{"label": "K42", "matrix": [4, 2], "x": 2, "y": 4},
- {"label": "K43", "matrix": [4, 3], "h": 2, "x": 3, "y": 3}
+ {"label": "K43", "matrix": [4, 3], "x": 3, "y": 3, "h": 2}
]
},
"LAYOUT_2u_plus_2u_enter": {
@@ -99,14 +107,14 @@
{"label": "K20", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "K21", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "K22", "matrix": [2, 2], "x": 2, "y": 2},
- {"label": "K23", "matrix": [2, 3], "h": 2, "x": 3, "y": 1},
+ {"label": "K23", "matrix": [2, 3], "x": 3, "y": 1, "h": 2},
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "K31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "K41", "matrix": [4, 1], "x": 1, "y": 4},
{"label": "K42", "matrix": [4, 2], "x": 2, "y": 4},
- {"label": "K43", "matrix": [4, 3], "h": 2, "x": 3, "y": 3}
+ {"label": "K43", "matrix": [4, 3], "x": 3, "y": 3, "h": 2}
]
},
"LAYOUT_2u_enter_2u_zero": {
@@ -126,12 +134,12 @@
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "K31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32", "matrix": [3, 2], "x": 2, "y": 3},
- {"label": "K41", "matrix": [4, 1], "h": 2, "x": 0, "y": 4},
+ {"label": "K41", "matrix": [4, 1], "x": 0, "y": 4, "w": 2},
{"label": "K42", "matrix": [4, 2], "x": 2, "y": 4},
- {"label": "K43", "matrix": [4, 3], "h": 2, "x": 3, "y": 3}
+ {"label": "K43", "matrix": [4, 3], "x": 3, "y": 3, "h": 2}
]
},
- "LAYOUT_2u_plus_2u_enter_2u_zero": {
+ "LAYOUT_numpad_5x4": {
"layout": [
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
@@ -143,13 +151,13 @@
{"label": "K20", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "K21", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "K22", "matrix": [2, 2], "x": 2, "y": 2},
- {"label": "K23", "matrix": [2, 3], "h": 2, "x": 3, "y": 1},
+ {"label": "K23", "matrix": [2, 3], "x": 3, "y": 1, "h": 2},
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "K31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32", "matrix": [3, 2], "x": 2, "y": 3},
- {"label": "K41", "matrix": [4, 1], "h": 2, "x": 0, "y": 4},
+ {"label": "K41", "matrix": [4, 1], "x": 0, "y": 4, "w": 2},
{"label": "K42", "matrix": [4, 2], "x": 2, "y": 4},
- {"label": "K43", "matrix": [4, 3], "h": 2, "x": 3, "y": 3}
+ {"label": "K43", "matrix": [4, 3], "x": 3, "y": 3, "h": 2}
]
},
"LAYOUT_mirrored_2u_enter": {
@@ -169,7 +177,7 @@
{"label": "K31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "K33", "matrix": [3, 3], "x": 3, "y": 3},
- {"label": "K40", "matrix": [4, 0], "h": 2, "x": 0, "y": 3},
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 3, "h": 2},
{"label": "K41", "matrix": [4, 1], "x": 1, "y": 4},
{"label": "K42", "matrix": [4, 2], "x": 2, "y": 4},
{"label": "K43", "matrix": [4, 3], "x": 3, "y": 4}
@@ -184,14 +192,14 @@
{"label": "K11", "matrix": [1, 1], "x": 1, "y": 1},
{"label": "K12", "matrix": [1, 2], "x": 2, "y": 1},
{"label": "K13", "matrix": [1, 3], "x": 3, "y": 1},
- {"label": "K20", "matrix": [2, 0], "h": 2, "x": 0, "y": 1},
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 1, "h": 2},
{"label": "K21", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "K22", "matrix": [2, 2], "x": 2, "y": 2},
{"label": "K23", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "K31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "K33", "matrix": [3, 3], "x": 3, "y": 3},
- {"label": "K40", "matrix": [4, 0], "h": 2, "x": 0, "y": 3},
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 3, "h": 2},
{"label": "K41", "matrix": [4, 1], "x": 1, "y": 4},
{"label": "K42", "matrix": [4, 2], "x": 2, "y": 4},
{"label": "K43", "matrix": [4, 3], "x": 3, "y": 4}
@@ -214,9 +222,9 @@
{"label": "K31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "K33", "matrix": [3, 3], "x": 3, "y": 3},
- {"label": "K40", "matrix": [4, 0], "h": 2, "x": 0, "y": 3},
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 3, "h": 2},
{"label": "K41", "matrix": [4, 1], "x": 1, "y": 4},
- {"label": "K42", "matrix": [4, 2], "w": 2, "x": 2, "y": 4}
+ {"label": "K42", "matrix": [4, 2], "x": 2, "y": 4, "w": 2}
]
},
"LAYOUT_mirrored_2u_plus_2u_enter_2u_zero": {
@@ -228,16 +236,16 @@
{"label": "K11", "matrix": [1, 1], "x": 1, "y": 1},
{"label": "K12", "matrix": [1, 2], "x": 2, "y": 1},
{"label": "K13", "matrix": [1, 3], "x": 3, "y": 1},
- {"label": "K20", "matrix": [2, 0], "h": 2, "x": 0, "y": 1},
+ {"label": "K20", "matrix": [2, 0], "x": 0, "y": 1, "h": 2},
{"label": "K21", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "K22", "matrix": [2, 2], "x": 2, "y": 2},
{"label": "K23", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "K31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "K33", "matrix": [3, 3], "x": 3, "y": 3},
- {"label": "K40", "matrix": [4, 0], "h": 2, "x": 0, "y": 3},
+ {"label": "K40", "matrix": [4, 0], "x": 0, "y": 3, "h": 2},
{"label": "K41", "matrix": [4, 1], "x": 1, "y": 4},
- {"label": "K42", "matrix": [4, 2], "w": 2, "x": 2, "y": 4}
+ {"label": "K42", "matrix": [4, 2], "x": 2, "y": 4, "w": 2}
]
}
}
diff --git a/keyboards/viktus/osav2_numpad/keymaps/default/keymap.c b/keyboards/viktus/osav2_numpad/keymaps/default/keymap.c
index ce8a1d277417..ac99f1d8c7c7 100644
--- a/keyboards/viktus/osav2_numpad/keymaps/default/keymap.c
+++ b/keyboards/viktus/osav2_numpad/keymaps/default/keymap.c
@@ -17,7 +17,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_all_split(
+ [0] = LAYOUT_ortho_5x4(
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_P4, KC_P5, KC_P6, KC_PEQL,
diff --git a/keyboards/viktus/osav2_numpad/keymaps/via/keymap.c b/keyboards/viktus/osav2_numpad/keymaps/via/keymap.c
index ce8a1d277417..ac99f1d8c7c7 100644
--- a/keyboards/viktus/osav2_numpad/keymaps/via/keymap.c
+++ b/keyboards/viktus/osav2_numpad/keymaps/via/keymap.c
@@ -17,7 +17,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_all_split(
+ [0] = LAYOUT_ortho_5x4(
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_P4, KC_P5, KC_P6, KC_PEQL,
diff --git a/keyboards/viktus/osav2_numpad_topre/ec.c b/keyboards/viktus/osav2_numpad_topre/ec.c
new file mode 100644
index 000000000000..e4f59c3b6bf8
--- /dev/null
+++ b/keyboards/viktus/osav2_numpad_topre/ec.c
@@ -0,0 +1,181 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+#include "ec.h"
+#include "analog.h"
+//#include "debug.h" // needed for debugging
+
+// sensing channel definitions
+#define A0 0
+#define A1 1
+#define A2 2
+#define A3 3
+#define A4 4
+#define A5 5
+#define A6 6
+#define A7 7
+
+// analog connection settings
+#define DISCHARGE_PIN B5
+#define ANALOG_PORT B6
+
+#ifndef MUX_SEL_PIN
+# define MUX_SEL_PINS \
+ { D6, D7, B4 }
+#endif
+
+// pin connections
+const uint8_t row_channels[] = MATRIX_ROW_PINS;
+const uint8_t col_pins[] = MATRIX_COL_PINS;
+const uint8_t mux_sel_pins[] = MUX_SEL_PINS;
+
+_Static_assert(sizeof(mux_sel_pins) == 3, "invalid MUX_SEL_PINS");
+
+static ec_config_t config;
+static uint16_t ec_sw_value[MATRIX_COLS][MATRIX_ROWS];
+
+static inline void discharge_capacitor(void) { setPinOutput(DISCHARGE_PIN); }
+static inline void charge_capacitor(uint8_t col) {
+ setPinInput(DISCHARGE_PIN);
+ writePinHigh(col_pins[col]);
+}
+
+static inline void clear_all_col_pins(void) {
+ for (int col = 0; col < sizeof(col_pins); col++) {
+ writePinLow(col_pins[col]);
+ }
+}
+
+void init_mux_sel(void) {
+ for (int idx = 0; idx < sizeof(mux_sel_pins); idx++) {
+ setPinOutput(mux_sel_pins[idx]);
+ }
+}
+
+void select_mux(uint8_t row) {
+ uint8_t ch = row_channels[row];
+ writePin(mux_sel_pins[0], ch & 1);
+ writePin(mux_sel_pins[1], ch & 2);
+ writePin(mux_sel_pins[2], ch & 4);
+}
+
+void init_col(void) {
+ for (int idx = 0; idx < sizeof(col_pins); idx++) {
+ setPinOutput(col_pins[idx]);
+ writePinLow(col_pins[idx]);
+ }
+}
+
+void ec_init(ec_config_t const* const ec_config) {
+ // save config
+ config = *ec_config;
+
+ // initialize discharge pin as discharge mode
+ writePinLow(DISCHARGE_PIN);
+ setPinOutput(DISCHARGE_PIN);
+
+ // set analog reference
+ analogReference(ADC_REF_POWER);
+
+ // initialize drive lines
+ init_col();
+
+ // initialize multiplexer select pin
+ init_mux_sel();
+
+ // set discharge pin to charge mode
+ setPinInput(DISCHARGE_PIN);
+}
+
+uint16_t ec_readkey_raw(uint8_t col, uint8_t row) {
+ uint16_t sw_value = 0;
+
+ discharge_capacitor();
+
+ select_mux(row);
+
+ clear_all_col_pins();
+
+ cli();
+
+ charge_capacitor(col);
+
+ sw_value = analogReadPin(ANALOG_PORT);
+
+ sei();
+
+ return sw_value;
+}
+
+bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt) {
+ bool current_state = (*current_row >> col) & 1;
+
+ // press to release
+ if (current_state && sw_value < reset_pt) {
+ *current_row &= ~(MATRIX_ROW_SHIFTER << col);
+ return true;
+ }
+
+ // rest to press
+ if ((!current_state) && sw_value > actuation_pt) {
+ *current_row |= (MATRIX_ROW_SHIFTER << col);
+ return true;
+ }
+
+ return false;
+}
+
+bool ec_matrix_scan(matrix_row_t current_matrix[]) {
+ bool updated = false;
+
+ for (int row = 0; row < sizeof(row_channels); row++) {
+ for (int col = 0; col < sizeof(col_pins); col++) {
+ uint16_t reset_pt = config.reset_pt;
+ uint16_t actuation_pt = config.actuation_pt;
+
+ //Modifying threshold values for overlapping pads
+ switch(row) {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ switch(col) {
+ case 3: // lower threshold for plus and enter: (37 rest, 61 btm)
+ reset_pt = 45;
+ actuation_pt = 50;
+ break;
+ }
+ break;
+ }
+
+ ec_sw_value[col][row] = ec_readkey_raw(col, row);
+ updated |= ec_update_key(¤t_matrix[row], col, ec_sw_value[col][row], reset_pt, actuation_pt);
+ }
+ }
+
+ return updated;
+}
+
+// console debugging for pad values
+/*void ec_dprint_matrix(void) {
+ for (int row = 0; row < sizeof(row_channels); row++) {
+ for (int col = 0; col < sizeof(col_pins); col++) {
+ dprintf("%5d", ec_sw_value[col][row]);
+ }
+ dprintf("\n");
+ }
+}*/
diff --git a/keyboards/viktus/osav2_numpad_topre/ec.h b/keyboards/viktus/osav2_numpad_topre/ec.h
new file mode 100644
index 000000000000..33bdb2d5effb
--- /dev/null
+++ b/keyboards/viktus/osav2_numpad_topre/ec.h
@@ -0,0 +1,31 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+
+#include "matrix.h"
+
+typedef struct {
+ uint16_t reset_pt;
+ uint16_t actuation_pt;
+} ec_config_t;
+
+void ec_init(ec_config_t const* const ec_config);
+bool ec_matrix_scan(matrix_row_t current_matrix[]);
+//void ec_dprint_matrix(void); // needed for debugging
+uint16_t ec_readkey_raw(uint8_t col, uint8_t row);
+bool ec_update_key(matrix_row_t* current_row, uint8_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt);
diff --git a/keyboards/viktus/osav2_numpad_topre/info.json b/keyboards/viktus/osav2_numpad_topre/info.json
new file mode 100644
index 000000000000..55ca939e3f43
--- /dev/null
+++ b/keyboards/viktus/osav2_numpad_topre/info.json
@@ -0,0 +1,100 @@
+{
+ "manufacturer": "Viktus Design LLC",
+ "keyboard_name": "OSAv2 Numpad - Topre",
+ "maintainer": "BlindAssassin111",
+ "url": "https://viktus.design",
+ "usb": {
+ "device_version": "1.1.0",
+ "vid": "0x5644",
+ "pid": "0x4E54"
+ },
+ "bootloader": "atmel-dfu",
+ "processor": "atmega32u4",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["F5", "F6", "D3", "D2"],
+ "rows": ["A1", "A0", "A3", "A2", "A4"]
+ },
+ "layouts": {
+ "LAYOUT_ortho_5x4": {
+ "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": "K10", "matrix": [1, 0], "x": 0, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 3, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 3, "y": 2 },
+ { "label": "K30", "matrix": [3, 0], "x": 0, "y": 3 },
+ { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 3, "y": 3 },
+ { "label": "K40", "matrix": [4, 0], "x": 0, "y": 4 },
+ { "label": "K41", "matrix": [4, 1], "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "x": 2, "y": 4 },
+ { "label": "K43", "matrix": [4, 3], "x": 3, "y": 4 }
+ ]
+ },
+ "LAYOUT_split_plus_2u_enter": {
+ "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": "K10", "matrix": [1, 0], "x": 0, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 3, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 3, "y": 2 },
+ { "label": "K30", "matrix": [3, 0], "x": 0, "y": 3 },
+ { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "h": 2, "x": 3, "y": 3 },
+ { "label": "K40", "matrix": [4, 0], "x": 0, "y": 4 },
+ { "label": "K41", "matrix": [4, 1], "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "x": 2, "y": 4 }
+ ]
+ },
+ "LAYOUT_2u_plus_2u_enter": {
+ "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": "K10", "matrix": [1, 0], "x": 0, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "x": 1, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 2, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "x": 1, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 2, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "h": 2, "x": 3, "y": 1 },
+ { "label": "K30", "matrix": [3, 0], "x": 0, "y": 3 },
+ { "label": "K31", "matrix": [3, 1], "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 2, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "h": 2, "x": 3, "y": 3 },
+ { "label": "K40", "matrix": [4, 0], "x": 0, "y": 4 },
+ { "label": "K41", "matrix": [4, 1], "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "x": 2, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/viktus/osav2_numpad_topre/keymaps/default/keymap.c b/keyboards/viktus/osav2_numpad_topre/keymaps/default/keymap.c
new file mode 100644
index 000000000000..7545c946c3f0
--- /dev/null
+++ b/keyboards/viktus/osav2_numpad_topre/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_5x4(
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PEQL,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_P0, KC_P0, KC_PDOT, KC_DEL
+ )
+};
diff --git a/keyboards/viktus/osav2_numpad_topre/keymaps/via/keymap.c b/keyboards/viktus/osav2_numpad_topre/keymaps/via/keymap.c
new file mode 100644
index 000000000000..7545c946c3f0
--- /dev/null
+++ b/keyboards/viktus/osav2_numpad_topre/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_5x4(
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PEQL,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_P0, KC_P0, KC_PDOT, KC_DEL
+ )
+};
diff --git a/keyboards/viktus/osav2_numpad_topre/keymaps/via/rules.mk b/keyboards/viktus/osav2_numpad_topre/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/viktus/osav2_numpad_topre/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/viktus/osav2_numpad_topre/osav2_numpad_topre.c b/keyboards/viktus/osav2_numpad_topre/osav2_numpad_topre.c
new file mode 100644
index 000000000000..2337fc55f396
--- /dev/null
+++ b/keyboards/viktus/osav2_numpad_topre/osav2_numpad_topre.c
@@ -0,0 +1,49 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+#include "ec.h"
+#include "matrix.h"
+//#include "debug.h" // needed for debugging
+
+#define RESET_PT 55
+#define ACTUATION_PT 65
+
+// console debugging for pad values
+void keyboard_post_init_kb() {
+ debug_enable = true;
+ debug_matrix = true;
+}
+
+void matrix_init_custom(void) {
+ ec_config_t ec_config = {.reset_pt = RESET_PT, .actuation_pt = ACTUATION_PT};
+
+ ec_init(&ec_config);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool updated = ec_matrix_scan(current_matrix);
+
+ // console debugging for pad values
+ /*static int cnt = 0;
+ if (cnt++ == 1000) {
+ cnt = 0;
+ ec_dprint_matrix();
+ dprintf("\n");
+ }*/
+
+ return updated;
+}
diff --git a/keyboards/viktus/osav2_numpad_topre/readme.md b/keyboards/viktus/osav2_numpad_topre/readme.md
new file mode 100644
index 000000000000..990bfe04fe7a
--- /dev/null
+++ b/keyboards/viktus/osav2_numpad_topre/readme.md
@@ -0,0 +1,27 @@
+# OSAv2 Numpad - Topre
+
+![osav2_numpad_topre](https://i.imgur.com/G6yNtJMh.png)
+
+An OSAv2 Numpad in topre flavor.
+
+- Keyboard Maintainer: BlindAssassin111
+- Hardware Supported: OSAv2 Numpad Topre PCB
+- Hardware Availability: Viktus Design LLC
+
+Make example for this keyboard (after setting up your build environment):
+
+ make viktus/osav2_numpad_topre:default
+
+Flashing example for this keyboard:
+
+ make viktus/osav2_numpad_topre:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/viktus/osav2_numpad_topre/rules.mk b/keyboards/viktus/osav2_numpad_topre/rules.mk
new file mode 100644
index 000000000000..037e26c530c7
--- /dev/null
+++ b/keyboards/viktus/osav2_numpad_topre/rules.mk
@@ -0,0 +1,3 @@
+CUSTOM_MATRIX = lite
+QUANTUM_LIB_SRC += analog.c
+SRC += ec.c
diff --git a/keyboards/viktus/styrka_topre/ec.c b/keyboards/viktus/styrka_topre/ec.c
new file mode 100644
index 000000000000..c9980461afb3
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/ec.c
@@ -0,0 +1,191 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "ec.h"
+
+#include "quantum.h"
+#include "analog.h"
+//#include "debug.h"
+
+// sensing channel definitions
+#define A0 0
+#define A1 1
+#define A2 2
+#define A3 3
+#define A4 4
+#define A5 5
+#define A6 6
+#define A7 7
+
+// analog connection settings
+#define DISCHARGE_PIN D3
+#define ANALOG_PORT D4
+
+#ifndef MUX_SEL_PIN
+# define MUX_SEL_PINS \
+ { D0, D1, D2 }
+#endif
+
+// pin connections
+const uint8_t row_channels[] = MATRIX_ROW_PINS;
+const uint8_t col_pins[] = MATRIX_COL_PINS;
+const uint8_t mux_sel_pins[] = MUX_SEL_PINS;
+
+_Static_assert(sizeof(mux_sel_pins) == 3, "invalid MUX_SEL_PINS");
+
+static ec_config_t config;
+static uint16_t ec_sw_value[MATRIX_COLS][MATRIX_ROWS];
+
+static inline void discharge_capacitor(void) { setPinOutput(DISCHARGE_PIN); }
+static inline void charge_capacitor(uint8_t col) {
+ setPinInput(DISCHARGE_PIN);
+ writePinHigh(col_pins[col]);
+}
+
+static inline void clear_all_col_pins(void) {
+ for (int col = 0; col < sizeof(col_pins); col++) {
+ writePinLow(col_pins[col]);
+ }
+}
+
+void init_mux_sel(void) {
+ for (int idx = 0; idx < sizeof(mux_sel_pins); idx++) {
+ setPinOutput(mux_sel_pins[idx]);
+ }
+}
+
+void select_mux(uint8_t row) {
+ uint8_t ch = row_channels[row];
+ writePin(mux_sel_pins[0], ch & 1);
+ writePin(mux_sel_pins[1], ch & 2);
+ writePin(mux_sel_pins[2], ch & 4);
+}
+
+void init_col(void) {
+ for (int idx = 0; idx < sizeof(col_pins); idx++) {
+ setPinOutput(col_pins[idx]);
+ writePinLow(col_pins[idx]);
+ }
+}
+
+void ec_init(ec_config_t const* const ec_config) {
+ // save config
+ config = *ec_config;
+
+ // initialize discharge pin as discharge mode
+ writePinLow(DISCHARGE_PIN);
+ setPinOutput(DISCHARGE_PIN);
+
+ // set analog reference
+ analogReference(ADC_REF_POWER);
+
+ // initialize drive lines
+ init_col();
+
+ // initialize multiplexer select pin
+ init_mux_sel();
+
+ // set discharge pin to charge mode
+ setPinInput(DISCHARGE_PIN);
+}
+
+uint16_t ec_readkey_raw(uint8_t col, uint8_t row) {
+ uint16_t sw_value = 0;
+
+ discharge_capacitor();
+
+ select_mux(row);
+
+ clear_all_col_pins();
+
+ cli();
+
+ charge_capacitor(col);
+
+ sw_value = analogReadPin(ANALOG_PORT);
+
+ sei();
+
+ return sw_value;
+}
+
+bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt) {
+ bool current_state = (*current_row >> col) & 1;
+
+ // press to release
+ if (current_state && sw_value < reset_pt) {
+ *current_row &= ~(MATRIX_ROW_SHIFTER << col);
+ return true;
+ }
+
+ // release to press
+ if ((!current_state) && sw_value > actuation_pt) {
+ *current_row |= (MATRIX_ROW_SHIFTER << col);
+ return true;
+ }
+
+ return false;
+}
+
+bool ec_matrix_scan(matrix_row_t current_matrix[]) {
+ bool updated = false;
+
+ for (int row = 0; row < sizeof(row_channels); row++) {
+ for (int col = 0; col < sizeof(col_pins); col++) {
+ uint16_t reset_pt = config.reset_pt;
+ uint16_t actuation_pt = config.actuation_pt;
+
+ switch(row) {
+ case 0:
+ switch(col) {
+ case 15: // lower threshold for split backspace:
+ case 16: // lower threshold for 2U backspace: 2U(37 rest, 62 btm)
+ reset_pt = 45;
+ actuation_pt = 50;
+ break;
+ }
+ break;
+ case 4:
+ switch(col) {
+ case 8: // Lower threshold for spacebar: 7U(37 rest, 63 btm)
+ reset_pt = 55;
+ actuation_pt = 60;
+ break;
+ case 13: // Lower threshold for right bottom mods: 1.5U(40 rest, 65 btm)
+ reset_pt = 47;
+ actuation_pt = 53;
+ break;
+ }
+ break;
+ }
+
+ ec_sw_value[col][row] = ec_readkey_raw(col, row);
+ updated |= ec_update_key(¤t_matrix[row], col, ec_sw_value[col][row], reset_pt, actuation_pt);
+ }
+ }
+
+ return updated;
+}
+
+// console debugging for pad values
+/*void ec_dprint_matrix(void) {
+ for (int row = 0; row < sizeof(row_channels); row++) {
+ for (int col = 0; col < sizeof(col_pins); col++) {
+ dprintf("%5d", ec_sw_value[col][row]);
+ }
+ dprintf("\n");
+ }
+}*/
diff --git a/keyboards/viktus/styrka_topre/ec.h b/keyboards/viktus/styrka_topre/ec.h
new file mode 100644
index 000000000000..ace8d092b5ff
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/ec.h
@@ -0,0 +1,31 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+
+#include "matrix.h"
+
+typedef struct {
+ uint16_t reset_pt;
+ uint16_t actuation_pt;
+} ec_config_t;
+
+void ec_init(ec_config_t const* const ec_config);
+bool ec_matrix_scan(matrix_row_t current_matrix[]);
+//void ec_dprint_matrix(void);
+uint16_t ec_readkey_raw(uint8_t col, uint8_t row);
+bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt);
diff --git a/keyboards/viktus/styrka_topre/info.json b/keyboards/viktus/styrka_topre/info.json
new file mode 100644
index 000000000000..f6d3560985fa
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/info.json
@@ -0,0 +1,438 @@
+{
+ "manufacturer": "Viktus Design LLC",
+ "keyboard_name": "Viktus Styrka - Topre",
+ "maintainer": "BlindAssassin111",
+ "url": "https://viktus.design",
+ "usb": {
+ "device_version": "1.3.0",
+ "vid": "0x5644",
+ "pid": "0x5354"
+ },
+ "bootloader": "atmel-dfu",
+ "processor": "atmega32u4",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["B5", "B4", "D7", "D6", "F6", "F5", "F4", "C7", "C6", "B6", "F7", "B1", "B2", "B3", "B7", "F1", "F0", "E6"],
+ "rows": ["A7", "A6", "A4", "A5", "A3"]
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "K002", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "K003", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "K004", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "K005", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "K006", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "K007", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "K008", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "K009", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "K00A", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "K00B", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "K00C", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "K00D", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "K00E", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "K00F", "matrix": [0, 15], "x": 15, "y": 0},
+ {"label": "K010", "matrix": [0, 16], "x": 16, "y": 0},
+ {"label": "K011", "matrix": [0, 17], "x": 17, "y": 0},
+ {"label": "K100", "matrix": [1, 0], "x": 18, "y": 0},
+ {"label": "K101", "matrix": [1, 1], "x": 19, "y": 0},
+ {"label": "K102", "matrix": [1, 2], "x": 20, "y": 0},
+ {"label": "K103", "matrix": [1, 3], "x": 21, "y": 0},
+ {"label": "K104", "matrix": [1, 4], "x": 22, "y": 0},
+ {"label": "K105", "matrix": [1, 5], "x": 23, "y": 0},
+ {"label": "K106", "matrix": [1, 6], "x": 24, "y": 0},
+ {"label": "K107", "matrix": [1, 7], "x": 25, "y": 0},
+ {"label": "K108", "matrix": [1, 8], "x": 26, "y": 0},
+ {"label": "K109", "matrix": [1, 9], "x": 27, "y": 0},
+ {"label": "K10A", "matrix": [1, 10], "x": 28, "y": 0},
+ {"label": "K10B", "matrix": [1, 11], "x": 29, "y": 0},
+ {"label": "K10C", "matrix": [1, 12], "x": 30, "y": 0},
+ {"label": "K10D", "matrix": [1, 13], "x": 31, "y": 0},
+ {"label": "K10E", "matrix": [1, 14], "x": 32, "y": 0},
+ {"label": "K110", "matrix": [1, 16], "x": 33, "y": 0},
+ {"label": "K111", "matrix": [1, 17], "x": 34, "y": 0},
+ {"label": "K200", "matrix": [2, 0], "x": 35, "y": 0},
+ {"label": "K201", "matrix": [2, 1], "x": 36, "y": 0},
+ {"label": "K202", "matrix": [2, 2], "x": 37, "y": 0},
+ {"label": "K203", "matrix": [2, 3], "x": 38, "y": 0},
+ {"label": "K204", "matrix": [2, 4], "x": 39, "y": 0},
+ {"label": "K205", "matrix": [2, 5], "x": 40, "y": 0},
+ {"label": "K206", "matrix": [2, 6], "x": 41, "y": 0},
+ {"label": "K207", "matrix": [2, 7], "x": 42, "y": 0},
+ {"label": "K208", "matrix": [2, 8], "x": 43, "y": 0},
+ {"label": "K209", "matrix": [2, 9], "x": 44, "y": 0},
+ {"label": "K20A", "matrix": [2, 10], "x": 45, "y": 0},
+ {"label": "K20B", "matrix": [2, 11], "x": 46, "y": 0},
+ {"label": "K20C", "matrix": [2, 12], "x": 47, "y": 0},
+ {"label": "K20D", "matrix": [2, 13], "x": 48, "y": 0},
+ {"label": "K20F", "matrix": [2, 15], "x": 49, "y": 0},
+ {"label": "K211", "matrix": [2, 17], "x": 50, "y": 0},
+ {"label": "K300", "matrix": [3, 0], "x": 51, "y": 0},
+ {"label": "K301", "matrix": [3, 1], "x": 52, "y": 0},
+ {"label": "K302", "matrix": [3, 2], "x": 53, "y": 0},
+ {"label": "K304", "matrix": [3, 4], "x": 54, "y": 0},
+ {"label": "K305", "matrix": [3, 5], "x": 55, "y": 0},
+ {"label": "K306", "matrix": [3, 6], "x": 56, "y": 0},
+ {"label": "K307", "matrix": [3, 7], "x": 57, "y": 0},
+ {"label": "K308", "matrix": [3, 8], "x": 58, "y": 0},
+ {"label": "K309", "matrix": [3, 9], "x": 59, "y": 0},
+ {"label": "K30A", "matrix": [3, 10], "x": 60, "y": 0},
+ {"label": "K30B", "matrix": [3, 11], "x": 61, "y": 0},
+ {"label": "K30C", "matrix": [3, 12], "x": 62, "y": 0},
+ {"label": "K30D", "matrix": [3, 13], "x": 63, "y": 0},
+ {"label": "K30E", "matrix": [3, 14], "x": 64, "y": 0},
+ {"label": "K310", "matrix": [3, 16], "x": 65, "y": 0},
+ {"label": "K311", "matrix": [3, 17], "x": 66, "y": 0},
+ {"label": "K400", "matrix": [4, 0], "x": 67, "y": 0},
+ {"label": "K401", "matrix": [4, 1], "x": 68, "y": 0},
+ {"label": "K402", "matrix": [4, 2], "x": 69, "y": 0},
+ {"label": "K403", "matrix": [4, 3], "x": 70, "y": 0},
+ {"label": "K404", "matrix": [4, 4], "x": 71, "y": 0},
+ {"label": "K408", "matrix": [4, 8], "x": 72, "y": 0},
+ {"label": "K40C", "matrix": [4, 12], "x": 73, "y": 0},
+ {"label": "K40D", "matrix": [4, 13], "x": 74, "y": 0},
+ {"label": "K40E", "matrix": [4, 14], "x": 75, "y": 0},
+ {"label": "K410", "matrix": [4, 16], "x": 76, "y": 0},
+ {"label": "K411", "matrix": [4, 17], "x": 77, "y": 0}
+ ]
+ },
+ "LAYOUT_2u_6u": {
+ "layout": [
+ {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
+ {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
+ {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
+ {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
+ {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
+ {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
+ {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
+ {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
+ {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
+ {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
+ {"label": "K010", "matrix": [0, 16], "x": 15.25, "y": 0, "w": 2},
+ {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
+ {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
+ {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
+ {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
+ {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
+ {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
+ {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
+ {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
+ {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
+ {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
+ {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
+ {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
+ {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
+ {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
+ {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
+ {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
+ {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
+ {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
+ {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
+ {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
+ {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
+ {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
+ {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
+ {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
+ {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
+ {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
+ {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
+ {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
+ {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
+ {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
+ {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
+ {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
+ {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
+ {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
+ {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
+ {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
+ {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
+ {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
+ {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
+ {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
+ {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
+ {"label": "K403", "matrix": [4, 3], "x": 3.5, "y": 4, "w": 1.25},
+ {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.25},
+ {"label": "K408", "matrix": [4, 8], "x": 6, "y": 4, "w": 6.25},
+ {"label": "K40C", "matrix": [4, 12], "x": 12.25, "y": 4},
+ {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
+ {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
+ {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
+ ]
+ },
+ "LAYOUT_2u_7u": {
+ "layout": [
+ {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
+ {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
+ {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
+ {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
+ {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
+ {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
+ {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
+ {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
+ {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
+ {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
+ {"label": "K010", "matrix": [0, 16], "x": 15.25, "y": 0, "w": 2},
+ {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
+ {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
+ {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
+ {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
+ {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
+ {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
+ {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
+ {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
+ {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
+ {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
+ {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
+ {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
+ {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
+ {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
+ {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
+ {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
+ {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
+ {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
+ {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
+ {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
+ {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
+ {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
+ {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
+ {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
+ {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
+ {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
+ {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
+ {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
+ {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
+ {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
+ {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
+ {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
+ {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
+ {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
+ {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
+ {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
+ {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
+ {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
+ {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
+ {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
+ {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"label": "K403", "matrix": [4, 3], "x": 3.75, "y": 4},
+ {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
+ {"label": "K408", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
+ {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
+ {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
+ {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
+ ]
+ },
+
+ "LAYOUT_split_6u": {
+ "layout": [
+ {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
+ {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
+ {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
+ {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
+ {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
+ {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
+ {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
+ {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
+ {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
+ {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
+ {"label": "K00F", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "K010", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
+ {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
+ {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
+ {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
+ {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
+ {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
+ {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
+ {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
+ {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
+ {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
+ {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
+ {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
+ {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
+ {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
+ {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
+ {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
+ {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
+ {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
+ {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
+ {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
+ {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
+ {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
+ {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
+ {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
+ {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
+ {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
+ {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
+ {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
+ {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
+ {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
+ {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
+ {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
+ {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
+ {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
+ {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
+ {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
+ {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
+ {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
+ {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
+ {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
+ {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
+ {"label": "K403", "matrix": [4, 3], "x": 3.5, "y": 4, "w": 1.25},
+ {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.25},
+ {"label": "K408", "matrix": [4, 8], "x": 6, "y": 4, "w": 6.25},
+ {"label": "K40C", "matrix": [4, 12], "x": 12.25, "y": 4},
+ {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
+ {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
+ {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
+ ]
+ },
+ "LAYOUT_split_7u": {
+ "layout": [
+ {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
+ {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
+ {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
+ {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
+ {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
+ {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
+ {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
+ {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
+ {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
+ {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
+ {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
+ {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
+ {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
+ {"label": "K00F", "matrix": [0, 15], "x": 15.25, "y": 0},
+ {"label": "K010", "matrix": [0, 16], "x": 16.25, "y": 0},
+ {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
+ {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
+ {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
+ {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
+ {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
+ {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
+ {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
+ {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
+ {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
+ {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
+ {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
+ {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
+ {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
+ {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
+ {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
+ {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
+ {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
+ {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
+ {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
+ {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
+ {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
+ {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
+ {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
+ {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
+ {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
+ {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
+ {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
+ {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
+ {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
+ {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
+ {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
+ {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
+ {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
+ {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
+ {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
+ {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
+ {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
+ {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
+ {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
+ {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
+ {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
+ {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
+ {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
+ {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
+ {"label": "K403", "matrix": [4, 3], "x": 3.75, "y": 4},
+ {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
+ {"label": "K408", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
+ {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
+ {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
+ {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
+ {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/viktus/styrka_topre/keymaps/default/keymap.c b/keyboards/viktus/styrka_topre/keymaps/default/keymap.c
new file mode 100644
index 000000000000..5c3f8fa0310f
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_2u_7u(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ )
+};
diff --git a/keyboards/viktus/styrka_topre/keymaps/via/keymap.c b/keyboards/viktus/styrka_topre/keymaps/via/keymap.c
new file mode 100644
index 000000000000..5c3f8fa0310f
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_2u_7u(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ )
+};
diff --git a/keyboards/viktus/styrka_topre/keymaps/via/rules.mk b/keyboards/viktus/styrka_topre/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/viktus/styrka_topre/readme.md b/keyboards/viktus/styrka_topre/readme.md
new file mode 100644
index 000000000000..20c9aedb5cc5
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/readme.md
@@ -0,0 +1,27 @@
+# Styrka - Topre
+
+![Styrka - Topre](https://i.imgur.com/ZQzkL4hh.png)
+
+A topre PCB for the Viktus Styrka
+
+- Keyboard Maintainer: BlindAssassin111
+- Hardware Supported: Styrka Topre PCB
+- Hardware Availability: Viktus Design LLC
+
+Make example for this keyboard (after setting up your build environment):
+
+ make viktus/styrka_topre:default
+
+Flashing example for this keyboard:
+
+ make viktus/styrka_topre:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/viktus/styrka_topre/rules.mk b/keyboards/viktus/styrka_topre/rules.mk
new file mode 100644
index 000000000000..037e26c530c7
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/rules.mk
@@ -0,0 +1,3 @@
+CUSTOM_MATRIX = lite
+QUANTUM_LIB_SRC += analog.c
+SRC += ec.c
diff --git a/keyboards/viktus/styrka_topre/styrka_topre.c b/keyboards/viktus/styrka_topre/styrka_topre.c
new file mode 100644
index 000000000000..96b04090cf6f
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/styrka_topre.c
@@ -0,0 +1,49 @@
+/* Copyright 2023 Viktus Design LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+#include "ec.h"
+#include "matrix.h"
+//#include "debug.h" // needed for debugging
+
+#define RESET_PT 55
+#define ACTUATION_PT 65
+
+// console debugging for pad values
+/*void keyboard_post_init_kb() {
+ debug_enable = true;
+ debug_matrix = true;
+}*/
+
+void matrix_init_custom(void) {
+ ec_config_t ec_config = {.reset_pt = RESET_PT, .actuation_pt = ACTUATION_PT};
+
+ ec_init(&ec_config);
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool updated = ec_matrix_scan(current_matrix);
+
+ // console debugging for pad values
+ /*static int cnt = 0;
+ if (cnt++ == 300) {
+ cnt = 0;
+ ec_dprint_matrix();
+ dprintf("\n");
+ }*/
+
+ return updated;
+}
diff --git a/keyboards/winry/winry25tc/config.h b/keyboards/winry/winry25tc/config.h
index 98c540c876af..e668a8521822 100644
--- a/keyboards/winry/winry25tc/config.h
+++ b/keyboards/winry/winry25tc/config.h
@@ -20,3 +20,5 @@
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
+
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
diff --git a/keyboards/winry/winry25tc/keymaps/lightsout/keymap.c b/keyboards/winry/winry25tc/keymaps/lightsout/keymap.c
new file mode 100644
index 000000000000..f175f36b91e5
--- /dev/null
+++ b/keyboards/winry/winry25tc/keymaps/lightsout/keymap.c
@@ -0,0 +1,136 @@
+/* Copyright 2023 Tom Parker-Shemilt
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+
+// Exact keymap is irrelevant as we're using rows/cols
+// but we need _something_ set so we're using no-ops
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )};
+
+bool tiles[5][5] = {
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+ {false, false, false, false, false},
+};
+
+/* Because snake pattern of leds */
+const uint8_t remap[25] = {
+ 20,21,22,23,24,
+ 19,6,7,8,9,
+ 18,5,0,1,10,
+ 17,4,3,2,11,
+ 16,15,14,13,12,
+};
+
+// clang-format on
+
+bool is_blank(void) {
+ for (uint8_t y = 0; y < 5; y++) {
+ for (uint8_t x = 0; x < 5; x++) {
+ if (tiles[x][y]) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+void do_move(uint8_t x, uint8_t y) {
+ tiles[x][y] ^= true;
+ if (x > 0) {
+ tiles[x - 1][y] ^= true;
+ }
+ if (y > 0) {
+ tiles[x][y - 1] ^= true;
+ }
+ if (x < 4) {
+ tiles[x + 1][y] ^= true;
+ }
+ if (y < 4) {
+ tiles[x][y + 1] ^= true;
+ }
+}
+
+void refresh_leds(void) {
+ for (uint8_t y = 0; y < 5; y++) {
+ for (uint8_t x = 0; x < 5; x++) {
+ uint8_t tile = tiles[x][y];
+ uint8_t index = (y * 5) + x;
+ if (tile) {
+ setrgb(RGB_RED, &led[remap[index]]);
+ } else {
+ setrgb(RGB_WHITE, &led[remap[index]]);
+ }
+ }
+ }
+ rgblight_set();
+}
+
+uint8_t initial_moves = 1;
+
+void start_game(void) {
+ rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
+ srand(timer_read32());
+ while (true) {
+ for (uint8_t i = 0; i < initial_moves; i++) {
+ do_move(rand() % 5, rand() % 5);
+ }
+ if (!is_blank()) {
+ // Catch the "we picked the same location 2*N times" case
+ break;
+ }
+ }
+ refresh_leds();
+}
+
+void keyboard_post_init_user(void) {
+ rgblight_enable_noeeprom();
+ start_game();
+}
+
+bool won = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ if (won) {
+ initial_moves++;
+ won = false;
+ start_game();
+ } else {
+ uint8_t x = record->event.key.col;
+ uint8_t y = record->event.key.row;
+ do_move(x, y);
+ if (is_blank()) {
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL);
+ won = true;
+ }
+ }
+ }
+ refresh_leds();
+ return true;
+}
diff --git a/keyboards/winry/winry25tc/keymaps/lightsout/readme.md b/keyboards/winry/winry25tc/keymaps/lightsout/readme.md
new file mode 100644
index 000000000000..4271bff43fd8
--- /dev/null
+++ b/keyboards/winry/winry25tc/keymaps/lightsout/readme.md
@@ -0,0 +1,3 @@
+# Lights Out game
+
+Implements a "lights out" mode as per https://en.m.wikipedia.org/wiki/Lights_Out_(game) with a single move having been played on start. On completion of the game, the Rainbow Swirl pattern is displayed. If another key is then pressed, the game resets, with the initial number of moves incremented by one.
diff --git a/keyboards/wolf/neely65/info.json b/keyboards/wolf/neely65/info.json
new file mode 100644
index 000000000000..5535036f376a
--- /dev/null
+++ b/keyboards/wolf/neely65/info.json
@@ -0,0 +1,108 @@
+{
+ "manufacturer": "Neely",
+ "keyboard_name": "Neely65",
+ "maintainer": "ToastyStoemp",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B7", "B3", "E6", "F0", "F1", "F4", "F5", "F6", "F7", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4"],
+ "rows": ["D5", "D3", "D2", "D1", "D0"]
+ },
+ "processor": "atmega32u4",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0071",
+ "vid": "0x5453"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2.5, "y": 0 },
+ { "matrix": [0, 3], "x": 3.5, "y": 0 },
+ { "matrix": [0, 4], "x": 4.5, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.5, "y": 0 },
+ { "matrix": [0, 10], "x": 10.5, "y": 0 },
+ { "matrix": [0, 11], "x": 11.5, "y": 0 },
+ { "matrix": [0, 12], "x": 12.5, "y": 0 },
+ { "matrix": [0, 13], "x": 13.5, "y": 0 },
+ { "matrix": [0, 14], "x": 14.5, "y": 0 },
+ { "matrix": [0, 15], "x": 15.5, "y": 0 },
+ { "matrix": [2, 14], "x": 16.5, "y": 0 },
+ { "matrix": [0, 16], "x": 17.5, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "w": 1.5, "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 4, "y": 1 },
+ { "matrix": [1, 4], "x": 5, "y": 1 },
+ { "matrix": [1, 5], "x": 6, "y": 1 },
+ { "matrix": [1, 6], "x": 7, "y": 1 },
+ { "matrix": [1, 7], "x": 8, "y": 1 },
+ { "matrix": [1, 8], "x": 9, "y": 1 },
+ { "matrix": [1, 9], "x": 10, "y": 1 },
+ { "matrix": [1, 10], "x": 11, "y": 1 },
+ { "matrix": [1, 11], "x": 12, "y": 1 },
+ { "matrix": [1, 12], "x": 13, "y": 1 },
+ { "matrix": [1, 13], "x": 14, "y": 1 },
+ { "matrix": [1, 14], "x": 15, "y": 1 },
+ { "matrix": [1, 15], "w": 1.5, "x": 16, "y": 1 },
+ { "matrix": [1, 16], "x": 17.5, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "w": 1.75, "x": 2.5, "y": 2 },
+ { "matrix": [2, 3], "x": 4.25, "y": 2 },
+ { "matrix": [2, 4], "x": 5.25, "y": 2 },
+ { "matrix": [2, 5], "x": 6.25, "y": 2 },
+ { "matrix": [2, 6], "x": 7.25, "y": 2 },
+ { "matrix": [2, 7], "x": 8.25, "y": 2 },
+ { "matrix": [2, 8], "x": 9.25, "y": 2 },
+ { "matrix": [2, 9], "x": 10.25, "y": 2 },
+ { "matrix": [2, 10], "x": 11.25, "y": 2 },
+ { "matrix": [2, 11], "x": 12.25, "y": 2 },
+ { "matrix": [2, 12], "x": 13.25, "y": 2 },
+ { "matrix": [2, 13], "x": 14.25, "y": 2 },
+ { "matrix": [2, 15], "w": 2.25, "x": 15.25, "y": 2 },
+ { "matrix": [2, 16], "x": 17.5, "y": 2 },
+ { "matrix": [3, 0], "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1, "y": 3 },
+ { "matrix": [3, 2], "w": 2.25, "x": 2.5, "y": 3 },
+ { "matrix": [3, 3], "x": 4.75, "y": 3 },
+ { "matrix": [3, 4], "x": 5.75, "y": 3 },
+ { "matrix": [3, 5], "x": 6.75, "y": 3 },
+ { "matrix": [3, 6], "x": 7.75, "y": 3 },
+ { "matrix": [3, 7], "x": 8.75, "y": 3 },
+ { "matrix": [3, 8], "x": 9.75, "y": 3 },
+ { "matrix": [3, 9], "x": 10.75, "y": 3 },
+ { "matrix": [3, 10], "x": 11.75, "y": 3 },
+ { "matrix": [3, 11], "x": 12.75, "y": 3 },
+ { "matrix": [3, 12], "x": 13.75, "y": 3 },
+ { "matrix": [3, 14], "w": 1.75, "x": 14.75, "y": 3 },
+ { "matrix": [3, 15], "x": 16.5, "y": 3 },
+ { "matrix": [3, 16], "x": 17.5, "y": 3 },
+ { "matrix": [4, 0], "x": 0, "y": 4 },
+ { "matrix": [4, 1], "x": 1, "y": 4 },
+ { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "matrix": [4, 4], "w": 1.5, "x": 4.75, "y": 4 },
+ { "matrix": [4, 7], "w": 7, "x": 6.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.5, "x": 13.25, "y": 4 },
+ { "matrix": [4, 14], "x": 15.5, "y": 4 },
+ { "matrix": [4, 15], "x": 16.5, "y": 4 },
+ { "matrix": [4, 16], "x": 17.5, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/wolf/neely65/keymaps/default/keymap.c b/keyboards/wolf/neely65/keymaps/default/keymap.c
new file mode 100644
index 000000000000..3e1350a75e7e
--- /dev/null
+++ b/keyboards/wolf/neely65/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 contact@vwolf.be
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F1, KC_F2,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F3, KC_F4,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_DEL, KC_ENT, KC_PGDN, KC_F5, KC_F6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_END, KC_F7, KC_F8,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_APP, KC_F9, KC_F10
+ ),
+
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_AUDIO_VOL_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_VOL_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_NEXT_TRACK, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_MUTE, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/wolf/neely65/keymaps/via/keymap.c b/keyboards/wolf/neely65/keymaps/via/keymap.c
new file mode 100644
index 000000000000..3e1350a75e7e
--- /dev/null
+++ b/keyboards/wolf/neely65/keymaps/via/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 contact@vwolf.be
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F1, KC_F2,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F3, KC_F4,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_DEL, KC_ENT, KC_PGDN, KC_F5, KC_F6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_END, KC_F7, KC_F8,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_APP, KC_F9, KC_F10
+ ),
+
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_AUDIO_VOL_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_VOL_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_NEXT_TRACK, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_MUTE, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/wolf/neely65/keymaps/via/rules.mk b/keyboards/wolf/neely65/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/wolf/neely65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/wolf/neely65/readme.md b/keyboards/wolf/neely65/readme.md
new file mode 100644
index 000000000000..52865bfb116b
--- /dev/null
+++ b/keyboards/wolf/neely65/readme.md
@@ -0,0 +1,23 @@
+# Neely65
+
+![Neely65](https://i.imgur.com/qu6fxXSh.jpeg)
+
+The following is the QMK Firmware for the Neely65 PCB.
+
+* Keyboard Maintainer: [Wolf](https://github.com/ToastyStoemp)
+* Hardware Supported: Neely65 PCB only
+* Hardware Availability: Private Run
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wolf/neely65:default
+
+Flashing example for this keyboard:
+
+ make wolf/neely65:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader Enter the bootloader in 2 ways:
+* **Bootmagic reset**: Hold down the key ESC key and plug in the keyboard (Top Left most switch)
+* **Physical reset button**: Briefly press the button on the back of the PCB
diff --git a/keyboards/wolf/neely65/rules.mk b/keyboards/wolf/neely65/rules.mk
new file mode 100644
index 000000000000..3437a35bdf1d
--- /dev/null
+++ b/keyboards/wolf/neely65/rules.mk
@@ -0,0 +1,2 @@
+# Processor frequency
+F_CPU = 8000000
diff --git a/keyboards/wolf/silhouette/info.json b/keyboards/wolf/silhouette/info.json
new file mode 100644
index 000000000000..fa52666b2a08
--- /dev/null
+++ b/keyboards/wolf/silhouette/info.json
@@ -0,0 +1,110 @@
+{
+ "manufacturer": "4GT",
+ "keyboard_name": "Silhouette",
+ "maintainer": "ToastyStoemp",
+ "bootloader": "custom",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "GP12"
+ },
+ "matrix_pins": {
+ "cols": ["GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18", "GP11", "GP17", "GP16", "GP7", "GP6", "GP5", "GP4", "GP2", "GP1", "GP0"],
+ "rows": ["GP27", "GP26", "GP25", "GP13", "GP3"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0080",
+ "vid": "0x5453"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "x": 13, "y": 0 },
+ { "matrix": [2, 14], "x": 14, "y": 0 },
+ { "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "matrix": [0, 16], "x": 17.25, "y": 0 },
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "matrix": [1, 14], "x": 15.25, "y": 1 },
+ { "matrix": [1, 15], "x": 16.25, "y": 1 },
+ { "matrix": [1, 16], "x": 17.25, "y": 1 },
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 12], "x": 19.5, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+ { "matrix": [3, 15], "x": 16.25, "y": 3 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 10], "w": 1.25, "x": 10, "y": 4 },
+ { "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4 },
+ { "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 },
+ { "matrix": [4, 14], "x": 15.25, "y": 4 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4 },
+ { "matrix": [4, 16], "x": 17.25, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/wolf/silhouette/keymaps/default/keymap.c b/keyboards/wolf/silhouette/keymaps/default/keymap.c
new file mode 100644
index 000000000000..9a5e5b24d763
--- /dev/null
+++ b/keyboards/wolf/silhouette/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 contact@vwolf.be
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/wolf/silhouette/keymaps/via/keymap.c b/keyboards/wolf/silhouette/keymaps/via/keymap.c
new file mode 100644
index 000000000000..9a5e5b24d763
--- /dev/null
+++ b/keyboards/wolf/silhouette/keymaps/via/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 contact@vwolf.be
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/wolf/silhouette/keymaps/via/rules.mk b/keyboards/wolf/silhouette/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/wolf/silhouette/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/wolf/silhouette/readme.md b/keyboards/wolf/silhouette/readme.md
new file mode 100644
index 000000000000..920de93c4131
--- /dev/null
+++ b/keyboards/wolf/silhouette/readme.md
@@ -0,0 +1,23 @@
+# Silhouette
+
+![Silhouette](https://i.imgur.com/x5Wo7t1h.jpeg)
+
+The following is the QMK Firmware for the Silhouette PCB.
+
+* Keyboard Maintainer: [Wolf](https://github.com/ToastyStoemp)
+* Hardware Supported: Silhouette PCB
+* Hardware Availability: https://beacons.ai/chamchi
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wolf/silhouette:default
+
+Flashing example for this keyboard:
+
+ make wolf/silhouette:default:flash
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader Enter the bootloader in 3 ways:
+* **Bootmagic reset**: Hold down the key ESC key and plug in the keyboard (Top Left most switch)
diff --git a/keyboards/wolf/silhouette/rules.mk b/keyboards/wolf/silhouette/rules.mk
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/keyboards/wolf/ziggurat/info.json b/keyboards/wolf/ziggurat/info.json
new file mode 100644
index 000000000000..2e8d39dacba4
--- /dev/null
+++ b/keyboards/wolf/ziggurat/info.json
@@ -0,0 +1,111 @@
+{
+ "manufacturer": "Laminar",
+ "keyboard_name": "Ziggurat",
+ "maintainer": "ToastyStoemp",
+ "bootloader": "custom",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP27", "GP28", "GP29", "GP0", "GP1", "GP2", "GP3", "GP4", "GP5"],
+ "rows": ["GP11", "GP10", "GP7", "GP6", "GP23", "GP24", "GP25", "GP26", "GP19", "GP18"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0084",
+ "vid": "0x5453"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [1, 0], "x": 1, "y": 0 },
+ { "matrix": [0, 1], "x": 2.25, "y": 0 },
+ { "matrix": [1, 1], "x": 3.25, "y": 0 },
+ { "matrix": [0, 2], "x": 4.25, "y": 0 },
+ { "matrix": [1, 2], "x": 5.25, "y": 0 },
+ { "matrix": [0, 3], "x": 6.25, "y": 0 },
+ { "matrix": [1, 3], "x": 7.25, "y": 0 },
+ { "matrix": [0, 4], "x": 8.25, "y": 0 },
+ { "matrix": [1, 4], "x": 9.25, "y": 0 },
+ { "matrix": [0, 5], "x": 10.25, "y": 0 },
+ { "matrix": [1, 5], "x": 11.25, "y": 0 },
+ { "matrix": [0, 6], "x": 12.25, "y": 0 },
+ { "matrix": [1, 6], "x": 13.25, "y": 0 },
+ { "matrix": [7, 6], "x": 14.25, "y": 0 },
+ { "matrix": [0, 7], "x": 15.25, "y": 0 },
+ { "matrix": [1, 7], "x": 16.25, "y": 0 },
+ { "matrix": [0, 8], "x": 17.25, "y": 0 },
+ { "matrix": [2, 0], "x": 0, "y": 1 },
+ { "matrix": [3, 0], "x": 1, "y": 1 },
+ { "matrix": [2, 1], "w": 1.5, "x": 2.25, "y": 1 },
+ { "matrix": [3, 1], "x": 3.75, "y": 1 },
+ { "matrix": [2, 2], "x": 4.75, "y": 1 },
+ { "matrix": [3, 2], "x": 5.75, "y": 1 },
+ { "matrix": [2, 3], "x": 6.75, "y": 1 },
+ { "matrix": [3, 3], "x": 7.75, "y": 1 },
+ { "matrix": [2, 4], "x": 8.75, "y": 1 },
+ { "matrix": [3, 4], "x": 9.75, "y": 1 },
+ { "matrix": [2, 5], "x": 10.75, "y": 1 },
+ { "matrix": [3, 5], "x": 11.75, "y": 1 },
+ { "matrix": [2, 6], "x": 12.75, "y": 1 },
+ { "matrix": [3, 6], "x": 13.75, "y": 1 },
+ { "matrix": [2, 7], "x": 14.75, "y": 1 },
+ { "matrix": [3, 7], "w": 1.5, "x": 15.75, "y": 1 },
+ { "matrix": [2, 8], "x": 17.25, "y": 1 },
+ { "matrix": [4, 0], "x": 0, "y": 2 },
+ { "matrix": [5, 0], "x": 1, "y": 2 },
+ { "matrix": [4, 1], "w": 1.75, "x": 2.25, "y": 2 },
+ { "matrix": [5, 1], "x": 4, "y": 2 },
+ { "matrix": [4, 2], "x": 5, "y": 2 },
+ { "matrix": [5, 2], "x": 6, "y": 2 },
+ { "matrix": [4, 3], "x": 7, "y": 2 },
+ { "matrix": [5, 3], "x": 8, "y": 2 },
+ { "matrix": [4, 4], "x": 9, "y": 2 },
+ { "matrix": [5, 4], "x": 10, "y": 2 },
+ { "matrix": [4, 5], "x": 11, "y": 2 },
+ { "matrix": [5, 5], "x": 12, "y": 2 },
+ { "matrix": [4, 6], "x": 13, "y": 2 },
+ { "matrix": [5, 6], "x": 14, "y": 2 },
+ { "matrix": [4, 7], "x": 19, "y": 2 },
+ { "matrix": [5, 7], "w": 2.25, "x": 15, "y": 2 },
+ { "matrix": [4, 8], "x": 17.25, "y": 2 },
+ { "matrix": [6, 0], "x": 0, "y": 3 },
+ { "matrix": [7, 0], "x": 1, "y": 3 },
+ { "matrix": [6, 1], "w": 1.25, "x": 2.25, "y": 3 },
+ { "matrix": [7, 1], "x": 3.5, "y": 3 },
+ { "matrix": [9, 2], "x": 4.5, "y": 3 },
+ { "matrix": [6, 2], "x": 5.5, "y": 3 },
+ { "matrix": [7, 2], "x": 6.5, "y": 3 },
+ { "matrix": [6, 3], "x": 7.5, "y": 3 },
+ { "matrix": [7, 3], "x": 8.5, "y": 3 },
+ { "matrix": [6, 4], "x": 9.5, "y": 3 },
+ { "matrix": [7, 4], "x": 10.5, "y": 3 },
+ { "matrix": [6, 5], "x": 11.5, "y": 3 },
+ { "matrix": [7, 5], "x": 12.5, "y": 3 },
+ { "matrix": [6, 6], "x": 13.5, "y": 3 },
+ { "matrix": [6, 7], "w": 1.75, "x": 14.5, "y": 3 },
+ { "matrix": [7, 7], "x": 16.25, "y": 3 },
+ { "matrix": [6, 8], "x": 17.25, "y": 3 },
+ { "matrix": [8, 0], "x": 0, "y": 4 },
+ { "matrix": [9, 0], "x": 1, "y": 4 },
+ { "matrix": [8, 1], "w": 1.5, "x": 2.25, "y": 4 },
+ { "matrix": [9, 1], "x": 3.75, "y": 4 },
+ { "matrix": [8, 2], "w": 1.5, "x": 4.75, "y": 4 },
+ { "matrix": [8, 4], "w": 7, "x": 6.25, "y": 4 },
+ { "matrix": [8, 6], "w": 1.5, "x": 13.25, "y": 4 },
+ { "matrix": [8, 7], "x": 15.25, "y": 4 },
+ { "matrix": [9, 7], "x": 16.25, "y": 4 },
+ { "matrix": [8, 8], "x": 17.25, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/wolf/ziggurat/keymaps/default/keymap.c b/keyboards/wolf/ziggurat/keymaps/default/keymap.c
new file mode 100644
index 000000000000..e26689efa71f
--- /dev/null
+++ b/keyboards/wolf/ziggurat/keymaps/default/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 contact@vwolf.be
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_F1, KC_F6, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
+ KC_F2, KC_F7, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F3, KC_F8, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_F4, KC_F9, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F5, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_F1, KC_F6, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
+ KC_F2, KC_F7, _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ KC_F3, KC_F8, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_F4, KC_F9, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ KC_F5, KC_F10, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/wolf/ziggurat/keymaps/via/keymap.c b/keyboards/wolf/ziggurat/keymaps/via/keymap.c
new file mode 100644
index 000000000000..e26689efa71f
--- /dev/null
+++ b/keyboards/wolf/ziggurat/keymaps/via/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 contact@vwolf.be
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_F1, KC_F6, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
+ KC_F2, KC_F7, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F3, KC_F8, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_F4, KC_F9, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F5, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_F1, KC_F6, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, _______,
+ KC_F2, KC_F7, _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ KC_F3, KC_F8, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_F4, KC_F9, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
+ KC_F5, KC_F10, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/wolf/ziggurat/keymaps/via/rules.mk b/keyboards/wolf/ziggurat/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/wolf/ziggurat/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/wolf/ziggurat/readme.md b/keyboards/wolf/ziggurat/readme.md
new file mode 100644
index 000000000000..d7aa00c077f6
--- /dev/null
+++ b/keyboards/wolf/ziggurat/readme.md
@@ -0,0 +1,23 @@
+# Ziggurat
+
+![Ziggurat](https://i.imgur.com/Vifx6vH.png)
+
+The following is the QMK Firmware for the Ziggurat PCB.
+
+* Keyboard Maintainer: [Wolf](https://github.com/ToastyStoemp)
+* Hardware Supported: Ziggurat PCB
+* Hardware Availability: https://www.eloquentclicks.com/product/ziggurat-plateless-leaf-spring-pcb-mount-65-xt/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wolf/ziggurat:default
+
+Flashing example for this keyboard:
+
+ make wolf/ziggurat:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader Enter the bootloader in 2 ways:
+* **Bootmagic reset**: Hold down the key ESC key and plug in the keyboard (Top Left most switch)
+* **Physical reset button**: Briefly press the button on the back of the PCB
diff --git a/keyboards/wolf/ziggurat/rules.mk b/keyboards/wolf/ziggurat/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/wolf/ziggurat/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/wuque/creek70/info.json b/keyboards/wuque/creek70/info.json
index 5e54c694ed6f..10e43b340dbe 100644
--- a/keyboards/wuque/creek70/info.json
+++ b/keyboards/wuque/creek70/info.json
@@ -32,97 +32,658 @@
"rgblight": {
"max_brightness": 200
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
"layout": [
- {"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": [2, 14], "x": 16.25, "y": 0},
- {"matrix": [0, 15], "x": 17.25, "y": 0},
- {"matrix": [0, 16], "x": 18.25, "y": 0},
-
- {"matrix": [0, 17], "x": 0, "y": 1},
- {"matrix": [1, 0], "x": 1, "y": 1, "w": 1.5},
- {"matrix": [1, 1], "x": 2.5, "y": 1},
- {"matrix": [1, 2], "x": 3.5, "y": 1},
- {"matrix": [1, 3], "x": 4.5, "y": 1},
- {"matrix": [1, 4], "x": 5.5, "y": 1},
- {"matrix": [1, 5], "x": 6.5, "y": 1},
- {"matrix": [1, 6], "x": 7.5, "y": 1},
- {"matrix": [1, 7], "x": 8.5, "y": 1},
- {"matrix": [1, 8], "x": 9.5, "y": 1},
- {"matrix": [1, 9], "x": 10.5, "y": 1},
- {"matrix": [1, 10], "x": 11.5, "y": 1},
- {"matrix": [1, 11], "x": 12.5, "y": 1},
- {"matrix": [1, 12], "x": 13.5, "y": 1},
- {"matrix": [1, 13], "x": 14.5, "y": 1, "w": 1.5},
-
- {"matrix": [1, 14], "x": 16.25, "y": 1},
- {"matrix": [1, 15], "x": 17.25, "y": 1},
- {"matrix": [1, 16], "x": 18.25, "y": 1},
-
- {"matrix": [1, 17], "x": 0, "y": 2},
- {"matrix": [2, 0], "x": 1, "y": 2, "w": 1.75},
- {"matrix": [2, 1], "x": 2.75, "y": 2},
- {"matrix": [2, 2], "x": 3.75, "y": 2},
- {"matrix": [2, 3], "x": 4.75, "y": 2},
- {"matrix": [2, 4], "x": 5.75, "y": 2},
- {"matrix": [2, 5], "x": 6.75, "y": 2},
- {"matrix": [2, 6], "x": 7.75, "y": 2},
- {"matrix": [2, 7], "x": 8.75, "y": 2},
- {"matrix": [2, 8], "x": 9.75, "y": 2},
- {"matrix": [2, 9], "x": 10.75, "y": 2},
- {"matrix": [2, 10], "x": 11.75, "y": 2},
- {"matrix": [2, 11], "x": 12.75, "y": 2},
- {"matrix": [2, 12], "x": 13.75, "y": 2, "w": 2.25},
- {"matrix": [2, 13], "x": 15, "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": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [2, 14], "x": 15.25, "y": 0},
+
+ {"matrix": [0, 15], "x": 16.5, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+
+ {"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": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1, "w": 1.5},
+
+ {"matrix": [1, 15], "x": 16.5, "y": 1},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.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": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3},
- {"matrix": [3, 1], "x": 1, "y": 3},
- {"matrix": [3, 2], "x": 2, "y": 3, "w": 1.25},
- {"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},
- {"matrix": [3, 13], "x": 13.25, "y": 3, "w": 1.75},
- {"matrix": [3, 14], "x": 15, "y": 3},
-
- {"matrix": [3, 16], "x": 17.25, "y": 3},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 1.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 15.25, "y": 3},
+
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4},
- {"matrix": [4, 1], "x": 1, "y": 4, "w": 1.25},
- {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
- {"matrix": [4, 3], "x": 3.5, "y": 4, "w": 1.25},
- {"matrix": [4, 6], "x": 4.75, "y": 4, "w": 2.5},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 5, "y": 4, "w": 2.25},
{"matrix": [4, 7], "x": 7.25, "y": 4, "w": 1.25},
- {"matrix": [4, 8], "x": 8.5, "y": 4, "w": 2.5},
- {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.25},
- {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.25},
- {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.25},
- {"matrix": [4, 14], "x": 14.75, "y": 4, "w": 1.25},
-
- {"matrix": [4, 15], "x": 16.25, "y": 4},
- {"matrix": [4, 16], "x": 17.25, "y": 4},
- {"matrix": [4, 17], "x": 18.25, "y": 4}
+ {"matrix": [4, 8], "x": 8.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 15, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 15], "x": 16.5, "y": 4},
+ {"matrix": [4, 16], "x": 17.5, "y": 4},
+ {"matrix": [4, 17], "x": 18.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ {"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": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0, "w": 2},
+
+ {"matrix": [0, 15], "x": 16.5, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+
+ {"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": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1, "w": 1.5},
+
+ {"matrix": [1, 15], "x": 16.5, "y": 1},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.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": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3, "w": 2.75},
+
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 7], "x": 5, "y": 4, "w": 6.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 15, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 15], "x": 16.5, "y": 4},
+ {"matrix": [4, 16], "x": 17.5, "y": 4},
+ {"matrix": [4, 17], "x": 18.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_split_bs_rshift": {
+ "layout": [
+ {"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": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [2, 14], "x": 15.25, "y": 0},
+
+ {"matrix": [0, 15], "x": 16.5, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+
+ {"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": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1, "w": 1.5},
+
+ {"matrix": [1, 15], "x": 16.5, "y": 1},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.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": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 15.25, "y": 3},
+
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 7], "x": 5, "y": 4, "w": 6.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 15, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 15], "x": 16.5, "y": 4},
+ {"matrix": [4, 16], "x": 17.5, "y": 4},
+ {"matrix": [4, 17], "x": 18.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_split_space": {
+ "layout": [
+ {"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": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0, "w": 2},
+
+ {"matrix": [0, 15], "x": 16.5, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+
+ {"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": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1, "w": 1.5},
+
+ {"matrix": [1, 15], "x": 16.5, "y": 1},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.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": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3, "w": 2.75},
+
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 5, "y": 4, "w": 2.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 8.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 15, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 15], "x": 16.5, "y": 4},
+ {"matrix": [4, 16], "x": 17.5, "y": 4},
+ {"matrix": [4, 17], "x": 18.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_split_space_split_bs_rshift": {
+ "layout": [
+ {"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": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [2, 14], "x": 15.25, "y": 0},
+
+ {"matrix": [0, 15], "x": 16.5, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+
+ {"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": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1, "w": 1.5},
+
+ {"matrix": [1, 15], "x": 16.5, "y": 1},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.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": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 15.25, "y": 3},
+
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 5, "y": 4, "w": 2.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 8.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 15, "y": 4, "w": 1.25},
+
+ {"matrix": [4, 15], "x": 16.5, "y": 4},
+ {"matrix": [4, 16], "x": 17.5, "y": 4},
+ {"matrix": [4, 17], "x": 18.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_tsangan": {
+ "layout": [
+ {"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": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0, "w": 2},
+
+ {"matrix": [0, 15], "x": 16.5, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+
+ {"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": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1, "w": 1.5},
+
+ {"matrix": [1, 15], "x": 16.5, "y": 1},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.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": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3, "w": 2.75},
+
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.75, "y": 4},
+ {"matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 5.25, "y": 4, "w": 7},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.75, "y": 4},
+ {"matrix": [4, 14], "x": 14.75, "y": 4, "w": 1.5},
+
+ {"matrix": [4, 15], "x": 16.5, "y": 4},
+ {"matrix": [4, 16], "x": 17.5, "y": 4},
+ {"matrix": [4, 17], "x": 18.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"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": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [2, 14], "x": 15.25, "y": 0},
+
+ {"matrix": [0, 15], "x": 16.5, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+
+ {"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": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1, "w": 1.5},
+
+ {"matrix": [1, 15], "x": 16.5, "y": 1},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+
+ {"matrix": [2, 1], "x": 1.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": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 8], "x": 8.5, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3},
+ {"matrix": [3, 10], "x": 10.5, "y": 3},
+ {"matrix": [3, 11], "x": 11.5, "y": 3},
+ {"matrix": [3, 12], "x": 12.5, "y": 3},
+ {"matrix": [3, 13], "x": 13.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 15.25, "y": 3},
+
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.75, "y": 4},
+ {"matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 5.25, "y": 4, "w": 7},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.75, "y": 4},
+ {"matrix": [4, 14], "x": 14.75, "y": 4, "w": 1.5},
+
+ {"matrix": [4, 15], "x": 16.5, "y": 4},
+ {"matrix": [4, 16], "x": 17.5, "y": 4},
+ {"matrix": [4, 17], "x": 18.5, "y": 4}
]
}
}
diff --git a/keyboards/wuque/creek70/keymaps/default/keymap.c b/keyboards/wuque/creek70/keymaps/default/keymap.c
index 4a0678525451..167aebeaf93c 100644
--- a/keyboards/wuque/creek70/keymaps/default/keymap.c
+++ b/keyboards/wuque/creek70/keymaps/default/keymap.c
@@ -17,18 +17,18 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] ={
- [0] = LAYOUT(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- 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_DEL, KC_END, KC_PGDN,
- KC_VOLU, 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_VOLD, KC_LSFT, 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_UP,
- KC_PAUSE, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ [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_INS, KC_HOME, KC_PGUP,
+ 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_DEL, KC_END, KC_PGDN,
+ KC_VOLU, 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_VOLD, KC_LSFT, 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_UP,
+ KC_PAUS, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};
diff --git a/keyboards/wuque/creek70/keymaps/via/keymap.c b/keyboards/wuque/creek70/keymaps/via/keymap.c
index 9c0a99a98643..10c12d41ba2d 100644
--- a/keyboards/wuque/creek70/keymaps/via/keymap.c
+++ b/keyboards/wuque/creek70/keymaps/via/keymap.c
@@ -17,32 +17,32 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] ={
- [0] = LAYOUT(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
- 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_DEL, KC_END, KC_PGDN,
- KC_VOLU, 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_VOLD, KC_LSFT, 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_UP,
- KC_PAUSE, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ [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_INS, KC_HOME, KC_PGUP,
+ 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_DEL, KC_END, KC_PGDN,
+ KC_VOLU, 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_VOLD, KC_LSFT, 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_UP,
+ KC_PAUS, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- [1] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
- [2] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
- [3] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};
diff --git a/keyboards/wuque/creek70/matrix_diagram.md b/keyboards/wuque/creek70/matrix_diagram.md
new file mode 100644
index 000000000000..45585b71bbb0
--- /dev/null
+++ b/keyboards/wuque/creek70/matrix_diagram.md
@@ -0,0 +1,27 @@
+Keyboard Name: creek70
+Manufacturer: wuque studio
+```
+ ┌───────┐
+ 2u Backspace │0E │
+ └───────┘
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
+ │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │2E ││0F │0G │0H │
+┌───┐├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
+│10 ││11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E ││1F │1G │1H │
+├───┤├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
+│20 ││21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │
+├───┤├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
+│30 ││31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │ │3G │
+├───┤├────┼───┴┬──┴─┬─┴───┴───┼───┴┬──┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
+│40 ││41 │42 │43 │46 │47 │48 │4B │4C │4D │4E ││4F │4G │4H │
+└───┘└────┴────┴────┴─────────┴────┴─────────┴────┴────┴────┴────┘└───┴───┴───┘
+ ┌────────┐ ┌──────────┐
+ │31 │ 2.25u LShift 2.75u RShift │3D │
+ └────────┘ └──────────┘
+ ┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
+ │41 │42 │43 │47 │4B │4C │4D │4E │ Standard
+ └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ ┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+ │41 │42 │43 │47 │4C │4D │4E │ Tsangan/WKL
+ └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/wuque/nemui65/config.h b/keyboards/wuque/nemui65/config.h
new file mode 100644
index 000000000000..489059d8ab31
--- /dev/null
+++ b/keyboards/wuque/nemui65/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2023 wuque
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
diff --git a/keyboards/wuque/nemui65/info.json b/keyboards/wuque/nemui65/info.json
new file mode 100644
index 000000000000..65cfebf9b40d
--- /dev/null
+++ b/keyboards/wuque/nemui65/info.json
@@ -0,0 +1,128 @@
+{
+ "keyboard_name": "nemui65",
+ "manufacturer": "wuque",
+ "maintainer": "spbgzh",
+ "usb": {
+ "vid": "0x807C",
+ "pid": "0x0005",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["C7", "D5", "B5", "B4", "D7", "D6", "D4", "D3", "D2", "D1", "D0", "B7", "B2", "B3", "F7"],
+ "rows": ["F1", "F0", "C6", "B6", "F5"]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rbglight": true
+ },
+ "diode_direction": "COL2ROW",
+ "indicators": {
+ "caps_lock": "F6",
+ "on_state": 0
+ },
+ "ws2812": {
+ "pin": "F4"
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "max_brightness": 200,
+ "led_count": 1,
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "sleep": true
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/wuque/nemui65/keymaps/default/keymap.c b/keyboards/wuque/nemui65/keymaps/default/keymap.c
new file mode 100644
index 000000000000..24801db75ebc
--- /dev/null
+++ b/keyboards/wuque/nemui65/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 wuque
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/wuque/nemui65/keymaps/via/keymap.c b/keyboards/wuque/nemui65/keymaps/via/keymap.c
new file mode 100644
index 000000000000..da09d31c6198
--- /dev/null
+++ b/keyboards/wuque/nemui65/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 wuque
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/wuque/nemui65/keymaps/via/rules.mk b/keyboards/wuque/nemui65/keymaps/via/rules.mk
new file mode 100644
index 000000000000..36b7ba9cbc98
--- /dev/null
+++ b/keyboards/wuque/nemui65/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/wuque/nemui65/readme.md b/keyboards/wuque/nemui65/readme.md
new file mode 100644
index 000000000000..4225139ab028
--- /dev/null
+++ b/keyboards/wuque/nemui65/readme.md
@@ -0,0 +1,27 @@
+# Nmui65
+
+More Info at [Nemui65](https://mechsandco.com/products/nemui65)
+
+
+* Keyboard Maintainer: [spbgzh](https://github.com/spbgzh)
+* Hardware Supported: Nemui65
+* Hardware Availability: [Nemui65](https://mechsandco.com/products/nemui65)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wuque/nemui65:default
+
+Flashing example for this keyboard:
+
+ make wuque/nemui65:default:flash
+
+## Bootloader
+
+Enter the bootloader using one of the following methods:
+
+* Tap the Reset switch mounted on the PCB
+* In the case of the default keymap, use the key combination Fn + Delete
+* Hold the Esc key while connecting the USB cable (also erases persistent settings)
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/wuque/nemui65/rules.mk b/keyboards/wuque/nemui65/rules.mk
new file mode 100644
index 000000000000..6e7633bfe015
--- /dev/null
+++ b/keyboards/wuque/nemui65/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/xelus/rs60/rev1/info.json b/keyboards/xelus/rs60/rev1/info.json
index 9b8f0410fabd..69f8d6e5b0e3 100644
--- a/keyboards/xelus/rs60/rev1/info.json
+++ b/keyboards/xelus/rs60/rev1/info.json
@@ -9,7 +9,8 @@
},
"diode_direction": "COL2ROW",
"indicators": {
- "caps_lock": "B0"
+ "caps_lock": "B0",
+ "on_state": 0
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
diff --git a/keyboards/xelus/rs60/rev2_1/info.json b/keyboards/xelus/rs60/rev2_1/info.json
index b8cda1a22a7b..118a671547c8 100644
--- a/keyboards/xelus/rs60/rev2_1/info.json
+++ b/keyboards/xelus/rs60/rev2_1/info.json
@@ -9,7 +9,8 @@
},
"diode_direction": "COL2ROW",
"indicators": {
- "caps_lock": "A1"
+ "caps_lock": "A1",
+ "on_state": 0
},
"processor": "STM32L412",
"bootloader": "stm32-dfu",
diff --git a/keyboards/xiudi/xd75/keymaps/dothtm75/config.h b/keyboards/xiudi/xd75/keymaps/dothtm75/config.h
new file mode 100644
index 000000000000..155d4562d53c
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/dothtm75/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2017 Mike Cramer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HOLD_ON_OTHER_KEY_PRESS
+
+#define MIDI_ADVANCED
diff --git a/keyboards/xiudi/xd75/keymaps/dothtm75/keymap.c b/keyboards/xiudi/xd75/keymaps/dothtm75/keymap.c
new file mode 100644
index 000000000000..1767915dace7
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/dothtm75/keymap.c
@@ -0,0 +1,174 @@
+/* Copyright 2017 Wunder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_5x15(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_MINS), LGUI(KC_EQL), KC_6, KC_7, KC_8, KC_9, KC_0, LGUI(KC_0), KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, LGUI(KC_LCBR), LGUI(KC_RCBR), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSLS,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, LGUI(KC_LBRC), LGUI(KC_RBRC), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, LGUI(KC_QUES), LGUI(KC_SLSH), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT,
+ MO(2), KC_LCTL, KC_LALT, KC_LGUI, LT(1,KC_SPC), KC_SPC, LGUI(KC_SPC), KC_NO, KC_SPC, LT(1,KC_SPC), KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ortho_5x15(
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_MINS, KC_EQL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LGUI(KC_1), KC_DEL,
+ KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_LCBR, KC_RCBR, KC_NO, KC_LCBR, KC_RCBR, KC_DQUO, KC_QUOT, KC_NO, KC_SLSH,
+ KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_LBRC, KC_RBRC, KC_NO, KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_NO, KC_PENT,
+ KC_TRNS, KC_UNDS, KC_PLUS, KC_MINS, KC_EQL, KC_NO, KC_QUES, KC_SLSH, KC_NO, KC_QUES, KC_SLSH, KC_QUES, KC_SLSH, LCAG(KC_UP), KC_TRNS,
+ MO(15), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LGUI(KC_SPC), HYPR(KC_J), KC_TRNS, LGUI(KC_SPC), KC_TRNS, KC_TRNS, KC_TRNS, LGUI(KC_LBRC), LCAG(KC_DOWN), LGUI(KC_RBRC)
+ ),
+
+ [2] = LAYOUT_ortho_5x15(
+ DB_TOGG, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO, KC_DEL,
+ RGB_TOG, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_NO, KC_NO, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_NO, KC_NO,
+ HYPR(KC_H), KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(15), HYPR(KC_K), KC_NO, KC_NO, KC_TRNS, MO(15), KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+
+ ),
+
+ // Musical keys
+
+ [3] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Vertical Typing 60
+ KC_ESC, MI_C, MI_E, MI_Gs, MI_C1, MI_E1, KC_NO, KC_NO, MI_Gs1, MI_C2, MI_E2, MI_Gs2, MI_C3, MI_E3, MI_TR0,
+ KC_TAB, MI_Cs, MI_F, MI_A, MI_Cs1, MI_F1, KC_NO, KC_NO, MI_A1, MI_Cs2, MI_F2, MI_A2, MI_Cs3, MI_F3, MI_TRSU,
+ KC_SPC, MI_D, MI_Fs, MI_As, MI_D1, MI_Fs1, KC_NO, KC_NO, MI_As1, MI_D2, MI_Fs2, MI_As2, MI_D3, MI_Fs3, MI_TRSD,
+ MI_SUST, MI_Ds, MI_G, MI_B, MI_Ds1, MI_G1, KC_NO, KC_NO, MI_B1, MI_Ds2, MI_G2, MI_B2, MI_Ds3, MI_G3, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [4] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Vertical Typing 60
+ KC_ESC, MI_C, MI_G, MI_C1, MI_G1, MI_C2, KC_NO, KC_NO, MI_G2, MI_C3, MI_G3, MI_C4, MI_G4, MI_C5, MI_TR0,
+ KC_TAB, MI_D, MI_Gs, MI_D1, MI_Gs1, MI_D2, KC_NO, KC_NO, MI_Gs2, MI_D3, MI_Gs3, MI_D4, MI_Gs4, MI_D5, MI_TRSU,
+ KC_SPC, MI_Ds, MI_As, MI_Ds1, MI_As1, MI_Ds2, KC_NO, KC_NO, MI_As2, MI_Ds3, MI_As3, MI_Ds4, MI_As4, MI_Ds5, MI_TRSD,
+ MI_SUST, MI_F, MI_B, MI_F1, MI_B1, MI_F2, KC_NO, KC_NO, MI_B2, MI_F3, MI_B3, MI_F4, MI_B4, MI_F5, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [5] = LAYOUT_ortho_5x15(
+ // Major scale Vertical Typing 60
+ KC_ESC, MI_C, MI_G, MI_D1, MI_A1, MI_E2, KC_NO, KC_NO, MI_B2, MI_F3, MI_C4, MI_G4, MI_D5, MI_A5, MI_TR0,
+ KC_TAB, MI_D, MI_A, MI_E1, MI_B1, MI_F2, KC_NO, KC_NO, MI_C3, MI_G3, MI_D4, MI_A4, MI_E5, MI_B5, MI_TRSU,
+ KC_SPC, MI_E, MI_B, MI_F1, MI_C2, MI_G2, KC_NO, KC_NO, MI_D3, MI_A3, MI_E4, MI_B4, MI_F5, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_C1, MI_G1, MI_D2, MI_A2, KC_NO, KC_NO, MI_E3, MI_B3, MI_F4, MI_C5, MI_G5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [6] = LAYOUT_ortho_5x15(
+ // Black Keys Vertical Typing 60
+ KC_ESC, MI_C, MI_A, MI_G1, MI_F2, MI_D3, KC_NO, KC_NO, MI_C4, MI_A4, MI_G5, KC_NO, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_C1, MI_A1, MI_G2, MI_F3, KC_NO, KC_NO, MI_D4, MI_C5, MI_A5, KC_NO, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_F, MI_D1, MI_C2, MI_A2, MI_G3, KC_NO, KC_NO, MI_F4, MI_D5, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_G, MI_F1, MI_D2, MI_C3, MI_A3, KC_NO, KC_NO, MI_G4, MI_F5, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [7] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Vertical
+ KC_ESC, MI_C, MI_E, MI_Gs, MI_C1, MI_E1, MI_Gs1, MI_C2, MI_E2, MI_Gs2, MI_C3, MI_E3, MI_Gs3, KC_NO, MI_TR0,
+ KC_TAB, MI_Cs, MI_F, MI_A, MI_Cs1, MI_F1, MI_A1, MI_Cs2, MI_F2, MI_A2, MI_Cs3, MI_F3, MI_A3, KC_NO, MI_TRSU,
+ KC_SPC, MI_D, MI_Fs, MI_As, MI_D1, MI_Fs1, MI_As1, MI_D2, MI_Fs2, MI_As2, MI_D3, MI_Fs3, MI_As3, KC_NO, MI_TRSD,
+ MI_SUST, MI_Ds, MI_G, MI_B, MI_Ds1, MI_G1, MI_B1, MI_Ds2, MI_G2, MI_B2, MI_Ds3, MI_G3, MI_B3, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [8] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Vertical
+ KC_ESC, MI_C, MI_G, MI_C1, MI_G1, MI_C2, MI_G2, MI_C3, MI_G3, MI_C4, MI_G4, MI_C5, MI_G5, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_Gs, MI_D1, MI_Gs1, MI_D2, MI_Gs2, MI_D3, MI_Gs3, MI_D4, MI_Gs4, MI_D5, MI_Gs5, KC_NO, MI_TRSU,
+ KC_SPC, MI_Ds, MI_As, MI_Ds1, MI_As1, MI_Ds2, MI_As2, MI_Ds3, MI_As3, MI_Ds4, MI_As4, MI_Ds5, MI_As5, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_B, MI_F1, MI_B1, MI_F2, MI_B2, MI_F3, MI_B3, MI_F4, MI_B4, MI_F5, MI_B5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [9] = LAYOUT_ortho_5x15(
+ // Major scale Vertical
+ KC_ESC, MI_C, MI_G, MI_D1, MI_A1, MI_E2, MI_B2, MI_F3, MI_C4, MI_G4, MI_D5, MI_A5, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_A, MI_E1, MI_B1, MI_F2, MI_C3, MI_G3, MI_D4, MI_A4, MI_E5, MI_B5, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_E, MI_B, MI_F1, MI_C2, MI_G2, MI_D3, MI_A3, MI_E4, MI_B4, MI_F5, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_C1, MI_G1, MI_D2, MI_A2, MI_E3, MI_B3, MI_F4, MI_C5, MI_G5, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [10] = LAYOUT_ortho_5x15(
+ // Black Keys Vertical
+ KC_ESC, MI_C, MI_A, MI_G1, MI_F2, MI_D3, MI_C4, MI_A4, MI_G5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_C1, MI_A1, MI_G2, MI_F3, MI_D4, MI_C5, MI_A5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_F, MI_D1, MI_C2, MI_A2, MI_G3, MI_F4, MI_D5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_G, MI_F1, MI_D2, MI_C3, MI_A3, MI_G4, MI_F5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [11] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Horizontal
+ KC_ESC, MI_C, MI_Cs, MI_D, MI_Ds, MI_E, MI_F, MI_Fs, MI_G, MI_Gs, MI_A, MI_As, MI_B, KC_NO, MI_TR0,
+ KC_TAB, MI_C1, MI_Cs1, MI_D1, MI_Ds1, MI_E1, MI_F1, MI_Fs1, MI_G1, MI_Gs1, MI_A1, MI_As1, MI_B1, KC_NO, MI_TRSU,
+ KC_SPC, MI_C2, MI_Cs2, MI_D2, MI_Ds2, MI_E2, MI_F2, MI_Fs2, MI_G2, MI_Gs2, MI_A2, MI_As2, MI_B2, KC_NO, MI_TRSD,
+ MI_SUST, MI_C3, MI_Cs3, MI_D3, MI_Ds3, MI_E3, MI_F3, MI_Fs3, MI_G3, MI_Gs3, MI_A3, MI_As3, MI_B3, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+ [12] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Horizontal
+ KC_ESC, MI_C, MI_D, MI_Ds, MI_F, MI_G, MI_Gs, MI_As, MI_B, MI_C1, MI_D1, MI_Ds1, MI_F1, KC_NO, MI_TR0,
+ KC_TAB, MI_G1, MI_Gs1, MI_As1, MI_B1, MI_C2, MI_D2, MI_Ds2, MI_F2, MI_G2, MI_Gs2, MI_As2, MI_B2, KC_NO, MI_TRSU,
+ KC_SPC, MI_C3, MI_D3, MI_Ds3, MI_F3, MI_G3, MI_Gs3, MI_As3, MI_B3, MI_C4, MI_D4, MI_Ds4, MI_F4, KC_NO, MI_TRSD,
+ MI_SUST, MI_G4, MI_Gs4, MI_As4, MI_B4, MI_C5, MI_D5, MI_Ds5, MI_F5, MI_G5, MI_Gs5, MI_As5, MI_B5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [13] = LAYOUT_ortho_5x15(
+ // Major scale Horizontal
+ KC_ESC, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C1, MI_D1, MI_E1, MI_F1, MI_G1, KC_NO, MI_TR0,
+ KC_TAB, MI_A1, MI_B1, MI_C2, MI_D2, MI_E2, MI_F2, MI_G2, MI_A2, MI_B2, MI_C3, MI_D3, MI_E3, KC_NO, MI_TRSU,
+ KC_SPC, MI_F3, MI_G3, MI_A3, MI_B3, MI_C4, MI_D4, MI_E4, MI_F4, MI_G4, MI_A4, MI_B4, MI_C5, KC_NO, MI_TRSD,
+ MI_SUST, MI_D5, MI_E5, MI_F5, MI_G5, MI_A5, MI_B5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+ [14] = LAYOUT_ortho_5x15(
+ // Black Keys Horizontal
+ KC_ESC, MI_C, MI_D, MI_F, MI_G, MI_A, MI_C1, MI_D1, MI_F1, MI_G1, MI_A1, MI_C2, MI_D2, KC_NO, MI_TR0,
+ KC_TAB, MI_F2, MI_G2, MI_A2, MI_C3, MI_D3, MI_F3, MI_G3, MI_A3, MI_C4, MI_D4, MI_F4, MI_G4, KC_NO, MI_TRSU,
+ KC_SPC, MI_A4, MI_C, MI_D, MI_F, MI_G, MI_A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [15] = LAYOUT_ortho_5x15(
+ // Settings
+ DB_TOGG, MI_CH1, MI_CH2, MI_CH3, MI_CH4, MI_CH5, KC_NO, KC_NO, MI_CH6, MI_CH7, MI_CH8, AU_TOGG, KC_NO, KC_NO, QK_BOOT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, DF(3), DF(4), DF(5), DF(6), KC_NO, KC_NO, KC_NO,
+ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_NO, KC_NO, KC_NO, DF(11), DF(12), DF(13), DF(14), KC_NO, KC_NO, DB_TOGG,
+ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_NO, KC_NO, KC_NO, DF(7), DF(8), DF(9), DF(10), KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS, DF(0), DF(0), DF(0), DF(0), KC_TRNS, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO
+ )
+};
+
diff --git a/keyboards/xiudi/xd75/keymaps/dothtm75/rules.mk b/keyboards/xiudi/xd75/keymaps/dothtm75/rules.mk
new file mode 100644
index 000000000000..56c4130708ca
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/dothtm75/rules.mk
@@ -0,0 +1,2 @@
+
+MIDI_ENABLE = yes
diff --git a/keyboards/xiudi/xd75/keymaps/zigotica/config.h b/keyboards/xiudi/xd75/keymaps/zigotica/config.h
new file mode 100644
index 000000000000..23e276cf6efd
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/zigotica/config.h
@@ -0,0 +1,27 @@
+/* Copyright 2023 Sergi Meseguer
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// these should work better for homerow modifiers
+#define TAPPING_TERM 350
+#define PERMISSIVE_HOLD
+#define QUICK_TAP_TERM 0
+
+// needed to get same layers as split keyboards
+// see users/zigotica/zigotica.h
+#define ORTHOLINEAR_KEYBOARD
+
diff --git a/keyboards/xiudi/xd75/keymaps/zigotica/keymap.c b/keyboards/xiudi/xd75/keymaps/zigotica/keymap.c
new file mode 100644
index 000000000000..4133b57e720a
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/zigotica/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2023 Sergi Meseguer
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "zigotica.h"
+
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_wrapper(
+ KC_ESC, ____NUM15, _BLANK_3, ____NUM60, KC_DEL,
+ KC_TAB, _STENAI_L1, _BLANK_3, _STENAI_R1, _______,
+ KC_EQL, _STENAI_L2, _BLANK_3, _STENAI_R2, KC_ENT,
+ KC_LSFT, _STENAI_L3, ____TARRS, _STENAI_R3, KC_RSFT,
+ ____LORTH, _STENAI_LT, ____BARRS, _STENAI_RT, ____RORTH
+ ),
+
+ [_NUM] = LAYOUT_wrapper(
+ QK_MAKE, _BLANK_ROW, _BLANK_3, _BLANK_ROW, _______,
+ _______, ____NUM_L1, _BLANK_3, ____NUM_R1, _______,
+ _______, ____NUM_L2, _BLANK_3, ____NUM_R2, _______,
+ _______, ____NUM_L3, _BLANK_3, ____NUM_R3, _______,
+ _BLANK_4, ____NUM_LT, _BLANK_3, ____NUM_RT, _BLANK_4
+ ),
+
+ [_NAV] = LAYOUT_wrapper(
+ QK_MAKE, _BLANK_ROW, _BLANK_3, _BLANK_ROW, _______,
+ _______, ____NAV_L1, _BLANK_3, ____NAV_R1, _______,
+ _______, ____NAV_L2, _BLANK_3, ____NAV_R2, _______,
+ _______, ____NAV_L3, _BLANK_3, ____NAV_R3, _______,
+ _BLANK_4, ____NAV_LT, _BLANK_3, ____NAV_RT, _BLANK_4
+ ),
+
+ [_SYM] = LAYOUT_wrapper(
+ QK_MAKE, _BLANK_ROW, _BLANK_3, _BLANK_ROW, _______,
+ _______, ____SYM_L1, _BLANK_3, ____SYM_R1, _______,
+ _______, ____SYM_L2, _BLANK_3, ____SYM_R2, _______,
+ _______, ____SYM_L3, _BLANK_3, ____SYM_R3, _______,
+ _BLANK_4, ____SYM_LT, _BLANK_3, ____SYM_RT, _BLANK_4
+ ),
+
+ [_FN] = LAYOUT_wrapper(
+ QK_MAKE, ____FN_15, _BLANK_3, ____FN_60, _______,
+ _______, ____FN_L1, _BLANK_3, ____FN_R1, _______,
+ _______, ____FN_L2, _BLANK_3, ____FN_R2, _______,
+ _______, ____FN_L3, _BLANK_3, ____FN_R3, _______,
+ _BLANK_4, ____FN_LT, _BLANK_3, ____FN_RT, _BLANK_4
+ ),
+};
+
+
diff --git a/keyboards/xiudi/xd75/keymaps/zigotica/rules.mk b/keyboards/xiudi/xd75/keymaps/zigotica/rules.mk
new file mode 100644
index 000000000000..c41232e8f94f
--- /dev/null
+++ b/keyboards/xiudi/xd75/keymaps/zigotica/rules.mk
@@ -0,0 +1,6 @@
+OLED_SUPPORTED = no
+ENCODER_SUPPORTED = no
+
+MOUSEKEY_ENABLE = yes
+COMBO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/yandrstudio/transition80/info.json b/keyboards/yandrstudio/transition80/info.json
index baac6f4f9bd3..7f9364a18fde 100644
--- a/keyboards/yandrstudio/transition80/info.json
+++ b/keyboards/yandrstudio/transition80/info.json
@@ -25,22 +25,29 @@
"scroll_lock": "B14",
"on_state": 1
},
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
+ "community_layouts": [
+ "tkl_ansi",
+ "tkl_ansi_tsangan"
+ ],
"layouts": {
- "LAYOUT": {
+ "LAYOUT_all": {
"layout": [
{"label": "Esc", "x": 0, "y": 0, "matrix": [0, 0]},
- {"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, 10]},
- {"label": "F10", "x": 10.75, "y": 0, "matrix": [0, 11]},
- {"label": "F11", "x": 11.75, "y": 0, "matrix": [0, 12]},
- {"label": "F12", "x": 12.75, "y": 0, "matrix": [0, 13]},
+ {"label": "F1", "x": 2, "y": 0, "matrix": [0, 2]},
+ {"label": "F2", "x": 3, "y": 0, "matrix": [0, 3]},
+ {"label": "F3", "x": 4, "y": 0, "matrix": [0, 4]},
+ {"label": "F4", "x": 5, "y": 0, "matrix": [0, 5]},
+ {"label": "F5", "x": 6.5, "y": 0, "matrix": [0, 6]},
+ {"label": "F6", "x": 7.5, "y": 0, "matrix": [0, 7]},
+ {"label": "F7", "x": 8.5, "y": 0, "matrix": [0, 8]},
+ {"label": "F8", "x": 9.5, "y": 0, "matrix": [0, 9]},
+ {"label": "F9", "x": 11, "y": 0, "matrix": [0, 10]},
+ {"label": "F10", "x": 12, "y": 0, "matrix": [0, 11]},
+ {"label": "F11", "x": 13, "y": 0, "matrix": [0, 12]},
+ {"label": "F12", "x": 14, "y": 0, "matrix": [0, 13]},
{"label": "PrtSc", "x": 15.25, "y": 0, "matrix": [0, 14]},
{"label": "Scroll Lock", "x": 16.25, "y": 0, "matrix": [0, 15]},
{"label": "Pause", "x": 17.25, "y": 0, "matrix": [0, 16]},
@@ -58,9 +65,7 @@
{"label": ")", "x": 10, "y": 1.25, "matrix": [1, 10]},
{"label": "_", "x": 11, "y": 1.25, "matrix": [1, 11]},
{"label": "+", "x": 12, "y": 1.25, "matrix": [1, 12]},
- {"label": "Backspace", "x": 13, "y": 1.25, "w": 2, "matrix": [1, 13]},
- {"label": "|", "x": 13, "y": 1.5, "matrix": [3, 13]},
- {"label": "Backspace", "x": 14, "y": 1.5, "matrix": [3, 14]},
+ {"label": "Backspace", "x": 13, "y": 1.25, "w": 2, "h": 0.5, "matrix": [1, 13]},
{"label": "Insert", "x": 15.25, "y": 1.25, "matrix": [1, 14]},
{"label": "Home", "x": 16.25, "y": 1.25, "matrix": [1, 15]},
{"label": "PgUp", "x": 17.25, "y": 1.25, "matrix": [1, 16]},
@@ -96,6 +101,8 @@
{"label": ":", "x": 10.75, "y": 3.25, "matrix": [3, 10]},
{"label": "\"", "x": 11.75, "y": 3.25, "matrix": [3, 11]},
{"label": "Enter", "x": 12.75, "y": 3.25, "w": 2.25, "matrix": [3, 12]},
+ {"label": "|", "x": 13, "y": 1.75, "h": 0.5, "matrix": [3, 13]},
+ {"label": "Backspace", "x": 14, "y": 1.75, "h": 0.5, "matrix": [3, 14]},
{"label": "Shift", "x": 0, "y": 4.25, "w": 2.25, "matrix": [4, 0]},
{"label": "Z", "x": 2.25, "y": 4.25, "matrix": [4, 2]},
@@ -111,17 +118,401 @@
{"label": "Shift", "x": 12.25, "y": 4.25, "w": 2.75, "matrix": [4, 13]},
{"label": "Up", "x": 16.25, "y": 4.25, "matrix": [4, 14]},
- {"label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25, "matrix": [5, 0]},
- {"label": "Win", "x": 1.25, "y": 5.5, "w": 1.25, "matrix": [5, 1]},
- {"label": "Alt", "x": 2.5, "y": 5.5, "w": 1.25, "matrix": [5, 2]},
- {"label": "Space", "x": 3.75, "y": 5.5, "w": 6.25, "matrix": [5, 6]},
- {"label": "Menu", "x": 10, "y": 5.5, "w": 1.25, "matrix": [5, 10]},
- {"label": "Alt", "x": 11.25, "y": 5.5, "w": 1.25, "matrix": [5, 11]},
- {"label": "Fn", "x": 12.5, "y": 5.5, "w": 1.25, "matrix": [5, 12]},
- {"label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25, "matrix": [5, 13]},
- {"label": "Left", "x": 15.25, "y": 5.5, "matrix": [5, 14]},
- {"label": "Down", "x": 16.25, "y": 5.5, "matrix": [5, 15]},
- {"label": "Right", "x": 17.25, "y": 5.5, "matrix": [5, 16]}
+ {"label": "Ctrl", "x": 0, "y": 5.25, "w": 1.25, "matrix": [5, 0]},
+ {"label": "Win", "x": 1.25, "y": 5.25, "w": 1.25, "matrix": [5, 1]},
+ {"label": "Alt", "x": 2.5, "y": 5.25, "w": 1.25, "matrix": [5, 2]},
+ {"label": "Space", "x": 3.75, "y": 5.25, "w": 6.25, "matrix": [5, 6]},
+ {"label": "Menu", "x": 10, "y": 5.25, "w": 1.25, "matrix": [5, 10]},
+ {"label": "Alt", "x": 11.25, "y": 5.25, "w": 1.25, "matrix": [5, 11]},
+ {"label": "Fn", "x": 12.5, "y": 5.25, "w": 1.25, "matrix": [5, 12]},
+ {"label": "Ctrl", "x": 13.75, "y": 5.25, "w": 1.25, "matrix": [5, 13]},
+ {"label": "Left", "x": 15.25, "y": 5.25, "matrix": [5, 14]},
+ {"label": "Down", "x": 16.25, "y": 5.25, "matrix": [5, 15]},
+ {"label": "Right", "x": 17.25, "y": 5.25, "matrix": [5, 16]}
+ ]
+ },
+ "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, 6], "x": 6.5, "y": 0},
+ {"label": "F6", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F7", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F8", "matrix": [0, 9], "x": 9.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 11, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 12, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 13, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 14, "y": 0},
+ {"label": "PrtSc", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "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": "Insert", "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": "Delete", "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, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"label": "Up", "matrix": [4, 14], "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, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Menu", "matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Fn", "matrix": [5, 12], "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}
+ ]
+ },
+ "LAYOUT_tkl_ansi_split_bs": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "F2", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "F3", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "F4", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "F5", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F6", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F7", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F8", "matrix": [0, 9], "x": 9.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 11, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 12, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 13, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 14, "y": 0},
+ {"label": "PrtSc", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "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": "|", "matrix": [3, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+ {"label": "Insert", "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": "Delete", "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, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"label": "Up", "matrix": [4, 14], "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, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Menu", "matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"label": "Fn", "matrix": [5, 12], "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}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "F2", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "F3", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "F4", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "F5", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F6", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F7", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F8", "matrix": [0, 9], "x": 9.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 11, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 12, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 13, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 14, "y": 0},
+ {"label": "PrtSc", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "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": "Insert", "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": "Delete", "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, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"label": "Up", "matrix": [4, 14], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "Win", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "Fn", "matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"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}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_split_bs": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "F2", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "F3", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "F4", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "F5", "matrix": [0, 6], "x": 6.5, "y": 0},
+ {"label": "F6", "matrix": [0, 7], "x": 7.5, "y": 0},
+ {"label": "F7", "matrix": [0, 8], "x": 8.5, "y": 0},
+ {"label": "F8", "matrix": [0, 9], "x": 9.5, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 11, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 12, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 13, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 14, "y": 0},
+ {"label": "PrtSc", "matrix": [0, 14], "x": 15.25, "y": 0},
+ {"label": "Scroll Lock", "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": "|", "matrix": [3, 13], "x": 13, "y": 1.25},
+ {"label": "Backspace", "matrix": [3, 14], "x": 14, "y": 1.25},
+ {"label": "Insert", "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": "Delete", "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, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"label": "Up", "matrix": [4, 14], "x": 16.25, "y": 4.25},
+
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "Win", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "Fn", "matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"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/yandrstudio/transition80/keymaps/default/keymap.c b/keyboards/yandrstudio/transition80/keymaps/default/keymap.c
index d9f51ce6f86f..8d3ab5e327c3 100644
--- a/keyboards/yandrstudio/transition80/keymaps/default/keymap.c
+++ b/keyboards/yandrstudio/transition80/keymaps/default/keymap.c
@@ -4,7 +4,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
diff --git a/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi/keymap.c b/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi/keymap.c
new file mode 100644
index 000000000000..f8430dd3a526
--- /dev/null
+++ b/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2022 Y&R-Biu (@jiaxin96)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi_split_bs/keymap.c b/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi_split_bs/keymap.c
new file mode 100644
index 000000000000..d4125b6cee46
--- /dev/null
+++ b/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi_split_bs/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2022 Y&R-Biu (@jiaxin96)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi_split_bs(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_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, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi_split_bs(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi_tsangan/keymap.c b/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi_tsangan/keymap.c
new file mode 100644
index 000000000000..6543ab1e548b
--- /dev/null
+++ b/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi_tsangan/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2022 Y&R-Biu (@jiaxin96)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi_tsangan(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi_tsangan(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi_tsangan_split_bs/keymap.c b/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi_tsangan_split_bs/keymap.c
new file mode 100644
index 000000000000..4392795b14e5
--- /dev/null
+++ b/keyboards/yandrstudio/transition80/keymaps/default_tkl_ansi_tsangan_split_bs/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2022 Y&R-Biu (@jiaxin96)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi_tsangan_split_bs(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_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, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_ansi_tsangan_split_bs(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/yandrstudio/transition80/keymaps/via/keymap.c b/keyboards/yandrstudio/transition80/keymaps/via/keymap.c
index 0be5c0a46ebf..b971c88fe17a 100644
--- a/keyboards/yandrstudio/transition80/keymaps/via/keymap.c
+++ b/keyboards/yandrstudio/transition80/keymaps/via/keymap.c
@@ -4,28 +4,28 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_BSLS, KC_BSPC,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
- [1] = LAYOUT(
+ [1] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, AG_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
- [2] = LAYOUT(
+ [2] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
- [3] = LAYOUT(
+ [3] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/yandrstudio/transition80/matrix_diagram.md b/keyboards/yandrstudio/transition80/matrix_diagram.md
new file mode 100644
index 000000000000..77392f1fb53f
--- /dev/null
+++ b/keyboards/yandrstudio/transition80/matrix_diagram.md
@@ -0,0 +1,22 @@
+# Matrix Diagram for Y&R Transition80
+
+```
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
+│00 │ │02 │03 │04 │05 │ │06 │07 │08 │09 │ │0A │0B │0C │0D ││0E │0F │0G │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐ ┌───┬───┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D ││1E │1F │1G │ │3D │3E │ Split Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤ └───┴───┘ soldered PCB only
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D ││2E │2F │2G │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+│40 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4D │ │4E │
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
+│50 │51 │52 │56 │5A │5B │5C │5D ││5E │5F │5G │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│50 │51 │52 │56 │5B │5C │5D │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
+
diff --git a/keyboards/ymdk/id75/keymaps/dothtm75/config.h b/keyboards/ymdk/id75/keymaps/dothtm75/config.h
new file mode 100644
index 000000000000..155d4562d53c
--- /dev/null
+++ b/keyboards/ymdk/id75/keymaps/dothtm75/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2017 Mike Cramer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HOLD_ON_OTHER_KEY_PRESS
+
+#define MIDI_ADVANCED
diff --git a/keyboards/ymdk/id75/keymaps/dothtm75/keymap.c b/keyboards/ymdk/id75/keymaps/dothtm75/keymap.c
new file mode 100644
index 000000000000..f8267aff643d
--- /dev/null
+++ b/keyboards/ymdk/id75/keymaps/dothtm75/keymap.c
@@ -0,0 +1,174 @@
+/* Copyright 2017 Wunder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_5x15(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_MINS), LGUI(KC_EQL), KC_6, KC_7, KC_8, KC_9, KC_0, LGUI(KC_0), KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, LGUI(KC_LCBR), LGUI(KC_RCBR), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSLS,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, LGUI(KC_LBRC), LGUI(KC_RBRC), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, LGUI(KC_QUES), LGUI(KC_SLSH), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT,
+ MO(2), KC_LCTL, KC_LALT, KC_LGUI, LT(1,KC_SPC), KC_SPC, LGUI(KC_SPC), LGUI(KC_SPC), KC_SPC, LT(1,KC_SPC), KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ortho_5x15(
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_MINS, KC_EQL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LGUI(KC_1), KC_DEL,
+ KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_LCBR, KC_RCBR, KC_NO, KC_LCBR, KC_RCBR, KC_DQUO, KC_QUOT, KC_NO, KC_SLSH,
+ KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_LBRC, KC_RBRC, KC_NO, KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_NO, KC_PENT,
+ KC_TRNS, KC_UNDS, KC_PLUS, KC_MINS, KC_EQL, KC_NO, KC_QUES, KC_SLSH, KC_NO, KC_QUES, KC_SLSH, KC_QUES, KC_SLSH, LCAG(KC_UP), KC_TRNS,
+ MO(15), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LGUI(KC_SPC), HYPR(KC_J), KC_TRNS, LGUI(KC_SPC), KC_TRNS, KC_TRNS, KC_TRNS, LGUI(KC_LBRC), LCAG(KC_DOWN), LGUI(KC_RBRC)
+ ),
+
+ [2] = LAYOUT_ortho_5x15(
+ DB_TOGG, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO, KC_DEL,
+ RGB_TOG, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_NO, KC_NO, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_NO, KC_NO,
+ HYPR(KC_H), KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(15), HYPR(KC_K), KC_NO, KC_NO, KC_TRNS, MO(15), KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+
+ ),
+
+ // Musical keys
+
+ [3] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Vertical Typing 60
+ KC_ESC, MI_C, MI_E, MI_Gs, MI_C1, MI_E1, KC_NO, KC_NO, MI_Gs1, MI_C2, MI_E2, MI_Gs2, MI_C3, MI_E3, MI_TR0,
+ KC_TAB, MI_Cs, MI_F, MI_A, MI_Cs1, MI_F1, KC_NO, KC_NO, MI_A1, MI_Cs2, MI_F2, MI_A2, MI_Cs3, MI_F3, MI_TRSU,
+ KC_SPC, MI_D, MI_Fs, MI_As, MI_D1, MI_Fs1, KC_NO, KC_NO, MI_As1, MI_D2, MI_Fs2, MI_As2, MI_D3, MI_Fs3, MI_TRSD,
+ MI_SUST, MI_Ds, MI_G, MI_B, MI_Ds1, MI_G1, KC_NO, KC_NO, MI_B1, MI_Ds2, MI_G2, MI_B2, MI_Ds3, MI_G3, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [4] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Vertical Typing 60
+ KC_ESC, MI_C, MI_G, MI_C1, MI_G1, MI_C2, KC_NO, KC_NO, MI_G2, MI_C3, MI_G3, MI_C4, MI_G4, MI_C5, MI_TR0,
+ KC_TAB, MI_D, MI_Gs, MI_D1, MI_Gs1, MI_D2, KC_NO, KC_NO, MI_Gs2, MI_D3, MI_Gs3, MI_D4, MI_Gs4, MI_D5, MI_TRSU,
+ KC_SPC, MI_Ds, MI_As, MI_Ds1, MI_As1, MI_Ds2, KC_NO, KC_NO, MI_As2, MI_Ds3, MI_As3, MI_Ds4, MI_As4, MI_Ds5, MI_TRSD,
+ MI_SUST, MI_F, MI_B, MI_F1, MI_B1, MI_F2, KC_NO, KC_NO, MI_B2, MI_F3, MI_B3, MI_F4, MI_B4, MI_F5, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [5] = LAYOUT_ortho_5x15(
+ // Major scale Vertical Typing 60
+ KC_ESC, MI_C, MI_G, MI_D1, MI_A1, MI_E2, KC_NO, KC_NO, MI_B2, MI_F3, MI_C4, MI_G4, MI_D5, MI_A5, MI_TR0,
+ KC_TAB, MI_D, MI_A, MI_E1, MI_B1, MI_F2, KC_NO, KC_NO, MI_C3, MI_G3, MI_D4, MI_A4, MI_E5, MI_B5, MI_TRSU,
+ KC_SPC, MI_E, MI_B, MI_F1, MI_C2, MI_G2, KC_NO, KC_NO, MI_D3, MI_A3, MI_E4, MI_B4, MI_F5, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_C1, MI_G1, MI_D2, MI_A2, KC_NO, KC_NO, MI_E3, MI_B3, MI_F4, MI_C5, MI_G5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [6] = LAYOUT_ortho_5x15(
+ // Black Keys Vertical Typing 60
+ KC_ESC, MI_C, MI_A, MI_G1, MI_F2, MI_D3, KC_NO, KC_NO, MI_C4, MI_A4, MI_G5, KC_NO, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_C1, MI_A1, MI_G2, MI_F3, KC_NO, KC_NO, MI_D4, MI_C5, MI_A5, KC_NO, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_F, MI_D1, MI_C2, MI_A2, MI_G3, KC_NO, KC_NO, MI_F4, MI_D5, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_G, MI_F1, MI_D2, MI_C3, MI_A3, KC_NO, KC_NO, MI_G4, MI_F5, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [7] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Vertical
+ KC_ESC, MI_C, MI_E, MI_Gs, MI_C1, MI_E1, MI_Gs1, MI_C2, MI_E2, MI_Gs2, MI_C3, MI_E3, MI_Gs3, KC_NO, MI_TR0,
+ KC_TAB, MI_Cs, MI_F, MI_A, MI_Cs1, MI_F1, MI_A1, MI_Cs2, MI_F2, MI_A2, MI_Cs3, MI_F3, MI_A3, KC_NO, MI_TRSU,
+ KC_SPC, MI_D, MI_Fs, MI_As, MI_D1, MI_Fs1, MI_As1, MI_D2, MI_Fs2, MI_As2, MI_D3, MI_Fs3, MI_As3, KC_NO, MI_TRSD,
+ MI_SUST, MI_Ds, MI_G, MI_B, MI_Ds1, MI_G1, MI_B1, MI_Ds2, MI_G2, MI_B2, MI_Ds3, MI_G3, MI_B3, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [8] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Vertical
+ KC_ESC, MI_C, MI_G, MI_C1, MI_G1, MI_C2, MI_G2, MI_C3, MI_G3, MI_C4, MI_G4, MI_C5, MI_G5, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_Gs, MI_D1, MI_Gs1, MI_D2, MI_Gs2, MI_D3, MI_Gs3, MI_D4, MI_Gs4, MI_D5, MI_Gs5, KC_NO, MI_TRSU,
+ KC_SPC, MI_Ds, MI_As, MI_Ds1, MI_As1, MI_Ds2, MI_As2, MI_Ds3, MI_As3, MI_Ds4, MI_As4, MI_Ds5, MI_As5, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_B, MI_F1, MI_B1, MI_F2, MI_B2, MI_F3, MI_B3, MI_F4, MI_B4, MI_F5, MI_B5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [9] = LAYOUT_ortho_5x15(
+ // Major scale Vertical
+ KC_ESC, MI_C, MI_G, MI_D1, MI_A1, MI_E2, MI_B2, MI_F3, MI_C4, MI_G4, MI_D5, MI_A5, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_A, MI_E1, MI_B1, MI_F2, MI_C3, MI_G3, MI_D4, MI_A4, MI_E5, MI_B5, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_E, MI_B, MI_F1, MI_C2, MI_G2, MI_D3, MI_A3, MI_E4, MI_B4, MI_F5, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_F, MI_C1, MI_G1, MI_D2, MI_A2, MI_E3, MI_B3, MI_F4, MI_C5, MI_G5, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [10] = LAYOUT_ortho_5x15(
+ // Black Keys Vertical
+ KC_ESC, MI_C, MI_A, MI_G1, MI_F2, MI_D3, MI_C4, MI_A4, MI_G5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TR0,
+ KC_TAB, MI_D, MI_C1, MI_A1, MI_G2, MI_F3, MI_D4, MI_C5, MI_A5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSU,
+ KC_SPC, MI_F, MI_D1, MI_C2, MI_A2, MI_G3, MI_F4, MI_D5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, MI_G, MI_F1, MI_D2, MI_C3, MI_A3, MI_G4, MI_F5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [11] = LAYOUT_ortho_5x15(
+ // Chromatic Scale Horizontal
+ KC_ESC, MI_C, MI_Cs, MI_D, MI_Ds, MI_E, MI_F, MI_Fs, MI_G, MI_Gs, MI_A, MI_As, MI_B, KC_NO, MI_TR0,
+ KC_TAB, MI_C1, MI_Cs1, MI_D1, MI_Ds1, MI_E1, MI_F1, MI_Fs1, MI_G1, MI_Gs1, MI_A1, MI_As1, MI_B1, KC_NO, MI_TRSU,
+ KC_SPC, MI_C2, MI_Cs2, MI_D2, MI_Ds2, MI_E2, MI_F2, MI_Fs2, MI_G2, MI_Gs2, MI_A2, MI_As2, MI_B2, KC_NO, MI_TRSD,
+ MI_SUST, MI_C3, MI_Cs3, MI_D3, MI_Ds3, MI_E3, MI_F3, MI_Fs3, MI_G3, MI_Gs3, MI_A3, MI_As3, MI_B3, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+ [12] = LAYOUT_ortho_5x15(
+ // Pocket Operator Scale Horizontal
+ KC_ESC, MI_C, MI_D, MI_Ds, MI_F, MI_G, MI_Gs, MI_As, MI_B, MI_C1, MI_D1, MI_Ds1, MI_F1, KC_NO, MI_TR0,
+ KC_TAB, MI_G1, MI_Gs1, MI_As1, MI_B1, MI_C2, MI_D2, MI_Ds2, MI_F2, MI_G2, MI_Gs2, MI_As2, MI_B2, KC_NO, MI_TRSU,
+ KC_SPC, MI_C3, MI_D3, MI_Ds3, MI_F3, MI_G3, MI_Gs3, MI_As3, MI_B3, MI_C4, MI_D4, MI_Ds4, MI_F4, KC_NO, MI_TRSD,
+ MI_SUST, MI_G4, MI_Gs4, MI_As4, MI_B4, MI_C5, MI_D5, MI_Ds5, MI_F5, MI_G5, MI_Gs5, MI_As5, MI_B5, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [13] = LAYOUT_ortho_5x15(
+ // Major scale Horizontal
+ KC_ESC, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C1, MI_D1, MI_E1, MI_F1, MI_G1, KC_NO, MI_TR0,
+ KC_TAB, MI_A1, MI_B1, MI_C2, MI_D2, MI_E2, MI_F2, MI_G2, MI_A2, MI_B2, MI_C3, MI_D3, MI_E3, KC_NO, MI_TRSU,
+ KC_SPC, MI_F3, MI_G3, MI_A3, MI_B3, MI_C4, MI_D4, MI_E4, MI_F4, MI_G4, MI_A4, MI_B4, MI_C5, KC_NO, MI_TRSD,
+ MI_SUST, MI_D5, MI_E5, MI_F5, MI_G5, MI_A5, MI_B5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+ [14] = LAYOUT_ortho_5x15(
+ // Black Keys Horizontal
+ KC_ESC, MI_C, MI_D, MI_F, MI_G, MI_A, MI_C1, MI_D1, MI_F1, MI_G1, MI_A1, MI_C2, MI_D2, KC_NO, MI_TR0,
+ KC_TAB, MI_F2, MI_G2, MI_A2, MI_C3, MI_D3, MI_F3, MI_G3, MI_A3, MI_C4, MI_D4, MI_F4, MI_G4, KC_NO, MI_TRSU,
+ KC_SPC, MI_A4, MI_C, MI_D, MI_F, MI_G, MI_A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_TRSD,
+ MI_SUST, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_OCTU,
+ MO(15), KC_LCTL, KC_LALT, KC_LGUI, MI_BNDD, MI_SUST, MI_SUST, MI_SUST, MI_SUST, MI_BNDU, KC_NO, KC_NO, MI_MODD, MI_MODU, MI_OCTD
+
+ ),
+
+ [15] = LAYOUT_ortho_5x15(
+ // Settings
+ DB_TOGG, MI_CH1, MI_CH2, MI_CH3, MI_CH4, MI_CH5, KC_NO, KC_NO, MI_CH6, MI_CH7, MI_CH8, AU_TOGG, KC_NO, KC_NO, QK_BOOT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, DF(3), DF(4), DF(5), DF(6), KC_NO, KC_NO, KC_NO,
+ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_NO, KC_NO, KC_NO, DF(11), DF(12), DF(13), DF(14), KC_NO, KC_NO, DB_TOGG,
+ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_NO, KC_NO, KC_NO, DF(7), DF(8), DF(9), DF(10), KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS, DF(0), DF(0), DF(0), DF(0), KC_TRNS, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO
+ )
+};
+
diff --git a/keyboards/ymdk/id75/keymaps/dothtm75/rules.mk b/keyboards/ymdk/id75/keymaps/dothtm75/rules.mk
new file mode 100644
index 000000000000..56c4130708ca
--- /dev/null
+++ b/keyboards/ymdk/id75/keymaps/dothtm75/rules.mk
@@ -0,0 +1,2 @@
+
+MIDI_ENABLE = yes
diff --git a/layouts/community/ergodox/zweihander-macos/keymap.c b/layouts/community/ergodox/zweihander-macos/keymap.c
index cbf258745b66..19567797a045 100644
--- a/layouts/community/ergodox/zweihander-macos/keymap.c
+++ b/layouts/community/ergodox/zweihander-macos/keymap.c
@@ -118,11 +118,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | ⌥↑ | PgUp | ⌥↓ | | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | | Home | PgDn | End | |------| |------| ⌘[ | ← | ↓ | → | | F16 |
+ * | | ⌃⇧⌘← | Home | PgDn | End | ⌃⇧⌘→ |------| |------| ⌘[ | ← | ↓ | → | | F16 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | ⏯ | ⏮ | ⏭ | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * | | | | | | |VolUp |VolDn | Mute | | |
+ * | | | | | | |VolDn |VolUp | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
@@ -134,23 +134,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
// MEDIA AND MOUSE
[MDIA] = LAYOUT_ergodox(
- KC_TRNS, KC_F14 , KC_F15 , KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS, /* F14 dims screen, F15 brightens */
- KC_TRNS, KC_TRNS, LALT(KC_UP), KC_PGUP, LALT(KC_DOWN), KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END , KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_F14 , KC_F15 , KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS, /* F14 dims screen, F15 brightens */
+ KC_TRNS, KC_TRNS, LALT(KC_UP), KC_PGUP, LALT(KC_DOWN), KC_TRNS, KC_TRNS,
+ KC_TRNS, C(S(G(KC_LEFT))), KC_HOME, KC_PGDN, KC_END , C(S(G(KC_RGHT))),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
- KC_TRNS, LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_EJCT, KC_PWR,
- KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS,
- LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_F16 ,
- KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
- KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_EJCT, KC_PWR,
+ KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS,
+ LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_F16 ,
+ KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
- LGUI(KC_X), LGUI(KC_C), LGUI(KC_V)
+ LGUI(KC_X), LGUI(KC_C), LGUI(KC_V)
),
};
diff --git a/layouts/community/ortho_4x10/scotto/keymap.c b/layouts/community/ortho_4x10/scotto/keymap.c
new file mode 100644
index 000000000000..919764324bf1
--- /dev/null
+++ b/layouts/community/ortho_4x10/scotto/keymap.c
@@ -0,0 +1,74 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "scotto.h"
+
+#define LAYOUT_ortho_4x10_wrapper(...) LAYOUT_ortho_4x10(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4x10_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ KC_NO, KC_NO, _______THUMB6_1_______, KC_NO, KC_NO
+ ),
+ [1] = LAYOUT_ortho_4x10_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ ),
+ [2] = LAYOUT_ortho_4x10_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3a________________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ ),
+ [3] = LAYOUT_ortho_4x10_wrapper(
+ ________________FUNC_SYS1a________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ ),
+ [4] = LAYOUT_ortho_4x10_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ KC_NO, KC_NO, _______THUMB6_4_______, KC_NO, KC_NO
+ ),
+ [5] = LAYOUT_ortho_4x10_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3b_________________,
+ KC_NO, KC_NO, _______THUMB6_5_______, KC_NO, KC_NO
+ ),
+ [6] = LAYOUT_ortho_4x10_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ ),
+ [7] = LAYOUT_ortho_4x10_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3b________________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ ),
+ [8] = LAYOUT_ortho_4x10_wrapper(
+ ________________FUNC_SYS1b________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
+ )
+};
diff --git a/layouts/community/split_3x5_2/scotto/keymap.c b/layouts/community/split_3x5_2/scotto/keymap.c
new file mode 100644
index 000000000000..fcba0f483b2c
--- /dev/null
+++ b/layouts/community/split_3x5_2/scotto/keymap.c
@@ -0,0 +1,78 @@
+/*
+Copyright 2023 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+#include "scotto.h"
+
+#define LAYOUT_split_3x5_2_wrapper(...) LAYOUT_split_3x5_2(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x5_2_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ _______THUMB4_1_______
+ ),
+ [1] = LAYOUT_split_3x5_2_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ _____THUMB4_TRNS______
+ ),
+ [2] = LAYOUT_split_3x5_2_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3a________________,
+ _____THUMB4_TRNS______
+ ),
+ [3] = LAYOUT_split_3x5_2_wrapper(
+ ________________FUNC_SYS1a________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ _____THUMB4_TRNS______
+ ),
+ [4] = LAYOUT_split_3x5_2_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ _______THUMB4_4_______
+ ),
+ [5] = LAYOUT_split_3x5_2_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3b_________________,
+ _______THUMB4_5_______
+ ),
+ [6] = LAYOUT_split_3x5_2_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ _____THUMB4_TRNS______
+ ),
+ [7] = LAYOUT_split_3x5_2_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3b________________,
+ _____THUMB4_TRNS______
+ ),
+ [8] = LAYOUT_split_3x5_2_wrapper(
+ ________________FUNC_SYS1b________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ _____THUMB4_TRNS______
+ )
+};
diff --git a/layouts/community/split_3x5_3/scotto/keymap.c b/layouts/community/split_3x5_3/scotto/keymap.c
new file mode 100644
index 000000000000..b0d4d9a038f6
--- /dev/null
+++ b/layouts/community/split_3x5_3/scotto/keymap.c
@@ -0,0 +1,75 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+#include "scotto.h"
+
+#define LAYOUT_split_3x5_3_wrapper(...) LAYOUT_split_3x5_3(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x5_3_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ _______THUMB6_1_______
+ ),
+ [1] = LAYOUT_split_3x5_3_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ _____THUMB6_TRNS______
+ ),
+ [2] = LAYOUT_split_3x5_3_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3a________________,
+ _____THUMB6_TRNS______
+ ),
+ [3] = LAYOUT_split_3x5_3_wrapper(
+ ________________FUNC_SYS1a________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ _____THUMB6_TRNS______
+ ),
+ [4] = LAYOUT_split_3x5_3_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3a_________________,
+ _______THUMB6_4_______
+ ),
+ [5] = LAYOUT_split_3x5_3_wrapper(
+ _________________KEYMAP1__________________,
+ _________________KEYMAP2__________________,
+ _________________KEYMAP3b_________________,
+ _______THUMB6_5_______
+ ),
+ [6] = LAYOUT_split_3x5_3_wrapper(
+ ______________SYM_MEDIA_NAV1______________,
+ ______________SYM_MEDIA_NAV2______________,
+ ______________SYM_MEDIA_NAV3______________,
+ _____THUMB6_TRNS______
+ ),
+ [7] = LAYOUT_split_3x5_3_wrapper(
+ _________________NUM_SYM1_________________,
+ _________________NUM_SYM2_________________,
+ _________________NUM_SYM3b________________,
+ _____THUMB6_TRNS______
+ ),
+ [8] = LAYOUT_split_3x5_3_wrapper(
+ ________________FUNC_SYS1b________________,
+ ________________FUNC_SYS2_________________,
+ ________________FUNC_SYS3_________________,
+ _____THUMB6_TRNS______
+ )
+};
diff --git a/layouts/default/60_abnt2/default_60_abnt2/keymap.c b/layouts/default/60_abnt2/default_60_abnt2/keymap.c
index a5a8f61cb603..712931016aef 100644
--- a/layouts/default/60_abnt2/default_60_abnt2/keymap.c
+++ b/layouts/default/60_abnt2/default_60_abnt2/keymap.c
@@ -30,11 +30,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ' │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│
- * └───┴───┴───┴───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───────┘
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ Tab │ Q │ W │ E │Rst│ T │Ins│Hom│ ↑ │End│PgU│ ´ │ [ │ │
- * ├─────┴┬──┴┬──┴┬──└───┘┬──└───┴┬──┴┬──┴┬──┴┬──┴┐──┴┬──┴┐ Ent│
+ * ├─────┴┬──┴┬──┴┬──┴───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
* │ Caps │ A │ S │ D │ F │ G │ H │ ← │ ↓ │ → │PgD│ ~ │ ] │ │
- * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─└───┴───┴───┴───┘─┬─┴─┬─┴────┤
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
* │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ ; │ / │ Shift│
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
* │Ctrl│GUI │Alt │ │ Alt│ GUI│ MO1│Ctrl│
diff --git a/layouts/default/60_jis/default_60_jis/keymap.c b/layouts/default/60_jis/default_60_jis/keymap.c
new file mode 100644
index 000000000000..a35e3f0f795e
--- /dev/null
+++ b/layouts/default/60_jis/default_60_jis/keymap.c
@@ -0,0 +1,27 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
+ * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ] │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │
+ * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤
+ * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt │GUI │Ctrl│
+ * └────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘
+ */
+ [0] = LAYOUT_60_jis(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_RCTL
+ )
+};
diff --git a/layouts/default/60_jis/info.json b/layouts/default/60_jis/info.json
new file mode 100644
index 000000000000..56972148bda3
--- /dev/null
+++ b/layouts/default/60_jis/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "60% JIS layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_jis": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+ {"x": 6, "y": 0},
+ {"x": 7, "y": 0},
+ {"x": 8, "y": 0},
+ {"x": 9, "y": 0},
+ {"x": 10, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+ {"x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"x": 0, "y": 2, "w": 1.75},
+ {"x": 1.75, "y": 2},
+ {"x": 2.75, "y": 2},
+ {"x": 3.75, "y": 2},
+ {"x": 4.75, "y": 2},
+ {"x": 5.75, "y": 2},
+ {"x": 6.75, "y": 2},
+ {"x": 7.75, "y": 2},
+ {"x": 8.75, "y": 2},
+ {"x": 9.75, "y": 2},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2},
+
+ {"x": 0, "y": 3, "w": 2.25},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y": 3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3},
+ {"x": 13.25, "y": 3, "w": 1.75},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 1.25},
+ {"x": 5, "y": 4, "w": 3.75},
+ {"x": 8.75, "y": 4, "w": 1.25},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 12.5, "y": 4, "w": 1.25},
+ {"x": 13.75, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_jis/layout.json b/layouts/default/60_jis/layout.json
new file mode 100644
index 000000000000..a93cc2bbfd2d
--- /dev/null
+++ b/layouts/default/60_jis/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:2.25},"","","","","","","","","","","","",{w:1.75},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.75},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},""]
diff --git a/layouts/default/60_jis/readme.md b/layouts/default/60_jis/readme.md
new file mode 100644
index 000000000000..236abdfa074d
--- /dev/null
+++ b/layouts/default/60_jis/readme.md
@@ -0,0 +1,3 @@
+# 60_jis
+
+ LAYOUT_60_jis
diff --git a/layouts/default/64_ansi/default_64_ansi/keymap.c b/layouts/default/64_ansi/default_64_ansi/keymap.c
index fdbb44117fb1..ede754b2ca7f 100644
--- a/layouts/default/64_ansi/default_64_ansi/keymap.c
+++ b/layouts/default/64_ansi/default_64_ansi/keymap.c
@@ -4,6 +4,19 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Sft│ ↑ │mo1│
+ * ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │Alt│Ctl│ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[0] = LAYOUT_64_ansi(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
@@ -11,6 +24,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │PSn│SLk│Pause│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │PgU│ │
+ * ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │mo2│Hom│PgD│End│
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[1] = LAYOUT_64_ansi(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS,
@@ -18,9 +44,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
_______, _______, _______, _______, _______, MO(2), KC_HOME, KC_PGDN, KC_END
),
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │QBt│ │ │ │ │ │ │ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[2] = LAYOUT_64_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
diff --git a/layouts/default/64_iso/default_64_iso/keymap.c b/layouts/default/64_iso/default_64_iso/keymap.c
index 1dfcdd3eb705..a28e652024bc 100644
--- a/layouts/default/64_iso/default_64_iso/keymap.c
+++ b/layouts/default/64_iso/default_64_iso/keymap.c
@@ -4,6 +4,19 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
+ * ├───┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │Sft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Sft│ ↑ │mo1│
+ * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │Alt│Ctl│ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[0] = LAYOUT_64_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
@@ -11,6 +24,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │PSn│SLk│ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │PgU│ │
+ * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │mo2│Hom│PgD│End│
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[1] = LAYOUT_64_iso(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL,
@@ -18,9 +44,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
_______, _______, _______, _______, _______, MO(2), KC_HOME, KC_PGDN, KC_END
),
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │QBt│ │ │ │ │ │ │ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
[2] = LAYOUT_64_iso(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
diff --git a/layouts/default/fullsize_jis/default_fullsize_jis/keymap.c b/layouts/default/fullsize_jis/default_fullsize_jis/keymap.c
new file mode 100644
index 000000000000..068bd5024bf0
--- /dev/null
+++ b/layouts/default/fullsize_jis/default_fullsize_jis/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
+ * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp│ │Ins│Hom│PgU│ │Num│ / │ * │ - │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ │ │Del│End│PgD│ │ 7 │ 8 │ 9 │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘ ├───┼───┼───┤ + │
+ * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │ │ │ 4 │ 5 │ 6 │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐ ├───┼───┼───┼───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │ │ ↑ │ │ 1 │ 2 │ 3 │ │
+ * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┼───┴┬──┴─┬─┴─┬─┴─┬─┴─┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤Ent│
+ * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt│GUI│App│Ctrl│ │ ← │ ↓ │ → │ │ 0 │ . │ │
+ * └────┴────┴────┴────┴────────────┴────┴────┴───┴───┴───┴────┘ └───┴───┴───┘ └───────┴───┴───┘
+ */
+ [0] = LAYOUT_fullsize_jis(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ )
+};
diff --git a/layouts/default/fullsize_jis/info.json b/layouts/default/fullsize_jis/info.json
new file mode 100644
index 000000000000..8acd5f2fe3a6
--- /dev/null
+++ b/layouts/default/fullsize_jis/info.json
@@ -0,0 +1,125 @@
+{
+ "keyboard_name": "Fullsize JIS layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_fullsize_jis": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+ {"x": 15.25, "y": 0},
+ {"x": 16.25, "y": 0},
+ {"x": 17.25, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+ {"x": 4, "y": 1.25},
+ {"x": 5, "y": 1.25},
+ {"x": 6, "y": 1.25},
+ {"x": 7, "y": 1.25},
+ {"x": 8, "y": 1.25},
+ {"x": 9, "y": 1.25},
+ {"x": 10, "y": 1.25},
+ {"x": 11, "y": 1.25},
+ {"x": 12, "y": 1.25},
+ {"x": 13, "y": 1.25},
+ {"x": 14, "y": 1.25},
+ {"x": 15.25, "y": 1.25},
+ {"x": 16.25, "y": 1.25},
+ {"x": 17.25, "y": 1.25},
+ {"x": 18.5, "y": 1.25},
+ {"x": 19.5, "y": 1.25},
+ {"x": 20.5, "y": 1.25},
+ {"x": 21.5, "y": 1.25},
+ {"x": 0, "y": 2.25, "w": 1.5},
+
+ {"x": 1.5, "y": 2.25},
+ {"x": 2.5, "y": 2.25},
+ {"x": 3.5, "y": 2.25},
+ {"x": 4.5, "y": 2.25},
+ {"x": 5.5, "y": 2.25},
+ {"x": 6.5, "y": 2.25},
+ {"x": 7.5, "y": 2.25},
+ {"x": 8.5, "y": 2.25},
+ {"x": 9.5, "y": 2.25},
+ {"x": 10.5, "y": 2.25},
+ {"x": 11.5, "y": 2.25},
+ {"x": 12.5, "y": 2.25},
+ {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"x": 15.25, "y": 2.25},
+ {"x": 16.25, "y": 2.25},
+ {"x": 17.25, "y": 2.25},
+ {"x": 18.5, "y": 2.25},
+ {"x": 19.5, "y": 2.25},
+ {"x": 20.5, "y": 2.25},
+ {"x": 21.5, "y": 2.25, "h": 2},
+
+ {"x": 0, "y": 3.25, "w": 1.75},
+ {"x": 1.75, "y": 3.25},
+ {"x": 2.75, "y": 3.25},
+ {"x": 3.75, "y": 3.25},
+ {"x": 4.75, "y": 3.25},
+ {"x": 5.75, "y": 3.25},
+ {"x": 6.75, "y": 3.25},
+ {"x": 7.75, "y": 3.25},
+ {"x": 8.75, "y": 3.25},
+ {"x": 9.75, "y": 3.25},
+ {"x": 10.75, "y": 3.25},
+ {"x": 11.75, "y": 3.25},
+ {"x": 12.75, "y": 3.25},
+ {"x": 18.5, "y": 3.25},
+ {"x": 19.5, "y": 3.25},
+ {"x": 20.5, "y": 3.25},
+
+ {"x": 0, "y": 4.25, "w": 2.25},
+ {"x": 2.25, "y": 4.25},
+ {"x": 3.25, "y": 4.25},
+ {"x": 4.25, "y": 4.25},
+ {"x": 5.25, "y": 4.25},
+ {"x": 6.25, "y": 4.25},
+ {"x": 7.25, "y": 4.25},
+ {"x": 8.25, "y": 4.25},
+ {"x": 9.25, "y": 4.25},
+ {"x": 10.25, "y": 4.25},
+ {"x": 11.25, "y": 4.25},
+ {"x": 12.25, "y": 4.25},
+ {"x": 13.25, "y": 4.25, "w": 1.75},
+ {"x": 16.25, "y": 4.25},
+ {"x": 18.5, "y": 4.25},
+ {"x": 19.5, "y": 4.25},
+ {"x": 20.5, "y": 4.25},
+ {"x": 21.5, "y": 4.25, "h": 2},
+
+ {"x": 0, "y": 5.25, "w": 1.25},
+ {"x": 1.25, "y": 5.25, "w": 1.25},
+ {"x": 2.5, "y": 5.25, "w": 1.25},
+ {"x": 3.75, "y": 5.25, "w": 1.25},
+ {"x": 5, "y": 5.25, "w": 3.25},
+ {"x": 8.25, "y": 5.25, "w": 1.25},
+ {"x": 9.5, "y": 5.25, "w": 1.25},
+ {"x": 10.75, "y": 5.25},
+ {"x": 11.75, "y": 5.25},
+ {"x": 12.75, "y": 5.25},
+ {"x": 13.75, "y": 5.25, "w": 1.25},
+ {"x": 15.25, "y": 5.25},
+ {"x": 16.25, "y": 5.25},
+ {"x": 17.25, "y": 5.25},
+ {"x": 18.5, "y": 5.25, "w": 2},
+ {"x": 20.5, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/fullsize_jis/layout.json b/layouts/default/fullsize_jis/layout.json
new file mode 100644
index 000000000000..e8caad887880
--- /dev/null
+++ b/layouts/default/fullsize_jis/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","","",{x:0.25},"","","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","","",{x:0.25},"","","",{h:2},""],
+[{w:1.75},"","","","","","","","","","","","","",{x:4.75},"","",""],
+[{w:2.25},"","","","","","","","","","","","",{w:1.75},"",{x:1.25},"",{x:1.25},"","","",{h:2},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.25},"",{w:1.25},"",{w:1.25},"","","","",{w:1.25},"",{x:0.25},"","","",{x:0.25,w:2},"",""]
diff --git a/layouts/default/fullsize_jis/readme.md b/layouts/default/fullsize_jis/readme.md
new file mode 100644
index 000000000000..938532515722
--- /dev/null
+++ b/layouts/default/fullsize_jis/readme.md
@@ -0,0 +1,3 @@
+# fullsize_jis
+
+ LAYOUT_fullsize_jis
diff --git a/layouts/default/readme.md b/layouts/default/readme.md
index a728d93d1a22..439613911aca 100644
--- a/layouts/default/readme.md
+++ b/layouts/default/readme.md
@@ -154,6 +154,21 @@ LAYOUT_60_iso_tsangan
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
```
+```
+LAYOUT_60_jis
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤
+│ │ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘
+```
+
```
LAYOUT_60_tsangan_hhkb
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
@@ -623,6 +638,24 @@ LAYOUT_tkl_iso_tsangan_split_bs_rshift
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘
```
+```
+LAYOUT_tkl_jis
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘ └───┴───┴───┘
+```
+
```
LAYOUT_tkl_f13_ansi
┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
@@ -767,6 +800,25 @@ LAYOUT_tkl_f13_iso_tsangan_split_bs_rshift
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘└───┴───┴───┘
```
+```
+LAYOUT_tkl_f13_jis
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ ││ │ │ │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │└───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ ││ │ │ │
+└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘└───┴───┴───┘
+
+```
+
```
LAYOUT_tkl_nofrow_ansi
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
@@ -872,6 +924,23 @@ LAYOUT_fullsize_iso
└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
```
+```
+LAYOUT_fullsize_jis
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘ ├───┼───┼───┤ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐ ├───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┼───┴┬──┴─┬─┴─┬─┴─┬─┴─┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────┴────────────┴────┴────┴───┴───┴───┴────┘ └───┴───┴───┘ └───────┴───┴───┘
+```
### Split Layouts
diff --git a/layouts/default/tkl_f13_jis/default_tkl_f13_jis/keymap.c b/layouts/default/tkl_f13_jis/default_tkl_f13_jis/keymap.c
new file mode 100644
index 000000000000..ec5c35cb5422
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/default_tkl_f13_jis/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+ * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13││PSc│Scr│Pse│
+ * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
+ * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp││Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ ││Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│└───┴───┴───┘
+ * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │ │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt │GUI │Ctrl││ ← │ ↓ │ → │
+ * └────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘└───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_f13_jis(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_f13_jis/info.json b/layouts/default/tkl_f13_jis/info.json
new file mode 100644
index 000000000000..97f5bd3880e1
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/info.json
@@ -0,0 +1,108 @@
+{
+ "keyboard_name": "Tenkeyless JIS layout with F13 key",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_f13_jis": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1.25, "y": 0},
+ {"x": 2.25, "y": 0},
+ {"x": 3.25, "y": 0},
+ {"x": 4.25, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.75, "y": 0},
+ {"x": 10.75, "y": 0},
+ {"x": 11.75, "y": 0},
+ {"x": 12.75, "y": 0},
+ {"x": 14, "y": 0},
+ {"x": 15.25, "y": 0},
+ {"x": 16.25, "y": 0},
+ {"x": 17.25, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+ {"x": 4, "y": 1.25},
+ {"x": 5, "y": 1.25},
+ {"x": 6, "y": 1.25},
+ {"x": 7, "y": 1.25},
+ {"x": 8, "y": 1.25},
+ {"x": 9, "y": 1.25},
+ {"x": 10, "y": 1.25},
+ {"x": 11, "y": 1.25},
+ {"x": 12, "y": 1.25},
+ {"x": 13, "y": 1.25},
+ {"x": 14, "y": 1.25},
+ {"x": 15.25, "y": 1.25},
+ {"x": 16.25, "y": 1.25},
+ {"x": 17.25, "y": 1.25},
+ {"x": 0, "y": 2.25, "w": 1.5},
+
+ {"x": 1.5, "y": 2.25},
+ {"x": 2.5, "y": 2.25},
+ {"x": 3.5, "y": 2.25},
+ {"x": 4.5, "y": 2.25},
+ {"x": 5.5, "y": 2.25},
+ {"x": 6.5, "y": 2.25},
+ {"x": 7.5, "y": 2.25},
+ {"x": 8.5, "y": 2.25},
+ {"x": 9.5, "y": 2.25},
+ {"x": 10.5, "y": 2.25},
+ {"x": 11.5, "y": 2.25},
+ {"x": 12.5, "y": 2.25},
+ {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"x": 15.25, "y": 2.25},
+ {"x": 16.25, "y": 2.25},
+ {"x": 17.25, "y": 2.25},
+
+ {"x": 0, "y": 3.25, "w": 1.75},
+ {"x": 1.75, "y": 3.25},
+ {"x": 2.75, "y": 3.25},
+ {"x": 3.75, "y": 3.25},
+ {"x": 4.75, "y": 3.25},
+ {"x": 5.75, "y": 3.25},
+ {"x": 6.75, "y": 3.25},
+ {"x": 7.75, "y": 3.25},
+ {"x": 8.75, "y": 3.25},
+ {"x": 9.75, "y": 3.25},
+ {"x": 10.75, "y": 3.25},
+ {"x": 11.75, "y": 3.25},
+ {"x": 12.75, "y": 3.25},
+
+ {"x": 0, "y": 4.25, "w": 2.25},
+ {"x": 2.25, "y": 4.25},
+ {"x": 3.25, "y": 4.25},
+ {"x": 4.25, "y": 4.25},
+ {"x": 5.25, "y": 4.25},
+ {"x": 6.25, "y": 4.25},
+ {"x": 7.25, "y": 4.25},
+ {"x": 8.25, "y": 4.25},
+ {"x": 9.25, "y": 4.25},
+ {"x": 10.25, "y": 4.25},
+ {"x": 11.25, "y": 4.25},
+ {"x": 12.25, "y": 4.25},
+ {"x": 13.25, "y": 4.25, "w": 1.75},
+ {"x": 16.25, "y": 4.25},
+
+ {"x": 0, "y": 5.25, "w": 1.25},
+ {"x": 1.25, "y": 5.25, "w": 1.25},
+ {"x": 2.5, "y": 5.25, "w": 1.25},
+ {"x": 3.75, "y": 5.25, "w": 1.25},
+ {"x": 5, "y": 5.25, "w": 3.75},
+ {"x": 8.75, "y": 5.25, "w": 1.25},
+ {"x": 10, "y": 5.25, "w": 1.25},
+ {"x": 11.25, "y": 5.25, "w": 1.25},
+ {"x": 12.5, "y": 5.25, "w": 1.25},
+ {"x": 13.75, "y": 5.25, "w": 1.25},
+ {"x": 15.25, "y": 5.25},
+ {"x": 16.25, "y": 5.25},
+ {"x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_f13_jis/layout.json b/layouts/default/tkl_f13_jis/layout.json
new file mode 100644
index 000000000000..8b20546b74a5
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:2.25},"","","","","","","","","","","","",{w:1.75},"",{x:1.25},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.75},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_f13_jis/readme.md b/layouts/default/tkl_f13_jis/readme.md
new file mode 100644
index 000000000000..cc49ffd83018
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/readme.md
@@ -0,0 +1,3 @@
+# tkl_f13_jis
+
+ LAYOUT_tkl_f13_jis
diff --git a/layouts/default/tkl_jis/default_tkl_jis/keymap.c b/layouts/default/tkl_jis/default_tkl_jis/keymap.c
new file mode 100644
index 000000000000..c60165afcb2f
--- /dev/null
+++ b/layouts/default/tkl_jis/default_tkl_jis/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘
+ * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │ │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤ ┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt │GUI │Ctrl│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_jis(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_jis/info.json b/layouts/default/tkl_jis/info.json
new file mode 100644
index 000000000000..513852193a57
--- /dev/null
+++ b/layouts/default/tkl_jis/info.json
@@ -0,0 +1,107 @@
+{
+ "keyboard_name": "Tenkeyless JIS layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_jis": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+ {"x": 15.25, "y": 0},
+ {"x": 16.25, "y": 0},
+ {"x": 17.25, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+ {"x": 4, "y": 1.25},
+ {"x": 5, "y": 1.25},
+ {"x": 6, "y": 1.25},
+ {"x": 7, "y": 1.25},
+ {"x": 8, "y": 1.25},
+ {"x": 9, "y": 1.25},
+ {"x": 10, "y": 1.25},
+ {"x": 11, "y": 1.25},
+ {"x": 12, "y": 1.25},
+ {"x": 13, "y": 1.25},
+ {"x": 14, "y": 1.25},
+ {"x": 15.25, "y": 1.25},
+ {"x": 16.25, "y": 1.25},
+ {"x": 17.25, "y": 1.25},
+ {"x": 0, "y": 2.25, "w": 1.5},
+
+ {"x": 1.5, "y": 2.25},
+ {"x": 2.5, "y": 2.25},
+ {"x": 3.5, "y": 2.25},
+ {"x": 4.5, "y": 2.25},
+ {"x": 5.5, "y": 2.25},
+ {"x": 6.5, "y": 2.25},
+ {"x": 7.5, "y": 2.25},
+ {"x": 8.5, "y": 2.25},
+ {"x": 9.5, "y": 2.25},
+ {"x": 10.5, "y": 2.25},
+ {"x": 11.5, "y": 2.25},
+ {"x": 12.5, "y": 2.25},
+ {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"x": 15.25, "y": 2.25},
+ {"x": 16.25, "y": 2.25},
+ {"x": 17.25, "y": 2.25},
+
+ {"x": 0, "y": 3.25, "w": 1.75},
+ {"x": 1.75, "y": 3.25},
+ {"x": 2.75, "y": 3.25},
+ {"x": 3.75, "y": 3.25},
+ {"x": 4.75, "y": 3.25},
+ {"x": 5.75, "y": 3.25},
+ {"x": 6.75, "y": 3.25},
+ {"x": 7.75, "y": 3.25},
+ {"x": 8.75, "y": 3.25},
+ {"x": 9.75, "y": 3.25},
+ {"x": 10.75, "y": 3.25},
+ {"x": 11.75, "y": 3.25},
+ {"x": 12.75, "y": 3.25},
+
+ {"x": 0, "y": 4.25, "w": 2.25},
+ {"x": 2.25, "y": 4.25},
+ {"x": 3.25, "y": 4.25},
+ {"x": 4.25, "y": 4.25},
+ {"x": 5.25, "y": 4.25},
+ {"x": 6.25, "y": 4.25},
+ {"x": 7.25, "y": 4.25},
+ {"x": 8.25, "y": 4.25},
+ {"x": 9.25, "y": 4.25},
+ {"x": 10.25, "y": 4.25},
+ {"x": 11.25, "y": 4.25},
+ {"x": 12.25, "y": 4.25},
+ {"x": 13.25, "y": 4.25, "w": 1.75},
+ {"x": 16.25, "y": 4.25},
+
+ {"x": 0, "y": 5.25, "w": 1.25},
+ {"x": 1.25, "y": 5.25, "w": 1.25},
+ {"x": 2.5, "y": 5.25, "w": 1.25},
+ {"x": 3.75, "y": 5.25, "w": 1.25},
+ {"x": 5, "y": 5.25, "w": 3.75},
+ {"x": 8.75, "y": 5.25, "w": 1.25},
+ {"x": 10, "y": 5.25, "w": 1.25},
+ {"x": 11.25, "y": 5.25, "w": 1.25},
+ {"x": 12.5, "y": 5.25, "w": 1.25},
+ {"x": 13.75, "y": 5.25, "w": 1.25},
+ {"x": 15.25, "y": 5.25},
+ {"x": 16.25, "y": 5.25},
+ {"x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_jis/layout.json b/layouts/default/tkl_jis/layout.json
new file mode 100644
index 000000000000..c7a6833b75d4
--- /dev/null
+++ b/layouts/default/tkl_jis/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:2.25},"","","","","","","","","","","","",{w:1.75},"",{x:1.25},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.75},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_jis/readme.md b/layouts/default/tkl_jis/readme.md
new file mode 100644
index 000000000000..59505a196640
--- /dev/null
+++ b/layouts/default/tkl_jis/readme.md
@@ -0,0 +1,5 @@
+# tkl_jis
+
+ LAYOUT_tkl_jis
+
+A standard JIS TKL layout.
diff --git a/lib/python/qmk/keyboard.py b/lib/python/qmk/keyboard.py
index 0c980faf2b88..235b62640c20 100644
--- a/lib/python/qmk/keyboard.py
+++ b/lib/python/qmk/keyboard.py
@@ -182,7 +182,7 @@ def render_layout(layout_data, render_ascii, key_labels=None):
if x >= 0.25 and w == 1.25 and h == 2:
render_key_isoenter(textpad, x, y, w, h, label, style)
- elif w == 2.25 and h == 2:
+ elif w == 1.5 and h == 2:
render_key_baenter(textpad, x, y, w, h, label, style)
else:
render_key_rect(textpad, x, y, w, h, label, style)
@@ -275,7 +275,7 @@ def render_key_baenter(textpad, x, y, w, h, label, style):
w = ceil(w * 4)
h = ceil(h * 3)
- label_len = w - 2
+ label_len = w + 1
label_leftover = label_len - len(label)
if len(label) > label_len:
@@ -292,9 +292,9 @@ def render_key_baenter(textpad, x, y, w, h, label, style):
lab_line = array('u', box_chars['v'] + label_middle + box_chars['v'])
bot_line = array('u', box_chars['bl'] + label_border_bottom + box_chars['br'])
- textpad[y][x + 3:x + w] = top_line
- textpad[y + 1][x + 3:x + w] = mid_line
- textpad[y + 2][x + 3:x + w] = mid_line
- textpad[y + 3][x:x + w] = crn_line
- textpad[y + 4][x:x + w] = lab_line
- textpad[y + 5][x:x + w] = bot_line
+ textpad[y][x:x + w] = top_line
+ textpad[y + 1][x:x + w] = mid_line
+ textpad[y + 2][x:x + w] = mid_line
+ textpad[y + 3][x - 3:x + w] = crn_line
+ textpad[y + 4][x - 3:x + w] = lab_line
+ textpad[y + 5][x - 3:x + w] = bot_line
diff --git a/lib/python/qmk/painter.py b/lib/python/qmk/painter.py
index 48310c896166..381a9964431c 100644
--- a/lib/python/qmk/painter.py
+++ b/lib/python/qmk/painter.py
@@ -191,6 +191,12 @@ def convert_requested_format(im, format):
return im
+def rgb_to565(r, g, b):
+ msb = ((r >> 3 & 0x1F) << 3) + (g >> 5 & 0x07)
+ lsb = ((g >> 2 & 0x07) << 5) + (b >> 3 & 0x1F)
+ return [msb, lsb]
+
+
def convert_image_bytes(im, format):
"""Convert the supplied image to the equivalent bytes required by the QMK firmware.
"""
@@ -248,41 +254,25 @@ def convert_image_bytes(im, format):
if image_format == 'IMAGE_FORMAT_RGB565':
# Take the red, green, and blue channels
- image_bytes_red = im.tobytes("raw", "R")
- image_bytes_green = im.tobytes("raw", "G")
- image_bytes_blue = im.tobytes("raw", "B")
- image_pixels_len = len(image_bytes_red)
+ red = im.tobytes("raw", "R")
+ green = im.tobytes("raw", "G")
+ blue = im.tobytes("raw", "B")
# No palette
palette = None
- bytearray = []
- for x in range(image_pixels_len):
- # 5 bits of red, 3 MSb of green
- byte = ((image_bytes_red[x] >> 3 & 0x1F) << 3) + (image_bytes_green[x] >> 5 & 0x07)
- bytearray.append(byte)
- # 3 LSb of green, 5 bits of blue
- byte = ((image_bytes_green[x] >> 2 & 0x07) << 5) + (image_bytes_blue[x] >> 3 & 0x1F)
- bytearray.append(byte)
+ bytearray = [byte for r, g, b in zip(red, green, blue) for byte in rgb_to565(r, g, b)]
if image_format == 'IMAGE_FORMAT_RGB888':
# Take the red, green, and blue channels
- image_bytes_red = im.tobytes("raw", "R")
- image_bytes_green = im.tobytes("raw", "G")
- image_bytes_blue = im.tobytes("raw", "B")
- image_pixels_len = len(image_bytes_red)
+ red = im.tobytes("raw", "R")
+ green = im.tobytes("raw", "G")
+ blue = im.tobytes("raw", "B")
# No palette
palette = None
- bytearray = []
- for x in range(image_pixels_len):
- byte = image_bytes_red[x]
- bytearray.append(byte)
- byte = image_bytes_green[x]
- bytearray.append(byte)
- byte = image_bytes_blue[x]
- bytearray.append(byte)
+ bytearray = [byte for r, g, b in zip(red, green, blue) for byte in (r, g, b)]
if len(bytearray) != expected_byte_count:
raise Exception(f"Wrong byte count, was {len(bytearray)}, expected {expected_byte_count}")
diff --git a/platforms/chibios/drivers/usbpd_stm32g4.c b/platforms/chibios/drivers/usbpd_stm32g4.c
index 0096f22f077c..21b8f6db95a3 100644
--- a/platforms/chibios/drivers/usbpd_stm32g4.c
+++ b/platforms/chibios/drivers/usbpd_stm32g4.c
@@ -22,8 +22,6 @@
// Initialises the USBPD subsystem
__attribute__((weak)) void usbpd_init(void) {
- // Disable dead-battery signals
- PWR->CR3 |= PWR_CR3_UCPD_DBDIS;
// Enable the clock for the UCPD1 peripheral
RCC->APB1ENR2 |= RCC_APB1ENR2_UCPD1EN;
@@ -46,6 +44,11 @@ __attribute__((weak)) void usbpd_init(void) {
CR |= UCPD_CR_ANAMODE | UCPD_CR_CCENABLE_Msk;
// Apply the changes
UCPD1->CR = CR;
+
+ // Disable dead-battery signals only after UCPD1 is configured to ensure
+ // that the transition does not go through any intermediate state without
+ // any pull-down resistance.
+ PWR->CR3 |= PWR_CR3_UCPD_DBDIS;
}
// Gets the current state of the USBPD allowance
diff --git a/platforms/chibios/mcu_selection.mk b/platforms/chibios/mcu_selection.mk
index 56b81493de28..f14b16b169d2 100644
--- a/platforms/chibios/mcu_selection.mk
+++ b/platforms/chibios/mcu_selection.mk
@@ -546,6 +546,9 @@ ifneq ($(findstring STM32G431, $(MCU)),)
# Bootloader address for STM32 DFU
STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
+
+ # Default to transient driver as ChibiOS EFL is currently broken for single-bank G4xx devices
+ EEPROM_DRIVER ?= transient
endif
ifneq ($(findstring STM32G474, $(MCU)),)
diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c
index ea28801a40ad..158112f31dad 100644
--- a/quantum/rgblight/rgblight.c
+++ b/quantum/rgblight/rgblight.c
@@ -1277,7 +1277,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) {
k = pos + j * increment;
if (k > RGBLED_NUM) {
- k = k % RGBLED_NUM;
+ k = k % (RGBLED_NUM);
}
if (k < 0) {
k = k + rgblight_ranges.effect_num_leds;
diff --git a/users/mattly/mattly.c b/users/mattly/mattly.c
index afb1c75df14b..9e8e7cfc9768 100644
--- a/users/mattly/mattly.c
+++ b/users/mattly/mattly.c
@@ -31,6 +31,9 @@ void layer_state_set_rgb(layer_state_t state) {
case _NAVNUM_WIN:
rgblight_sethsv_noeeprom(HSV_NAVNUM);
break;
+ case _GAME:
+ rgblight_sethsv_noeeprom(HSV_GAME);
+ break;
case _FUNCT:
case _FUNCT_WIN:
rgblight_sethsv_noeeprom(HSV_FUNCT);
diff --git a/users/mattly/mattly.h b/users/mattly/mattly.h
index 5f6b7c5f0926..2a151939b879 100644
--- a/users/mattly/mattly.h
+++ b/users/mattly/mattly.h
@@ -25,12 +25,14 @@ enum {
_NAVNUM,
_NAVNUM_WIN,
_SYMBOL,
+ _GAME,
_FUNCT,
_FUNCT_WIN,
};
// == System
#define TOG_WIN TG(_OVER_WIN)
+#define TOG_GAM TG(_GAME)
// == Thumbs
// left hand
@@ -47,68 +49,73 @@ enum {
#define NAVLOCK TG(_NAVNUM)
#define SYMLOCK TG(_SYMBOL)
-
// == QWERTY
// left hand home row
-#define A_CTL MT(MOD_LCTL, KC_A)
-#define A_GUI MT(MOD_LGUI, KC_A)
-#define S_ALT MT(MOD_LALT, KC_S)
-#define D_GUI MT(MOD_LGUI, KC_D)
-#define D_CTL MT(MOD_LCTL, KC_D)
-#define F_SFT MT(MOD_LSFT, KC_F)
+#define A_CTL MT(MOD_LCTL, KC_A)
+#define A_GUI MT(MOD_LGUI, KC_A)
+#define S_ALT MT(MOD_LALT, KC_S)
+#define D_GUI MT(MOD_LGUI, KC_D)
+#define D_CTL MT(MOD_LCTL, KC_D)
+#define F_SFT MT(MOD_LSFT, KC_F)
// left hand aux
-#define W_CTL MT(MOD_LCTL, KC_W)
-#define W_GUI MT(MOD_LGUI, KC_W)
-#define E_ALT MT(MOD_LALT, KC_E)
-#define R_GUI MT(MOD_LGUI, KC_R)
-#define R_CTL MT(MOD_LCTL, KC_R)
+#define W_CTL MT(MOD_LCTL, KC_W)
+#define W_GUI MT(MOD_LGUI, KC_W)
+#define E_ALT MT(MOD_LALT, KC_E)
+#define R_GUI MT(MOD_LGUI, KC_R)
+#define R_CTL MT(MOD_LCTL, KC_R)
// right hand home row
-#define J_SFT MT(MOD_RSFT, KC_J)
-#define K_GUI MT(MOD_RGUI, KC_K)
-#define K_CTL MT(MOD_RCTL, KC_K)
-#define L_ALT MT(MOD_RALT, KC_L)
+#define J_SFT MT(MOD_RSFT, KC_J)
+#define K_GUI MT(MOD_RGUI, KC_K)
+#define K_CTL MT(MOD_RCTL, KC_K)
+#define L_ALT MT(MOD_RALT, KC_L)
#define MINSCTL MT(MOD_RCTL, KC_MINS)
#define MINSGUI MT(MOD_RGUI, KC_MINS)
// right hand aux
-#define U_GUI MT(MOD_RGUI, KC_U)
-#define U_CTL MT(MOD_RCTL, KC_U)
-#define I_ALT MT(MOD_RALT, KC_I)
-#define O_CTL MT(MOD_RCTL, KC_O)
-#define O_GUI MT(MOD_RGUI, KC_O)
+#define U_GUI MT(MOD_RGUI, KC_U)
+#define U_CTL MT(MOD_RCTL, KC_U)
+#define I_ALT MT(MOD_RALT, KC_I)
+#define O_CTL MT(MOD_RCTL, KC_O)
+#define O_GUI MT(MOD_RGUI, KC_O)
// == OS X default keys
-// movement by word
+// movement by text
#define M_BWORD LALT(KC_LEFT)
#define W_BWORD LCTL(KC_LEFT)
#define M_FWORD LALT(KC_RIGHT)
#define W_FWORD LCTL(KC_RIGHT)
+#define M_BLINE LGUI(KC_LEFT)
+#define M_ELINE LGUI(KC_RIGHT)
+
+#define M_BPARA LOPT(KC_UP)
+#define M_NPARA LOPT(KC_DOWN)
+
// gui navigation
-#define M_NXWIN LGUI(KC_GRV) // Next Window
+#define M_NXWIN LGUI(KC_GRV) // Next Window
#define W_NXWIN LALT(KC_TAB)
-#define M_PVWIN LGUI(LSFT(KC_GRV)) // Prev Window
+#define M_PVWIN LGUI(LSFT(KC_GRV)) // Prev Window
#define W_PVWIN LALT(LSFT(KC_TAB))
-#define M_NXTAB LGUI(LSFT(KC_RBRC)) // Next Tab
+#define M_NXTAB LGUI(LSFT(KC_RBRC)) // Next Tab
#define W_NXTAB LCTL(KC_PGDN)
-#define M_PVTAB LGUI(LSFT(KC_LBRC)) // Prev Tab
+#define M_PVTAB LGUI(LSFT(KC_LBRC)) // Prev Tab
#define W_PVTAB LCTL(KC_PGUP)
-#define M_NAVBK LGUI(KC_LBRC) // Navigate Forward
+#define M_NAVBK LGUI(KC_LBRC) // Navigate Forward
#define W_NAVBK LALT(KC_LEFT)
-#define M_NAVFW LGUI(KC_RBRC) // Navigate Back
+#define M_NAVFW LGUI(KC_RBRC) // Navigate Back
#define W_NAVFW LALT(KC_RIGHT)
// == UNDERGLOW
#ifdef RGBLIGHT_ENABLE
-#define HSV_CAPS 55, 255, 255
-#define HSV_ERR 30, 196, 196
-#define HSV_MAC 20, 255, 128
-#define HSV_WIN 10, 255, 128
-#define HSV_SYMBOL 235, 255, 255
-#define HSV_NAVNUM 250, 255, 255
-#define HSV_FUNCT 210, 255, 255
-#define HSV_RESET 180, 255, 255
+#define HSV_CAPS 55, 255, 255
+#define HSV_ERR 0, 255, 96
+#define HSV_MAC 250, 255, 192
+#define HSV_WIN 250, 192, 128
+#define HSV_SYMBOL 235, 255, 255
+#define HSV_NAVNUM 20, 255, 255
+#define HSV_GAME 40, 255, 255
+#define HSV_FUNCT 200, 255, 255
+#define HSV_RESET 180, 255, 255
#endif
#endif
-
diff --git a/users/mattly/rules.mk b/users/mattly/rules.mk
index 85cdcc91f003..96f076582538 100644
--- a/users/mattly/rules.mk
+++ b/users/mattly/rules.mk
@@ -1,3 +1,4 @@
SRC += mattly.c
LTO_ENABLE = yes
CONSOLE_ENABLE = yes
+RGB_MATRIX_ENABLE = no
diff --git a/users/miketronic/config.h b/users/miketronic/config.h
new file mode 100644
index 000000000000..4123caa5bc62
--- /dev/null
+++ b/users/miketronic/config.h
@@ -0,0 +1,12 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+
+#define DEBOUNCE 10
+#if defined(TAP_DANCE_ENABLE)
+# define TAP_CODE_DELAY 5
+# define TAP_HOLD_CAPS_DELAY 25
+#endif
+#define MACRO_TIMER 5
+#define ENABLE_COMPILE_KEYCODE
\ No newline at end of file
diff --git a/users/miketronic/miketronic.c b/users/miketronic/miketronic.c
new file mode 100644
index 000000000000..3c47a72462f6
--- /dev/null
+++ b/users/miketronic/miketronic.c
@@ -0,0 +1,17 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+
+
+__attribute__ ((weak)) void keyboard_post_init_keymap(void) { }
+
+// Init effect for RGB boards only
+void keyboard_post_init_user(void) {
+#ifdef RGB_MATRIX_ENABLE
+ rgblight_enable_noeeprom(); // enables Rgb, without saving settings
+ rgblight_sethsv_noeeprom(HSV_ORANGE); // sets the color without saving
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
+#endif
+ keyboard_post_init_keymap();
+}
\ No newline at end of file
diff --git a/users/miketronic/miketronic.h b/users/miketronic/miketronic.h
new file mode 100644
index 000000000000..4032215a1d7b
--- /dev/null
+++ b/users/miketronic/miketronic.h
@@ -0,0 +1,63 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+#include QMK_KEYBOARD_H
+
+#include "quantum.h"
+#include "wrappers.h"
+#include "action.h"
+#include "version.h"
+#include "process_records.h"
+#ifdef TAP_DANCE_ENABLE
+# include "tapdances.h"
+#endif
+
+enum layer_names {
+ _WM,
+ _QW,
+ _LOWER,
+ _RAISE,
+ _EX,
+ _FN,
+ _SYMB
+};
+
+
+// Layer macros
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define FN MO(_FN)
+#define EX MO(_EX)
+#define TEX LT(_EX, KC_T) // Tap for "T", hold for Extras layer
+#define BSYM LT(_SYMB, KC_B) // Tap for "B", hold for Symbols layer
+#define JSYM LT(_SYMB, KC_J) // Tap for "J", hold for Symbols layer
+#define FNZ LT(_FN, KC_Z) // Tap for "Z", hold for FN layer
+#define VLOWER LT(_LOWER, KC_V) // Tap for "V", hold for Lower layer
+#define KRAISE LT(_RAISE, KC_K) // Tap for "K", hold for Raise layer
+
+// Mod Tap
+//#define ASFT MT(MOD_LSFT, KC_A) // Tap for "A", hold for Shift
+#define ASFT SFT_T(KC_A) // Tap for "A", hold for Shift
+#define GGUI MT(MOD_LGUI, KC_G) // Tap for "G", hold for OS Key
+#define MGUI MT(MOD_LGUI, KC_M) // Tap for "M", hold for OS Key
+#define CTRLX MT(MOD_LCTL, KC_X) // Tap for "X", hold for Ctrl
+#define CALT MT(MOD_LALT, KC_C) // Tap for "C", hold for Alt
+#define L_ALT MT(MOD_RALT, KC_L) // Tap for "L", hold for Alt
+#define TBSHFT MT(MOD_LSFT, KC_TAB) // Tap for Tab, hold for Shift
+#define SLSHFT MT(MOD_RSFT, KC_SLSH) // Tap for Slash, hold for Shift
+#define SFT_ENT RSFT_T(KC_ENT) // Tap for Enter, hold for Shift
+#define OSSFT OSM(MOD_LSFT) // One shot left Shift
+
+// MISC
+#define CALTDEL LCTL(LALT(KC_DEL)) // Ctrl Alt Del
+#define TSKMGR LCTL(LSFT(KC_ESC)) // Task Manager
+#define CLIP LCTL(LALT(KC_Q)) // Clipboard (Ditto)
+#define SS LCTL(LALT(KC_G)) // Greenshot region
+#define NUM LSFT(KC_3)
+#define AT LSFT(KC_2)
+#define COPY LCTL(KC_C)
+#define PASTE LCTL(KC_V)
+#define ____ KC_TRNS
+#define XXXX KC_NO
+#define XXXXXXX KC_NO
diff --git a/users/miketronic/process_records.c b/users/miketronic/process_records.c
new file mode 100644
index 000000000000..5c60ddf10030
--- /dev/null
+++ b/users/miketronic/process_records.c
@@ -0,0 +1,151 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+#include "process_records.h"
+
+__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+__attribute__((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ switch (keycode) {
+ case VERSION:
+ if (!record->event.pressed) {
+ send_string_with_delay_P(PSTR(QMK_KEYBOARD ":" QMK_KEYMAP "\nVersion:" QMK_VERSION ", built: " QMK_BUILDDATE "\n"), MACRO_TIMER);
+ }
+ break;
+
+ case M01:
+ if (record->event.pressed) {
+ SEND_STRING("//a11");
+ }
+ break;
+
+ case M02:
+ if (record->event.pressed) {
+ SEND_STRING("//a12");
+ }
+ break;
+
+ case M03:
+ if (record->event.pressed) {
+ SEND_STRING("//a08");
+ }
+ break;
+
+ case M04:
+ if (record->event.pressed) {
+ SEND_STRING("//a09");
+ }
+ break;
+
+ case M05:
+ if (record->event.pressed) {
+ SEND_STRING("//th");
+ }
+ break;
+
+ case M06:
+ if (record->event.pressed) {
+ SEND_STRING("//re");
+ }
+ break;
+
+ case M07:
+ if (record->event.pressed) {
+ SEND_STRING("//yw");
+ }
+ break;
+
+ case M08:
+ if (record->event.pressed) {
+ tap_random_base64();
+ }
+ break;
+
+ case CCCV: // One key copy/paste
+ if (record->event.pressed) {
+ copy_paste_timer = timer_read();
+ } else {
+ if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
+ tap_code16(LCTL(KC_C));
+ } else { // Tap, paste
+ tap_code16(LCTL(KC_V));
+ }
+ }
+ break;
+
+ case IENTER: // Tap for letter "i", slight hold for "enter"
+ if (record->event.pressed) {
+ copy_paste_timer = timer_read();
+ } else {
+ if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, enter
+ tap_code16(KC_ENT);
+ } else { // Tap, "i"
+ tap_code16(KC_I);
+ }
+ }
+ break;
+
+ case PRN:
+ if (record->event.pressed) {
+ SEND_STRING("()");
+ tap_code(KC_LEFT);
+ }
+ break;
+
+ case BRACES:
+ if (record->event.pressed) {
+ uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
+ if (shifted) {
+ unregister_code(KC_LSFT);
+ unregister_code(KC_RSFT);
+ SEND_STRING("<>"SS_TAP(X_LEFT));
+ }
+ else {
+ SEND_STRING("[]"SS_TAP(X_LEFT));
+ }
+ }
+ break;
+
+#if defined(RGBLIGHT_ENABLE)
+ case RGB1:
+ if (record->event.pressed) {
+ rgblight_sethsv_noeeprom(HSV_BLUE);
+ }
+ break;
+
+ case RGB2:
+ if (record->event.pressed) {
+ rgblight_sethsv_noeeprom(HSV_RED);
+ }
+ break;
+
+ case RGB3:
+ if (record->event.pressed) {
+ rgblight_sethsv_noeeprom(HSV_ORANGE);
+ }
+ break;
+
+ case RGB4:
+ if (record->event.pressed) {
+ rgblight_sethsv_noeeprom(HSV_WHITE);
+ }
+ break;
+
+ case RGB5:
+ if (record->event.pressed) {
+ rgblight_sethsv_noeeprom(HSV_GREEN);
+ }
+ break;
+#endif
+ }
+ return process_record_keymap(keycode, record) && process_record_secrets(keycode, record);
+}
diff --git a/users/miketronic/process_records.h b/users/miketronic/process_records.h
new file mode 100644
index 000000000000..17737490a177
--- /dev/null
+++ b/users/miketronic/process_records.h
@@ -0,0 +1,38 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+#include "miketronic.h"
+
+
+bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
+uint16_t copy_paste_timer;
+
+enum custom_keycodes {
+ WM = QK_USER,
+ QW,
+ MAKE,
+ VERSION,
+ M01,
+ M02,
+ M03,
+ M04,
+ M05,
+ M06,
+ M07,
+ M08,
+ M09,
+ M10,
+ M11,
+ M12,
+ RGB1,
+ RGB2,
+ RGB3,
+ RGB4,
+ RGB5,
+ IENTER,
+ PRN,
+ BRACES,
+ CCCV
+};
diff --git a/users/miketronic/readme.md b/users/miketronic/readme.md
new file mode 100644
index 000000000000..619a84ec2e66
--- /dev/null
+++ b/users/miketronic/readme.md
@@ -0,0 +1,25 @@
+Copyright 2023 @miketronic -- Mike B
+SPDX-License-Identifier: GPL-2.0+
+
+# Layout for ortho 4x12 and 3x10 boards
+# My current daily drivers: Planck, Pi40 and Satpad
+
+**Objective:** I tried to make layouts with core functions that are able to be present on the 3x10 boards and adapt those to the "middle 3x10" of the 4x12 boards to make going back and forth between the two board sizes easier.
+
+
+##### My Main Layer - Workman
+
+| | | | | | | | | | | | |
+| ---- |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| ----:|
+| Tab/Esc | Q/Esc | D | R | W | B/SYM | J/SYM | F | U | P | BSPC | BSPC |
+| Tab/Shift | A | S | H | T/EX | G | Y | N | E | O | I/Enter | Enter|
+| Shft | Z | X | M | C | V | K | L | Spc/, | Spc/. | / | Up/Right |
+| FN | Ctrl | OS | Alt |Lower | Spc/Enter |Spc/Enter |Raise | SS| Clip | CopyPaste | Dn/Left |
+
+SYM - Symbols layer on hold
+FN - Function layer on hold
+EX - Extras layer on hold
+Clip - Macro to my clipboard app (Ditto)
+SS - Greenshot screenshot region
+
+##### Will add the other layers as I find time
\ No newline at end of file
diff --git a/users/miketronic/rules.mk b/users/miketronic/rules.mk
new file mode 100644
index 000000000000..bbd3e4131e08
--- /dev/null
+++ b/users/miketronic/rules.mk
@@ -0,0 +1,4 @@
+SRC += miketronic.c process_records.c
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+ SRC += $(USER_PATH)/tapdances.c
+endif
diff --git a/users/miketronic/tapdances.c b/users/miketronic/tapdances.c
new file mode 100644
index 000000000000..5fcf66062b11
--- /dev/null
+++ b/users/miketronic/tapdances.c
@@ -0,0 +1,33 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#include "miketronic.h"
+#include "tapdances.h"
+
+
+tap_dance_action_t tap_dance_actions[] = {
+
+ [T_BRC] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), // Tap once for Left Brace, twice for Right Brace
+ [T_MIN] = ACTION_TAP_DANCE_DOUBLE(KC_MINUS, KC_EQUAL), // Minus, Equals
+ [T_UMIN] = ACTION_TAP_DANCE_DOUBLE(KC_UNDS, KC_MINS), // Underscore, Minus
+ [T_GESC] = ACTION_TAP_DANCE_DOUBLE(KC_GRAVE, KC_ESCAPE), // Grave, Escape
+ [T_SE] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT), // Space, Enter
+ [T_MULTDIV] = ACTION_TAP_DANCE_DOUBLE(KC_PAST, KC_PSLS), // Multiply, Divide
+ [T_UR] = ACTION_TAP_DANCE_DOUBLE(KC_UP, KC_RGHT), // Up, Right
+ [T_DL] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN, KC_LEFT), // Down, Left
+ [T_CP] = ACTION_TAP_DANCE_DOUBLE(LCTL(KC_C), LCTL(KC_V)), // Copy, Paste
+ [T_DENT] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_ENT), // Dot, Enter
+ [T_IENT] = ACTION_TAP_DANCE_DOUBLE(KC_I, KC_ENT), // "I", Enter
+ [T_CSPC] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_COMM), // Space, Comma
+ [T_DSPC] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_DOT), // Space, Dot
+ [T_QEXC] = ACTION_TAP_DANCE_DOUBLE(KC_QUES, KC_EXLM), // "?", "!"
+ [T_QESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC), // "q", Escape
+ [T_TE] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_ESC), // Tab, Escape
+ [T_20] = ACTION_TAP_DANCE_DOUBLE(KC_2, KC_0), // "2", "0"
+ [T_SL] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_BSLS), // Slash, Backslash
+ [T_XX] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_RPRN), // Left Paren, Right Paren
+ [T_YY] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), // Left Bracket, Right Bracket
+ [T_ATH] = ACTION_TAP_DANCE_DOUBLE(KC_AT, KC_HASH), // "@", "#"
+ [T_PRAM] = ACTION_TAP_DANCE_DOUBLE(KC_PERC, KC_AMPR) // "%", "&"
+};
+
diff --git a/users/miketronic/tapdances.h b/users/miketronic/tapdances.h
new file mode 100644
index 000000000000..8135bac2695b
--- /dev/null
+++ b/users/miketronic/tapdances.h
@@ -0,0 +1,57 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+#include "quantum.h"
+
+
+#define TD_BRC TD(T_BRC)
+#define TD_ATH TD(T_ATH)
+#define TD_CSPC TD(T_CSPC)
+#define TD_DSPC TD(T_DSPC)
+#define TD_CP TD(T_CP)
+#define TD_DENT TD(T_DENT)
+#define TD_IENT TD(T_IENT)
+#define TD_MIN TD(T_MIN)
+#define TD_UMIN TD(T_UMIN)
+#define TD_GESC TD(T_GESC)
+#define TD_QESC TD(T_QESC)
+#define TD_QEXC TD(T_QEXC)
+#define TD_PRAM TD(T_PRAM)
+#define TD_SE TD(T_SE)
+#define TD_MD TD(T_MULTDIV)
+#define TD_UR TD(T_UR)
+#define TD_DL TD(T_DL)
+#define TD_TE TD(T_TE)
+#define TD_20 TD(T_20)
+#define TD_SL TD(T_SL)
+#define TD_XX TD(T_XX)
+#define TD_YY TD(T_YY)
+
+
+
+// Tap Dance
+enum tapdance_id{
+ T_BRC = 0,
+ T_ATH,
+ T_CSPC,
+ T_DSPC,
+ T_CP,
+ T_DENT,
+ T_IENT,
+ T_MIN,
+ T_UMIN,
+ T_GESC,
+ T_QESC,
+ T_QEXC,
+ T_SE,
+ T_MULTDIV,
+ T_UR,
+ T_DL,
+ T_TE,
+ T_20,
+ T_SL,
+ T_XX,
+ T_YY,
+ T_PRAM
+};
\ No newline at end of file
diff --git a/users/miketronic/wrappers.h b/users/miketronic/wrappers.h
new file mode 100644
index 000000000000..7d955f4172a9
--- /dev/null
+++ b/users/miketronic/wrappers.h
@@ -0,0 +1,226 @@
+// Copyright 2023 @miketronic -- Mike B
+// SPDX-License-Identifier: GPL-2.0+
+
+#pragma once
+#include "miketronic.h"
+
+/* Pattern adapted from users/drashna/wrapper.h
+ Define per-layout keymap sections. Also requires a wrapper.
+ Example:
+ #define LAYOUT_:name_wrapper(...) LAYOUT_:name(__VA_ARGS__)
+ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_MODS] = LAYOUT_:name _wrapper(
+ _______, ___________________BLANK___________________, ...
+ ...
+ ),
+ }
+*/
+
+
+// clang-format off
+# define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
+# define LAYOUT_planck_grid_wrapper(...) LAYOUT_planck_grid(__VA_ARGS__)
+#if (defined(KEYBOARD_hazel_satpad))
+# define LAYOUT_3x11_wrapper(...) LAYOUT(__VA_ARGS__)
+#endif
+#if (defined(KEYBOARD_mechwild_bde_rev2))
+# define LAYOUT_3x14_wrapper(...) LAYOUT(__VA_ARGS__)
+#endif
+#if (defined(KEYBOARD_hazel_bad_wings))
+# define LAYOUT_split_3x5_3_wrapper(...) LAYOUT_split_3x5_3(__VA_ARGS__)
+#endif
+#if (defined(KEYBOARD_idobao_id75_v1))
+# define LAYOUT_ortho_5x15_wrapper(...) LAYOUT_ortho_5x15(__VA_ARGS__)
+#endif
+
+
+#define _________NUMBER_01__________ KC_7, KC_8, KC_9
+#define _________NUMBER_02__________ KC_4, KC_5, KC_6
+#define _________NUMBER_03__________ KC_1, TD_20, KC_3
+
+
+
+#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
+#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
+#define _________________QWERTY_L3_________________ FNZ, KC_X, KC_C, VLOWER, KC_B
+
+#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
+#define _________________QWERTY_R2_________________ KC_H, KC_J, KRAISE, KC_L, KC_SCLN
+#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
+
+
+
+#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
+#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
+#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+
+#define ______________LONG_FUNC_LEFT_______________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6
+#define ______________LONG_FUNC_RIGHT______________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12
+
+#define _________________BLANK_5___________________ _______, _______, _______, _______, _______
+#define _________________BLANK_6___________________ _______, _______, _______, _______, _______, _______
+
+#define _________________LOWER_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
+#define _________________LOWER_L2__________________ _________________FUNC_LEFT_________________
+#define _________________LOWER_L3__________________ _________________FUNC_RIGHT________________
+
+#define _________________LOWER_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
+#define _________________LOWER_R2__________________ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
+#define _________________LOWER_R3__________________ _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+
+#define _______________LOWER_310_L1________________ PRN, BRACES, TD_SL, _______, _______
+#define _______________LOWER_310_L2________________ TD_ATH, TD_PRAM, _______, _______, _______
+#define _______________LOWER_310_L3________________ _______, _______, _______, _______, _______
+
+#define _______________LOWER_310_R1________________ _______, KC_7, KC_8, KC_9, _______
+#define _______________LOWER_310_R2________________ TD_DENT, KC_4, KC_5, KC_6, TD_UR
+#define _______________LOWER_310_R3________________ KC_0, KC_1, TD_20, KC_3, TD_DL
+
+#define _______________LOWER_412_L1________________ _______, PRN, BRACES, TD_SL, _______, _______
+#define _______________LOWER_412_L2________________ _______, TD_ATH, TD_PRAM, _______, _______, _______
+#define _______________LOWER_412_L3________________ _______, _______, _______, _______, _______, _______
+#define _______________LOWER_412_L4________________ _______, _______, _______, _______, _______, _______
+
+#define _______________LOWER_412_R1________________ _______, KC_7, KC_8, KC_9, _______, _______
+#define _______________LOWER_412_R2________________ TD_DENT, KC_4, KC_5, KC_6, _______, _______
+#define _______________LOWER_412_R3________________ KC_0, KC_1, TD_20, KC_3, _______, TD_UR
+#define _______________LOWER_412_R4________________ _______, _______, KC_BSPC, KC_SPC, TD_DENT, TD_DL
+
+
+
+#define _________________RAISE_L1__________________ ________________NUMBER_LEFT________________
+#define _________________RAISE_L2__________________ ___________________BLANK___________________
+#define _________________RAISE_L3__________________ ___________________BLANK___________________
+
+#define _________________RAISE_R1__________________ ________________NUMBER_RIGHT_______________
+#define _________________RAISE_R2__________________ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC
+#define _________________RAISE_R3__________________ _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+
+#define _______________RAISE_310_L1________________ QK_BOOT, DB_TOGG, _______, _______, QK_MAKE
+#define _______________RAISE_310_L2________________ KC_LSFT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD
+#define _______________RAISE_310_L3________________ _______, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD
+
+#define _______________RAISE_310_R1________________ _______, KC_F7, KC_F8, KC_F9, KC_F10
+#define _______________RAISE_310_R2________________ TD_UMIN, KC_F4, KC_F5, KC_F6, KC_F11
+#define _______________RAISE_310_R3________________ _______, KC_F1, KC_F2, KC_F3, KC_F12
+
+#define _______________RAISE_412_L1________________ QK_BOOT, DB_TOGG, _______, _______, _______, QK_MAKE
+#define _______________RAISE_412_L2________________ KC_LSFT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, WM
+#define _______________RAISE_412_L3________________ _______, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, QW
+
+#define _______________RAISE_412_R1________________ _______, _______, KC_F7, KC_F8, KC_F9, KC_F10
+#define _______________RAISE_412_R2________________ _______, _______, KC_F4, KC_F5, KC_F6, KC_F11
+#define _______________RAISE_412_R3________________ _______, TD_UMIN, KC_F1, KC_F2, KC_F3, KC_F12
+
+
+
+#define ______________EXTRAS_310_L1________________ KC_EXLM, _______, _______, _______, _______
+#define ______________EXTRAS_310_L2________________ KC_LSFT, _______, _______, _______, _______
+#define ______________EXTRAS_310_L3________________ _______, _______, _______, _______, _______
+
+#define ______________EXTRAS_310_R1________________ _______, TD_SL, PRN, BRACES, KC_SCLN
+#define ______________EXTRAS_310_R2________________ QK_LEAD, TD_ATH, TD_PRAM, _______, KC_QUOT
+#define ______________EXTRAS_310_R3________________ _______, _______, KC_COMM, KC_DOT, KC_QUES
+
+#define ______________EXTRAS_412_L1________________ _______, KC_EXLM, _______, _______, _______, _______
+#define ______________EXTRAS_412_L2________________ KC_LSFT, _______, _______, _______, _______, _______
+#define ______________EXTRAS_412_L3________________ _______, _______, _______, _______, _______, _______
+#define ______________EXTRAS_412_L4________________ _______, _______, _______, _______, _______, TD_SE
+
+#define ______________EXTRAS_412_R1________________ _______, TD_SL, PRN, BRACES, KC_SCLN, _______
+#define ______________EXTRAS_412_R2________________ QK_LEAD, TD_ATH, TD_PRAM, _______, KC_QUOT, _______
+#define ______________EXTRAS_412_R3________________ _______, _______, KC_COMM, KC_DOT, KC_QUES, _______
+#define ______________EXTRAS_412_R4________________ TD_SE, _______, _______, _______, _______, _______
+
+
+
+#define _____________FUNCTION_310_L1_______________ CCCV, CLIP, SS, _______, _______
+#define _____________FUNCTION_310_L2_______________ TBSHFT, M05, M06, M07, M08
+#define _____________FUNCTION_310_L3_______________ _______, M01, M02, M03, M04
+
+#define _____________FUNCTION_310_R1_______________ _______, TD_SL, KC_UP, _______, KC_DEL
+#define _____________FUNCTION_310_R2_______________ _______, KC_LEFT, KC_DOWN, KC_RGHT, TD_UR
+#define _____________FUNCTION_310_R3_______________ _______, _______, KC_COMM, KC_DOT, TD_DL
+
+#define _____________FUNCTION_412_L1_______________ CCCV, CLIP, SS, _______, _______, _______
+#define _____________FUNCTION_412_L2_______________ TBSHFT, M05, M06, M07, M08, _______
+#define _____________FUNCTION_412_L3_______________ _______, M01, M02, M03, M04, _______
+#define _____________FUNCTION_412_L4_______________ _______, RGB1, RGB2, RGB3, RGB4, _______
+
+#define _____________FUNCTION_412_R1_______________ _______, T_SL, KC_UP, _______, _______, KC_DEL
+#define _____________FUNCTION_412_R2_______________ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______
+#define _____________FUNCTION_412_R3_______________ _______, _______, KC_COMM, KC_DOT, KC_QUES, T_UR
+#define _____________FUNCTION_412_R4_______________ _______, _______, _______, _______, _______, T_DL
+
+#define ____________FUNCTION_ID75_TOP_R____________ M06, M07, M08, M09, M10, KC_DEL
+
+
+
+#define _____________SYMBOLS_310_L1________________ KC_DLR, KC_CIRC, KC_LABK, KC_RABK, ____
+#define _____________SYMBOLS_310_L2________________ KC_PERC, KC_COLN, KC_SCLN, KC_PLUS, KC_EQL
+#define _____________SYMBOLS_310_L3________________ KC_AMPR, KC_QUOT, KC_DQUO, KC_ASTR, KC_HASH
+
+#define _____________SYMBOLS_310_R1________________ ____, KC_PIPE, KC_LBRC, KC_RBRC, KC_MINS
+#define _____________SYMBOLS_310_R2________________ XXXX, XXXX, KC_LPRN, KC_RPRN, KC_UNDS
+#define _____________SYMBOLS_310_R3________________ KC_EXLM, KC_QUES, KC_SLSH, KC_BSLS, KC_AT
+
+
+
+#define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
+#define _________________ADJUST_L2_________________ MU_TOGG, CK_TOGG, AU_ON, AU_OFF, AG_NORM
+#define _________________ADJUST_L3_________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
+
+#define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
+#define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN
+#define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
+
+
+#define _________FOUR_001__________ KC_BSPC, M08, M08, KC_MUTE
+#define _________FOUR_002__________ KC_ENT, M08, PRN, TD_UR
+#define _________FOUR_003__________ KC_BSLS, TD_ATH, BRACES, TD_DL
+
+#define _________3KEY_LEFT___________ OSSFT, KC_SPC, LOWER
+#define _________3KEY_RIGHT__________ RAISE, KC_ENT, CCCV
+
+#define ________3KEY_ID75_01_________ OSSFT, QK_LEAD, LOWER
+#define ________3KEY_ID75_02_________ KC_7, KC_8, KC_9
+#define ________3KEY_ID75_03_________ KC_4, KC_5, KC_6
+#define ________3KEY_ID75_04_________ KC_1, TD_20, KC_3
+#define ________3KEY_ID75_05_________ KC_SPC, TD_DENT, KC_ENT
+
+
+#define _____________WORKMAN_310_001_L_____________ TD_QESC, KC_D, KC_R, KC_W, BSYM
+#define _____________WORKMAN_310_001_R_____________ JSYM, KC_F, KC_U, KC_P, KC_BSPC
+#define _____________WORKMAN_310_002_L_____________ ASFT, KC_S, KC_H, TEX, KC_G
+#define _____________WORKMAN_310_002_R_____________ KC_Y, KC_N, KC_E, KC_O, KC_I
+#define _____________WORKMAN_310_003_L_____________ FNZ, CTRLX, MGUI, CALT, VLOWER
+#define _____________WORKMAN_310_003_R_____________ KRAISE, KC_L, TD_CSPC, TD_DSPC, SFT_ENT
+#define _____________WORKMAN_310_004_L_____________ FN, KC_LCTL, KC_LGUI, KC_LALT, LOWER
+#define _____________WORKMAN_310_004_R_____________ RAISE, SS, CLIP, CCCV, FN
+
+#define _____________WORKMAN_410_003_L_____________ FNZ, KC_X, KC_M, KC_C, KC_V
+#define _____________WORKMAN_410_003_R_____________ KC_K, KC_L, TD_CSPC, TD_DSPC, SFT_ENT
+
+#define _____________WORKMAN_311_001_L_____________ TD_QESC, KC_D, KC_R, KC_W, BSYM
+#define _____________WORKMAN_311_001_R_____________ JSYM, KC_F, KC_U, KC_P, KC_BSPC
+#define _____________WORKMAN_311_002_L_____________ ASFT, KC_S, KC_H, TEX, KC_G
+#define _____________WORKMAN_311_002_R_____________ KC_Y, KC_N, KC_E, KC_O, KC_I
+#define _____________WORKMAN_311_003_L_____________ FNZ, CTRLX, MGUI, CALT, VLOWER, KC_ENT
+#define _____________WORKMAN_311_003_R_____________ KRAISE, KC_L, TD_CSPC, TD_DSPC, SFT_ENT
+
+#define _____________WORKMAN_412_001_L_____________ TD_TE, TD_QESC, KC_D, KC_R, KC_W, BSYM
+#define _____________WORKMAN_412_001_R_____________ JSYM, KC_F, KC_U, KC_P, KC_BSPC, KC_BSPC
+#define _____________WORKMAN_412_002_L_____________ TBSHFT, KC_A, KC_S, KC_H, TEX, KC_G
+#define _____________WORKMAN_412_002_R_____________ KC_Y, KC_N, KC_E, KC_O, KC_I, KC_ENT
+#define _____________WORKMAN_412_003_L_____________ KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V
+#define _____________WORKMAN_412_003_R_____________ KC_K, KC_L, TD_CSPC, TD_DSPC, SFT_ENT, TD_UR
+#define _____________WORKMAN_412_004_L_____________ FN, KC_LCTL, KC_LGUI, KC_LALT, LOWER, TD_SE
+#define _____________WORKMAN_412_004_R_____________ TD_SE, RAISE, SS, CLIP, CCCV, TD_DL
+
+#define _____________WORKMAN_ID75_TOP_L____________ KC_ESC, M01, M02, M03, M04, M05
+#define _____________WORKMAN_ID75_TOP_R____________ M06, M07, M08, M09, M10, KC_BSPC
+#define _____________WORKMAN_ID75_BOT_L____________ FN, KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC
+#define _____________WORKMAN_ID75_BOT_R____________ KC_ENT, RAISE, SS, CLIP, CCCV, TD_DL
+
+// clang-format on
\ No newline at end of file
diff --git a/users/scotto/config.h b/users/scotto/config.h
new file mode 100644
index 000000000000..34fe069d6e5f
--- /dev/null
+++ b/users/scotto/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// config added when Tap Dance is enabled
+#ifdef TAP_DANCE_ENABLE
+# ifdef TAPPING_TERM
+# undef TAPPING_TERM
+# define TAPPING_TERM 135
+# endif
+# define TAPPING_TERM_PER_KEY
+# define PERMISSIVE_HOLD
+#endif
diff --git a/users/scotto/readme.md b/users/scotto/readme.md
new file mode 100644
index 000000000000..f7fdeb24c426
--- /dev/null
+++ b/users/scotto/readme.md
@@ -0,0 +1,17 @@
+# Scotto
+
+Applies to layouts:
+- LAYOUT_ortho_4x10
+- LAYOUT_split_3x5_2
+- LAYOUT_split_3x5_3
+
+### QWERTY
+
+Scotto's default functional layout is Colemak. To compile this layout in QWERTY (US English), append compile command with `KEYMAP=QWERTY` environment variable.
+```
+qmk compile -kb -km scotto -e KEYMAP=QWERTY
+```
+Example for [Scotto34](/keyboards/scottokeebs/scotto34):
+```
+qmk compile -kb scottokeebs/scotto34 -km scotto -e KEYMAP=QWERTY
+```
diff --git a/users/scotto/rules.mk b/users/scotto/rules.mk
new file mode 100644
index 000000000000..50a019667543
--- /dev/null
+++ b/users/scotto/rules.mk
@@ -0,0 +1,11 @@
+SRC += scotto.c
+
+TAP_DANCE_ENABLE = yes
+
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+ SRC += tap_dance.c
+endif
+
+ifneq ($(strip $(KEYMAP)),)
+ OPT_DEFS += -DKEYMAP_$(KEYMAP)
+endif
diff --git a/users/scotto/scotto.c b/users/scotto/scotto.c
new file mode 100644
index 000000000000..41520973c6f0
--- /dev/null
+++ b/users/scotto/scotto.c
@@ -0,0 +1,15 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "scotto.h"
diff --git a/users/scotto/scotto.h b/users/scotto/scotto.h
new file mode 100644
index 000000000000..023906852e52
--- /dev/null
+++ b/users/scotto/scotto.h
@@ -0,0 +1,69 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include QMK_KEYBOARD_H
+
+#ifdef TAP_DANCE_ENABLE
+ #include "tap_dance.h"
+#endif
+
+// Assign rows of keycodes to a single def each
+#define __QWERTY1__ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P
+#define __QWERTY2__ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC
+#define __QWERTY3a_ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
+#define __QWERTY3b_ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
+
+#define __COLEMAK1__ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC
+#define __COLEMAK2__ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O
+#define __COLEMAK3a_ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
+#define __COLEMAK3b_ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
+
+#define ______________SYM_MEDIA_NAV1______________ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL
+#define ______________SYM_MEDIA_NAV2______________ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT
+#define ______________SYM_MEDIA_NAV3______________ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILD, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS)
+
+#define _________________NUM_SYM1_________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC
+#define _________________NUM_SYM2_________________ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0
+#define _________________NUM_SYM3a________________ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
+#define _________________NUM_SYM3b________________ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(8), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
+
+#define ________________FUNC_SYS1a________________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(5), TO(4)
+#define ________________FUNC_SYS1b________________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4), TO(5), TO(0)
+#define ________________FUNC_SYS2_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+#define ________________FUNC_SYS3_________________ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12
+
+#define _______THUMB6_1_______ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
+#define _______THUMB6_4_______ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LALT, LCTL_T(KC_SPC), LT(6, KC_TAB), LT(7, KC_ENT), TD(TD_LALT_ESC_WINDOWS_EMOJI)
+#define _______THUMB6_5_______ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(6, KC_TAB), LT(7, KC_ENT), TD(TD_LALT_ESC_WINDOWS_EMOJI)
+#define _____THUMB6_TRNS______ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+
+#define _______THUMB4_1_______ TD(TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI), LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+#define _______THUMB4_4_______ TD(TD_ESC_LCTL_LALT_WINDOWS_EMOJI), LCTL_T(KC_SPC), LT(6, KC_TAB), LT(7, KC_ENT)
+#define _______THUMB4_5_______ KC_LCTL, KC_SPC, LT(6, KC_TAB), LT(7, KC_ENT)
+#define _____THUMB4_TRNS______ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+
+// set functional layout
+#if defined (KEYMAP_QWERTY)
+ #define _________________KEYMAP1__________________ __QWERTY1__
+ #define _________________KEYMAP2__________________ __QWERTY2__
+ #define _________________KEYMAP3a_________________ __QWERTY3a_
+ #define _________________KEYMAP3b_________________ __QWERTY3b_
+#else
+ #define _________________KEYMAP1__________________ __COLEMAK1__
+ #define _________________KEYMAP2__________________ __COLEMAK2__
+ #define _________________KEYMAP3a_________________ __COLEMAK3a_
+ #define _________________KEYMAP3b_________________ __COLEMAK3b_
+#endif
diff --git a/users/scotto/tap_dance.c b/users/scotto/tap_dance.c
new file mode 100644
index 000000000000..e6183843341f
--- /dev/null
+++ b/users/scotto/tap_dance.c
@@ -0,0 +1,154 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "tap_dance.h"
+#include "scotto.h"
+
+// Create an instance of 'td_tap_t' for the 'x' tap dance.
+static td_tap_t xtap_state = {
+ .is_press_action = true,
+ .state = TD_NONE
+};
+
+td_state_t cur_dance(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ return TD_SINGLE_TAP;
+ } else {
+ return TD_SINGLE_HOLD;
+ }
+ } else if (state->count == 2) {
+ if (state->interrupted || !state->pressed) {
+ return TD_DOUBLE_TAP;
+ } else {
+ return TD_DOUBLE_HOLD;
+ }
+ } else if (state->count == 3) {
+ if (state->interrupted || !state->pressed) {
+ return TD_TRIPLE_TAP;
+ } else {
+ return TD_TRIPLE_HOLD;
+ }
+ }
+
+ return TD_UNKNOWN;
+}
+
+void td_esc_lalt_lctl_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: tap_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
+ case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
+ default: break;
+ }
+}
+
+void td_esc_lalt_lctl_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ case TD_DOUBLE_HOLD: unregister_code(KC_LCTL); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_esc_lctl_lalt_windows_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: tap_code16(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
+ case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
+ default: break;
+ }
+}
+
+void td_esc_lctl_lalt_windows_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ case TD_DOUBLE_HOLD: unregister_code(KC_LALT); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_lalt_esc_windowr_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LALT); break;
+ case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
+ case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
+ default: break;
+ }
+}
+
+void td_lalt_esc_windowr_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+void td_lctl_esc_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
+ xtap_state.state = cur_dance(state);
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: register_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
+ case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
+ case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
+ default: break;
+ }
+}
+
+void td_lctl_esc_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
+ switch (xtap_state.state) {
+ case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
+ case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
+ default: break;
+ }
+ xtap_state.state = TD_NONE;
+}
+
+ // Tap Dance definitions
+tap_dance_action_t tap_dance_actions[] = {
+ [TD_LCTL_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lctl_esc_spotlight_emoji_finished, td_lctl_esc_spotlight_emoji_reset),
+ [TD_LALT_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lalt_esc_windowr_emoji_finished, td_lalt_esc_windowr_emoji_reset),
+ [TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_esc_lalt_lctl_spotlight_emoji_finished, td_esc_lalt_lctl_spotlight_emoji_reset),
+ [TD_ESC_LCTL_LALT_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_esc_lctl_lalt_windows_emoji_finished, td_esc_lctl_lalt_windows_emoji_reset),
+};
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI) :
+ case TD(TD_LALT_ESC_WINDOWS_EMOJI) :
+ case TD(TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI) :
+ case TD(TD_ESC_LCTL_LALT_WINDOWS_EMOJI) :
+ case LGUI_T(KC_SPC) :
+ case LT(1, KC_SPC) :
+ case LT(1, KC_TAB) :
+ case LT(2, KC_ENT) :
+ return 200;
+ default:
+ return TAPPING_TERM;
+ }
+};
diff --git a/users/scotto/tap_dance.h b/users/scotto/tap_dance.h
new file mode 100644
index 000000000000..4082d2b9fbad
--- /dev/null
+++ b/users/scotto/tap_dance.h
@@ -0,0 +1,39 @@
+/*
+Copyright 2023 Joe Scotto
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+#include "scotto.h"
+
+typedef enum {
+ TD_NONE = 0,
+ TD_UNKNOWN,
+ TD_SINGLE_HOLD,
+ TD_DOUBLE_HOLD,
+ TD_TRIPLE_HOLD,
+ TD_SINGLE_TAP,
+ TD_DOUBLE_TAP,
+ TD_TRIPLE_TAP
+} td_state_t;
+
+typedef struct {
+ bool is_press_action;
+ td_state_t state;
+} td_tap_t;
+
+enum {
+ TD_LCTL_ESC_SPOTLIGHT_EMOJI = 0,
+ TD_LALT_ESC_WINDOWS_EMOJI,
+ TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI,
+ TD_ESC_LCTL_LALT_WINDOWS_EMOJI
+};
diff --git a/users/zigotica/rows.h b/users/zigotica/rows.h
index 18f08ccb0b78..575b32186e85 100644
--- a/users/zigotica/rows.h
+++ b/users/zigotica/rows.h
@@ -15,8 +15,10 @@ along with this program. If not, see .
#include "zigotica.h"
// clang-format off
-#define _BLANK_ROW _______, _______, _______, _______, _______
#define _BLANK_THUMB _______, _______
+#define _BLANK_3 _______, _______, _______
+#define _BLANK_4 _______, _______, _______, _______
+#define _BLANK_ROW _______, _______, _______, _______, _______
/*
* STENAI Layer
@@ -60,12 +62,14 @@ along with this program. If not, see .
#define _COLEMAK_R3 KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
#define _QWERTY_L1 KC_Q, KC_W, KC_E, KC_R, KC_T
-#define _QWERTY_L2 KC_A, KC_S, KC_D, KC_F, KC_G
+#define _QWERTY_L2 LALT_T(KC_A), LCTL_T(KC_S), LSFT_T(KC_D), LGUI_T(KC_F), KC_G
#define _QWERTY_L3 KC_Z, KC_X, KC_C, KC_V, KC_B
+#define _QWERTY_LT LT(_NUM, KC_TAB), LT(_NAV, KC_SPC)
#define _QWERTY_R1 KC_Y, KC_U, KC_I, KC_O, KC_P
-#define _QWERTY_R2 KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT
+#define _QWERTY_R2 KC_H, RGUI_T(KC_J), RSFT_T(KC_K), RCTL_T(KC_L), RALT_T(KC_SCLN)
#define _QWERTY_R3 KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
+#define _QWERTY_RT LT(_SYM, KC_SPC), LT(_FN, KC_ENT)
/*
* NUM Layer
@@ -191,4 +195,17 @@ along with this program. If not, see .
#define ____FN_R2 _______, KC_F1, KC_F2, KC_F3, KC_F11
#define ____FN_R3 _______, KC_F4, KC_F5, KC_F6, KC_F12
#define ____FN_RT _BLANK_THUMB
+
+
+// Ortho short rows
+#define ____NUM15 KC_1, KC_2, KC_3, KC_4, KC_5
+#define ____NUM60 KC_6, KC_7, KC_8, KC_9, KC_0
+#define ____FN_15 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define ____FN_60 KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+#define ____LMODS KC_LCTL, KC_LALT, KC_LGUI
+#define ____TARRS _______, KC_UP, _______
+#define ____BARRS KC_LEFT, KC_DOWN, KC_RIGHT
+#define ____LORTH ____LMODS, KC_MINS
+#define ____RORTH KC_BSPC, KC_SCLN, KC_BSLS, KC_SLSH
+
// clang-format on
diff --git a/users/zigotica/rules.mk b/users/zigotica/rules.mk
index 019e6f6dda1b..93b0b5704d1c 100644
--- a/users/zigotica/rules.mk
+++ b/users/zigotica/rules.mk
@@ -5,7 +5,7 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
endif
ifeq ($(strip $(COMBO_ENABLE)), yes)
- SRC += combos.c
+ INTROSPECTION_KEYMAP_C = combos.c
endif
ifeq ($(strip $(OLED_ENABLE)), yes)
diff --git a/users/zigotica/zigotica.h b/users/zigotica/zigotica.h
index e85a04edbedc..e7ac83e0dcbc 100644
--- a/users/zigotica/zigotica.h
+++ b/users/zigotica/zigotica.h
@@ -16,7 +16,7 @@ along with this program. If not, see .
#include "rows.h"
-#ifdef SPLIT_KEYBOARD
+#if defined(SPLIT_KEYBOARD) || defined(ORTHOLINEAR_KEYBOARD)
enum userspace_layers {
BASE = 0,
_NUM,