diff --git a/.github/workflows/feature_branch_update.yml b/.github/workflows/feature_branch_update.yml
index bfc4c7d65e5..09760551609 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 af4fe6abde8..3652071ed6e 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 2b77e29a283..1c0667abbac 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/docs/coding_conventions_c.md b/docs/coding_conventions_c.md
index 3f44da713d4..32f6de7ff75 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/feature_layers.md b/docs/feature_layers.md
index 8503603ffef..697064b49ae 100644
--- a/docs/feature_layers.md
+++ b/docs/feature_layers.md
@@ -155,7 +155,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
uint8_t current_layer = get_highest_layer(layer_state);
// Check if we are within the range, if not quit
- if (curent_layer > LAYER_CYCLE_END || current_layer < LAYER_CYCLE_START) {
+ if (current_layer > LAYER_CYCLE_END || current_layer < LAYER_CYCLE_START) {
return false;
}
diff --git a/docs/newbs_building_firmware_configurator.md b/docs/newbs_building_firmware_configurator.md
index eae0cef2c28..20256e5f28f 100644
--- a/docs/newbs_building_firmware_configurator.md
+++ b/docs/newbs_building_firmware_configurator.md
@@ -4,6 +4,8 @@
The [QMK Configurator](https://config.qmk.fm) is an online graphical user interface that generates QMK Firmware `.hex` or `.bin` files.
+It should be noted that Configurator cannot produce firmwares for keyboards using a different controller than they were designed for, i.e. an RP2040 controller on a board designed for pro micro. You will have to use the command line [converters](https://docs.qmk.fm/#/feature_converters?id=supported-converters) for this.
+
Watch the [Video Tutorial](https://www.youtube.com/watch?v=-imgglzDMdY). Many people find that is enough information to start programming their own keyboard.
The QMK Configurator works best with Chrome or Firefox.
diff --git a/docs/newbs_building_firmware_workflow.md b/docs/newbs_building_firmware_workflow.md
index 51ce3049013..e0cfdc77dfa 100644
--- a/docs/newbs_building_firmware_workflow.md
+++ b/docs/newbs_building_firmware_workflow.md
@@ -85,6 +85,8 @@ Visit the [QMK Configurator](https://config.qmk.fm/#/) to create a keymap file:
3. Customise the key layout according to your preference.
4. Select download next to **KEYMAP.JSON** and save the JSON file into the `~/qmk_keymap/` folder.
+!> **Important:** Make sure that the GitHub username you use in step 2 is correct. If it is not, the build process will fail to locate your files in the right folder.
+
### Add a GitHub Action workflow
Open the file `~/qmk_keymap/.github/workflows/build.yml` with your favorite [text editor](newbs_learn_more_resources.md#text-editor-resources), paste the following workflow content, and save it:
diff --git a/docs/newbs_flashing.md b/docs/newbs_flashing.md
index 549ffcb2be6..c5ba897e17a 100644
--- a/docs/newbs_flashing.md
+++ b/docs/newbs_flashing.md
@@ -15,7 +15,7 @@ Different keyboards have different ways to enter this special mode. If your PCB
* Press the physical `RESET` button, usually located on the underside of the PCB
* Locate header pins on the PCB labeled `RESET` and `GND`, and short them together while plugging your PCB in
-If you've attempted all of the above to no avail, and the main chip on the board says `STM32` on it, this may be a bit more complicated. Generally your best bet is to ask on [Discord](https://discord.gg/Uq7gcHh) for assistance. It's likely some photos of the board will be asked for -- if you can get them ready beforehand it'll help move things along!
+If you've attempted all of the above to no avail, and the main chip on the board says `STM32` or `RP2-B1` on it, this may be a bit more complicated. Generally your best bet is to ask on [Discord](https://discord.gg/Uq7gcHh) for assistance. It's likely some photos of the board will be asked for -- if you can get them ready beforehand it'll help move things along!
Otherwise, you should see a message in yellow, similar to this in QMK Toolbox:
@@ -31,6 +31,8 @@ The simplest way to flash your keyboard will be with the [QMK Toolbox](https://g
However, the Toolbox is currently only available for Windows and macOS. If you're using Linux (or just wish to flash the firmware from the command line), skip to the [Flash your Keyboard from the Command Line](#flash-your-keyboard-from-the-command-line) section.
+?> QMK Toolbox is not necessary for flashing [RP2040 devices](https://docs.qmk.fm/#/flashing?id=raspberry-pi-rp2040-uf2).
+
### Load the File into QMK Toolbox
Begin by opening the QMK Toolbox application. You'll want to locate the firmware file in Finder or Explorer. Your keyboard firmware may be in one of two formats- `.hex` or `.bin`. QMK tries to copy the appropriate one for your keyboard into the root `qmk_firmware` directory.
diff --git a/docs/newbs_getting_started.md b/docs/newbs_getting_started.md
index b0d28d89d16..a16207f267b 100644
--- a/docs/newbs_getting_started.md
+++ b/docs/newbs_getting_started.md
@@ -120,7 +120,7 @@ NOTE: remember to follow the instructions printed at the end of installation (us
### ** Windows **
-After installing QMK you can set it up with this command:
+Open QMK MSYS and run the following command:
qmk setup
@@ -128,7 +128,7 @@ In most situations you will want to answer `y` to all of the prompts.
### ** macOS **
-After installing QMK you can set it up with this command:
+Open Terminal and run the following command:
qmk setup
@@ -136,7 +136,7 @@ In most situations you will want to answer `y` to all of the prompts.
### ** Linux/WSL **
-After installing QMK you can set it up with this command:
+Open your preferred terminal app and run the following command:
qmk setup
@@ -150,7 +150,7 @@ Luckily, the fix is easy. Run this as your user: `echo 'PATH="$HOME/.local/bin:$
### ** FreeBSD **
-After installing QMK you can set it up with this command:
+Open your preferred terminal app and run the following command:
qmk setup
diff --git a/docs/quantum_keycodes.md b/docs/quantum_keycodes.md
index bc68cbc9221..a41681ac85f 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/keyboards/4pplet/waffling60/rev_d_iso/info.json b/keyboards/4pplet/waffling60/rev_d_iso/info.json
index cab2fa1c079..fdcf9d0bdee 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 563c3838d10..7536b7f3a1a 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 18c29122690..b6945a706d8 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 00000000000..781000ec413
--- /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/adafruit/macropad/keymaps/drashna/config.h b/keyboards/adafruit/macropad/keymaps/drashna/config.h
new file mode 100644
index 00000000000..4d85f039bea
--- /dev/null
+++ b/keyboards/adafruit/macropad/keymaps/drashna/config.h
@@ -0,0 +1,7 @@
+// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
+#define TAPPING_TERM 499
diff --git a/keyboards/adafruit/macropad/keymaps/drashna/keymap.c b/keyboards/adafruit/macropad/keymaps/drashna/keymap.c
new file mode 100644
index 00000000000..d87e4afd667
--- /dev/null
+++ b/keyboards/adafruit/macropad/keymaps/drashna/keymap.c
@@ -0,0 +1,100 @@
+// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "drashna.h"
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ LT(1,KC_MUTE),
+ KC_ENT, KC_0, KC_BSPC,
+ KC_7, KC_8, KC_9,
+ KC_4, KC_5, KC_6,
+ KC_1, KC_2, KC_3
+ ),
+ [1] = LAYOUT(
+ _______,
+ CK_TOGG, AU_TOGG, _______,
+ _______, _______, _______,
+ _______, _______, _______,
+ _______, _______, _______
+ ),
+};
+// clang-format on
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [1] = {ENCODER_CCW_CW(RGB_RMOD, RGB_MOD)},
+};
+#endif
+
+void render_oled_title(bool side) {
+ oled_write_P(PSTR(" Macropad "), true);
+}
+
+void render_rgb_mode(uint8_t col, uint8_t line);
+
+void l_render_keylock_status(led_t led_usb_state, uint8_t col, uint8_t line) {
+ oled_set_cursor(col, line);
+#ifdef CAPS_WORD_ENABLE
+ led_usb_state.caps_lock |= is_caps_word_on();
+#endif
+ oled_write_P(PSTR(OLED_RENDER_LOCK_NUML), led_usb_state.num_lock);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR(OLED_RENDER_LOCK_CAPS), led_usb_state.caps_lock);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR(OLED_RENDER_LOCK_SCLK), led_usb_state.scroll_lock);
+}
+
+bool oled_task_keymap(void) {
+ oled_write_raw_P(header_image, sizeof(header_image));
+ oled_set_cursor(0, 1);
+ oled_write_raw_P(row_2_image, sizeof(row_2_image));
+ oled_set_cursor(4, 0);
+ render_oled_title(false);
+
+ render_kitty(0, 2);
+ render_matrix_scan_rate(1, 7, 2);
+
+#ifdef AUDIO_ENABLE
+ oled_set_cursor(7, 4);
+ bool l_is_audio_on = is_audio_on();
+
+ static const char PROGMEM audio_status[2][3] = {{0xE0, 0xE1, 0}, {0xE2, 0xE3, 0}};
+ oled_write_P(audio_status[l_is_audio_on], false);
+
+# ifdef AUDIO_CLICKY
+ bool l_is_clicky_on = is_clicky_on();
+ static const char PROGMEM audio_clicky_status[2][3] = {{0xF4, 0xF5, 0}, {0xF6, 0xF7, 0}};
+ oled_write_P(audio_clicky_status[l_is_clicky_on && l_is_audio_on], false);
+# endif
+#endif
+
+ static const char PROGMEM cat_mode[3] = {0xF8, 0xF9, 0};
+ oled_write_P(cat_mode, get_keyboard_lock());
+
+#ifdef RGB_MATIRX_ENABLE
+ static const char PROGMEM rgb_layer_status[2][3] = {{0xEE, 0xEF, 0}, {0xF0, 0xF1, 0}};
+ oled_write_P(rgb_layer_status[rgb_matrix_is_enabled()], false);
+#endif
+
+#ifdef HAPTIC_ENABLE
+ static const char PROGMEM nukem_good[2] = {0xFA, 0};
+ oled_write_P(haptic_get_enable() ? nukem_good : PSTR(" "), false);
+#endif
+
+ l_render_keylock_status(host_keyboard_led_state(), 7, 5);
+ render_rgb_mode(1, 6);
+
+ for (uint8_t i = 1; i < 7; i++) {
+ oled_set_cursor(0, i);
+ oled_write_raw_P(display_border, sizeof(display_border));
+ oled_set_cursor(21, i);
+ oled_write_raw_P(display_border, sizeof(display_border));
+ }
+ oled_set_cursor(0, 7);
+ oled_write_raw_P(footer_image, sizeof(footer_image));
+
+ return false;
+}
diff --git a/keyboards/adafruit/macropad/keymaps/drashna/rules.mk b/keyboards/adafruit/macropad/keymaps/drashna/rules.mk
new file mode 100644
index 00000000000..ea090a57566
--- /dev/null
+++ b/keyboards/adafruit/macropad/keymaps/drashna/rules.mk
@@ -0,0 +1,3 @@
+ENCODER_MAP_ENABLE = yes
+DEBUG_MATRIX_SCAN_RATE_ENABLE = api
+WPM_ENABLE = yes
diff --git a/keyboards/akko/5108/5108.c b/keyboards/akko/5108/5108.c
new file mode 100644
index 00000000000..a14f02bc76e
--- /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 00000000000..f56e825e050
--- /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 00000000000..2f64e65393a
--- /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 00000000000..e9e99be69e3
--- /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 00000000000..ef92432ff57
--- /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 00000000000..ef92432ff57
--- /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 00000000000..036bd6d1c3e
--- /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 00000000000..0d16f4f04e4
--- /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 00000000000..c7140deb5c7
--- /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 00000000000..24d5f6f52ec
--- /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 00000000000..e175e21368e
--- /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 00000000000..221cad86ad1
--- /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 00000000000..2f64e65393a
--- /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 00000000000..bcc6b23cb00
--- /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 00000000000..88bfbc8e1fd
--- /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 00000000000..88bfbc8e1fd
--- /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 00000000000..1e5b99807cb
--- /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 00000000000..0d16f4f04e4
--- /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 00000000000..a4f400ce761
--- /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 00000000000..0dc7a331420
--- /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 00000000000..bd849292e6a
--- /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 00000000000..2f64e65393a
--- /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 00000000000..8649ecb3759
--- /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 00000000000..fb9df162355
--- /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 00000000000..fb9df162355
--- /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 00000000000..1e5b99807cb
--- /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 00000000000..0d16f4f04e4
--- /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 00000000000..87a2287b934
--- /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 00000000000..b753f0682e5
--- /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 00000000000..7fe193447dc
--- /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 b3db25d2d81..6c2beff27eb 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 00000000000..87e5844f55a
--- /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/andean_condor/info.json b/keyboards/andean_condor/info.json
new file mode 100644
index 00000000000..cfc3eefa877
--- /dev/null
+++ b/keyboards/andean_condor/info.json
@@ -0,0 +1,89 @@
+{
+ "manufacturer": "Guido Bartolucci",
+ "keyboard_name": "andean_condor",
+ "maintainer": "guidoism",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP9", "GP8", "GP7", "GP5", "GP4", "GP3"],
+ "rows": ["GP2", "GP6", "GP10", "GP15", "GP22", "GP21", "GP20", "GP16"]
+ },
+ "processor": "RP2040",
+ "url": "https://github.com/guidoism/andean-condor/tree/pico-w",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0,0], "x":0, "y":0, "label":"TAB"},
+ {"matrix": [0,1], "x":1, "y":0, "label":"Q"},
+ {"matrix": [0,2], "x":2, "y":0, "label":"W"},
+ {"matrix": [0,3], "x":3, "y":0, "label":"E"},
+ {"matrix": [0,4], "x":4, "y":0, "label":"R"},
+ {"matrix": [0,5], "x":5, "y":0, "label":"T"},
+
+ {"matrix": [4,5], "x":10, "y":0, "label":"Y"},
+ {"matrix": [4,4], "x":11, "y":0, "label":"U"},
+ {"matrix": [4,3], "x":12, "y":0, "label":"I"},
+ {"matrix": [4,2], "x":13, "y":0, "label":"O"},
+ {"matrix": [4,1], "x":14, "y":0, "label":"P"},
+ {"matrix": [4,0], "x":15, "y":0, "label":"BS"},
+
+ {"matrix": [1,0], "x":0, "y":1, "label":"CTRL"},
+ {"matrix": [1,1], "x":1, "y":1, "label":"A"},
+ {"matrix": [1,2], "x":2, "y":1, "label":"S"},
+ {"matrix": [1,3], "x":3, "y":1, "label":"D"},
+ {"matrix": [1,4], "x":4, "y":1, "label":"F"},
+ {"matrix": [1,5], "x":5, "y":1, "label":"G"},
+
+ {"matrix": [5,5], "x":10, "y":1, "label":"H"},
+ {"matrix": [5,4], "x":11, "y":1, "label":"J"},
+ {"matrix": [5,3], "x":12, "y":1, "label":"K"},
+ {"matrix": [5,2], "x":13, "y":1, "label":"L"},
+ {"matrix": [5,1], "x":14, "y":1, "label":":"},
+ {"matrix": [5,0], "x":15, "y":1, "label":"RET"},
+
+ {"matrix": [2,0], "x":0, "y":2, "label":"SHIFT"},
+ {"matrix": [2,1], "x":1, "y":2, "label":"Z"},
+ {"matrix": [2,2], "x":2, "y":2, "label":"X"},
+ {"matrix": [2,3], "x":3, "y":2, "label":"C"},
+ {"matrix": [2,4], "x":4, "y":2, "label":"V"},
+ {"matrix": [2,5], "x":5, "y":2, "label":"B"},
+
+ {"matrix": [6,5], "x":10, "y":2, "label":"N"},
+ {"matrix": [6,4], "x":11, "y":2, "label":"M"},
+ {"matrix": [6,3], "x":12, "y":2, "label":","},
+ {"matrix": [6,2], "x":13, "y":2, "label":"."},
+ {"matrix": [6,1], "x":14, "y":2, "label":"/"},
+ {"matrix": [6,0], "x":15, "y":2, "label":";"},
+
+ {"matrix": [3,4], "x":6.5, "y":3, "label":"lt2"},
+ {"matrix": [3,5], "x":5.5, "y":3, "label":"lt1"},
+
+ {"matrix": [7,5], "x":9.5, "y":3, "label":"rt2"},
+ {"matrix": [7,4], "x":8.5, "y":3, "label":"rt1"},
+
+ {"matrix": [3,0], "x":3.5, "y":4, "label":"lb1"},
+ {"matrix": [3,1], "x":4.5, "y":4, "label":"lb2"},
+ {"matrix": [3,2], "x":5.5, "y":4, "label":"lb3"},
+ {"matrix": [3,3], "x":6.5, "y":4, "label":"lb4"},
+
+ {"matrix": [7,3], "x":8.5, "y":4, "label":"rb3"},
+ {"matrix": [7,2], "x":9.5, "y":4, "label":"rb4"},
+ {"matrix": [7,1], "x":10.5, "y":4, "label":"rb5"},
+ {"matrix": [7,0], "x":11.5, "y":4, "label":"rb6"}
+ ]
+ }
+ }
+}
diff --git a/keyboards/andean_condor/keymaps/default/keymap.c b/keyboards/andean_condor/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4d00610897f
--- /dev/null
+++ b/keyboards/andean_condor/keymaps/default/keymap.c
@@ -0,0 +1,14 @@
+// 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BACKSPACE,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, LSFT(KC_SEMICOLON),
+ KC_5, KC_6, KC_7, KC_8,
+ KC_1, KC_2, KC_3, KC_4, KC_9, KC_0, KC_MINUS, KC_EQUAL
+ )
+};
diff --git a/keyboards/andean_condor/readme.md b/keyboards/andean_condor/readme.md
new file mode 100644
index 00000000000..8e961e3cb03
--- /dev/null
+++ b/keyboards/andean_condor/readme.md
@@ -0,0 +1,33 @@
+# Andean Condor (andean_condor)
+
+
+
+The Andean Condor is a monoblock split keyboard in the spirit of the Kyria.
+
+* Keyboard Maintainer: [Guido Bartolucci](https://github.com/guidoism)
+* Hardware Supported: Raspberry Pi Pico (only QMK), Nice!Nano (only ZMK)
+* Hardware Availability: [Pico PCB](https://github.com/guidoism/andean-condor/tree/pico-w), [Nice!Nano PCB](https://github.com/guidoism/andean-condor)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make andean_condor:default
+
+or
+
+ qmk compile -kb andean_condor -km default
+
+Flashing example for this keyboard:
+
+ make andean_condor: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
+&g
+
diff --git a/keyboards/andean_condor/rules.mk b/keyboards/andean_condor/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/andean_condor/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 00000000000..c57b49a047d
--- /dev/null
+++ b/keyboards/artemis/paragon/hotswap/info.json
@@ -0,0 +1,6 @@
+{
+ "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"]
+ }
+}
diff --git a/keyboards/artemis/paragon/hotswap/rules.mk b/keyboards/artemis/paragon/hotswap/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /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 00000000000..2a2cf046a85
--- /dev/null
+++ b/keyboards/artemis/paragon/info.json
@@ -0,0 +1,122 @@
+{
+ "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" }
+ ]
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x3449",
+ "vid": "0x8C27"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "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 00000000000..d980180a347
--- /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(
+ 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 00000000000..ee325681483
--- /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 00000000000..84f5735d97b
--- /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(
+ 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 00000000000..f1adcab005e
--- /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 00000000000..287d141ccc6
--- /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 00000000000..5158add71e2
--- /dev/null
+++ b/keyboards/artemis/paragon/soldered/info.json
@@ -0,0 +1,6 @@
+{
+ "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"]
+ }
+}
diff --git a/keyboards/artemis/paragon/soldered/rules.mk b/keyboards/artemis/paragon/soldered/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/artemis/paragon/soldered/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/atreyu/rev1/info.json b/keyboards/atreyu/rev1/info.json
index a4e12a71fb1..8a38baabf81 100644
--- a/keyboards/atreyu/rev1/info.json
+++ b/keyboards/atreyu/rev1/info.json
@@ -81,21 +81,21 @@
{"matrix": [3, 4], "x": 4, "y": 3.125},
{"matrix": [3, 5], "x": 5, "y": 3.25},
- {"matrix": [7, 5], "x": 6, "y": 2.75},
- {"matrix": [7, 4], "x": 9.5, "y": 2.75},
- {"matrix": [7, 3], "x": 10.5, "y": 3.25},
- {"matrix": [7, 2], "x": 11.5, "y": 3.125},
- {"matrix": [7, 1], "x": 12.5, "y": 3},
- {"matrix": [7, 0], "x": 13.5, "y": 3.125},
+ {"matrix": [7, 5], "x": 10.5, "y": 3.25},
+ {"matrix": [7, 4], "x": 11.5, "y": 3.125},
+ {"matrix": [7, 3], "x": 12.5, "y": 3},
+ {"matrix": [7, 2], "x": 13.5, "y": 3.125},
+ {"matrix": [7, 1], "x": 14.5, "y": 3.375},
+ {"matrix": [7, 0], "x": 15.5, "y": 3.5},
- {"matrix": [8, 0], "x": 14.5, "y": 3.375},
- {"matrix": [8, 1], "x": 15.5, "y": 3.5},
- {"matrix": [8, 2], "x": 0, "y": 4.5},
- {"matrix": [8, 3], "x": 2.5, "y": 4.125},
- {"matrix": [8, 4], "x": 3.5, "y": 4.15},
- {"matrix": [8, 5], "x": 4.5, "y": 4.25},
+ {"matrix": [8, 0], "x": 0, "y": 4.5},
+ {"matrix": [8, 1], "x": 2.5, "y": 4.125},
+ {"matrix": [8, 2], "x": 3.5, "y": 4.15},
+ {"matrix": [8, 3], "x": 4.5, "y": 4.25},
+ {"matrix": [8, 4], "x": 6, "y": 4.25, "h": 1.25},
+ {"matrix": [8, 5], "x": 6, "y": 2.75},
- {"matrix": [9, 5], "x": 6, "y": 4.25, "h": 1.25},
+ {"matrix": [9, 5], "x": 9.5, "y": 2.75},
{"matrix": [9, 4], "x": 9.5, "y": 4.25, "h": 1.25},
{"matrix": [9, 3], "x": 11, "y": 4.25},
{"matrix": [9, 2], "x": 12, "y": 4.15},
diff --git a/keyboards/atreyu/rev2/info.json b/keyboards/atreyu/rev2/info.json
index fd40f9fcb84..6fcfd64d1ff 100644
--- a/keyboards/atreyu/rev2/info.json
+++ b/keyboards/atreyu/rev2/info.json
@@ -73,26 +73,26 @@
{"matrix": [3, 4], "x": 4, "y": 3.125},
{"matrix": [3, 5], "x": 5, "y": 3.25},
- {"matrix": [7, 5], "x": 6, "y": 2.75},
- {"matrix": [7, 4], "x": 9.5, "y": 2.75},
- {"matrix": [7, 3], "x": 10.5, "y": 3.25},
- {"matrix": [7, 2], "x": 11.5, "y": 3.125},
- {"matrix": [7, 1], "x": 12.5, "y": 3},
- {"matrix": [7, 0], "x": 13.5, "y": 3.125},
+ {"matrix": [7, 5], "x": 10.5, "y": 3.25},
+ {"matrix": [7, 4], "x": 11.5, "y": 3.125},
+ {"matrix": [7, 3], "x": 12.5, "y": 3},
+ {"matrix": [7, 2], "x": 13.5, "y": 3.125},
+ {"matrix": [7, 1], "x": 14.5, "y": 3.375},
+ {"matrix": [7, 0], "x": 15.5, "y": 3.5},
- {"matrix": [8, 0], "x": 14.5, "y": 3.375},
- {"matrix": [8, 1], "x": 15.5, "y": 3.5},
- {"matrix": [8, 2], "x": 0, "y": 4.5},
- {"matrix": [8, 3], "x": 2.5, "y": 4.125},
- {"matrix": [8, 4], "x": 3.5, "y": 4.15},
- {"matrix": [8, 5], "x": 4.5, "y": 4.25},
+ {"matrix": [8, 0], "x": 0, "y": 4.5},
+ {"matrix": [8, 1], "x": 2.5, "y": 4.125},
+ {"matrix": [8, 2], "x": 3.5, "y": 4.15},
+ {"matrix": [8, 3], "x": 4.5, "y": 4.25},
+ {"matrix": [8, 4], "x": 6, "y": 4.25, "h": 1.25},
+ {"matrix": [8, 5], "x": 6, "y": 2.75},
- {"matrix": [9, 5], "x": 6, "y": 4.25, "h": 1.25},
+ {"matrix": [9, 5], "x": 9.5, "y": 2.75},
{"matrix": [9, 4], "x": 9.5, "y": 4.25, "h": 1.25},
{"matrix": [9, 3], "x": 11, "y": 4.25},
{"matrix": [9, 2], "x": 12, "y": 4.15},
{"matrix": [9, 1], "x": 13, "y": 4.125},
- {"matrix": [9, 0], "x": 14.5, "y": 4.5}
+ {"matrix": [9, 0], "x": 15.5, "y": 4.5}
]
}
}
diff --git a/keyboards/automata02/alisaie/info.json b/keyboards/automata02/alisaie/info.json
new file mode 100644
index 00000000000..5c23e4ef1f6
--- /dev/null
+++ b/keyboards/automata02/alisaie/info.json
@@ -0,0 +1,92 @@
+{
+ "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": "~", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "&", "matrix": [0, 7], "x": 8.5, "y": 0},
+ {"label": "*", "matrix": [0, 8], "x": 9.5, "y": 0},
+ {"label": "(", "matrix": [0, 9], "x": 10.5, "y": 0},
+ {"label": ")", "matrix": [0, 10], "x": 11.5, "y": 0},
+ {"label": "_", "matrix": [0, 11], "x": 12.5, "y": 0},
+ {"label": "+", "matrix": [0, 12], "x": 13.5, "y": 0},
+ {"label": "Del", "matrix": [0, 13], "x": 14.5, "y": 0},
+ {"label": "Backspace", "matrix": [1, 0], "x": 15.5, "y": 0},
+ {"label": "Tab", "matrix": [1, 1], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 2], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 3], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 4], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 5], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 6], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 7], "x": 8, "y": 1},
+ {"label": "U", "matrix": [1, 8], "x": 9, "y": 1},
+ {"label": "I", "matrix": [1, 9], "x": 10, "y": 1},
+ {"label": "O", "matrix": [1, 10], "x": 11, "y": 1},
+ {"label": "P", "matrix": [1, 11], "x": 12, "y": 1},
+ {"label": "{", "matrix": [1, 12], "x": 13, "y": 1},
+ {"label": "}", "matrix": [1, 13], "x": 14, "y": 1},
+ {"label": "|", "matrix": [2, 0], "x": 15, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "matrix": [2, 1], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 2], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 3], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 4], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 5], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 6], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 7], "x": 8.25, "y": 2},
+ {"label": "J", "matrix": [2, 8], "x": 9.25, "y": 2},
+ {"label": "K", "matrix": [2, 9], "x": 10.25, "y": 2},
+ {"label": "L", "matrix": [2, 10], "x": 11.25, "y": 2},
+ {"label": ":", "matrix": [2, 11], "x": 12.25, "y": 2},
+ {"label": "\"", "matrix": [2, 12], "x": 13.25, "y": 2},
+ {"label": "Enter", "matrix": [3, 0], "x": 14.25, "y": 2, "w": 2.25},
+ {"label": "Shift", "matrix": [3, 1], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "B", "matrix": [3, 7], "x": 7.75, "y": 3},
+ {"label": "N", "matrix": [3, 8], "x": 8.75, "y": 3},
+ {"label": "M", "matrix": [3, 9], "x": 9.75, "y": 3},
+ {"label": "<", "matrix": [3, 10], "x": 10.75, "y": 3},
+ {"label": ">", "matrix": [3, 11], "x": 11.75, "y": 3},
+ {"label": "?", "matrix": [3, 12], "x": 12.75, "y": 3},
+ {"label": "Shift", "matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [4, 0], "x": 15.5, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 1], "x": 0, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 2], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "Alt", "matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.25},
+ {"label": "K408", "matrix": [4, 8], "x": 5, "y": 4, "w": 2.25},
+ {"label": "K409", "matrix": [4, 9], "x": 7.75, "y": 4, "w": 2.75},
+ {"label": "Alt", "matrix": [4, 11], "x": 10.5, "y": 4, "w": 1.25},
+ {"label": "Win", "matrix": [4, 12], "x": 12.75, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 15.25, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/automata02/alisaie/keymaps/default/keymap.c b/keyboards/automata02/alisaie/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4b88bd30b5b
--- /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 00000000000..eee1a8dd387
--- /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 00000000000..036bd6d1c3e
--- /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 00000000000..8bfcae86f12
--- /dev/null
+++ b/keyboards/automata02/alisaie/readme.md
@@ -0,0 +1,24 @@
+# Alisaie
+
+
+
+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 00000000000..7ff128fa692
--- /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/bastardkb/charybdis/3x5/keymaps/drashna/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/keymap.c
index 02cb89fe652..e458a843733 100644
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/keymap.c
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/keymap.c
@@ -82,29 +82,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
EE_CLR, KC_NUKE, _______, _______, QK_BOOT
),
};
-
-#if defined(KEYBOARD_bastardkb_charybdis_3x5_blackpill)
-void keyboard_pre_init_keymap(void) {
- setPinInputHigh(A0);
-}
-
-void housekeeping_task_keymap(void) {
- if (!readPin(A0)) {
- reset_keyboard();
- }
-}
-
-# ifdef USB_VBUS_PIN
-bool usb_vbus_state(void) {
- setPinInputLow(USB_VBUS_PIN);
- wait_us(5);
- return readPin(USB_VBUS_PIN);
-}
-# endif
-
-void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
- for (int32_t i = 0; i < 40; i++) {
- __asm__ volatile("nop" ::: "memory");
- }
-}
-#endif
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/rules.mk b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/rules.mk
index ff4ede45cac..029b4a498b3 100644
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/rules.mk
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/rules.mk
@@ -40,6 +40,4 @@ ifeq ($(strip $(OVERLOAD_FEATURES)), yes)
CUSTOM_UNICODE_ENABLE = yes
CUSTOM_POINTING_DEVICE = yes
CUSTOM_SPLIT_TRANSPORT_SYNC = yes
-
- DEBOUNCE_TYPE = asym_eager_defer_pk
endif
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h
index 07c4bfc008e..7fa98261255 100644
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h
+++ b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h
@@ -65,3 +65,5 @@
#define BOOTMAGIC_LITE_EEPROM_COLUMN 0
#define BOOTMAGIC_LITE_EEPROM_ROW_RIGHT 1
#define BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT 0
+
+#define DEBOUNCE 15
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c
index 85bb2bc77fc..31d1e92a7fb 100644
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c
+++ b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c
@@ -83,7 +83,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
SFT_T(KC_SPACE), ALT_T(KC_Q), _______
),
[_MOUSE] = LAYOUT_charybdis_4x6(
- _______, _______, _______, _______, _______, _______, _______, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD, _______,
+ _______, _______, _______, _______, _______, _______, _______, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD, PD_JIGGLER,
_______, _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, DRGSCRL,
_______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, SNIPING,
_______, _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______, _______,
@@ -130,28 +130,6 @@ void keyboard_post_init_keymap(void) {
void keyboard_pre_init_keymap(void) {
setPinInputHigh(A0);
}
-
-void housekeeping_task_keymap(void) {
- if (!readPin(A0)) {
- reset_keyboard();
- }
-}
-#endif
-
-#ifdef USB_VBUS_PIN
-bool usb_vbus_state(void) {
- setPinInputLow(USB_VBUS_PIN);
- wait_us(5);
- return readPin(USB_VBUS_PIN);
-}
-#endif
-
-#if defined(KEYBOARD_bastardkb_charybdis_4x6_blackpill)
-void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
- for (int32_t i = 0; i < 40; i++) {
- __asm__ volatile("nop" ::: "memory");
- }
-}
#endif
#ifdef SWAP_HANDS_ENABLE
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk
index 0b7759f1569..ef6b7cd24b8 100644
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk
+++ b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk
@@ -1,6 +1,7 @@
CUSTOM_UNICODE_ENABLE = no
CUSTOM_POINTING_DEVICE = no
CUSTOM_SPLIT_TRANSPORT_SYNC = no
+PER_KEY_TAPPING = yes
ifeq ($(strip $(KEYBOARD)), bastardkb/charybdis/4x6/blackpill)
# MCU name
@@ -16,16 +17,13 @@ ifeq ($(strip $(KEYBOARD)), bastardkb/charybdis/4x6/blackpill)
OVERLOAD_FEATURES = yes
endif
-ifeq ($(strip $(KEYBOARD)), bastardkb/charybdis/4x6/v2/stemcell)
- OVERLOAD_FEATURES = yes
-endif
-ifeq ($(strip $(KEYBOARD)), bastardkb/charybdis/4x6/v2/splinky)
- OVERLOAD_FEATURES = yes
-endif
ifeq ($(strip $(MCU)), atmega32u4)
LTO_ENABLE = yes
BOOTLOADER = qmk-hid
BOOTLOADER_SIZE = 512
+ EXTRAKEY_ENABLE = no
+else
+ OVERLOAD_FEATURES = yes
endif
ifeq ($(strip $(OVERLOAD_FEATURES)), yes)
@@ -43,7 +41,6 @@ ifeq ($(strip $(OVERLOAD_FEATURES)), yes)
CAPS_WORD_ENABLE = yes
SWAP_HANDS_ENABLE = yes
TAP_DANCE_ENABLE = yes
- DEBOUNCE_TYPE = asym_eager_defer_pk
WPM_ENABLE = yes
LTO_ENABLE = no
# OPT = 3
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/config.h b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/config.h
index d7b1351d89a..7c46c833102 100644
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/config.h
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/config.h
@@ -6,3 +6,5 @@
#define CIRQUE_PINNACLE_TAP_ENABLE
#define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE
+
+#define OLED_DISPLAY_128X128
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/keymap.c b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/keymap.c
index d80d0067966..bf75e97841b 100644
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/keymap.c
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/keymap.c
@@ -84,14 +84,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-
-void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
- for (int32_t i = 0; i < 40; i++) {
- __asm__ volatile("nop" ::: "memory");
- }
-}
-
-
#if defined(OLED_ENABLE) && defined(OLED_DISPLAY_128X128)
# ifdef UNICODE_COMMON_ENABLE
# include "process_unicode_common.h"
@@ -100,8 +92,6 @@ void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
extern const char PROGMEM display_border[3];
-
-extern uint32_t oled_timer;
extern bool is_oled_enabled;
diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/rules.mk b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/rules.mk
index 41d73bc49ae..a1be9cb8fd1 100644
--- a/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/rules.mk
+++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/drashna/rules.mk
@@ -5,4 +5,3 @@ CONSOLE_ENABLE = yes
KEYLOGGER_ENABLE = no
WPM_ENABLE = yes
OLED_ENABLE = yes
-OLED_DRIVER = custom
diff --git a/keyboards/bioi/g60/matrix_diagram.md b/keyboards/bioi/g60/matrix_diagram.md
index 5f7af98daf5..8ac1d9b0d3f 100644
--- a/keyboards/bioi/g60/matrix_diagram.md
+++ b/keyboards/bioi/g60/matrix_diagram.md
@@ -12,9 +12,9 @@
├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┤ └──────┴───┴───┘
│40 │41 │42 │45 │4A │4B │48 │4C │4D │
└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
-┌────────┐
-│30 │ 2.25u LShift
-└────────┘
+┌────────┐ ┌─────────────┐
+│30 │ 2.25u LShift │3D │ 2.75u RShift
+└────────┘ └─────────────┘
┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
│40 │41 │42 │45 │4A │4B │4C │4D │ Standard
└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
diff --git a/keyboards/bioi/g60ble/config.h b/keyboards/bioi/g60ble/config.h
index d58c58713c6..24ced1fc0a2 100644
--- a/keyboards/bioi/g60ble/config.h
+++ b/keyboards/bioi/g60ble/config.h
@@ -1,11 +1,6 @@
#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
-
+/* RGB Underglow */
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
@@ -21,5 +16,11 @@
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
+/* 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
+
+/* key combination for magic key command */
#define KEYBOARD_LOCK_ENABLE
#define MAGIC_KEY_LOCK L
diff --git a/keyboards/bioi/g60ble/keymaps/chemicalwill/keymap.c b/keyboards/bioi/g60ble/keymaps/chemicalwill/keymap.c
new file mode 100644
index 00000000000..680c9687957
--- /dev/null
+++ b/keyboards/bioi/g60ble/keymaps/chemicalwill/keymap.c
@@ -0,0 +1,206 @@
+/* Copyright 2023 Will Hedges (@will-hedges)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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 {
+ _WORK,
+ _QWER,
+ _FN1
+};
+
+enum custom_keycodes {
+ BASE_QWER = SAFE_RANGE,
+ BASE_WORK
+};
+
+// Tap Dance enum
+enum {
+ N8_F8,
+ N9_F9,
+ N0_F10,
+ MINS_F11,
+ EQL_F12,
+ DEL_BSLS,
+ G_END,
+ H_HOME,
+ LALT_PGUP,
+ RALT_PGDN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_WORK] = LAYOUT_60_ansi(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, TD(N8_F8), TD(N9_F9), TD(N0_F10), TD(MINS_F11), TD(EQL_F12), 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, TD(DEL_BSLS),
+ LT(_FN1, KC_CAPS), KC_A, KC_S, KC_D, KC_F, TD(G_END), TD(H_HOME), 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, LALT_T(KC_PGUP), KC_SPC, RALT_T(KC_PGDN), KC_APP, MO(_FN1), KC_RCTL
+ ),
+
+ [_QWER] = 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, TD(DEL_BSLS),
+ LT(_FN1, KC_CAPS), KC_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_APP, MO(_FN1), KC_RCTL
+ ),
+
+ [_FN1] = LAYOUT_60_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, KC_DEL,
+ _______, _______, KC_PGUP, _______, QK_RBT, _______, _______, _______, KC_UP, _______, _______, _______, _______, _______,
+ _______, KC_HOME, KC_PGDN, KC_END, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
+ _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______,
+ _______, C(A(KC_DEL)), _______, _______, _______, BASE_WORK, _______, BASE_QWER
+ )
+
+};
+
+
+// Tap Dance tap vs. hold docs @ https://docs.qmk.fm/#/feature_tap_dance?id=example-3
+// Macros are also used with process_record_user @ https://docs.qmk.fm/#/feature_macros?id=using-macros-in-c-keymaps
+typedef struct {
+ uint16_t tap;
+ uint16_t hold;
+ uint16_t held;
+} tap_dance_tap_hold_t;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ tap_dance_action_t *action;
+
+ switch (keycode) {
+ // MACROS
+ case BASE_QWER:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWER);
+ }
+ break;
+
+ case BASE_WORK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_WORK);
+ }
+ break;
+
+ // TAP DANCES
+ case TD(N8_F8):
+ action = &tap_dance_actions[TD_INDEX(keycode)];
+ if (!record->event.pressed && action->state.count && !action->state.finished) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
+ tap_code16(tap_hold->tap);
+ }
+ break;
+
+ case TD(N9_F9):
+ action = &tap_dance_actions[TD_INDEX(keycode)];
+ if (!record->event.pressed && action->state.count && !action->state.finished) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
+ tap_code16(tap_hold->tap);
+ }
+ break;
+
+ case TD(N0_F10):
+ action = &tap_dance_actions[TD_INDEX(keycode)];
+ if (!record->event.pressed && action->state.count && !action->state.finished) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
+ tap_code16(tap_hold->tap);
+ }
+ break;
+
+ case TD(MINS_F11):
+ action = &tap_dance_actions[TD_INDEX(keycode)];
+ if (!record->event.pressed && action->state.count && !action->state.finished) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
+ tap_code16(tap_hold->tap);
+ }
+ break;
+
+ case TD(EQL_F12):
+ action = &tap_dance_actions[TD_INDEX(keycode)];
+ if (!record->event.pressed && action->state.count && !action->state.finished) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
+ tap_code16(tap_hold->tap);
+ }
+ break;
+
+ case TD(DEL_BSLS):
+ action = &tap_dance_actions[TD_INDEX(keycode)];
+ if (!record->event.pressed && action->state.count && !action->state.finished) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
+ tap_code16(tap_hold->tap);
+ }
+ break;
+
+ case TD(G_END):
+ action = &tap_dance_actions[TD_INDEX(keycode)];
+ if (!record->event.pressed && action->state.count && !action->state.finished) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
+ tap_code16(tap_hold->tap);
+ }
+ break;
+
+ case TD(H_HOME):
+ action = &tap_dance_actions[TD_INDEX(keycode)];
+ if (!record->event.pressed && action->state.count && !action->state.finished) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
+ tap_code16(tap_hold->tap);
+ }
+ break;
+
+ }
+ return true;
+}
+
+void tap_dance_tap_hold_finished(tap_dance_state_t *state, void *user_data) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)user_data;
+
+ if (state->pressed) {
+ if (state->count == 1
+#ifndef PERMISSIVE_HOLD
+ && !state->interrupted
+#endif
+ ) {
+ register_code16(tap_hold->hold);
+ tap_hold->held = tap_hold->hold;
+ } else {
+ register_code16(tap_hold->tap);
+ tap_hold->held = tap_hold->tap;
+ }
+ }
+}
+
+void tap_dance_tap_hold_reset(tap_dance_state_t *state, void *user_data) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)user_data;
+
+ if (tap_hold->held) {
+ unregister_code16(tap_hold->held);
+ tap_hold->held = 0;
+ }
+}
+
+#define ACTION_TAP_DANCE_TAP_HOLD(tap, hold) \
+ { .fn = {NULL, tap_dance_tap_hold_finished, tap_dance_tap_hold_reset}, .user_data = (void *)&((tap_dance_tap_hold_t){tap, hold, 0}), }
+
+tap_dance_action_t tap_dance_actions[] = {
+ [N8_F8] = ACTION_TAP_DANCE_TAP_HOLD(KC_8, KC_F8),
+ [N9_F9] = ACTION_TAP_DANCE_TAP_HOLD(KC_9, KC_F9),
+ [N0_F10] = ACTION_TAP_DANCE_TAP_HOLD(KC_0, KC_F10),
+ [MINS_F11] = ACTION_TAP_DANCE_TAP_HOLD(KC_MINS, KC_F11),
+ [EQL_F12] = ACTION_TAP_DANCE_TAP_HOLD(KC_EQL, KC_F12),
+ [DEL_BSLS] = ACTION_TAP_DANCE_TAP_HOLD(KC_DEL, KC_BSLS),
+ [G_END] = ACTION_TAP_DANCE_TAP_HOLD(KC_G, KC_END),
+ [H_HOME] = ACTION_TAP_DANCE_TAP_HOLD(KC_H, KC_HOME)
+};
diff --git a/keyboards/bioi/g60ble/keymaps/chemicalwill/rules.mk b/keyboards/bioi/g60ble/keymaps/chemicalwill/rules.mk
new file mode 100644
index 00000000000..c86c7b33406
--- /dev/null
+++ b/keyboards/bioi/g60ble/keymaps/chemicalwill/rules.mk
@@ -0,0 +1,7 @@
+# features enabled by default that I want to turn off
+BACKLIGHT_ENABLE = no
+MOUSEKEY_ENABLE = no
+RGBLIGHT_ENABLE = no
+
+# features I want to add
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/bioi/g60ble/matrix_diagram.md b/keyboards/bioi/g60ble/matrix_diagram.md
new file mode 100644
index 00000000000..b7cfaa76869
--- /dev/null
+++ b/keyboards/bioi/g60ble/matrix_diagram.md
@@ -0,0 +1,24 @@
+# Matrix Diagram for Basic IO Instruments G60BLE
+
+```
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───────┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │49 │ │0D │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ └─┬─────┤
+│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 │3D │3C │ │3D │47 │3C │ 1.75u/1u/1u RShift
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┤ └──────┴───┴───┘
+│40 │41 │42 │45 │4A │4B │48 │4C │4D │
+└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+┌────────┐ ┌─────────────┐
+│30 │ 2.25u LShift │3D │ 2.75u RShift
+└────────┘ └─────────────┘
+┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
+│40 │41 │42 │45 │4A │4B │4C │4D │ Standard
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │42 │45 │4B │4C │4D │ Tsangan/WKL/HHKB
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
diff --git a/keyboards/bioi/g60ble/rules.mk b/keyboards/bioi/g60ble/rules.mk
index e3420b4a28a..d1edb6882da 100644
--- a/keyboards/bioi/g60ble/rules.mk
+++ b/keyboards/bioi/g60ble/rules.mk
@@ -4,12 +4,18 @@ F_CPU = 8000000
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes
LTO_ENABLE = yes
+
+# these lines are all for bluetooth
+BLUETOOTH_ENABLE = yes
+BLUETOOTH_DRIVER = custom
+SRC += usart.c ble.c
+OPT_DEFS += -DUART_RX1_BUFFER_SIZE=16 -DUART_TX1_BUFFER_SIZE=16
+OPT_DEFS += -DUSART1_ENABLED
diff --git a/keyboards/butterkeebs/pocketpad/info.json b/keyboards/butterkeebs/pocketpad/info.json
index db525828304..0b42d5fb17e 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/cablecardesigns/phoenix/info.json b/keyboards/cablecardesigns/phoenix/info.json
new file mode 100755
index 00000000000..effa8836b9b
--- /dev/null
+++ b/keyboards/cablecardesigns/phoenix/info.json
@@ -0,0 +1,497 @@
+{
+ "keyboard_name": "Phoenix",
+ "manufacturer": "Yiancar-Designs",
+ "maintainer": "Yiancar-Designs",
+ "url": "https://yiancar-designs.com",
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["A1", "B9", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "B2", "B10", "B11", "B12", "B13", "B14", "B15", "A8"],
+ "rows": ["A2", "A14", "A15", "B3", "B4", "B5"]
+ },
+ "usb": {
+ "vid": "0x8968",
+ "pid": "0x5048",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "B6",
+ "on_state": 0
+ },
+ "community_layouts": ["tkl_f13_ansi_tsangan", "tkl_f13_ansi_tsangan_split_bs_rshift", "tkl_f13_iso_tsangan", "tkl_f13_iso_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": [2, 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 },
+ { "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, 12], "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], "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], "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], "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], "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "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": [5, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan": {
+ "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": [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 },
+ { "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, 12], "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], "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], "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], "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "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": [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": [2, 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 },
+ { "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, 12], "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], "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], "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], "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], "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "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": [5, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_tsangan": {
+ "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": [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 },
+ { "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": 13.75, "y": 2.25 },
+ { "matrix": [2, 15], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 16.25, "y": 2.25 },
+ { "matrix": [3, 0], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 1], "x": 0, "y": 3.25 },
+ { "matrix": [3, 2], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 12], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "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], "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 15], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "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": [5, 16], "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_f13_iso_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": [2, 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 },
+ { "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": 13.75, "y": 2.25 },
+ { "matrix": [2, 15], "x": 15.25, "y": 2.25 },
+ { "matrix": [2, 16], "x": 16.25, "y": 2.25 },
+ { "matrix": [3, 0], "x": 17.25, "y": 2.25 },
+ { "matrix": [3, 1], "x": 0, "y": 3.25 },
+ { "matrix": [3, 2], "x": 1.75, "y": 3.25 },
+ { "matrix": [3, 3], "x": 2.75, "y": 3.25 },
+ { "matrix": [3, 4], "x": 3.75, "y": 3.25 },
+ { "matrix": [3, 5], "x": 4.75, "y": 3.25 },
+ { "matrix": [3, 6], "x": 5.75, "y": 3.25 },
+ { "matrix": [3, 7], "x": 6.75, "y": 3.25 },
+ { "matrix": [3, 8], "x": 7.75, "y": 3.25 },
+ { "matrix": [3, 9], "x": 8.75, "y": 3.25 },
+ { "matrix": [3, 10], "x": 9.75, "y": 3.25 },
+ { "matrix": [3, 11], "x": 10.75, "y": 3.25 },
+ { "matrix": [3, 12], "x": 11.75, "y": 3.25 },
+ { "matrix": [3, 13], "x": 12.75, "y": 3.25 },
+ { "matrix": [4, 0], "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], "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], "x": 0, "y": 5.25 },
+ { "matrix": [5, 1], "x": 1.5, "y": 5.25 },
+ { "matrix": [5, 2], "x": 2.5, "y": 5.25 },
+ { "matrix": [5, 6], "x": 4, "y": 5.25 },
+ { "matrix": [5, 11], "x": 11, "y": 5.25 },
+ { "matrix": [5, 12], "x": 12.5, "y": 5.25 },
+ { "matrix": [5, 13], "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": [5, 16], "x": 17.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/cablecardesigns/phoenix/keymaps/default/keymap.c b/keyboards/cablecardesigns/phoenix/keymaps/default/keymap.c
new file mode 100644
index 00000000000..e008bee3b1d
--- /dev/null
+++ b/keyboards/cablecardesigns/phoenix/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Yiancar-Designs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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( /* 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_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_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_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, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/cablecardesigns/phoenix/keymaps/via/keymap.c b/keyboards/cablecardesigns/phoenix/keymaps/via/keymap.c
new file mode 100644
index 00000000000..e008bee3b1d
--- /dev/null
+++ b/keyboards/cablecardesigns/phoenix/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Yiancar-Designs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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( /* 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_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_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_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, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/cablecardesigns/phoenix/keymaps/via/rules.mk b/keyboards/cablecardesigns/phoenix/keymaps/via/rules.mk
new file mode 100755
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cablecardesigns/phoenix/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cablecardesigns/phoenix/phoenix.c b/keyboards/cablecardesigns/phoenix/phoenix.c
new file mode 100755
index 00000000000..251f79a953d
--- /dev/null
+++ b/keyboards/cablecardesigns/phoenix/phoenix.c
@@ -0,0 +1,22 @@
+/* Copyright 2023 Yiancar-Designs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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 led_init_ports(void) {
+ // Set our LED pins as open drain outputs
+ palSetLineMode(LED_CAPS_LOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
+}
diff --git a/keyboards/cablecardesigns/phoenix/readme.md b/keyboards/cablecardesigns/phoenix/readme.md
new file mode 100755
index 00000000000..0574da43517
--- /dev/null
+++ b/keyboards/cablecardesigns/phoenix/readme.md
@@ -0,0 +1,32 @@
+# Phoenix
+
+This is a standard TKL F13 layout PCB. It supports VIA.
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A TKL keyboard with STM32F072CB
+* Hardware Availability: https://cablecardesigns.co
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cablecardesigns/phoenix: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).
+
+### Reset
+
+- Unplug
+- Hold Escape
+- Plug In
+- Unplug
+- Release Escape
+
+### Flash
+
+- Unplug
+- Hold Escape
+- Plug In
+- Flash using QMK Toolbox or CLI (`make cablecardesigns/phoenix::flash`)
diff --git a/keyboards/cablecardesigns/phoenix/rules.mk b/keyboards/cablecardesigns/phoenix/rules.mk
new file mode 100755
index 00000000000..7ce6edcba90
--- /dev/null
+++ b/keyboards/cablecardesigns/phoenix/rules.mk
@@ -0,0 +1,7 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/cannonkeys/leviatan/info.json b/keyboards/cannonkeys/leviatan/info.json
new file mode 100644
index 00000000000..7e8d6c6fdd1
--- /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 00000000000..317eeab093d
--- /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 00000000000..a0cacca0f5c
--- /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 00000000000..d280f72d1ec
--- /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 00000000000..b3b684cf198
--- /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 00000000000..1e5b99807cb
--- /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 00000000000..70b90e95516
--- /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 00000000000..2a5031cd320
--- /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/churrosoft/deck8/info.json b/keyboards/churrosoft/deck8/info.json
new file mode 100644
index 00000000000..00fc2d1bad7
--- /dev/null
+++ b/keyboards/churrosoft/deck8/info.json
@@ -0,0 +1,43 @@
+{
+ "keyboard_name": "Deck-8",
+ "manufacturer": "Churrosoft",
+ "url": "https://churrosoft.ar/deck",
+ "maintainer": "Polsaker",
+ "usb": {
+ "vid": "0xCBBC",
+ "device_version": "1.0.0"
+ },
+ "build": {
+ "lto": true
+ },
+ "features": {
+ "bootmagic": true,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "matrix_pins": {
+ "direct": [
+ ["GP15", "GP18", "GP22", "GP24"],
+ ["GP13", "GP11", "GP0", "GP2"]
+ ]
+ },
+ "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":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]}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/churrosoft/deck8/keymaps/default/keymap.c b/keyboards/churrosoft/deck8/keymaps/default/keymap.c
new file mode 100644
index 00000000000..cc1bcea1097
--- /dev/null
+++ b/keyboards/churrosoft/deck8/keymaps/default/keymap.c
@@ -0,0 +1,25 @@
+/* Copyright 2023 Churrosoft
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public 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(
+ MEH(KC_A), MEH(KC_B), MEH(KC_C), MEH(KC_D),
+ MEH(KC_E), MEH(KC_F), MEH(KC_G), MEH(KC_H)
+ )
+};
\ No newline at end of file
diff --git a/keyboards/churrosoft/deck8/keymaps/via/keymap.c b/keyboards/churrosoft/deck8/keymaps/via/keymap.c
new file mode 100644
index 00000000000..2a1b10d442b
--- /dev/null
+++ b/keyboards/churrosoft/deck8/keymaps/via/keymap.c
@@ -0,0 +1,24 @@
+/* Copyright 2023 Churrosoft
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public 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(
+ MEH(KC_A), MEH(KC_B), MEH(KC_C), MEH(KC_D),
+ MEH(KC_E), MEH(KC_F), MEH(KC_G), MEH(KC_H)
+ )
+};
\ No newline at end of file
diff --git a/keyboards/churrosoft/deck8/keymaps/via/rules.mk b/keyboards/churrosoft/deck8/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/churrosoft/deck8/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/churrosoft/deck8/noleds/info.json b/keyboards/churrosoft/deck8/noleds/info.json
new file mode 100644
index 00000000000..fa1e2a420d8
--- /dev/null
+++ b/keyboards/churrosoft/deck8/noleds/info.json
@@ -0,0 +1,5 @@
+{
+ "usb": {
+ "pid": "0xC100"
+ }
+}
\ No newline at end of file
diff --git a/keyboards/churrosoft/deck8/noleds/readme.md b/keyboards/churrosoft/deck8/noleds/readme.md
new file mode 100644
index 00000000000..c4e8d70c810
--- /dev/null
+++ b/keyboards/churrosoft/deck8/noleds/readme.md
@@ -0,0 +1,27 @@
+# Churrosoft Deck-8 (No LEDs version)
+
+
+
+A small 8-key macropad
+
+* Keyboard Maintainer: [Polsaker](https://github.com/Polsaker)
+* Hardware Supported: ChurroDeck PCV rev. 1b, 1c and 1d
+* Hardware Availability: [churrosoft.ar](https://churrosoft.ar/deck)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make churrosoft/deck8/noleds:default
+
+Flashing example for this keyboard:
+
+ make churrosoft/deck8/noleds: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**: Short the `JP1` jumper in the back side 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/churrosoft/deck8/noleds/rules.mk b/keyboards/churrosoft/deck8/noleds/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/churrosoft/deck8/noleds/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/churrosoft/deck8/rgb/config.h b/keyboards/churrosoft/deck8/rgb/config.h
new file mode 100644
index 00000000000..2454c42fbab
--- /dev/null
+++ b/keyboards/churrosoft/deck8/rgb/config.h
@@ -0,0 +1,74 @@
+/* Copyright 2023 Churrosoft
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General 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_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR
+#define RGB_MATRIX_DEFAULT_HUE 152
+#define RGB_MATRIX_DEFAULT_SAT 232
+#define RGB_MATRIX_DEFAULT_VAL 180
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
+
+#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_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/churrosoft/deck8/rgb/info.json b/keyboards/churrosoft/deck8/rgb/info.json
new file mode 100644
index 00000000000..43f273be58c
--- /dev/null
+++ b/keyboards/churrosoft/deck8/rgb/info.json
@@ -0,0 +1,27 @@
+{
+ "keyboard_name": "Deck-8 RGB",
+ "usb": {
+ "pid": "0xC101"
+ },
+ "ws2812": {
+ "pin": "GP17",
+ "driver": "vendor"
+ },
+ "features": {
+ "rgb_matrix": true
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "max_brightness": 200,
+ "layout": [
+ {"flags": 4, "matrix": [0, 0], "x": 45, "y": 21},
+ {"flags": 4, "matrix": [0, 1], "x": 90, "y": 21},
+ {"flags": 4, "matrix": [0, 2], "x": 135, "y": 21},
+ {"flags": 4, "matrix": [0, 3], "x": 180, "y": 21},
+ {"flags": 4, "matrix": [1, 0], "x": 45, "y": 42},
+ {"flags": 4, "matrix": [1, 1], "x": 90, "y": 42},
+ {"flags": 4, "matrix": [1, 2], "x": 135, "y": 42},
+ {"flags": 4, "matrix": [1, 3], "x": 180, "y": 42}
+ ]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/churrosoft/deck8/rgb/readme.md b/keyboards/churrosoft/deck8/rgb/readme.md
new file mode 100644
index 00000000000..87fe400c243
--- /dev/null
+++ b/keyboards/churrosoft/deck8/rgb/readme.md
@@ -0,0 +1,27 @@
+# Churrosoft Deck-8 (RGB Version)
+
+
+
+A small 8-key macropad with RGB
+
+* Keyboard Maintainer: [Polsaker](https://github.com/Polsaker)
+* Hardware Supported: ChurroDeck PCV rev. 1b, 1c and 1d
+* Hardware Availability: [churrosoft.ar](https://churrosoft.ar/deck)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make churrosoft/deck8/rgb:default
+
+Flashing example for this keyboard:
+
+ make churrosoft/deck8/rgb:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the top left key) and plug in the keyboard
+* **Physical reset button**: Short the `JP1` jumper in the back side 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/churrosoft/deck8/rgb/rules.mk b/keyboards/churrosoft/deck8/rgb/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/churrosoft/deck8/rgb/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/cipulot/ec_alveus/1_0_0/config.h b/keyboards/cipulot/ec_alveus/1_0_0/config.h
new file mode 100644
index 00000000000..1947c308026
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/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 5
+#define MATRIX_COLS 16
+
+/* Custom matrix pins and port select array */
+#define MATRIX_ROW_PINS \
+ { A14, B3, A15, B5, B4 }
+#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_alveus/1_0_0/ec_switch_matrix.c b/keyboards/cipulot/ec_alveus/1_0_0/ec_switch_matrix.c
new file mode 100644
index 00000000000..783c00457c7
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/ec_switch_matrix.c
@@ -0,0 +1,183 @@
+/* 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]);
+ }
+}
+
+/* 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]);
+ 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_alveus/1_0_0/ec_switch_matrix.h b/keyboards/cipulot/ec_alveus/1_0_0/ec_switch_matrix.h
new file mode 100644
index 00000000000..9dcb216caa3
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/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_alveus/1_0_0/halconf.h b/keyboards/cipulot/ec_alveus/1_0_0/halconf.h
new file mode 100644
index 00000000000..5b71acecbbc
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/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_alveus/1_0_0/info.json b/keyboards/cipulot/ec_alveus/1_0_0/info.json
new file mode 100644
index 00000000000..3e195460891
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/info.json
@@ -0,0 +1,181 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "EC Alveus 1.0.0",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "audio": false,
+ "backlight": false,
+ "bootmagic": true,
+ "command": false,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": false
+ },
+ "mouse_key": {
+ "enabled": true
+ },
+ "processor": "STM32F401",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x6BA4",
+ "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": 1, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "1,13", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1 },
+ { "label": "2,14", "matrix": [2, 14], "x": 16.25, "y": 1 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "2,13", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "3,0", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "label": "3,1", "matrix": [3, 1], "x": 2.25, "y": 3 },
+ { "label": "3,2", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "3,3", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "3,4", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "3,5", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "3,6", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "3,7", "matrix": [3, 7], "x": 8.25, "y": 3 },
+ { "label": "3,8", "matrix": [3, 8], "x": 9.25, "y": 3 },
+ { "label": "3,9", "matrix": [3, 9], "x": 10.25, "y": 3 },
+ { "label": "3,10", "matrix": [3, 10], "x": 11.25, "y": 3 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 3 },
+ { "label": "4,0", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4 },
+ { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "label": "4,5", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
+ { "label": "4,11", "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "label": "4,12", "matrix": [4, 12], "x": 12.5, "y": 4 },
+ { "label": "4,13", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 },
+ { "label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 4 },
+ { "label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 4 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 4 }
+ ]
+ },
+ "LAYOUT_tkl_nofrow_ansi_tsangan_wkl": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "1,13", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1 },
+ { "label": "2,14", "matrix": [2, 14], "x": 16.25, "y": 1 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "2,13", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "3,0", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "label": "3,1", "matrix": [3, 1], "x": 2.25, "y": 3 },
+ { "label": "3,2", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "3,3", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "3,4", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "3,5", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "3,6", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "3,7", "matrix": [3, 7], "x": 8.25, "y": 3 },
+ { "label": "3,8", "matrix": [3, 8], "x": 9.25, "y": 3 },
+ { "label": "3,9", "matrix": [3, 9], "x": 10.25, "y": 3 },
+ { "label": "3,10", "matrix": [3, 10], "x": 11.25, "y": 3 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 3 },
+ { "label": "4,0", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "label": "4,5", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
+ { "label": "4,11", "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "label": "4,13", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 },
+ { "label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 4 },
+ { "label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 4 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_alveus/1_0_0/keymaps/default/keymap.c b/keyboards/cipulot/ec_alveus/1_0_0/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d111c6a6853
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
+/* 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_nofrow_ansi_tsangan_wkl(
+ 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_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, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl(
+ 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, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [2] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [3] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_alveus/1_0_0/keymaps/via/config.h b/keyboards/cipulot/ec_alveus/1_0_0/keymaps/via/config.h
new file mode 100644
index 00000000000..ebf954d07ac
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/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_alveus/1_0_0/keymaps/via/keymap.c b/keyboards/cipulot/ec_alveus/1_0_0/keymaps/via/keymap.c
new file mode 100644
index 00000000000..5fc6c4d94e0
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/keymaps/via/keymap.c
@@ -0,0 +1,49 @@
+/* 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_1, KC_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, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [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, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [2] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_alveus/1_0_0/keymaps/via/rules.mk b/keyboards/cipulot/ec_alveus/1_0_0/keymaps/via/rules.mk
new file mode 100644
index 00000000000..520b11f2031
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+
+SRC += via_apc.c
diff --git a/keyboards/cipulot/ec_alveus/1_0_0/keymaps/via/via_apc.c b/keyboards/cipulot/ec_alveus/1_0_0/keymaps/via/via_apc.c
new file mode 100644
index 00000000000..5ea77af44c8
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/keymaps/via/via_apc.c
@@ -0,0 +1,156 @@
+/* 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"
+
+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);
+}
diff --git a/keyboards/cipulot/ec_alveus/1_0_0/matrix.c b/keyboards/cipulot/ec_alveus/1_0_0/matrix.c
new file mode 100644
index 00000000000..1850acf2641
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/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_alveus/1_0_0/mcuconf.h b/keyboards/cipulot/ec_alveus/1_0_0/mcuconf.h
new file mode 100644
index 00000000000..d91f576bd48
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/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_alveus/1_0_0/readme.md b/keyboards/cipulot/ec_alveus/1_0_0/readme.md
new file mode 100644
index 00000000000..01e82a88055
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/readme.md
@@ -0,0 +1,27 @@
+# EC Alveus
+
+
+
+EC FRL TKL keyboard.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: EC Alveus 1.0.0
+* Hardware Availability: Raffle Sale from [Densus](https://www.instagram.com/densusdesign/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_alveus/1_0_0:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_alveus/1_0_0: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_alveus/1_0_0/rules.mk b/keyboards/cipulot/ec_alveus/1_0_0/rules.mk
new file mode 100644
index 00000000000..b8929fa590d
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_0_0/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/ec_alveus/1_2_0/config.h b/keyboards/cipulot/ec_alveus/1_2_0/config.h
new file mode 100644
index 00000000000..1947c308026
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/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 5
+#define MATRIX_COLS 16
+
+/* Custom matrix pins and port select array */
+#define MATRIX_ROW_PINS \
+ { A14, B3, A15, B5, B4 }
+#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_alveus/1_2_0/ec_switch_matrix.c b/keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.c
new file mode 100644
index 00000000000..783c00457c7
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.c
@@ -0,0 +1,183 @@
+/* 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]);
+ }
+}
+
+/* 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]);
+ 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_alveus/1_2_0/ec_switch_matrix.h b/keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.h
new file mode 100644
index 00000000000..9dcb216caa3
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/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_alveus/1_2_0/halconf.h b/keyboards/cipulot/ec_alveus/1_2_0/halconf.h
new file mode 100644
index 00000000000..5b71acecbbc
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/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_alveus/1_2_0/info.json b/keyboards/cipulot/ec_alveus/1_2_0/info.json
new file mode 100644
index 00000000000..65af74e99ba
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/info.json
@@ -0,0 +1,255 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "EC Alveus 1.2.0",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "audio": false,
+ "backlight": false,
+ "bootmagic": true,
+ "command": false,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": false
+ },
+ "mouse_key": {
+ "enabled": true
+ },
+ "processor": "STM32F401",
+ "usb": {
+ "device_version": "1.2.0",
+ "pid": "0x6B90",
+ "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": 1, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "x": 13, "y": 0 },
+ { "label": "1,13", "matrix": [1, 13], "x": 14, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1 },
+ { "label": "2,14", "matrix": [2, 14], "x": 16.25, "y": 1 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "2,12", "matrix": [2, 12], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "3,0", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "label": "3,1", "matrix": [3, 1], "x": 2.25, "y": 3 },
+ { "label": "3,2", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "3,3", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "3,4", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "3,5", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "3,6", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "3,7", "matrix": [3, 7], "x": 8.25, "y": 3 },
+ { "label": "3,8", "matrix": [3, 8], "x": 9.25, "y": 3 },
+ { "label": "3,9", "matrix": [3, 9], "x": 10.25, "y": 3 },
+ { "label": "3,10", "matrix": [3, 10], "x": 11.25, "y": 3 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 3 },
+ { "label": "4,0", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4 },
+ { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "label": "4,5", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
+ { "label": "4,11", "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "label": "4,12", "matrix": [4, 12], "x": 12.5, "y": 4 },
+ { "label": "4,13", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 },
+ { "label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 4 },
+ { "label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 4 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 4 }
+ ]
+ },
+ "LAYOUT_tkl_nofrow_ansi_tsangan_wkl": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "1,13", "matrix": [1, 13], "w": 2, "x": 13, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1 },
+ { "label": "2,14", "matrix": [2, 14], "x": 16.25, "y": 1 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "2,12", "matrix": [2, 12], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "3,0", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "label": "3,1", "matrix": [3, 1], "x": 2.25, "y": 3 },
+ { "label": "3,2", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "3,3", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "3,4", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "3,5", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "3,6", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "3,7", "matrix": [3, 7], "x": 8.25, "y": 3 },
+ { "label": "3,8", "matrix": [3, 8], "x": 9.25, "y": 3 },
+ { "label": "3,9", "matrix": [3, 9], "x": 10.25, "y": 3 },
+ { "label": "3,10", "matrix": [3, 10], "x": 11.25, "y": 3 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 3 },
+ { "label": "4,0", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "label": "4,5", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
+ { "label": "4,11", "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "label": "4,13", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 },
+ { "label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 4 },
+ { "label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 4 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 4 }
+ ]
+ },
+ "LAYOUT_tkl_nofrow_ansi_tsangan_wkl_split_bs": {
+ "layout": [
+ { "label": "0,0", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "0,1", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "0,2", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "0,3", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "0,4", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "0,5", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "0,6", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "0,7", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "0,8", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "0,9", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0,10", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "0,11", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "0,12", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "0,13", "matrix": [0, 13], "x": 13, "y": 0 },
+ { "label": "1,13", "matrix": [1, 13], "x": 14, "y": 0 },
+ { "label": "0,14", "matrix": [0, 14], "x": 15.25, "y": 0 },
+ { "label": "0,15", "matrix": [0, 15], "x": 16.25, "y": 0 },
+ { "label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 0 },
+ { "label": "1,0", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "2,13", "matrix": [2, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "1,14", "matrix": [1, 14], "x": 15.25, "y": 1 },
+ { "label": "2,14", "matrix": [2, 14], "x": 16.25, "y": 1 },
+ { "label": "2,15", "matrix": [2, 15], "x": 17.25, "y": 1 },
+ { "label": "2,0", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "2,12", "matrix": [2, 12], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "3,0", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "label": "3,1", "matrix": [3, 1], "x": 2.25, "y": 3 },
+ { "label": "3,2", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "3,3", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "3,4", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "3,5", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "3,6", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "3,7", "matrix": [3, 7], "x": 8.25, "y": 3 },
+ { "label": "3,8", "matrix": [3, 8], "x": 9.25, "y": 3 },
+ { "label": "3,9", "matrix": [3, 9], "x": 10.25, "y": 3 },
+ { "label": "3,10", "matrix": [3, 10], "x": 11.25, "y": 3 },
+ { "label": "3,13", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
+ { "label": "3,14", "matrix": [3, 14], "x": 16.25, "y": 3 },
+ { "label": "4,0", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "label": "4,2", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "label": "4,5", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
+ { "label": "4,11", "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
+ { "label": "4,13", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 },
+ { "label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 4 },
+ { "label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 4 },
+ { "label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/default/keymap.c b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d111c6a6853
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
+/* 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_nofrow_ansi_tsangan_wkl(
+ 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_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, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl(
+ 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, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [2] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [3] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/tkl_nofrow_ansi_tsangan_wkl_split_bs/keymap.c b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/tkl_nofrow_ansi_tsangan_wkl_split_bs/keymap.c
new file mode 100644
index 00000000000..4552cd64575
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/tkl_nofrow_ansi_tsangan_wkl_split_bs/keymap.c
@@ -0,0 +1,49 @@
+/* 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_nofrow_ansi_tsangan_wkl_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_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, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl_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, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [2] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl_split_bs(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [3] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl_split_bs(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/config.h b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/config.h
new file mode 100644
index 00000000000..ebf954d07ac
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/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_alveus/1_2_0/keymaps/via/keymap.c b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/keymap.c
new file mode 100644
index 00000000000..54a8f3b4f00
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/keymap.c
@@ -0,0 +1,49 @@
+/* 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_1, KC_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_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, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [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, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [2] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/rules.mk b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/rules.mk
new file mode 100644
index 00000000000..520b11f2031
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+
+SRC += via_apc.c
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/via_apc.c b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/via_apc.c
new file mode 100644
index 00000000000..5ea77af44c8
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/via_apc.c
@@ -0,0 +1,156 @@
+/* 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"
+
+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);
+}
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/matrix.c b/keyboards/cipulot/ec_alveus/1_2_0/matrix.c
new file mode 100644
index 00000000000..1850acf2641
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/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_alveus/1_2_0/mcuconf.h b/keyboards/cipulot/ec_alveus/1_2_0/mcuconf.h
new file mode 100644
index 00000000000..d91f576bd48
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/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_alveus/1_2_0/readme.md b/keyboards/cipulot/ec_alveus/1_2_0/readme.md
new file mode 100644
index 00000000000..e4c3ef86c3f
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/readme.md
@@ -0,0 +1,27 @@
+# EC Alveus
+
+
+
+EC FRL TKL keyboard.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: EC Alveus 1.2.0
+* Hardware Availability: Raffle Sale from [Densus](https://www.instagram.com/densusdesign/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_alveus/1_2_0:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_alveus/1_2_0: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_alveus/1_2_0/rules.mk b/keyboards/cipulot/ec_alveus/1_2_0/rules.mk
new file mode 100644
index 00000000000..b8929fa590d
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/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/crkbd/keymaps/thunderbird2086/config.h b/keyboards/crkbd/keymaps/thunderbird2086/config.h
index ad2bfcabc7c..8251bc9b8fc 100644
--- a/keyboards/crkbd/keymaps/thunderbird2086/config.h
+++ b/keyboards/crkbd/keymaps/thunderbird2086/config.h
@@ -14,6 +14,7 @@
# undef TAPPING_TERM
#endif
#define TAPPING_TERM 200
+#define VER_NEWLINE_WAIT 200 // in milliseconds
#define NO_ACTION_ONESHOT
@@ -32,63 +33,80 @@
#define RGBLIGHT_SLEEP
#if defined(RGBLIGHT_ENABLE)
+# define RGBLIGHT_LAYERS
# define RGBLIGHT_LIMIT_VAL 150
# define RGBLIGHT_HUE_STEP 16
# define RGBLIGHT_SAT_STEP 32
# define RGBLIGHT_VAL_STEP 32
+# define RGBLIGHT_EFFECT_ALTERING
+# define RGBLIGHT_EFFECT_BREATHING
+# define RGBLIGHT_EFFECT_CHRISTMAS
+# define RGBLIGHT_EFFECT_KNIGHT
# define RGBLIGHT_EFFECT_RAINBOW_MOOD
# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-# define RGBLIGHT_EFFECT_KNIGHT
+# define RGBLIGHT_EFFECT_RGB_TEST
+# define RGBLIGHT_EFFECT_SNAKE
+# define RGBLIGHT_EFFECT_STATIC_GRADIENT
+# define RGBLIGHT_EFFECT_TWINKLE
#endif
#if defined(RGB_MATRIX_ENABLE)
-# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
-# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
-# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
+# define SPLIT_LAYER_STATE_ENABLE
+# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
// limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
-# define RGB_MATRIX_HUE_STEP 32
-# define RGB_MATRIX_SAT_STEP 64
-# define RGB_MATRIX_VAL_STEP 64
-# define RGB_MATRIX_SPD_STEP 20
-# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR
+# define RGB_MATRIX_HUE_STEP 32
+# define RGB_MATRIX_SAT_STEP 64
+# define RGB_MATRIX_VAL_STEP 64
+# define RGB_MATRIX_SPD_STEP 20
+# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR
/* Disable the animations you don't want/need. You will need to disable a good number of these *
* because they take up a lot of space. Disable until you can successfully compile your firmware. */
-# undef ENABLE_RGB_MATRIX_ALPHAS_MODS
+# define ENABLE_RGB_MATRIX_ALPHAS_MODS
# undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-# define ENABLE_RGB_MATRIX_BREATHING
+# undef ENABLE_RGB_MATRIX_BREATHING
# 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
-# define ENABLE_RGB_MATRIX_CYCLE_ALL
-# undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# undef ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
# undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-# undef ENABLE_RGB_MATRIX_DUAL_BEACON
# undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
# undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-# undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# undef ENABLE_RGB_MATRIX_DUAL_BEACON
+# define 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_HUE_PENDULUM
+# undef ENABLE_RGB_MATRIX_HUE_WAVE
+# undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+# undef ENABLE_RGB_MATRIX_PIXEL_RAIN
# undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
-# undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-# 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
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-# define 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_DIGITAL_RAIN
+
+# 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
+# undef ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+# undef ENABLE_RGB_MATRIX_SOLID_SPLASH
+# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif
diff --git a/keyboards/crkbd/keymaps/thunderbird2086/keycodes.h b/keyboards/crkbd/keymaps/thunderbird2086/keycodes.h
index cb10a3ac074..90b26b88a4e 100644
--- a/keyboards/crkbd/keymaps/thunderbird2086/keycodes.h
+++ b/keyboards/crkbd/keymaps/thunderbird2086/keycodes.h
@@ -5,12 +5,15 @@
enum custom_keycodes {
// Layer Macros
- COLEMAK = SAFE_RANGE,
+ COLEMAK = QK_USER,
QWERTY,
FUNCTION,
CODE,
ADJUST,
+# if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
RGBRST,
+# endif
+ VRSN,
// Secret Macros
M_XXX1,
M_XXX2,
diff --git a/keyboards/crkbd/keymaps/thunderbird2086/keymap.c b/keyboards/crkbd/keymaps/thunderbird2086/keymap.c
index 7bc23db8aa7..69c5d25fd44 100644
--- a/keyboards/crkbd/keymaps/thunderbird2086/keymap.c
+++ b/keyboards/crkbd/keymaps/thunderbird2086/keymap.c
@@ -80,6 +80,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
// clang-format off
+#if defined(RGBLIGHT_ENABLE)
+__attribute__((weak))
+void set_rgb_by_layer(layer_state_t state) {
+ return;
+}
+#endif
+
layer_state_t layer_state_set_user(layer_state_t state) {
+# if defined(RGBLIGHT_ENABLE)
+ set_rgb_by_layer(state);
+# endif
return update_tri_layer_state(state, _FUNCTION, _ADJUST, _SECRET);
}
diff --git a/keyboards/crkbd/keymaps/thunderbird2086/layers_block.h b/keyboards/crkbd/keymaps/thunderbird2086/layers_block.h
index ba41cd92234..db47ea65ed6 100644
--- a/keyboards/crkbd/keymaps/thunderbird2086/layers_block.h
+++ b/keyboards/crkbd/keymaps/thunderbird2086/layers_block.h
@@ -48,10 +48,10 @@
#if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE)
# define ________________________ADJUST_L2________________________ RGBRST , XXXXXXX , RGB_SPI , RGB_SAI , RGB_HUI , RGB_VAI
-# define ________________________ADJUST_L3________________________ EE_CLR , XXXXXXX , RGB_SPD , RGB_SAD , RGB_HUD , RGB_VAD
+# define ________________________ADJUST_L3________________________ EE_CLR , VRSN , RGB_SPD , RGB_SAD , RGB_HUD , RGB_VAD
#else
# define ________________________ADJUST_L2________________________ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
-# define ________________________ADJUST_L3________________________ EE_CLR , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
+# define ________________________ADJUST_L3________________________ EE_CLR , VRSN , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
#endif
#if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE)
diff --git a/keyboards/crkbd/keymaps/thunderbird2086/process_records.c b/keyboards/crkbd/keymaps/thunderbird2086/process_records.c
index 381cf281e5c..46b9126677f 100644
--- a/keyboards/crkbd/keymaps/thunderbird2086/process_records.c
+++ b/keyboards/crkbd/keymaps/thunderbird2086/process_records.c
@@ -4,6 +4,7 @@
#include QMK_KEYBOARD_H
#include "keycodes.h"
+#include "version.h"
__attribute__((weak))
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
@@ -23,18 +24,31 @@ bool process_record_oled(uint16_t keycode, keyrecord_t *record) {
#endif
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
-
- case COLEMAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_COLEMAK);
+ if (record->event.pressed) {
+ switch (keycode) {
+ case COLEMAK:
+ set_single_persistent_default_layer(_COLEMAK);
+ break;
+ case QWERTY:
+ set_single_persistent_default_layer(_QWERTY);
+ break;
+# if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+ case RGBRST:
+# if defined(RGBLIGHT_ENABLE)
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+# else
+ eeconfig_update_rgb_matrix_default();
+# endif
+ break;
+# endif
+ case VRSN:
+ send_string(
+ "# qmk " QMK_VERSION "\n" SS_DELAY(VER_NEWLINE_WAIT)
+ "# " QMK_KEYBOARD "/" QMK_KEYMAP "\n" SS_DELAY(VER_NEWLINE_WAIT)
+ "# built on: " QMK_BUILDDATE "\n");
+ break;
}
- break;
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- break;
}
return process_record_keymap(keycode, record) && process_record_secrets(keycode, record)
diff --git a/keyboards/crkbd/keymaps/thunderbird2086/readme.md b/keyboards/crkbd/keymaps/thunderbird2086/readme.md
index 6400309fe8d..cb57f20aecb 100644
--- a/keyboards/crkbd/keymaps/thunderbird2086/readme.md
+++ b/keyboards/crkbd/keymaps/thunderbird2086/readme.md
@@ -54,7 +54,7 @@ The concept is Mac and **baby finger** friendly keymap.
| --- | --- | --- |
| ESC | Caps lock | |
-- ADJUST: RGB control, Power control, default layer setting and reset
+- ADJUST: RGB control, Power control, default layer setting, QMK version and reset

- SECRET: hold `ADJUST` and `FUNCTION` to activate
diff --git a/keyboards/crkbd/keymaps/thunderbird2086/rgb.c b/keyboards/crkbd/keymaps/thunderbird2086/rgb.c
new file mode 100644
index 00000000000..d9b0003c881
--- /dev/null
+++ b/keyboards/crkbd/keymaps/thunderbird2086/rgb.c
@@ -0,0 +1,61 @@
+// Copyright 2023 Allen Choi (@thunderbird2086)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+# include QMK_KEYBOARD_H
+
+# include "keycodes.h"
+
+# ifdef RGBLIGHT_ENABLE
+
+const rgblight_segment_t PROGMEM _rgb_layer_0[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 56, HSV_BLUE}
+);
+const rgblight_segment_t PROGMEM _rgb_layer_1[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 56, HSV_GREEN}
+);
+const rgblight_segment_t PROGMEM _rgb_layer_2[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 56, HSV_YELLOW}
+);
+
+const rgblight_segment_t* const PROGMEM _rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+ _rgb_layer_0,
+ _rgb_layer_1,
+ _rgb_layer_2
+);
+
+void keyboard_post_init_user(void) {
+ // Enable the LED layers
+ rgblight_layers = _rgb_layers;
+}
+
+void set_rgb_by_layer(layer_state_t state) {
+ rgblight_set_layer_state(0, layer_state_cmp(state, _CODE));
+ rgblight_set_layer_state(1, layer_state_cmp(state, _FUNCTION));
+ rgblight_set_layer_state(2, layer_state_cmp(state, _ADJUST));
+}
+
+# else
+
+bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
+ for (uint8_t i = led_min; i < led_max; i++) {
+ switch(get_highest_layer(layer_state|default_layer_state)) {
+ case _CODE:
+ rgb_matrix_set_color(i, RGB_BLUE);
+ break;
+ case _FUNCTION:
+ rgb_matrix_set_color(i, RGB_GREEN);
+ break;
+ case _ADJUST:
+ rgb_matrix_set_color(i, RGB_YELLOW);
+ // RGB_WHITE caused crash
+ break;
+ default:
+ break;
+ }
+ }
+ return false;
+}
+
+# endif
+#endif
diff --git a/keyboards/crkbd/keymaps/thunderbird2086/rules.mk b/keyboards/crkbd/keymaps/thunderbird2086/rules.mk
index 4da48db08e3..adc61ea60d3 100644
--- a/keyboards/crkbd/keymaps/thunderbird2086/rules.mk
+++ b/keyboards/crkbd/keymaps/thunderbird2086/rules.mk
@@ -11,6 +11,7 @@ TAP_DANCE_ENABLE = yes
SRC += oled.c
SRC += process_records.c
+SRC += rgb.c
SRC += tap_dances.c
ifneq ("$(wildcard keyboards/crkbd/keymaps/thunderbird2086/secrets.c)","")
diff --git a/keyboards/custommk/ergostrafer/config.h b/keyboards/custommk/ergostrafer/config.h
new file mode 100644
index 00000000000..c5a0ec75b57
--- /dev/null
+++ b/keyboards/custommk/ergostrafer/config.h
@@ -0,0 +1,26 @@
+// Copyright 2023 customMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// FRAM configuration
+#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN B7
+#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 4 // 48MHz / 4 = 12MHz; max supported by MB85R64 is 20MHz
+
+// 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
+
+#define TAP_CODE_DELAY 10
+
+// Audio configuration
+#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
\ No newline at end of file
diff --git a/keyboards/maple_computing/c39/keymaps/drashna/config.h b/keyboards/custommk/ergostrafer/halconf.h
similarity index 59%
rename from keyboards/maple_computing/c39/keymaps/drashna/config.h
rename to keyboards/custommk/ergostrafer/halconf.h
index 5b4f82c9b14..aed037ba2a4 100644
--- a/keyboards/maple_computing/c39/keymaps/drashna/config.h
+++ b/keyboards/custommk/ergostrafer/halconf.h
@@ -1,4 +1,4 @@
-/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
+/* Copyright 2023 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
@@ -16,19 +16,15 @@
#pragma once
-// place overrides here
-#undef MATRIX_COL_PINS
-#define MATRIX_COL_PINS \
- { A3, A2, A1, A0, B13, B14, B15, B9, B3, B2, B4, A10, A9 }
-#undef MATRIX_ROW_PINS
-#define MATRIX_ROW_PINS \
- { B7, B1, B0 }
+#define HAL_USE_PWM TRUE
-#define WS2812_DI_PIN B10
-#define RGBLED_NUM 15
+#define HAL_USE_SPI TRUE
-#define SOLENOID_PIN B11
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
-#define AUDIO_PIN A5
-#define AUDIO_PIN_ALT A4
-#define AUDIO_PIN_ALT_AS_NEGATIVE
+#define SERIAL_BUFFERS_SIZE 256
+
+// This enables interrupt-driven mode
+#define SPI_USE_WAIT TRUE
+
+#include_next
diff --git a/keyboards/custommk/ergostrafer/info.json b/keyboards/custommk/ergostrafer/info.json
new file mode 100644
index 00000000000..66f1562fd98
--- /dev/null
+++ b/keyboards/custommk/ergostrafer/info.json
@@ -0,0 +1,83 @@
+{
+ "manufacturer": "customMK",
+ "keyboard_name": "ErgoStrafer",
+ "maintainer": "customMK",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "ROW2COL",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "encoder": true,
+ "audio": true
+ },
+ "matrix_pins": {
+ "cols": ["B0", "A1", "A2", "A3", "A6", "B6", "B10"],
+ "rows": ["C13", "C14", "C15", "B1", "A7", "A5"]
+ },
+ "processor": "STM32F411",
+ "url": "https://shop.custommk.com/collections/ergostrafer/products/ergostrafer",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0xFAB8",
+ "vid": "0xF35B"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "label":"F9", "x":7.5, "y":0 },
+ { "matrix": [0, 1], "label":"7", "x":1.5, "y":1.25 },
+ { "matrix": [0, 2], "label":"8", "x":2.5, "y":1.25 },
+ { "matrix": [0, 3], "label":"9", "x":3.5, "y":1.25 },
+ { "matrix": [0, 4], "label":"0", "x":4.5, "y":1.25 },
+ { "matrix": [0, 5], "label":"-", "x":5.5, "y":1.25 },
+ { "matrix": [0, 6], "label":"T", "x":7.25, "y":3.25, "w":1.5 },
+
+ { "matrix": [1, 0], "label":"PrtScr", "x":7.5, "y":1 },
+ { "matrix": [1, 1], "label":"1", "x":1, "y":2.25 },
+ { "matrix": [1, 2], "label":"2", "x":2, "y":2.25 },
+ { "matrix": [1, 3], "label":"3", "x":3, "y":2.25 },
+ { "matrix": [1, 4], "label":"5", "x":5, "y":2.25 },
+ { "matrix": [1, 5], "label":"6", "x":6, "y":2.25 },
+ { "matrix": [1, 6], "label":"G", "x":7.25, "y":4.25, "w":1.5 },
+
+ { "matrix": [2, 0], "label":"F5", "x":7.5, "y":2 },
+ { "matrix": [2, 1], "label":"Tab", "x":1, "y":3.5 },
+ { "matrix": [2, 2], "label":"Q", "x":2.5, "y":3.4 },
+ { "matrix": [2, 3], "label":"4", "x":4, "y":2.25 },
+ { "matrix": [2, 4], "label":"E", "x":4.5, "y":3.4 },
+ { "matrix": [2, 5], "label":"R", "x":6, "y":3.3 },
+ { "matrix": [2, 6], "label":"B", "x":6.5, "y":5.75, "w":1.5 },
+
+ { "matrix": [3, 0], "label":"Caps Lock", "x":0, "y":3.5 },
+ { "matrix": [3, 1], "label":"L Alt", "x":0.25, "y":4.75, "w":1.5 },
+ { "matrix": [3, 2], "label":"A", "x":2.5, "y":4.5 },
+ { "matrix": [3, 3], "label":"W", "x":3.5, "y":3.4 },
+ { "matrix": [3, 4], "label":"D", "x":4.5, "y":4.5 },
+ { "matrix": [3, 5], "label":"F", "x":6, "y":4.3 },
+ { "matrix": [3, 6], "label":"P", "x":8, "y":5.75 },
+
+ { "matrix": [4, 1], "label":"L Shift", "x":0.25, "y":5.75, "w":1.5 },
+ { "matrix": [4, 2], "label":"Z", "x":2.5, "y":5.6 },
+ { "matrix": [4, 3], "label":"S", "x":3.5, "y":4.5 },
+ { "matrix": [4, 5], "label":"V", "x":5, "y":5.75, "w":1.5 },
+ { "matrix": [4, 6], "label":"Space", "x":6.5, "y":6.85, "w":1.75 }
+
+ { "matrix": [5, 1], "label":"L Ctrl Duck", "x":0.25, "y":6.75, "w":1.5 },
+ { "matrix": [5, 3], "label":"X", "x":3.5, "y":5.6 },
+ { "matrix": [5, 5], "label":"C", "x":4.75, "y":6.85, "w":1.75 },
+ { "matrix": [5, 6], "label":"L Ctrl", "x":9.5, "y":5.75 }
+ ]
+ }
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "A8", "pin_b": "A4"},
+ { "pin_a": "B12", "pin_b": "B14"},
+ { "pin_a": "B15", "pin_b": "A15"}
+ ]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/custommk/ergostrafer/keymaps/default/keymap.c b/keyboards/custommk/ergostrafer/keymaps/default/keymap.c
new file mode 100644
index 00000000000..31ceb4f1e69
--- /dev/null
+++ b/keyboards/custommk/ergostrafer/keymaps/default/keymap.c
@@ -0,0 +1,21 @@
+// Copyright 2023 customMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_F9, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_T,
+ KC_PSCR, KC_1, KC_2, KC_3, KC_5, KC_6, KC_G,
+ KC_F5, KC_TAB, KC_Q, KC_4, KC_E, KC_R, KC_B,
+ KC_CAPS, KC_LALT, KC_A, KC_W, KC_D, KC_F, KC_P,
+ KC_LSFT, KC_Z, KC_S, KC_V, KC_SPC,
+ KC_LCTL, KC_X, KC_C, KC_LCTL
+ )
+};
+
+#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), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/custommk/ergostrafer/keymaps/default/rules.mk b/keyboards/custommk/ergostrafer/keymaps/default/rules.mk
new file mode 100644
index 00000000000..a40474b4d5c
--- /dev/null
+++ b/keyboards/custommk/ergostrafer/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/custommk/ergostrafer/keymaps/via/config.h b/keyboards/custommk/ergostrafer/keymaps/via/config.h
new file mode 100644
index 00000000000..81f399d46ba
--- /dev/null
+++ b/keyboards/custommk/ergostrafer/keymaps/via/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 customMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// With 8k FRAM, max out dynamic keymap layers and macros
+// 7x6 matrix (84 bytes) and three encoders (12 bytes) consume 96 bytes per layer
+// 32 layers consumes 3072 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/ergostrafer/keymaps/via/keymap.c b/keyboards/custommk/ergostrafer/keymaps/via/keymap.c
new file mode 100644
index 00000000000..68f1df1c26d
--- /dev/null
+++ b/keyboards/custommk/ergostrafer/keymaps/via/keymap.c
@@ -0,0 +1,21 @@
+// Copyright 2023 customMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_F9, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_T,
+ KC_PSCR, KC_1, KC_2, KC_3, KC_5, KC_6, KC_G,
+ KC_F5, KC_TAB, KC_Q, KC_4, KC_E, KC_R, KC_B,
+ KC_CAPS, KC_LALT, KC_A, KC_W, KC_D, KC_F, KC_P,
+ KC_LSFT, KC_Z, KC_S, KC_V, KC_SPC,
+ KC_LCTL, KC_X, KC_C, KC_LCTL
+ )
+};
+
+//#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), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+};
+//#endif
\ No newline at end of file
diff --git a/keyboards/custommk/ergostrafer/keymaps/via/rules.mk b/keyboards/custommk/ergostrafer/keymaps/via/rules.mk
new file mode 100644
index 00000000000..4253f570f0b
--- /dev/null
+++ b/keyboards/custommk/ergostrafer/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/ergostrafer/mcuconf.h b/keyboards/custommk/ergostrafer/mcuconf.h
new file mode 100644
index 00000000000..160b94f786e
--- /dev/null
+++ b/keyboards/custommk/ergostrafer/mcuconf.h
@@ -0,0 +1,27 @@
+/* Copyright 2023 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
+
+// Used for audio
+#undef STM32_PWM_USE_TIM4
+#define STM32_PWM_USE_TIM4 TRUE
+
+// Used for FRAM
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
\ No newline at end of file
diff --git a/keyboards/custommk/ergostrafer/readme.md b/keyboards/custommk/ergostrafer/readme.md
new file mode 100644
index 00000000000..dab089647ff
--- /dev/null
+++ b/keyboards/custommk/ergostrafer/readme.md
@@ -0,0 +1,27 @@
+# ergostrafer
+
+
+
+ErgoStrafer is a gaming mechanical keyboard that reproduces the layout of the discontinued SteelSeries Merc Stealth a.k.a. Zboard.
+
+* Keyboard Maintainer: [customMK](https://github.com/customMK)
+* Hardware Supported: ErgoStrafer
+* Hardware Availability: [customMK](https://shop.custommk.com/collections/ergostrafer/products/ergostrafer)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make custommk/ergostrafer:default
+
+Flashing example for this keyboard:
+
+ make custommk/ergostrafer: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 "Load" key in the top right corner) 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/custommk/ergostrafer/rules.mk b/keyboards/custommk/ergostrafer/rules.mk
new file mode 100644
index 00000000000..ee519ea8b55
--- /dev/null
+++ b/keyboards/custommk/ergostrafer/rules.mk
@@ -0,0 +1,3 @@
+EEPROM_DRIVER = spi
+
+AUDIO_DRIVER = pwm_hardware
diff --git a/keyboards/densus/alveus/mx/info.json b/keyboards/densus/alveus/mx/info.json
new file mode 100644
index 00000000000..839c84fb453
--- /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 00000000000..c785b42a7df
--- /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 00000000000..9106258c027
--- /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 00000000000..43061db1dd4
--- /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 00000000000..3a90c9b0f33
--- /dev/null
+++ b/keyboards/densus/alveus/mx/readme.md
@@ -0,0 +1,26 @@
+# Alveus
+
+
+
+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 00000000000..7ff128fa692
--- /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/sbl/info.json b/keyboards/dnworks/sbl/info.json
index cf9f4a2dfdc..81461ead4d5 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], "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": [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], "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 91c381d8327..f9b8bc13f48 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 91c381d8327..f9b8bc13f48 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 00000000000..a3993e18d0b
--- /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 3f3fa1c3327..71a300b9cd8 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 fb06acfd803..2e385d24e30 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 2890fe604a1..2e385d24e30 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 00000000000..9e66c8993fa
--- /dev/null
+++ b/keyboards/doio/kb30/readme.md
@@ -0,0 +1,27 @@
+# Megalodon DOIO 30% Designer Keyboard
+
+
+
+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 3f97ac6842a..0601ba881ca 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 2496fef0831..b2fd7d2273d 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 fef8a33f8f1..7456316f159 100644
--- a/keyboards/doio/kb38/readme.md
+++ b/keyboards/doio/kb38/readme.md
@@ -1,5 +1,7 @@
# doio/kb38
+
+
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 5149dd897fc..83e2951baa9 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/dztech/pluto/info.json b/keyboards/dztech/pluto/info.json
new file mode 100644
index 00000000000..ab201befa31
--- /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 00000000000..9edd2f178f0
--- /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 00000000000..9edd2f178f0
--- /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 00000000000..1e5b99807cb
--- /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 00000000000..e4db0deb39f
--- /dev/null
+++ b/keyboards/dztech/pluto/readme.md
@@ -0,0 +1,30 @@
+# PLUTO
+
+
+
+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 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/dztech/pluto/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/ebastler/e80_1800/info.json b/keyboards/ebastler/e80_1800/info.json
index c735adc927d..dfb669e72e6 100644
--- a/keyboards/ebastler/e80_1800/info.json
+++ b/keyboards/ebastler/e80_1800/info.json
@@ -113,7 +113,7 @@
{"matrix": [4, 11], "label": ";", "x": 10.75, "y": 4},
{"matrix": [4, 12], "label": "'", "x": 11.75, "y": 4},
{"matrix": [4, 13], "label": "#", "x": 12.75, "y": 4},
- {"matrix": [4, 14], "label": "Enter", "x": 13.75, "y": 3, "w": 1.25},
+ {"matrix": [4, 14], "label": "Enter", "x": 13.75, "y": 4, "w": 1.25},
{"matrix": [4, 15], "label": "4", "x": 15.5, "y": 4},
{"matrix": [4, 16], "label": "5", "x": 16.5, "y": 4},
{"matrix": [4, 17], "label": "6", "x": 17.5, "y": 4},
@@ -452,7 +452,7 @@
{"matrix": [4, 10], "label": "L", "x": 9.75, "y": 4},
{"matrix": [4, 11], "label": ";", "x": 10.75, "y": 4},
{"matrix": [4, 12], "label": "'", "x": 11.75, "y": 4},
- {"matrix": [4, 14], "label": "Enter", "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [4, 14], "label": "Enter", "x": 12.75, "y": 4, "w": 2.25},
{"matrix": [4, 15], "label": "4", "x": 15.5, "y": 4},
{"matrix": [4, 16], "label": "5", "x": 16.5, "y": 4},
{"matrix": [4, 17], "label": "6", "x": 17.5, "y": 4},
@@ -565,7 +565,7 @@
{"matrix": [4, 10], "label": "L", "x": 9.75, "y": 4},
{"matrix": [4, 11], "label": ";", "x": 10.75, "y": 4},
{"matrix": [4, 12], "label": "'", "x": 11.75, "y": 4},
- {"matrix": [4, 14], "label": "Enter", "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [4, 14], "label": "Enter", "x": 12.75, "y": 4, "w": 2.25},
{"matrix": [4, 15], "label": "4", "x": 15.5, "y": 4},
{"matrix": [4, 16], "label": "5", "x": 16.5, "y": 4},
{"matrix": [4, 17], "label": "6", "x": 17.5, "y": 4},
diff --git a/keyboards/eggsworks/egg58/config.h b/keyboards/eggsworks/egg58/config.h
new file mode 100644
index 00000000000..50d95fae1e5
--- /dev/null
+++ b/keyboards/eggsworks/egg58/config.h
@@ -0,0 +1,6 @@
+// Copyright 2022-2023 Travis Mick (@tmick0)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGB_MATRIX_LED_COUNT 58
diff --git a/keyboards/eggsworks/egg58/info.json b/keyboards/eggsworks/egg58/info.json
new file mode 100644
index 00000000000..14e62cdf59d
--- /dev/null
+++ b/keyboards/eggsworks/egg58/info.json
@@ -0,0 +1,172 @@
+{
+ "keyboard_name": "egg58",
+ "manufacturer": "eggsworks",
+ "url": "https://github.com/eggsworks/egg58",
+ "maintainer": "tmick0",
+ "usb": {
+ "vid": "0x4557",
+ "pid": "0x3665",
+ "device_version": "2.1.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true
+ },
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "rows": ["C6", "D7", "E6", "B4", "B5"],
+ "cols": ["F6", "F7", "B1", "B3", "B2", "B6"]
+ },
+ "split": {
+ "enabled": true,
+ "transport": {
+ "protocol": "i2c"
+ },
+ "usb_detect": {
+ "enabled": true
+ }
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "split": true,
+ "split_count": [29, 29],
+ "max_brightness": 160,
+ "animations": {
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true
+ },
+ "layout": [
+ { "matrix": [0, 5], "x": 93, "y": 3, "flags": 4 },
+ { "matrix": [0, 4], "x": 74, "y": 1, "flags": 4 },
+ { "matrix": [0, 3], "x": 56, "y": 0, "flags": 4 },
+ { "matrix": [0, 2], "x": 37, "y": 2, "flags": 4 },
+ { "matrix": [0, 1], "x": 18, "y": 4, "flags": 4 },
+ { "matrix": [0, 0], "x": 0, "y": 12, "flags": 4 },
+ { "matrix": [1, 0], "x": 0, "y": 26, "flags": 4 },
+ { "matrix": [1, 1], "x": 18, "y": 17, "flags": 4 },
+ { "matrix": [1, 2], "x": 37, "y": 15, "flags": 4 },
+ { "matrix": [1, 3], "x": 56, "y": 13, "flags": 4 },
+ { "matrix": [1, 4], "x": 74, "y": 15, "flags": 4 },
+ { "matrix": [1, 5], "x": 93, "y": 17, "flags": 4 },
+ { "matrix": [2, 5], "x": 93, "y": 30, "flags": 4 },
+ { "matrix": [2, 4], "x": 74, "y": 28, "flags": 4 },
+ { "matrix": [2, 3], "x": 56, "y": 26, "flags": 4 },
+ { "matrix": [2, 2], "x": 37, "y": 29, "flags": 4 },
+ { "matrix": [2, 1], "x": 18, "y": 31, "flags": 4 },
+ { "matrix": [2, 0], "x": 0, "y": 39, "flags": 4 },
+ { "matrix": [3, 0], "x": 0, "y": 52, "flags": 4 },
+ { "matrix": [3, 1], "x": 18, "y": 44, "flags": 4 },
+ { "matrix": [3, 2], "x": 37, "y": 42, "flags": 4 },
+ { "matrix": [3, 3], "x": 56, "y": 40, "flags": 4 },
+ { "matrix": [3, 4], "x": 74, "y": 42, "flags": 4 },
+ { "matrix": [3, 5], "x": 93, "y": 44, "flags": 4 },
+ { "matrix": [4, 5], "x": 102, "y": 64, "flags": 4 },
+ { "matrix": [4, 4], "x": 84, "y": 60, "flags": 4} ,
+ { "matrix": [4, 3], "x": 56, "y": 53, "flags": 4 },
+ { "matrix": [4, 2], "x": 37, "y": 56, "flags": 4 },
+ { "matrix": [4, 1], "x": 18, "y": 58, "flags": 4 },
+ { "matrix": [5, 5], "x": 149, "y": 3, "flags": 4 },
+ { "matrix": [5, 4], "x": 168, "y": 1, "flags": 4 },
+ { "matrix": [5, 3], "x": 186, "y": 0, "flags": 4 },
+ { "matrix": [5, 2], "x": 205, "y": 2, "flags": 4 },
+ { "matrix": [5, 1], "x": 224, "y": 4, "flags": 4 },
+ { "matrix": [5, 0], "x": 242, "y": 12, "flags": 4 },
+ { "matrix": [6, 0], "x": 242, "y": 26, "flags": 4 },
+ { "matrix": [6, 1], "x": 224, "y": 17, "flags": 4 },
+ { "matrix": [6, 2], "x": 205, "y": 15, "flags": 4 },
+ { "matrix": [6, 3], "x": 186, "y": 13, "flags": 4 },
+ { "matrix": [6, 4], "x": 168, "y": 15, "flags": 4 },
+ { "matrix": [6, 5], "x": 149, "y": 17, "flags": 4 },
+ { "matrix": [7, 5], "x": 149, "y": 30, "flags": 4 },
+ { "matrix": [7, 4], "x": 168, "y": 28, "flags": 4 },
+ { "matrix": [7, 3], "x": 186, "y": 26, "flags": 4 },
+ { "matrix": [7, 2], "x": 205, "y": 29, "flags": 4 },
+ { "matrix": [7, 1], "x": 224, "y": 31, "flags": 4 },
+ { "matrix": [7, 0], "x": 242, "y": 39, "flags": 4 },
+ { "matrix": [8, 0], "x": 242, "y": 52, "flags": 4 },
+ { "matrix": [8, 1], "x": 224, "y": 44, "flags": 4 },
+ { "matrix": [8, 2], "x": 205, "y": 42, "flags": 4 },
+ { "matrix": [8, 3], "x": 186, "y": 40, "flags": 4 },
+ { "matrix": [8, 4], "x": 168, "y": 42, "flags": 4 },
+ { "matrix": [8, 5], "x": 149, "y": 44, "flags": 4 },
+ { "matrix": [9, 5], "x": 140, "y": 64, "flags": 4 },
+ { "matrix": [9, 4], "x": 158, "y": 60, "flags": 4 },
+ { "matrix": [9, 3], "x": 186, "y": 53, "flags": 4 },
+ { "matrix": [9, 2], "x": 205, "y": 56, "flags": 4 },
+ { "matrix": [9, 1], "x": 224, "y": 58, "flags": 4 }
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0.93 },
+ { "matrix": [0, 1], "x": 1, "y": 0.32 },
+ { "matrix": [0, 2], "x": 2, "y": 0.18 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0.14 },
+ { "matrix": [0, 5], "x": 5, "y": 0.28 },
+ { "matrix": [5, 5], "x": 8, "y": 0.28 },
+ { "matrix": [5, 4], "x": 9, "y": 0.14 },
+ { "matrix": [5, 3], "x": 10, "y": 0 },
+ { "matrix": [5, 2], "x": 11, "y": 0.18 },
+ { "matrix": [5, 1], "x": 12, "y": 0.32 },
+ { "matrix": [5, 0], "x": 13, "y": 0.93 },
+ { "matrix": [1, 0], "x": 0, "y": 1.93 },
+ { "matrix": [1, 1], "x": 1, "y": 1.32 },
+ { "matrix": [1, 2], "x": 2, "y": 1.18 },
+ { "matrix": [1, 3], "x": 3, "y": 1 },
+ { "matrix": [1, 4], "x": 4, "y": 1.14 },
+ { "matrix": [1, 5], "x": 5, "y": 1.28 },
+ { "matrix": [6, 5], "x": 8, "y": 1.28 },
+ { "matrix": [6, 4], "x": 9, "y": 1.14 },
+ { "matrix": [6, 3], "x": 10, "y": 1 },
+ { "matrix": [6, 2], "x": 11, "y": 1.18 },
+ { "matrix": [6, 1], "x": 12, "y": 1.32 },
+ { "matrix": [6, 0], "x": 13, "y": 1.93 },
+ { "matrix": [2, 0], "x": 0, "y": 2.93 },
+ { "matrix": [2, 1], "x": 1, "y": 2.32 },
+ { "matrix": [2, 2], "x": 2, "y": 2.18 },
+ { "matrix": [2, 3], "x": 3, "y": 2 },
+ { "matrix": [2, 4], "x": 4, "y": 2.14 },
+ { "matrix": [2, 5], "x": 5, "y": 2.28 },
+ { "matrix": [7, 5], "x": 8, "y": 2.28 },
+ { "matrix": [7, 4], "x": 9, "y": 2.14 },
+ { "matrix": [7, 3], "x": 10, "y": 2 },
+ { "matrix": [7, 2], "x": 11, "y": 2.18 },
+ { "matrix": [7, 1], "x": 12, "y": 2.32 },
+ { "matrix": [7, 0], "x": 13, "y": 2.93 },
+ { "matrix": [3, 0], "x": 0, "y": 3.93 },
+ { "matrix": [3, 1], "x": 1, "y": 3.32 },
+ { "matrix": [3, 2], "x": 2, "y": 3.18 },
+ { "matrix": [3, 3], "x": 3, "y": 3 },
+ { "matrix": [3, 4], "x": 4, "y": 3.14 },
+ { "matrix": [3, 5], "x": 5, "y": 3.28 },
+ { "matrix": [8, 5], "x": 8, "y": 3.28 },
+ { "matrix": [8, 4], "x": 9, "y": 3.14 },
+ { "matrix": [8, 3], "x": 10, "y": 3 },
+ { "matrix": [8, 2], "x": 11, "y": 3.18 },
+ { "matrix": [8, 1], "x": 12, "y": 3.32 },
+ { "matrix": [8, 0], "x": 13, "y": 3.93 },
+ { "matrix": [4, 1], "x": 1, "y": 4.32 },
+ { "matrix": [4, 2], "x": 2, "y": 4.18 },
+ { "matrix": [4, 3], "x": 3, "y": 4 },
+ { "matrix": [4, 4], "x": 4.5, "y": 4.5, "h": 1.5 },
+ { "matrix": [4, 5], "x": 5.5, "y": 4.75, "h": 1.5 },
+ { "matrix": [9, 5], "x": 7.5, "y": 4.75, "h": 1.5 },
+ { "matrix": [9, 4], "x": 8.5, "y": 4.5, "h": 1.5 },
+ { "matrix": [9, 3], "x": 10, "y": 4 },
+ { "matrix": [9, 2], "x": 11, "y": 4.18 },
+ { "matrix": [9, 1], "x": 12, "y": 4.32 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/eggsworks/egg58/keymaps/default/keymap.c b/keyboards/eggsworks/egg58/keymaps/default/keymap.c
new file mode 100644
index 00000000000..482a34c1291
--- /dev/null
+++ b/keyboards/eggsworks/egg58/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+// Copyright 2022-2023 Travis Mick (@tmick0)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BASE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
+ 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_BSPC,
+ KC_LGUI, KC_LALT, OSL(1), MO(1), KC_SPC, KC_ENT, MO(1), KC_LBRC, KC_RBRC, KC_BSLS
+),
+
+[_FN] = 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_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_F12,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_HOME, KC_TRNS, KC_END, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_MOD, RGB_TOG
+)
+};
diff --git a/keyboards/eggsworks/egg58/keymaps/via/keymap.c b/keyboards/eggsworks/egg58/keymaps/via/keymap.c
new file mode 100644
index 00000000000..482a34c1291
--- /dev/null
+++ b/keyboards/eggsworks/egg58/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+// Copyright 2022-2023 Travis Mick (@tmick0)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BASE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
+ 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_BSPC,
+ KC_LGUI, KC_LALT, OSL(1), MO(1), KC_SPC, KC_ENT, MO(1), KC_LBRC, KC_RBRC, KC_BSLS
+),
+
+[_FN] = 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_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_F12,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_HOME, KC_TRNS, KC_END, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_MOD, RGB_TOG
+)
+};
diff --git a/keyboards/eggsworks/egg58/keymaps/via/rules.mk b/keyboards/eggsworks/egg58/keymaps/via/rules.mk
new file mode 100644
index 00000000000..ca9fed0e6b5
--- /dev/null
+++ b/keyboards/eggsworks/egg58/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+LTO_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/eggsworks/egg58/readme.md b/keyboards/eggsworks/egg58/readme.md
new file mode 100644
index 00000000000..fe9b1819eee
--- /dev/null
+++ b/keyboards/eggsworks/egg58/readme.md
@@ -0,0 +1,23 @@
+# egg58
+
+* Keyboard Maintainer: [Travis Mick](https://github.com/tmick0)
+* Hardware Supported: egg58 (v1-v2.x) PCB, with Pro Micro or compatible MCU
+* Hardware Availability: https://eggs.works/ or https://github.com/eggsworks/egg58
+
+Make example for this keyboard (after setting up your build environment):
+
+ make eggsworks/egg58:default
+
+Flashing example for this keyboard:
+
+ make eggsworks/egg58: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/eggsworks/egg58/rules.mk b/keyboards/eggsworks/egg58/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/eggsworks/egg58/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/flashquark/horizon_z/config.h b/keyboards/flashquark/horizon_z/config.h
new file mode 100755
index 00000000000..8828834d740
--- /dev/null
+++ b/keyboards/flashquark/horizon_z/config.h
@@ -0,0 +1,78 @@
+/* Copyright 2023 Flashquark
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General 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
+# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// 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 DRIVER_ADDR_1 0b1010000
+# define DRIVER_COUNT 1
+# define RGB_MATRIX_LED_COUNT 62
+#endif
diff --git a/keyboards/flashquark/horizon_z/horizon_z.c b/keyboards/flashquark/horizon_z/horizon_z.c
new file mode 100755
index 00000000000..da62deaf29b
--- /dev/null
+++ b/keyboards/flashquark/horizon_z/horizon_z.c
@@ -0,0 +1,95 @@
+/* Copyright 2023 Flashquark
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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] = {
+ {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},
+ {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, 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},
+ {0, E_11, D_11, F_11},
+ {0, E_12, D_12, F_12},
+ {0, E_13, D_13, F_13},
+ {0, E_14, D_14, F_14},
+ {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},
+ {0, H_10, G_10, I_10},
+ {0, H_11, G_11, I_11},
+ {0, H_12, G_12, I_12},
+ {0, H_13, G_13, I_13},
+ {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},
+ {0, K_10, J_10, L_10},
+ {0, K_11, J_11, L_11},
+ {0, K_14, J_14, L_14},
+ {0, B_16, A_16, C_16},
+ {0, E_16, D_16, F_16},
+ {0, H_16, G_16, I_16},
+ {0, K_16, J_16, L_16},
+ {0, K_15, J_15, L_15},
+ {0, K_12, J_12, L_12},
+ {0, K_13, J_13, L_13},
+ {0, H_14, G_14, I_14},
+};
+
+
+#endif
+
+bool rgb_matrix_indicators_kb(void) {
+ if (!rgb_matrix_indicators_user()) {
+ return false;
+ }
+ if (host_keyboard_led_state().caps_lock) {
+ rgb_matrix_set_color(28, 0xFF, 0xFF, 0xFF);
+ }
+ return true;
+}
diff --git a/keyboards/flashquark/horizon_z/info.json b/keyboards/flashquark/horizon_z/info.json
new file mode 100755
index 00000000000..3e299442c54
--- /dev/null
+++ b/keyboards/flashquark/horizon_z/info.json
@@ -0,0 +1,162 @@
+{
+ "manufacturer": "FLASHQUARK",
+ "keyboard_name": "Horizon_Z",
+ "maintainer": "FLASHQUARK",
+ "bootloader": "atmel-dfu",
+ "debounce": 3,
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["B5", "B6", "C6", "C7", "F7", "F6", "B0", "B1", "B2", "B3", "B7", "D2", "D3", "D5"],
+ "rows": ["F0", "F1", "F4", "F5", "B4"]
+ },
+ "processor": "atmega32u4",
+ "rgb_matrix": {
+ "driver": "IS31FL3733",
+ "layout": [
+ { "flags": 1, "matrix": [0, 0], "x": 0, "y": 0 },
+ { "flags": 4, "matrix": [0, 1], "x": 16, "y": 0 },
+ { "flags": 4, "matrix": [0, 2], "x": 32, "y": 0 },
+ { "flags": 4, "matrix": [0, 3], "x": 48, "y": 0 },
+ { "flags": 4, "matrix": [0, 4], "x": 64, "y": 0 },
+ { "flags": 4, "matrix": [0, 5], "x": 80, "y": 0 },
+ { "flags": 4, "matrix": [0, 6], "x": 96, "y": 0 },
+ { "flags": 4, "matrix": [0, 7], "x": 112, "y": 0 },
+ { "flags": 4, "matrix": [0, 8], "x": 128, "y": 0 },
+ { "flags": 4, "matrix": [0, 9], "x": 144, "y": 0 },
+ { "flags": 4, "matrix": [0, 10], "x": 160, "y": 0 },
+ { "flags": 4, "matrix": [0, 11], "x": 176, "y": 0 },
+ { "flags": 4, "matrix": [0, 12], "x": 192, "y": 0 },
+ { "flags": 1, "matrix": [0, 13], "x": 216, "y": 0 },
+ { "flags": 4, "matrix": [1, 0], "x": 4, "y": 16 },
+ { "flags": 4, "matrix": [1, 1], "x": 24, "y": 16 },
+ { "flags": 4, "matrix": [1, 2], "x": 40, "y": 16 },
+ { "flags": 4, "matrix": [1, 3], "x": 56, "y": 16 },
+ { "flags": 4, "matrix": [1, 4], "x": 72, "y": 16 },
+ { "flags": 4, "matrix": [1, 5], "x": 88, "y": 16 },
+ { "flags": 4, "matrix": [1, 6], "x": 104, "y": 16 },
+ { "flags": 4, "matrix": [1, 7], "x": 120, "y": 16 },
+ { "flags": 4, "matrix": [1, 8], "x": 136, "y": 16 },
+ { "flags": 4, "matrix": [1, 9], "x": 152, "y": 16 },
+ { "flags": 4, "matrix": [1, 10], "x": 168, "y": 16 },
+ { "flags": 4, "matrix": [1, 11], "x": 184, "y": 16 },
+ { "flags": 4, "matrix": [1, 12], "x": 200, "y": 16 },
+ { "flags": 4, "matrix": [1, 13], "x": 220, "y": 16 },
+ { "flags": 4, "matrix": [2, 0], "x": 6, "y": 32 },
+ { "flags": 4, "matrix": [2, 1], "x": 28, "y": 32 },
+ { "flags": 4, "matrix": [2, 2], "x": 44, "y": 32 },
+ { "flags": 4, "matrix": [2, 3], "x": 60, "y": 32 },
+ { "flags": 4, "matrix": [2, 4], "x": 76, "y": 32 },
+ { "flags": 4, "matrix": [2, 5], "x": 92, "y": 32 },
+ { "flags": 4, "matrix": [2, 6], "x": 108, "y": 32 },
+ { "flags": 4, "matrix": [2, 7], "x": 124, "y": 32 },
+ { "flags": 4, "matrix": [2, 8], "x": 140, "y": 32 },
+ { "flags": 4, "matrix": [2, 9], "x": 156, "y": 32 },
+ { "flags": 4, "matrix": [2, 10], "x": 172, "y": 32 },
+ { "flags": 4, "matrix": [2, 11], "x": 188, "y": 32 },
+ { "flags": 1, "matrix": [2, 13], "x": 204, "y": 32 },
+ { "flags": 1, "matrix": [3, 0], "x": 10, "y": 48 },
+ { "flags": 4, "matrix": [3, 1], "x": 20, "y": 48 },
+ { "flags": 4, "matrix": [3, 2], "x": 52, "y": 48 },
+ { "flags": 4, "matrix": [3, 3], "x": 68, "y": 48 },
+ { "flags": 4, "matrix": [3, 4], "x": 84, "y": 48 },
+ { "flags": 4, "matrix": [3, 5], "x": 100, "y": 48 },
+ { "flags": 4, "matrix": [3, 6], "x": 116, "y": 48 },
+ { "flags": 4, "matrix": [3, 7], "x": 132, "y": 48 },
+ { "flags": 4, "matrix": [3, 8], "x": 148, "y": 48 },
+ { "flags": 4, "matrix": [3, 9], "x": 164, "y": 48 },
+ { "flags": 4, "matrix": [3, 10], "x": 180, "y": 48 },
+ { "flags": 1, "matrix": [3, 13], "x": 210, "y": 48 },
+ { "flags": 1, "matrix": [4, 0], "x": 2, "y": 64 },
+ { "flags": 1, "matrix": [4, 1], "x": 22, "y": 64 },
+ { "flags": 1, "matrix": [4, 2], "x": 42, "y": 64 },
+ { "flags": 1, "matrix": [4, 5], "x": 102, "y": 64 },
+ { "flags": 1, "matrix": [4, 9], "x": 162, "y": 64 },
+ { "flags": 1, "matrix": [4, 10], "x": 182, "y": 64 },
+ { "flags": 1, "matrix": [4, 12], "x": 202, "y": 64 },
+ { "flags": 1, "matrix": [4, 13], "x": 222, "y": 64 }
+ ]
+ },
+ "url": "https://flashquark.com/product/flashquark-horizon-z-qmk-edition-custom-kit/",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0223",
+ "vid": "0x4B42"
+ },
+ "community_layouts": ["60_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], "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": [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, 13], "w": 2.25, "x": 12.75, "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, 13], "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, 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, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/flashquark/horizon_z/keymaps/default/keymap.c b/keyboards/flashquark/horizon_z/keymaps/default/keymap.c
new file mode 100755
index 00000000000..1ab95c54a56
--- /dev/null
+++ b/keyboards/flashquark/horizon_z/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 Flashquark
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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 {
+ _LAYER0,
+ _LAYER1,
+};
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_LAYER0] = LAYOUT_60_ansi( /* Base */
+ 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,
+ CTL_T(KC_CAPS), KC_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, MO(1), KC_RGUI, KC_RCTL),
+ [_LAYER1] = LAYOUT_60_ansi( /* FN */
+ 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 ,
+ KC_TRNS, RGB_TOG, KC_UP, RGB_MOD, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, QK_BOOT ,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,
+ KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_MNXT,
+ 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/flashquark/horizon_z/keymaps/via/keymap.c b/keyboards/flashquark/horizon_z/keymaps/via/keymap.c
new file mode 100755
index 00000000000..1ab95c54a56
--- /dev/null
+++ b/keyboards/flashquark/horizon_z/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2023 Flashquark
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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 {
+ _LAYER0,
+ _LAYER1,
+};
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_LAYER0] = LAYOUT_60_ansi( /* Base */
+ 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,
+ CTL_T(KC_CAPS), KC_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, MO(1), KC_RGUI, KC_RCTL),
+ [_LAYER1] = LAYOUT_60_ansi( /* FN */
+ 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 ,
+ KC_TRNS, RGB_TOG, KC_UP, RGB_MOD, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, QK_BOOT ,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,
+ KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_MNXT,
+ 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/flashquark/horizon_z/keymaps/via/rules.mk b/keyboards/flashquark/horizon_z/keymaps/via/rules.mk
new file mode 100755
index 00000000000..bfbf8681c99
--- /dev/null
+++ b/keyboards/flashquark/horizon_z/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/flashquark/horizon_z/readme.md b/keyboards/flashquark/horizon_z/readme.md
new file mode 100755
index 00000000000..0c4e8d57457
--- /dev/null
+++ b/keyboards/flashquark/horizon_z/readme.md
@@ -0,0 +1,20 @@
+# Horizon Z QMK Edition
+
+A hotswap 60% keyboard by Flashquark
+
+* Keyboard Maintainer: [Flashquark](https://flashquark.com)
+* Hardware Supported: Horizon Z QMK
+* Hardware Availability: [Horizon Z QMK Edition](https://flashquark.com/product/flashquark-horizon-z-qmk-edition-custom-kit/)
+
+
+## Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make flashquark/horizon_z: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
+
+Press reset button on the back of keyboard.
\ No newline at end of file
diff --git a/keyboards/flashquark/horizon_z/rules.mk b/keyboards/flashquark/horizon_z/rules.mk
new file mode 100755
index 00000000000..e69de29bb2d
diff --git a/keyboards/geistmaschine/geist/info.json b/keyboards/geistmaschine/geist/info.json
index 77a9a937e55..571740b7163 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 88dea9b7762..cebb8fb073a 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 6401a0cbf84..6d96c572ba3 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 f1cc032c978..658e4ec984f 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 2814b8001ac..068f500fb01 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 00000000000..9c0da5e1833
--- /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/giabalanai/keymaps/default_giabarinaix2/info.json b/keyboards/giabalanai/keymaps/default_giabarinaix2/info.json
deleted file mode 100644
index 6581733dd1c..00000000000
--- a/keyboards/giabalanai/keymaps/default_giabarinaix2/info.json
+++ /dev/null
@@ -1,146 +0,0 @@
-{
- "keyboard_name": "giabarinaix2",
- "manufacturer": "3araht",
- "url": "https://github.com/3araht",
- "maintainer": "3araht",
- "usb": {
- "vid": "0xFEED",
- "pid": "0xF4B2",
- "device_version": "0.0.1"
- },
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"label": "l00", "x": 0, "y": 0},
- {"label": "l01", "x": 1, "y": 0},
- {"label": "l02", "x": 2, "y": 0},
- {"label": "l03", "x": 3, "y": 0},
- {"label": "l04", "x": 4, "y": 0},
- {"label": "l05", "x": 5, "y": 0},
- {"label": "l06", "x": 6, "y": 0},
- {"label": "l07", "x": 7, "y": 0},
- {"label": "l08", "x": 8, "y": 0},
- {"label": "l09", "x": 9, "y": 0},
- {"label": "l0a", "x": 10, "y": 0},
- {"label": "l0b", "x": 11, "y": 0},
-
- {"label": "r00", "x": 14.5, "y": 0},
- {"label": "r01", "x": 15.5, "y": 0},
- {"label": "r02", "x": 16.5, "y": 0},
- {"label": "r03", "x": 17.5, "y": 0},
- {"label": "r04", "x": 18.5, "y": 0},
- {"label": "r05", "x": 19.5, "y": 0},
- {"label": "r06", "x": 20.5, "y": 0},
- {"label": "r07", "x": 21.5, "y": 0},
- {"label": "r08", "x": 22.5, "y": 0},
- {"label": "r09", "x": 23.5, "y": 0},
- {"label": "r0a", "x": 24.5, "y": 0},
- {"label": "r0b", "x": 25.5, "y": 0},
-
- {"label": "l10", "x": 0.5, "y": 1},
- {"label": "l11", "x": 1.5, "y": 1},
- {"label": "l12", "x": 2.5, "y": 1},
- {"label": "l13", "x": 3.5, "y": 1},
- {"label": "l14", "x": 4.5, "y": 1},
- {"label": "l15", "x": 5.5, "y": 1},
- {"label": "l16", "x": 6.5, "y": 1},
- {"label": "l17", "x": 7.5, "y": 1},
- {"label": "l18", "x": 8.5, "y": 1},
- {"label": "l19", "x": 9.5, "y": 1},
- {"label": "l1a", "x": 10.5, "y": 1},
- {"label": "l1b", "x": 11.5, "y": 1},
-
- {"label": "r10", "x": 15, "y": 1},
- {"label": "r11", "x": 16, "y": 1},
- {"label": "r12", "x": 17, "y": 1},
- {"label": "r13", "x": 18, "y": 1},
- {"label": "r14", "x": 19, "y": 1},
- {"label": "r15", "x": 20, "y": 1},
- {"label": "r16", "x": 21, "y": 1},
- {"label": "r17", "x": 22, "y": 1},
- {"label": "r18", "x": 23, "y": 1},
- {"label": "r19", "x": 24, "y": 1},
- {"label": "r1a", "x": 25, "y": 1},
- {"label": "r1b", "x": 26, "y": 1},
-
- {"label": "l20", "x": 1, "y": 2},
- {"label": "l21", "x": 2, "y": 2},
- {"label": "l22", "x": 3, "y": 2},
- {"label": "l23", "x": 4, "y": 2},
- {"label": "l24", "x": 5, "y": 2},
- {"label": "l25", "x": 6, "y": 2},
- {"label": "l26", "x": 7, "y": 2},
- {"label": "l27", "x": 8, "y": 2},
- {"label": "l28", "x": 9, "y": 2},
- {"label": "l29", "x": 10, "y": 2},
- {"label": "l2a", "x": 11, "y": 2},
- {"label": "l2b", "x": 12, "y": 2},
-
- {"label": "r20", "x": 15.5, "y": 2},
- {"label": "r21", "x": 16.5, "y": 2},
- {"label": "r22", "x": 17.5, "y": 2},
- {"label": "r23", "x": 18.5, "y": 2},
- {"label": "r24", "x": 19.5, "y": 2},
- {"label": "r25", "x": 20.5, "y": 2},
- {"label": "r26", "x": 21.5, "y": 2},
- {"label": "r27", "x": 22.5, "y": 2},
- {"label": "r28", "x": 23.5, "y": 2},
- {"label": "r29", "x": 24.5, "y": 2},
- {"label": "r2a", "x": 25.5, "y": 2},
- {"label": "r2b", "x": 26.5, "y": 2},
-
- {"label": "l30", "x": 1.5, "y": 3},
- {"label": "l31", "x": 2.5, "y": 3},
- {"label": "l32", "x": 3.5, "y": 3},
- {"label": "l33", "x": 4.5, "y": 3},
- {"label": "l34", "x": 5.5, "y": 3},
- {"label": "l35", "x": 6.5, "y": 3},
- {"label": "l36", "x": 7.5, "y": 3},
- {"label": "l37", "x": 8.5, "y": 3},
- {"label": "l38", "x": 9.5, "y": 3},
- {"label": "l39", "x": 10.5, "y": 3},
- {"label": "l3a", "x": 11.5, "y": 3},
- {"label": "l3b", "x": 12.5, "y": 3},
-
- {"label": "r30", "x": 16, "y": 3},
- {"label": "r31", "x": 17, "y": 3},
- {"label": "r32", "x": 18, "y": 3},
- {"label": "r33", "x": 19, "y": 3},
- {"label": "r34", "x": 20, "y": 3},
- {"label": "r35", "x": 21, "y": 3},
- {"label": "r36", "x": 22, "y": 3},
- {"label": "r37", "x": 23, "y": 3},
- {"label": "r38", "x": 24, "y": 3},
- {"label": "r39", "x": 25, "y": 3},
- {"label": "r3a", "x": 26, "y": 3},
- {"label": "r3b", "x": 27, "y": 3},
-
- {"label": "l40", "x": 2, "y": 4},
- {"label": "l41", "x": 3, "y": 4},
- {"label": "l42", "x": 4, "y": 4},
- {"label": "l43", "x": 5, "y": 4},
- {"label": "l44", "x": 6, "y": 4},
- {"label": "l45", "x": 7, "y": 4},
- {"label": "l46", "x": 8, "y": 4},
- {"label": "l47", "x": 9, "y": 4},
- {"label": "l48", "x": 10, "y": 4},
- {"label": "l49", "x": 11, "y": 4},
- {"label": "l4a", "x": 12, "y": 4},
- {"label": "l4b", "x": 13, "y": 4},
-
- {"label": "r40", "x": 16.5, "y": 4},
- {"label": "r41", "x": 17.5, "y": 4},
- {"label": "r42", "x": 18.5, "y": 4},
- {"label": "r43", "x": 19.5, "y": 4},
- {"label": "r44", "x": 20.5, "y": 4},
- {"label": "r45", "x": 21.5, "y": 4},
- {"label": "r46", "x": 22.5, "y": 4},
- {"label": "r47", "x": 23.5, "y": 4},
- {"label": "r48", "x": 24.5, "y": 4},
- {"label": "r49", "x": 25.5, "y": 4},
- {"label": "r4a", "x": 26.5, "y": 4},
- {"label": "r4b", "x": 27.5, "y": 4}
- ]
- }
- }
-}
diff --git a/keyboards/giabalanai/keymaps/giabarinaix2led/info.json b/keyboards/giabalanai/keymaps/giabarinaix2led/info.json
deleted file mode 100644
index 6581733dd1c..00000000000
--- a/keyboards/giabalanai/keymaps/giabarinaix2led/info.json
+++ /dev/null
@@ -1,146 +0,0 @@
-{
- "keyboard_name": "giabarinaix2",
- "manufacturer": "3araht",
- "url": "https://github.com/3araht",
- "maintainer": "3araht",
- "usb": {
- "vid": "0xFEED",
- "pid": "0xF4B2",
- "device_version": "0.0.1"
- },
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"label": "l00", "x": 0, "y": 0},
- {"label": "l01", "x": 1, "y": 0},
- {"label": "l02", "x": 2, "y": 0},
- {"label": "l03", "x": 3, "y": 0},
- {"label": "l04", "x": 4, "y": 0},
- {"label": "l05", "x": 5, "y": 0},
- {"label": "l06", "x": 6, "y": 0},
- {"label": "l07", "x": 7, "y": 0},
- {"label": "l08", "x": 8, "y": 0},
- {"label": "l09", "x": 9, "y": 0},
- {"label": "l0a", "x": 10, "y": 0},
- {"label": "l0b", "x": 11, "y": 0},
-
- {"label": "r00", "x": 14.5, "y": 0},
- {"label": "r01", "x": 15.5, "y": 0},
- {"label": "r02", "x": 16.5, "y": 0},
- {"label": "r03", "x": 17.5, "y": 0},
- {"label": "r04", "x": 18.5, "y": 0},
- {"label": "r05", "x": 19.5, "y": 0},
- {"label": "r06", "x": 20.5, "y": 0},
- {"label": "r07", "x": 21.5, "y": 0},
- {"label": "r08", "x": 22.5, "y": 0},
- {"label": "r09", "x": 23.5, "y": 0},
- {"label": "r0a", "x": 24.5, "y": 0},
- {"label": "r0b", "x": 25.5, "y": 0},
-
- {"label": "l10", "x": 0.5, "y": 1},
- {"label": "l11", "x": 1.5, "y": 1},
- {"label": "l12", "x": 2.5, "y": 1},
- {"label": "l13", "x": 3.5, "y": 1},
- {"label": "l14", "x": 4.5, "y": 1},
- {"label": "l15", "x": 5.5, "y": 1},
- {"label": "l16", "x": 6.5, "y": 1},
- {"label": "l17", "x": 7.5, "y": 1},
- {"label": "l18", "x": 8.5, "y": 1},
- {"label": "l19", "x": 9.5, "y": 1},
- {"label": "l1a", "x": 10.5, "y": 1},
- {"label": "l1b", "x": 11.5, "y": 1},
-
- {"label": "r10", "x": 15, "y": 1},
- {"label": "r11", "x": 16, "y": 1},
- {"label": "r12", "x": 17, "y": 1},
- {"label": "r13", "x": 18, "y": 1},
- {"label": "r14", "x": 19, "y": 1},
- {"label": "r15", "x": 20, "y": 1},
- {"label": "r16", "x": 21, "y": 1},
- {"label": "r17", "x": 22, "y": 1},
- {"label": "r18", "x": 23, "y": 1},
- {"label": "r19", "x": 24, "y": 1},
- {"label": "r1a", "x": 25, "y": 1},
- {"label": "r1b", "x": 26, "y": 1},
-
- {"label": "l20", "x": 1, "y": 2},
- {"label": "l21", "x": 2, "y": 2},
- {"label": "l22", "x": 3, "y": 2},
- {"label": "l23", "x": 4, "y": 2},
- {"label": "l24", "x": 5, "y": 2},
- {"label": "l25", "x": 6, "y": 2},
- {"label": "l26", "x": 7, "y": 2},
- {"label": "l27", "x": 8, "y": 2},
- {"label": "l28", "x": 9, "y": 2},
- {"label": "l29", "x": 10, "y": 2},
- {"label": "l2a", "x": 11, "y": 2},
- {"label": "l2b", "x": 12, "y": 2},
-
- {"label": "r20", "x": 15.5, "y": 2},
- {"label": "r21", "x": 16.5, "y": 2},
- {"label": "r22", "x": 17.5, "y": 2},
- {"label": "r23", "x": 18.5, "y": 2},
- {"label": "r24", "x": 19.5, "y": 2},
- {"label": "r25", "x": 20.5, "y": 2},
- {"label": "r26", "x": 21.5, "y": 2},
- {"label": "r27", "x": 22.5, "y": 2},
- {"label": "r28", "x": 23.5, "y": 2},
- {"label": "r29", "x": 24.5, "y": 2},
- {"label": "r2a", "x": 25.5, "y": 2},
- {"label": "r2b", "x": 26.5, "y": 2},
-
- {"label": "l30", "x": 1.5, "y": 3},
- {"label": "l31", "x": 2.5, "y": 3},
- {"label": "l32", "x": 3.5, "y": 3},
- {"label": "l33", "x": 4.5, "y": 3},
- {"label": "l34", "x": 5.5, "y": 3},
- {"label": "l35", "x": 6.5, "y": 3},
- {"label": "l36", "x": 7.5, "y": 3},
- {"label": "l37", "x": 8.5, "y": 3},
- {"label": "l38", "x": 9.5, "y": 3},
- {"label": "l39", "x": 10.5, "y": 3},
- {"label": "l3a", "x": 11.5, "y": 3},
- {"label": "l3b", "x": 12.5, "y": 3},
-
- {"label": "r30", "x": 16, "y": 3},
- {"label": "r31", "x": 17, "y": 3},
- {"label": "r32", "x": 18, "y": 3},
- {"label": "r33", "x": 19, "y": 3},
- {"label": "r34", "x": 20, "y": 3},
- {"label": "r35", "x": 21, "y": 3},
- {"label": "r36", "x": 22, "y": 3},
- {"label": "r37", "x": 23, "y": 3},
- {"label": "r38", "x": 24, "y": 3},
- {"label": "r39", "x": 25, "y": 3},
- {"label": "r3a", "x": 26, "y": 3},
- {"label": "r3b", "x": 27, "y": 3},
-
- {"label": "l40", "x": 2, "y": 4},
- {"label": "l41", "x": 3, "y": 4},
- {"label": "l42", "x": 4, "y": 4},
- {"label": "l43", "x": 5, "y": 4},
- {"label": "l44", "x": 6, "y": 4},
- {"label": "l45", "x": 7, "y": 4},
- {"label": "l46", "x": 8, "y": 4},
- {"label": "l47", "x": 9, "y": 4},
- {"label": "l48", "x": 10, "y": 4},
- {"label": "l49", "x": 11, "y": 4},
- {"label": "l4a", "x": 12, "y": 4},
- {"label": "l4b", "x": 13, "y": 4},
-
- {"label": "r40", "x": 16.5, "y": 4},
- {"label": "r41", "x": 17.5, "y": 4},
- {"label": "r42", "x": 18.5, "y": 4},
- {"label": "r43", "x": 19.5, "y": 4},
- {"label": "r44", "x": 20.5, "y": 4},
- {"label": "r45", "x": 21.5, "y": 4},
- {"label": "r46", "x": 22.5, "y": 4},
- {"label": "r47", "x": 23.5, "y": 4},
- {"label": "r48", "x": 24.5, "y": 4},
- {"label": "r49", "x": 25.5, "y": 4},
- {"label": "r4a", "x": 26.5, "y": 4},
- {"label": "r4b", "x": 27.5, "y": 4}
- ]
- }
- }
-}
diff --git a/keyboards/giabalanai/keymaps/via_giabarinaix2/info.json b/keyboards/giabalanai/keymaps/via_giabarinaix2/info.json
deleted file mode 100644
index 6581733dd1c..00000000000
--- a/keyboards/giabalanai/keymaps/via_giabarinaix2/info.json
+++ /dev/null
@@ -1,146 +0,0 @@
-{
- "keyboard_name": "giabarinaix2",
- "manufacturer": "3araht",
- "url": "https://github.com/3araht",
- "maintainer": "3araht",
- "usb": {
- "vid": "0xFEED",
- "pid": "0xF4B2",
- "device_version": "0.0.1"
- },
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"label": "l00", "x": 0, "y": 0},
- {"label": "l01", "x": 1, "y": 0},
- {"label": "l02", "x": 2, "y": 0},
- {"label": "l03", "x": 3, "y": 0},
- {"label": "l04", "x": 4, "y": 0},
- {"label": "l05", "x": 5, "y": 0},
- {"label": "l06", "x": 6, "y": 0},
- {"label": "l07", "x": 7, "y": 0},
- {"label": "l08", "x": 8, "y": 0},
- {"label": "l09", "x": 9, "y": 0},
- {"label": "l0a", "x": 10, "y": 0},
- {"label": "l0b", "x": 11, "y": 0},
-
- {"label": "r00", "x": 14.5, "y": 0},
- {"label": "r01", "x": 15.5, "y": 0},
- {"label": "r02", "x": 16.5, "y": 0},
- {"label": "r03", "x": 17.5, "y": 0},
- {"label": "r04", "x": 18.5, "y": 0},
- {"label": "r05", "x": 19.5, "y": 0},
- {"label": "r06", "x": 20.5, "y": 0},
- {"label": "r07", "x": 21.5, "y": 0},
- {"label": "r08", "x": 22.5, "y": 0},
- {"label": "r09", "x": 23.5, "y": 0},
- {"label": "r0a", "x": 24.5, "y": 0},
- {"label": "r0b", "x": 25.5, "y": 0},
-
- {"label": "l10", "x": 0.5, "y": 1},
- {"label": "l11", "x": 1.5, "y": 1},
- {"label": "l12", "x": 2.5, "y": 1},
- {"label": "l13", "x": 3.5, "y": 1},
- {"label": "l14", "x": 4.5, "y": 1},
- {"label": "l15", "x": 5.5, "y": 1},
- {"label": "l16", "x": 6.5, "y": 1},
- {"label": "l17", "x": 7.5, "y": 1},
- {"label": "l18", "x": 8.5, "y": 1},
- {"label": "l19", "x": 9.5, "y": 1},
- {"label": "l1a", "x": 10.5, "y": 1},
- {"label": "l1b", "x": 11.5, "y": 1},
-
- {"label": "r10", "x": 15, "y": 1},
- {"label": "r11", "x": 16, "y": 1},
- {"label": "r12", "x": 17, "y": 1},
- {"label": "r13", "x": 18, "y": 1},
- {"label": "r14", "x": 19, "y": 1},
- {"label": "r15", "x": 20, "y": 1},
- {"label": "r16", "x": 21, "y": 1},
- {"label": "r17", "x": 22, "y": 1},
- {"label": "r18", "x": 23, "y": 1},
- {"label": "r19", "x": 24, "y": 1},
- {"label": "r1a", "x": 25, "y": 1},
- {"label": "r1b", "x": 26, "y": 1},
-
- {"label": "l20", "x": 1, "y": 2},
- {"label": "l21", "x": 2, "y": 2},
- {"label": "l22", "x": 3, "y": 2},
- {"label": "l23", "x": 4, "y": 2},
- {"label": "l24", "x": 5, "y": 2},
- {"label": "l25", "x": 6, "y": 2},
- {"label": "l26", "x": 7, "y": 2},
- {"label": "l27", "x": 8, "y": 2},
- {"label": "l28", "x": 9, "y": 2},
- {"label": "l29", "x": 10, "y": 2},
- {"label": "l2a", "x": 11, "y": 2},
- {"label": "l2b", "x": 12, "y": 2},
-
- {"label": "r20", "x": 15.5, "y": 2},
- {"label": "r21", "x": 16.5, "y": 2},
- {"label": "r22", "x": 17.5, "y": 2},
- {"label": "r23", "x": 18.5, "y": 2},
- {"label": "r24", "x": 19.5, "y": 2},
- {"label": "r25", "x": 20.5, "y": 2},
- {"label": "r26", "x": 21.5, "y": 2},
- {"label": "r27", "x": 22.5, "y": 2},
- {"label": "r28", "x": 23.5, "y": 2},
- {"label": "r29", "x": 24.5, "y": 2},
- {"label": "r2a", "x": 25.5, "y": 2},
- {"label": "r2b", "x": 26.5, "y": 2},
-
- {"label": "l30", "x": 1.5, "y": 3},
- {"label": "l31", "x": 2.5, "y": 3},
- {"label": "l32", "x": 3.5, "y": 3},
- {"label": "l33", "x": 4.5, "y": 3},
- {"label": "l34", "x": 5.5, "y": 3},
- {"label": "l35", "x": 6.5, "y": 3},
- {"label": "l36", "x": 7.5, "y": 3},
- {"label": "l37", "x": 8.5, "y": 3},
- {"label": "l38", "x": 9.5, "y": 3},
- {"label": "l39", "x": 10.5, "y": 3},
- {"label": "l3a", "x": 11.5, "y": 3},
- {"label": "l3b", "x": 12.5, "y": 3},
-
- {"label": "r30", "x": 16, "y": 3},
- {"label": "r31", "x": 17, "y": 3},
- {"label": "r32", "x": 18, "y": 3},
- {"label": "r33", "x": 19, "y": 3},
- {"label": "r34", "x": 20, "y": 3},
- {"label": "r35", "x": 21, "y": 3},
- {"label": "r36", "x": 22, "y": 3},
- {"label": "r37", "x": 23, "y": 3},
- {"label": "r38", "x": 24, "y": 3},
- {"label": "r39", "x": 25, "y": 3},
- {"label": "r3a", "x": 26, "y": 3},
- {"label": "r3b", "x": 27, "y": 3},
-
- {"label": "l40", "x": 2, "y": 4},
- {"label": "l41", "x": 3, "y": 4},
- {"label": "l42", "x": 4, "y": 4},
- {"label": "l43", "x": 5, "y": 4},
- {"label": "l44", "x": 6, "y": 4},
- {"label": "l45", "x": 7, "y": 4},
- {"label": "l46", "x": 8, "y": 4},
- {"label": "l47", "x": 9, "y": 4},
- {"label": "l48", "x": 10, "y": 4},
- {"label": "l49", "x": 11, "y": 4},
- {"label": "l4a", "x": 12, "y": 4},
- {"label": "l4b", "x": 13, "y": 4},
-
- {"label": "r40", "x": 16.5, "y": 4},
- {"label": "r41", "x": 17.5, "y": 4},
- {"label": "r42", "x": 18.5, "y": 4},
- {"label": "r43", "x": 19.5, "y": 4},
- {"label": "r44", "x": 20.5, "y": 4},
- {"label": "r45", "x": 21.5, "y": 4},
- {"label": "r46", "x": 22.5, "y": 4},
- {"label": "r47", "x": 23.5, "y": 4},
- {"label": "r48", "x": 24.5, "y": 4},
- {"label": "r49", "x": 25.5, "y": 4},
- {"label": "r4a", "x": 26.5, "y": 4},
- {"label": "r4b", "x": 27.5, "y": 4}
- ]
- }
- }
-}
diff --git a/keyboards/gmmk/numpad/info.json b/keyboards/gmmk/numpad/info.json
index 4df94d45ee4..195d4fa7102 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/handwired/jscotto/scotto36/readme.md b/keyboards/handwired/jscotto/scotto36/readme.md
index f38d0231c58..ba40ed9d059 100644
--- a/keyboards/handwired/jscotto/scotto36/readme.md
+++ b/keyboards/handwired/jscotto/scotto36/readme.md
@@ -2,11 +2,11 @@

-A 36 key handwired ortholinear ergo keyboard. Featuring an OLED display with Bongo Cat. Case files available [here](https://github.com/joe-scotto/keyboards.git).
+A 36-key split monoblock ergonomic ortholinear keyboard with 15° of angle on each half. Case files available [here](https://github.com/joe-scotto/keyboards.git).
-- Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
-- Hardware Supported: ATmega32U4
-- Hardware Availability: [Amazon](https://amazon.com)
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: ATmega32U4, 0.91” 128x32 I2C OLED
+* Hardware Availability: [Amazon](https://amazon.com)
# Compiling
@@ -19,7 +19,12 @@ Flashing example for this keyboard:
make handwired/jscotto/scotto36:default
-# Bootloader
-Uses [bootmagic](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_bootmagic.md) allowing you to hold the top left key (0, 0) when plugging the board in 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).
+
+## 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/nortontechpad/config.h b/keyboards/handwired/nortontechpad/config.h
new file mode 100644
index 00000000000..48ea26f0058
--- /dev/null
+++ b/keyboards/handwired/nortontechpad/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2020 Joel Schneider
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General 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/handwired/nortontechpad/info.json b/keyboards/handwired/nortontechpad/info.json
new file mode 100644
index 00000000000..51871b42e32
--- /dev/null
+++ b/keyboards/handwired/nortontechpad/info.json
@@ -0,0 +1,53 @@
+{
+ "keyboard_name": "NortonTechPad",
+ "manufacturer": "NortonTech",
+ "url": "",
+ "maintainer": "NortonTech",
+ "usb": {
+ "vid": "0x9879",
+ "pid": "0x0001",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["D7", "E6", "B4", "B5"],
+ "rows": ["F7", "B1", "B3", "B2", "B6"]
+ },
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "community_layouts": ["numpad_5x4"],
+ "layouts": {
+ "LAYOUT_numpad_5x4": {
+ "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": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [1, 3], "x": 3, "y": 1, "h": 2},
+
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 3, "h": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/nortontechpad/keymaps/default/keymap.c b/keyboards/handwired/nortontechpad/keymaps/default/keymap.c
new file mode 100644
index 00000000000..dca76ce990d
--- /dev/null
+++ b/keyboards/handwired/nortontechpad/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2020 Joel Schneider
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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_5x4(
+ 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/handwired/nortontechpad/keymaps/via/keymap.c b/keyboards/handwired/nortontechpad/keymaps/via/keymap.c
new file mode 100644
index 00000000000..dca76ce990d
--- /dev/null
+++ b/keyboards/handwired/nortontechpad/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2020 Joel Schneider
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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_5x4(
+ 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/handwired/nortontechpad/keymaps/via/rules.mk b/keyboards/handwired/nortontechpad/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/handwired/nortontechpad/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/handwired/nortontechpad/readme.md b/keyboards/handwired/nortontechpad/readme.md
new file mode 100644
index 00000000000..6aacc8d72ae
--- /dev/null
+++ b/keyboards/handwired/nortontechpad/readme.md
@@ -0,0 +1,27 @@
+# NortonTechPad
+
+
+
+The NortonTechPad is a numpad inspired by the SiCK-Pad,it is also 3D printed and designed to be inexpensive.
+
+- Keyboard Maintainer: [NortonTech](https://github.com/NortonTech-Official)
+- Hardware Supported: Pro Micro
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/nortontechpad:default
+
+Flashing example for this keyboard:
+
+ make handwired/nortontechpad:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the top left key and plug in the keyboard. This will also clear EEPROM, so it is a good first step if the keyboard is misbehaving.
+* **Physical reset button**: Short the GND and RST pins on the Pro Micro with something conductive.
+* **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/handwired/nortontechpad/rules.mk b/keyboards/handwired/nortontechpad/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/nortontechpad/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 00000000000..4e5e3b1cba3
--- /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 00000000000..3b393e12768
--- /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 00000000000..e69de29bb2d
diff --git a/keyboards/handwired/onekey/nucleo_g474re/info.json b/keyboards/handwired/onekey/nucleo_g474re/info.json
new file mode 100644
index 00000000000..02f59be74e9
--- /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 00000000000..f6115b10c7d
--- /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 00000000000..e69de29bb2d
diff --git a/keyboards/handwired/scottokeebs/scotto36/info.json b/keyboards/handwired/scottokeebs/scotto36/info.json
new file mode 100644
index 00000000000..fe8ecb6629f
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto36/info.json
@@ -0,0 +1,76 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "Scotto36",
+ "maintainer": "joe-scotto",
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "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": "0x0002",
+ "vid": "0x534B"
+ },
+ "community_layouts": ["split_3x5_3"],
+ "layouts": {
+ "LAYOUT_split_3x5_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": [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/mode/m75h/m75h.c b/keyboards/handwired/scottokeebs/scotto36/keymaps/default/config.h
similarity index 73%
rename from keyboards/mode/m75h/m75h.c
rename to keyboards/handwired/scottokeebs/scotto36/keymaps/default/config.h
index 2f2bfbfa4bf..1a6512052c1 100644
--- a/keyboards/mode/m75h/m75h.c
+++ b/keyboards/handwired/scottokeebs/scotto36/keymaps/default/config.h
@@ -1,5 +1,5 @@
/*
- Copyright 2020 Álvaro "Gondolindrim" Volpato
+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
@@ -8,15 +8,16 @@ the Free Software Foundation, either version 2 of the License, or
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public 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"
+#pragma once
-void board_init(void) {
- setPinInput(B10);
-}
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scotto36/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scotto36/keymaps/default/keymap.c
new file mode 100644
index 00000000000..590f59aa07d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto36/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_LCTL, 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
+ )
+};
diff --git a/keyboards/handwired/scottokeebs/scotto36/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scotto36/keymaps/scotto/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto36/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/scotto36/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scotto36/keymaps/scotto/keymap.c
new file mode 100644
index 00000000000..293082af663
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto36/keymaps/scotto/keymap.c
@@ -0,0 +1,281 @@
+/*
+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_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),
+ KC_LCTL, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), TD(TD_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),
+ KC_LCTL, KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_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),
+ KC_LCTL, KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_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,
+ KC_LCTL, KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_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),
+ KC_LALT, KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT), TD(TD_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),
+ KC_LALT, KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_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),
+ KC_LALT, KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_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,
+ KC_LALT, KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_ESC_WINDOWS_EMOJI)
+ )
+};
+
+// OLED
+#ifdef OLED_ENABLE
+// WPM responsiveness
+#define IDLE_FRAMES 5
+#define IDLE_SPEED 20 // Speed at which animation goes into idle
+#define TAP_FRAMES 2
+#define TAP_SPEED 40 // WPM to trigger Bongo
+#define ANIM_FRAME_DURATION 200 // Frame MS
+#define ANIM_SIZE 636 // Number of bytes in array, max 1024
+
+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][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
+ static const char PROGMEM prep[][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
+ static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ };
+
+ void animation_phase(void) {
+ 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)], ANIM_SIZE);
+ }
+
+ if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) {
+ oled_write_raw_P(prep[0], ANIM_SIZE);
+ }
+
+ 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)], ANIM_SIZE);
+ }
+ }
+ if (get_current_wpm() != 000) {
+ oled_on(); // Enables OLED on any alpha keypress
+
+ if (timer_elapsed32(anim_timer) > ANIM_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) > ANIM_FRAME_DURATION) {
+ anim_timer = timer_read32();
+ animation_phase();
+ }
+ }
+ }
+}
+
+// Draw to OLED
+bool oled_task_user(void) {
+ // Render Bongo Cat
+ render_animation();
+
+ // WPM text
+ oled_set_cursor(0, 0);
+ sprintf(wpm_str, "%03d", get_current_wpm()); // %03d defines digits to display
+ oled_write(wpm_str, false);
+
+ // Layer text
+ oled_set_cursor(0, 1);
+ switch (get_highest_layer(layer_state)) {
+ case _MAC_DEFAULT :
+ oled_write_P(PSTR("MAC"), false);
+ oled_set_cursor(0, 2);
+ oled_write_P(PSTR("MAIN"), false);
+ break;
+ case _MAC_CODE :
+ oled_write_P(PSTR("MAC"), false);
+ oled_set_cursor(0, 2);
+ oled_write_P(PSTR("CODE"), false);
+ break;
+ case _MAC_NUM :
+ oled_write_P(PSTR("MAC"), false);
+ oled_set_cursor(0, 2);
+ oled_write_P(PSTR("NUM"), false);
+ break;
+ case _MAC_FUNC :
+ oled_write_P(PSTR("MAC"), false);
+ oled_set_cursor(0, 2);
+ oled_write_P(PSTR("FUNC"), false);
+ break;
+ case _WIN_DEFAULT :
+ oled_write_P(PSTR("WIN"), false);
+ oled_set_cursor(0, 2);
+ oled_write_P(PSTR("MAIN"), false);
+ break;
+ case _WIN_CODE :
+ oled_write_P(PSTR("WIN"), false);
+ oled_set_cursor(0, 2);
+ oled_write_P(PSTR("CODE"), false);
+ break;
+ case _WIN_NUM :
+ oled_write_P(PSTR("WIN"), false);
+ oled_set_cursor(0, 2);
+ oled_write_P(PSTR("NUM"), false);
+ break;
+ case _WIN_FUNC :
+ oled_write_P(PSTR("WIN"), false);
+ oled_set_cursor(0, 2);
+ oled_write_P(PSTR("FUNC"), false);
+ break;
+ }
+
+ // Caps lock text
+ led_t led_state = host_keyboard_led_state();
+ oled_set_cursor(0, 3);
+ oled_write_P(led_state.caps_lock ? PSTR("CAPS") : PSTR(""), false);
+
+ return false;
+}
+#endif
+
diff --git a/keyboards/handwired/scottokeebs/scotto36/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scotto36/keymaps/scotto/rules.mk
new file mode 100644
index 00000000000..6e339da6c69
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto36/keymaps/scotto/rules.mk
@@ -0,0 +1,4 @@
+OLED_ENABLE = yes
+WPM_ENABLE = yes
+LTO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scotto36/readme.md b/keyboards/handwired/scottokeebs/scotto36/readme.md
new file mode 100644
index 00000000000..a8cbe3cf41c
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto36/readme.md
@@ -0,0 +1,27 @@
+# Scotto36
+
+
+
+A 36-key split monoblock ergonomic ortholinear keyboard with 15° of angle on each half. 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/scotto36:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scotto36: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/scotto36/rules.mk b/keyboards/handwired/scottokeebs/scotto36/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto36/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scotto40/info.json b/keyboards/handwired/scottokeebs/scotto40/info.json
new file mode 100644
index 00000000000..b10f677c4d3
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto40/info.json
@@ -0,0 +1,183 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "Scotto40",
+ "maintainer": "joe-scotto",
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ // 2, 3, 4, 5, 6, 7, 8, 9, A3, A2
+ "cols": ["D1", "D0", "D4", "C6", "D7", "E6", "B4", "B5", "F4", "F5"],
+
+ // 15, 14, 16, 10
+ "rows": ["B1", "B3", "B2", "B6"]
+ },
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0001",
+ "vid": "0x534B"
+ },
+ "community_layouts": ["ortho_4x10"],
+ "layouts": {
+ "LAYOUT_ortho_3x10_7": {
+ "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, 0], "x": 0, "y": 3},
+
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3, "w": 2},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+
+ {"matrix": [3, 9], "x": 9, "y": 3}
+ ]
+ },
+ "LAYOUT_ortho_3x10_8": {
+ "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, 0], "x": 0, "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, 9], "x": 9, "y": 3}
+ ]
+ },
+ "LAYOUT_ortho_4x10": {
+ "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, 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": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scotto40/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scotto40/keymaps/default/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto40/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/scotto40/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scotto40/keymaps/default/keymap.c
new file mode 100644
index 00000000000..63aa7608433
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto40/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_4x10(
+ 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_ESC, KC_NO, KC_LCTL, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), KC_ESC, KC_NO, KC_NO
+ ),
+ [1] = LAYOUT_ortho_4x10(
+ 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_ortho_4x10(
+ 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_ortho_4x10(
+ 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/handwired/scottokeebs/scotto40/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scotto40/keymaps/scotto/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto40/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/scotto40/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scotto40/keymaps/scotto/keymap.c
new file mode 100644
index 00000000000..ba5f7bc7a8c
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto40/keymaps/scotto/keymap.c
@@ -0,0 +1,114 @@
+/*
+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_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;
+ }
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x10_7(
+ 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),
+ KC_ESC, KC_LCTL, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), TD(TD_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [1] = LAYOUT_ortho_3x10_7(
+ 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_ESC, KC_LCTL, KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [2] = LAYOUT_ortho_3x10_7(
+ 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_ESC, KC_LCTL, KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [3] = LAYOUT_ortho_3x10_7(
+ 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,
+ KC_ESC, KC_LCTL, KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [4] = LAYOUT_ortho_3x10_7(
+ 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),
+ KC_ESC, KC_LALT, KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT), TD(TD_ESC_WINDOWS_EMOJI)
+ ),
+ [5] = LAYOUT_ortho_3x10_7(
+ 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_ESC, KC_LALT, KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT), TD(TD_ESC_WINDOWS_EMOJI)
+ ),
+ [6] = LAYOUT_ortho_3x10_7(
+ 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),
+ KC_ESC, KC_LALT, KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT), TD(TD_ESC_WINDOWS_EMOJI)
+ ),
+ [7] = LAYOUT_ortho_3x10_7(
+ 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,
+ KC_ESC, KC_LALT, KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT), TD(TD_ESC_WINDOWS_EMOJI)
+ )
+};
diff --git a/keyboards/handwired/scottokeebs/scotto40/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scotto40/keymaps/scotto/rules.mk
new file mode 100644
index 00000000000..e5ddcae8d92
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto40/keymaps/scotto/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scotto40/readme.md b/keyboards/handwired/scottokeebs/scotto40/readme.md
new file mode 100644
index 00000000000..f81e6398474
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto40/readme.md
@@ -0,0 +1,27 @@
+# Scotto40
+
+
+
+An ortholinear keyboard that features either a 37, 38, or 40-key layout. 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/scotto40:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scotto40: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/scotto40/rules.mk b/keyboards/handwired/scottokeebs/scotto40/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto40/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scotto9/info.json b/keyboards/handwired/scottokeebs/scotto9/info.json
new file mode 100644
index 00000000000..a42d2063001
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto9/info.json
@@ -0,0 +1,47 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "Scotto9",
+ "maintainer": "joe-scotto",
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ // 4, 5, 6
+ "cols": ["D4", "C6", "D7"],
+ // 15, 14, 16
+ "rows": ["B1", "B3", "B2"]
+ },
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0003",
+ "vid": "0x534B"
+ },
+ "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},
+
+ // Row 2
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "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}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scotto9/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scotto9/keymaps/default/keymap.c
new file mode 100644
index 00000000000..eec8d684ada
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto9/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/*
+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
+
+// Keymap
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x3(
+ KC_1, KC_2, KC_3,
+ KC_4, KC_5, KC_6,
+ KC_7, KC_8, KC_9
+ )
+};
diff --git a/keyboards/handwired/scottokeebs/scotto9/readme.md b/keyboards/handwired/scottokeebs/scotto9/readme.md
new file mode 100644
index 00000000000..ab876711385
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto9/readme.md
@@ -0,0 +1,27 @@
+# Scotto9
+
+
+
+A 9-key macropad. 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/scotto9:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scotto9: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/scotto9/rules.mk b/keyboards/handwired/scottokeebs/scotto9/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto9/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scottofrog/info.json b/keyboards/handwired/scottokeebs/scottofrog/info.json
new file mode 100644
index 00000000000..202626b70ff
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottofrog/info.json
@@ -0,0 +1,54 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoFrog",
+ "maintainer": "joe-scotto",
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "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": ["B1", "B3", "B2", "B6"]
+ },
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0017",
+ "vid": "0x534B"
+ },
+ "layouts": {
+ "LAYOUT_ortho_3x5_5": {
+ "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": [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, 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, 3], "x": 3, "y": 3 },
+ { "matrix": [3, 5], "x": 5, "y": 3 },
+ { "matrix": [3, 6], "x": 6, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scottofrog/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottofrog/keymaps/default/keymap.c
new file mode 100644
index 00000000000..9a220170e49
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottofrog/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/*
+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
+
+// Keymap
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x5_5(
+ KC_Q, KC_W, KC_E, KC_W, KC_R,
+ KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_Z, KC_X, KC_C, KC_V, KC_B,
+ KC_NO, KC_NO, KC_NO, KC_LCTL, KC_SPC
+ )
+};
diff --git a/keyboards/handwired/scottokeebs/scottofrog/readme.md b/keyboards/handwired/scottokeebs/scottofrog/readme.md
new file mode 100644
index 00000000000..59b7f2e8280
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottofrog/readme.md
@@ -0,0 +1,27 @@
+# ScottoFrog
+
+
+
+A 17-key macropad. 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/scottofrog:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scottofrog: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/scottokeebs/scottofrog/rules.mk b/keyboards/handwired/scottokeebs/scottofrog/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottofrog/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scottogame/config.h b/keyboards/handwired/scottokeebs/scottogame/config.h
new file mode 100644
index 00000000000..a168f0ef218
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottogame/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/scottogame/info.json b/keyboards/handwired/scottokeebs/scottogame/info.json
new file mode 100644
index 00000000000..5c300b866e4
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottogame/info.json
@@ -0,0 +1,89 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoGame",
+ "maintainer": "joe-scotto",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true
+ },
+ "build": {
+ "lto": true
+ },
+ "matrix_pins": {
+ // RX1, 4, 5, 6, 7, 8, 9, A3, A2, A1
+ "cols": ["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": "0x0006",
+ "vid": "0x534B"
+ },
+ "layouts": {
+ "LAYOUT_ortho_6_3x10_6": {
+ "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, 6], "x": 6, "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 3
+ { "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": [3, 7], "x": 7, "y": 3 },
+ { "matrix": [3, 8], "x": 8, "y": 3 },
+ { "matrix": [3, 9], "x": 9, "y": 3 },
+
+ // Row 5
+ { "matrix": [4, 1], "x": 1, "y": 4 },
+ { "matrix": [4, 2], "x": 2, "y": 4 },
+ { "matrix": [4, 3], "x": 3, "y": 4 },
+ { "matrix": [4, 6], "x": 6, "y": 4 },
+ { "matrix": [4, 7], "x": 7, "y": 4 },
+ { "matrix": [4, 8], "x": 8, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scottogame/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottogame/keymaps/default/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottogame/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/scottogame/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottogame/keymaps/default/keymap.c
new file mode 100644
index 00000000000..786587e543b
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottogame/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_6_3x10_6(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+ 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_LCTL, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), KC_ESC
+ ),
+ [1] = LAYOUT_ortho_6_3x10_6(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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_ortho_6_3x10_6(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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_ortho_6_3x10_6(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_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/scottogame/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scottogame/keymaps/scotto/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottogame/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/scottogame/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scottogame/keymaps/scotto/keymap.c
new file mode 100644
index 00000000000..09fdf5dd9ab
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottogame/keymaps/scotto/keymap.c
@@ -0,0 +1,289 @@
+/*
+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
+
+// 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_6_3x10_6(
+ KC_1, KC_2, KC_3, KC_4, KC_5, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ 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),
+ KC_LCTL, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), TD(TD_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [1] = LAYOUT_ortho_6_3x10_6(
+ KC_1, KC_2, KC_3, KC_4, KC_5, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ 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_LCTL, KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [2] = LAYOUT_ortho_6_3x10_6(
+ KC_1, KC_2, KC_3, KC_4, KC_5, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ 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_LCTL, KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [3] = LAYOUT_ortho_6_3x10_6(
+ KC_1, KC_2, KC_3, KC_4, KC_5, TD(TD_ESC_SPOTLIGHT_EMOJI),
+ 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,
+ KC_LCTL, KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS, TD(TD_ESC_SPOTLIGHT_EMOJI)
+ ),
+ [4] = LAYOUT_ortho_6_3x10_6(
+ KC_1, KC_2, KC_3, KC_4, KC_5, TD(TD_ESC_WINDOWS_EMOJI),
+ 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),
+ KC_LALT, KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT), TD(TD_ESC_WINDOWS_EMOJI)
+ ),
+ [5] = LAYOUT_ortho_6_3x10_6(
+ KC_1, KC_2, KC_3, KC_4, KC_5, TD(TD_ESC_WINDOWS_EMOJI),
+ 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_LALT, KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_ESC_WINDOWS_EMOJI)
+ ),
+ [6] = LAYOUT_ortho_6_3x10_6(
+ KC_1, KC_2, KC_3, KC_4, KC_5, TD(TD_ESC_WINDOWS_EMOJI),
+ 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),
+ KC_LALT, KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_ESC_WINDOWS_EMOJI)
+ ),
+ [7] = LAYOUT_ortho_6_3x10_6(
+ KC_1, KC_2, KC_3, KC_4, KC_5, TD(TD_ESC_WINDOWS_EMOJI),
+ 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,
+ KC_LALT, KC_LCTL, KC_SPC, KC_TRNS, KC_TRNS, TD(TD_ESC_WINDOWS_EMOJI)
+ )
+};
+
+#ifdef OLED_ENABLE
+// WPM responsiveness
+#define IDLE_FRAMES 5
+#define IDLE_SPEED 20 // Speed at which animation goes into idle
+#define TAP_FRAMES 2
+#define TAP_SPEED 40 // WPM to trigger Bongo
+#define ANIM_FRAME_DURATION 200 // Frame MS
+#define ANIM_SIZE 636 // Number of bytes in array, max 1024
+
+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][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
+ static const char PROGMEM prep[][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
+ static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ };
+
+ void animation_phase(void) {
+ 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)], ANIM_SIZE);
+ }
+
+ if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) {
+ oled_write_raw_P(prep[0], ANIM_SIZE);
+ }
+
+ 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)], ANIM_SIZE);
+ }
+ }
+ if (get_current_wpm() != 000) {
+ oled_on(); // Enables OLED on any alpha keypress
+
+ if (timer_elapsed32(anim_timer) > ANIM_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) > ANIM_FRAME_DURATION) {
+ anim_timer = timer_read32();
+ animation_phase();
+ }
+ }
+ }
+}
+
+// Draw to OLED
+bool oled_task_user() {
+ oled_set_cursor(0, 0);
+ oled_write(" ScottoGame ", false);
+
+ // Render Bongo Cat
+ oled_set_cursor(86, 0);
+ render_animation();
+
+ // WPM text
+ oled_set_cursor(0,5);
+ oled_write(get_u8_str(get_current_wpm(), '0'), false);
+
+ // Layer text
+ oled_set_cursor(0, 6);
+ switch (get_highest_layer(layer_state)) {
+ case _MAC_DEFAULT :
+ oled_write_P(PSTR("MAC"), false);
+ oled_set_cursor(0, 7);
+ oled_write_P(PSTR("MAIN"), false);
+ break;
+ case _MAC_CODE :
+ oled_write_P(PSTR("MAC"), false);
+ oled_set_cursor(0, 7);
+ oled_write_P(PSTR("CODE"), false);
+ break;
+ case _MAC_NUM :
+ oled_write_P(PSTR("MAC"), false);
+ oled_set_cursor(0, 7);
+ oled_write_P(PSTR("NUM"), false);
+ break;
+ case _MAC_FUNC :
+ oled_write_P(PSTR("MAC"), false);
+ oled_set_cursor(0, 7);
+ oled_write_P(PSTR("FUNC"), false);
+ break;
+ case _WIN_DEFAULT :
+ oled_write_P(PSTR("WIN"), false);
+ oled_set_cursor(0, 7);
+ oled_write_P(PSTR("MAIN"), false);
+ break;
+ case _WIN_CODE :
+ oled_write_P(PSTR("WIN"), false);
+ oled_set_cursor(0, 7);
+ oled_write_P(PSTR("CODE"), false);
+ break;
+ case _WIN_NUM :
+ oled_write_P(PSTR("WIN"), false);
+ oled_set_cursor(0, 7);
+ oled_write_P(PSTR("NUM"), false);
+ break;
+ case _WIN_FUNC :
+ oled_write_P(PSTR("WIN"), false);
+ oled_set_cursor(0, 7);
+ oled_write_P(PSTR("FUNC"), false);
+ break;
+ }
+
+ // Caps lock text
+ led_t led_state = host_keyboard_led_state();
+ oled_set_cursor(0, 4);
+ oled_write_P(led_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false);
+
+ return false;
+}
+#endif
diff --git a/keyboards/handwired/scottokeebs/scottogame/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scottogame/keymaps/scotto/rules.mk
new file mode 100644
index 00000000000..bcee933e75e
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottogame/keymaps/scotto/rules.mk
@@ -0,0 +1,2 @@
+WPM_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scottogame/readme.md b/keyboards/handwired/scottokeebs/scottogame/readme.md
new file mode 100644
index 00000000000..c622df1b4ef
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottogame/readme.md
@@ -0,0 +1,27 @@
+# ScottoGame
+
+
+
+A 42-key ortholinear keyboard with a dedicated action button, split spacebar, 5 function keys, and a 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/scottogame:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scottogame: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/scottogame/rules.mk b/keyboards/handwired/scottokeebs/scottogame/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottogame/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottogame/scottogame.c b/keyboards/handwired/scottokeebs/scottogame/scottogame.c
new file mode 100644
index 00000000000..bea5a57a3b7
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottogame/scottogame.c
@@ -0,0 +1,34 @@
+/*
+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
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+
+ // Default OLED code
+ oled_set_cursor(0, 0);
+ oled_write(" ScottoGame ", false);
+
+ return false;
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottonum/info.json b/keyboards/handwired/scottokeebs/scottonum/info.json
new file mode 100644
index 00000000000..2907b47af86
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottonum/info.json
@@ -0,0 +1,56 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoNum",
+ "maintainer": "joe-scotto",
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "build": {
+ "lto": true
+ },
+ "matrix_pins": {
+ "direct": [
+ ["D3", "D2", "D1", "D0"],
+ ["D4", "C6", "D7", "E6"],
+ ["B4", "B5", "F4"],
+ ["F5", "F6", "F7", "B1"],
+ ["B3", "B2"]
+ ]
+ },
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0014",
+ "vid": "0x534B"
+ },
+ "layouts": {
+ "LAYOUT_numpad_4x5": {
+ "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": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scottonum/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottonum/keymaps/default/keymap.c
new file mode 100644
index 00000000000..a4b50f7769d
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottonum/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+/*
+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
+
+// Keymap
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_numpad_4x5(
+ KC_CIRCUMFLEX, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,
+ KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS,
+ KC_KP_4, KC_KP_5, KC_KP_6,
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER,
+ KC_KP_0, KC_KP_DOT
+ )
+};
diff --git a/keyboards/handwired/scottokeebs/scottonum/readme.md b/keyboards/handwired/scottokeebs/scottonum/readme.md
new file mode 100644
index 00000000000..66cbff80608
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottonum/readme.md
@@ -0,0 +1,27 @@
+# ScottoNum
+
+
+
+A 17-key macropad. 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/scottonum:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scottonum: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/scottokeebs/scottonum/rules.mk b/keyboards/handwired/scottokeebs/scottonum/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottonum/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scottosplit/info.json b/keyboards/handwired/scottokeebs/scottosplit/info.json
new file mode 100644
index 00000000000..792084b82cc
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottosplit/info.json
@@ -0,0 +1,78 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoSplit",
+ "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": "0x0012",
+ "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/scottosplit/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottosplit/keymaps/default/config.h
new file mode 100644
index 00000000000..de6c83da9a4
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottosplit/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
diff --git a/keyboards/handwired/scottokeebs/scottosplit/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottosplit/keymaps/default/keymap.c
new file mode 100644
index 00000000000..2633845d509
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottosplit/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/scottosplit/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scottosplit/keymaps/scotto/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottosplit/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/scottosplit/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scottosplit/keymaps/scotto/keymap.c
new file mode 100644
index 00000000000..f4d0a0c7bba
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottosplit/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/scottosplit/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scottosplit/keymaps/scotto/rules.mk
new file mode 100644
index 00000000000..e5ddcae8d92
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottosplit/keymaps/scotto/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scottosplit/readme.md b/keyboards/handwired/scottokeebs/scottosplit/readme.md
new file mode 100644
index 00000000000..94e73afd130
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottosplit/readme.md
@@ -0,0 +1,27 @@
+# ScottoSplit
+
+
+
+A 36-key split column-staggered ortholinear keyboard that uses a single MCU and VGA cable to connect the halves. 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/scottosplit:default
+
+Flashing example for this keyboard:
+
+ make handwired/jscotto/scottosplit: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/scottosplit/rules.mk b/keyboards/handwired/scottokeebs/scottosplit/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottosplit/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/handwired/scottokeebs/scottostarter/info.json b/keyboards/handwired/scottokeebs/scottostarter/info.json
new file mode 100644
index 00000000000..ade3db28a0e
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottostarter/info.json
@@ -0,0 +1,94 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoStarter",
+ "maintainer": "joe-scotto",
+ "diode_direction": "COL2ROW",
+ "development_board": "promicro",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ // RX1, 4, 5, 6, 7, 8, 9, A3, A2, A1, TX0
+ "cols": ["D2", "D4", "C6", "D7", "E6", "B4", "B5", "F4", "F5", "F6", "D3"],
+ // A0, 15, 14, 16, 10
+ "rows": ["F7", "B1", "B3", "B2", "B6"]
+ },
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0008",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT_ortho_4x11_8": {
+ "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},
+ {"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, 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": [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, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 7], "x": 7, "y": 4},
+ {"matrix": [4, 8], "x": 8, "y": 4},
+ {"matrix": [4, 9], "x": 9, "y": 4},
+ {"matrix": [4, 10], "x": 10, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scottostarter/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottostarter/keymaps/default/config.h
new file mode 100644
index 00000000000..1a6512052c1
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottostarter/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/scottostarter/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottostarter/keymaps/default/keymap.c
new file mode 100644
index 00000000000..fb47637f189
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottostarter/keymaps/default/keymap.c
@@ -0,0 +1,52 @@
+/*
+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_4x11_8(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TAB,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_ESC, KC_CAPS
+ ),
+ [1] = LAYOUT_ortho_4x11_8(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_NO, KC_TAB,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_QUOT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILD, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS), KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_TRNS, KC_TRNS, KC_ESC, KC_CAPS
+ ),
+ [2] = LAYOUT_ortho_4x11_8(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSPC,
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC, KC_TAB,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_QUOT,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_TRNS, KC_TRNS, KC_ESC, KC_CAPS
+ ),
+ [3] = LAYOUT_ortho_4x11_8(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSPC,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4), KC_TAB,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_QUOT,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12, KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_TRNS, KC_TRNS, KC_ESC, KC_CAPS
+ )
+};
+
+
+
diff --git a/keyboards/handwired/scottokeebs/scottostarter/readme.md b/keyboards/handwired/scottokeebs/scottostarter/readme.md
new file mode 100644
index 00000000000..346db2f5fd6
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottostarter/readme.md
@@ -0,0 +1,27 @@
+# ScottoStarter
+
+
+
+A 52-key ortholinear keyboard designed to help ease the transition into smaller layouts. 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/scottostarter:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scottostarter: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/scottostarter/rules.mk b/keyboards/handwired/scottokeebs/scottostarter/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottostarter/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/handwired/tractyl_manuform/4x6_right/keymaps/drashna/rules.mk b/keyboards/handwired/tractyl_manuform/4x6_right/keymaps/drashna/rules.mk
index 7fef013a388..d2d2a9b874d 100644
--- a/keyboards/handwired/tractyl_manuform/4x6_right/keymaps/drashna/rules.mk
+++ b/keyboards/handwired/tractyl_manuform/4x6_right/keymaps/drashna/rules.mk
@@ -6,4 +6,3 @@ TAP_DANCE_ENABLE = yes
UNICODE_ENABLE = yes
OLED_ENABLE = yes
WPM_ENABLE = yes
-# DEBOUNCE_TYPE = sym_eager_pk
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
index 2ab49de9faf..73ea40fb764 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
@@ -32,10 +32,10 @@ along with this program. If not, see .
#define WS2812_PWM_TARGET_PERIOD 800000
-#define RGBLED_NUM 52
+#define RGBLED_NUM 57
#define RGBLIGHT_SPLIT
#define RGBLED_SPLIT \
- { 26, 26 }
+ { 26, 31 }
#define DEBUG_LED_PIN C13
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/post_config.h b/keyboards/handwired/tractyl_manuform/5x6_right/f411/post_config.h
deleted file mode 100644
index 0e33129e1a9..00000000000
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/post_config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#ifndef RGBLIGHT_LIMIT_VAL
-# if defined(OLED_ENABLE)
-# define RGBLIGHT_LIMIT_VAL 100
-# else
-# define RGBLIGHT_LIMIT_VAL 150
-# endif
-#endif
-
-#ifndef OLED_BRIGHTNESS
-# ifdef RGBLIGHT_ENABLE
-# define OLED_BRIGHTNESS 80
-# else
-# define OLED_BRIGHTNESS 150
-# endif
-#endif
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/config.h
index f159a69174e..a449a126d6a 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/config.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/config.h
@@ -16,21 +16,21 @@
#pragma once
-#define DEBOUNCE 45
-
-#ifdef OLED_DRIVER_SH1107
-# undef OLED_DISPLAY_128X64
-#endif
+#undef OLED_DISPLAY_128X64
+#define OLED_DISPLAY_128X128
+#define OLED_BRIGHTNESS 200
#define CHARYBDIS_MINIMUM_DEFAULT_DPI 1200
#define CHARYBDIS_DEFAULT_DPI_CONFIG_STEP 200
#define CHARYBDIS_MINIMUM_SNIPING_DPI 400
#define CHARYBDIS_SNIPING_DPI_CONFIG_STEP 200
-#define ENCODER_DEFAULT_POS 0x3
-
-
#define BOOTMAGIC_LITE_EEPROM_ROW 1
#define BOOTMAGIC_LITE_EEPROM_COLUMN 0
#define BOOTMAGIC_LITE_EEPROM_ROW_RIGHT 7
#define BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT 5
+
+
+#define FB_ERM_LRA 0
+#define DRV_GREETING alert_750ms
+#define DRV_MODE_DEFAULT buzz
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/keymap.c b/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/keymap.c
index 93d3529edbc..380e17fb09f 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/keymap.c
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/keymap.c
@@ -90,8 +90,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_V, _______, _______
),
[_MOUSE] = LAYOUT_5x6_right(
- _______, _______, _______, _______, _______, _______, DRGSCRL, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD, SNP_TOG,
- _______, _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD, PD_JIGGLER,
+ _______, _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, DRGSCRL,
_______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, SNIPING,
_______, _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______, _______,
_______, _______, _______, _______,
@@ -115,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
_______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
_______, _______, _______, _______,
- _______, _______, _______,
+ OL_LOCK, _______, _______,
_______, _______, _______,
_______, _______, _______, _______
),
@@ -126,96 +126,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
UC_NEXT, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, KC_MPLY,
TG(_DIABLOII), AUTO_CTN, TG_GAME, TG_DBLO,
_______, QK_RBT, KC_NUKE,
- _______, _______, _______,
+ HF_TOGG, _______, _______,
_______, _______, KC_NUKE, _______
),
};
// clang-format on
-#ifdef ENCODER_ENABLE
-# ifdef ENCODER_MAP_ENABLE
+#ifdef ENCODER_MAP_ENABLE
// clang-format off
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [_DEFAULT_LAYER_1] = { ENCODER_CCW_CW( KC_VOLD, KC_VOLU ), ENCODER_CCW_CW( KC_WH_D, KC_WH_U ) },
+ [_DEFAULT_LAYER_1] = { ENCODER_CCW_CW( KC_VOLU, KC_VOLD ), ENCODER_CCW_CW( KC_WH_U, KC_WH_D ) },
[_DEFAULT_LAYER_2] = { ENCODER_CCW_CW( _______, _______ ), ENCODER_CCW_CW( _______, _______ ) },
[_DEFAULT_LAYER_3] = { ENCODER_CCW_CW( _______, _______ ), ENCODER_CCW_CW( _______, _______ ) },
[_DEFAULT_LAYER_4] = { ENCODER_CCW_CW( _______, _______ ), ENCODER_CCW_CW( _______, _______ ) },
[_GAMEPAD] = { ENCODER_CCW_CW( _______, _______ ), ENCODER_CCW_CW( _______, _______ ) },
[_DIABLO] = { ENCODER_CCW_CW( _______, _______ ), ENCODER_CCW_CW( _______, _______ ) },
- [_MOUSE] = { ENCODER_CCW_CW( _______, _______ ), ENCODER_CCW_CW( KC_WH_D, KC_WH_U ) },
+ [_MOUSE] = { ENCODER_CCW_CW( _______, _______ ), ENCODER_CCW_CW( _______, _______ ) },
[_MEDIA] = { ENCODER_CCW_CW( _______, _______ ), ENCODER_CCW_CW( _______, _______ ) },
- [_RAISE] = { ENCODER_CCW_CW( _______, _______ ), ENCODER_CCW_CW( KC_PGDN, KC_PGUP ) },
- [_LOWER] = { ENCODER_CCW_CW( RGB_MOD, RGB_RMOD), ENCODER_CCW_CW( RGB_HUD, RGB_HUI ) },
- [_ADJUST] = { ENCODER_CCW_CW( CK_DOWN, CK_UP ), ENCODER_CCW_CW( _______, _______ ) },
+ [_RAISE] = { ENCODER_CCW_CW( OL_BINC, OL_BDEC ), ENCODER_CCW_CW( KC_PGDN, KC_PGUP ) },
+ [_LOWER] = { ENCODER_CCW_CW( RGB_MOD, RGB_RMOD), ENCODER_CCW_CW( RGB_HUI, RGB_HUD ) },
+ [_ADJUST] = { ENCODER_CCW_CW( CK_UP, CK_DOWN ), ENCODER_CCW_CW( _______, _______ ) },
};
// clang-format on
-# else
-
-deferred_token encoder_token = INVALID_DEFERRED_TOKEN;
-static int8_t last_direction = -1;
-
-static uint32_t encoder_callback(uint32_t trigger_time, void *cb_arg) {
- unregister_code(last_direction ? KC_WH_D : KC_WH_U);
- last_direction = -1;
- return 0;
-}
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
-# ifdef SWAP_HANDS_ENABLE
- if (swap_hands) {
- index ^= 1;
- }
-# endif
- if (index == 0) {
- tap_code_delay(clockwise ? KC_VOLD : KC_VOLU, 5);
- } else if (index == 1) {
- if (last_direction != clockwise || encoder_token == INVALID_DEFERRED_TOKEN) {
- uint8_t keycode = clockwise ? KC_WH_D : KC_WH_U;
- last_direction = clockwise;
- if (encoder_token != INVALID_DEFERRED_TOKEN) {
- if (cancel_deferred_exec(encoder_token)) {
- encoder_token = INVALID_DEFERRED_TOKEN;
- }
- unregister_code(clockwise ? KC_WH_U : KC_WH_D);
- }
- register_code(keycode);
- encoder_token = defer_exec(MOUSEKEY_WHEEL_DELAY + MOUSEKEY_WHEEL_INTERVAL, encoder_callback, NULL);
- } else {
- extend_deferred_exec(encoder_token, MOUSEKEY_WHEEL_INTERVAL);
- }
- }
- return false;
-}
-# endif
#endif
#ifdef OLED_ENABLE
-# include "keyrecords/unicode.h"
-
oled_rotation_t oled_init_keymap(oled_rotation_t rotation) {
return OLED_ROTATION_180;
}
-void oled_render_large_display(bool side) {
- if (side) {
- render_wpm_graph(56, 64);
- } else {
- oled_advance_page(true);
- oled_advance_page(true);
-
- // clang-format off
- static const char PROGMEM logo[] = {
- 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
- 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
- 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
- };
- // clang-format on
- oled_write_P(logo, false);
-
- render_unicode_mode(1, 14);
- }
-}
-
void render_oled_title(bool side) {
oled_write_P(side ? PSTR(" Tractyl ") : PSTR(" Manuform "), true);
}
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/rules.mk b/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/rules.mk
index acec28fa6e2..9f5341e973d 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/rules.mk
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/rules.mk
@@ -5,7 +5,6 @@ CUSTOM_BOOTMAGIC_ENABLE = no
CUSTOM_UNICODE_ENABLE = no
HAPTIC_ENABLE = no
OLED_ENABLE = no
-OLED_DRIVER = custom
RGBLIGHT_ENABLE = no
SWAP_HANDS_ENABLE = no
TAP_DANCE_ENABLE = no
@@ -16,12 +15,14 @@ ifeq ($(strip $(KEYBOARD)), handwired/tractyl_manuform/5x6_right/elite_c)
BOOTLOADER_SIZE = 512
CUSTOM_SPLIT_TRANSPORT_SYNC = no
LTO_ENABLE = yes
+ MOUSEKEY_ENABLE = no
endif
ifeq ($(strip $(KEYBOARD)), handwired/tractyl_manuform/5x6_right/arduinomicro)
BOOTLOADER = qmk-hid
BOOTLOADER_SIZE = 512
CUSTOM_SPLIT_TRANSPORT_SYNC = no
LTO_ENABLE = yes
+ MOUSEKEY_ENABLE = no
endif
ifeq ($(strip $(KEYBOARD)), handwired/tractyl_manuform/5x6_right/teensy2pp)
AUTOCORRECT_ENABLE = no
@@ -33,8 +34,9 @@ ifeq ($(strip $(KEYBOARD)), handwired/tractyl_manuform/5x6_right/f411)
AUTOCORRECT_ENABLE = yes
LTO_SUPPORTED = no
OVERLOAD_FEATURES = yes
+ HAPTIC_ENABLE = yes
+ HAPTIC_DRIVER = DRV2605L
endif
-# DEBOUNCE_TYPE = sym_eager_pk
ifeq ($(strip $(OVERLOAD_FEATURES)), yes)
AUDIO_ENABLE = yes
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/teensy2pp/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/teensy2pp/config.h
index dd5da75821a..ce8e65e9248 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/teensy2pp/config.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/teensy2pp/config.h
@@ -23,7 +23,7 @@ along with this program. If not, see .
#define RGBLIGHT_SPLIT
#define RGBLED_SPLIT \
{ 10, 10 }
-#define OLED_BRIGHTNESS 50
+#define RGBLIGHT_LIMIT_VAL 80
#define DEBUG_LED_PIN D6
diff --git a/keyboards/handwired/tractyl_manuform/post_config.h b/keyboards/handwired/tractyl_manuform/post_config.h
index c48518ddd30..b5d67132b26 100644
--- a/keyboards/handwired/tractyl_manuform/post_config.h
+++ b/keyboards/handwired/tractyl_manuform/post_config.h
@@ -94,3 +94,19 @@ along with this program. If not, see .
#ifndef DEBOUNCE
# define DEBOUNCE 5
#endif
+
+#if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_LIMIT_VAL)
+# if defined(OLED_ENABLE)
+# define RGBLIGHT_LIMIT_VAL 100
+# else
+# define RGBLIGHT_LIMIT_VAL 150
+# endif
+#endif
+
+#if !defined(OLED_BRIGHTNESS)
+# if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+# define OLED_BRIGHTNESS 80
+# else
+# define OLED_BRIGHTNESS 150
+# endif
+#endif
diff --git a/keyboards/handwired/tsubasa/info.json b/keyboards/handwired/tsubasa/info.json
index 351731a6139..1c374f3b08c 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/hfdkb/keyboard_sw/k83/info.json b/keyboards/hfdkb/keyboard_sw/k83/info.json
index 559fa3d790e..b31fd86f1f8 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
new file mode 100644
index 00000000000..438fb5fe897
--- /dev/null
+++ b/keyboards/holyswitch/lightweight65/info.json
@@ -0,0 +1,99 @@
+{
+ "keyboard_name": "Lightweight65",
+ "manufacturer": "HolySwitch",
+ "url": "",
+ "maintainer": "DeskDaily",
+ "usb": {
+ "vid": "0x484F",
+ "pid": "0x0651",
+ "device_version": "1.0.0"
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "matrix_pins": {
+ "rows": ["F4", "F1", "D5", "C6", "F6"],
+ "cols": ["F0", "B6", "B5", "B4", "D7", "D6", "B1", "B2", "B3", "B7", "D4", "D2", "D1", "D0", "D3"]
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": 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, "w": 2},
+ {"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, 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, 2], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "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, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c b/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c
new file mode 100644
index 00000000000..bac1c8d4bca
--- /dev/null
+++ b/keyboards/holyswitch/lightweight65/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 DeskDaily
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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_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(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
\ No newline at end of file
diff --git a/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c b/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c
new file mode 100644
index 00000000000..bac1c8d4bca
--- /dev/null
+++ b/keyboards/holyswitch/lightweight65/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2023 DeskDaily
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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_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(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
\ No newline at end of file
diff --git a/keyboards/holyswitch/lightweight65/keymaps/via/rules.mk b/keyboards/holyswitch/lightweight65/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/holyswitch/lightweight65/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/holyswitch/lightweight65/readme.md b/keyboards/holyswitch/lightweight65/readme.md
new file mode 100644
index 00000000000..8e5bb83e331
--- /dev/null
+++ b/keyboards/holyswitch/lightweight65/readme.md
@@ -0,0 +1,22 @@
+# Lightweight65
+
+* Keyboard Maintainer: [DeskDaily](https://github.com/DeskDaily)
+* Hardware Supported: Atmega32u4
+
+Make example for this keyboard (after setting up your build environment):
+
+ make holyswitch/lightweight65:default
+
+Flashing example for this keyboard:
+
+ make holyswitch/lightweight65:default:flash
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the upper left key/esc) 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
+
+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/holyswitch/lightweight65/rules.mk b/keyboards/holyswitch/lightweight65/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/holyswitch/lightweight65/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/igloo/info.json b/keyboards/igloo/info.json
index 1f50a72c5f8..6e0cba498bb 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": [2, 0], "w": 1.75, "x": 0, "y": 2},
+ {"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], "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 00000000000..2308f15c06d
--- /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/jaykeeb/orba/info.json b/keyboards/jaykeeb/orba/info.json
new file mode 100644
index 00000000000..b437667b14d
--- /dev/null
+++ b/keyboards/jaykeeb/orba/info.json
@@ -0,0 +1,192 @@
+{
+ "manufacturer": "Alabahuy",
+ "keyboard_name": "orba",
+ "maintainer": "Alabahuy",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP17", "GP16", "GP14", "GP13", "GP12", "GP15", "GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20"],
+ "rows": ["GP11", "GP10", "GP18", "GP19", "GP0" ]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0769",
+ "vid": "0x414C"
+ },
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_625u_space"
+ },
+ "layouts": {
+ "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": 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.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}
+ ]
+ }
+ }
+}
diff --git a/keyboards/jaykeeb/orba/keymaps/default/keymap.c b/keyboards/jaykeeb/orba/keymaps/default/keymap.c
new file mode 100644
index 00000000000..5b00f5a34cf
--- /dev/null
+++ b/keyboards/jaykeeb/orba/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+// Copyright 2023 Alabahuy (@Alabahuy)
+// 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 │Del│Hom│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Tab│ Q │ W │ E │ R │ T │ 7 │ 8 │ 9 │ Y │ U │ I │ O │ P │Bsc│PgU│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Cap│ A │ S │ D │ F │ G │ 4 │ 5 │ 6 │ H │ J │ k │ L │ : │ " │PgD│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Shf│ Z │ X │ C │ V │ B │ 1 │ 2 │ 3 │ N │ M │ < │ > │ ? │ │Ent│
+ * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┴┬──┴─┬─┼───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │ FN │Ctrl│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [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,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+
+ [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,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/jaykeeb/orba/keymaps/via/keymap.c b/keyboards/jaykeeb/orba/keymaps/via/keymap.c
new file mode 100644
index 00000000000..e6b4fb0b207
--- /dev/null
+++ b/keyboards/jaykeeb/orba/keymaps/via/keymap.c
@@ -0,0 +1,38 @@
+// Copyright 2023 Alabahuy (@Alabahuy)
+// 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 │Del│Hom│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Tab│ Q │ W │ E │ R │ T │ 7 │ 8 │ 9 │ Y │ U │ I │ O │ P │Bsc│PgU│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Cap│ A │ S │ D │ F │ G │ 4 │ 5 │ 6 │ H │ J │ k │ L │ : │ " │PgD│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Shf│ Z │ X │ C │ V │ B │ 1 │ 2 │ 3 │ N │ M │ < │ > │ ? │ │Ent│
+ * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┴┬──┴─┬─┼───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │ FN │Ctrl│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [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,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+
+ [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,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+
+};
diff --git a/keyboards/jaykeeb/orba/keymaps/via/rules.mk b/keyboards/jaykeeb/orba/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/jaykeeb/orba/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/jaykeeb/orba/readme.md b/keyboards/jaykeeb/orba/readme.md
new file mode 100644
index 00000000000..23efe28b519
--- /dev/null
+++ b/keyboards/jaykeeb/orba/readme.md
@@ -0,0 +1,27 @@
+# orba
+
+
+
+PCB like 65% with ortho 16x4 and bottom ansi or tsangan
+
+* Keyboard Maintainer: [Alabahuy](https://github.com/Alabahuy)
+* Hardware Supported: orba PCB, RP2040
+* Hardware Availability: Private GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jaykeeb/orba:default
+
+Flashing example for this keyboard:
+
+ make jaykeeb/orba: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/orba/rules.mk b/keyboards/jaykeeb/orba/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/jaykeeb/orba/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/jaykeeb/skyline/info.json b/keyboards/jaykeeb/skyline/info.json
new file mode 100644
index 00000000000..068c11a8740
--- /dev/null
+++ b/keyboards/jaykeeb/skyline/info.json
@@ -0,0 +1,563 @@
+{
+ "manufacturer": "Jaykeeb",
+ "keyboard_name": "Skyline",
+ "maintainer": "Alabahuy",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "GP24",
+ "scroll_lock": "GP12",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["GP11", "GP10", "GP9", "GP8", "GP7", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0", "GP29", "GP28", "GP16", "GP15", "GP14"],
+ "rows": ["GP13", "GP27", "GP26", "GP25", "GP22", "GP23"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0799",
+ "vid": "0x414C"
+ },
+ "community_layouts": [
+ "tkl_ansi_tsangan",
+ "tkl_ansi_tsangan_split_bs_rshift",
+ "tkl_iso_tsangan",
+ "tkl_iso_tsangan_split_bs_rshift"
+ ],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+
+ {"label": "F1", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "F2", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "F3", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "F4", "matrix": [0, 5], "x": 5, "y": 0},
+
+ {"label": "F5", "matrix": [0, 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": "Print Screen", "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": "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": [2, 13], "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": "Page Up", "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": [3, 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": "Page Down", "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": 1.25},
+ {"label": "\u2298", "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": "Fn1", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"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.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.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},
+ {"label": "\u2192", "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": "Print Screen", "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": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "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": "Page Up", "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": [3, 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": "Page Down", "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, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"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.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.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},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_split_bs_rshift": {
+ "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": "Print Screen", "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": "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": [2, 13], "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": "Page Up", "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": [3, 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": "Page Down", "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, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Fn1", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"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.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "Space", "matrix": [5, 4], "x": 4, "y": 5.25, "w": 7},
+ {"label": "Alt", "matrix": [5, 9], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "Fn", "matrix": [5, 10], "x": 12.5, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 11], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"label": "\u2193", "matrix": [5, 12], "x": 16.25, "y": 5.25},
+ {"label": "\u2192", "matrix": [5, 7], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_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": "Print Screen", "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": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "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": "Page Up", "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": "Delete", "matrix": [2, 13], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [2, 14], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "matrix": [2, 15], "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, 12], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "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": 2.75},
+
+ {"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.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.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},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_tsangan_split_bs_rshift": {
+ "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": "Print Screen", "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": "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": [2, 13], "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": "Page Up", "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": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"label": "Page Down", "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": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "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": "Fn1", "matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"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.5, "y": 5.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.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},
+ {"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/jaykeeb/skyline/keymaps/default/keymap.c b/keyboards/jaykeeb/skyline/keymaps/default/keymap.c
new file mode 100644
index 00000000000..78cf4b4c44d
--- /dev/null
+++ b/keyboards/jaykeeb/skyline/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 Alabahuy
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
\ No newline at end of file
diff --git a/keyboards/jaykeeb/skyline/keymaps/via/keymap.c b/keyboards/jaykeeb/skyline/keymaps/via/keymap.c
new file mode 100644
index 00000000000..78cf4b4c44d
--- /dev/null
+++ b/keyboards/jaykeeb/skyline/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 Alabahuy
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
\ No newline at end of file
diff --git a/keyboards/jaykeeb/skyline/keymaps/via/rules.mk b/keyboards/jaykeeb/skyline/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/jaykeeb/skyline/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/jaykeeb/skyline/matrix_diagram.md b/keyboards/jaykeeb/skyline/matrix_diagram.md
new file mode 100644
index 00000000000..419567fab54
--- /dev/null
+++ b/keyboards/jaykeeb/skyline/matrix_diagram.md
@@ -0,0 +1,21 @@
+# Matrix Diagram for Skyline
+
+```
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│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 │2D │ │1E │1F │1G │ │1D │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ └─┬─────┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │3D │ │2E │2F │2G │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ┌──┴┐3D │ ISO Enter
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │ │3C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐ └───┴────┘
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │ │4F │
+├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+│50 │51 │52 │57 │5B │5C │5D │ │5E │5F │5G │ Tsangan/WKL
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘
+┌────────┐ ┌──────────┐
+│40 │ 2.25u LShift 2.75u RShift │4C │
+└────────┘ └──────────┘
+```
diff --git a/keyboards/jaykeeb/skyline/readme.md b/keyboards/jaykeeb/skyline/readme.md
new file mode 100644
index 00000000000..92291310e04
--- /dev/null
+++ b/keyboards/jaykeeb/skyline/readme.md
@@ -0,0 +1,27 @@
+#Skyline
+
+
+
+PCB for "Skyline" TKL Mechanical Keyboard
+
+* Keyboard Maintainer: [Alabahuy](https://github.com/alabahuy)
+* Hardware Supported: Skyline PCB, RP2040
+* Hardware Availability: Private GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jaykeeb/skyline:default
+
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make jaykeeb/skyline: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/jaykeeb/skyline/rules.mk b/keyboards/jaykeeb/skyline/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/jaykeeb/skyline/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/kalakos/bahrnob/info.json b/keyboards/kalakos/bahrnob/info.json
index 3e556f9bb85..6905ceb38da 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 00000000000..30e120b75b3
--- /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 61d1b43f8b3..250b886d8b3 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 a9f8c83d12d..75cbd41bd3e 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/sinc/keymaps/default/keymap.c b/keyboards/keebio/sinc/keymaps/default/keymap.c
index 20c12a4a6e4..171b7a7d057 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 f7ad1047bf2..f3eaaa5bca0 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 2a54d1aa5a3..a1299ce112b 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 00000000000..b6c5785f4cf
--- /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 00000000000..64036dec35f
--- /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 00000000000..f985f64e48f
--- /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 00000000000..8b26af41319
--- /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 00000000000..161ec22b16e
--- /dev/null
+++ b/keyboards/keebio/sinc/rev4/rules.mk
@@ -0,0 +1 @@
+SERIAL_DRIVER = vendor
diff --git a/keyboards/keyboardio/atreus/keymaps/kkokdae/keymap.c b/keyboards/keyboardio/atreus/keymaps/kkokdae/keymap.c
index 5ff5c87dac9..de8491d2463 100644
--- a/keyboards/keyboardio/atreus/keymaps/kkokdae/keymap.c
+++ b/keyboards/keyboardio/atreus/keymaps/kkokdae/keymap.c
@@ -58,14 +58,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_MRWD, KC_VOLU, KC_VOLD, KC_MFFD, KC_MPLY, KC_INS, KC_F7, KC_F8, KC_F9, KC_CAPS,
KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_BRIU, KC_F12, KC_F4, KC_F5, KC_F6, TD(TdL),
KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_BRID, _______, _______, KC_F10, KC_F1, KC_F2, KC_F3, KC_F11,
- _______, _______, _______, AS_TOGG, _______, _______, _______, DNUMPAD, _______, _______, _______, _______
+ _______, _______, _______, CW_TOGG, _______, _______, _______, DNUMPAD, _______, _______, _______, _______
),
[_NUMPAD] = LAYOUT(
_______, _______, _______, _______, _______, S(KC_E), KC_7, KC_8, KC_9, S(KC_F),
TD(TdL), KC_EQL, KC_ASTR, KC_PLUS, _______, S(KC_C), KC_4, KC_5, KC_6, S(KC_D),
TD(TdH), KC_DOT, KC_SLSH, KC_MINS, _______, _______, _______, S(KC_A), KC_1, KC_2, KC_3, S(KC_B),
- _______, _______, _______, AS_TOGG, _______, _______, _______, _______, KC_0, _______, _______, _______
+ _______, _______, _______, CW_TOGG, _______, _______, _______, _______, KC_0, _______, _______, _______
),
[_SYMBOL] = LAYOUT(
@@ -76,22 +76,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-bool get_custom_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
- switch(keycode) {
- case KC_MINS:
- case KC_UNDS:
- case KC_BSPC:
- return false;
- }
-
- switch(keycode & 0xFF) {
- case KC_1 ... KC_UP:
- autoshift_disable();
- default:
- return false;
- }
-}
-
void dance_hex(tap_dance_state_t *state, void *user_data) {
switch(state->count) {
case 1:
@@ -120,7 +104,6 @@ void dance_lang(tap_dance_state_t *state, void *user_data) {
}
}
-
tap_dance_action_t tap_dance_actions[] = {
[TdH] = ACTION_TAP_DANCE_FN(dance_hex),
[TdL] = ACTION_TAP_DANCE_FN(dance_lang)
diff --git a/keyboards/keyboardio/atreus/keymaps/kkokdae/readme.md b/keyboards/keyboardio/atreus/keymaps/kkokdae/readme.md
index b67e31c49f4..f7f85f70a6a 100644
--- a/keyboards/keyboardio/atreus/keymaps/kkokdae/readme.md
+++ b/keyboards/keyboardio/atreus/keymaps/kkokdae/readme.md
@@ -3,5 +3,3 @@
This is the keymap available for keyboardio/atreus keyboards.
The default layout used [Colemak Mod-DH](https://colemakmods.github.io/mod-dh/). The prefix keys for vim/tmux users. The symbol is designed for ease of use by programmers.
-
-It used the idea of [Caps Work Behavior](https://zmk.dev/docs/behaviors/caps-word) by ZMK Firmware. I want to officially add this feature to QMK in the future
diff --git a/keyboards/keyboardio/atreus/keymaps/kkokdae/rules.mk b/keyboards/keyboardio/atreus/keymaps/kkokdae/rules.mk
index d24c14122ab..75ebcd912b7 100644
--- a/keyboards/keyboardio/atreus/keymaps/kkokdae/rules.mk
+++ b/keyboards/keyboardio/atreus/keymaps/kkokdae/rules.mk
@@ -1,3 +1,4 @@
MOUSEKEY_ENABLE = no
+COMMAND_ENABLE = no
TAP_DANCE_ENABLE = yes
-AUTO_SHIFT_ENABLE = yes
+CAPS_WORD_ENABLE = yes
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 00000000000..a103d190d0e
--- /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 00000000000..e5f964a96a4
--- /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 00000000000..636e83b5275
--- /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 00000000000..2b5a1957cd6
--- /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 00000000000..495e8907b48
--- /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 00000000000..636e83b5275
--- /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 00000000000..1e5b99807cb
--- /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 00000000000..04565f3b014
--- /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 00000000000..414ee38bbd3
--- /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 00000000000..dd3e1da477b
--- /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 00000000000..78c672ac893
--- /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 00000000000..a829c118922
--- /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 00000000000..e17d67eb718
--- /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 00000000000..495e8907b48
--- /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 00000000000..a829c118922
--- /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 00000000000..1e5b99807cb
--- /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 00000000000..414ee38bbd3
--- /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 00000000000..72e9ad4db13
--- /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 00000000000..607cd958ade
--- /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 00000000000..2d814904712
--- /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 00000000000..41bddcb2799
--- /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 00000000000..9c9b4bf16f8
--- /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 00000000000..0ca8c64850f
--- /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 00000000000..7e9d0e90587
--- /dev/null
+++ b/keyboards/keychron/c1_pro/readme.md
@@ -0,0 +1,23 @@
+# Keychron C1 Pro
+
+
+
+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 00000000000..d62b756f5a8
--- /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 00000000000..eab0e9bdc4d
--- /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 00000000000..07f523e30a0
--- /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 00000000000..9bc6b416bb3
--- /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 00000000000..495e8907b48
--- /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 00000000000..5120e9bacbf
--- /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 00000000000..1e5b99807cb
--- /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 00000000000..998933081f1
--- /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 00000000000..7c43bc28cdb
--- /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 00000000000..d2a0e27b579
--- /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 00000000000..3248e7c38a9
--- /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 00000000000..70934e122e3
--- /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 00000000000..09002c3d7a4
--- /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 00000000000..495e8907b48
--- /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 00000000000..547521e099b
--- /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 00000000000..1e5b99807cb
--- /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 00000000000..7c43bc28cdb
--- /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 00000000000..963ac8755f8
--- /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 00000000000..2cd58ab4d79
--- /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 00000000000..f107dadf48d
--- /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 00000000000..41bddcb2799
--- /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 00000000000..fda5fe98871
--- /dev/null
+++ b/keyboards/keychron/c2_pro/info.json
@@ -0,0 +1,26 @@
+{
+ "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_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 00000000000..af7514c5adb
--- /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 00000000000..0ca8c64850f
--- /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 00000000000..c0715929dfe
--- /dev/null
+++ b/keyboards/keychron/c2_pro/readme.md
@@ -0,0 +1,23 @@
+# Keychron C2 Pro
+
+
+
+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/kibou/harbour/info.json b/keyboards/kibou/harbour/info.json
new file mode 100644
index 00000000000..a5417e1ae52
--- /dev/null
+++ b/keyboards/kibou/harbour/info.json
@@ -0,0 +1,183 @@
+{
+ "manufacturer": "kibou",
+ "keyboard_name": "harbour",
+ "maintainer": "FanXingStudio",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "ROW2COL",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["C9", "A8", "A15", "C10", "C11", "B5", "B6", "B7", "A0", "A1", "A2", "C3", "C2", "C1", "A3", "A4"],
+ "rows": ["C12", "D2", "B3", "B4", "C13"]
+ },
+ "processor": "STM32F401",
+ "url": "https://kibou.store/",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0xA002",
+ "vid": "0x586A"
+ },
+ "indicators": {
+ "caps_lock": "C8"
+ },
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_65_ansi_blocker_tsangan_split_bs"
+ },
+ "layouts": {
+ "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, 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}
+ ]
+ }
+ }
+}
diff --git a/keyboards/kibou/harbour/keymaps/default/keymap.c b/keyboards/kibou/harbour/keymaps/default/keymap.c
new file mode 100644
index 00000000000..a949c5dc4de
--- /dev/null
+++ b/keyboards/kibou/harbour/keymaps/default/keymap.c
@@ -0,0 +1,13 @@
+// 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_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,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/kibou/harbour/keymaps/via/keymap.c b/keyboards/kibou/harbour/keymaps/via/keymap.c
new file mode 100644
index 00000000000..a949c5dc4de
--- /dev/null
+++ b/keyboards/kibou/harbour/keymaps/via/keymap.c
@@ -0,0 +1,13 @@
+// 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_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,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/kibou/harbour/keymaps/via/rules.mk b/keyboards/kibou/harbour/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/kibou/harbour/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/kibou/harbour/matrix_diagram.md b/keyboards/kibou/harbour/matrix_diagram.md
new file mode 100644
index 00000000000..1f5097d93d8
--- /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
new file mode 100644
index 00000000000..31ac8dbd83e
--- /dev/null
+++ b/keyboards/kibou/harbour/readme.md
@@ -0,0 +1,23 @@
+# harbour
+
+* Keyboard Maintainer: [FanXingStudio](https://github.com/FanXingStudio)
+* Hardware Supported: harbour PCBs, STM32F401
+* Hardware Availability: https://kibou.store/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kibou/harbour:default
+
+Flashing example for this keyboard:
+
+ make kibou/harbour: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/harbour/rules.mk b/keyboards/kibou/harbour/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/kibou/harbour/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/kibou/wendy/info.json b/keyboards/kibou/wendy/info.json
new file mode 100644
index 00000000000..4277cc03bd2
--- /dev/null
+++ b/keyboards/kibou/wendy/info.json
@@ -0,0 +1,126 @@
+{
+ "manufacturer": "kibou",
+ "keyboard_name": "wendy",
+ "maintainer": "kibou",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B11", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A10", "A9", "A8", "A3", "B15", "B14", "B7", "B9", "B6"],
+ "rows": ["B4", "B3", "A15", "B13", "B8", "B5"]
+ },
+ "processor": "STM32F072",
+ "url": "https://kibou.store/",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0xA001",
+ "vid": "0x586A"
+ },
+ "indicators": {
+ "caps_lock": "B12"
+ },
+ "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,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}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kibou/wendy/keymaps/default/keymap.c b/keyboards/kibou/wendy/keymaps/default/keymap.c
new file mode 100644
index 00000000000..f7618e9a086
--- /dev/null
+++ b/keyboards/kibou/wendy/keymaps/default/keymap.c
@@ -0,0 +1,14 @@
+// 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_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)
+};
diff --git a/keyboards/kibou/wendy/keymaps/via/keymap.c b/keyboards/kibou/wendy/keymaps/via/keymap.c
new file mode 100644
index 00000000000..f7618e9a086
--- /dev/null
+++ b/keyboards/kibou/wendy/keymaps/via/keymap.c
@@ -0,0 +1,14 @@
+// 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_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)
+};
diff --git a/keyboards/kibou/wendy/keymaps/via/rules.mk b/keyboards/kibou/wendy/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/kibou/wendy/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/kibou/wendy/readme.md b/keyboards/kibou/wendy/readme.md
new file mode 100644
index 00000000000..a190d03047c
--- /dev/null
+++ b/keyboards/kibou/wendy/readme.md
@@ -0,0 +1,23 @@
+# wendy
+
+* Keyboard Maintainer: [wendy](https://kibou.store/)
+* Hardware Supported: wendy PCBs, STM32F072
+* Hardware Availability: https://kibou.store/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kibou/wendy:default
+
+Flashing example for this keyboard:
+
+ make kibou/wendy: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/wendy/rules.mk b/keyboards/kibou/wendy/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/kibou/wendy/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/kibou/winter/info.json b/keyboards/kibou/winter/info.json
new file mode 100644
index 00000000000..47a359ec9b3
--- /dev/null
+++ b/keyboards/kibou/winter/info.json
@@ -0,0 +1,122 @@
+{
+ "manufacturer": "kibou",
+ "keyboard_name": "winter",
+ "maintainer": "kibou",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "A4"
+ },
+ "matrix_pins": {
+ "cols": ["A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B2", "B1", "B0", "A7", "A3", "A6", "A10", "A15", "B9", "B4"],
+ "rows": ["B6", "B5", "B3", "A5", "B8", "B7"]
+ },
+ "processor": "STM32F072",
+ "url": "https://kibou.store/",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0xA003",
+ "vid": "0x586A"
+ },
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_tkl_ansi_wkl"
+ },
+ "layouts": {
+ "LAYOUT_tkl_ansi_wkl": {
+ "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, 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": [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], "w": 2, "x": 13, "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], "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, 14], "w": 1.5, "x": 13.5, "y": 2.25 },
+ { "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], "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, 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 },
+ { "matrix": [4, 4], "x": 5.25, "y": 4.25 },
+ { "matrix": [4, 5], "x": 6.25, "y": 4.25 },
+ { "matrix": [4, 6], "x": 7.25, "y": 4.25 },
+ { "matrix": [4, 7], "x": 8.25, "y": 4.25 },
+ { "matrix": [4, 8], "x": 9.25, "y": 4.25 },
+ { "matrix": [4, 9], "x": 10.25, "y": 4.25 },
+ { "matrix": [4, 10], "x": 11.25, "y": 4.25 },
+ { "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
+ { "matrix": [4, 16], "x": 16.25, "y": 4.25 },
+ { "matrix": [5, 0], "w": 1.5, "x": 0, "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, 10], "w": 1.5, "x": 11, "y": 5.25 },
+ { "matrix": [5, 14], "w": 1.5, "x": 13.5, "y": 5.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 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kibou/winter/keymaps/default/keymap.c b/keyboards/kibou/winter/keymaps/default/keymap.c
new file mode 100644
index 00000000000..0837234be5f
--- /dev/null
+++ b/keyboards/kibou/winter/keymaps/default/keymap.c
@@ -0,0 +1,15 @@
+// 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_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,
+ KC_CAPS, KC_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_LSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LALT, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/kibou/winter/keymaps/via/keymap.c b/keyboards/kibou/winter/keymaps/via/keymap.c
new file mode 100644
index 00000000000..0837234be5f
--- /dev/null
+++ b/keyboards/kibou/winter/keymaps/via/keymap.c
@@ -0,0 +1,15 @@
+// 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_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,
+ KC_CAPS, KC_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_LSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LALT, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/kibou/winter/keymaps/via/rules.mk b/keyboards/kibou/winter/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/kibou/winter/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/kibou/winter/readme.md b/keyboards/kibou/winter/readme.md
new file mode 100644
index 00000000000..29aa667ffd2
--- /dev/null
+++ b/keyboards/kibou/winter/readme.md
@@ -0,0 +1,23 @@
+# winter
+
+* Keyboard Maintainer: [kibou](https://kibou.store/)
+* Hardware Supported: winter PCBs, STM32F072
+* Hardware Availability: https://kibou.store/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kibou/winter:default
+
+Flashing example for this keyboard:
+
+ make kibou/winter: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/winter/rules.mk b/keyboards/kibou/winter/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/kibou/winter/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/kj_modify/rs40/info.json b/keyboards/kj_modify/rs40/info.json
index 719f0e14dd5..a869383bd7d 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 a5bcce2796b..045df2b6223 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/kprepublic/bm40hsrgb/keymaps/coffee/config.h b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
index b5c19a31b83..e8f6fac1201 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
@@ -52,14 +52,6 @@
# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif
-// If RGBLight is enabled
-#ifdef RGBLIGHT_ENABLE
-# define RGBLED_NUM RGB_MATRIX_LED_COUNT
-
-# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_STATIC_GRADIENT
-#endif
-
// Feature disable
#ifndef NO_PRINT
# define NO_PRINT
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
index a41020446dc..ef7cfab5fe2 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
@@ -4,16 +4,11 @@
#include QMK_KEYBOARD_H
enum custom_keycodes {
- NULLKEY = SAFE_RANGE, // An empty key to start (and maybe end) the enum
- #ifdef DYNAMIC_MACRO_ENABLE
- MCR_PLY, // Macro play
- MCR_REC, // Macro record
- MCR_SWT, // Swap active macro
- #endif
- #ifdef MOUSEKEY_ENABLE
- MS_ACL_U,
- MS_ACL_D,
- #endif
+ MCR_PLY = QK_USER, // Macro play
+ MCR_REC, // Macro record
+ MCR_SWT, // Swap active macro
+ MS_ACL_U, // Mouse speed up
+ MS_ACL_D, // Mouse speed down
};
enum layout_names {
@@ -35,25 +30,25 @@ static int current_accel = 0;
#endif // MOUSEKEY_ENABLE
#ifdef DYNAMIC_MACRO_ENABLE
- // Macro 1 is = 1, Macro 2 = -1, No macro = 0
- static bool MACRO1 = true;
- static bool RECORDING = false;
+// Macro 1 is = 1, Macro 2 = -1, No macro = 0
+static bool MACRO1 = true; // Determines whether or not we're using 1 or 2
+static bool RECORDING = false;
+static uint16_t REC = DM_REC1; // Record either macro 1 or 2. Or stop recording
+static uint16_t PLY = DM_PLY1; // Play either macro 1 or macro 2
- static uint16_t REC = DM_REC1;
- static uint16_t PLY = DM_PLY1;
+void dynamic_macro_record_start_user(int8_t direction) {
+ REC = DM_RSTP;
+ RECORDING = true;
+}
- void dynamic_macro_record_start_user(int8_t direction) {
- REC = DM_RSTP;
- RECORDING = true;
- }
- void dynamic_macro_record_end_user(int8_t direction) {
- RECORDING = false;
- }
+void dynamic_macro_record_end_user(int8_t direction) {
+ RECORDING = false;
+}
#else
- #define MCR_PLY KC_NO
- #define MCR_REC KC_NO
- #define MCR_SWT KC_NO
-#endif
+#define MCR_PLY KC_NO
+#define MCR_REC KC_NO
+#define MCR_SWT KC_NO
+#endif // DYNAMIC_MACRO_ENABLE
const uint16_t PROGMEM keymaps[_END][MATRIX_ROWS][MATRIX_COLS] = {
[_MAIN] = LAYOUT_planck_mit(
@@ -84,73 +79,62 @@ const uint16_t PROGMEM keymaps[_END][MATRIX_ROWS][MATRIX_COLS] = {
#endif // MOUSEKEY_ENABLE
};
-#define LAYER (get_highest_layer(layer_state))
-#define LAYER_SIZE (MATRIX_ROWS * MATRIX_COLS)
-#define CHECK_LED() \
- if ((i >= RGB_MATRIX_LED_COUNT) \
- || ((g_led_config.flags[pos] == LED_FLAG_NONE) || (g_led_config.flags[pos] == LED_FLAG_UNDERGLOW))) \
- continue
-
#ifdef RGB_MATRIX_ENABLE
- #ifdef UNDERGLOW_DISABLE
- void keyboard_pre_init_user(void) {
+#define LAYER (get_highest_layer(layer_state))
+#define LAYER_SIZE (MATRIX_ROWS * MATRIX_COLS)
+#define BRIGHTNESS rgb_matrix_get_val()
- for (int key_id = 0; key_id < RGB_MATRIX_LED_COUNT; key_id++ ) {
- if (g_led_config.flags[key_id] == LED_FLAG_UNDERGLOW) {
- g_led_config.flags[key_id] = LED_FLAG_NONE;
- }
+#ifdef UNDERGLOW_DISABLE
+void keyboard_pre_init_user(void) {
+ for (int key_id = 0; key_id < RGB_MATRIX_LED_COUNT; key_id++ ) {
+ if (g_led_config.flags[key_id] == LED_FLAG_UNDERGLOW) {
+ g_led_config.flags[key_id] = LED_FLAG_NONE;
}
}
- #endif
+}
+#endif // UNDERGLOW_DISABLE
- bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
- if (LAYER != _MAIN) {
+bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
+ if (LAYER == _MAIN) {return false;}
- int DimmedMax = UINT8_MAX - (UINT8_MAX - rgb_matrix_config.hsv.v);
+ for (uint8_t i = led_min; i <= led_max; i++) {
+ uint8_t pos = ((uint8_t*)g_led_config.matrix_co)[i];
+ if (!HAS_ANY_FLAGS(g_led_config.flags[pos], (LED_FLAG_MODIFIER | LED_FLAG_KEYLIGHT))) {continue;}
+ uint16_t KC = pgm_read_word(&((uint16_t*)keymaps)[(LAYER_SIZE * LAYER) + i]);
- for (uint8_t i = led_min; i <= led_max; i++) {
+ switch (KC) {
+ case KC_NO:
+ RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, 0, 0 );
+ break;
- uint8_t pos = ((uint8_t*)g_led_config.matrix_co)[i];
+ #ifdef DYNAMIC_MACRO_ENABLE
+ case MCR_SWT:
+ if (!MACRO1) { RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, BRIGHTNESS, BRIGHTNESS); }
+ break;
- CHECK_LED(); // Check LED before moving on
- uint16_t KC = pgm_read_word(&((uint16_t*)keymaps)[(LAYER_SIZE * LAYER) + i]);
-
- if (KC == KC_NO) {
- RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, 0, 0 );
- }
-
- #ifdef DYNAMIC_MACRO_ENABLE
- else if (KC == MCR_SWT) {
- if (!MACRO1) {
- RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, DimmedMax, DimmedMax);
- }
- } else if (KC == MCR_REC) {
- if (RECORDING) {
- RGB_MATRIX_INDICATOR_SET_COLOR(pos, DimmedMax, 0, 0);
- }
- }
- #endif
-
- }
+ case MCR_REC:
+ if (RECORDING) { RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, 0, 0); }
+ break;
+ #endif // DYNAMIC_MACRO_ENABLE
}
+ }
return false;
- }
+}
#endif
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-
#ifdef DYNAMIC_MACRO_ENABLE
- if (keycode == MCR_REC) keycode = REC;
- if (keycode == MCR_PLY) keycode = PLY;
- if (!process_dynamic_macro(keycode, record)) {
- REC = (MACRO1 ? DM_REC1 : DM_REC2);
- return false;
- }
- #endif
+ if (keycode == MCR_REC) {keycode = REC;}
+ if (keycode == MCR_PLY) {keycode = PLY;}
+ if (!process_dynamic_macro(keycode, record)) {
+ REC = (MACRO1 ? DM_REC1 : DM_REC2);
+ return false;
+ }
+ #endif // DYNAMIC_MACRO_ENABLE
#ifdef MOUSEKEY_ENABLE
- if (keycode == MS_ACL_U || keycode == MS_ACL_D) {
+ if ((keycode == MS_ACL_U) || (keycode == MS_ACL_D)) {
if (record->event.pressed) {
if ( (keycode == MS_ACL_U) && (current_accel < 2) ) { current_accel += 1; }
if ( (keycode == MS_ACL_D) && (current_accel > 0) ) { current_accel -= 1; }
@@ -159,41 +143,24 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
action_t mousekey_action = action_for_keycode(keycode);
process_action(record, mousekey_action);
}
- #endif
+ #endif // MOUSEKEY_ENABLE
switch (keycode) {
#ifdef DYNAMIC_MACRO_ENABLE
- case MCR_SWT:
- if (!RECORDING && record->event.pressed) {
- // if the button is pressed and we're not recording
- MACRO1 = !MACRO1;
- if (MACRO1) {
- REC = DM_REC1;
- PLY = DM_PLY1;
- } else {
- REC = DM_REC2;
- PLY = DM_PLY2;
- }
+ case MCR_SWT:
+ if (!RECORDING && record->event.pressed) {
+ // if the button is pressed and we're not recording
+ MACRO1 = !MACRO1;
+ if (MACRO1) {
+ REC = DM_REC1;
+ PLY = DM_PLY1;
+ } else {
+ REC = DM_REC2;
+ PLY = DM_PLY2;
}
- return false;
- #endif
-
- #if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE) // this only needs to be defined if both are enabled
- case RGB_TOG: // We can intercept this keycode ig? Cool :)
- if (record->event.pressed) {
- if (rgb_matrix_is_enabled()) {
- rgb_matrix_disable/*_noeeprom*/();
- rgblight_enable/*_noeeprom*/();
- } else if (rgblight_is_enabled()) {
- rgb_matrix_disable/*_noeeprom*/();
- rgblight_disable/*_noeeprom*/();
- } else {
- rgb_matrix_enable/*_noeeprom*/();
- rgblight_disable/*_noeeprom*/();
- }
- }
- return false;
- #endif
+ }
+ return false;
+ #endif // DYNAMIC_MACRO_ENABLE
default:
return true; //Process all other keycodes normally
diff --git a/keyboards/lily58/keymaps/gaston/keymap.c b/keyboards/lily58/keymaps/gaston/keymap.c
index b7129b71e00..4f8654b41bd 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,
diff --git a/keyboards/lily58/keymaps/gaston/readme.md b/keyboards/lily58/keymaps/gaston/readme.md
index 8edd92cc3ff..cf8b13786e3 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/lucid/velvet_hotswap/info.json b/keyboards/lucid/velvet_hotswap/info.json
index e3302cef1cd..2cbecb782d8 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 93c617b1a17..23e76c78544 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 bd0122a4a8e..b7257c8274b 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 00000000000..7ee3ce0403d
--- /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 e1469cb813c..1cc8e43cdbc 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,7 @@
{"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},
@@ -116,7 +119,604 @@
{"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},
+ {"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},
+ {"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},
diff --git a/keyboards/lucid/velvet_solder/keymaps/default/keymap.c b/keyboards/lucid/velvet_solder/keymaps/default/keymap.c
index dbe2f58a81a..57fa9bf2bc0 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 b6d8377e4c4..2c7cd72db8b 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 00000000000..3269c061aa9
--- /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 d236546c3bf..bb9aceb95f9 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/maple_computing/c39/keymaps/drashna/keymap.c b/keyboards/maple_computing/c39/keymaps/drashna/keymap.c
deleted file mode 100755
index 0c923983eb0..00000000000
--- a/keyboards/maple_computing/c39/keymaps/drashna/keymap.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#include "drashna.h"
-
-/*
- * The `LAYOUT_base` macro is a template to allow the use of identical
- * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
- * that there is no need to set them up for each layout, and modify all of
- * them if I want to change them. This helps to keep consistency and ease
- * of use. K## is a placeholder to pass through the individual keycodes
- */
-// clang-format off
-#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
-#define LAYOUT_base( \
- K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
- K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
- K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
- ) \
- LAYOUT_wrapper( \
- KC_ESC, K01, K02, K03, K04, K05, KC_NO, K06, K07, K08, K09, K0A, KC_DEL, \
- ALT_T(KC_TAB), K11, K12, K13, K14, K15, KC_BSPC, K16, K17, K18, K19, K1A, RALT_T(K1B), \
- KC_MLSF, CTL_T(K21), K22, K23, K24, LT(_LOWER,K25), KC_SPC, LT(_RAISE,K26), K27, K28, K29, RCTL_T(K2A), KC_ENT \
- )
-#define LAYOUT_base_wrapper(...) LAYOUT_base(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_DEFAULT_LAYER_1] = LAYOUT_base_wrapper(
- _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
- _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
- _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
- ),
-
- [_DEFAULT_LAYER_2] = LAYOUT_base_wrapper(
- ______________COLEMAK_MOD_DH_L1____________, ______________COLEMAK_MOD_DH_R1____________,
- ______________COLEMAK_MOD_DH_L2____________, ______________COLEMAK_MOD_DH_R2____________,
- ______________COLEMAK_MOD_DH_L3____________, ______________COLEMAK_MOD_DH_R3____________
- ),
- [_DEFAULT_LAYER_3] = LAYOUT_base_wrapper(
- _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
- _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
- _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
- ),
-
- [_DEFAULT_LAYER_4] = LAYOUT_base_wrapper(
- _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
- _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
- _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
- ),
-
- [_LOWER] = LAYOUT_wrapper(
- KC_TILD, _________________LOWER_L1__________________, _______, _________________LOWER_R1__________________, KC_BSPC,
- KC_DEL, _________________LOWER_L2__________________, _______, _________________LOWER_R2__________________, KC_PIPE,
- _______, _________________LOWER_L3__________________, _______, _________________LOWER_R3__________________, _______
- ),
-
- [_RAISE] = LAYOUT_wrapper(
- KC_GRV, _________________RAISE_L1__________________, _______, _________________RAISE_R1__________________, KC_BSPC,
- KC_DEL, _________________RAISE_L2__________________, _______, _________________RAISE_R2__________________, KC_BSLS,
- _______, _________________RAISE_L3__________________, _______, _________________RAISE_R3__________________, _______
- ),
-
- [_ADJUST] = LAYOUT_wrapper(
- QK_MAKE, _________________ADJUST_L1_________________, KC_NUKE, _________________ADJUST_R1_________________, QK_BOOT,
- VRSN, _________________ADJUST_L2_________________, MG_NKRO, _________________ADJUST_R2_________________, EE_CLR,
- TG_MODS, _________________ADJUST_L3_________________, KC_RGB_T,_________________ADJUST_R3_________________, RGB_IDL
- )
-};
-// clang-format on
diff --git a/keyboards/maple_computing/c39/keymaps/drashna/readme.md b/keyboards/maple_computing/c39/keymaps/drashna/readme.md
deleted file mode 100755
index a8efbaa5fe5..00000000000
--- a/keyboards/maple_computing/c39/keymaps/drashna/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# @drashna's keymap for the C39
-
-HERE BE DRAGONS
diff --git a/keyboards/maple_computing/c39/keymaps/drashna/rules.mk b/keyboards/maple_computing/c39/keymaps/drashna/rules.mk
deleted file mode 100644
index a6575bbd93b..00000000000
--- a/keyboards/maple_computing/c39/keymaps/drashna/rules.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-# MCU name
-MCU = STM32F303
-BOARD = QMK_PROTON_C
-
-# Bootloader selection
-BOOTLOADER = stm32-dfu
-
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes
-EXTRAKEY_ENABLE = yes
-CONSOLE_ENABLE = yes
-COMMAND_ENABLE = yes
-NKRO_ENABLE = yes
-AUDIO_ENABLE = yes
-UNICODE_ENABLE = yes
-HAPTIC_ENABLE = yes
-HAPTIC_DRIVER = SOLENOID
-
-RGBLIGHT_STARTUP_ANIMATION = yes
diff --git a/keyboards/mechlovin/zed60/config.h b/keyboards/mechlovin/zed60/config.h
index ebee58857b6..01e1b51b1cc 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/info.json b/keyboards/mechlovin/zed65/info.json
index cf993be2471..c255dd23c6e 100644
--- a/keyboards/mechlovin/zed65/info.json
+++ b/keyboards/mechlovin/zed65/info.json
@@ -1,4 +1,11 @@
{
"processor": "STM32F103",
- "bootloader": "stm32duino"
+ "bootloader": "stm32duino",
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true
+ },
}
diff --git a/keyboards/mechlovin/zed65/rev1/config.h b/keyboards/mechlovin/zed65/rev1/config.h
new file mode 100644
index 00000000000..24efedfffba
--- /dev/null
+++ b/keyboards/mechlovin/zed65/rev1/config.h
@@ -0,0 +1,24 @@
+/*
+Copyright 2022 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
+
+#ifdef RGBLIGHT_ENABLE
+#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
+#define WS2812_SPI_USE_CIRCULAR_BUFFER
+#endif
diff --git a/keyboards/mechlovin/zed65/rev1/halconf.h b/keyboards/mechlovin/zed65/rev1/halconf.h
new file mode 100644
index 00000000000..ccf74472856
--- /dev/null
+++ b/keyboards/mechlovin/zed65/rev1/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2022 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/rev1/info.json b/keyboards/mechlovin/zed65/rev1/info.json
new file mode 100644
index 00000000000..55b3566b8b7
--- /dev/null
+++ b/keyboards/mechlovin/zed65/rev1/info.json
@@ -0,0 +1,357 @@
+{
+ "manufacturer": "Mechlovin Studio",
+ "url": "https://mechlovin.studio/",
+ "maintainer": "mechlovin",
+ "keyboard_name": "Zed65 Rev1",
+ "usb": {
+ "vid": "0x4D4C",
+ "pid": "0x6505",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "rows": ["B12", "B13", "B14", "B15", "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": 24,
+ "sleep": true,
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "pin": "A7",
+ "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": [
+ {"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": [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": [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, 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": {
+ "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, "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": 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": [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": 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/rev1/keymaps/default/keymap.c b/keyboards/mechlovin/zed65/rev1/keymaps/default/keymap.c
new file mode 100644
index 00000000000..7a922d6b850
--- /dev/null
+++ b/keyboards/mechlovin/zed65/rev1/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_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_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/rev1/keymaps/via/keymap.c b/keyboards/mechlovin/zed65/rev1/keymaps/via/keymap.c
new file mode 100644
index 00000000000..333f14ec70e
--- /dev/null
+++ b/keyboards/mechlovin/zed65/rev1/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_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_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/rev1/keymaps/via/rules.mk b/keyboards/mechlovin/zed65/rev1/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/mechlovin/zed65/rev1/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/mechlovin/zed65/rev1/matrix_diagram.md b/keyboards/mechlovin/zed65/rev1/matrix_diagram.md
new file mode 100644
index 00000000000..6af22df46c7
--- /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/mechlovin/zed65/rev1/mcuconf.h b/keyboards/mechlovin/zed65/rev1/mcuconf.h
new file mode 100644
index 00000000000..0a9c3ca2c5a
--- /dev/null
+++ b/keyboards/mechlovin/zed65/rev1/mcuconf.h
@@ -0,0 +1,23 @@
+/* Copyright 2022 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/rev1/readme.md b/keyboards/mechlovin/zed65/rev1/readme.md
new file mode 100644
index 00000000000..ca4d2b796e7
--- /dev/null
+++ b/keyboards/mechlovin/zed65/rev1/readme.md
@@ -0,0 +1,28 @@
+# zed65
+
+
+
+A 65% PCB with centered USB and JST-SH support, using APM32F103.
+
+* Keyboard Maintainer: [Mechlovin](https://github.com/mechlovin)
+* Hardware Supported: Ori, No2//65, Iron165...
+* Hardware Availability: [Mechlovin' Studio](https://mechlovin.studio/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechlovin/zed65/rev1
+
+Flashing example for this keyboard:
+
+ make mechlovin/zed65/rev1: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/rev1/rules.mk b/keyboards/mechlovin/zed65/rev1/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/mechlovin/zed65/rev1/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/mechlovin/zed65/rules.mk b/keyboards/mechlovin/zed65/rules.mk
index 8e2643d31fc..a699765498b 100644
--- a/keyboards/mechlovin/zed65/rules.mk
+++ b/keyboards/mechlovin/zed65/rules.mk
@@ -1,13 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
DEFAULT_FOLDER = mechlovin/zed65/no_backlight/wearhaus66
diff --git a/keyboards/mode/m75h/config.h b/keyboards/mode/m75h/config.h
index 640cc43a5ac..c6d7d037ec8 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 6c53f594c76..d4831df0d73 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 1ebbb8f29fa..f57aac383ef 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 ee752a964b3..5302cbfc192 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 b8307f43960..c17bf51b35c 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/mokey/mokey12x2/info.json b/keyboards/mokey/mokey12x2/info.json
new file mode 100644
index 00000000000..6f22429e72c
--- /dev/null
+++ b/keyboards/mokey/mokey12x2/info.json
@@ -0,0 +1,47 @@
+{
+ "keyboard_name": "Mokey12x2",
+ "manufacturer": "Mokey",
+ "url": "",
+ "maintainer": "Mokey",
+ "development_board": "bluepill",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["A6", "A5", "A4", "A3", "B9"],
+ "rows": ["A2", "A1", "A0", "A7"]
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "vid": "0x6653",
+ "pid": "0x012A"
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0,0], "x":0.25, "y":2.75},
+ {"matrix": [0,1], "x":1.25, "y":2.75},
+ {"matrix": [0,2], "x":2.25, "y":2.75},
+ {"matrix": [0,3], "x":3.25, "y":2.75},
+ {"matrix": [0,4], "x":0.25, "y":0, "w":1.5, "h":1.5},
+ {"matrix": [1,0], "x":0.25, "y":3.75},
+ {"matrix": [1,1], "x":1.25, "y":3.75},
+ {"matrix": [1,2], "x":2.25, "y":3.75},
+ {"matrix": [1,3], "x":3.25, "y":3.75},
+ {"matrix": [1,4], "x":2.75, "y":0, "w":1.5, "h":1.5},
+ {"matrix": [2,0], "x":0.25, "y":4.75},
+ {"matrix": [2,1], "x":1.25, "y":4.75},
+ {"matrix": [2,2], "x":2.25, "y":4.75},
+ {"matrix": [2,3], "x":3.25, "y":4.75},
+ {"matrix": [3,0], "x":0, "y":1.5},
+ {"matrix": [3,1], "x":1, "y":1.5},
+ {"matrix": [3,2], "x":2.5, "y":1.5},
+ {"matrix": [3,3], "x":3.5, "y":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mokey/mokey12x2/keymaps/default/keymap.c b/keyboards/mokey/mokey12x2/keymaps/default/keymap.c
new file mode 100644
index 00000000000..74fbf1e9479
--- /dev/null
+++ b/keyboards/mokey/mokey12x2/keymaps/default/keymap.c
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2023 Mokey12×2
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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_A, KC_B, KC_C, KC_D, KC_1,
+ KC_E, KC_F, KC_G, KC_H, KC_2,
+ KC_I, KC_J, KC_K, KC_L,
+ KC_I, KC_J, KC_K, KC_L)
+};
diff --git a/keyboards/mokey/mokey12x2/keymaps/via/keymap.c b/keyboards/mokey/mokey12x2/keymaps/via/keymap.c
new file mode 100644
index 00000000000..74fbf1e9479
--- /dev/null
+++ b/keyboards/mokey/mokey12x2/keymaps/via/keymap.c
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2023 Mokey12×2
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public 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_A, KC_B, KC_C, KC_D, KC_1,
+ KC_E, KC_F, KC_G, KC_H, KC_2,
+ KC_I, KC_J, KC_K, KC_L,
+ KC_I, KC_J, KC_K, KC_L)
+};
diff --git a/keyboards/mokey/mokey12x2/keymaps/via/rules.mk b/keyboards/mokey/mokey12x2/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/mokey/mokey12x2/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/mokey/mokey12x2/readme.md b/keyboards/mokey/mokey12x2/readme.md
new file mode 100644
index 00000000000..75a87062c98
--- /dev/null
+++ b/keyboards/mokey/mokey12x2/readme.md
@@ -0,0 +1,23 @@
+# mokey12x2
+
+A Blue Pill STM32F103C8T6-based keyboard.
+
+* Keyboard Maintainer: [rhmokey](https://github.com/rhmokey)
+* Hardware Supported: [rhmokey](https://github.com/rhmokey)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mokey/mokey12x2:default
+
+Flashing example for this keyboard:
+
+ make mokey/mokey12x2: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:
+
+* **Physical reset button**: Briefly press the button: [boot] first, then press button: [reset] 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/mokey/mokey12x2/rules.mk b/keyboards/mokey/mokey12x2/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/mokey/mokey12x2/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/monoflex60/info.json b/keyboards/monoflex60/info.json
index f7ed4b0938d..39c2546bba9 100644
--- a/keyboards/monoflex60/info.json
+++ b/keyboards/monoflex60/info.json
@@ -191,21 +191,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": [1, 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": [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},
diff --git a/keyboards/monsgeek/m5/config.h b/keyboards/monsgeek/m5/config.h
new file mode 100644
index 00000000000..6d43bd4f267
--- /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 00000000000..2f64e65393a
--- /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 00000000000..03711c9a1b6
--- /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 00000000000..28c433736cc
--- /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 00000000000..12c20087058
--- /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 00000000000..036bd6d1c3e
--- /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 00000000000..7dbc3111bf0
--- /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 00000000000..0d16f4f04e4
--- /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 00000000000..6574b3d6631
--- /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 00000000000..24d5f6f52ec
--- /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/moonlander/keymaps/drashna/keymap.c b/keyboards/moonlander/keymaps/drashna/keymap.c
index 2f38ac790c3..491283c37a0 100644
--- a/keyboards/moonlander/keymaps/drashna/keymap.c
+++ b/keyboards/moonlander/keymaps/drashna/keymap.c
@@ -156,7 +156,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
case KC_SWAP_NUM:
if (record->event.pressed) {
userspace_config.swapped_numbers ^= 1;
- eeconfig_update_user(userspace_config.raw);
+ eeconfig_update_user_config(&userspace_config.raw);
unregister_code(KC_1);
unregister_code(KC_2);
}
diff --git a/keyboards/moonlander/keymaps/drashna/rules.mk b/keyboards/moonlander/keymaps/drashna/rules.mk
index 927d956e9df..45113afc712 100644
--- a/keyboards/moonlander/keymaps/drashna/rules.mk
+++ b/keyboards/moonlander/keymaps/drashna/rules.mk
@@ -4,3 +4,5 @@ UNICODE_ENABLE = yes
UNICODEMAP_ENABLE = no
AUTOCORRECT_ENABLE = yes
CAPS_WORD_ENABLE = yes
+
+BOOTLOADER = tinyuf2
diff --git a/keyboards/nacly/bigsmoothknob/config.h b/keyboards/nacly/bigsmoothknob/config.h
new file mode 100644
index 00000000000..a6e9a6c480f
--- /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 00000000000..85f1431b29d
--- /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 00000000000..dab8a50c458
--- /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 00000000000..ee325681483
--- /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 00000000000..dab8a50c458
--- /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 00000000000..1189f4ad192
--- /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 00000000000..0a928205c72
--- /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 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/nacly/bigsmoothknob/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 6444b82d37d..4fdbf80f5c0 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 b5697a731d9..358ea8b18ba 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 9e877b98048..0d29c5da822 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/peej/tripel/left/info.json b/keyboards/peej/tripel/left/info.json
index b938ef9b9a3..e9833e2464b 100644
--- a/keyboards/peej/tripel/left/info.json
+++ b/keyboards/peej/tripel/left/info.json
@@ -70,7 +70,7 @@
{"matrix": [5, 7], "x": 1, "y": 4},
{"matrix": [4, 6], "x": 2, "y": 4},
{"matrix": [4, 7], "x": 3, "y": 4},
- {"matrix": [7, 6], "x": 7, "y": 4, "w": 7},
+ {"matrix": [7, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [2, 7], "x": 11, "y": 4},
{"matrix": [1, 6], "x": 12, "y": 4},
{"matrix": [1, 7], "x": 13, "y": 4},
diff --git a/keyboards/peej/tripel/middle/info.json b/keyboards/peej/tripel/middle/info.json
index b1bdf10f82e..98d854e4893 100644
--- a/keyboards/peej/tripel/middle/info.json
+++ b/keyboards/peej/tripel/middle/info.json
@@ -70,7 +70,7 @@
{"matrix": [2, 7], "x": 1, "y": 4},
{"matrix": [1, 6], "x": 2, "y": 4},
{"matrix": [1, 7], "x": 3, "y": 4},
- {"matrix": [4, 6], "x": 7, "y": 4, "w": 7},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [8, 7], "x": 11, "y": 4},
{"matrix": [7, 6], "x": 12, "y": 4},
{"matrix": [7, 7], "x": 13, "y": 4},
diff --git a/keyboards/peej/tripel/right/info.json b/keyboards/peej/tripel/right/info.json
index 9916d317f2f..c9f31f46797 100644
--- a/keyboards/peej/tripel/right/info.json
+++ b/keyboards/peej/tripel/right/info.json
@@ -70,7 +70,7 @@
{"matrix": [8, 7], "x": 1, "y": 4},
{"matrix": [7, 6], "x": 2, "y": 4},
{"matrix": [7, 7], "x": 3, "y": 4},
- {"matrix": [1, 6], "x": 7, "y": 4, "w": 7},
+ {"matrix": [1, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [5, 7], "x": 11, "y": 4},
{"matrix": [4, 6], "x": 12, "y": 4},
{"matrix": [4, 7], "x": 13, "y": 4},
diff --git a/keyboards/planck/keymaps/lindgrenj6/config.h b/keyboards/planck/keymaps/lindgrenj6/config.h
new file mode 100644
index 00000000000..4fcdb0fc7a7
--- /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 00000000000..94353e32483
--- /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 00000000000..7aa6b2130f0
--- /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/readme.md b/keyboards/planck/readme.md
index 748c2514788..797774dc0a1 100644
--- a/keyboards/planck/readme.md
+++ b/keyboards/planck/readme.md
@@ -6,7 +6,7 @@ Planck
A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
-Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, rev5, rev6; Planck Light, Planck EZ
+Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, rev5, rev6, rev7; Planck Light, Planck EZ
Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open), [Ergodox (Planck EZ)](https://ergodox-ez.com/pages/planck)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/planck/rev6_drop/matrix.c b/keyboards/planck/rev6_drop/matrix.c
index 6f7d6725a19..e31e473ae25 100644
--- a/keyboards/planck/rev6_drop/matrix.c
+++ b/keyboards/planck/rev6_drop/matrix.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2018 Jack Humbert
+ * Copyright 2018-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
@@ -17,155 +17,59 @@
#include "quantum.h"
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-/*
- * col: { B11, B10, B2, B1, A7, B0 }
- * row: { A10, A9, A8, B15, C13, C14, C15, A2 }
- */
/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_COLS];
-static bool debouncing = false;
-static uint16_t debouncing_time = 0;
+static pin_t matrix_row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static pin_t matrix_col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-__attribute__((weak)) void matrix_init_user(void) {}
+static matrix_row_t matrix_inverted[MATRIX_COLS];
-__attribute__((weak)) void matrix_scan_user(void) {}
+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]);
+ }
-__attribute__((weak)) void matrix_init_kb(void) {
- matrix_init_user();
+ // rows
+ for (int i = 0; i < MATRIX_ROWS; i++) {
+ setPinInputLow(matrix_row_pins[i]);
+ }
}
-__attribute__((weak)) void matrix_scan_kb(void) {
- matrix_scan_user();
-}
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool changed = false;
-void matrix_init(void) {
- dprintf("matrix init\n");
- // debug_matrix = true;
-
- // actual matrix setup
- palSetPadMode(GPIOB, 11, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOB, 10, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOB, 1, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOA, 7, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL);
-
- palSetPadMode(GPIOA, 10, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOA, 9, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOA, 8, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOB, 15, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOC, 13, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOC, 14, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOC, 15, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOA, 2, PAL_MODE_INPUT_PULLDOWN);
-
- memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
- memset(matrix_debouncing, 0, MATRIX_COLS * sizeof(matrix_row_t));
-
- matrix_init_kb();
-}
-
-uint8_t matrix_scan(void) {
// actual matrix
for (int col = 0; col < MATRIX_COLS; col++) {
matrix_row_t data = 0;
- // strobe col { B11, B10, B2, B1, A7, B0 }
- switch (col) {
- case 0:
- palSetPad(GPIOB, 11);
- break;
- case 1:
- palSetPad(GPIOB, 10);
- break;
- case 2:
- palSetPad(GPIOB, 2);
- break;
- case 3:
- palSetPad(GPIOB, 1);
- break;
- case 4:
- palSetPad(GPIOA, 7);
- break;
- case 5:
- palSetPad(GPIOB, 0);
- break;
- }
+ // strobe col
+ writePinHigh(matrix_col_pins[col]);
// need wait to settle pin state
wait_us(20);
- // read row data { A10, A9, A8, B15, C13, C14, C15, A2 }
- data = ((palReadPad(GPIOA, 10) << 0) | (palReadPad(GPIOA, 9) << 1) | (palReadPad(GPIOA, 8) << 2) | (palReadPad(GPIOB, 15) << 3) | (palReadPad(GPIOC, 13) << 4) | (palReadPad(GPIOC, 14) << 5) | (palReadPad(GPIOC, 15) << 6) | (palReadPad(GPIOA, 2) << 7));
-
- // unstrobe col { B11, B10, B2, B1, A7, B0 }
- switch (col) {
- case 0:
- palClearPad(GPIOB, 11);
- break;
- case 1:
- palClearPad(GPIOB, 10);
- break;
- case 2:
- palClearPad(GPIOB, 2);
- break;
- case 3:
- palClearPad(GPIOB, 1);
- break;
- case 4:
- palClearPad(GPIOA, 7);
- break;
- case 5:
- palClearPad(GPIOB, 0);
- break;
- }
-
- if (matrix_debouncing[col] != data) {
- matrix_debouncing[col] = data;
- debouncing = true;
- debouncing_time = timer_read();
- }
- }
-
- if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
+ // read row data
for (int row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0;
- for (int col = 0; col < MATRIX_COLS; col++) {
- matrix[row] |= ((matrix_debouncing[col] & (1 << row) ? 1 : 0) << col);
- }
+ data |= (readPin(matrix_row_pins[row]) << row);
+ }
+
+ // unstrobe col
+ writePinLow(matrix_col_pins[col]);
+
+ if (matrix_inverted[col] != data) {
+ matrix_inverted[col] = data;
}
- debouncing = false;
}
- matrix_scan_kb();
-
- return 1;
-}
-
-bool matrix_is_on(uint8_t row, uint8_t col) {
- return (matrix[row] & (1 << col));
-}
-
-matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
- dprintf("\nr/c 01234567\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- dprintf("%X0: ", row);
- matrix_row_t data = matrix_get_row(row);
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ matrix_row_t old = current_matrix[row];
+ current_matrix[row] = 0;
for (int col = 0; col < MATRIX_COLS; col++) {
- if (data & (1 << col))
- dprintf("1");
- else
- dprintf("0");
+ current_matrix[row] |= ((matrix_inverted[col] & (1 << row) ? 1 : 0) << col);
}
- dprintf("\n");
+ changed |= old != current_matrix[row];
}
+
+ return changed;
}
diff --git a/keyboards/planck/rev6_drop/rules.mk b/keyboards/planck/rev6_drop/rules.mk
index e20d33831d0..3eb3eac7ebc 100644
--- a/keyboards/planck/rev6_drop/rules.mk
+++ b/keyboards/planck/rev6_drop/rules.mk
@@ -10,7 +10,7 @@ NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = yes # Audio output
-CUSTOM_MATRIX = yes
+CUSTOM_MATRIX = lite
# Do not enable RGB_MATRIX_ENABLE together with RGBLIGHT_ENABLE
RGB_MATRIX_ENABLE = no
ENCODER_ENABLE = yes
diff --git a/keyboards/planck/rev7/chconf.h b/keyboards/planck/rev7/chconf.h
new file mode 100644
index 00000000000..e1243f23eca
--- /dev/null
+++ b/keyboards/planck/rev7/chconf.h
@@ -0,0 +1,29 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/planck/rev6/chconf.h -r platforms/chibios/QMK_PROTON_C/configs/chconf.h`
+ */
+
+#pragma once
+
+#define CH_CFG_ST_RESOLUTION 16
+
+#define CH_CFG_ST_FREQUENCY 10000
+
+#include_next
+
diff --git a/keyboards/planck/rev7/config.h b/keyboards/planck/rev7/config.h
new file mode 100644
index 00000000000..3da5a4e6b9c
--- /dev/null
+++ b/keyboards/planck/rev7/config.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright 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
+
+#define DIP_SWITCH_PINS \
+ { B14, A15, A0, B9 }
+
+#define MUSIC_MAP
+#undef AUDIO_VOICES
+#undef AUDIO_PIN
+#define AUDIO_PIN A5
+#define AUDIO_PIN_ALT A4
+#define AUDIO_PIN_ALT_AS_NEGATIVE
+
+#define WS2812_PWM_DRIVER PWMD2
+#define WS2812_PWM_CHANNEL 2
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM2
+#define WS2812_DMA_CHANNEL 2
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+/*
+ * 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/planck/rev7/halconf.h b/keyboards/planck/rev7/halconf.h
new file mode 100644
index 00000000000..6da795fada1
--- /dev/null
+++ b/keyboards/planck/rev7/halconf.h
@@ -0,0 +1,24 @@
+/* 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define HAL_USE_PWM TRUE
+#define HAL_USE_GPT TRUE
+#define HAL_USE_DAC TRUE
+#define HAL_USE_I2C TRUE
+#define HAL_USE_WDG TRUE
+
+#include_next
diff --git a/keyboards/planck/rev7/info.json b/keyboards/planck/rev7/info.json
new file mode 100644
index 00000000000..e4d74334236
--- /dev/null
+++ b/keyboards/planck/rev7/info.json
@@ -0,0 +1,322 @@
+{
+ "keyboard_name": "Planck",
+ "manufacturer": "Drop",
+ "url": "https://olkb.com/planck",
+ "maintainer": "jackhumbert",
+ "usb": {
+ "vid": "0x03A8",
+ "pid": "0xA4F9",
+ "device_version": "0.0.7"
+ },
+ "ws2812": {
+ "pin": "A1",
+ "driver": "pwm"
+ },
+ "rgb_matrix": {
+ "driver": "WS2812"
+ },
+ "matrix_pins": {
+ "cols": ["B11", "B10", "B2", "B1", "A7", "B0"],
+ "rows": ["A10", "A9", "A8", "B15", "C13", "C14", "C15", "A2"]
+ },
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B12", "pin_b": "B13"}
+ ]
+ },
+ "features": {
+ "audio": true,
+ "bootmagic": true,
+ "command": true,
+ "console": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "rgblight": {
+ "led_count": 9
+ },
+ "processor": "STM32F303",
+ "bootloader": "stm32-dfu",
+ "community_layouts": ["ortho_4x12", "planck_mit"],
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_ortho_4x12",
+ "LAYOUT_planck_grid": "LAYOUT_ortho_4x12",
+ "LAYOUT_planck_mit": "LAYOUT_planck_1x2uC"
+ },
+ "layouts": {
+ "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": [4, 0], "x": 6, "y": 0 },
+ { "matrix": [4, 1], "x": 7, "y": 0 },
+ { "matrix": [4, 2], "x": 8, "y": 0 },
+ { "matrix": [4, 3], "x": 9, "y": 0 },
+ { "matrix": [4, 4], "x": 10, "y": 0 },
+ { "matrix": [4, 5], "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": [5, 0], "x": 6, "y": 1 },
+ { "matrix": [5, 1], "x": 7, "y": 1 },
+ { "matrix": [5, 2], "x": 8, "y": 1 },
+ { "matrix": [5, 3], "x": 9, "y": 1 },
+ { "matrix": [5, 4], "x": 10, "y": 1 },
+ { "matrix": [5, 5], "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": [6, 0], "x": 6, "y": 2 },
+ { "matrix": [6, 1], "x": 7, "y": 2 },
+ { "matrix": [6, 2], "x": 8, "y": 2 },
+ { "matrix": [6, 3], "x": 9, "y": 2 },
+ { "matrix": [6, 4], "x": 10, "y": 2 },
+ { "matrix": [6, 5], "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": [7, 3], "x": 3, "y": 3 },
+ { "matrix": [7, 4], "x": 4, "y": 3 },
+ { "matrix": [7, 5], "x": 5, "y": 3 },
+ { "matrix": [7, 0], "x": 6, "y": 3 },
+ { "matrix": [7, 1], "x": 7, "y": 3 },
+ { "matrix": [7, 2], "x": 8, "y": 3 },
+ { "matrix": [3, 3], "x": 9, "y": 3 },
+ { "matrix": [3, 4], "x": 10, "y": 3 },
+ { "matrix": [3, 5], "x": 11, "y": 3 }
+ ]
+ },
+ "LAYOUT_planck_1x2uC": {
+ "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": [4, 0], "x": 6, "y": 0 },
+ { "matrix": [4, 1], "x": 7, "y": 0 },
+ { "matrix": [4, 2], "x": 8, "y": 0 },
+ { "matrix": [4, 3], "x": 9, "y": 0 },
+ { "matrix": [4, 4], "x": 10, "y": 0 },
+ { "matrix": [4, 5], "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": [5, 0], "x": 6, "y": 1 },
+ { "matrix": [5, 1], "x": 7, "y": 1 },
+ { "matrix": [5, 2], "x": 8, "y": 1 },
+ { "matrix": [5, 3], "x": 9, "y": 1 },
+ { "matrix": [5, 4], "x": 10, "y": 1 },
+ { "matrix": [5, 5], "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": [6, 0], "x": 6, "y": 2 },
+ { "matrix": [6, 1], "x": 7, "y": 2 },
+ { "matrix": [6, 2], "x": 8, "y": 2 },
+ { "matrix": [6, 3], "x": 9, "y": 2 },
+ { "matrix": [6, 4], "x": 10, "y": 2 },
+ { "matrix": [6, 5], "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": [7, 3], "x": 3, "y": 3 },
+ { "matrix": [7, 4], "x": 4, "y": 3 },
+ { "matrix": [7, 0], "x": 5, "y": 3, "w": 2 },
+ { "matrix": [7, 1], "x": 7, "y": 3 },
+ { "matrix": [7, 2], "x": 8, "y": 3 },
+ { "matrix": [3, 3], "x": 9, "y": 3 },
+ { "matrix": [3, 4], "x": 10, "y": 3 },
+ { "matrix": [3, 5], "x": 11, "y": 3 }
+ ]
+ },
+ "LAYOUT_planck_1x2uL": {
+ "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": [4, 0], "x": 6, "y": 0 },
+ { "matrix": [4, 1], "x": 7, "y": 0 },
+ { "matrix": [4, 2], "x": 8, "y": 0 },
+ { "matrix": [4, 3], "x": 9, "y": 0 },
+ { "matrix": [4, 4], "x": 10, "y": 0 },
+ { "matrix": [4, 5], "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": [5, 0], "x": 6, "y": 1 },
+ { "matrix": [5, 1], "x": 7, "y": 1 },
+ { "matrix": [5, 2], "x": 8, "y": 1 },
+ { "matrix": [5, 3], "x": 9, "y": 1 },
+ { "matrix": [5, 4], "x": 10, "y": 1 },
+ { "matrix": [5, 5], "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": [6, 0], "x": 6, "y": 2 },
+ { "matrix": [6, 1], "x": 7, "y": 2 },
+ { "matrix": [6, 2], "x": 8, "y": 2 },
+ { "matrix": [6, 3], "x": 9, "y": 2 },
+ { "matrix": [6, 4], "x": 10, "y": 2 },
+ { "matrix": [6, 5], "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": [7, 3], "x": 3, "y": 3 },
+ { "matrix": [7, 5], "x": 4, "y": 3, "w": 2 },
+ { "matrix": [7, 0], "x": 6, "y": 3 },
+ { "matrix": [7, 1], "x": 7, "y": 3 },
+ { "matrix": [7, 2], "x": 8, "y": 3 },
+ { "matrix": [3, 3], "x": 9, "y": 3 },
+ { "matrix": [3, 4], "x": 10, "y": 3 },
+ { "matrix": [3, 5], "x": 11, "y": 3 }
+ ]
+ },
+ "LAYOUT_planck_1x2uR": {
+ "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": [4, 0], "x": 6, "y": 0 },
+ { "matrix": [4, 1], "x": 7, "y": 0 },
+ { "matrix": [4, 2], "x": 8, "y": 0 },
+ { "matrix": [4, 3], "x": 9, "y": 0 },
+ { "matrix": [4, 4], "x": 10, "y": 0 },
+ { "matrix": [4, 5], "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": [5, 0], "x": 6, "y": 1 },
+ { "matrix": [5, 1], "x": 7, "y": 1 },
+ { "matrix": [5, 2], "x": 8, "y": 1 },
+ { "matrix": [5, 3], "x": 9, "y": 1 },
+ { "matrix": [5, 4], "x": 10, "y": 1 },
+ { "matrix": [5, 5], "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": [6, 0], "x": 6, "y": 2 },
+ { "matrix": [6, 1], "x": 7, "y": 2 },
+ { "matrix": [6, 2], "x": 8, "y": 2 },
+ { "matrix": [6, 3], "x": 9, "y": 2 },
+ { "matrix": [6, 4], "x": 10, "y": 2 },
+ { "matrix": [6, 5], "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": [7, 3], "x": 3, "y": 3 },
+ { "matrix": [7, 4], "x": 4, "y": 3 },
+ { "matrix": [7, 5], "x": 5, "y": 3 },
+ { "matrix": [7, 1], "x": 6, "y": 3, "w": 2 },
+ { "matrix": [7, 2], "x": 8, "y": 3 },
+ { "matrix": [3, 3], "x": 9, "y": 3 },
+ { "matrix": [3, 4], "x": 10, "y": 3 },
+ { "matrix": [3, 5], "x": 11, "y": 3 }
+ ]
+ },
+ "LAYOUT_planck_2x2u": {
+ "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": [4, 0], "x": 6, "y": 0 },
+ { "matrix": [4, 1], "x": 7, "y": 0 },
+ { "matrix": [4, 2], "x": 8, "y": 0 },
+ { "matrix": [4, 3], "x": 9, "y": 0 },
+ { "matrix": [4, 4], "x": 10, "y": 0 },
+ { "matrix": [4, 5], "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": [5, 0], "x": 6, "y": 1 },
+ { "matrix": [5, 1], "x": 7, "y": 1 },
+ { "matrix": [5, 2], "x": 8, "y": 1 },
+ { "matrix": [5, 3], "x": 9, "y": 1 },
+ { "matrix": [5, 4], "x": 10, "y": 1 },
+ { "matrix": [5, 5], "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": [6, 0], "x": 6, "y": 2 },
+ { "matrix": [6, 1], "x": 7, "y": 2 },
+ { "matrix": [6, 2], "x": 8, "y": 2 },
+ { "matrix": [6, 3], "x": 9, "y": 2 },
+ { "matrix": [6, 4], "x": 10, "y": 2 },
+ { "matrix": [6, 5], "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": [7, 3], "x": 3, "y": 3 },
+ { "matrix": [7, 5], "x": 4, "y": 3, "w": 2 },
+ { "matrix": [7, 1], "x": 6, "y": 3, "w": 2 },
+ { "matrix": [7, 2], "x": 8, "y": 3 },
+ { "matrix": [3, 3], "x": 9, "y": 3 },
+ { "matrix": [3, 4], "x": 10, "y": 3 },
+ { "matrix": [3, 5], "x": 11, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/planck/rev7/keymaps/default/config.h b/keyboards/planck/rev7/keymaps/default/config.h
new file mode 100644
index 00000000000..fbbab996e1e
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/default/config.h
@@ -0,0 +1,43 @@
+/* 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
diff --git a/keyboards/planck/rev7/keymaps/default/keymap.c b/keyboards/planck/rev7/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4ac4c0de4f8
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/default/keymap.c
@@ -0,0 +1,306 @@
+/* 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum planck_layers { _QWERTY, _COLEMAK, _DVORAK, _LOWER, _RAISE, _PLOVER, _ADJUST };
+
+enum planck_keycodes { QWERTY = SAFE_RANGE, COLEMAK, DVORAK, PLOVER, BACKLIT, EXT_PLV };
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+/* clang-format off */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| 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,
+ 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 ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_RSFT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| 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_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_RSFT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_planck_grid(
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_RSFT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_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_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
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_PLOVER] = LAYOUT_planck_grid(
+ KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * v------------------------RGB CONTROL--------------------v
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, EE_CLR, MU_NEXT, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
+ _______, AU_PREV, AU_NEXT, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+/* clang-format on */
+
+#ifdef AUDIO_ENABLE
+float plover_song[][2] = SONG(PLOVER_SOUND);
+float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+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 DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(plover_song);
+#endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+#endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+/* clang-format off */
+float melody[8][2][2] = {
+ {{440.0f, 8}, {440.0f, 24}},
+ {{440.0f, 8}, {440.0f, 24}},
+ {{440.0f, 8}, {440.0f, 24}},
+ {{440.0f, 8}, {440.0f, 24}},
+ {{440.0f, 8}, {440.0f, 24}},
+ {{440.0f, 8}, {440.0f, 24}},
+ {{440.0f, 8}, {440.0f, 24}},
+ {{440.0f, 8}, {440.0f, 24}},
+};
+/* clang-format on */
+
+#define JUST_MINOR_THIRD 1.2
+#define JUST_MAJOR_THIRD 1.25
+#define JUST_PERFECT_FOURTH 1.33333333
+#define JUST_TRITONE 1.42222222
+#define JUST_PERFECT_FIFTH 1.33333333
+
+#define ET12_MINOR_SECOND 1.059463
+#define ET12_MAJOR_SECOND 1.122462
+#define ET12_MINOR_THIRD 1.189207
+#define ET12_MAJOR_THIRD 1.259921
+#define ET12_PERFECT_FOURTH 1.33484
+#define ET12_TRITONE 1.414214
+#define ET12_PERFECT_FIFTH 1.498307
+
+deferred_token tokens[8];
+
+uint32_t reset_note(uint32_t trigger_time, void *note) {
+ *(float*)note = 440.0f;
+ return 0;
+}
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ cancel_deferred_exec(tokens[index]);
+ if (clockwise) {
+ melody[index][1][0] = melody[index][1][0] * ET12_MINOR_SECOND;
+ melody[index][0][0] = melody[index][1][0] / ET12_PERFECT_FIFTH;
+ audio_play_melody(&melody[index], 2, false);
+ } else {
+ melody[index][1][0] = melody[index][1][0] / ET12_MINOR_SECOND;
+ melody[index][0][0] = melody[index][1][0] * ET12_TRITONE;
+ audio_play_melody(&melody[index], 2, false);
+ }
+ tokens[index] = defer_exec(1000, reset_note, &melody[index][1][0]);
+ return false;
+}
+
+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;
+ }
+ }
+ return true;
+}
\ No newline at end of file
diff --git a/keyboards/planck/rev7/keymaps/default/rules.mk b/keyboards/planck/rev7/keymaps/default/rules.mk
new file mode 100644
index 00000000000..13fc199bb6c
--- /dev/null
+++ b/keyboards/planck/rev7/keymaps/default/rules.mk
@@ -0,0 +1 @@
+DEFERRED_EXEC_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/planck/rev7/matrix.c b/keyboards/planck/rev7/matrix.c
new file mode 100644
index 00000000000..df1e627e831
--- /dev/null
+++ b/keyboards/planck/rev7/matrix.c
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2018-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 .
+ */
+
+#include "gpio.h"
+#include "hal_pal.h"
+#include "hal_pal_lld.h"
+#include "quantum.h"
+
+// STM32-specific watchdog config calculations
+// timeout = 31.25us * PR * (RL + 1)
+#define _STM32_IWDG_LSI(us) ((us) / 31.25)
+#define STM32_IWDG_PR_US(us) (uint8_t)(log(_STM32_IWDG_LSI(us)) / log(2) - 11)
+#define STM32_IWDG_PR_MS(s) STM32_IWDG_PR_US(s * 1000.0)
+#define STM32_IWDG_PR_S(s) STM32_IWDG_PR_US(s * 1000000.0)
+#define _STM32_IWDG_SCALAR(us) (2 << ((uint8_t)STM32_IWDG_PR_US(us) + 1))
+#define STM32_IWDG_RL_US(us) (uint64_t)(_STM32_IWDG_LSI(us)) / _STM32_IWDG_SCALAR(us)
+#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
+ for (int i = 0; i < MATRIX_ROWS; i++) {
+ setPinInputLow(matrix_row_pins[i]);
+ }
+
+ // encoder A & B setup
+ setPinInputLow(B12);
+ setPinInputLow(B13);
+
+#ifndef PLANCK_WATCHDOG_DISABLE
+ wdgInit();
+
+ static WDGConfig wdgcfg;
+ 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] >= PLANCK_ENCODER_RESOLUTION) {
+ encoder_value[index]++;
+ changed = true;
+ encoder_update_kb(index, false);
+ }
+ if (encoder_pulses[i] <= -PLANCK_ENCODER_RESOLUTION) {
+ encoder_value[index]--;
+ changed = true;
+ encoder_update_kb(index, true);
+ }
+ 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;
+
+ // actual matrix
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ matrix_row_t data = 0;
+
+ // strobe col
+ writePinHigh(matrix_col_pins[col]);
+
+ // need wait to settle pin state
+ wait_us(20);
+
+ // read row data
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ data |= (readPin(matrix_row_pins[row]) << row);
+ }
+
+ // unstrobe col
+ writePinLow(matrix_col_pins[col]);
+
+ if (matrix_inverted[col] != data) {
+ matrix_inverted[col] = data;
+ }
+ }
+
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ matrix_row_t old = current_matrix[row];
+ current_matrix[row] = 0;
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ current_matrix[row] |= ((matrix_inverted[col] & (1 << row) ? 1 : 0) << col);
+ }
+ changed |= old != current_matrix[row];
+ }
+
+#ifdef ENCODER_ENABLE
+ // encoder-matrix functionality
+
+ // set up C/rows for encoder read
+ for (int i = 0; i < MATRIX_ROWS; i++) {
+ setPinOutput(matrix_row_pins[i]);
+ writePinHigh(matrix_row_pins[i]);
+ }
+
+ // set up A & B for reading
+ setPinInputHigh(B12);
+ setPinInputHigh(B13);
+
+ for (int i = 0; i < MATRIX_ROWS; i++) {
+ writePinLow(matrix_row_pins[i]);
+ wait_us(10);
+ uint8_t new_status = (palReadPad(GPIOB, 12) << 0) | (palReadPad(GPIOB, 13) << 1);
+ if ((encoder_state[i] & 0x3) != new_status) {
+ encoder_state[i] <<= 2;
+ encoder_state[i] |= new_status;
+ encoder_update(i, encoder_state[i]);
+ }
+ writePinHigh(matrix_row_pins[i]);
+ }
+
+ // revert A & B to matrix state
+ setPinInputLow(B12);
+ setPinInputLow(B13);
+
+ // revert C/rows to matrix state
+ for (int i = 0; i < MATRIX_ROWS; i++) {
+ setPinInputLow(matrix_row_pins[i]);
+ }
+#endif
+
+ return changed;
+}
diff --git a/keyboards/planck/rev7/mcuconf.h b/keyboards/planck/rev7/mcuconf.h
new file mode 100644
index 00000000000..fa3d3be885d
--- /dev/null
+++ b/keyboards/planck/rev7/mcuconf.h
@@ -0,0 +1,51 @@
+/* Copyright 2020 QMK Contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+// The SysTick timer from the normal quantum/stm32 uses TIM2 -- the WS2812 pin used
+// on the Planck requires the use of TIM2 to run PWM -- rework which timers are
+// allocated for PWM usage.
+#undef STM32_PWM_USE_TIM2
+#define STM32_PWM_USE_TIM2 TRUE
+
+#undef STM32_DAC_USE_DAC1_CH1
+#define STM32_DAC_USE_DAC1_CH1 TRUE
+#undef STM32_DAC_USE_DAC1_CH2
+#define STM32_DAC_USE_DAC1_CH2 TRUE
+#undef STM32_GPT_USE_TIM6
+#define STM32_GPT_USE_TIM6 TRUE
+#undef STM32_GPT_USE_TIM7
+#define STM32_GPT_USE_TIM7 TRUE
+#undef STM32_GPT_USE_TIM8
+#define STM32_GPT_USE_TIM8 TRUE
+
+// As mentioned above, we need to reallocate the SysTick timer used from
+// TIM2 to TIM3.
+#undef STM32_ST_USE_TIMER
+#define STM32_ST_USE_TIMER 3
+
+// enable i2c
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
+
+// use the watchdog timer
+#undef STM32_WDG_USE_IWDG
+#define STM32_WDG_USE_IWDG TRUE
+#undef STM32_IWDG_IS_WINDOWED
+#define STM32_IWDG_IS_WINDOWED TRUE
diff --git a/keyboards/planck/rev7/readme.md b/keyboards/planck/rev7/readme.md
new file mode 100644
index 00000000000..6a4df377046
--- /dev/null
+++ b/keyboards/planck/rev7/readme.md
@@ -0,0 +1,42 @@
+# Planck
+
+A compact 40% (12x4) ortholinear keyboard kit designed by OLKB and sold by Drop. A complete hardware rework of the rev6 Planck PCB, with support for up to 8 rotary encoders. [More info on qmk.fm](http://qmk.fm/planck/)
+
+* Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
+* Hardware Supported: Planck PCB rev7
+* Hardware Availability: [Drop](https://drop.com/buy/planck-mechanical-keyboard?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make planck/rev7: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).
+
+## 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(uint8_t index, bool clockwise)` function:
+
+```
+,-----------------------------------------------------------------------------------.
+| 0 | | | | | | | | | | | 4 |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| 1 | | | | | | | | | | | 5 |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| 2 | | | | | | | | | | | 6 |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| 3 | | | | | | | | | | 7 |
+`-----------------------------------------------------------------------------------'
+```
+
+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/planck/rev7/rev7.c b/keyboards/planck/rev7/rev7.c
new file mode 100644
index 00000000000..bb9d0ee1e8c
--- /dev/null
+++ b/keyboards/planck/rev7/rev7.c
@@ -0,0 +1,74 @@
+/* Copyright 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 .
+ */
+#include "quantum.h"
+
+#ifdef RGB_MATRIX_ENABLE
+// clang-format off
+led_config_t g_led_config = { {
+ // Key Matrix to LED Index
+ { NO_LED, 6, NO_LED, NO_LED, 5, NO_LED },
+ { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
+ { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 0 },
+ { NO_LED, 7, NO_LED, NO_LED, 2, NO_LED },
+ { NO_LED, 4, NO_LED, NO_LED, 3, NO_LED },
+ { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
+ { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
+ { NO_LED, 1, NO_LED, NO_LED, 8, NO_LED },
+}, {
+ // LED Index to Physical Position
+ {112, 39}, {148, 60}, {206, 53}, {206, 3}, {150, 3}, {74, 3}, {18, 3}, {18, 54}, {77, 60}
+}, {
+ // LED Index to Flag
+ LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL,
+ LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL
+} };
+
+// LED physical location index
+// 6 5 4 3
+// 0
+// 7 8 1 2
+
+#endif
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
+ {{5, 5}, {4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}},
+ {{5, 6}, {4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6}},
+ {{5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+
+ {{5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+ {{5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+ {{5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+ {{5, 7}, {4, 7}, {3, 7}, {2, 7}, {1, 7}, {0, 7}},
+};
+
+# ifdef ENCODER_MAP_ENABLE
+const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {0};
+# endif
+#endif
+
+const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = {
+ {36, 37, 38, 39, 40, 41},
+ {24, 25, 26, 27, 28, 29},
+ {12, 13, 14, 15, 16, 17},
+ { 0, 1, 2, 9, 10, 11},
+ {42, 43, 44, 45, 46, 47},
+ {30, 31, 32, 33, 34, 35},
+ {18, 19, 20, 21, 22, 23},
+ { 6, 7, 8, 3, 4, 5}
+};
diff --git a/keyboards/planck/rev7/rules.mk b/keyboards/planck/rev7/rules.mk
new file mode 100644
index 00000000000..38710bc00b8
--- /dev/null
+++ b/keyboards/planck/rev7/rules.mk
@@ -0,0 +1,9 @@
+# Build Options
+# change yes to no to disable
+#
+CUSTOM_MATRIX = lite
+DIP_SWITCH_ENABLE = yes
+
+SRC += matrix.c
+
+LAYOUTS_HAS_RGB = no
diff --git a/keyboards/poker87d/info.json b/keyboards/poker87d/info.json
index 98cb25d91c6..3e0ea91fdc7 100644
--- a/keyboards/poker87d/info.json
+++ b/keyboards/poker87d/info.json
@@ -89,7 +89,7 @@
{"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, "w": 1.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
{"matrix": [2, 14], "x": 15.25, "y": 2.5},
{"matrix": [5, 13], "x": 16.25, "y": 2.5},
diff --git a/keyboards/preonic/rev3/info.json b/keyboards/preonic/rev3/info.json
index d6d494e005c..e69aacf144e 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 a3eac4eaf40..7e5eace3d5c 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/pteropus/info.json b/keyboards/pteropus/info.json
index b1e0556b61d..76cbe67eee5 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 cf4729fdd26..3841e8c16a2 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 e54316ec296..8a08e47153f 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 f235747a709..fe596b98ff0 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 d3428dd2061..b1f2bb42be5 100644
--- a/keyboards/quarkeys/z40/readme.md
+++ b/keyboards/quarkeys/z40/readme.md
@@ -1,14 +1,18 @@
# Quarkeys Z40 Low Profile Keyboard
-
+
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/rainkeebs/trailmix/info.json b/keyboards/rainkeebs/trailmix/info.json
new file mode 100644
index 00000000000..7b3cfdfcdd3
--- /dev/null
+++ b/keyboards/rainkeebs/trailmix/info.json
@@ -0,0 +1,96 @@
+{
+ "manufacturer": "rainkeebs",
+ "keyboard_name": "trailmix",
+ "maintainer": "ATron789",
+ "bootloader": "atmel-dfu",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ {"pin_a": "B2", "pin_b": "B4"}
+ ]
+ },
+ "matrix_pins": {
+ "cols": ["F6", "D4", "F5", "D0", "F4", "B6"],
+ "rows": ["D1", "D7", "F7", "C6"]
+ },
+ "processor": "atmega32u4",
+ "split": {
+ "enabled": true,
+ "encoder": {
+ "right": {
+ "rotary": [
+ {"pin_a": "B2", "pin_b": "B4"}
+ ]
+ }
+ },
+ "soft_serial_pin": "D3"
+ },
+ "url": "https://www.rainkeebs.mx",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x7363",
+ "vid": "0x726B"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "L00", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "L01", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "L02", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "L03", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "L04", "matrix": [0, 4], "x": 4, "y": 0},
+
+ {"label": "R04", "matrix": [4, 4], "x": 8, "y": 0},
+ {"label": "R03", "matrix": [4, 3], "x": 9, "y": 0},
+ {"label": "R02", "matrix": [4, 2], "x": 10, "y": 0},
+ {"label": "R01", "matrix": [4, 1], "x": 11, "y": 0},
+ {"label": "R00", "matrix": [4, 0], "x": 12, "y": 0},
+
+ {"label": "L10", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "L11", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "L12", "matrix": [1, 2], "x": 2, "y": 1},
+ {"label": "L13", "matrix": [1, 3], "x": 3, "y": 1},
+ {"label": "L14", "matrix": [1, 4], "x": 4, "y": 1},
+
+ {"label": "R14", "matrix": [5, 4], "x": 8, "y": 1},
+ {"label": "R13", "matrix": [5, 3], "x": 9, "y": 1},
+ {"label": "R12", "matrix": [5, 2], "x": 10, "y": 1},
+ {"label": "R11", "matrix": [5, 1], "x": 11, "y": 1},
+ {"label": "R10", "matrix": [5, 0], "x": 12, "y": 1},
+
+ {"label": "L20", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "L21", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "L22", "matrix": [2, 2], "x": 2, "y": 2},
+ {"label": "L23", "matrix": [2, 3], "x": 3, "y": 2},
+ {"label": "L24", "matrix": [2, 4], "x": 4, "y": 2},
+ {"label": "L25", "matrix": [2, 5], "x": 5, "y": 2},
+
+ {"label": "R25", "matrix": [6, 5], "x": 7, "y": 2},
+ {"label": "R24", "matrix": [6, 4], "x": 8, "y": 2},
+ {"label": "R23", "matrix": [6, 3], "x": 9, "y": 2},
+ {"label": "R22", "matrix": [6, 2], "x": 10, "y": 2},
+ {"label": "R21", "matrix": [6, 1], "x": 11, "y": 2},
+ {"label": "R20", "matrix": [6, 0], "x": 12, "y": 2},
+
+ {"label": "L30", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "L31", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "L32", "matrix": [3, 2], "x": 2, "y": 3},
+ {"label": "L33", "matrix": [3, 3], "x": 3, "y": 3},
+ {"label": "L34", "matrix": [3, 4], "x": 4, "y": 3, "w": 2},
+
+ {"label": "R34", "matrix": [7, 4], "x": 7, "y": 3, "w": 2},
+ {"label": "R33", "matrix": [7, 3], "x": 9, "y": 3},
+ {"label": "R32", "matrix": [7, 2], "x": 10, "y": 3},
+ {"label": "R31", "matrix": [7, 1], "x": 11, "y": 3},
+ {"label": "R30", "matrix": [7, 0], "x": 12, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/rainkeebs/trailmix/keymaps/default/keymap.c b/keyboards/rainkeebs/trailmix/keymaps/default/keymap.c
new file mode 100644
index 00000000000..77418f9cd63
--- /dev/null
+++ b/keyboards/rainkeebs/trailmix/keymaps/default/keymap.c
@@ -0,0 +1,66 @@
+/* Copyright 2021 Regan Palmer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _BASE,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define ADJUST MO(_ADJUST)
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BASE] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENTER,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MPLY, KC_PSCR, KC_N, KC_M, KC_COMM, KC_DOT, KC_BSPC,
+ KC_LCTL, KC_LALT, KC_LGUI, LOWER,KC_LSFT, KC_SPC, RAISE, KC_RGUI, KC_ESC, KC_TAB
+ ),
+
+ [_LOWER] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_ESC, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_LBRC, KC_RBRC, KC_SCLN, KC_QUOT, KC_TRNS,
+ KC_TAB, KC_INSERT, KC_DELETE, KC_BACKSLASH,KC_MINUS, KC_TRNS, KC_TRNS, KC_PLUS, KC_SLSH, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RGUI, KC_TRNS, KC_TRNS
+ ),
+
+ [_RAISE] = LAYOUT(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
+ KC_GRAVE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_LCBR, KC_RCBR, KC_COLN, KC_DQT, KC_TRNS,
+ KC_TRNS, KC_CAPS, KC_TRNS, KC_PIPE, KC_UNDS, KC_TRNS, KC_TRNS, KC_EQUAL, KC_QUESTION, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ADJUST, KC_TRNS, KC_TRNS
+ ),
+
+ [_ADJUST] = 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_PRINT_SCREEN, KC_SCROLL_LOCK, KC_PAUSE, KC_H, KC_J, KC_K, KC_L, KC_ENTER,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MPLY, KC_PSCR, KC_N, KC_M, KC_COMM, KC_DOT, KC_BSPC,
+ KC_LCTL, KC_LALT, ADJUST, RAISE, KC_SPC, KC_LSFT, LOWER, ADJUST, KC_RALT, KC_RCTL
+ ),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN)},
+ [_LOWER] = {ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_HOME, KC_END)},
+ [_RAISE] = {ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_WH_L, KC_WH_R)},
+ [_ADJUST] = {ENCODER_CCW_CW(KC_MS_LEFT, KC_MS_RIGHT), ENCODER_CCW_CW(KC_MS_UP, KC_MS_DOWN)},
+};
+#endif
diff --git a/keyboards/rainkeebs/trailmix/keymaps/default/rules.mk b/keyboards/rainkeebs/trailmix/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/rainkeebs/trailmix/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/rainkeebs/trailmix/readme.md b/keyboards/rainkeebs/trailmix/readme.md
new file mode 100644
index 00000000000..2b2b6437e68
--- /dev/null
+++ b/keyboards/rainkeebs/trailmix/readme.md
@@ -0,0 +1,28 @@
+# Trailmix
+
+
+
+
+Ortho split 40% keyboard by rainkeenbs with encoders.
+
+* Keyboard Maintainer: [ATron789](https://github.com/atron789)
+* Hardware Supported: `Elite Pi`, `Pro Micro Type-C USB`, `Elite-C (v4)`, `nice!nano v2` controllers
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rainkeebs/trailmix:default
+
+Flashing example for this keyboard:
+
+ make rainkeebs/rainkeeb:default:flash
+
+(Flash one side of the keyboard at the time)
+
+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**: reset button located next to the encoder slot, one on each side of the keyboard.
diff --git a/keyboards/rainkeebs/trailmix/rules.mk b/keyboards/rainkeebs/trailmix/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/rainkeebs/trailmix/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/rainkeebs/trailmix/trailmix.c b/keyboards/rainkeebs/trailmix/trailmix.c
new file mode 100644
index 00000000000..105d988dadb
--- /dev/null
+++ b/keyboards/rainkeebs/trailmix/trailmix.c
@@ -0,0 +1,91 @@
+/*
+Copyright 2023 Alberto Pavano "ATron789"
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public 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"
+
+enum layers { _BASE, _LOWER, _RAISE, _ADJUST };
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+ switch (get_highest_layer(layer_state)) {
+ case _BASE:
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_MS_WH_DOWN);
+ } else {
+ tap_code(KC_MS_WH_UP);
+ }
+ }
+ break;
+ case _RAISE:
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_MNXT);
+ } else {
+ tap_code(KC_MPRV);
+ }
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_WH_R);
+ } else {
+ tap_code(KC_WH_L);
+ }
+ }
+ break;
+ case _LOWER:
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_PGUP);
+ } else {
+ tap_code(KC_PGDN);
+ }
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_END);
+ } else {
+ tap_code(KC_HOME);
+ }
+ }
+ break;
+ case _ADJUST:
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_MS_RIGHT);
+ } else {
+ tap_code(KC_MS_LEFT);
+ }
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_MS_DOWN);
+ } else {
+ tap_code(KC_MS_UP);
+ }
+ }
+ break;
+ }
+ return true;
+}
+#endif
diff --git a/keyboards/scottokeebs/scotto34/info.json b/keyboards/scottokeebs/scotto34/info.json
new file mode 100644
index 00000000000..72a1801bead
--- /dev/null
+++ b/keyboards/scottokeebs/scotto34/info.json
@@ -0,0 +1,75 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "Scotto34 (PCB Edition)",
+ "maintainer": "joe-scotto",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["GP9", "GP10", "GP11", "GP12", "GP13", "GP18", "GP19", "GP20", "GP21", "GP22"],
+ "rows": ["GP0", "GP1", "GP14", "GP15"]
+ },
+ "processor": "RP2040",
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1013",
+ "vid": "0x534B"
+ },
+ "ws2812": {
+ "pin": "GP23",
+ "driver": "vendor"
+ },
+ "rgblight": {
+ "led_count": 1
+ },
+ "community_layouts": ["split_3x5_2"],
+ "layouts": {
+ "LAYOUT_split_3x5_2": {
+ "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": [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": [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": [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/scottokeebs/scotto34/keymaps/default/config.h b/keyboards/scottokeebs/scotto34/keymaps/default/config.h
new file mode 100644
index 00000000000..9e99bf0205e
--- /dev/null
+++ b/keyboards/scottokeebs/scotto34/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/*
+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
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/scottokeebs/scotto34/keymaps/default/keymap.c b/keyboards/scottokeebs/scotto34/keymaps/default/keymap.c
new file mode 100644
index 00000000000..a06722184a9
--- /dev/null
+++ b/keyboards/scottokeebs/scotto34/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_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/scottokeebs/scotto34/keymaps/scotto/config.h b/keyboards/scottokeebs/scotto34/keymaps/scotto/config.h
new file mode 100644
index 00000000000..9e99bf0205e
--- /dev/null
+++ b/keyboards/scottokeebs/scotto34/keymaps/scotto/config.h
@@ -0,0 +1,23 @@
+/*
+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
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/scottokeebs/scotto34/keymaps/scotto/keymap.c b/keyboards/scottokeebs/scotto34/keymaps/scotto/keymap.c
new file mode 100644
index 00000000000..b1720f43020
--- /dev/null
+++ b/keyboards/scottokeebs/scotto34/keymaps/scotto/keymap.c
@@ -0,0 +1,246 @@
+/*
+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
+
+// 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);
+
+// Onboard LED
+#ifdef RGBLIGHT_ENABLE
+ // Configure LED
+ void keyboard_post_init_user(void) {
+ // Initialize RGB to static black
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom(HSV_BLACK);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ }
+
+ // Change LED
+ void housekeeping_task_user(void) {
+ // Caps lock status
+ if (host_keyboard_led_state().caps_lock) {
+ rgblight_setrgb_at(4, 4, 0, 0);
+ } else {
+ // Layers
+ switch (get_highest_layer(layer_state | default_layer_state)) {
+ case 0:
+ rgblight_setrgb_at(4, 4, 4, 0);
+ break;
+ case 1:
+ rgblight_setrgb_at(4, 4, 4, 0);
+ break;
+ case 2:
+ rgblight_setrgb_at(4, 4, 4, 0);
+ break;
+ case 3:
+ rgblight_setrgb_at(4, 4, 4, 0);
+ break;
+ case 4:
+ rgblight_setrgb_at(0, 0, 4, 0);
+ break;
+ case 5:
+ rgblight_setrgb_at(0, 4, 0, 0);
+ break;
+ case 6:
+ rgblight_setrgb_at(0, 0, 4, 0);
+ break;
+ case 7:
+ rgblight_setrgb_at(0, 0, 4, 0);
+ break;
+ case 8:
+ rgblight_setrgb_at(0, 0, 4, 0);
+ break;
+ }
+ }
+ }
+#endif
+
+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, KC_NO, 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), LCTL_T(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/scottokeebs/scotto34/keymaps/scotto/rules.mk b/keyboards/scottokeebs/scotto34/keymaps/scotto/rules.mk
new file mode 100644
index 00000000000..e5ddcae8d92
--- /dev/null
+++ b/keyboards/scottokeebs/scotto34/keymaps/scotto/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/scottokeebs/scotto34/readme.md b/keyboards/scottokeebs/scotto34/readme.md
new file mode 100644
index 00000000000..546a20b08a6
--- /dev/null
+++ b/keyboards/scottokeebs/scotto34/readme.md
@@ -0,0 +1,29 @@
+# Scotto34 (PCB Edition)
+
+
+
+A low profile 34-key split monoblock ortholinear keyboard that uses 18x17mm spaced Choc switches and an exposed controller in the middle.
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: Scotto34 (PCB Edition), Raspberry Pi Pico
+* Hardware Availability: [ScottoKeebs](https://scottokeebs.com), [Amazon](https://amazon.com), [AliExpress](https://aliexpress.com)
+
+# Compiling
+
+Make example for this keyboard (after setting up your build environment):
+
+ make scottokeebs/scotto34:default
+
+Flashing example for this keyboard:
+
+ make 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
diff --git a/keyboards/scottokeebs/scotto34/rules.mk b/keyboards/scottokeebs/scotto34/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/scottokeebs/scotto34/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/smithrune/iron160/iron160_h/info.json b/keyboards/smithrune/iron160/iron160_h/info.json
index 5bef6852376..ae65246d26e 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], "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, "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], "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 b39e8d72eb4..b8dc909c947 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 5a700c2ee87..653a3dcd32a 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/soda/mango/info.json b/keyboards/soda/mango/info.json
new file mode 100644
index 00000000000..a2b3d4b0e09
--- /dev/null
+++ b/keyboards/soda/mango/info.json
@@ -0,0 +1,49 @@
+{
+ "manufacturer": "Soda",
+ "keyboard_name": "Mango",
+ "url": "https://github.com/gezhaoyou",
+ "maintainer": "JeayoKeh",
+ "diode_direction": "ROW2COL",
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu",
+ "matrix_pins": {
+ "cols": ["A6", "A5", "A4", "A3"],
+ "rows": ["B10", "B2", "B1", "B0", "A7"]
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "force_nkro": true,
+ "vid": "0x3A54",
+ "pid": "0x4F5D"
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "community_layouts": ["numpad_5x4"],
+ "layouts": {
+ "LAYOUT_numpad_5x4": {
+ "layout": [
+ {"label": "Num Lock", "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": "7", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "8", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "9", "matrix": [1, 2], "x": 2, "y": 1},
+ {"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},
+ {"h": 2, "label": "+", "matrix": [1, 3], "x": 3, "y": 1},
+ {"label": "1", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "2", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "3", "matrix": [3, 2], "x": 2, "y": 3},
+ {"label": "0", "matrix": [4, 0], "w": 2, "x": 0, "y": 4},
+ {"label": ".", "matrix": [4, 2], "x": 2, "y": 4},
+ {"h": 2, "label": "Enter", "matrix": [3, 3], "x": 3, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/soda/mango/keymaps/default/keymap.c b/keyboards/soda/mango/keymaps/default/keymap.c
new file mode 100755
index 00000000000..7497c875143
--- /dev/null
+++ b/keyboards/soda/mango/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+/*
+Copyright 2012,2013 gezhaoyou
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public 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_5x4(
+ KC_NUM_LOCK, KC_PSLS, KC_PAST, LT(1, 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_5x4(
+ KC_TRNS, KC_CALCULATOR, KC_BSPC, KC_TRNS,
+ RGB_MODE_FORWARD, RGB_VAI, RGB_HUI,
+ RGB_SPD, RGB_TOG, RGB_SPI, QK_BOOTLOADER,
+ RGB_MODE_REVERSE, RGB_VAD, RGB_HUD,
+ KC_TRNS, KC_TRNS, QK_CLEAR_EEPROM),
+};
\ No newline at end of file
diff --git a/keyboards/soda/mango/keymaps/via/keymap.c b/keyboards/soda/mango/keymaps/via/keymap.c
new file mode 100755
index 00000000000..059598a6809
--- /dev/null
+++ b/keyboards/soda/mango/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/*
+Copyright 2012,2013 gezhaoyou
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public 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_5x4(
+ KC_NUM_LOCK, KC_PSLS, KC_PAST, LT(1, 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_5x4(
+ KC_TRNS, KC_CALCULATOR, KC_BSPC, KC_TRNS,
+ RGB_MODE_FORWARD, RGB_VAI, RGB_HUI,
+ RGB_SPD, RGB_TOG, RGB_SPI, QK_BOOTLOADER,
+ RGB_MODE_REVERSE, RGB_VAD, RGB_HUD,
+ KC_TRNS, KC_TRNS, QK_CLEAR_EEPROM),
+};
+
diff --git a/keyboards/soda/mango/keymaps/via/rules.mk b/keyboards/soda/mango/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/soda/mango/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/soda/mango/readme.md b/keyboards/soda/mango/readme.md
new file mode 100644
index 00000000000..1a1eb6bccc8
--- /dev/null
+++ b/keyboards/soda/mango/readme.md
@@ -0,0 +1,23 @@
+# mango-17
+
+A customizable 17 keyboard, support both HOTSWAP and SOLDER.
+
+* Keyboard Maintainer: [gezhaoyou](https://github.com/gezhaoyou)
+* Hardware Supported: [gezhaoyou](https://github.com/gezhaoyou)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make soda/mango:default
+
+Flashing example for this keyboard:
+
+ make soda/mango: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:
+
+* **Physical reset button**: Briefly press the button: [boot] first, then press button: [reset] on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/soda/mango/rules.mk b/keyboards/soda/mango/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/soda/mango/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/soda/pocket/info.json b/keyboards/soda/pocket/info.json
index cef1aec57b0..c1396ab3a19 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/spleeb/info.json b/keyboards/spleeb/info.json
index 10cd0e35b8a..e03faa7c3e9 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/sweep/keymaps/flinguenheld/.clang-format b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/.clang-format
new file mode 100644
index 00000000000..f87f20d8b68
--- /dev/null
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/.clang-format
@@ -0,0 +1 @@
+ColumnLimit: 110
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/config.h b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/config.h
index c147d5e67fa..f14e2b17e18 100644
--- a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/config.h
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/config.h
@@ -18,23 +18,21 @@
/* Flash */
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET // Activates the double-tap behavior
-#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // Timeout window in ms in which the double tap can occur.
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // In ms in which the double tap can occur
/* OLED */
#undef OLED_FONT_H
#define OLED_FONT_H "./oled/glcdfont.c"
-#define OLED_TIMEOUT 25000
-#define OLED_BRIGHTNESS 60 // Protect my eyesss
+#define OLED_TIMEOUT 25000
+#define OLED_BRIGHTNESS 50 // Protect my eyesss
#define SPLIT_LAYER_STATE_ENABLE
#define SPLIT_MODS_ENABLE
#define SPLIT_OLED_ENABLE
/* Auto shift ♥ */
#define AUTO_SHIFT_TIMEOUT 115
-
-/* Redefine CTRL + space (See space cadet shift) */
-#define LCPO_KEYS KC_LCTL, KC_TRNS, KC_SPC
+#define TAPPING_TERM 155
/* Unicode */
// #define UNICODE_SELECTED_MODES UC_LNX
@@ -61,7 +59,6 @@
#define MK_C_OFFSET_2 25
#define MK_C_INTERVAL_2 10
-
#define MK_W_OFFSET_0 1
#define MK_W_INTERVAL_0 160
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c
index d6bd3818b42..d5bf9f02235 100644
--- a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/auto_shift.c
@@ -7,193 +7,498 @@
/* Only for basis letters
Exceptions like Tab or Enter */
bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_TAB:
+ // case KC_ENT:
- switch (keycode) {
+ case US_EACU:
+ case US_CCED:
+ case US_AE:
+ case US_OE:
- case KC_TAB:
- case KC_ENT:
+ // --
+ case KC_A:
+ case KC_B:
+ case KC_C:
+ case KC_D:
+ case KC_E:
+ case KC_F:
+ case KC_G:
+ case KC_H:
+ case KC_I:
+ case KC_J:
+ case KC_K:
+ case KC_L:
+ case KC_M:
+ case KC_N:
+ case KC_O:
+ case KC_P:
+ case KC_Q:
+ case KC_R:
+ case KC_S:
+ case KC_T:
+ case KC_U:
+ case KC_V:
+ case KC_W:
+ case KC_X:
+ case KC_Y:
+ case KC_Z:
- // --
- case KC_A:
- case KC_B:
- case KC_C:
- case KC_D:
- case KC_E:
- case KC_F:
- case KC_G:
- case KC_H:
- case KC_I:
- case KC_J:
- case KC_K:
- case KC_L:
- case KC_M:
- case KC_N:
- case KC_O:
- case KC_P:
- case KC_Q:
- case KC_R:
- case KC_S:
- case KC_T:
- case KC_U:
- case KC_V:
- case KC_W:
- case KC_X:
- case KC_Y:
- case KC_Z:
+ return true;
+ }
- return true;
- }
-
- return get_custom_auto_shifted_key(keycode, record);
+ return get_custom_auto_shifted_key(keycode, record);
}
-
/* Custom auto shift
I use this instead of tap dance because double tap is horrible
Add here the letter or the custom enum, then add in press_user and press_release the actions */
bool get_custom_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
- switch(keycode) {
+ switch (keycode) {
+ case KC_BSPC:
- case KC_BSPC:
- case KC_LABK: // Easy indent with vim
- case KC_RABK:
+ // Double them !!!
+ case KC_AMPERSAND:
+ case KC_AT:
+ case KC_BACKSLASH:
+ case KC_CIRCUMFLEX:
+ case KC_COLON:
+ case KC_DOLLAR:
+ case KC_EQUAL:
+ case KC_EXCLAIM:
+ case KC_GRAVE:
+ case KC_HASH:
+ case KC_MINUS:
+ case KC_PERC:
+ case KC_PIPE:
+ case KC_PLUS:
+ case KC_QUESTION:
+ case KC_QUOTE:
+ case KC_DOUBLE_QUOTE:
+ case KC_SEMICOLON:
+ case KC_SLASH:
+ case KC_ASTERISK:
+ case KC_TILDE:
+ case KC_UNDERSCORE:
- /* French */
- case CS_E_ACUTE:
+ case KC_LEFT_ANGLE_BRACKET: // Easy indent with vim
+ case KC_RIGHT_ANGLE_BRACKET:
- case CS_A_GRAVE:
- case CS_E_GRAVE:
- case CS_I_GRAVE:
- case CS_O_GRAVE:
- case CS_U_GRAVE:
+ case KC_LEFT_BRACKET:
+ case KC_RIGHT_BRACKET:
+ case KC_LEFT_CURLY_BRACE:
+ case KC_RIGHT_CURLY_BRACE:
+ case KC_LEFT_PAREN:
+ case KC_RIGHT_PAREN:
- case CS_A_CIRCUMFLEX:
- case CS_E_CIRCUMFLEX:
- case CS_I_CIRCUMFLEX:
- case CS_O_CIRCUMFLEX:
- case CS_U_CIRCUMFLEX:
+ /* French */
+ case CS_A_GRAVE:
+ case CS_E_GRAVE:
+ case CS_U_GRAVE:
- case CS_A_DIAERESIS:
- case CS_E_DIAERESIS:
- case CS_I_DIAERESIS:
- case CS_O_DIAERESIS:
- case CS_U_DIAERESIS:
- case CS_Y_DIAERESIS:
+ case CS_A_CIRCUMFLEX:
+ case CS_E_CIRCUMFLEX:
+ case CS_I_CIRCUMFLEX:
+ case CS_O_CIRCUMFLEX:
+ case CS_U_CIRCUMFLEX:
- case CS_C_CEDILLA:
- case CS_AE:
- case CS_OE:
+ case CS_E_DIAERESIS:
+ case CS_I_DIAERESIS:
+ case CS_U_DIAERESIS:
+ case CS_Y_DIAERESIS:
+ return true;
- return true;
-
- default:
- return false;
- }
+ default:
+ return false;
+ }
}
void autoshift_press_user(uint16_t keycode, bool shifted, keyrecord_t *record) {
- switch(keycode) {
-
- case KC_BSPC:
- register_code16((!shifted) ? KC_BSPC : KC_DEL);
- break;
-
- case KC_LABK:
- if (shifted) { send_unicode_string("<<"); }
- else { send_unicode_string("<"); } break;
-
- case KC_RABK:
- if (shifted) { send_unicode_string(">>"); }
- else { send_unicode_string(">"); } break;
-
- /* French
- Release is not necessary with 'send_unicode_string()' */
- case CS_E_ACUTE:
- if (shifted) { send_unicode_string("É"); }
- else { send_unicode_string("é"); } break;
-
- case CS_A_GRAVE:
- if (shifted) { send_unicode_string("À"); }
- else { send_unicode_string("à"); } break;
- case CS_E_GRAVE:
- if (shifted) { send_unicode_string("È"); }
- else { send_unicode_string("è"); } break;
- case CS_I_GRAVE:
- if (shifted) { send_unicode_string("Ì"); }
- else { send_unicode_string("ì"); } break;
- case CS_O_GRAVE:
- if (shifted) { send_unicode_string("Ò"); }
- else { send_unicode_string("ò"); } break;
- case CS_U_GRAVE:
- if (shifted) { send_unicode_string("Ù"); }
- else { send_unicode_string("ù"); } break;
-
- case CS_A_CIRCUMFLEX:
- if (shifted) { send_unicode_string("Â"); }
- else { send_unicode_string("â"); } break;
- case CS_E_CIRCUMFLEX:
- if (shifted) { send_unicode_string("Ê"); }
- else { send_unicode_string("ê"); } break;
- case CS_I_CIRCUMFLEX:
- if (shifted) { send_unicode_string("Î"); }
- else { send_unicode_string("î"); } break;
- case CS_O_CIRCUMFLEX:
- if (shifted) { send_unicode_string("Ô"); }
- else { send_unicode_string("ô"); } break;
- case CS_U_CIRCUMFLEX:
- if (shifted) { send_unicode_string("Û"); }
- else { send_unicode_string("û"); } break;
-
- case CS_A_DIAERESIS:
- if (shifted) { send_unicode_string("Ä"); }
- else { send_unicode_string("ä"); } break;
- case CS_E_DIAERESIS:
- if (shifted) { send_unicode_string("Ë"); }
- else { send_unicode_string("ë"); } break;
- case CS_I_DIAERESIS:
- if (shifted) { send_unicode_string("Ï"); }
- else { send_unicode_string("ï"); } break;
- case CS_O_DIAERESIS:
- if (shifted) { send_unicode_string("Ö"); }
- else { send_unicode_string("ö"); } break;
- case CS_U_DIAERESIS:
- if (shifted) { send_unicode_string("Ü"); }
- else { send_unicode_string("ü"); } break;
- case CS_Y_DIAERESIS:
- if (shifted) { send_unicode_string("Ÿ"); }
- else { send_unicode_string("ÿ"); } break;
-
- case CS_C_CEDILLA:
- if (shifted) { send_unicode_string("Ç"); }
- else { send_unicode_string("ç"); } break;
- case CS_AE:
- if (shifted) { send_unicode_string("Æ"); }
- else { send_unicode_string("æ"); } break;
- case CS_OE:
- if (shifted) { send_unicode_string("Œ"); }
- else { send_unicode_string("œ"); } break;
-
-
- default:
- if (shifted) {
- add_weak_mods(MOD_BIT(KC_LSFT));
- }
- /* & 0xFF gets the Tap key for Tap Holds, required when using Retro Shift */
- register_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode);
+ switch (keycode) {
+ case KC_BSPC:
+ if (shifted) {
+ tap_code16(KC_DEL);
+ } else {
+ tap_code16(KC_BSPC);
}
+ break;
+ break;
+
+ case KC_AMPERSAND:
+ if (shifted) {
+ tap_code16(KC_AMPERSAND);
+ tap_code16(KC_AMPERSAND);
+ } else {
+ tap_code16(KC_AMPERSAND);
+ }
+ break;
+ case KC_AT:
+ if (shifted) {
+ tap_code16(KC_AT);
+ tap_code16(KC_AT);
+ } else {
+ tap_code16(KC_AT);
+ }
+ break;
+ case KC_BACKSLASH:
+ if (shifted) {
+ tap_code16(KC_BACKSLASH);
+ tap_code16(KC_BACKSLASH);
+ } else {
+ tap_code16(KC_BACKSLASH);
+ }
+ break;
+ case KC_CIRCUMFLEX:
+ if (shifted) {
+ tap_code16(KC_CIRCUMFLEX);
+ tap_code16(KC_CIRCUMFLEX);
+ } else {
+ tap_code16(KC_CIRCUMFLEX);
+ }
+ break;
+ case KC_COLON:
+ if (shifted) {
+ tap_code16(KC_COLON);
+ tap_code16(KC_COLON);
+ } else {
+ tap_code16(KC_COLON);
+ }
+ break;
+ case KC_DOLLAR:
+ if (shifted) {
+ tap_code16(KC_DOLLAR);
+ tap_code16(KC_DOLLAR);
+ } else {
+ tap_code16(KC_DOLLAR);
+ }
+ break;
+ case KC_EQUAL:
+ if (shifted) {
+ tap_code16(KC_EQUAL);
+ tap_code16(KC_EQUAL);
+ } else {
+ tap_code16(KC_EQUAL);
+ }
+ break;
+ case KC_EXCLAIM:
+ if (shifted) {
+ tap_code16(KC_EXCLAIM);
+ tap_code16(KC_EXCLAIM);
+ } else {
+ tap_code16(KC_EXCLAIM);
+ }
+ break;
+ case KC_GRAVE:
+ if (shifted) {
+ tap_code16(KC_GRAVE);
+ tap_code16(KC_GRAVE);
+ } else {
+ tap_code16(KC_GRAVE);
+ }
+ break;
+ case KC_HASH:
+ if (shifted) {
+ tap_code16(KC_HASH);
+ tap_code16(KC_HASH);
+ } else {
+ tap_code16(KC_HASH);
+ }
+ break;
+ case KC_MINUS:
+ if (shifted) {
+ tap_code16(KC_MINUS);
+ tap_code16(KC_MINUS);
+ } else {
+ tap_code16(KC_MINUS);
+ }
+ break;
+ case KC_PERCENT:
+ if (shifted) {
+ tap_code16(KC_PERCENT);
+ tap_code16(KC_PERCENT);
+ } else {
+ tap_code16(KC_PERCENT);
+ }
+ break;
+ case KC_PIPE:
+ if (shifted) {
+ tap_code16(KC_PIPE);
+ tap_code16(KC_PIPE);
+ } else {
+ tap_code16(KC_PIPE);
+ }
+ break;
+ case KC_PLUS:
+ if (shifted) {
+ tap_code16(KC_PLUS);
+ tap_code16(KC_PLUS);
+ } else {
+ tap_code16(KC_PLUS);
+ }
+ break;
+ case KC_QUESTION:
+ if (shifted) {
+ tap_code16(KC_QUESTION);
+ tap_code16(KC_QUESTION);
+ } else {
+ tap_code16(KC_QUESTION);
+ }
+ break;
+ case KC_QUOTE:
+ if (shifted) {
+ tap_code16(KC_QUOTE);
+ tap_code16(KC_QUOTE);
+ } else {
+ tap_code16(KC_QUOTE);
+ }
+ break;
+ case KC_DOUBLE_QUOTE:
+ if (shifted) {
+ tap_code16(KC_DOUBLE_QUOTE);
+ tap_code16(KC_DOUBLE_QUOTE);
+ } else {
+ tap_code16(KC_DOUBLE_QUOTE);
+ }
+ break;
+ case KC_SEMICOLON:
+ if (shifted) {
+ tap_code16(KC_SEMICOLON);
+ tap_code16(KC_SEMICOLON);
+ } else {
+ tap_code16(KC_SEMICOLON);
+ }
+ break;
+ case KC_SLASH:
+ if (shifted) {
+ tap_code16(KC_SLASH);
+ tap_code16(KC_SLASH);
+ } else {
+ tap_code16(KC_SLASH);
+ }
+ break;
+ case KC_ASTERISK:
+ if (shifted) {
+ tap_code16(KC_ASTERISK);
+ tap_code16(KC_ASTERISK);
+ } else {
+ tap_code16(KC_ASTERISK);
+ }
+ break;
+ case KC_TILDE:
+ if (shifted) {
+ tap_code16(KC_TILDE);
+ tap_code16(KC_TILDE);
+ } else {
+ tap_code16(KC_TILDE);
+ }
+ break;
+ case KC_UNDERSCORE:
+ if (shifted) {
+ tap_code16(KC_UNDERSCORE);
+ tap_code16(KC_UNDERSCORE);
+ } else {
+ tap_code16(KC_UNDERSCORE);
+ }
+ break;
+
+ case KC_LEFT_ANGLE_BRACKET:
+ if (shifted) {
+ tap_code16(KC_LEFT_ANGLE_BRACKET);
+ tap_code16(KC_LEFT_ANGLE_BRACKET);
+ } else {
+ tap_code16(KC_LEFT_ANGLE_BRACKET);
+ }
+ break;
+ case KC_RIGHT_ANGLE_BRACKET:
+ if (shifted) {
+ tap_code16(KC_RIGHT_ANGLE_BRACKET);
+ tap_code16(KC_RIGHT_ANGLE_BRACKET);
+ } else {
+ tap_code16(KC_RIGHT_ANGLE_BRACKET);
+ }
+ break;
+
+ case KC_LEFT_BRACKET:
+ if (shifted) {
+ tap_code16(KC_LEFT_BRACKET);
+ tap_code16(KC_LEFT_BRACKET);
+ } else {
+ tap_code16(KC_LEFT_BRACKET);
+ }
+ break;
+ case KC_RIGHT_BRACKET:
+ if (shifted) {
+ tap_code16(KC_RIGHT_BRACKET);
+ tap_code16(KC_RIGHT_BRACKET);
+ } else {
+ tap_code16(KC_RIGHT_BRACKET);
+ }
+ break;
+ case KC_LEFT_CURLY_BRACE:
+ if (shifted) {
+ tap_code16(KC_LEFT_CURLY_BRACE);
+ tap_code16(KC_LEFT_CURLY_BRACE);
+ } else {
+ tap_code16(KC_LEFT_CURLY_BRACE);
+ }
+ break;
+ case KC_RIGHT_CURLY_BRACE:
+ if (shifted) {
+ tap_code16(KC_RIGHT_CURLY_BRACE);
+ tap_code16(KC_RIGHT_CURLY_BRACE);
+ } else {
+ tap_code16(KC_RIGHT_CURLY_BRACE);
+ }
+ break;
+ case KC_LEFT_PAREN:
+ if (shifted) {
+ tap_code16(KC_LEFT_PAREN);
+ tap_code16(KC_LEFT_PAREN);
+ } else {
+ tap_code16(KC_LEFT_PAREN);
+ }
+ break;
+ case KC_RIGHT_PAREN:
+ if (shifted) {
+ tap_code16(KC_RIGHT_PAREN);
+ tap_code16(KC_RIGHT_PAREN);
+ } else {
+ tap_code16(KC_RIGHT_PAREN);
+ }
+ break;
+
+ /* French
+ Release is not necessary with 'send_unicode_string()' */
+ case CS_A_GRAVE:
+ if (shifted) {
+ tap_code16(US_DGRV);
+ tap_code16(S(KC_A));
+ } else {
+ tap_code16(US_DGRV);
+ tap_code16(KC_A);
+ }
+ break;
+ case CS_E_GRAVE:
+ if (shifted) {
+ tap_code16(US_DGRV);
+ tap_code16(S(KC_E));
+ } else {
+ tap_code16(US_DGRV);
+ tap_code16(KC_E);
+ }
+ break;
+ case CS_U_GRAVE:
+ if (shifted) {
+ tap_code16(US_DGRV);
+ tap_code16(S(KC_U));
+ } else {
+ tap_code16(US_DGRV);
+ tap_code16(KC_U);
+ }
+ break;
+
+ case CS_A_CIRCUMFLEX:
+ if (shifted) {
+ tap_code16(US_DCIR);
+ tap_code16(S(KC_A));
+ } else {
+ tap_code16(US_DCIR);
+ tap_code16(KC_A);
+ }
+ break;
+ case CS_E_CIRCUMFLEX:
+ if (shifted) {
+ tap_code16(US_DCIR);
+ tap_code16(S(KC_E));
+ } else {
+ tap_code16(US_DCIR);
+ tap_code16(KC_E);
+ }
+ break;
+ case CS_I_CIRCUMFLEX:
+ if (shifted) {
+ tap_code16(US_DCIR);
+ tap_code16(S(KC_I));
+ } else {
+ tap_code16(US_DCIR);
+ tap_code16(KC_I);
+ }
+ break;
+ case CS_O_CIRCUMFLEX:
+ if (shifted) {
+ tap_code16(US_DCIR);
+ tap_code16(S(KC_O));
+ } else {
+ tap_code16(US_DCIR);
+ tap_code16(KC_O);
+ }
+ break;
+ case CS_U_CIRCUMFLEX:
+ if (shifted) {
+ tap_code16(US_DCIR);
+ tap_code16(S(KC_U));
+ } else {
+ tap_code16(US_DCIR);
+ tap_code16(KC_U);
+ }
+ break;
+
+ case CS_E_DIAERESIS:
+ if (shifted) {
+ tap_code16(US_DIAE);
+ tap_code16(S(KC_E));
+ } else {
+ tap_code16(US_DIAE);
+ tap_code16(KC_E);
+ }
+ break;
+ case CS_I_DIAERESIS:
+ if (shifted) {
+ tap_code16(US_DIAE);
+ tap_code16(S(KC_I));
+ } else {
+ tap_code16(US_DIAE);
+ tap_code16(KC_I);
+ }
+ break;
+ case CS_U_DIAERESIS:
+ if (shifted) {
+ tap_code16(US_DIAE);
+ tap_code16(S(KC_U));
+ } else {
+ tap_code16(US_DIAE);
+ tap_code16(KC_U);
+ }
+ break;
+ case CS_Y_DIAERESIS:
+ if (shifted) {
+ tap_code16(US_DIAE);
+ tap_code16(S(KC_Y));
+ } else {
+ tap_code16(US_DIAE);
+ tap_code16(KC_Y);
+ }
+ break;
+
+ default:
+ if (shifted) {
+ add_weak_mods(MOD_BIT(KC_LSFT));
+ }
+ /* & 0xFF gets the Tap key for Tap Holds, required when using Retro Shift */
+ register_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode);
+ }
}
void autoshift_release_user(uint16_t keycode, bool shifted, keyrecord_t *record) {
- switch(keycode) {
+ switch (keycode) {
+ case KC_BSPC:
+ unregister_code16((!shifted) ? KC_BSPC : KC_DEL);
+ break;
- case KC_BSPC:
- unregister_code16((!shifted) ? KC_BSPC : KC_DEL);
- break;
-
- default:
- /* & 0xFF gets the Tap key for Tap Holds, required when using Retro Shift
- The IS_RETRO check isn't really necessary here, always using
- keycode & 0xFF would be fine. */
- unregister_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode);
- }
+ default:
+ /* & 0xFF gets the Tap key for Tap Holds, required when using Retro Shift
+ The IS_RETRO check isn't really necessary here, always using
+ keycode & 0xFF would be fine. */
+ unregister_code16((IS_RETRO(keycode)) ? keycode & 0xFF : keycode);
+ }
}
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c
index c382eedddc1..de0436b361e 100644
--- a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/combo.c
@@ -15,256 +15,231 @@
*/
enum combos {
- LEADER,
- BOOTLOADER,
+ LEADER,
+ BOOTLOADER,
- LAYER_ADJUST,
- LAYER_FN,
- LAYER_LEFT_HAND,
+ LAYER_ADJ,
+ LAYER_FN,
+ LAYER_LEFT_HAND,
+ LAYER_MOUSE,
+ LAYER_MOUSE_BACK,
- /* French */
- E_ACUTE,
- C_CEDILLA,
- E_A,
- E_O,
+ /* French */
+ C_CEDILLA,
+ E_A,
+ E_O,
- A_GRAVE,
- E_GRAVE,
- I_GRAVE,
- O_GRAVE,
- U_GRAVE,
+ A_GRAVE,
+ E_GRAVE,
+ U_GRAVE,
- A_CIRCUMFLEX,
- E_CIRCUMFLEX,
- I_CIRCUMFLEX,
- O_CIRCUMFLEX,
- U_CIRCUMFLEX,
+ A_CIRCUMFLEX,
+ E_CIRCUMFLEX,
+ I_CIRCUMFLEX,
+ O_CIRCUMFLEX,
+ U_CIRCUMFLEX,
- A_DIAERESIS,
- E_DIAERESIS,
- I_DIAERESIS,
- O_DIAERESIS,
- U_DIAERESIS,
- Y_DIAERESIS,
+ E_DIAERESIS,
+ I_DIAERESIS,
+ U_DIAERESIS,
+ Y_DIAERESIS,
- /* -- */
- AMPERSAND,
- AT_SIGN,
- BACKSLASH,
- CIRCUMFLEX,
- COLON,
- DOLLAR,
- EQUAL,
- EXCLAMATION_MARK,
- GRAVE,
- HASH,
- MINUS,
- PERCENT,
- PIPE,
- PLUS,
- QUESTION_MARK,
- QUOTE,
- QUOTE_DOUBLE,
- SEMICOLON,
- SLASH,
- STAR,
- TILDE,
- UNDERSCORE,
+ /* -- */
+ AMPERSAND,
+ AT_SIGN,
+ BACKSLASH,
+ CIRCUMFLEX,
+ COLON,
+ DOLLAR,
+ EQUAL,
+ EXCLAMATION_MARK,
+ GRAVE,
+ HASH,
+ MINUS,
+ PERCENT,
+ PIPE,
+ PLUS,
+ QUESTION_MARK,
+ QUOTE,
+ QUOTE_DOUBLE,
+ SEMICOLON,
+ SLASH,
+ STAR,
+ TILDE,
+ UNDERSCORE,
- ANGLE_BRACKET_LEFT,
- ANGLE_BRACKET_RIGHT,
+ ANGLE_BRACKET_LEFT,
+ ANGLE_BRACKET_RIGHT,
- BRACKET_LEFT,
- BRACKET_RIGHT,
- CURLY_BRACKET_LEFT,
- CURLY_BRACKET_RIGHT,
- PARENTHESIS_LEFT,
- PARENTHESIS_RIGHT,
+ BRACKET_LEFT,
+ BRACKET_RIGHT,
+ CURLY_BRACKET_LEFT,
+ CURLY_BRACKET_RIGHT,
+ PARENTHESIS_LEFT,
+ PARENTHESIS_RIGHT,
- /* -- */
- ALT_SHIFT,
- CONTROL_SHIFT,
- CONTROL_ALT,
- CONTROL_SHIFT_ALT,
- RIGHT_ALT,
+ /* Non qwerty */
+ EURO,
- /* One hand special */
- CONTROL_RIGHT,
- CONTROL_SHIFT_RIGHT,
+ /* One hand special */
+ CONTROL_RIGHT,
+ CONTROL_SHIFT_RIGHT,
- // DEL_LEFT,
- SHIFT_LEFT,
- ALTGR_LEFT,
- CONTROL_SHIFT_LEFT,
+ ALT_LEFT,
+ SHIFT_LEFT,
+ CONTROL_SHIFT_LEFT,
+
+ /* Just to replace the define in config.h */
+ COMBO_LENGTH,
};
+uint16_t COMBO_LEN = COMBO_LENGTH;
/* Sequences fo keys */
-const uint16_t PROGMEM combo_leader[] = {LT(_MOUSE, KC_COMM), LT(_ARROWS, KC_DOT), COMBO_END};
-const uint16_t PROGMEM combo_bootloader[] = {KC_K, KC_TAB, KC_Z, KC_BSPC, KC_V, KC_J, COMBO_END};
+const uint16_t PROGMEM combo_leader[] = {LT(_MOUSE, KC_COMM), LT(_ARROWS, KC_DOT), COMBO_END};
+const uint16_t PROGMEM combo_bootloader[] = {KC_K, KC_TAB, KC_Z, KC_BSPC, KC_V, KC_J, COMBO_END};
-const uint16_t PROGMEM combo_adjust[] = {KC_LCPO, LT(_NUMERIC, KC_ENT), COMBO_END};
-const uint16_t PROGMEM combo_fn[] = {LT(_NUMERIC, KC_ENT), KC_N, COMBO_END};
-const uint16_t PROGMEM combo_left_hand[] = {KC_LCPO, GUI_T(KC_ESC), COMBO_END};
+const uint16_t PROGMEM combo_ADJ[] = {CTL_T(KC_SPACE), LT(_NUMERIC, KC_ENT), COMBO_END};
+const uint16_t PROGMEM combo_fn[] = {LT(_NUMERIC, KC_ENT), KC_N, COMBO_END};
+const uint16_t PROGMEM combo_left_hand[] = {LT(_MOUSE, KC_COMM), GUI_T(KC_ESC), COMBO_END};
+const uint16_t PROGMEM combo_mouse[] = {KC_A, KC_I, KC_E, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_mouse_back[] = {KC_MS_LEFT, KC_MS_UP, KC_MS_DOWN, KC_MS_RIGHT, COMBO_END};
+/* -- */
+const uint16_t PROGMEM combo_c_cedilla[] = {LT(_ARROWS, KC_DOT), KC_C, COMBO_END};
+const uint16_t PROGMEM combo_ea[] = {US_EACU, KC_A, COMBO_END};
+const uint16_t PROGMEM combo_eo[] = {US_EACU, KC_O, COMBO_END};
+
+const uint16_t PROGMEM combo_a_grave[] = {CTL_T(KC_SPACE), KC_A, COMBO_END};
+const uint16_t PROGMEM combo_e_grave[] = {CTL_T(KC_SPACE), KC_E, COMBO_END};
+const uint16_t PROGMEM combo_u_grave[] = {CTL_T(KC_SPACE), KC_U, COMBO_END};
+
+const uint16_t PROGMEM combo_a_circumflex[] = {LT(_MOUSE, KC_COMM), KC_A, COMBO_END};
+const uint16_t PROGMEM combo_e_circumflex[] = {LT(_MOUSE, KC_COMM), KC_E, COMBO_END};
+const uint16_t PROGMEM combo_i_circumflex[] = {LT(_MOUSE, KC_COMM), KC_I, COMBO_END};
+const uint16_t PROGMEM combo_o_circumflex[] = {LT(_MOUSE, KC_COMM), KC_O, COMBO_END};
+const uint16_t PROGMEM combo_u_circumflex[] = {LT(_MOUSE, KC_COMM), KC_U, COMBO_END};
+
+const uint16_t PROGMEM combo_e_diaeresis[] = {US_EACU, KC_E, COMBO_END};
+const uint16_t PROGMEM combo_i_diaeresis[] = {US_EACU, KC_I, COMBO_END};
+const uint16_t PROGMEM combo_u_diaeresis[] = {US_EACU, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_y_diaeresis[] = {US_EACU, KC_Y, COMBO_END};
/* -- */
-// const uint16_t PROGMEM combo_enter_shifted[] = {LT(_NUMERIC, KC_ENT), KC_S, COMBO_END};
-const uint16_t PROGMEM combo_control_shift[] = {KC_LCPO, KC_S, COMBO_END};
-const uint16_t PROGMEM combo_control_alt[] = {KC_LCPO, KC_LALT, COMBO_END};
-const uint16_t PROGMEM combo_control_shift_alt[] = {KC_LCPO, KC_S, KC_A, COMBO_END};
-const uint16_t PROGMEM combo_right_alt[] = {KC_LAPO, KC_G, COMBO_END};
-const uint16_t PROGMEM combo_alt_shift[] = {KC_LALT, KC_S, COMBO_END};
+const uint16_t PROGMEM combo_ampersand[] = {KC_E, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_at_sign[] = {KC_D, KC_L, COMBO_END};
+const uint16_t PROGMEM combo_backslash[] = {KC_B, KC_E, COMBO_END};
+const uint16_t PROGMEM combo_circumflex[] = {KC_B, KC_O, COMBO_END};
+const uint16_t PROGMEM combo_colon[] = {KC_C, KC_G, COMBO_END};
+const uint16_t PROGMEM combo_dollar[] = {KC_O, KC_W, COMBO_END};
+const uint16_t PROGMEM combo_equal[] = {KC_T, KC_H, COMBO_END};
+const uint16_t PROGMEM combo_exclamation_mark[] = {KC_Q, KC_Y, COMBO_END};
+const uint16_t PROGMEM combo_grave[] = {KC_T, KC_G, COMBO_END};
+const uint16_t PROGMEM combo_hash[] = {KC_X, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_minus[] = {KC_T, KC_R, COMBO_END};
+const uint16_t PROGMEM combo_percent[] = {KC_B, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_pipe[] = {KC_I, KC_E, COMBO_END};
+const uint16_t PROGMEM combo_plus[] = {KC_T, KC_L, COMBO_END};
+const uint16_t PROGMEM combo_question_mark[] = {KC_P, KC_D, COMBO_END};
+const uint16_t PROGMEM combo_quote[] = {KC_T, KC_N, COMBO_END};
+const uint16_t PROGMEM combo_quote_double[] = {KC_A, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_semicolon[] = {KC_G, KC_H, COMBO_END};
+const uint16_t PROGMEM combo_slash[] = {KC_S, KC_L, COMBO_END};
+const uint16_t PROGMEM combo_star[] = {KC_S, KC_T, COMBO_END};
+const uint16_t PROGMEM combo_tilde[] = {KC_I, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_underscore[] = {KC_S, KC_R, COMBO_END};
-/* -- */
-const uint16_t PROGMEM combo_e_acute[] = {KC_LCPO, KC_E, COMBO_END};
-const uint16_t PROGMEM combo_c_cedilla[] = {KC_LCPO, KC_I, COMBO_END};
-const uint16_t PROGMEM combo_ea[] = {KC_LCPO, KC_A, COMBO_END};
-const uint16_t PROGMEM combo_eo[] = {KC_LCPO, KC_O, COMBO_END};
+const uint16_t PROGMEM combo_angle_bracket_left[] = {KC_C, KC_S, COMBO_END};
+const uint16_t PROGMEM combo_angle_bracket_right[] = {KC_S, KC_H, COMBO_END};
+const uint16_t PROGMEM combo_bracket_left[] = {KC_I, KC_O, COMBO_END};
+const uint16_t PROGMEM combo_bracket_right[] = {KC_O, KC_U, COMBO_END};
+const uint16_t PROGMEM combo_curly_bracket_left[] = {KC_X, KC_E, COMBO_END};
+const uint16_t PROGMEM combo_curly_bracket_right[] = {KC_E, KC_Y, COMBO_END};
+const uint16_t PROGMEM combo_parenthesis_left[] = {KC_T, KC_D, COMBO_END};
+const uint16_t PROGMEM combo_parenthesis_right[] = {KC_D, KC_R, COMBO_END};
-const uint16_t PROGMEM combo_a_grave[] = {LT(_MOUSE, KC_COMM), KC_A, COMBO_END};
-const uint16_t PROGMEM combo_e_grave[] = {LT(_MOUSE, KC_COMM), KC_E, COMBO_END};
-const uint16_t PROGMEM combo_i_grave[] = {LT(_MOUSE, KC_COMM), KC_I, COMBO_END};
-const uint16_t PROGMEM combo_o_grave[] = {LT(_MOUSE, KC_COMM), KC_O, COMBO_END};
-const uint16_t PROGMEM combo_u_grave[] = {LT(_MOUSE, KC_COMM), KC_U, COMBO_END};
-
-const uint16_t PROGMEM combo_a_circumflex[] = {KC_C, KC_A, COMBO_END};
-const uint16_t PROGMEM combo_e_circumflex[] = {KC_C, KC_E, COMBO_END};
-const uint16_t PROGMEM combo_i_circumflex[] = {KC_C, KC_I, COMBO_END};
-const uint16_t PROGMEM combo_o_circumflex[] = {KC_C, KC_O, COMBO_END};
-const uint16_t PROGMEM combo_u_circumflex[] = {KC_C, KC_U, COMBO_END};
-
-const uint16_t PROGMEM combo_a_diaeresis[] = {KC_T, KC_A, COMBO_END};
-const uint16_t PROGMEM combo_e_diaeresis[] = {KC_T, KC_E, COMBO_END};
-const uint16_t PROGMEM combo_i_diaeresis[] = {KC_T, KC_I, COMBO_END};
-const uint16_t PROGMEM combo_o_diaeresis[] = {KC_T, KC_O, COMBO_END};
-const uint16_t PROGMEM combo_u_diaeresis[] = {KC_T, KC_U, COMBO_END};
-const uint16_t PROGMEM combo_y_diaeresis[] = {KC_T, KC_Y, COMBO_END};
-
-/* -- */
-const uint16_t PROGMEM combo_ampersand[] = {KC_I, KC_E, COMBO_END};
-const uint16_t PROGMEM combo_at_sign[] = {KC_Q, KC_Y, COMBO_END};
-const uint16_t PROGMEM combo_backslash[] = {KC_D, KC_R, COMBO_END};
-const uint16_t PROGMEM combo_circumflex[] = {KC_T, KC_D, COMBO_END};
-const uint16_t PROGMEM combo_colon[] = {KC_C, KC_G, COMBO_END};
-const uint16_t PROGMEM combo_dollar[] = {KC_D, KC_L, COMBO_END};
-const uint16_t PROGMEM combo_equal[] = {KC_T, KC_H, COMBO_END};
-const uint16_t PROGMEM combo_exclamation_mark[] = {KC_O, KC_W, COMBO_END};
-const uint16_t PROGMEM combo_grave[] = {KC_T, KC_G, COMBO_END};
-const uint16_t PROGMEM combo_hash[] = {KC_I, KC_O, COMBO_END};
-const uint16_t PROGMEM combo_minus[] = {KC_T, KC_R, COMBO_END};
-const uint16_t PROGMEM combo_percent[] = {KC_O, KC_U, COMBO_END};
-const uint16_t PROGMEM combo_pipe[] = {KC_E, KC_U, COMBO_END};
-const uint16_t PROGMEM combo_plus[] = {KC_T, KC_L, COMBO_END};
-const uint16_t PROGMEM combo_question_mark[] = {KC_B, KC_O, COMBO_END};
-const uint16_t PROGMEM combo_quote[] = {KC_T, KC_N, COMBO_END};
-const uint16_t PROGMEM combo_quote_double[] = {KC_A, KC_U, COMBO_END};
-const uint16_t PROGMEM combo_semicolon[] = {KC_G, KC_H, COMBO_END};
-const uint16_t PROGMEM combo_slash[] = {KC_S, KC_L, COMBO_END};
-const uint16_t PROGMEM combo_star[] = {KC_S, KC_T, COMBO_END};
-const uint16_t PROGMEM combo_tilde[] = {KC_I, KC_U, COMBO_END};
-const uint16_t PROGMEM combo_underscore[] = {KC_S, KC_R, COMBO_END};
-
-const uint16_t PROGMEM combo_angle_bracket_left[] = {KC_C, KC_S, COMBO_END};
-const uint16_t PROGMEM combo_angle_bracket_right[] = {KC_S, KC_H, COMBO_END};
-
-const uint16_t PROGMEM combo_bracket_left[] = {KC_Q, KC_U, COMBO_END};
-const uint16_t PROGMEM combo_bracket_right[] = {KC_E, KC_Y, COMBO_END};
-const uint16_t PROGMEM combo_curly_bracket_left[] = {KC_X, KC_E, COMBO_END};
-const uint16_t PROGMEM combo_curly_bracket_right[] = {KC_I, KC_Q, COMBO_END};
-const uint16_t PROGMEM combo_parenthesis_left[] = {KC_X, KC_U, COMBO_END};
-const uint16_t PROGMEM combo_parenthesis_right[] = {KC_I, KC_Y, COMBO_END};
+/* Non qwerty */
+const uint16_t PROGMEM combo_euro[] = {KC_X, KC_Q, COMBO_END};
/* One hand special */
-const uint16_t PROGMEM combo_control_right[] = {LT(_NUMERIC, KC_ENT), KC_R, COMBO_END};
-const uint16_t PROGMEM combo_control_shift_right[] = {LT(_NUMERIC, KC_ENT), KC_S, COMBO_END};
-
-const uint16_t PROGMEM combo_shift_left[] = {KC_LCPO, KC_LALT, COMBO_END};
-// const uint16_t PROGMEM combo_altgr_left[] = {LT(_MOUSE, KC_COMM), KC_LALT, COMBO_END};
-// const uint16_t PROGMEM combo_del_left[] = {GUI_T(KC_ESC), KC_K, COMBO_END};
-const uint16_t PROGMEM combo_control_shift_left[] = {LT(_MOUSE, KC_COMM), KC_LALT, COMBO_END};
+const uint16_t PROGMEM combo_control_right[] = {LT(_NUMERIC, KC_ENT), KC_R, COMBO_END};
+const uint16_t PROGMEM combo_control_shift_right[] = {LT(_NUMERIC, KC_ENT), KC_S, COMBO_END};
+const uint16_t PROGMEM combo_shift_left[] = {LT(_MOUSE, KC_COMM), US_EACU, COMBO_END};
+const uint16_t PROGMEM combo_alt_left[] = {CTL_T(KC_SPACE), US_EACU, COMBO_END};
+const uint16_t PROGMEM combo_control_shift_left[] = {CTL_T(KC_SPACE), GUI_T(KC_ESC), COMBO_END};
/* Sequences fo keys */
combo_t key_combos[] = {
- [LEADER] = COMBO(combo_leader, KC_LEAD),
- [BOOTLOADER] = COMBO(combo_bootloader, QK_BOOTLOADER),
+ [LEADER] = COMBO(combo_leader, QK_LEAD),
+ [BOOTLOADER] = COMBO(combo_bootloader, QK_BOOTLOADER),
- [LAYER_ADJUST] = COMBO(combo_adjust, OSL(_ADJUST)),
- [LAYER_FN] = COMBO(combo_fn, OSL(_FN)),
- [LAYER_LEFT_HAND] = COMBO(combo_left_hand, OSL(_LEFT_HAND)),
-
- /* -- */
- // [ENTER_SHIFTED] = COMBO(combo_enter_shifted, S(KC_ENT)),
- [ALT_SHIFT] = COMBO(combo_alt_shift, A(S(XXXXXXX))),
- [CONTROL_SHIFT] = COMBO(combo_control_shift, C(S(XXXXXXX))),
- [CONTROL_ALT] = COMBO(combo_control_alt, C(A(XXXXXXX))),
- [CONTROL_SHIFT_ALT] = COMBO(combo_control_shift_alt, C(S(A(XXXXXXX)))),
- [RIGHT_ALT] = COMBO(combo_right_alt, KC_RALT),
+ [LAYER_ADJ] = COMBO(combo_ADJ, OSL(_ADJ)),
+ [LAYER_FN] = COMBO(combo_fn, OSL(_FN)),
+ [LAYER_LEFT_HAND] = COMBO(combo_left_hand, OSL(_LEFT_HAND)),
+ [LAYER_MOUSE] = COMBO(combo_mouse, TG(_MOUSE)),
+ [LAYER_MOUSE_BACK] = COMBO(combo_mouse_back, TG(_MOUSE)),
/* French */
- [E_ACUTE] = COMBO(combo_e_acute, CS_E_ACUTE),
- [C_CEDILLA] = COMBO(combo_c_cedilla, CS_C_CEDILLA),
- [E_A] = COMBO(combo_ea, CS_AE),
- [E_O] = COMBO(combo_eo, CS_OE),
+ [C_CEDILLA] = COMBO(combo_c_cedilla, US_CCED),
+ [E_A] = COMBO(combo_ea, US_AE),
+ [E_O] = COMBO(combo_eo, US_OE),
- [A_GRAVE] = COMBO(combo_a_grave, CS_A_GRAVE),
- [E_GRAVE] = COMBO(combo_e_grave, CS_E_GRAVE),
- [I_GRAVE] = COMBO(combo_i_grave, CS_I_GRAVE),
- [O_GRAVE] = COMBO(combo_o_grave, CS_O_GRAVE),
- [U_GRAVE] = COMBO(combo_u_grave, CS_U_GRAVE),
+ [A_GRAVE] = COMBO(combo_a_grave, CS_A_GRAVE),
+ [E_GRAVE] = COMBO(combo_e_grave, CS_E_GRAVE),
+ [U_GRAVE] = COMBO(combo_u_grave, CS_U_GRAVE),
- [A_CIRCUMFLEX] = COMBO(combo_a_circumflex, CS_A_CIRCUMFLEX),
- [E_CIRCUMFLEX] = COMBO(combo_e_circumflex, CS_E_CIRCUMFLEX),
- [I_CIRCUMFLEX] = COMBO(combo_i_circumflex, CS_I_CIRCUMFLEX),
- [O_CIRCUMFLEX] = COMBO(combo_o_circumflex, CS_O_CIRCUMFLEX),
- [U_CIRCUMFLEX] = COMBO(combo_u_circumflex, CS_U_CIRCUMFLEX),
+ [A_CIRCUMFLEX] = COMBO(combo_a_circumflex, CS_A_CIRCUMFLEX),
+ [E_CIRCUMFLEX] = COMBO(combo_e_circumflex, CS_E_CIRCUMFLEX),
+ [I_CIRCUMFLEX] = COMBO(combo_i_circumflex, CS_I_CIRCUMFLEX),
+ [O_CIRCUMFLEX] = COMBO(combo_o_circumflex, CS_O_CIRCUMFLEX),
+ [U_CIRCUMFLEX] = COMBO(combo_u_circumflex, CS_U_CIRCUMFLEX),
- [A_DIAERESIS] = COMBO(combo_a_diaeresis, CS_A_DIAERESIS),
- [E_DIAERESIS] = COMBO(combo_e_diaeresis, CS_E_DIAERESIS),
- [I_DIAERESIS] = COMBO(combo_i_diaeresis, CS_I_DIAERESIS),
- [O_DIAERESIS] = COMBO(combo_o_diaeresis, CS_O_DIAERESIS),
- [U_DIAERESIS] = COMBO(combo_u_diaeresis, CS_U_DIAERESIS),
- [Y_DIAERESIS] = COMBO(combo_y_diaeresis, CS_Y_DIAERESIS),
+ [E_DIAERESIS] = COMBO(combo_e_diaeresis, CS_E_DIAERESIS),
+ [I_DIAERESIS] = COMBO(combo_i_diaeresis, CS_I_DIAERESIS),
+ [U_DIAERESIS] = COMBO(combo_u_diaeresis, CS_U_DIAERESIS),
+ [Y_DIAERESIS] = COMBO(combo_y_diaeresis, CS_Y_DIAERESIS),
/* -- */
- [AMPERSAND] = COMBO(combo_ampersand, KC_AMPR),
- [AT_SIGN] = COMBO(combo_at_sign, KC_AT),
- [BACKSLASH] = COMBO(combo_backslash, KC_BSLS),
- [CIRCUMFLEX] = COMBO(combo_circumflex, KC_CIRC),
- [COLON] = COMBO(combo_colon, KC_COLON),
- [DOLLAR] = COMBO(combo_dollar, KC_DLR),
- [EQUAL] = COMBO(combo_equal, KC_EQL),
- [EXCLAMATION_MARK] = COMBO(combo_exclamation_mark, KC_EXCLAIM),
- [GRAVE] = COMBO(combo_grave, KC_GRV),
- [HASH] = COMBO(combo_hash, KC_HASH),
- [MINUS] = COMBO(combo_minus, KC_MINS),
- [PERCENT] = COMBO(combo_percent, KC_PERC),
- [PIPE] = COMBO(combo_pipe, KC_PIPE),
- [PLUS] = COMBO(combo_plus, KC_PLUS),
- [QUESTION_MARK] = COMBO(combo_question_mark, KC_QUESTION),
- [QUOTE] = COMBO(combo_quote, KC_QUOTE),
- [QUOTE_DOUBLE] = COMBO(combo_quote_double, KC_DOUBLE_QUOTE),
- [SEMICOLON] = COMBO(combo_semicolon, KC_SEMICOLON),
- [SLASH] = COMBO(combo_slash, KC_SLSH),
- [STAR] = COMBO(combo_star, KC_ASTR),
- [TILDE] = COMBO(combo_tilde, KC_TILD),
- [UNDERSCORE] = COMBO(combo_underscore, KC_UNDS),
+ [AMPERSAND] = COMBO(combo_ampersand, KC_AMPERSAND),
+ [AT_SIGN] = COMBO(combo_at_sign, KC_AT),
+ [BACKSLASH] = COMBO(combo_backslash, KC_BACKSLASH),
+ [CIRCUMFLEX] = COMBO(combo_circumflex, KC_CIRCUMFLEX),
+ [COLON] = COMBO(combo_colon, KC_COLON),
+ [DOLLAR] = COMBO(combo_dollar, KC_DOLLAR),
+ [EQUAL] = COMBO(combo_equal, KC_EQUAL),
+ [EXCLAMATION_MARK] = COMBO(combo_exclamation_mark, KC_EXCLAIM),
+ [GRAVE] = COMBO(combo_grave, KC_GRAVE),
+ [HASH] = COMBO(combo_hash, KC_HASH),
+ [MINUS] = COMBO(combo_minus, KC_MINUS),
+ [PERCENT] = COMBO(combo_percent, KC_PERCENT),
+ [PIPE] = COMBO(combo_pipe, KC_PIPE),
+ [PLUS] = COMBO(combo_plus, KC_PLUS),
+ [QUESTION_MARK] = COMBO(combo_question_mark, KC_QUESTION),
+ [QUOTE] = COMBO(combo_quote, KC_QUOTE),
+ [QUOTE_DOUBLE] = COMBO(combo_quote_double, KC_DOUBLE_QUOTE),
+ [SEMICOLON] = COMBO(combo_semicolon, KC_SEMICOLON),
+ [SLASH] = COMBO(combo_slash, KC_SLASH),
+ [STAR] = COMBO(combo_star, KC_ASTERISK),
+ [TILDE] = COMBO(combo_tilde, KC_TILDE),
+ [UNDERSCORE] = COMBO(combo_underscore, KC_UNDERSCORE),
- [ANGLE_BRACKET_LEFT] = COMBO(combo_angle_bracket_left, KC_LABK),
- [ANGLE_BRACKET_RIGHT] = COMBO(combo_angle_bracket_right, KC_RABK),
+ [ANGLE_BRACKET_LEFT] = COMBO(combo_angle_bracket_left, KC_LEFT_ANGLE_BRACKET),
+ [ANGLE_BRACKET_RIGHT] = COMBO(combo_angle_bracket_right, KC_RIGHT_ANGLE_BRACKET),
- [BRACKET_LEFT] = COMBO(combo_bracket_left, KC_LEFT_BRACKET),
- [BRACKET_RIGHT] = COMBO(combo_bracket_right, KC_RIGHT_BRACKET),
- [CURLY_BRACKET_LEFT] = COMBO(combo_curly_bracket_left, KC_LEFT_CURLY_BRACE),
- [CURLY_BRACKET_RIGHT] = COMBO(combo_curly_bracket_right, KC_RIGHT_CURLY_BRACE),
- [PARENTHESIS_LEFT] = COMBO(combo_parenthesis_left, KC_LEFT_PAREN),
- [PARENTHESIS_RIGHT] COMBO(combo_parenthesis_right, KC_RIGHT_PAREN),
+ [BRACKET_LEFT] = COMBO(combo_bracket_left, KC_LEFT_BRACKET),
+ [BRACKET_RIGHT] = COMBO(combo_bracket_right, KC_RIGHT_BRACKET),
+ [CURLY_BRACKET_LEFT] = COMBO(combo_curly_bracket_left, KC_LEFT_CURLY_BRACE),
+ [CURLY_BRACKET_RIGHT] = COMBO(combo_curly_bracket_right, KC_RIGHT_CURLY_BRACE),
+ [PARENTHESIS_LEFT] = COMBO(combo_parenthesis_left, KC_LEFT_PAREN),
+ [PARENTHESIS_RIGHT] COMBO(combo_parenthesis_right, KC_RIGHT_PAREN),
+
+ /* Non qwerty */
+ [EURO] COMBO(combo_euro, US_EURO),
/* One hand special */
- [CONTROL_RIGHT] = COMBO(combo_control_right, KC_RCTL),
- [CONTROL_SHIFT_RIGHT] = COMBO(combo_control_shift_right, C(S(XXXXXXX))),
+ [CONTROL_RIGHT] = COMBO(combo_control_right, KC_RCTL),
+ [CONTROL_SHIFT_RIGHT] = COMBO(combo_control_shift_right, C(S(XXXXXXX))),
- [SHIFT_LEFT] = COMBO(combo_shift_left, KC_LSFT),
- // [ALTGR_LEFT] = COMBO(combo_altgr_left, KC_ALGR),
- [CONTROL_SHIFT_LEFT] = COMBO(combo_control_shift_left, C(S(XXXXXXX))),
- // [DEL_LEFT] = COMBO(combo_del_left, KC_BSPC),
+ [ALT_LEFT] = COMBO(combo_alt_left, KC_LALT),
+ [SHIFT_LEFT] = COMBO(combo_shift_left, KC_LSFT),
+ [CONTROL_SHIFT_LEFT] = COMBO(combo_control_shift_left, C(S(XXXXXXX))),
};
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/leader.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/leader.c
index 7cfd30af6d4..1964fb428fe 100644
--- a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/leader.c
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/features/leader.c
@@ -2,267 +2,207 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
+#include "keycodes.h"
+#include
-LEADER_EXTERNS();
+void leader_end_user(void) {
+ if (leader_sequence_two_keys(KC_M, KC_S)) {
+ SEND_STRING("f@linguenheld.fr");
+ } else if (leader_sequence_two_keys(KC_M, KC_L)) {
+ SEND_STRING("florent@linguenheld.fr");
+ } else if (leader_sequence_two_keys(KC_F, KC_L)) {
+ SEND_STRING("flinguenheld");
-void matrix_scan_user(void) {
- LEADER_DICTIONARY() {
- leading = false;
- leader_end();
+ } else if (leader_sequence_three_keys(KC_D, KC_O, KC_T)) {
+ SEND_STRING("https://github.com/flinguenheld/dotfiles");
+ } else if (leader_sequence_three_keys(KC_H, KC_U, KC_B)) {
+ SEND_STRING("https://github.com/flinguenheld/");
+ } else if (leader_sequence_three_keys(KC_Q, KC_M, KC_K)) {
+ SEND_STRING("$HOME/qmk_firmware/keyboards/splitkb/aurora/sweep/keymaps/sweep_keymap");
+ } else if (leader_sequence_three_keys(KC_Q, KC_M, KC_C)) {
+ SEND_STRING("qmk compile && qmk flash");
- // SEQ_ONE_KEY(KC_F) {
- // // Anything you can do in a macro.
- // SEND_STRING("QMK is awesome."); }
+ } else if (leader_sequence_three_keys(KC_T, KC_E, KC_S)) {
+ SEND_STRING("test01234");
+ } else if (leader_sequence_three_keys(KC_A, KC_D, KC_M)) {
+ SEND_STRING("admin01234");
+ } else if (leader_sequence_one_key(KC_C)) {
+ SEND_STRING(" | xclip -r -selection clipboard");
- SEQ_TWO_KEYS(KC_M, KC_S) {
- SEND_STRING("f@linguenheld.fr"); }
- SEQ_TWO_KEYS(KC_M, KC_L) {
- SEND_STRING("florent@linguenheld.fr"); }
- SEQ_TWO_KEYS(KC_F, KC_L) {
- SEND_STRING("FLinguenheld"); }
+ /* Keyring requests, improbable combinaisons used by i3 */
+ } else if (leader_sequence_three_keys(KC_G, KC_I, KC_T)) {
+ register_code(KC_LEFT_GUI);
+ register_code(KC_LEFT_SHIFT);
+ register_code(KC_LEFT_CTRL);
+ register_code(KC_0);
+ unregister_code(KC_0);
+ unregister_code(KC_LEFT_GUI);
+ unregister_code(KC_LEFT_SHIFT);
+ unregister_code(KC_LEFT_CTRL);
- SEQ_THREE_KEYS(KC_T, KC_E, KC_S) {
- SEND_STRING("test01234"); }
- SEQ_THREE_KEYS(KC_A, KC_D, KC_M) {
- SEND_STRING("admin01234"); }
+ } else if (leader_sequence_three_keys(KC_M, KC_A, KC_I)) {
+ register_code(KC_LEFT_GUI);
+ register_code(KC_LEFT_SHIFT);
+ register_code(KC_LEFT_CTRL);
+ register_code(KC_1);
+ unregister_code(KC_1);
+ unregister_code(KC_LEFT_GUI);
+ unregister_code(KC_LEFT_SHIFT);
+ unregister_code(KC_LEFT_CTRL);
- SEQ_ONE_KEY(KC_C) {
- SEND_STRING(" | xclip -r -selection clipboard"); }
+ } else if (leader_sequence_three_keys(KC_P, KC_A, KC_S)) {
+ register_code(KC_LEFT_GUI);
+ register_code(KC_LEFT_SHIFT);
+ register_code(KC_LEFT_CTRL);
+ register_code(KC_2);
+ unregister_code(KC_2);
+ unregister_code(KC_LEFT_GUI);
+ unregister_code(KC_LEFT_SHIFT);
+ unregister_code(KC_LEFT_CTRL);
- /* Degree */
- SEQ_THREE_KEYS(KC_D, KC_E, KC_G) {
- send_unicode_string("°"); }
+ /* ----- */
+ } else if (leader_sequence_three_keys(KC_D, KC_E, KC_G)) {
+ tap_code16(US_DEG); // °
+ } else if (leader_sequence_three_keys(KC_D, KC_I, KC_A)) {
+ tap_code16(US_OSTR); // ø
+ } else if (leader_sequence_three_keys(KC_S, KC_E, KC_C)) {
+ tap_code16(US_SECT); // §
/* Copyright / Register */
- SEQ_THREE_KEYS(KC_C, KC_O, KC_P) {
- send_unicode_string("©"); }
- SEQ_THREE_KEYS(KC_R, KC_E, KC_G) {
- send_unicode_string("®"); }
-
- /* Diameter */
- SEQ_THREE_KEYS(KC_D, KC_I, KC_A) {
- send_unicode_string("ø"); }
- SEQ_FOUR_KEYS(KC_D, KC_I, KC_A, KC_M) {
- send_unicode_string("Ø"); }
+ } else if (leader_sequence_three_keys(KC_C, KC_O, KC_P)) {
+ tap_code16(US_COPY); // ©
+ } else if (leader_sequence_three_keys(KC_R, KC_E, KC_G)) {
+ tap_code16(US_REGD); // ®
/* Currency */
- SEQ_THREE_KEYS(KC_E, KC_U, KC_R) {
- send_unicode_string("€"); }
- SEQ_THREE_KEYS(KC_P, KC_O, KC_U) {
- send_unicode_string("£"); }
- SEQ_THREE_KEYS(KC_Y, KC_E, KC_N) {
- send_unicode_string("¥"); }
- SEQ_THREE_KEYS(KC_C, KC_E, KC_N) {
- send_unicode_string("¢"); }
+ } else if (leader_sequence_three_keys(KC_E, KC_U, KC_R)) {
+ tap_code16(US_EURO); // €
+ } else if (leader_sequence_three_keys(KC_P, KC_O, KC_U)) {
+ tap_code16(US_PND); // £
+ } else if (leader_sequence_three_keys(KC_Y, KC_E, KC_N)) {
+ tap_code16(US_YEN); // ¥
+ } else if (leader_sequence_three_keys(KC_C, KC_E, KC_N)) {
+ tap_code16(US_CENT); // ¢
/* Fractions */
- SEQ_THREE_KEYS(KC_F, KC_C, KC_T) {
- send_unicode_string("¼"); }
- SEQ_THREE_KEYS(KC_F, KC_C, KC_G) {
- send_unicode_string("½"); }
- SEQ_THREE_KEYS(KC_F, KC_H, KC_T) {
- send_unicode_string("¾"); }
+ } else if (leader_sequence_three_keys(KC_F, KC_C, KC_T)) {
+ tap_code16(US_QRTR); // ¼
+ } else if (leader_sequence_three_keys(KC_F, KC_C, KC_G)) {
+ tap_code16(US_HALF); // ½
+ } else if (leader_sequence_three_keys(KC_F, KC_H, KC_T)) {
+ tap_code16(US_TQTR); // ¾
/* Maths */
- SEQ_THREE_KEYS(KC_M, KC_U, KC_L) {
- send_unicode_string("×"); }
- SEQ_THREE_KEYS(KC_D, KC_I, KC_V) {
- send_unicode_string("÷"); }
- SEQ_TWO_KEYS(KC_P, KC_M) {
- send_unicode_string("±"); }
- SEQ_THREE_KEYS(KC_I, KC_N, KC_E) {
- send_unicode_string("≠"); }
- SEQ_THREE_KEYS(KC_A, KC_L, KC_M) {
- send_unicode_string("≈"); }
- SEQ_THREE_KEYS(KC_S, KC_Q, KC_U) {
- send_unicode_string("√"); }
- SEQ_THREE_KEYS(KC_I, KC_N, KC_F) {
- send_unicode_string("∞"); }
- SEQ_TWO_KEYS(KC_LABK, KC_LABK) {
- send_unicode_string("≤"); }
- SEQ_TWO_KEYS(KC_RABK, KC_RABK) {
- send_unicode_string("≥"); }
+ } else if (leader_sequence_three_keys(KC_M, KC_U, KC_L)) {
+ tap_code16(US_MUL); // ×
+ } else if (leader_sequence_three_keys(KC_D, KC_I, KC_V)) {
+ tap_code16(US_DIV); // ÷
+ } else if (leader_sequence_two_keys(KC_P, KC_M)) {
+ send_unicode_string("±");
+ } else if (leader_sequence_three_keys(KC_I, KC_N, KC_E)) {
+ send_unicode_string("≠");
+ } else if (leader_sequence_three_keys(KC_A, KC_L, KC_M)) {
+ send_unicode_string("≈");
+ } else if (leader_sequence_three_keys(KC_S, KC_Q, KC_U)) {
+ send_unicode_string("√");
+ } else if (leader_sequence_three_keys(KC_I, KC_N, KC_F)) {
+ send_unicode_string("∞");
+ } else if (leader_sequence_two_keys(KC_LABK, KC_LABK)) {
+ send_unicode_string("≤");
+ } else if (leader_sequence_two_keys(KC_RABK, KC_RABK)) {
+ send_unicode_string("≥");
/* Greek */
- SEQ_TWO_KEYS(KC_P, KC_I) {
- send_unicode_string("π"); }
- SEQ_THREE_KEYS(KC_P, KC_I, KC_I) {
- send_unicode_string("Π"); }
+ } else if (leader_sequence_three_keys(KC_B, KC_E, KC_T)) {
+ tap_code16(US_SS); // ß
+ } else if (leader_sequence_three_keys(KC_M, KC_I, KC_C)) {
+ tap_code16(US_MICR); // µ
+ } else if (leader_sequence_two_keys(KC_P, KC_I)) {
+ send_unicode_string("π");
+ } else if (leader_sequence_three_keys(KC_P, KC_I, KC_I)) {
+ send_unicode_string("Π");
- SEQ_THREE_KEYS(KC_O, KC_M, KC_E) {
- send_unicode_string("ω"); }
- SEQ_FOUR_KEYS(KC_O, KC_M, KC_E, KC_G) {
- send_unicode_string("Ω"); }
+ } else if (leader_sequence_three_keys(KC_O, KC_M, KC_E)) {
+ send_unicode_string("ω");
+ } else if (leader_sequence_four_keys(KC_O, KC_M, KC_E, KC_G)) {
+ send_unicode_string("Ω");
/* Icons */
- SEQ_THREE_KEYS(KC_F, KC_L, KC_A) {
- send_unicode_string("⚡"); }
- SEQ_THREE_KEYS(KC_S, KC_T, KC_A) {
- send_unicode_string("⭐"); }
- SEQ_THREE_KEYS(KC_S, KC_P, KC_A) {
- send_unicode_string("✨"); }
- SEQ_THREE_KEYS(KC_P, KC_O, KC_P) {
- send_unicode_string("🎉"); }
- SEQ_THREE_KEYS(KC_R, KC_E, KC_C) {
- send_unicode_string("♻️"); }
- SEQ_THREE_KEYS(KC_L, KC_O, KC_V) {
- send_unicode_string("❤️"); }
- SEQ_THREE_KEYS(KC_F, KC_I, KC_R) {
- send_unicode_string("🔥"); }
- SEQ_THREE_KEYS(KC_B, KC_O, KC_M) {
- send_unicode_string("💣"); }
- SEQ_FOUR_KEYS(KC_B, KC_O, KC_U, KC_M) {
- send_unicode_string("💥"); }
- SEQ_THREE_KEYS(KC_R, KC_O, KC_C) {
- send_unicode_string("🚀"); }
- SEQ_THREE_KEYS(KC_T, KC_E, KC_L) {
- send_unicode_string("🔭"); }
- SEQ_THREE_KEYS(KC_M, KC_A, KC_G) {
- send_unicode_string("🔎"); }
- SEQ_THREE_KEYS(KC_W, KC_A, KC_R) {
- send_unicode_string("⚠️"); }
+ } else if (leader_sequence_three_keys(KC_L, KC_O, KC_V)) {
+ send_unicode_string("♥");
+ } else if (leader_sequence_three_keys(KC_F, KC_L, KC_A)) {
+ send_unicode_string("⚡");
+ } else if (leader_sequence_three_keys(KC_S, KC_T, KC_A)) {
+ send_unicode_string("✶");
+ } else if (leader_sequence_three_keys(KC_B, KC_U, KC_L)) {
+ send_unicode_string("💡");
+ } else if (leader_sequence_four_keys(KC_I, KC_N, KC_F, KC_O)) {
+ send_unicode_string("ℹ️");
+ } else if (leader_sequence_three_keys(KC_G, KC_E, KC_A)) {
+ send_unicode_string("⚙️");
- SEQ_THREE_KEYS(KC_B, KC_U, KC_L) {
- send_unicode_string("💡"); }
- SEQ_FOUR_KEYS(KC_I, KC_N, KC_F, KC_O) {
- send_unicode_string("ℹ️"); }
- SEQ_THREE_KEYS(KC_G, KC_E, KC_A) {
- send_unicode_string("⚙️"); }
- SEQ_THREE_KEYS(KC_L, KC_I, KC_N) {
- send_unicode_string("🔗"); }
- SEQ_THREE_KEYS(KC_P, KC_I, KC_N) {
- send_unicode_string("📌"); }
- SEQ_FOUR_KEYS(KC_F, KC_L, KC_A, KC_G) {
- send_unicode_string("🚩"); }
- SEQ_THREE_KEYS(KC_B, KC_A, KC_L) {
- send_unicode_string("🎈"); }
- SEQ_THREE_KEYS(KC_G, KC_I, KC_F) {
- send_unicode_string("🎁"); }
+ } else if (leader_sequence_one_key(KC_V)) {
+ send_unicode_string("✓");
+ } else if (leader_sequence_two_keys(KC_V, KC_B)) {
+ send_unicode_string("✔");
+ } else if (leader_sequence_two_keys(KC_V, KC_V)) {
+ send_unicode_string("✅");
- SEQ_THREE_KEYS(KC_P, KC_E, KC_N) {
- send_unicode_string("✏️"); }
- SEQ_THREE_KEYS(KC_K, KC_E, KC_Y) {
- send_unicode_string("🔑"); }
- SEQ_THREE_KEYS(KC_B, KC_O, KC_X) {
- send_unicode_string("🧰"); }
+ } else if (leader_sequence_one_key(KC_X)) {
+ send_unicode_string("✗");
+ } else if (leader_sequence_two_keys(KC_X, KC_B)) {
+ send_unicode_string("✘");
- SEQ_TWO_KEYS(KC_O, KC_K) {
- send_unicode_string("👌"); }
- SEQ_THREE_KEYS(KC_O, KC_W, KC_D) {
- send_unicode_string("⛔"); }
-
- SEQ_ONE_KEY(KC_V) {
- send_unicode_string("✓"); }
- SEQ_TWO_KEYS(KC_V, KC_B) {
- send_unicode_string("☑"); }
- SEQ_TWO_KEYS(KC_V, KC_G) {
- send_unicode_string("✅"); }
-
- SEQ_ONE_KEY(KC_X) {
- send_unicode_string("✗"); }
- SEQ_TWO_KEYS(KC_X, KC_B) {
- send_unicode_string("☒"); }
- SEQ_TWO_KEYS(KC_X, KC_G) {
- send_unicode_string("❎"); }
- SEQ_TWO_KEYS(KC_X, KC_R) {
- send_unicode_string("❌"); }
-
- SEQ_ONE_KEY(KC_QUESTION) {
- send_unicode_string("❔"); }
- SEQ_ONE_KEY(KC_EXCLAIM) {
- send_unicode_string("❕"); }
- SEQ_TWO_KEYS(KC_QUESTION, KC_QUESTION) {
- send_unicode_string("❓"); }
- SEQ_TWO_KEYS(KC_EXCLAIM, KC_EXCLAIM) {
- send_unicode_string("❗"); }
-
- SEQ_THREE_KEYS(KC_C, KC_O, KC_F) {
- send_unicode_string("☕"); }
- SEQ_THREE_KEYS(KC_U, KC_M, KC_B) {
- send_unicode_string("☔"); }
-
- SEQ_THREE_KEYS(KC_L, KC_O, KC_L) {
- send_unicode_string("😀"); }
- SEQ_THREE_KEYS(KC_M, KC_D, KC_R) {
- send_unicode_string("🤣"); }
- SEQ_THREE_KEYS(KC_K, KC_I, KC_S) {
- send_unicode_string("😙"); }
- SEQ_THREE_KEYS(KC_A, KC_N, KC_G) {
- send_unicode_string("😇"); }
- SEQ_THREE_KEYS(KC_G, KC_L, KC_A) {
- send_unicode_string("😎"); }
- SEQ_THREE_KEYS(KC_A, KC_N, KC_G) {
- send_unicode_string("🤬"); }
- SEQ_THREE_KEYS(KC_F, KC_E, KC_A) {
- send_unicode_string("😱"); }
- SEQ_THREE_KEYS(KC_N, KC_E, KC_U) {
- send_unicode_string("😐"); }
- SEQ_THREE_KEYS(KC_T, KC_H, KC_I) {
- send_unicode_string("🤔"); }
- SEQ_THREE_KEYS(KC_Z, KC_I, KC_P) {
- send_unicode_string("🤐"); }
- SEQ_THREE_KEYS(KC_S, KC_U, KC_R) {
- send_unicode_string("😯"); }
- SEQ_THREE_KEYS(KC_R, KC_O, KC_L) {
- send_unicode_string("🙄"); }
- SEQ_THREE_KEYS(KC_M, KC_O, KC_O) {
- send_unicode_string("🌝"); }
- SEQ_THREE_KEYS(KC_H, KC_U, KC_G) {
- send_unicode_string("🫂"); }
-
- SEQ_THREE_KEYS(KC_H, KC_E, KC_N) {
- send_unicode_string("🐔"); }
- SEQ_THREE_KEYS(KC_R, KC_O, KC_O) {
- send_unicode_string("🐓"); }
- SEQ_THREE_KEYS(KC_D, KC_U, KC_C) {
- send_unicode_string("🦆"); }
- SEQ_THREE_KEYS(KC_P, KC_E, KC_A) {
- send_unicode_string("🦚"); }
- SEQ_THREE_KEYS(KC_B, KC_I, KC_R) {
- send_unicode_string("🐦"); }
+ } else if (leader_sequence_one_key(KC_QUESTION)) {
+ send_unicode_string("❔");
+ } else if (leader_sequence_one_key(KC_EXCLAIM)) {
+ send_unicode_string("❗");
+ } else if (leader_sequence_two_keys(KC_QUESTION, KC_QUESTION)) {
+ send_unicode_string("❓");
+ } else if (leader_sequence_two_keys(KC_EXCLAIM, KC_EXCLAIM)) {
+ send_unicode_string("❕");
/* Subscript / superscript */
- SEQ_THREE_KEYS(KC_U, KC_P, KC_F) {
- send_unicode_string("⁰"); }
- SEQ_THREE_KEYS(KC_D, KC_N, KC_F) {
- send_unicode_string("₀"); }
- SEQ_THREE_KEYS(KC_U, KC_P, KC_C) {
- send_unicode_string("¹"); }
- SEQ_THREE_KEYS(KC_D, KC_N, KC_C) {
- send_unicode_string("₁"); }
- SEQ_THREE_KEYS(KC_U, KC_P, KC_G) {
- send_unicode_string("²"); }
- SEQ_THREE_KEYS(KC_D, KC_N, KC_G) {
- send_unicode_string("₂"); }
- SEQ_THREE_KEYS(KC_U, KC_P, KC_H) {
- send_unicode_string("³"); }
- SEQ_THREE_KEYS(KC_D, KC_N, KC_H) {
- send_unicode_string("₃"); }
- SEQ_THREE_KEYS(KC_U, KC_P, KC_T) {
- send_unicode_string("⁴"); }
- SEQ_THREE_KEYS(KC_D, KC_N, KC_T) {
- send_unicode_string("₄"); }
- SEQ_THREE_KEYS(KC_U, KC_P, KC_S) {
- send_unicode_string("⁵"); }
- SEQ_THREE_KEYS(KC_D, KC_N, KC_S) {
- send_unicode_string("₅"); }
- SEQ_THREE_KEYS(KC_U, KC_P, KC_R) {
- send_unicode_string("⁶"); }
- SEQ_THREE_KEYS(KC_D, KC_N, KC_R) {
- send_unicode_string("₆"); }
- SEQ_THREE_KEYS(KC_U, KC_P, KC_P) {
- send_unicode_string("⁷"); }
- SEQ_THREE_KEYS(KC_D, KC_N, KC_P) {
- send_unicode_string("₇"); }
- SEQ_THREE_KEYS(KC_U, KC_P, KC_D) {
- send_unicode_string("⁸"); }
- SEQ_THREE_KEYS(KC_D, KC_N, KC_D) {
- send_unicode_string("₈"); }
- SEQ_THREE_KEYS(KC_U, KC_P, KC_L) {
- send_unicode_string("⁹"); }
- SEQ_THREE_KEYS(KC_D, KC_N, KC_L) {
- send_unicode_string("₉"); }
-
+ } else if (leader_sequence_three_keys(KC_U, KC_P, KC_N)) {
+ send_unicode_string("⁰");
+ } else if (leader_sequence_three_keys(KC_D, KC_N, KC_N)) {
+ send_unicode_string("₀");
+ } else if (leader_sequence_three_keys(KC_U, KC_P, KC_C)) {
+ tap_code16(US_SUP1); // ¹
+ } else if (leader_sequence_three_keys(KC_D, KC_N, KC_C)) {
+ send_unicode_string("₁");
+ } else if (leader_sequence_three_keys(KC_U, KC_P, KC_G)) {
+ tap_code16(US_SUP2); // ²
+ } else if (leader_sequence_three_keys(KC_D, KC_N, KC_G)) {
+ send_unicode_string("₂");
+ } else if (leader_sequence_three_keys(KC_U, KC_P, KC_H)) {
+ tap_code16(US_SUP3); // ³
+ } else if (leader_sequence_three_keys(KC_D, KC_N, KC_H)) {
+ send_unicode_string("₃");
+ } else if (leader_sequence_three_keys(KC_U, KC_P, KC_T)) {
+ send_unicode_string("⁴");
+ } else if (leader_sequence_three_keys(KC_D, KC_N, KC_T)) {
+ send_unicode_string("₄");
+ } else if (leader_sequence_three_keys(KC_U, KC_P, KC_S)) {
+ send_unicode_string("⁵");
+ } else if (leader_sequence_three_keys(KC_D, KC_N, KC_S)) {
+ send_unicode_string("₅");
+ } else if (leader_sequence_three_keys(KC_U, KC_P, KC_R)) {
+ send_unicode_string("⁶");
+ } else if (leader_sequence_three_keys(KC_D, KC_N, KC_R)) {
+ send_unicode_string("₆");
+ } else if (leader_sequence_three_keys(KC_U, KC_P, KC_P)) {
+ send_unicode_string("⁷");
+ } else if (leader_sequence_three_keys(KC_D, KC_N, KC_P)) {
+ send_unicode_string("₇");
+ } else if (leader_sequence_three_keys(KC_U, KC_P, KC_D)) {
+ send_unicode_string("⁸");
+ } else if (leader_sequence_three_keys(KC_D, KC_N, KC_D)) {
+ send_unicode_string("₈");
+ } else if (leader_sequence_three_keys(KC_U, KC_P, KC_L)) {
+ send_unicode_string("⁹");
+ } else if (leader_sequence_three_keys(KC_D, KC_N, KC_L)) {
+ send_unicode_string("₉");
};
}
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keycodes.h b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keycodes.h
index b90b28fda41..4439f958b7e 100644
--- a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keycodes.h
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keycodes.h
@@ -2,43 +2,34 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
+#include "keymap_us_extended.h"
-enum layers {
- _BASE,
- _NUMERIC,
- _ARROWS,
- _MOUSE,
- _ADJUST,
- _FN,
- _LEFT_HAND,
+enum custom_layers {
+ _BASE,
+ _NUMERIC,
+ _ARROWS,
+ _MOUSE,
+ _ADJ,
+ _FN,
+ _LEFT_HAND,
};
enum custom_keys {
- UNICODE = SAFE_RANGE, // Shortcut to write unicodes, see numeric layer
+ UNICODE = QK_KB_0, // Replace SAFE_RANGE, see pr #19909
- /* See auto-shift */
- CS_E_ACUTE,
+ /* See auto-shift */
+ CS_A_GRAVE,
+ CS_E_GRAVE,
+ CS_U_GRAVE,
- CS_A_GRAVE,
- CS_E_GRAVE,
- CS_I_GRAVE,
- CS_O_GRAVE,
- CS_U_GRAVE,
+ CS_A_CIRCUMFLEX,
+ CS_E_CIRCUMFLEX,
+ CS_I_CIRCUMFLEX,
+ CS_O_CIRCUMFLEX,
+ CS_U_CIRCUMFLEX,
- CS_C_CEDILLA,
- CS_AE,
- CS_OE,
-
- CS_A_CIRCUMFLEX,
- CS_E_CIRCUMFLEX,
- CS_I_CIRCUMFLEX,
- CS_O_CIRCUMFLEX,
- CS_U_CIRCUMFLEX,
-
- CS_A_DIAERESIS,
- CS_E_DIAERESIS,
- CS_I_DIAERESIS,
- CS_O_DIAERESIS,
- CS_U_DIAERESIS,
- CS_Y_DIAERESIS,
+ CS_E_DIAERESIS,
+ CS_I_DIAERESIS,
+ CS_U_DIAERESIS,
+ CS_Y_DIAERESIS,
};
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keymap.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keymap.c
index 50fb7909f37..f024859e7cc 100644
--- a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keymap.c
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/keymap.c
@@ -17,7 +17,7 @@
#include QMK_KEYBOARD_H
#include "keycodes.h"
-
+// clang-format off
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
/* Macros */
@@ -25,14 +25,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case UNICODE:
if (record->event.pressed) {
- register_code(KC_LCTL);
- register_code(KC_LSFT);
- tap_code16(KC_U);
- } else {
- unregister_code(KC_LCTL);
- unregister_code(KC_LSFT);
- }
- break;
+ tap_code16(C(S(KC_U)));
+ } break;
}
return true;
@@ -46,11 +40,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
KC_A , KC_I , KC_E , KC_U , KC_TAB , KC_V , KC_T , KC_S , KC_R , KC_N ,
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
- KC_LALT , KC_X , KC_Q , KC_Y , KC_K , KC_Z , KC_C , KC_G , KC_H , KC_M ,
+ US_EACU , KC_X , KC_Q , KC_Y , KC_K , KC_Z , KC_C , KC_G , KC_H , KC_M ,
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
// |-------------------------+-------------------------| |-------------------------+-------------------------|
- LT(_MOUSE, KC_COMM) , KC_LCPO , LT(_NUMERIC, KC_ENT) , LT(_ARROWS, KC_DOT)
- // |-------------------------+----/* Space ctl */------| |-------------------------+-------------------------|
+ LT(_MOUSE, KC_COMM) , CTL_T(KC_SPACE) , LT(_NUMERIC, KC_ENT) , LT(_ARROWS, KC_DOT)
+ // |-------------------------+-------------------------| |-------------------------+-------------------------|
),
[_NUMERIC] = LAYOUT(
@@ -59,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , XXXXXXX , KC_4 , KC_5 , KC_6 , KC_0 ,
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
- _______ , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_1 , KC_2 , KC_3 , KC_COMM ,
+ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_1 , KC_2 , KC_3 , KC_COMM ,
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
// |-------------------------+-------------------------| |-------------------------+-------------------------|
XXXXXXX , UNICODE , XXXXXXX , XXXXXXX
@@ -85,21 +79,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , XXXXXXX , KC_LEFT , KC_DOWN , KC_UP , KC_RIGHT ,
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
- _______ , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , C(KC_D) , C(KC_U) , XXXXXXX ,
+ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , C(KC_D) , C(KC_U) , XXXXXXX ,
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
// |-------------------------+-------------------------| |-------------------------+-------------------------|
XXXXXXX , _______ , XXXXXXX , XXXXXXX
// |-------------------------+-------------------------| |-------------------------+-------------------------|
),
- [_ADJUST] = LAYOUT(
- //|---------------+---------------+---------------+---------------+------------------| |---------------+---------------+---------------+---------------+-----------------|
- XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_PRINT_SCREEN , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_AUDIO_VOL_UP ,
- //|---------------+---------------+---------------+---------------+------------------| |---------------+---------------+---------------+---------------+-----------------|
- XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,S(KC_PRINT_SCREEN), XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,KC_AUDIO_VOL_DOWN,
- //|---------------+---------------+---------------+---------------+------------------| |---------------+---------------+---------------+---------------+-----------------|
- XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_AUDIO_MUTE ,
- //|---------------+---------------+---------------+---------------+------------------| |---------------+---------------+---------------+---------------+-----------------|
+ [_ADJ] = LAYOUT(
+ //|---------------+---------------+---------------+---------------+------------------| |---------------+---------------+---------------+-----------------+----------|
+ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_PRINT_SCREEN , XXXXXXX , XXXXXXX , XXXXXXX , KC_AUDIO_VOL_UP , XXXXXXX ,
+ //|---------------+---------------+---------------+---------------+------------------| |---------------+---------------+---------------+-----------------+----------|
+ XXXXXXX , G(C(S(KC_G))), XXXXXXX , XXXXXXX ,S(KC_PRINT_SCREEN), XXXXXXX , XXXXXXX , XXXXXXX ,KC_AUDIO_VOL_DOWN, XXXXXXX ,
+ //|---------------+---------------+---------------+---------------+------------------| |---------------+---------------+---------------+-----------------+----------|
+ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_AUDIO_MUTE , XXXXXXX ,
+ //|---------------+---------------+---------------+---------------+------------------| |---------------+---------------+---------------+-----------------+----------|
// |-------------------------+-------------------------| |-------------------------+-------------------------|
XXXXXXX , _______ , XXXXXXX , XXXXXXX
// |-------------------------+-------------------------| |-------------------------+-------------------------|
@@ -122,12 +116,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
_______ , XXXXXXX , XXXXXXX , XXXXXXX , _______ , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
- XXXXXXX , C(KC_X) , C(KC_C) , C(KC_V) , _______ , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
+ XXXXXXX , KC_CUT , KC_COPY , KC_PASTE , _______ , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
- _______ , XXXXXXX , XXXXXXX , C(KC_Z) , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
+ XXXXXXX , XXXXXXX , XXXXXXX , C(KC_Z) , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
//|---------------+---------------+---------------+---------------+---------------| |---------------+---------------+---------------+---------------+---------------|
// |-------------------------+-------------------------| |-------------------------+-------------------------|
- XXXXXXX , _______ , XXXXXXX , XXXXXXX
+ XXXXXXX , KC_ENTER , XXXXXXX , XXXXXXX
// |-------------------------+-------------------------| |-------------------------+-------------------------|
),
};
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/glcdfont.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/glcdfont.c
index ad4448993ff..8ca414fdd0f 100644
--- a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/glcdfont.c
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/glcdfont.c
@@ -5,228 +5,84 @@
/* Online editor: https://joric.github.io/qle/ */
static const unsigned char PROGMEM font[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFC, 0xFE, 0x0E, 0x06, 0xE6, 0xE6,
- 0xE6, 0xE6, 0xE6, 0xFE, 0xFE, 0xE6,
- 0xE6, 0xE6, 0x06, 0x06, 0xE6, 0xE6,
- 0xE6, 0xFE, 0xFE, 0x06, 0x06, 0xFE,
- 0xFE, 0xFE, 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, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 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, 0x7F, 0x70, 0x60, 0x67, 0x67,
- 0x67, 0x67, 0x67, 0x7F, 0x7F, 0x7F,
- 0x7F, 0x7F, 0x60, 0x60, 0x7F, 0x7F,
- 0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x67,
- 0x67, 0x67, 0x67, 0x67, 0x7F, 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, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 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, 0xFE, 0x0E, 0x06, 0xE6, 0xE6,
- 0xE6, 0xE6, 0x06, 0x0E, 0xFE, 0xFE,
- 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0xFE,
- 0xFE, 0xFE, 0xE6, 0xE6, 0xE6, 0x06,
- 0x06, 0xE6, 0xE6, 0xE6, 0xFE, 0xFC,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 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, 0xFE, 0x0E, 0x06, 0x66, 0x66,
- 0x66, 0x66, 0xE6, 0xFE, 0xFE, 0x06,
- 0x06, 0x66, 0x66, 0x66, 0xE6, 0xE6,
- 0xFE, 0xFE, 0xE6, 0xE6, 0xE6, 0x06,
- 0x06, 0xE6, 0xE6, 0xE6, 0xFE, 0xFC,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 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, 0x7F, 0x60, 0x60, 0x7C, 0x7C,
- 0x7C, 0x7C, 0x60, 0x60, 0x7F, 0x7F,
- 0x60, 0x60, 0x67, 0x67, 0x67, 0x67,
- 0x67, 0x7F, 0x7F, 0x7F, 0x7F, 0x60,
- 0x60, 0x7F, 0x7F, 0x7F, 0x7F, 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, 0x00, 0x00,
- 0x3F, 0x7F, 0x67, 0x66, 0x66, 0x66,
- 0x66, 0x60, 0x70, 0x7F, 0x7F, 0x60,
- 0x60, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F,
- 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x60,
- 0x60, 0x7F, 0x7F, 0x7F, 0x7F, 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, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 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, 0xFE, 0x0E, 0x06, 0xE6, 0xE6,
- 0xE6, 0x06, 0x0E, 0xFE, 0xFE, 0x0E,
- 0x06, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6,
- 0xFE, 0xFE, 0x06, 0x06, 0x66, 0x66,
- 0x66, 0x66, 0x06, 0x0E, 0xFE, 0xFC,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 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, 0xFE, 0x0E, 0x06, 0xE6, 0xE6,
- 0xE6, 0xE6, 0xE6, 0xFE, 0xFE, 0x06,
- 0x06, 0xCE, 0x9E, 0x9E, 0xCE, 0x06,
- 0x06, 0xFE, 0xFE, 0x06, 0x06, 0xE6,
- 0xE6, 0xE6, 0x0E, 0x1E, 0xFE, 0xFC,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 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, 0x7F, 0x60, 0x60, 0x7C, 0x7C,
- 0x7C, 0x60, 0x60, 0x7F, 0x7F, 0x70,
- 0x60, 0x67, 0x67, 0x64, 0x60, 0x70,
- 0x7F, 0x7F, 0x60, 0x60, 0x7E, 0x7E,
- 0x78, 0x70, 0x62, 0x67, 0x7F, 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, 0x00, 0x00,
- 0x3F, 0x7F, 0x70, 0x60, 0x67, 0x67,
- 0x67, 0x67, 0x67, 0x7F, 0x7F, 0x60,
- 0x60, 0x7F, 0x7F, 0x7F, 0x7F, 0x60,
- 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x67,
- 0x67, 0x67, 0x70, 0x78, 0x7F, 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, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 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, 0xFE, 0x0E, 0x06, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xFE, 0xFE,
+ 0xE6, 0xE6, 0xE6, 0x06, 0x06, 0xE6, 0xE6, 0xE6, 0xFE, 0xFE, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x7F, 0x70, 0x60, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x60, 0x60,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x7F, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0xFE, 0x0E, 0x06, 0xE6, 0xE6, 0xE6, 0xE6, 0x06, 0x0E, 0xFE, 0xFE, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xE6, 0xE6, 0xE6, 0x06, 0x06, 0xE6, 0xE6, 0xE6, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0xFE, 0x0E, 0x06, 0x66, 0x66, 0x66, 0x66, 0xE6,
+ 0xFE, 0xFE, 0x06, 0x06, 0x66, 0x66, 0x66, 0xE6, 0xE6, 0xFE, 0xFE, 0xE6, 0xE6, 0xE6, 0x06, 0x06, 0xE6,
+ 0xE6, 0xE6, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x7F, 0x60, 0x60, 0x7C, 0x7C, 0x7C, 0x7C, 0x60, 0x60, 0x7F, 0x7F, 0x60,
+ 0x60, 0x67, 0x67, 0x67, 0x67, 0x67, 0x7F, 0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x7F, 0x7F, 0x7F, 0x7F, 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, 0x00, 0x00, 0x3F, 0x7F, 0x67, 0x66,
+ 0x66, 0x66, 0x66, 0x60, 0x70, 0x7F, 0x7F, 0x60, 0x60, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 0x7F, 0x7F, 0x60, 0x60, 0x7F, 0x7F, 0x7F, 0x7F, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0xFE, 0x0E, 0x06, 0xE6, 0xE6, 0xE6, 0x06,
+ 0x0E, 0xFE, 0xFE, 0x0E, 0x06, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xFE, 0xFE, 0x06, 0x06, 0x66, 0x66, 0x66,
+ 0x66, 0x06, 0x0E, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFE, 0x0E, 0x06, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xFE, 0xFE, 0x06, 0x06, 0xCE, 0x9E, 0x9E,
+ 0xCE, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0xE6, 0xE6, 0xE6, 0x0E, 0x1E, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x7F, 0x60,
+ 0x60, 0x7C, 0x7C, 0x7C, 0x60, 0x60, 0x7F, 0x7F, 0x70, 0x60, 0x67, 0x67, 0x64, 0x60, 0x70, 0x7F, 0x7F,
+ 0x60, 0x60, 0x7E, 0x7E, 0x78, 0x70, 0x62, 0x67, 0x7F, 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, 0x00, 0x00, 0x3F, 0x7F, 0x70, 0x60, 0x67, 0x67, 0x67, 0x67, 0x67, 0x7F, 0x7F,
+ 0x60, 0x60, 0x7F, 0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x7F, 0x7F, 0x60, 0x60, 0x67, 0x67, 0x67, 0x70, 0x78,
+ 0x7F, 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, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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/splitkb/aurora/sweep/keymaps/flinguenheld/oled/oled.c b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/oled.c
index 5b177acc7c1..2d00ef4e3a7 100644
--- a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/oled.c
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/oled/oled.c
@@ -4,454 +4,463 @@
#include QMK_KEYBOARD_H
#include "keycodes.h"
-/* Leader state */
-static bool is_leader_active = false;
-void leader_start(void) {
- is_leader_active = true;
-}
-void leader_end(void) {
- is_leader_active = false;
-}
+/* Blank space to place modifiers */
+void add_blank(void) {
+ oled_write_char(0x10, false);
+ oled_write_char(0x11, false);
+ oled_write_char(0x12, false);
+ oled_write_char(0x13, false);
+ oled_write_char(0x14, false);
+
+ oled_write_char(0x30, false);
+ oled_write_char(0x31, false);
+ oled_write_char(0x32, false);
+ oled_write_char(0x33, false);
+ oled_write_char(0x34, false);
+}
void oled_display(void) {
- /* Layers */
- switch (get_highest_layer(layer_state)) {
+ /* Layers */
+ switch (get_highest_layer(layer_state)) {
- case _BASE: ;
- if (is_keyboard_master()) {
- static const char PROGMEM qmk_logo_master[] = {
- // 'raven', 32x128px
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 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, 0xc0, 0xc0, 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, 0x07, 0x8f, 0x5f, 0x31, 0x79, 0x33, 0x7f,
- 0x3b, 0x71, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x4c, 0x02, 0x01, 0x95, 0xff, 0xb5, 0x05, 0x02, 0x4c, 0x30,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7e, 0x01, 0x01, 0x01, 0x7e, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 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, 0xe0,
- 0xf0, 0xf8, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0x7c, 0x7c, 0xf8, 0xf0, 0xe0, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xcf, 0xef, 0xe7, 0xf3, 0xfb, 0xf9,
- 0xfd, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x0f, 0x0e, 0x1a, 0x23, 0x43, 0x3f, 0x03, 0x00,
- 0x00, 0x0c, 0x1e, 0x1f, 0x3f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x80, 0x40, 0xe0, 0xbf, 0x33,
- 0x30, 0x60, 0x20, 0x21, 0xff, 0x20, 0x60, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xfc, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0xfc, 0xfc, 0xf8, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x30,
- 0x20, 0x30, 0x20, 0x32, 0x20, 0x32, 0x20, 0x30, 0x20, 0x1c, 0x02, 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
- };
- oled_write_raw_P(qmk_logo_master, sizeof(qmk_logo_master));
+ case _BASE:;
+ if (is_keyboard_master()) {
+ static const char PROGMEM qmk_logo_master[] = {
+ // 'raven', 32x128px
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0xc0, 0xc0, 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, 0x07, 0x8f, 0x5f, 0x31, 0x79, 0x33, 0x7f,
+ 0x3b, 0x71, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x4c, 0x02, 0x01, 0x95, 0xff, 0xb5, 0x05, 0x02, 0x4c, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7e, 0x01, 0x01, 0x01, 0x7e, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0xe0, 0xf0,
+ 0xf8, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0x7c, 0x7c, 0xf8, 0xf0, 0xe0, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xcf, 0xef, 0xe7, 0xf3, 0xfb, 0xf9, 0xfd,
+ 0xfc, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x0f, 0x0e, 0x1a, 0x23, 0x43, 0x3f, 0x03, 0x00, 0x00,
+ 0x0c, 0x1e, 0x1f, 0x3f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x80, 0x40, 0xe0, 0xbf, 0x33, 0x30,
+ 0x60, 0x20, 0x21, 0xff, 0x20, 0x60, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc,
+ 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0xfc, 0xfc, 0xf8, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x30, 0x20,
+ 0x30, 0x20, 0x32, 0x20, 0x32, 0x20, 0x30, 0x20, 0x1c, 0x02, 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};
+ oled_write_raw_P(qmk_logo_master, sizeof(qmk_logo_master));
- } else {
- static const char PROGMEM qmk_logo_slave[] = {
- // 'birds', 32x128px
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x40, 0xc0, 0xe0, 0xd0, 0x88, 0x84, 0x04, 0x04, 0xc4, 0xc4, 0x08, 0x08, 0x10, 0x60, 0x80,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf8, 0x46, 0x81, 0x02, 0x02, 0x06, 0x04, 0x04, 0x04, 0x74, 0x84, 0x06, 0x03, 0x81,
- 0x42, 0x24, 0x18, 0x10, 0xa0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x06, 0x08, 0x11, 0x12, 0x24, 0x24, 0x48, 0xc8, 0x48, 0x48, 0xc9, 0x49, 0x4a,
- 0x4a, 0x26, 0x25, 0x25, 0x14, 0x14, 0x14, 0x1d, 0x15, 0x2e, 0x54, 0x60, 0x40, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x05, 0x02, 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, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x20, 0x10, 0x08, 0x08, 0x08, 0x08, 0x88, 0xc8, 0x08, 0x30, 0xc0, 0xc0, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x18, 0x04, 0x03,
- 0x00, 0x00, 0x00, 0x80, 0x80, 0x70, 0x18, 0x00, 0x00, 0x00, 0x80, 0x70, 0x0f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x70, 0x50, 0x48, 0x48, 0x24, 0x24, 0x12, 0x0a, 0x05, 0x09, 0x13, 0x12, 0x22, 0x22,
- 0xe1, 0x21, 0x21, 0x20, 0xe0, 0x20, 0x20, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x07, 0x04, 0x00, 0x04, 0x07, 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, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- oled_write_raw_P(qmk_logo_slave, sizeof(qmk_logo_slave));
- }
- break;
+ } else {
+ static const char PROGMEM qmk_logo_slave[] = {
+ // 'birds', 32x128px
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0xc0, 0xe0, 0xd0, 0x88, 0x84, 0x04, 0x04, 0xc4, 0xc4, 0x08, 0x08, 0x10, 0x60, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0x46, 0x81, 0x02, 0x02, 0x06, 0x04, 0x04, 0x04, 0x74, 0x84, 0x06, 0x03, 0x81,
+ 0x42, 0x24, 0x18, 0x10, 0xa0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x06, 0x08, 0x11, 0x12, 0x24, 0x24, 0x48, 0xc8, 0x48, 0x48, 0xc9, 0x49, 0x4a,
+ 0x4a, 0x26, 0x25, 0x25, 0x14, 0x14, 0x14, 0x1d, 0x15, 0x2e, 0x54, 0x60, 0x40, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x05, 0x02, 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, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x20, 0x10, 0x08, 0x08, 0x08, 0x08, 0x88, 0xc8, 0x08, 0x30, 0xc0, 0xc0, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x18, 0x04, 0x03,
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0x70, 0x18, 0x00, 0x00, 0x00, 0x80, 0x70, 0x0f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x50, 0x48, 0x48, 0x24, 0x24, 0x12, 0x0a, 0x05, 0x09, 0x13, 0x12, 0x22, 0x22,
+ 0xe1, 0x21, 0x21, 0x20, 0xe0, 0x20, 0x20, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x07, 0x04, 0x00, 0x04, 0x07, 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, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ oled_write_raw_P(qmk_logo_slave, sizeof(qmk_logo_slave));
+ }
+ break;
- case _NUMERIC: ;
- static const char PROGMEM qmk_numeric[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x03, 0x07, 0x0f, 0x1e,
- 0x3c, 0x78, 0xf0, 0xe0, 0xc0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x87, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x03, 0x87, 0x87, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
- 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x0e, 0x1c, 0x38, 0x70, 0xe0,
- 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
- 0xc7, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x3f, 0x38, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x1c, 0x1c, 0x1c, 0x1c,
- 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x0e, 0x1e, 0x3e, 0x77, 0xe7, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x70, 0xf0, 0xf0,
- 0xf0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
- 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 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, 0x07, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
- 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
+ case _NUMERIC:;
+ static const char PROGMEM qmk_numeric[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x03, 0x07, 0x0f, 0x1e, 0x3c, 0x78, 0xf0,
+ 0xe0, 0xc0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x87, 0x87, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03,
+ 0x87, 0x87, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x07, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xc7, 0xc7, 0xc7,
+ 0xc7, 0xc7, 0xc7, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x3f, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
+ 0x1c, 0x1c, 0x1c, 0xfc, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x1e,
+ 0x3e, 0x77, 0xe7, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x70, 0xf0, 0xf0, 0xf0, 0xf0, 0x70, 0x70, 0x70, 0x70,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0xc0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc0, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 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, 0x07, 0x0f, 0x0f, 0x0e, 0x0e,
+ 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00};
- oled_write_raw_P(qmk_numeric, sizeof(qmk_numeric));
- break;
+ oled_write_raw_P(qmk_numeric, sizeof(qmk_numeric));
+ break;
- case _MOUSE: ;
- static const char PROGMEM qmk_mouse[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 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, 0xff, 0xff, 0xff, 0x3e, 0x3c, 0x78, 0xf0, 0xe0, 0xc0,
- 0xc0, 0xe0, 0xf0, 0x78, 0x3c, 0x3e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03,
- 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x81, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
- 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
- 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc1, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc1, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x7f, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
- 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x7f, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
- 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x7f, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
- 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
- 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x81, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
- 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
- 0xc1, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
- 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
+ case _MOUSE:;
+ static const char PROGMEM qmk_mouse[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 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, 0xff, 0xff, 0xff, 0x3e, 0x3c, 0x78, 0xf0, 0xe0, 0xc0, 0xc0, 0xe0, 0xf0,
+ 0x78, 0x3c, 0x3e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x81, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1,
+ 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff, 0x7f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc1, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc1, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x7f, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
+ 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x7f, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
+ 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x7f, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
+ 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x81, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0,
+ 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xc1,
+ 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00};
- oled_write_raw_P(qmk_mouse, sizeof(qmk_mouse));
- break;
+ oled_write_raw_P(qmk_mouse, sizeof(qmk_mouse));
+ break;
- case _ARROWS: ;
- static const char PROGMEM qmk_arrows[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 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,
- 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0xff, 0xff,
- 0xff, 0xff, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3e, 0x7c, 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, 0x03, 0x03,
- 0x03, 0x03, 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, 0x7c, 0x3c, 0x1c, 0x0c,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1e, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xde, 0x9e, 0x1e, 0x1e, 0x1e,
- 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x0f, 0x0e, 0x0c,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
- 0x30, 0x70, 0xf0, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
- 0x78, 0x78, 0x78, 0x79, 0x7b, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x30, 0x38, 0x3c, 0x3e, 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, 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, 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, 0x3e, 0x7c, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0x7c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f,
- 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
+ case _ARROWS:;
+ static const char PROGMEM qmk_arrows[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0xfc, 0xf8, 0xf0,
+ 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0xff, 0xff, 0xff, 0xff, 0x01, 0x03, 0x07,
+ 0x0f, 0x1f, 0x3e, 0x7c, 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, 0x03, 0x03, 0x03, 0x03, 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, 0x7c, 0x3c, 0x1c, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1e, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xde,
+ 0x9e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x0f,
+ 0x0e, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x30, 0x70, 0xf0, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
+ 0x78, 0x79, 0x7b, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x30, 0x38, 0x3c, 0x3e,
+ 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, 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, 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, 0x3e, 0x7c,
+ 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0xff, 0xff, 0xff, 0xff, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0x7c, 0x3e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x03, 0x07, 0x0f, 0x1f, 0x3f, 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, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00};
- oled_write_raw_P(qmk_arrows, sizeof(qmk_arrows));
- break;
+ oled_write_raw_P(qmk_arrows, sizeof(qmk_arrows));
+ break;
- case _ADJUST: ;
- static const char PROGMEM qmk_adjust[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0xf8, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x38, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x07, 0x07, 0x07, 0x07,
- 0x07, 0x07, 0x07, 0x07, 0x0f, 0xfe, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc0, 0xc0, 0xc0, 0xc0,
- 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xff, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xe1, 0xe1, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
- 0xe1, 0xe1, 0xe1, 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, 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, 0x00, 0x1f, 0x3f, 0x3f, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
- 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
- 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
- 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf0, 0xf0,
- 0xf0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 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, 0x1f, 0x1f,
- 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
+ case _ADJ:;
+ static const char PROGMEM qmk_ADJ[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0xf8, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0f, 0xfe, 0xfc,
+ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xff, 0x7f, 0x3f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xe1,
+ 0xe1, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 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,
+ 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, 0x00, 0x1f, 0x3f,
+ 0x3f, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
+ 0xc3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xff, 0xff, 0x7f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+ 0x70, 0x70, 0x70, 0x70, 0x70, 0xf0, 0xf0, 0xf0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 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, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00};
- oled_write_raw_P(qmk_adjust, sizeof(qmk_adjust));
- break;
+ oled_write_raw_P(qmk_ADJ, sizeof(qmk_ADJ));
+ break;
- case _FN: ;
- static const char PROGMEM qmk_fn[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
- 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
- 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xe0, 0xe0, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xf8, 0xe0, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0x07, 0x1f, 0x7f, 0xfe,
- 0xf8, 0xe0, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x07, 0x1f, 0x7f, 0xfe, 0xf8, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
+ case _FN:;
+ static const char PROGMEM qmk_fn[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0xe0, 0xe0, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xf8, 0xe0, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0x07, 0x1f, 0x7f, 0xfe, 0xf8, 0xe0, 0x80, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x7f, 0xfe, 0xf8, 0xe0,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f,
+ 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x7f, 0x7f,
+ 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00};
- oled_write_raw_P(qmk_fn, sizeof(qmk_fn));
- break;
+ oled_write_raw_P(qmk_fn, sizeof(qmk_fn));
+ break;
- case _LEFT_HAND: ;
- static const char PROGMEM qmk_left_hand[] = {
- // 'layers_left_hand', 32x128px
- 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, 0x00,
- 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xe1, 0xf1, 0xf1, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0x38, 0x38, 0x38, 0x38, 0x00, 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, 0x1f, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0x87, 0x87, 0x87, 0x87, 0x87, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
- 0x71, 0x71, 0x71, 0x70, 0x70, 0xf0, 0xf0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xfc, 0x3c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x3c, 0xfc, 0xf8, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xe3, 0xe3, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0xe3, 0xe3,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x0f, 0x1e, 0x3c, 0x78, 0xf0, 0xe0, 0xc0, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x1f, 0x1f, 0x1f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x1e, 0xfc, 0xf8, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0x78, 0x3f, 0x1f, 0x0f
- };
+ case _LEFT_HAND:;
+ static const char PROGMEM qmk_left_hand[] = {
+ // 'layers_left_hand', 32x128px
+ 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, 0x00, 0xff, 0xff,
+ 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xf1, 0xf1, 0x71,
+ 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x38, 0x38, 0x38,
+ 0x38, 0x00, 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, 0x1f, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
+ 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x87, 0x87, 0x87, 0x87, 0x87, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x80, 0x80, 0x71, 0x71, 0x71, 0x70, 0x70, 0xf0, 0xf0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf0, 0xf8, 0xfc, 0x3c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x3c, 0xfc, 0xf8, 0xf0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0xe3, 0xe3,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0xe3, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x0f, 0x1e,
+ 0x3c, 0x78, 0xf0, 0xe0, 0xc0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x03, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0f,
+ 0x1e, 0xfc, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0x78, 0x3f,
+ 0x1f, 0x0f};
- oled_write_raw_P(qmk_left_hand, sizeof(qmk_left_hand));
- break;
+ oled_write_raw_P(qmk_left_hand, sizeof(qmk_left_hand));
+ break;
+ }
+
+ /* Leader */
+ if (leader_sequence_active()) {
+
+ static const char PROGMEM qmk_leader[] = {
+ 0x00, 0x00, 0xf8, 0xf8, 0x78, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x78, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x0e, 0x0e,
+ 0x0e, 0x0e, 0x0e, 0xfe, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x70, 0x70, 0x70, 0x70,
+ 0x70, 0x7f, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc6, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xc1, 0x81, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0x38, 0x38, 0x38, 0x78, 0xf8, 0xf8, 0xbf, 0x1f, 0x0f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07,
+ 0x00, 0x00};
+
+ oled_write_raw_P(qmk_leader, sizeof(qmk_leader));
+ }
+
+ /* Modifier keys */
+ if (get_mods()) {
+
+ if (get_mods() & MOD_MASK_GUI) {
+
+ oled_write_char(0x8B, false);
+ oled_write_char(0x8C, false);
+ oled_write_char(0x8D, false);
+ oled_write_char(0x8E, false);
+ oled_write_char(0x8F, false);
+
+ oled_write_char(0xAB, false);
+ oled_write_char(0xAC, false);
+ oled_write_char(0xAD, false);
+ oled_write_char(0xAE, false);
+ oled_write_char(0xAF, false);
+ } else {
+ add_blank();
}
- /* Leader */
- if (is_leader_active) {
+ if (get_mods() & MOD_MASK_CTRL) {
- static const char PROGMEM qmk_leader[] = {
- 0x00, 0x00, 0xf8, 0xf8, 0x78, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x78, 0xf8, 0xf8, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0,
- 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
- 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x18, 0x18, 0x18,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87, 0x87, 0x87, 0x87, 0x87,
- 0x87, 0x87, 0x87, 0x87, 0x87, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3,
- 0xc3, 0xc3, 0xc3, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x0e, 0x0e,
- 0x0e, 0x0e, 0x0e, 0xfe, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x70, 0x70,
- 0x70, 0x70, 0x70, 0x7f, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xf8, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc6, 0xc6, 0xc6,
- 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
- 0xe1, 0xe1, 0xe1, 0xe1, 0xc1, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x38, 0x38, 0x38,
- 0x78, 0xf8, 0xf8, 0xbf, 0x1f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00
- };
+ oled_write_char(0x01, false);
+ oled_write_char(0x02, false);
+ oled_write_char(0x03, false);
+ oled_write_char(0x04, false);
+ oled_write_char(0x05, false);
- oled_write_raw_P(qmk_leader, sizeof(qmk_leader));
+ oled_write_char(0x21, false);
+ oled_write_char(0x22, false);
+ oled_write_char(0x23, false);
+ oled_write_char(0x24, false);
+ oled_write_char(0x25, false);
+ } else {
+ add_blank();
}
- /* Modifier keys */
- if (get_mods()) {
+ if (get_mods() & MOD_BIT(KC_LALT)) {
- if (get_mods() & MOD_MASK_CTRL) {
+ oled_write_char(0x41, false);
+ oled_write_char(0x42, false);
+ oled_write_char(0x43, false);
+ oled_write_char(0x44, false);
+ oled_write_char(0x45, false);
- oled_write_char(0x01, false);
- oled_write_char(0x02, false);
- oled_write_char(0x03, false);
- oled_write_char(0x04, false);
- oled_write_char(0x05, false);
-
- oled_write_char(0x21, false);
- oled_write_char(0x22, false);
- oled_write_char(0x23, false);
- oled_write_char(0x24, false);
- oled_write_char(0x25, false);
- }
- if (get_mods() & MOD_BIT(KC_LALT)) {
-
- oled_write_char(0x41, false);
- oled_write_char(0x42, false);
- oled_write_char(0x43, false);
- oled_write_char(0x44, false);
- oled_write_char(0x45, false);
-
- oled_write_char(0x61, false);
- oled_write_char(0x62, false);
- oled_write_char(0x63, false);
- oled_write_char(0x64, false);
- oled_write_char(0x65, false);
- }
- if (get_mods() & MOD_BIT(KC_RALT)) {
-
- oled_write_char(0x81, false);
- oled_write_char(0x82, false);
- oled_write_char(0x83, false);
- oled_write_char(0x84, false);
- oled_write_char(0x85, false);
-
- oled_write_char(0xA1, false);
- oled_write_char(0xA2, false);
- oled_write_char(0xA3, false);
- oled_write_char(0xA4, false);
- oled_write_char(0xA5, false);
- }
- if (get_mods() & MOD_MASK_SHIFT) {
-
- oled_write_char(0x4B, false);
- oled_write_char(0x4C, false);
- oled_write_char(0x4D, false);
- oled_write_char(0x4E, false);
- oled_write_char(0x4F, false);
-
- oled_write_char(0x6B, false);
- oled_write_char(0x6C, false);
- oled_write_char(0x6D, false);
- oled_write_char(0x6E, false);
- oled_write_char(0x6F, false);
- }
- if (get_mods() & MOD_MASK_GUI) {
-
- oled_write_char(0x8B, false);
- oled_write_char(0x8C, false);
- oled_write_char(0x8D, false);
- oled_write_char(0x8E, false);
- oled_write_char(0x8F, false);
-
- oled_write_char(0xAB, false);
- oled_write_char(0xAC, false);
- oled_write_char(0xAD, false);
- oled_write_char(0xAE, false);
- oled_write_char(0xAF, false);
- }
+ oled_write_char(0x61, false);
+ oled_write_char(0x62, false);
+ oled_write_char(0x63, false);
+ oled_write_char(0x64, false);
+ oled_write_char(0x65, false);
+ } else {
+ add_blank();
}
+
+ if (get_mods() & MOD_MASK_SHIFT) {
+
+ oled_write_char(0x4B, false);
+ oled_write_char(0x4C, false);
+ oled_write_char(0x4D, false);
+ oled_write_char(0x4E, false);
+ oled_write_char(0x4F, false);
+
+ oled_write_char(0x6B, false);
+ oled_write_char(0x6C, false);
+ oled_write_char(0x6D, false);
+ oled_write_char(0x6E, false);
+ oled_write_char(0x6F, false);
+ } else {
+ add_blank();
+ }
+
+ if (get_mods() & MOD_BIT(KC_RALT)) {
+
+ oled_write_char(0x81, false);
+ oled_write_char(0x82, false);
+ oled_write_char(0x83, false);
+ oled_write_char(0x84, false);
+ oled_write_char(0x85, false);
+
+ oled_write_char(0xA1, false);
+ oled_write_char(0xA2, false);
+ oled_write_char(0xA3, false);
+ oled_write_char(0xA4, false);
+ oled_write_char(0xA5, false);
+ }
+
+ // Add a line
+ oled_write_char(0xC1, false);
+ oled_write_char(0xC2, false);
+ oled_write_char(0xC3, false);
+ oled_write_char(0xC4, false);
+ oled_write_char(0xC5, false);
+ }
};
bool oled_task_user(void) {
- oled_display();
- return false;
+ oled_display();
+ return false;
}
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/readme.md b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/readme.md
index 3873ca45cfb..b70b3655da7 100644
--- a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/readme.md
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/readme.md
@@ -1,16 +1,16 @@
### Custom aurora sweep keymap
+This keymap is inspired by [optimot](https://optimot.fr) which is a French layout.
+Nonetheless it uses the US international extended keymap for French keys.
-This keymap is inspired by [optimot](https://bepo.fr/) which is a French layout.
-Nonetheless all French characters are sent in unicode, so it works with the standard US ANSI layout.
+It uses the _best_ QMK features :
-It uses the *best* qmk features :
-- combos ♥
-- auto shift
-- leader
+- combos ♥
+- auto shift
+- leader
I tried to optimise key positions for neovim and i3wm while limit digrams.
-The oled screens are used to display the current layout, the modifier keys and the leader key.
+The oled screens are used to display the current layout, the modifier keys and the leader key.


@@ -27,104 +27,71 @@ Navigate into the keymap folder and launch this command for both sides :
qmk compile && qmk flash
-and :
+And :
- Click twice on the flash button and use nautilus for instance to clic on the keyboard.
+ Click twice on the flash button and use nautilus for instance to clic on the keyboard.
Don't forget to flash with the double tap bootloader define before soldering.
+#### Layout
+
+Set the us altgr international to activate French keys :
+
+ /usr/share/X11/xkb/symbols/
+ localectl list-x11-keymap-variants us
+
+ setxkbmap us altgr-intl
+
#### Links
[qmk](https://docs.qmk.fm/#/)
[ferris sweep](https://github.com/davidphilipbarr/Sweep)
-[splitkb](https://splitkb.com)
+[splitkb](https://splitkb.com)
#### Layouts
-
-
-
-
-
-
-
-
-
-
-
-#### French
-
-| - | |
-|------------------|------------------------|
-| space + e | é |
-| space + i | ç |
-| space + a | æ |
-| space + o | œ |
-| comma + a | à |
-| comma + e | è |
-| comma + i | ì |
-| comma + o | ò |
-| comma + u | ù |
-| enter + a | â |
-| enter + e | ê |
-| enter + i | î |
-| enter + o | ô |
-| enter + u | û |
-| dot + a | ä |
-| dot + e | ë |
-| dot + i | ï |
-| dot + o | ö |
-| dot + u | ü |
-| dot + y | ÿ |
+
+
+
+
+
+
+
+
#### Leader
-| - | |
-|--------------------|------------------------|
-| M + S | mail short |
-| M + L | mail long |
-| D + E + G | ° |
-| C + O + P | © |
-| R + E + G | ® |
-| D + I + A | ø |
-| D + I + A + M | Ø |
-| E + U + R | € |
-| P + O + U | £ |
-| Y + E + N | ¥ |
-| C + E + N | ¢ |
-| P + I | π |
-| P + I + I | Π |
-| O + M + E | ω |
-| O + M + E + G | Ω |
-| U + P + F | ⁰ |
-| D + N + F | ₀ |
+| - | |
+| ------------- | ---------- |
+| M + S | mail short |
+| M + L | mail long |
+| D + E + G | ° |
+| C + O + P | © |
+| R + E + G | ® |
+| D + I + A | ø |
+| D + I + A + M | Ø |
+| E + U + R | € |
+| P + O + U | £ |
+| Y + E + N | ¥ |
+| C + E + N | ¢ |
+| P + I | π |
+| P + I + I | Π |
+| O + M + E | ω |
+| O + M + E + G | Ω |
+| U + P + F | ⁰ |
+| D + N + F | ₀ |
-| - | |
-|--------------------|------------------------|
-| M + U + L | × |
-| D + I + V | ÷ |
-| P + M | ± |
-| I + N + E | ≠ |
-| A + L + M | ≈ |
-| S + Q + U | √ |
-| I + N + F | ∞ |
-| < + < | ≤ |
-| > + > | ≥ |
-| F + S + T | ¼ |
-| F + S + G | ½ |
-| F + H + T | ¾ |
-
-| - | |
-|--------------------|------------------------|
-| F + L + A | ⚡ |
-| S + P + A | ✨ |
-| O + W + D | ⛔ |
-| C + O + F | ☕ |
-| U + M + B | ☔ |
-| Y + E + S | ✅ |
-| N + O | ❎ |
-| C + R + O | ❌ |
-| ? | ❔ |
-| ! | ❕ |
-| ? + ? | ❓ |
-| ! + ! | ❗ |
+| - | |
+| --------- | --- |
+| M + U + L | × |
+| D + I + V | ÷ |
+| P + M | ± |
+| I + N + E | ≠ |
+| A + L + M | ≈ |
+| S + Q + U | √ |
+| I + N + F | ∞ |
+| < + < | ≤ |
+| > + > | ≥ |
+| F + S + T | ¼ |
+| F + S + G | ½ |
+| F + H + T | ¾ |
diff --git a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/rules.mk b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/rules.mk
index d854cbb16be..b1c72a8aaff 100644
--- a/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/rules.mk
+++ b/keyboards/splitkb/aurora/sweep/keymaps/flinguenheld/rules.mk
@@ -2,7 +2,7 @@ LTO_ENABLE = yes
CONVERT_TO = elite_pi
SRC += features/auto_shift.c
-SRC += features/combo.c
+INTROSPECTION_KEYMAP_C = features/combo.c # Replace SRC, see issue #21137
SRC += features/leader.c
SRC += oled/oled.c
@@ -15,8 +15,5 @@ AUTO_SHIFT_MODIFIERS = no
COMBO_ENABLE = yes
LEADER_ENABLE = yes
-# Recommended for space cadet shift
-COMMAND_ENABLE = no
-
UNICODE_ENABLE = yes
SEND_STRING_ENABLE = yes
diff --git a/keyboards/splitkb/kyria/keymaps/drashna/chconf.h b/keyboards/splitkb/kyria/keymaps/drashna/chconf.h
new file mode 100644
index 00000000000..1ee8438cdfb
--- /dev/null
+++ b/keyboards/splitkb/kyria/keymaps/drashna/chconf.h
@@ -0,0 +1,24 @@
+/* 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
+
+#if defined(KEYBOARD_splitkb_kyria_rev3)
+#define CH_CFG_ST_RESOLUTION 16
+#define CH_CFG_ST_FREQUENCY 10000
+#endif
+
+#include_next
diff --git a/keyboards/splitkb/kyria/keymaps/drashna/config.h b/keyboards/splitkb/kyria/keymaps/drashna/config.h
index 2d1fbdcb02d..702599605cb 100644
--- a/keyboards/splitkb/kyria/keymaps/drashna/config.h
+++ b/keyboards/splitkb/kyria/keymaps/drashna/config.h
@@ -19,10 +19,10 @@
#define EE_HANDS
#ifdef OLED_ENABLE
-# ifdef OLED_DRIVER_SH1107
-# undef OLED_DISPLAY_128X64
-# define OLED_DISPLAY_128X128
-# endif
+# undef OLED_DISPLAY_128X64
+# define OLED_DISPLAY_128X128
+# define OLED_PRE_CHARGE_PERIOD 0x22
+# define OLED_VCOM_DETECT 0x35
#endif
#ifdef RGBLIGHT_ENABLE
@@ -36,12 +36,41 @@
# define RGBLIGHT_LAYERS
#endif
-#define KEYLOGGER_LENGTH 10
#define QMK_ESC_INPUT D4
#define QMK_ESC_OUTPUT B2
-#ifndef KEYBOARD_splitkb_kyria_rev3
+#ifdef KEYBOARD_splitkb_kyria_rev3
+# define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode.
+# define SERIAL_USART_PIN_SWAP // Swap TX and RX pins if keyboard is master halve.
+# define SERIAL_USART_DRIVER SD1 // USART driver of TX pin. default: SD1
+# define SERIAL_USART_TX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
+# undef SOFT_SERIAL_PIN
+# define SERIAL_USART_TX_PIN D3
+# define SERIAL_USART_RX_PIN D2
+
+# undef WS2812_DI_PIN
+# define WS2812_DI_PIN PAL_LINE(GPIOA, 3)
+# define WS2812_PWM_DRIVER PWMD2 // default: PWMD2
+# define WS2812_PWM_CHANNEL 4 // default: 2
+# define WS2812_PWM_PAL_MODE 1 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 2
+# define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA Stream for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
+# define WS2812_DMA_CHANNEL 2 // DMA Channel for TIMx_UP, see the respective reference manual for the appropriate values for your MCU.
+# define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM2_UP // DMAMUX configuration for TIMx_UP -- only required if your MCU has a DMAMUX peripheral, see the respective reference manual for the appropriate values for your MCU.
+
+# define BOOTMAGIC_LITE_ROW 0
+# define BOOTMAGIC_LITE_COLUMN 6
+# define BOOTMAGIC_LITE_ROW_RIGHT 4
+# define BOOTMAGIC_LITE_COLUMN_RIGHT 6
+
+# define BOOTMAGIC_LITE_EEPROM_ROW 1
+# define BOOTMAGIC_LITE_EEPROM_COLUMN 6
+# define BOOTMAGIC_LITE_EEPROM_ROW_RIGHT 5
+# define BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT 6
+# define SECURE_UNLOCK_SEQUENCE { {1, 5}, {1, 4}, {1, 3}, {1, 2} }
+
+# define ENCODER_RESOLUTION 2
+#else
# define BOOTMAGIC_LITE_ROW 0
# define BOOTMAGIC_LITE_COLUMN 7
# define BOOTMAGIC_LITE_ROW_RIGHT 4
@@ -55,7 +84,7 @@
#define SERIAL_USART_SPEED 921600
-#if defined(KEYBOARD_splitkb_kyria_rev1_proton_c)
+#if defined(KEYBOARD_splitkb_kyria_rev1_proton_c) || defined(KEYBOARD_splitkb_kyria_rev3)
# define WEAR_LEVELING_BACKING_SIZE 16384
# define WEAR_LEVELING_LOGICAL_SIZE 8192
#endif
diff --git a/keyboards/splitkb/kyria/keymaps/drashna/halconf.h b/keyboards/splitkb/kyria/keymaps/drashna/halconf.h
new file mode 100644
index 00000000000..b23c85d0f13
--- /dev/null
+++ b/keyboards/splitkb/kyria/keymaps/drashna/halconf.h
@@ -0,0 +1,24 @@
+/* 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#if defined(KEYBOARD_splitkb_kyria_rev3)
+# define HAL_USE_I2C TRUE
+# define HAL_USE_PWM TRUE
+# define HAL_USE_SERIAL TRUE
+#endif
+
+#include_next
diff --git a/keyboards/splitkb/kyria/keymaps/drashna/keymap.c b/keyboards/splitkb/kyria/keymaps/drashna/keymap.c
index 34f6e0d8e27..5a2b886fe4d 100644
--- a/keyboards/splitkb/kyria/keymaps/drashna/keymap.c
+++ b/keyboards/splitkb/kyria/keymaps/drashna/keymap.c
@@ -32,7 +32,7 @@
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
) \
LAYOUT_wrapper( \
- KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
+ SH_T(KC_ESC), K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, SH_T(KC_MINS), \
LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(K1B), \
OS_LSFT, CTL_T(K21), K22, K23, K24, K25, TG_GAME, MEH(KC_MINS), TG_DBLO, KC_CAPS, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \
KC_MUTE, OS_LALT, KC_GRV, KC_SPC, BK_LWER, DL_RAIS, KC_ENT, OS_RGUI, UC(0x03A8), UC(0x2E2E) \
@@ -126,7 +126,7 @@ void render_oled_title(bool side) {
}
oled_rotation_t oled_init_keymap(oled_rotation_t rotation) {
-# ifdef OLED_DRIVER_SH1107
+# ifdef OLED_DISPLAY_128X128
return OLED_ROTATION_0;
# else
return OLED_ROTATION_180;
@@ -155,7 +155,7 @@ void oled_render_large_display(bool side) {
}
#endif
-#ifdef RGBLIGHT_LAYERS
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
const rgblight_segment_t PROGMEM shift_layers[] = RGBLIGHT_LAYER_SEGMENTS({8, 1, 120, 255, 255}, {18, 1, 120, 255, 255});
const rgblight_segment_t PROGMEM control_layers[] = RGBLIGHT_LAYER_SEGMENTS({6, 1, 0, 255, 255}, {16, 1, 0, 255, 255});
const rgblight_segment_t PROGMEM alt_layers[] = RGBLIGHT_LAYER_SEGMENTS({2, 1, 240, 255, 255}, {17, 1, 250, 255, 255});
@@ -174,12 +174,56 @@ void housekeeping_task_keymap(void) {
rgblight_set_layer_state(2, mods & MOD_MASK_ALT);
rgblight_set_layer_state(3, mods & MOD_MASK_GUI);
}
-#endif
+#elif defined(RGB_MATRIX_ENABLE) && defined(KEYBOARD_splitkb_kyria_rev3)
+void keyboard_post_init_keymap(void) {
+ extern led_config_t g_led_config;
+ g_led_config.flags[30] = g_led_config.flags[24] = g_led_config.flags[18] = g_led_config.flags[12] = g_led_config.flags[11] = g_led_config.flags[10] = g_led_config.flags[9] = g_led_config.flags[8] = g_led_config.flags[7] = g_led_config.flags[6] = g_led_config.flags[37] = g_led_config.flags[38] = g_led_config.flags[39] = g_led_config.flags[40] = g_led_config.flags[41] = g_led_config.flags[42] = g_led_config.flags[43] = g_led_config.flags[49] = g_led_config.flags[55] = g_led_config.flags[61] = LED_FLAG_MODIFIER;
+}
-#ifdef KEYBOARD_splitkb_kyria_rev1_proton_c
-void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
- for (int32_t i = 0; i < 40; i++) {
- __asm__ volatile("nop" ::: "memory");
+void check_default_layer(uint8_t mode, uint8_t type, uint8_t led_min, uint8_t led_max) {
+ switch (get_highest_layer(default_layer_state)) {
+ case _QWERTY:
+ rgb_matrix_layer_helper(DEFAULT_LAYER_1_HSV, mode, rgb_matrix_config.speed, type, led_min, led_max);
+ break;
+ case _COLEMAK_DH:
+ rgb_matrix_layer_helper(DEFAULT_LAYER_2_HSV, mode, rgb_matrix_config.speed, type, led_min, led_max);
+ break;
+ case _COLEMAK:
+ rgb_matrix_layer_helper(DEFAULT_LAYER_3_HSV, mode, rgb_matrix_config.speed, type, led_min, led_max);
+ break;
+ case _DVORAK:
+ rgb_matrix_layer_helper(DEFAULT_LAYER_4_HSV, mode, rgb_matrix_config.speed, type, led_min, led_max);
+ break;
}
}
+
+bool rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max) {
+ if (userspace_config.rgb_layer_change) {
+ switch (get_highest_layer(layer_state)) {
+ case _GAMEPAD:
+ rgb_matrix_layer_helper(HSV_ORANGE, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW, led_min, led_max);
+ break;
+ case _DIABLO:
+ rgb_matrix_layer_helper(HSV_RED, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW, led_min, led_max);
+ break;
+ case _RAISE:
+ rgb_matrix_layer_helper(HSV_YELLOW, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW, led_min, led_max);
+ break;
+ case _LOWER:
+ rgb_matrix_layer_helper(HSV_GREEN, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW, led_min, led_max);
+ break;
+ case _ADJUST:
+ rgb_matrix_layer_helper(HSV_RED, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW, led_min, led_max);
+ break;
+ case _MOUSE:
+ rgb_matrix_layer_helper(HSV_PURPLE, 1, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW, led_min, led_max);
+ break;
+ default:
+ check_default_layer(0, LED_FLAG_UNDERGLOW, led_min, led_max);
+ break;
+ }
+ check_default_layer(0, LED_FLAG_MODIFIER, led_min, led_max);
+ }
+ return false;
+}
#endif
diff --git a/keyboards/splitkb/kyria/keymaps/drashna/mcuconf.h b/keyboards/splitkb/kyria/keymaps/drashna/mcuconf.h
new file mode 100644
index 00000000000..2bee30b3425
--- /dev/null
+++ b/keyboards/splitkb/kyria/keymaps/drashna/mcuconf.h
@@ -0,0 +1,35 @@
+/* Copyright 2020 Nick Brassel (tzarc)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#if defined(KEYBOARD_splitkb_kyria_rev3)
+# undef STM32_PWM_USE_ADVANCED
+# define STM32_PWM_USE_ADVANCED TRUE
+
+# undef STM32_PWM_USE_TIM2
+# define STM32_PWM_USE_TIM2 TRUE
+# undef STM32_PWM_USE_TIM3
+# define STM32_PWM_USE_TIM3 FALSE
+
+# undef STM32_SERIAL_USE_USART1
+# define STM32_SERIAL_USE_USART1 TRUE
+
+# undef STM32_ST_USE_TIMER
+# define STM32_ST_USE_TIMER 3
+#endif
diff --git a/keyboards/splitkb/kyria/keymaps/drashna/rules.mk b/keyboards/splitkb/kyria/keymaps/drashna/rules.mk
index 882a3fba092..bb872743b7e 100644
--- a/keyboards/splitkb/kyria/keymaps/drashna/rules.mk
+++ b/keyboards/splitkb/kyria/keymaps/drashna/rules.mk
@@ -11,6 +11,16 @@ KEY_LOCK_ENABLE = no
WPM_ENABLE = yes
ifeq ($(strip $(KEYBOARD)), splitkb/kyria/rev1/proton_c)
+ OVERLOAD_FEATURES = yes
+endif
+ifeq ($(strip $(KEYBOARD)), splitkb/kyria/rev3)
+ OVERLOAD_FEATURES = yes
+ CONVERT_TO = proton_c
+ WS2812_DRIVER = pwm
+ SERIAL_DRIVER = usart
+endif
+
+ifeq ($(strip $(OVERLOAD_FEATURES)), yes)
RGB_MATRIX_ENABLE = yes
CONSOLE_ENABLE = yes # Console for debug
MOUSEKEY_ENABLE = yes # Mouse keys
@@ -20,7 +30,8 @@ ifeq ($(strip $(KEYBOARD)), splitkb/kyria/rev1/proton_c)
ENCODER_MAP_ENABLE = yes
AUTOCORRECT_ENABLE = yes
CAPS_WORD_ENABLE = yes
- OLED_DRIVER = custom
+ AUDIO_ENABLE = no
+ DEBUG_MATRIX_SCAN_RATE_ENABLE = api
else
LTO_ENABLE = yes
BOOTLOADER = qmk-hid
diff --git a/keyboards/splitkb/zima/keymaps/drashna/keymap.c b/keyboards/splitkb/zima/keymaps/drashna/keymap.c
index de3d74474e9..f7f3b54fbd6 100644
--- a/keyboards/splitkb/zima/keymaps/drashna/keymap.c
+++ b/keyboards/splitkb/zima/keymaps/drashna/keymap.c
@@ -143,13 +143,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
return true;
}
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
- oled_timer = timer_read32();
- if (clockwise) {
- tap_code_delay(KC_VOLU, 10);
- } else {
- tap_code_delay(KC_VOLD, 10);
- }
- return false;
-}
diff --git a/keyboards/splitkb/zima/keymaps/drashna/readme.md b/keyboards/splitkb/zima/keymaps/drashna/readme.md
deleted file mode 100644
index 0f78f4bf18d..00000000000
--- a/keyboards/splitkb/zima/keymaps/drashna/readme.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# The default keymap for zima
-
-This includes support for the OLED and Encoder. However, the actual code is found in the `zima.c` file. This can be replaced by adding your own `oled_task_user(void)` and `encoder_update_user` functinons. These will replace what is in the keyboard, and allow you to customize these features.
-
-The reason that this is done this way, is so that this functionality will work on the [QMK Configurator](https://config.qmk.fm/#/splitkb/zima/LAYOUT_ortho_4x3)
-
-For reference, the code used for the oled and encoder defaults is in [zima.c](https://github.com/qmk/qmk_firmware/tree/master/keyboards/splitkb/zima/zima.c).
diff --git a/keyboards/teahouse/ayleen/info.json b/keyboards/teahouse/ayleen/info.json
index 408b7dc8a6c..e979b07e896 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 5a99e2955d7..e31939eb7ab 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 36f864fafcc..030a35cd8f6 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 7b72ccbf617..a86498753d2 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/viktus/osav2_numpad/info.json b/keyboards/viktus/osav2_numpad/info.json
index d347631ccc9..941d65f3678 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 ce8a1d27741..ac99f1d8c7c 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 ce8a1d27741..ac99f1d8c7c 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 00000000000..e4f59c3b6bf
--- /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 00000000000..33bdb2d5eff
--- /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 00000000000..55ca939e3f4
--- /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 00000000000..7545c946c3f
--- /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 00000000000..7545c946c3f
--- /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 00000000000..1e5b99807cb
--- /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 00000000000..2337fc55f39
--- /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 00000000000..990bfe04fe7
--- /dev/null
+++ b/keyboards/viktus/osav2_numpad_topre/readme.md
@@ -0,0 +1,27 @@
+# OSAv2 Numpad - Topre
+
+
+
+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 00000000000..037e26c530c
--- /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/osav2_topre/ec.c b/keyboards/viktus/osav2_topre/ec.c
new file mode 100644
index 00000000000..fd2e8fa0ec5
--- /dev/null
+++ b/keyboards/viktus/osav2_topre/ec.c
@@ -0,0 +1,205 @@
+/* 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 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;
+
+ //Modifying threshold values for overlapping pads
+ switch(row) {
+ case 0:
+ switch(col) {
+ case 14: // lower threshold for split backspace: left 1U( rest, btm)
+ case 15: // lower threshold for 2U backspace: 2U(38 rest, 60 btm)
+ reset_pt = 44;
+ actuation_pt = 48;
+ break;
+ }
+ break;
+ case 3:
+ switch(col) {
+ case 14: // Lower threshold for right shift: 1.75U(40 rest, 70 btm)
+ reset_pt = 48;
+ actuation_pt = 53;
+ break;
+ }
+ break;
+ case 4:
+ switch(col) {
+ case 3: // Lower threshold for left space: col3( rest, btm)
+ case 4: // Lower threshold for left space: col4(38 rest, 88 btm)
+ reset_pt = 50;
+ actuation_pt = 60;
+ break;
+ case 5: // Lower threshold for left space: col5( rest, btm)
+ case 6: // Lower threshold for left space: col6(40 rest, 80 btm)
+ reset_pt = 48;
+ actuation_pt = 58;
+ break;
+ case 14: // Lower threshold for right shift: 2.75U( rest, btm)
+ reset_pt = 48;
+ 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/osav2_topre/ec.h b/keyboards/viktus/osav2_topre/ec.h
new file mode 100644
index 00000000000..76da647dc86
--- /dev/null
+++ b/keyboards/viktus/osav2_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, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt);
diff --git a/keyboards/viktus/osav2_topre/info.json b/keyboards/viktus/osav2_topre/info.json
new file mode 100644
index 00000000000..1f2120ed57e
--- /dev/null
+++ b/keyboards/viktus/osav2_topre/info.json
@@ -0,0 +1,588 @@
+{
+ "manufacturer": "Viktus Design LLC",
+ "keyboard_name": "OSAv2 - Topre",
+ "maintainer": "BlindAssassin111",
+ "url": "https://viktus.design",
+ "usb": {
+ "device_version": "1.6.0",
+ "vid": "0x5644",
+ "pid": "0x446F"
+ },
+ "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", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "B7", "F1", "F0", "E6", "B0", "B1", "B2", "B3"],
+ "rows": ["A1", "A0", "A3", "A4", "A2"]
+ },
+ "indicators": {
+ "num_lock": "B4",
+ "caps_lock": "D7",
+ "scroll_lock": "D6"
+ },
+ "layouts": {
+ "LAYOUT_split_back": {
+ "layout": [
+ { "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
+ { "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
+ { "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
+ { "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
+ { "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
+ { "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
+ { "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
+ { "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
+ { "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
+ { "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
+ { "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
+ { "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
+ { "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
+ { "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
+ { "label": "K014", "matrix": [0, 14], "x": 15.75, "y": 0 },
+ { "label": "K015", "matrix": [0, 15], "x": 16.75, "y": 0 },
+ { "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
+ { "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
+ { "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
+ { "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
+ { "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
+ { "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
+ { "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
+ { "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
+ { "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
+ { "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
+ { "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
+ { "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
+ { "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
+ { "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
+ { "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
+ { "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
+ { "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
+ { "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
+ { "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
+ { "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
+ { "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
+ { "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
+ { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
+ { "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
+ { "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
+ { "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
+ { "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
+ { "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
+ { "label": "K414", "matrix": [4, 14], "w": 2.75, "x": 15.75, "y": 3 },
+ { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
+ { "label": "K44", "matrix": [4, 4], "w": 2.25, "x": 5.5, "y": 4 },
+ { "label": "K46", "matrix": [4, 6], "x": 7.75, "y": 4 },
+ { "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
+ { "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
+ { "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_2u_back": {
+ "layout": [
+ { "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
+ { "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
+ { "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
+ { "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
+ { "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
+ { "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
+ { "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
+ { "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
+ { "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
+ { "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
+ { "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
+ { "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
+ { "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
+ { "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
+ { "label": "K015", "matrix": [0, 15], "w": 2, "x": 15.75, "y": 0 },
+ { "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
+ { "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
+ { "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
+ { "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
+ { "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
+ { "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
+ { "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
+ { "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
+ { "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
+ { "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
+ { "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
+ { "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
+ { "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
+ { "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
+ { "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
+ { "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
+ { "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
+ { "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
+ { "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
+ { "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
+ { "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
+ { "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
+ { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
+ { "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
+ { "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
+ { "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
+ { "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
+ { "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
+ { "label": "K414", "matrix": [4, 14], "w": 2.75, "x": 15.75, "y": 3 },
+ { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
+ { "label": "K44", "matrix": [4, 4], "w": 2.25, "x": 5.5, "y": 4 },
+ { "label": "K46", "matrix": [4, 6], "x": 7.75, "y": 4 },
+ { "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
+ { "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
+ { "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_split_back_175u_shift": {
+ "layout": [
+ { "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
+ { "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
+ { "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
+ { "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
+ { "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
+ { "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
+ { "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
+ { "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
+ { "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
+ { "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
+ { "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
+ { "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
+ { "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
+ { "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
+ { "label": "K014", "matrix": [0, 14], "x": 15.75, "y": 0 },
+ { "label": "K015", "matrix": [0, 15], "x": 16.75, "y": 0 },
+ { "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
+ { "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
+ { "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
+ { "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
+ { "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
+ { "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
+ { "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
+ { "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
+ { "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
+ { "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
+ { "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
+ { "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
+ { "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
+ { "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
+ { "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
+ { "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
+ { "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
+ { "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
+ { "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
+ { "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
+ { "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
+ { "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
+ { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
+ { "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
+ { "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
+ { "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
+ { "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
+ { "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
+ { "label": "K314", "matrix": [3, 14], "w": 1.75, "x": 15.75, "y": 3 },
+ { "label": "K315", "matrix": [3, 15], "x": 17.5, "y": 3 },
+ { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
+ { "label": "K44", "matrix": [4, 4], "w": 2.25, "x": 5.5, "y": 4 },
+ { "label": "K46", "matrix": [4, 6], "x": 7.75, "y": 4 },
+ { "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
+ { "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
+ { "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_2u_back_175u_shift": {
+ "layout": [
+ { "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
+ { "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
+ { "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
+ { "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
+ { "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
+ { "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
+ { "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
+ { "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
+ { "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
+ { "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
+ { "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
+ { "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
+ { "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
+ { "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
+ { "label": "K015", "matrix": [0, 15], "w": 2, "x": 15.75, "y": 0 },
+ { "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
+ { "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
+ { "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
+ { "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
+ { "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
+ { "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
+ { "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
+ { "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
+ { "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
+ { "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
+ { "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
+ { "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
+ { "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
+ { "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
+ { "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
+ { "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
+ { "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
+ { "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
+ { "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
+ { "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
+ { "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
+ { "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
+ { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
+ { "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
+ { "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
+ { "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
+ { "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
+ { "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
+ { "label": "K314", "matrix": [3, 14], "w": 1.75, "x": 15.75, "y": 3 },
+ { "label": "K315", "matrix": [3, 15], "x": 17.5, "y": 3 },
+ { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
+ { "label": "K44", "matrix": [4, 4], "w": 2.25, "x": 5.5, "y": 4 },
+ { "label": "K46", "matrix": [4, 6], "x": 7.75, "y": 4 },
+ { "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
+ { "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
+ { "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_split_back_mirrored": {
+ "layout": [
+ { "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
+ { "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
+ { "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
+ { "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
+ { "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
+ { "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
+ { "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
+ { "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
+ { "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
+ { "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
+ { "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
+ { "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
+ { "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
+ { "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
+ { "label": "K014", "matrix": [0, 14], "x": 15.75, "y": 0 },
+ { "label": "K015", "matrix": [0, 15], "x": 16.75, "y": 0 },
+ { "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
+ { "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
+ { "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
+ { "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
+ { "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
+ { "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
+ { "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
+ { "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
+ { "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
+ { "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
+ { "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
+ { "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
+ { "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
+ { "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
+ { "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
+ { "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
+ { "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
+ { "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
+ { "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
+ { "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
+ { "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
+ { "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
+ { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
+ { "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
+ { "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
+ { "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
+ { "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
+ { "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
+ { "label": "K414", "matrix": [4, 14], "w": 2.75, "x": 15.75, "y": 3 },
+ { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
+ { "label": "K44", "matrix": [4, 3], "x": 5.5, "y": 4 },
+ { "label": "K46", "matrix": [4, 5], "w": 2.25, "x": 6.5, "y": 4 },
+ { "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
+ { "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
+ { "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_2u_back_mirrored": {
+ "layout": [
+ { "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
+ { "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
+ { "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
+ { "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
+ { "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
+ { "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
+ { "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
+ { "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
+ { "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
+ { "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
+ { "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
+ { "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
+ { "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
+ { "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
+ { "label": "K015", "matrix": [0, 15], "w": 2, "x": 15.75, "y": 0 },
+ { "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
+ { "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
+ { "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
+ { "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
+ { "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
+ { "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
+ { "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
+ { "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
+ { "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
+ { "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
+ { "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
+ { "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
+ { "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
+ { "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
+ { "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
+ { "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
+ { "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
+ { "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
+ { "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
+ { "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
+ { "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
+ { "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
+ { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
+ { "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
+ { "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
+ { "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
+ { "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
+ { "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
+ { "label": "K414", "matrix": [4, 14], "w": 2.75, "x": 15.75, "y": 3 },
+ { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
+ { "label": "K44", "matrix": [4, 3], "x": 5.5, "y": 4 },
+ { "label": "K46", "matrix": [4, 5], "w": 2.25, "x": 6.5, "y": 4 },
+ { "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
+ { "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
+ { "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_split_back_175u_shift_mirrored": {
+ "layout": [
+ { "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
+ { "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
+ { "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
+ { "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
+ { "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
+ { "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
+ { "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
+ { "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
+ { "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
+ { "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
+ { "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
+ { "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
+ { "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
+ { "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
+ { "label": "K014", "matrix": [0, 14], "x": 15.75, "y": 0 },
+ { "label": "K015", "matrix": [0, 15], "x": 16.75, "y": 0 },
+ { "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
+ { "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
+ { "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
+ { "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
+ { "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
+ { "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
+ { "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
+ { "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
+ { "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
+ { "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
+ { "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
+ { "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
+ { "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
+ { "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
+ { "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
+ { "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
+ { "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
+ { "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
+ { "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
+ { "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
+ { "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
+ { "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
+ { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
+ { "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
+ { "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
+ { "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
+ { "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
+ { "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
+ { "label": "K314", "matrix": [3, 14], "w": 1.75, "x": 15.75, "y": 3 },
+ { "label": "K315", "matrix": [3, 15], "x": 17.5, "y": 3 },
+ { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
+ { "label": "K44", "matrix": [4, 3], "x": 5.5, "y": 4 },
+ { "label": "K46", "matrix": [4, 5], "w": 2.25, "x": 6.5, "y": 4 },
+ { "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
+ { "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
+ { "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_2u_back_175u_shift_mirrored": {
+ "layout": [
+ { "label": "K00", "matrix": [0, 0], "x": 0.5, "y": 0 },
+ { "label": "K01", "matrix": [0, 1], "x": 1.75, "y": 0 },
+ { "label": "K02", "matrix": [0, 2], "x": 2.75, "y": 0 },
+ { "label": "K03", "matrix": [0, 3], "x": 3.75, "y": 0 },
+ { "label": "K04", "matrix": [0, 4], "x": 4.75, "y": 0 },
+ { "label": "K05", "matrix": [0, 5], "x": 5.75, "y": 0 },
+ { "label": "K06", "matrix": [0, 6], "x": 6.75, "y": 0 },
+ { "label": "K07", "matrix": [0, 7], "x": 7.75, "y": 0 },
+ { "label": "K08", "matrix": [0, 8], "x": 9.75, "y": 0 },
+ { "label": "K09", "matrix": [0, 9], "x": 10.75, "y": 0 },
+ { "label": "K010", "matrix": [0, 10], "x": 11.75, "y": 0 },
+ { "label": "K011", "matrix": [0, 11], "x": 12.75, "y": 0 },
+ { "label": "K012", "matrix": [0, 12], "x": 13.75, "y": 0 },
+ { "label": "K013", "matrix": [0, 13], "x": 14.75, "y": 0 },
+ { "label": "K015", "matrix": [0, 15], "w": 2, "x": 15.75, "y": 0 },
+ { "label": "K10", "matrix": [1, 0], "x": 0.25, "y": 1 },
+ { "label": "K11", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
+ { "label": "K12", "matrix": [1, 2], "x": 3, "y": 1 },
+ { "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
+ { "label": "K14", "matrix": [1, 4], "x": 5, "y": 1 },
+ { "label": "K15", "matrix": [1, 5], "x": 6, "y": 1 },
+ { "label": "K16", "matrix": [1, 6], "x": 7, "y": 1 },
+ { "label": "K18", "matrix": [1, 8], "x": 9.5, "y": 1 },
+ { "label": "K19", "matrix": [1, 9], "x": 10.5, "y": 1 },
+ { "label": "K110", "matrix": [1, 10], "x": 11.5, "y": 1 },
+ { "label": "K111", "matrix": [1, 11], "x": 12.5, "y": 1 },
+ { "label": "K112", "matrix": [1, 12], "x": 13.5, "y": 1 },
+ { "label": "K113", "matrix": [1, 13], "x": 14.5, "y": 1 },
+ { "label": "K114", "matrix": [1, 14], "x": 15.5, "y": 1 },
+ { "label": "K115", "matrix": [1, 15], "w": 1.5, "x": 16.5, "y": 1 },
+ { "label": "K20", "matrix": [2, 0], "x": 0, "y": 2 },
+ { "label": "K21", "matrix": [2, 1], "w": 1.75, "x": 1.25, "y": 2 },
+ { "label": "K22", "matrix": [2, 2], "x": 3, "y": 2 },
+ { "label": "K23", "matrix": [2, 3], "x": 4, "y": 2 },
+ { "label": "K24", "matrix": [2, 4], "x": 5, "y": 2 },
+ { "label": "K25", "matrix": [2, 5], "x": 6, "y": 2 },
+ { "label": "K26", "matrix": [2, 6], "x": 7, "y": 2 },
+ { "label": "K28", "matrix": [2, 8], "x": 10, "y": 2 },
+ { "label": "K29", "matrix": [2, 9], "x": 11, "y": 2 },
+ { "label": "K210", "matrix": [2, 10], "x": 12, "y": 2 },
+ { "label": "K211", "matrix": [2, 11], "x": 13, "y": 2 },
+ { "label": "K212", "matrix": [2, 12], "x": 14, "y": 2 },
+ { "label": "K213", "matrix": [2, 13], "x": 15, "y": 2 },
+ { "label": "K215", "matrix": [2, 15], "w": 2.25, "x": 16, "y": 2 },
+ { "label": "K31", "matrix": [3, 1], "w": 2.25, "x": 1, "y": 3 },
+ { "label": "K32", "matrix": [3, 2], "x": 3.25, "y": 3 },
+ { "label": "K33", "matrix": [3, 3], "x": 4.25, "y": 3 },
+ { "label": "K34", "matrix": [3, 4], "x": 5.25, "y": 3 },
+ { "label": "K35", "matrix": [3, 5], "x": 6.25, "y": 3 },
+ { "label": "K36", "matrix": [3, 6], "x": 7.25, "y": 3 },
+ { "label": "K38", "matrix": [3, 8], "x": 9.75, "y": 3 },
+ { "label": "K39", "matrix": [3, 9], "x": 10.75, "y": 3 },
+ { "label": "K310", "matrix": [3, 10], "x": 11.75, "y": 3 },
+ { "label": "K311", "matrix": [3, 11], "x": 12.75, "y": 3 },
+ { "label": "K312", "matrix": [3, 12], "x": 13.75, "y": 3 },
+ { "label": "K313", "matrix": [3, 13], "x": 14.75, "y": 3 },
+ { "label": "K314", "matrix": [3, 14], "w": 1.75, "x": 15.75, "y": 3 },
+ { "label": "K315", "matrix": [3, 15], "x": 17.5, "y": 3 },
+ { "label": "K41", "matrix": [4, 1], "w": 1.5, "x": 1, "y": 4 },
+ { "label": "K42", "matrix": [4, 2], "w": 1.5, "x": 4, "y": 4 },
+ { "label": "K44", "matrix": [4, 3], "x": 5.5, "y": 4 },
+ { "label": "K46", "matrix": [4, 5], "w": 2.25, "x": 6.5, "y": 4 },
+ { "label": "K49", "matrix": [4, 9], "w": 2.75, "x": 9.75, "y": 4 },
+ { "label": "K411", "matrix": [4, 11], "w": 1.5, "x": 12.5, "y": 4 },
+ { "label": "K415", "matrix": [4, 15], "w": 1.5, "x": 16.75, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/viktus/osav2_topre/keymaps/default/keymap.c b/keyboards/viktus/osav2_topre/keymaps/default/keymap.c
new file mode 100644
index 00000000000..b9561c9b325
--- /dev/null
+++ b/keyboards/viktus/osav2_topre/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2022 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_split_back_175u_shift(
+ KC_DEL, 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_TILDE,
+ 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_BSPC,
+ KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT_split_back_175u_shift(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_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
+ )
+};
diff --git a/keyboards/viktus/osav2_topre/keymaps/via/keymap.c b/keyboards/viktus/osav2_topre/keymaps/via/keymap.c
new file mode 100644
index 00000000000..b9561c9b325
--- /dev/null
+++ b/keyboards/viktus/osav2_topre/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2022 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_split_back_175u_shift(
+ KC_DEL, 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_TILDE,
+ 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_BSPC,
+ KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT_split_back_175u_shift(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_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
+ )
+};
diff --git a/keyboards/viktus/osav2_topre/keymaps/via/rules.mk b/keyboards/viktus/osav2_topre/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/viktus/osav2_topre/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/viktus/osav2_topre/osav2_topre.c b/keyboards/viktus/osav2_topre/osav2_topre.c
new file mode 100644
index 00000000000..96b04090cf6
--- /dev/null
+++ b/keyboards/viktus/osav2_topre/osav2_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/viktus/osav2_topre/readme.md b/keyboards/viktus/osav2_topre/readme.md
new file mode 100644
index 00000000000..6379644cd69
--- /dev/null
+++ b/keyboards/viktus/osav2_topre/readme.md
@@ -0,0 +1,25 @@
+# OSAv2 Topre
+
+
+
+- Keyboard Maintainer: BlindAssassin111
+- Hardware Supported: OSAv2 Topre PCBs
+- Hardware Availability: Viktus Design LLC
+
+Make example for this keyboard (after setting up your build environment):
+
+ make viktus/osav2_topre:default
+
+Flashing example for this keyboard:
+
+ make viktus/osav2_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_topre/rules.mk b/keyboards/viktus/osav2_topre/rules.mk
new file mode 100644
index 00000000000..037e26c530c
--- /dev/null
+++ b/keyboards/viktus/osav2_topre/rules.mk
@@ -0,0 +1,3 @@
+CUSTOM_MATRIX = lite
+QUANTUM_LIB_SRC += analog.c
+SRC += ec.c
diff --git a/keyboards/work_louder/work_board/keymaps/drashna/keymap.c b/keyboards/work_louder/work_board/keymaps/drashna/keymap.c
index 99bbedfdcb0..1747ab638eb 100644
--- a/keyboards/work_louder/work_board/keymaps/drashna/keymap.c
+++ b/keyboards/work_louder/work_board/keymaps/drashna/keymap.c
@@ -91,8 +91,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-#ifdef ENCODER_ENABLE
-# ifdef ENCODER_MAP_ENABLE
+#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_DEFAULT_LAYER_1] = { { KC_DOWN, KC_UP } },
[_DEFAULT_LAYER_2] = { { _______, _______ } },
@@ -107,23 +106,6 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_ADJUST] = { { CK_DOWN, CK_UP } },
};
// clang-format on
-# else
-bool encoder_update_user(uint8_t index, bool clockwise) {
- switch (get_highest_layer(layer_state)) {
- case _RAISE:
- clockwise ? rgblight_step() : rgblight_step_reverse();
- break;
- case _LOWER:
- clockwise ? rgb_matrix_step() : rgb_matrix_step_reverse();
- break;
- default:
- clockwise ? tap_code(KC_VOLU) : tap_code(KC_VOLD);
- break;
- }
- return false;
-}
-# endif // ENCODER_ENABLE
-
#endif
bool rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max) {
@@ -133,8 +115,7 @@ bool rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max) {
#define THUMB_LED 6
#define RGB_MATRIX_INDICATOR_SET_COLOR_wrapper(...) RGB_MATRIX_INDICATOR_SET_COLOR(__VA_ARGS__)
- extern bool host_driver_disabled;
- if (host_driver_disabled) {
+ if (get_keyboard_lock()) {
RGB_MATRIX_INDICATOR_SET_COLOR_wrapper(THUMB_LED, RGB_OFF);
} else {
switch (get_highest_layer(default_layer_state)) {
diff --git a/keyboards/work_louder/work_board/keymaps/drashna/rules.mk b/keyboards/work_louder/work_board/keymaps/drashna/rules.mk
index 6a98d14daf6..8bdc4869296 100644
--- a/keyboards/work_louder/work_board/keymaps/drashna/rules.mk
+++ b/keyboards/work_louder/work_board/keymaps/drashna/rules.mk
@@ -1,10 +1,10 @@
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+BOOTMAGIC_ENABLE = yes
EXTRAKEY_ENABLE = yes
MOUSEKEY_ENABLE = yes
TAP_DANCE_ENABLE = no
NKRO_ENABLE = yes
-RGBLIGHT_STARTUP_ANIMATION = yes
+RGBLIGHT_STARTUP_ANIMATION = no
ENCODER_MAP_ENABLE = yes
-AUTOCORRECT_ENABLE = no
-CUSTOM_UNICODE_ENABLE = no
+AUTOCORRECT_ENABLE = no
+CUSTOM_UNICODE_ENABLE = no
diff --git a/keyboards/wuque/creek70/info.json b/keyboards/wuque/creek70/info.json
index 5e54c694ed6..10e43b340db 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": [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": [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, 15], "x": 16.5, "y": 0},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "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, 0], "x": 0, "y": 1},
- {"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, 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, 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": [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, 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, 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": {
+ "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 4a067852545..167aebeaf93 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 9c0a99a9864..10c12d41ba2 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 00000000000..45585b71bbb
--- /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/xelus/rs108/info.json b/keyboards/xelus/rs108/info.json
index 62377018b6f..fd2358d68dd 100644
--- a/keyboards/xelus/rs108/info.json
+++ b/keyboards/xelus/rs108/info.json
@@ -96,25 +96,25 @@
{"matrix": [5, 8], "x": 18.5, "y": 2.25},
{"matrix": [4, 9], "x": 19.5, "y": 2.25},
{"matrix": [5, 9], "x": 20.5, "y": 2.25},
- {"matrix": [6, 0], "x": 21.5, "y": 2.25, "h": 2},
- {"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": [7, 6], "x": 11.75, "y": 3.25},
- {"matrix": [7, 8], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [6, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [7, 0], "x": 1.75, "y": 3.25},
+ {"matrix": [6, 1], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 1], "x": 3.75, "y": 3.25},
+ {"matrix": [6, 2], "x": 4.75, "y": 3.25},
+ {"matrix": [7, 2], "x": 5.75, "y": 3.25},
+ {"matrix": [6, 3], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 7.75, "y": 3.25},
+ {"matrix": [6, 4], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 9.75, "y": 3.25},
+ {"matrix": [6, 5], "x": 10.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 11.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 12.75, "y": 3.25, "w": 2.25},
- {"matrix": [6, 9], "x": 18.5, "y": 3.25},
- {"matrix": [7, 9], "x": 19.5, "y": 3.25},
- {"matrix": [6, 10], "x": 20.5, "y": 3.25},
+ {"matrix": [7, 8], "x": 18.5, "y": 3.25},
+ {"matrix": [6, 9], "x": 19.5, "y": 3.25},
+ {"matrix": [7, 9], "x": 20.5, "y": 3.25},
+ {"matrix": [6, 10], "x": 21.5, "y": 2.25, "h": 2},
{"matrix": [8, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [9, 0], "x": 2.25, "y": 4.25},
@@ -134,23 +134,23 @@
{"matrix": [9, 8], "x": 18.5, "y": 4.25},
{"matrix": [8, 9], "x": 19.5, "y": 4.25},
{"matrix": [9, 9], "x": 20.5, "y": 4.25},
- {"matrix": [10, 0], "x": 21.5, "y": 4.25, "h": 2},
- {"matrix": [11, 0], "x": 0, "y": 5.25, "w": 1.25},
- {"matrix": [10, 1], "x": 1.25, "y": 5.25, "w": 1.25},
- {"matrix": [11, 2], "x": 2.5, "y": 5.25, "w": 1.25},
- {"matrix": [11, 4], "x": 3.75, "y": 5.25, "w": 6.25},
- {"matrix": [10, 5], "x": 10, "y": 5.25, "w": 1.25},
- {"matrix": [10, 6], "x": 11.25, "y": 5.25, "w": 1.25},
- {"matrix": [11, 6], "x": 12.5, "y": 5.25, "w": 1.25},
- {"matrix": [10, 7], "x": 13.75, "y": 5.25, "w": 1.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, 2], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [11, 4], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [10, 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": 15.25, "y": 5.25},
- {"matrix": [10, 8], "x": 16.25, "y": 5.25},
- {"matrix": [10, 9], "x": 17.25, "y": 5.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.25},
+ {"matrix": [10, 8], "x": 17.25, "y": 5.25},
+ {"matrix": [10, 9], "x": 18.5, "y": 5.25, "w": 2},
- {"matrix": [11, 9], "x": 18.5, "y": 5.25, "w": 2},
- {"matrix": [10, 10], "x": 20.5, "y": 5.25}
+ {"matrix": [11, 9], "x": 20.5, "y": 5.25},
+ {"matrix": [10, 10], "x": 21.5, "y": 4.25, "h": 2}
]
}
}
diff --git a/keyboards/yandrstudio/transition80/info.json b/keyboards/yandrstudio/transition80/info.json
index baac6f4f9bd..7f9364a18fd 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 d9f51ce6f86..8d3ab5e327c 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 00000000000..f8430dd3a52
--- /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 00000000000..d4125b6cee4
--- /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 00000000000..6543ab1e548
--- /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 00000000000..4392795b14e
--- /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 0be5c0a46eb..b971c88fe17 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 00000000000..77392f1fb53
--- /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/z12/keymaps/zigotica/keymap.c b/keyboards/z12/keymaps/zigotica/keymap.c
index ef01561f1af..f4f5709fe02 100644
--- a/keyboards/z12/keymaps/zigotica/keymap.c
+++ b/keyboards/z12/keymaps/zigotica/keymap.c
@@ -38,9 +38,10 @@ void raw_hid_receive(uint8_t* data, uint8_t length) {
enum custom_keycodes {
VIM_SIF = SAFE_RANGE,
- VIM_SIP,
- VIM_RIF,
- VIM_RIP,
+ VIM_FORMAT,
+ VIM_GODEF,
+ VIM_RENSYM,
+ VIM_CODEACT,
VIM_NEW
};
@@ -49,31 +50,45 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case VIM_SIF:// Search in File
if (record->event.pressed) {
register_code(KC_ESC);
- tap_code(KC_SLASH);
+ tap_code(KC_SPACE);
+ tap_code(KC_S);
+ tap_code(KC_C);
} else { // released
unregister_code(KC_ESC);
}
break;
- case VIM_SIP:// Search in Project
+ case VIM_FORMAT:// Autoformat file
if (record->event.pressed) {
register_code(KC_ESC);
- SEND_STRING(":Ag ");
+ tap_code(KC_F9);
} else { // released
unregister_code(KC_ESC);
}
break;
- case VIM_RIF:// Replace in File
+ case VIM_GODEF:// Go to Definition
if (record->event.pressed) {
register_code(KC_ESC);
- SEND_STRING(":%s/a/b/g");
+ tap_code(KC_G);
+ tap_code(KC_D);
} else { // released
unregister_code(KC_ESC);
}
break;
- case VIM_RIP:// Replace in Project
+ case VIM_CODEACT:// Code actions
if (record->event.pressed) {
register_code(KC_ESC);
- SEND_STRING(":cdo %s/a/b/g");
+ tap_code(KC_SPACE);
+ tap_code(KC_C);
+ tap_code(KC_A);
+ } else { // released
+ unregister_code(KC_ESC);
+ }
+ break;
+ case VIM_RENSYM:// Rename symbol
+ if (record->event.pressed) {
+ register_code(KC_ESC);
+ tap_code(KC_SPACE);
+ tap_code(KC_R);
} else { // released
unregister_code(KC_ESC);
}
@@ -160,15 +175,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |BUFFER | BROW | VIM | SCROLL|
* |-------+------+------+-------|
* |-------+-------+-------|
- * |SRCH FL|REPL FL|NEW BUF|
+ * |SRCH FL| FORMAT|NEW BUF|
* |-------+-------+-------|
- * |SRCH PR|REPL PR| o |
+ * |REN SYM|GO DEF |CODEACT|
* |-------+-------+-------|
*/
[_VIM] = LAYOUT(
_______, _______,
_______, _______, _______, _______,
- VIM_SIF, VIM_RIF, VIM_NEW,
- VIM_SIP, VIM_RIP, _______
+ VIM_SIF, VIM_FORMAT, VIM_NEW,
+ VIM_RENSYM, VIM_GODEF, VIM_CODEACT
),
};
diff --git a/keyboards/z12/keymaps/zigotica/oled.c b/keyboards/z12/keymaps/zigotica/oled.c
index c96fc0f7086..c1befb08d3f 100644
--- a/keyboards/z12/keymaps/zigotica/oled.c
+++ b/keyboards/z12/keymaps/zigotica/oled.c
@@ -17,23 +17,36 @@ along with this program. If not, see .
#include "zigotica.h"
static void render_status(void) {
- oled_write_P(PSTR("z12 v1.0\n"), false);
- oled_write_P(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state)) {
- case _VIM:
- oled_write_P(PSTR("VIM \n\nBUFFER SCROLL"), false);
+ case _BASE:
+ oled_write_P(PSTR("Volume Scroll"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR(" z12 v1.1"), false);
break;
case _FIGMA:
- oled_write_P(PSTR("FIGMA \n\nTABS ZOOM"), false);
+ oled_write_P(PSTR("Tabs Zoom"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("ZoomFit Grids Full"), false);
+ oled_write_P(PSTR("Zoom100 Next Color"), false);
break;
case _BROWSER:
- oled_write_P(PSTR("BROWSER \n\nTABS SCROLL"), false);
+ oled_write_P(PSTR("Tabs Scroll"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("Search Fav DevTool"), false);
+ oled_write_P(PSTR("Zoom100 Mute Read"), false);
break;
- case _BASE:
- oled_write_P(PSTR("BASE \n\nVOLUME SCROLL"), false);
+ case _VIM:
+ oled_write_P(PSTR("Buffer Scroll"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("Find-F Format New"), false);
+ oled_write_P(PSTR("Rename Go-Def Action"), false);
break;
default:
- oled_write_P(PSTR("Undef\n"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR(" "), false);
}
}
diff --git a/layouts/community/ergodox/drashna/keymap.c b/layouts/community/ergodox/drashna/keymap.c
index 846bbc2351c..1853b700713 100644
--- a/layouts/community/ergodox/drashna/keymap.c
+++ b/layouts/community/ergodox/drashna/keymap.c
@@ -18,8 +18,6 @@
enum more_custom_keycodes {
KC_SWAP_NUM = USER_SAFE_RANGE,
- PM_SCROLL,
- PM_PRECISION,
};
// define layer change stuff for underglow indicator
@@ -44,9 +42,9 @@ bool skip_leds = false;
LAYOUT_ergodox_pretty_wrapper( \
KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, \
LALT_T(KC_TAB), K01, K02, K03, K04, K05, TG_DBLO, TG_DBLO, K06, K07, K08, K09, K0A, KC_BSLS, \
- KC_C1R3, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(K1B), \
- KC_MLSF, CTL_T(K21), K22, K23, K24, K25, TG_GAME, TG_GAME, K26, K27, K28, K29, RCTL_T(K2A), KC_MRSF, \
- KC_GRV, OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC, KC_BTN1, KC_BTN3, KC_BTN2, PM_SCROLL, PM_PRECISION, \
+ KC_C1R3, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(K1B), \
+ KC_MLSF, CTL_T(K21), K22, K23, K24, K25, TG_GAME, TG_GAME, K26, K27, K28, K29, RCTL_T(K2A), KC_MRSF, \
+ KC_GRV, OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_NO, \
OS_LALT, OS_LGUI, OS_RGUI, CTL_T(KC_ESCAPE), \
KC_APP, KC_MENU, \
KC_SPC, LT(_LOWER, KC_BSPC), OS_LWR, OS_RSE, LT(_RAISE, KC_DEL), KC_ENT \
@@ -180,36 +178,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
// clang-format on
-#ifdef PIMORONI_TRACKBALL_ENABLE
-void run_trackball_cleanup(void) {
- // if (trackball_is_scrolling()) {
- // trackball_set_rgbw(RGB_CYAN, 0x00);
- // } else if (trackball_get_precision() != 1.0) {
- // trackball_set_rgbw(RGB_GREEN, 0x00);
- // } else {
- // trackball_set_rgbw(RGB_MAGENTA, 0x00);
- // }
-}
-
-void keyboard_post_init_keymap(void) {
- // trackball_set_precision(1.5);
- // trackball_set_rgbw(RGB_MAGENTA, 0x00);
-}
-// void shutdown_keymap(void) { trackball_set_rgbw(RGB_RED, 0x00); }
-
-static bool mouse_button_one, trackball_button_one;
-
-void trackball_register_button(bool pressed, enum mouse_buttons button) {
- report_mouse_t currentReport = pointing_device_get_report();
- if (pressed) {
- currentReport.buttons |= button;
- } else {
- currentReport.buttons &= ~button;
- }
- pointing_device_set_report(currentReport);
-}
-#endif
-
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_1:
@@ -235,40 +203,15 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
case KC_SWAP_NUM:
if (record->event.pressed) {
userspace_config.swapped_numbers ^= 1;
- eeconfig_update_user(userspace_config.raw);
+ eeconfig_update_user_config(&userspace_config.raw);
}
break;
-#ifdef PIMORONI_TRACKBALL_ENABLE
- case PM_SCROLL:
- // trackball_set_scrolling(record->event.pressed);
- run_trackball_cleanup();
- break;
- case PM_PRECISION:
- // if (record->event.pressed) {
- // trackball_set_precision(1.5);
- // } else {
- // trackball_set_precision(1);
- // }
- // run_trackball_cleanup();
- break;
-# if !defined(MOUSEKEY_ENABLE)
- case KC_MS_BTN1:
- mouse_button_one = record->event.pressed;
- trackball_register_button(mouse_button_one | trackball_button_one, MOUSE_BTN1);
- break;
- case KC_MS_BTN2:
- trackball_register_button(record->event.pressed, MOUSE_BTN2);
- break;
- case KC_MS_BTN3:
- trackball_register_button(record->event.pressed, MOUSE_BTN3);
- break;
-# endif
-#endif
}
return true;
}
void housekeeping_task_keymap(void) { // runs frequently to update info
+#ifdef KEYBOARD_ergodox_ez
uint8_t modifiers = get_mods();
uint8_t led_usb_state = host_keyboard_leds();
uint8_t one_shot = get_oneshot_mods();
@@ -295,6 +238,7 @@ void housekeeping_task_keymap(void) { // runs frequently to update info
ergodox_right_led_3_set(10);
}
}
+#endif
}
bool indicator_is_this_led_used_keyboard(uint8_t index) {
diff --git a/layouts/community/ergodox/drashna/rules.mk b/layouts/community/ergodox/drashna/rules.mk
index f5e9b500e0e..072b70de19c 100644
--- a/layouts/community/ergodox/drashna/rules.mk
+++ b/layouts/community/ergodox/drashna/rules.mk
@@ -8,10 +8,13 @@ ifeq ($(strip $(KEYBOARD)), ergodox_ez)
RGB_MATRIX_ENABLE = yes
INDICATOR_LIGHTS = no
RGBLIGHT_STARTUP_ANIMATION = yes
- PIMORONI_TRACKBALL_ENABLE = no
- MOUSEKEY_ENABLE = no
endif
UNICODE_ENABLE = no
UNICDOEMAP_ENABLE = no
CUSTOM_UNICODE_ENABLE = no
+
+ifeq ($(strip $(KEYBOARD)), hotdox76v2)
+ OLED_ENABLE = no
+ RGB_MATRIX_ENABLE = no
+endif
diff --git a/layouts/community/ergodox/zweihander-macos/rules.mk b/layouts/community/ergodox/zweihander-macos/rules.mk
index 8011660ced1..4a9626356a2 100644
--- a/layouts/community/ergodox/zweihander-macos/rules.mk
+++ b/layouts/community/ergodox/zweihander-macos/rules.mk
@@ -1,3 +1,6 @@
# Don’t do a tricolor flashing-light wave when the computer is shut down in Windows,
# or when the machine is sleeping in macOS
SLEEP_LED_ENABLE = no
+
+# Don’t pretend to be a mouse (if a a mouse is plugged into a FreeBSD machine, an annoying cursor will pop up)
+MOUSEKEY_ENABLE = no
diff --git a/layouts/community/ortho_4x12/drashna/keymap.c b/layouts/community/ortho_4x12/drashna/keymap.c
index cc84c132d9f..475ccc5c3ab 100644
--- a/layouts/community/ortho_4x12/drashna/keymap.c
+++ b/layouts/community/ortho_4x12/drashna/keymap.c
@@ -237,34 +237,6 @@ void keyboard_post_init_keymap(void) {
}
#endif // RGB_MATRIX_INIT
-#ifdef ENCODER_ENABLE
-bool encoder_update_user(uint8_t index, bool clockwise) {
- switch (get_highest_layer(layer_state)) {
- case _RAISE:
- clockwise ? tap_code(KC_VOLD) : tap_code(KC_VOLU);
- break;
- case _LOWER:
-# ifdef RGB_MATRIX_ENABLE
- clockwise ? rgb_matrix_step() : rgb_matrix_step_reverse();
-# else
- clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP);
-# endif
- break;
- case _ADJUST:
-# ifdef AUDIO_CLICKY
- clockwise ? clicky_freq_up() : clicky_freq_down();
-# endif
- break;
- default:
- clockwise ? tap_code(KC_DOWN) : tap_code(KC_UP);
- }
-# ifdef AUDIO_CLICKY
- clicky_play();
-# endif
- return true;
-}
-#endif // ENCODER_ENABLE
-
#ifdef KEYBOARD_planck_rev6
bool dip_switch_update_user(uint8_t index, bool active) {
switch (index) {
diff --git a/layouts/default/readme.md b/layouts/default/readme.md
index 83902817964..a728d93d1a2 100644
--- a/layouts/default/readme.md
+++ b/layouts/default/readme.md
@@ -34,21 +34,6 @@ LAYOUT_60_ansi
└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
```
-```
-LAYOUT_60_ansi_arrow_split_bs_7u_spc
-┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │
-├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │
-├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴──┬───┼───┼───┤
-│ │ │ │ │ │ │ │ │
-└─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
-```
-
```
LAYOUT_60_ansi_arrow
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
@@ -64,6 +49,21 @@ LAYOUT_60_ansi_arrow
└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
```
+```
+LAYOUT_60_ansi_arrow_split_bs_7u_spc
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴──┬───┼───┼───┤
+│ │ │ │ │ │ │ │ │
+└─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
+```
+
```
LAYOUT_60_ansi_split_bs_rshift
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
@@ -925,6 +925,20 @@ LAYOUT_ergodox
└───┴───┴───┘ └───┴───┴───┘
```
+```
+LAYOUT_split_3x5_2
+┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │
+├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │
+└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
+ ┌───┬───┐ ┌───┬───┐
+ │ │ │ │ │ │
+ └───┴───┘ └───┴───┘
+```
+
```
LAYOUT_split_3x5_3
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
diff --git a/layouts/default/split_3x5_2/layout.json b/layouts/default/split_3x5_2/layout.json
index 1b1c3d0001a..db47180610b 100644
--- a/layouts/default/split_3x5_2/layout.json
+++ b/layouts/default/split_3x5_2/layout.json
@@ -7,5 +7,5 @@
[{y:-0.25,x:2},"",{x:6},""],
[{y:-0.875,x:1},"",{x:1},"",{x:4},"",{x:1},""],
[{y:-0.875},"",{x:3},"",{x:2},"",{x:3},""],
-[{y:-0.75,x:3.5},"",{x:3},""],
+[{y:0.25},{x:3.5},"",{x:3},""],
[{y:-0.75,x:4.5},"",{x:1},""]
diff --git a/lib/python/qmk/c_parse.py b/lib/python/qmk/c_parse.py
index 7dd464bd341..08d23cf5ba9 100644
--- a/lib/python/qmk/c_parse.py
+++ b/lib/python/qmk/c_parse.py
@@ -241,19 +241,24 @@ def _parse_led_config(file, matrix_cols, matrix_rows):
position_raw = []
flags = []
- found_led_config = False
+ found_led_config_t = False
+ found_g_led_config = False
bracket_count = 0
section = 0
current_row_index = 0
current_row = []
for _type, value in lex(_preprocess_c_file(file), CLexer()):
- # Assume g_led_config..stuff..;
- if value == 'g_led_config':
- found_led_config = True
+ if not found_g_led_config:
+ # Check for type
+ if value == 'led_config_t':
+ found_led_config_t = True
+ # Type found, now check for name
+ elif found_led_config_t and value == 'g_led_config':
+ found_g_led_config = True
elif value == ';':
- found_led_config = False
- elif found_led_config:
+ found_g_led_config = False
+ else:
# Assume bracket count hints to section of config we are within
if value == '{':
bracket_count += 1
diff --git a/lib/python/qmk/search.py b/lib/python/qmk/search.py
index c8ce85b96e8..2bbbc7806fc 100644
--- a/lib/python/qmk/search.py
+++ b/lib/python/qmk/search.py
@@ -80,9 +80,9 @@ def search_keymap_targets(keymap='default', filters=[], print_vals=[]):
if value is not None:
if func_name == 'length':
- valid_keymaps = filter(lambda e: key in e[2] and len(e[2].get(key)) == int(value), valid_keymaps)
+ valid_keymaps = filter(lambda e, key=key, value=value: key in e[2] and len(e[2].get(key)) == int(value), valid_keymaps)
elif func_name == 'contains':
- valid_keymaps = filter(lambda e: key in e[2] and value in e[2].get(key), valid_keymaps)
+ valid_keymaps = filter(lambda e, key=key, value=value: key in e[2] and value in e[2].get(key), valid_keymaps)
else:
cli.log.warning(f'Unrecognized filter expression: {function_match.group(0)}')
continue
@@ -90,9 +90,9 @@ def search_keymap_targets(keymap='default', filters=[], print_vals=[]):
cli.log.info(f'Filtering on condition: {{fg_green}}{func_name}{{fg_reset}}({{fg_cyan}}{key}{{fg_reset}}, {{fg_cyan}}{value}{{fg_reset}})...')
else:
if func_name == 'exists':
- valid_keymaps = filter(lambda e: key in e[2], valid_keymaps)
+ valid_keymaps = filter(lambda e, key=key: key in e[2], valid_keymaps)
elif func_name == 'absent':
- valid_keymaps = filter(lambda e: key not in e[2], valid_keymaps)
+ valid_keymaps = filter(lambda e, key=key: key not in e[2], valid_keymaps)
else:
cli.log.warning(f'Unrecognized filter expression: {function_match.group(0)}')
continue
diff --git a/platforms/chibios/mcu_selection.mk b/platforms/chibios/mcu_selection.mk
index 56b81493de2..f14b16b169d 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/painter/lvgl/qp_lvgl.c b/quantum/painter/lvgl/qp_lvgl.c
index 660ffb61008..6cc0061d73b 100644
--- a/quantum/painter/lvgl/qp_lvgl.c
+++ b/quantum/painter/lvgl/qp_lvgl.c
@@ -112,9 +112,6 @@ bool qp_lvgl_attach(painter_device_t device) {
uint16_t panel_width, panel_height, offset_x, offset_y;
qp_get_geometry(selected_display, &panel_width, &panel_height, NULL, &offset_x, &offset_y);
- panel_width -= offset_x;
- panel_height -= offset_y;
-
// Setting up display driver
static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c
index ea28801a40a..158112f31da 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/drashna/bootmagic_better.c b/users/drashna/bootmagic_better.c
index ffd2e609ae1..fa1078e37da 100644
--- a/users/drashna/bootmagic_better.c
+++ b/users/drashna/bootmagic_better.c
@@ -28,7 +28,7 @@ void bootmagic_lite(void) {
if (!is_keyboard_left()) {
row = BOOTMAGIC_LITE_ROW_RIGHT;
col = BOOTMAGIC_LITE_COLUMN_RIGHT;
-#if defined(BOOTMAGIC_LITE_EEPROM_ROW) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN) && defined(BOOTMAGIC_LITE_EEPROM_ROW_RIGHT) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT)
+# if defined(BOOTMAGIC_LITE_EEPROM_ROW) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN) && defined(BOOTMAGIC_LITE_EEPROM_ROW_RIGHT) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT)
row_e = BOOTMAGIC_LITE_EEPROM_ROW_RIGHT;
col_e = BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT;
# endif
diff --git a/users/drashna/callbacks.c b/users/drashna/callbacks.c
index 568f56c8d16..cab7e5278fe 100644
--- a/users/drashna/callbacks.c
+++ b/users/drashna/callbacks.c
@@ -3,6 +3,9 @@
#include "drashna.h"
+#ifdef CUSTOM_DYNAMIC_MACROS_ENABLE
+# include "keyrecords/dynamic_macros.h"
+#endif
#ifdef I2C_SCANNER_ENABLE
void housekeeping_task_i2c_scanner(void);
void keyboard_post_init_i2c(void);
@@ -10,7 +13,10 @@ void keyboard_post_init_i2c(void);
__attribute__((weak)) void keyboard_pre_init_keymap(void) {}
void keyboard_pre_init_user(void) {
- userspace_config.raw = eeconfig_read_user();
+ eeconfig_read_user_config(&userspace_config.raw);
+ if (!userspace_config.check) {
+ eeconfig_init_user();
+ }
keyboard_pre_init_keymap();
}
// Add reconfigurable functions here, for keymap customization
@@ -24,58 +30,8 @@ void keyboard_pre_init_user(void) {
void keyboard_post_init_qp(void);
#endif
-#ifdef OS_DETECTION_ENABLE
-os_variant_t os_type;
-
-uint32_t startup_exec(uint32_t trigger_time, void *cb_arg) {
- /* do something */
-
- if (is_keyboard_master()) {
- os_type = detected_host_os();
- if (os_type) {
- bool is_mac = (os_type == OS_MACOS) || (os_type == OS_IOS);
- keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = is_mac;
-# ifdef UNICODE_COMMON_ENABLE
- uint8_t mode = is_mac ? UNICODE_MODE_MACOS : UNICODE_MODE_WINCOMPOSE;
- if (mode != get_unicode_input_mode()) {
- set_unicode_input_mode(mode);
- }
-# endif
- switch (os_type) {
- case OS_UNSURE:
- xprintf("unknown OS Detected\n");
- break;
- case OS_LINUX:
- xprintf("Linux Detected\n");
- break;
- case OS_WINDOWS:
- xprintf("Windows Detected\n");
- break;
-# if 0
- case OS_WINDOWS_UNSURE:
- xprintf("Windows? Detected\n");
- break;
-# endif
- case OS_MACOS:
- xprintf("MacOS Detected\n");
- break;
- case OS_IOS:
- xprintf("iOS Detected\n");
- break;
-# if 0
- case OS_PS5:
- xprintf("PlayStation 5 Detected\n");
- break;
- case OS_HANDHELD:
- xprintf("Nintend Switch/Quest 2 Detected\n");
- break;
-# endif
- }
- }
- }
-
- return os_type ? 0 : 500;
-}
+#if defined(OS_DETECTION_ENABLE) && defined(DEFERRED_EXEC_ENABLE)
+uint32_t startup_exec(uint32_t trigger_time, void *cb_arg);
#endif
__attribute__((weak)) void keyboard_post_init_keymap(void) {}
@@ -103,8 +59,10 @@ void keyboard_post_init_user(void) {
DDRB &= ~(1 << 0);
PORTB &= ~(1 << 0);
#endif
-
-#ifdef OS_DETECTION_ENABLE
+#ifdef CUSTOM_DYNAMIC_MACROS_ENABLE
+ dynamic_macro_init();
+#endif
+#if defined(OS_DETECTION_ENABLE) && defined(DEFERRED_EXEC_ENABLE)
defer_exec(100, startup_exec, NULL);
#endif
@@ -153,9 +111,6 @@ void suspend_power_down_user(void) {
__attribute__((weak)) void suspend_wakeup_init_keymap(void) {}
void suspend_wakeup_init_user(void) {
-#ifdef OLED_ENABLE
- oled_timer_reset();
-#endif
suspend_wakeup_init_keymap();
}
@@ -217,6 +172,11 @@ layer_state_t layer_state_set_user(layer_state_t state) {
__attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t state) {
return state;
}
+
+#if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS)
+static float default_layer_songs[][MAX_LAYER][2] = DEFAULT_LAYER_SONGS;
+#endif
+
layer_state_t default_layer_state_set_user(layer_state_t state) {
if (!is_keyboard_master()) {
return state;
@@ -226,6 +186,21 @@ layer_state_t default_layer_state_set_user(layer_state_t state) {
#if defined(CUSTOM_RGBLIGHT)
state = default_layer_state_set_rgb_light(state);
#endif
+
+ static bool has_init_been_ran = false;
+ // We don't want to run this the first time it's called, since it's read from eeeprom and called
+ // as part of the startup process. But after that, it's okay.
+ if (has_init_been_ran) {
+#if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS)
+ if (get_highest_layer(state) < MAX_LAYER) {
+ PLAY_SONG(default_layer_songs[get_highest_layer(state)]);
+ }
+#endif
+ eeconfig_update_default_layer(state);
+ } else {
+ has_init_been_ran = true;
+ }
+
return state;
}
@@ -238,11 +213,23 @@ __attribute__((weak)) void eeconfig_init_keymap(void) {}
void eeconfig_init_user(void) {
userspace_config.raw = 0;
userspace_config.rgb_layer_change = true;
- userspace_config.autocorrection = true;
- eeconfig_update_user(userspace_config.raw);
+ userspace_config.check = true;
+#if defined(OLED_ENABLE)
+ userspace_config.oled_brightness = OLED_BRIGHTNESS;
+#else
+ userspace_config.oled_brightness = 255;
+#endif
+ eeconfig_update_user_config(&userspace_config.raw);
eeconfig_init_keymap();
}
+void eeconfig_init_user_datablock(void) {
+#if (EECONFIG_USER_DATA_SIZE) > 4
+ uint8_t eeconfig_empty_temp[(EECONFIG_USER_DATA_SIZE)-4] = {0};
+ eeconfig_update_user_data(eeconfig_empty_temp);
+#endif
+}
+
#ifdef SPLIT_KEYBOARD
__attribute__((weak)) void matrix_slave_scan_keymap(void) {}
void matrix_slave_scan_user(void) {
diff --git a/users/drashna/config.h b/users/drashna/config.h
index b4aa1283eb4..ec9bbf1afbe 100644
--- a/users/drashna/config.h
+++ b/users/drashna/config.h
@@ -3,9 +3,6 @@
#pragma once
-// Use custom magic number so that when switching branches, EEPROM always gets reset
-#define EECONFIG_MAGIC_NUMBER (uint16_t)0x1339
-
#ifdef IS_COMMAND
# undef IS_COMMAND
#endif
@@ -43,7 +40,6 @@
# define WPM_ESTIMATED_WORD_SIZE 5
#endif
-
#define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE, UNICODE_MODE_MACOS
#ifndef ONESHOT_TAP_TOGGLE
@@ -98,7 +94,22 @@
# define C15 PAL_LINE(GPIOC, 15)
#endif
-
#define ENABLE_COMPILE_KEYCODE
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
+
+/* --- PRINTF_BYTE_TO_BINARY macro's --- */
+#define PRINTF_BINARY_PATTERN_INT8 "%c%c%c%c%c%c%c%c"
+#define PRINTF_BYTE_TO_BINARY_INT8(i) (((i)&0x80ll) ? '1' : '0'), (((i)&0x40ll) ? '1' : '0'), (((i)&0x20ll) ? '1' : '0'), (((i)&0x10ll) ? '1' : '0'), (((i)&0x08ll) ? '1' : '0'), (((i)&0x04ll) ? '1' : '0'), (((i)&0x02ll) ? '1' : '0'), (((i)&0x01ll) ? '1' : '0')
+
+#define PRINTF_BINARY_PATTERN_INT16 PRINTF_BINARY_PATTERN_INT8 " " PRINTF_BINARY_PATTERN_INT8
+#define PRINTF_BYTE_TO_BINARY_INT16(i) PRINTF_BYTE_TO_BINARY_INT8((i) >> 8), PRINTF_BYTE_TO_BINARY_INT8(i)
+#define PRINTF_BINARY_PATTERN_INT32 PRINTF_BINARY_PATTERN_INT16 " " PRINTF_BINARY_PATTERN_INT16
+#define PRINTF_BYTE_TO_BINARY_INT32(i) PRINTF_BYTE_TO_BINARY_INT16((i) >> 16), PRINTF_BYTE_TO_BINARY_INT16(i)
+#define PRINTF_BINARY_PATTERN_INT64 PRINTF_BINARY_PATTERN_INT32 " " PRINTF_BINARY_PATTERN_INT32
+#define PRINTF_BYTE_TO_BINARY_INT64(i) PRINTF_BYTE_TO_BINARY_INT32((i) >> 32), PRINTF_BYTE_TO_BINARY_INT32(i)
+/* --- end macros --- */
+
+#ifndef EECONFIG_USER_DATA_SIZE
+# define EECONFIG_USER_DATA_SIZE 8
+#endif
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
index 259810c70f1..cad6db8f3d9 100644
--- a/users/drashna/drashna.c
+++ b/users/drashna/drashna.c
@@ -2,6 +2,8 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "drashna.h"
+#include
+#include
userspace_config_t userspace_config;
@@ -139,7 +141,7 @@ float autocorrect_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
# endif
# endif
-bool apply_autocorrect(uint8_t backspaces, const char* str) {
+bool apply_autocorrect(uint8_t backspaces, const char *str) {
if (layer_state_is(_GAMEPAD)) {
return false;
}
@@ -188,7 +190,7 @@ void oneshot_locked_mods_changed_user(uint8_t mods) {
# endif
#endif
-void format_layer_bitmap_string(char* buffer, layer_state_t state, layer_state_t default_state) {
+void format_layer_bitmap_string(char *buffer, layer_state_t state, layer_state_t default_state) {
for (int i = 0; i < 16; i++) {
if (i == 0 || i == 4 || i == 8 || i == 12) {
*buffer = ' ';
@@ -207,3 +209,111 @@ void format_layer_bitmap_string(char* buffer, layer_state_t state, layer_state_t
}
*buffer = 0;
}
+
+#if defined(OS_DETECTION_ENABLE) && defined(DEFERRED_EXEC_ENABLE)
+os_variant_t os_type;
+
+uint32_t startup_exec(uint32_t trigger_time, void *cb_arg) {
+ if (is_keyboard_master()) {
+ os_type = detected_host_os();
+ if (os_type) {
+ bool is_mac = (os_type == OS_MACOS) || (os_type == OS_IOS);
+ if (keymap_config.swap_lctl_lgui != is_mac) {
+ keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = is_mac;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+# ifdef UNICODE_COMMON_ENABLE
+ set_unicode_input_mode_soft(keymap_config.swap_lctl_lgui ? UNICODE_MODE_MACOS : UNICODE_MODE_WINCOMPOSE);
+# endif
+ switch (os_type) {
+ case OS_UNSURE:
+ xprintf("unknown OS Detected\n");
+ break;
+ case OS_LINUX:
+ xprintf("Linux Detected\n");
+ break;
+ case OS_WINDOWS:
+ xprintf("Windows Detected\n");
+ break;
+# if 0
+ case OS_WINDOWS_UNSURE:
+ xprintf("Windows? Detected\n");
+ break;
+# endif
+ case OS_MACOS:
+ xprintf("MacOS Detected\n");
+ break;
+ case OS_IOS:
+ xprintf("iOS Detected\n");
+ break;
+# if 0
+ case OS_PS5:
+ xprintf("PlayStation 5 Detected\n");
+ break;
+ case OS_HANDHELD:
+ xprintf("Nintend Switch/Quest 2 Detected\n");
+ break;
+# endif
+ }
+ }
+ }
+
+ return os_type ? 0 : 500;
+}
+#endif
+
+static host_driver_t *host_driver = 0;
+static bool host_driver_disabled = false;
+
+void set_keyboard_lock(bool status) {
+ if (!status && !host_get_driver()) {
+ host_set_driver(host_driver);
+ } else if (status && host_get_driver()) {
+ host_driver = host_get_driver();
+ clear_keyboard();
+ host_set_driver(0);
+ } else if (status) {
+ clear_keyboard();
+ }
+
+ host_driver_disabled = status;
+}
+
+void toggle_keyboard_lock(void) {
+ set_keyboard_lock(!host_driver_disabled);
+}
+
+bool get_keyboard_lock(void) {
+ return host_driver_disabled;
+}
+
+const char *get_layer_name_string(layer_state_t state, bool alt_name) {
+ switch (get_highest_layer(state)) {
+ case _QWERTY:
+ return alt_name ? "Num Pad" : "QWERTY";
+ case _COLEMAK:
+ return "Colemak";
+ case _COLEMAK_DH:
+ return "Colemak-DH";
+ case _DVORAK:
+ return "Dvorak";
+ case _GAMEPAD:
+ return "Gamepad";
+ case _DIABLO:
+ return "Diablo";
+ case _DIABLOII:
+ return "Diablo II";
+ case _MOUSE:
+ return alt_name ? "Macros" : "Mouse";
+ case _MEDIA:
+ return "Media";
+ case _LOWER:
+ return "Lower";
+ case _RAISE:
+ return "Raise";
+ case _ADJUST:
+ return "Adjust";
+ default:
+ return "Unknown";
+ }
+}
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h
index 4e2a4d5acbd..49cdf6ca214 100644
--- a/users/drashna/drashna.h
+++ b/users/drashna/drashna.h
@@ -4,7 +4,7 @@
#pragma once
#include QMK_KEYBOARD_H
-#include "eeprom.h"
+#include "eeconfig_users.h"
#include "keyrecords/wrappers.h"
#include "keyrecords/process_records.h"
#include "callbacks.h"
@@ -30,6 +30,9 @@
#ifdef OS_DETECTION_ENABLE
# include "os_detection.h"
#endif
+#ifdef UNICODE_COMMON_ENABLE
+# include "keyrecords/unicode.h"
+#endif
/* Define layer names */
enum userspace_layers {
@@ -88,14 +91,25 @@ void format_layer_bitmap_string(char* buffer, layer_state_t state, layer_state_t
typedef union {
uint32_t raw;
struct {
- bool rgb_layer_change :1;
- bool is_overwatch :1;
- bool nuke_switch :1;
- bool swapped_numbers :1;
- bool rgb_matrix_idle_anim :1;
- bool autocorrection :1;
+ bool rgb_layer_change :1;
+ bool is_overwatch :1;
+ bool nuke_switch :1;
+ bool swapped_numbers :1;
+ bool rgb_matrix_idle_anim :1;
+ bool mouse_jiggler :1;
+ uint8_t align_reserved :2;
+ uint8_t oled_brightness :8;
+ uint32_t reserved :15;
+ bool check :1;
};
} userspace_config_t;
// clang-format on
+_Static_assert(sizeof(userspace_config_t) == sizeof(uint32_t), "Userspace EECONFIG out of spec.");
+
extern userspace_config_t userspace_config;
+
+void set_keyboard_lock(bool enable);
+bool get_keyboard_lock(void);
+void toggle_keyboard_lock(void);
+const char* get_layer_name_string(layer_state_t state, bool alt_name);
diff --git a/users/drashna/eeconfig_users.c b/users/drashna/eeconfig_users.c
new file mode 100644
index 00000000000..8e0f1f10b6a
--- /dev/null
+++ b/users/drashna/eeconfig_users.c
@@ -0,0 +1,53 @@
+// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "eeconfig_users.h"
+#include "eeprom.h"
+#include "eeconfig.h"
+#include
+
+#if (TOTAL_EEPROM_BYTE_COUNT - 1) < EECONFIG_SIZE && !defined(KEYBOARD_input_club_ergodox_infinity)
+# error "More eeprom configured than is available."
+#endif
+#if (EECONFIG_USER_DATA_SIZE) != 0 && (EECONFIG_USER_DATA_SIZE) < 4
+# error "Not enough EEPROM configured for user config."
+#endif
+
+#if (EECONFIG_USER_DATA_SIZE) == 0
+# define EECONFIG_USER_TEMP EECONFIG_USER
+#else
+# define EECONFIG_USER_TEMP (uint32_t *)(EECONFIG_USER_DATABLOCK)
+#endif
+
+void eeconfig_read_user_config(uint32_t *data) {
+#if (EECONFIG_USER_DATA_SIZE) > 0
+ if (!eeconfig_is_user_datablock_valid()) {
+ memset(data, 0, 4);
+ } else
+#endif
+ eeprom_read_block(data, EECONFIG_USER_TEMP, 4);
+}
+
+void eeconfig_update_user_config(const uint32_t *data) {
+ eeprom_update_block(data, EECONFIG_USER_TEMP, 4);
+#if (EECONFIG_USER_DATA_SIZE) > 0
+ eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION));
+#endif
+}
+
+void eeconfig_read_user_data(void *data) {
+#if (EECONFIG_USER_DATA_SIZE) > 4
+ if (eeconfig_is_user_datablock_valid()) {
+ eeprom_read_block(data, EECONFIG_USER_DATABLOCK + 4, (EECONFIG_USER_DATA_SIZE)-4);
+ } else {
+ memset(data, 0, (EECONFIG_USER_DATA_SIZE));
+ }
+#endif
+}
+
+void eeconfig_update_user_data(const void *data) {
+#if (EECONFIG_USER_DATA_SIZE) > 4
+ eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION));
+ eeprom_update_block(data, EECONFIG_USER_DATABLOCK + 4, (EECONFIG_USER_DATA_SIZE)-4);
+#endif
+}
diff --git a/users/drashna/eeconfig_users.h b/users/drashna/eeconfig_users.h
new file mode 100644
index 00000000000..c9b230df9c3
--- /dev/null
+++ b/users/drashna/eeconfig_users.h
@@ -0,0 +1,12 @@
+// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include
+
+void eeconfig_read_user_config(uint32_t *data);
+void eeconfig_update_user_config(const uint32_t *data);
+
+void eeconfig_read_user_data(void *data);
+void eeconfig_update_user_data(const void *data);
diff --git a/users/drashna/keyrecords/dynamic_macros.c b/users/drashna/keyrecords/dynamic_macros.c
new file mode 100644
index 00000000000..43c2336cb60
--- /dev/null
+++ b/users/drashna/keyrecords/dynamic_macros.c
@@ -0,0 +1,283 @@
+// Copyright 2016 Jack Humbert
+// Copyright 2019 Wojciech Siewierski < wojciech dot siewierski at onet dot pl >
+// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "keyrecords/dynamic_macros.h"
+#include "keyrecords/process_records.h"
+#include "wait.h"
+#include "debug.h"
+#include "eeprom.h"
+#include "eeconfig.h"
+#include
+
+static uint8_t macro_id = 255;
+static uint8_t recording_state = STATE_NOT_RECORDING;
+
+#if EECONFIG_USER_DATA_SIZE < 4
+# error "EECONFIG_USER_DATA_SIZE not set. Don't step on others eeprom."
+#endif
+#ifndef DYNAMIC_MACRO_EEPROM_BLOCK0_ADDR
+# define DYNAMIC_MACRO_EEPROM_BLOCK0_ADDR (uint8_t*)(EECONFIG_USER_DATABLOCK + 4)
+#endif
+
+dynamic_macro_t dynamic_macros[DYNAMIC_MACRO_COUNT];
+_Static_assert((sizeof(dynamic_macros)) <= (EECONFIG_USER_DATA_SIZE - 4), "User Data Size must be large enough to host all macros");
+
+__attribute__((weak)) void dynamic_macro_record_start_user(void) {}
+
+__attribute__((weak)) void dynamic_macro_play_user(uint8_t macro_id) {}
+
+__attribute__((weak)) void dynamic_macro_record_key_user(uint8_t macro_id, keyrecord_t* record) {}
+
+__attribute__((weak)) void dynamic_macro_record_end_user(uint8_t macro_id) {}
+
+/**
+ * @brief Gets the current macro ID
+ *
+ * @return uint8_t
+ */
+uint8_t dynamic_macro_get_current_id(void) {
+ return macro_id;
+}
+
+/**
+ * @brief Gets the current recording state
+ *
+ * @return uint8_t
+ */
+uint8_t dynamic_macro_get_recording_state(void) {
+ return recording_state;
+}
+
+/**
+ * Start recording of the dynamic macro.
+ *
+ * @param macro_id[in] The id of macro to be recorded
+ */
+bool dynamic_macro_record_start(uint8_t macro_id) {
+ if (macro_id >= (uint8_t)(DYNAMIC_MACRO_COUNT)) {
+ return false;
+ }
+ dprintf("dynamic macro recording: started for slot %d\n", macro_id);
+
+ dynamic_macro_record_start_user();
+
+ clear_keyboard();
+ layer_clear();
+
+ dynamic_macros[macro_id].length = 0;
+ return true;
+}
+
+/**
+ * Play the dynamic macro.
+ *
+ * @param macro_id[in] The id of macro to be played
+ */
+void dynamic_macro_play(uint8_t macro_id) {
+ if (macro_id >= (uint8_t)(DYNAMIC_MACRO_COUNT)) {
+ return;
+ }
+
+ dprintf("dynamic macro: slot %d playback, length %d\n", macro_id, dynamic_macros[macro_id].length);
+
+ layer_state_t saved_layer_state = layer_state;
+
+ clear_keyboard();
+ layer_clear();
+
+ for (uint8_t i = 0; i < dynamic_macros[macro_id].length; ++i) {
+ process_record(&dynamic_macros[macro_id].events[i]);
+ }
+
+ clear_keyboard();
+
+ layer_state_set(saved_layer_state);
+
+ dynamic_macro_play_user(macro_id);
+}
+
+/**
+ * Record a single key in a dynamic macro.
+ *
+ * @param macro_id[in] The start of the used macro buffer.
+ * @param record[in] The current keypress.
+ */
+void dynamic_macro_record_key(uint8_t macro_id, keyrecord_t* record) {
+ dynamic_macro_t* macro = &dynamic_macros[macro_id];
+ uint8_t length = macro->length;
+
+ /* If we've just started recording, ignore all the key releases. */
+ if (!record->event.pressed && length == 0) {
+ dprintln("dynamic macro: ignoring a leading key-up event");
+ return;
+ }
+
+ if (length < DYNAMIC_MACRO_SIZE) {
+ macro->events[length] = *record;
+ macro->length = ++length;
+ } else {
+ dynamic_macro_record_key_user(macro_id, record);
+ }
+
+ dprintf("dynamic macro: slot %d length: %d/%d\n", macro_id, length, DYNAMIC_MACRO_SIZE);
+}
+
+/**
+ * End recording of the dynamic macro. Essentially just update the
+ * pointer to the end of the macro.
+ */
+void dynamic_macro_record_end(uint8_t macro_id) {
+ if (macro_id >= (uint8_t)(DYNAMIC_MACRO_COUNT)) {
+ return;
+ }
+ dynamic_macro_record_end_user(macro_id);
+
+ dynamic_macro_t* macro = &dynamic_macros[macro_id];
+ uint8_t length = macro->length;
+
+ keyrecord_t* events_begin = &(macro->events[0]);
+ keyrecord_t* events_pointer = &(macro->events[length - 1]);
+
+ dprintf("dynamic_macro: macro length before trimming: %d\n", macro->length);
+ while (events_pointer != events_begin && (events_pointer)->event.pressed) {
+ dprintln("dynamic macro: trimming a trailing key-down event");
+ --(macro->length);
+ --events_pointer;
+ }
+
+ macro->checksum = dynamic_macro_calc_crc(macro);
+ dynamic_macro_save_eeprom(macro_id);
+
+ dprintf("dynamic macro: slot %d saved, length: %d\n", macro_id, length);
+}
+
+bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t* record) {
+ if (STATE_NOT_RECORDING == recording_state) {
+ /* Program key pressed to request programming mode */
+ if (keycode == DYN_MACRO_PROG && record->event.pressed) {
+ // dynamic_macro_led_blink();
+
+ recording_state = STATE_RECORD_KEY_PRESSED;
+ dprintf("dynamic macro: programming key pressed, waiting for macro slot selection. %d\n", recording_state);
+
+ return false;
+ }
+ /* Macro key pressed to request macro playback */
+ if (IS_DYN_KEYCODE(keycode) && record->event.pressed) {
+ dynamic_macro_play(keycode - DYN_MACRO_KEY00);
+
+ return false;
+ }
+
+ /* Non-dynamic macro key, process it elsewhere. */
+ return true;
+ } else if (STATE_RECORD_KEY_PRESSED == recording_state) {
+ /* Program key pressed again before a macro selector key, cancel macro recording.
+ Blink leds to indicate cancelation. */
+ if (keycode == DYN_MACRO_PROG && record->event.pressed) {
+ // dynamic_macro_led_blink();
+
+ recording_state = STATE_NOT_RECORDING;
+ dprintf("dynamic macro: programming key pressed, programming mode canceled. %d\n", recording_state);
+
+ return false;
+ } else if (IS_DYN_KEYCODE(keycode) && record->event.pressed) {
+ macro_id = keycode - DYN_MACRO_KEY00;
+
+ if (dynamic_macro_record_start(macro_id)) {
+ /* Macro slot selected, enter recording state. */
+ recording_state = STATE_CURRENTLY_RECORDING;
+ } else {
+ recording_state = STATE_NOT_RECORDING;
+ }
+
+ return false;
+ }
+ /* Ignore any non-macro key press while in RECORD_KEY_PRESSED state. */
+ return false;
+ } else if (STATE_CURRENTLY_RECORDING == recording_state) {
+ /* Program key pressed to request end of macro recording. */
+ if (keycode == DYN_MACRO_PROG && record->event.pressed) {
+ dynamic_macro_record_end(macro_id);
+ recording_state = STATE_NOT_RECORDING;
+
+ return false;
+ }
+ /* Don't record other macro key presses. */
+ else if (IS_DYN_KEYCODE(keycode) && record->event.pressed) {
+ dprintln("dynamic macro: playback key ignored in programming mode.");
+ return false;
+ }
+ /* Non-macro keypress that should be recorded */
+ else {
+ dynamic_macro_record_key(macro_id, record);
+
+ /* Don't output recorded keypress. */
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static inline uint16_t crc16_update(uint16_t crc, uint8_t a) {
+ crc ^= a;
+ for (uint8_t i = 0; i < 8; ++i) {
+ if (crc & 1)
+ crc = (crc >> 1) ^ 0xA001;
+ else
+ crc = (crc >> 1);
+ }
+ return crc;
+}
+
+uint16_t dynamic_macro_calc_crc(dynamic_macro_t* macro) {
+ uint16_t crc = 0;
+ uint8_t* data = (uint8_t*)macro;
+
+ for (uint16_t i = 0; i < DYNAMIC_MACRO_CRC_LENGTH; ++i) {
+ crc = crc16_update(crc, *(data++));
+ }
+ return crc;
+}
+
+inline void* dynamic_macro_eeprom_macro_addr(uint8_t macro_id) {
+ return DYNAMIC_MACRO_EEPROM_BLOCK0_ADDR + sizeof(dynamic_macro_t) * macro_id;
+}
+
+void dynamic_macro_load_eeprom_all(void) {
+ for (uint8_t i = 0; i < DYNAMIC_MACRO_COUNT; ++i) {
+ dynamic_macro_load_eeprom(i);
+ }
+}
+
+void dynamic_macro_load_eeprom(uint8_t macro_id) {
+ dynamic_macro_t* dst = &dynamic_macros[macro_id];
+
+ eeprom_read_block(dst, dynamic_macro_eeprom_macro_addr(macro_id), sizeof(dynamic_macro_t));
+
+ /* Validate checksum, ifchecksum is NOT valid for macro, set its length to 0 to prevent its use. */
+ if (dynamic_macro_calc_crc(dst) != dst->checksum) {
+ dprintf("dynamic macro: slot %d not loaded, checksum mismatch\n", macro_id);
+ dst->length = 0;
+
+ return;
+ }
+
+ dprintf("dynamic macro: slot %d loaded from eeprom, checksum okay\n", macro_id);
+}
+
+void dynamic_macro_save_eeprom(uint8_t macro_id) {
+ dynamic_macro_t* src = &dynamic_macros[macro_id];
+
+ eeprom_update_block(src, dynamic_macro_eeprom_macro_addr(macro_id), sizeof(dynamic_macro_t));
+ dprintf("dynamic macro: slot %d saved to eeprom\n", macro_id);
+}
+
+void dynamic_macro_init(void) {
+ /* zero out macro blocks */
+ memset(&dynamic_macros, 0, DYNAMIC_MACRO_COUNT * sizeof(dynamic_macro_t));
+ dynamic_macro_load_eeprom_all();
+}
diff --git a/users/drashna/keyrecords/dynamic_macros.h b/users/drashna/keyrecords/dynamic_macros.h
new file mode 100644
index 00000000000..5eefb9b268c
--- /dev/null
+++ b/users/drashna/keyrecords/dynamic_macros.h
@@ -0,0 +1,50 @@
+// Copyright 2016 Jack Humbert
+// Copyright 2019 Wojciech Siewierski < wojciech dot siewierski at onet dot pl >
+// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "action.h"
+#include "action_layer.h"
+
+#ifndef DYNAMIC_MACRO_COUNT
+# define DYNAMIC_MACRO_COUNT 8
+#endif
+
+#ifndef DYNAMIC_MACRO_SIZE
+# define DYNAMIC_MACRO_SIZE 64
+#endif
+
+enum dynamic_macro_recording_state {
+ STATE_NOT_RECORDING,
+ STATE_RECORD_KEY_PRESSED,
+ STATE_CURRENTLY_RECORDING,
+};
+
+typedef struct {
+ keyrecord_t events[DYNAMIC_MACRO_SIZE];
+ uint8_t length;
+ uint16_t checksum;
+} dynamic_macro_t;
+
+void dynamic_macro_init(void);
+bool dynamic_macro_record_start(uint8_t macro_id);
+void dynamic_macro_play(uint8_t macro_id);
+void dynamic_macro_record_key(uint8_t macro_id, keyrecord_t* record);
+void dynamic_macro_record_end(uint8_t macro_id);
+bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t* record);
+
+void dynamic_macro_record_start_user(void);
+void dynamic_macro_play_user(uint8_t macro_id);
+void dynamic_macro_record_key_user(uint8_t macro_id, keyrecord_t* record);
+void dynamic_macro_record_end_user(uint8_t macro_id);
+
+#define DYNAMIC_MACRO_CRC_LENGTH (sizeof(dynamic_macro_t) - sizeof(uint16_t))
+#define IS_DYN_KEYCODE(keycode) (keycode >= DYN_MACRO_KEY00 && keycode <= DYN_MACRO_KEY15)
+
+uint16_t dynamic_macro_calc_crc(dynamic_macro_t* macro);
+void dynamic_macro_load_eeprom_all(void);
+void dynamic_macro_load_eeprom(uint8_t macro_id);
+void dynamic_macro_save_eeprom(uint8_t macro_id);
+bool dynamic_macro_header_correct(void);
diff --git a/users/drashna/keyrecords/process_records.c b/users/drashna/keyrecords/process_records.c
index 99d95c3dff8..d8d45dcac96 100644
--- a/users/drashna/keyrecords/process_records.c
+++ b/users/drashna/keyrecords/process_records.c
@@ -6,9 +6,11 @@
#ifdef OS_DETECTION_ENABLE
# include "os_detection.h"
#endif
+#ifdef CUSTOM_DYNAMIC_MACROS_ENABLE
+# include "keyrecords/dynamic_macros.h"
+#endif
uint16_t copy_paste_timer;
-bool host_driver_disabled = false;
// Defines actions tor my global custom keycodes. Defined in drashna.h file
// Then runs the _keymap's record handier if not processed here
@@ -55,30 +57,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#endif
#if defined(CUSTOM_POINTING_DEVICE)
&& process_record_pointing(keycode, record)
+#endif
+#ifdef CUSTOM_DYNAMIC_MACROS_ENABLE
+ && process_record_dynamic_macro(keycode, record)
#endif
&& true)) {
return false;
}
switch (keycode) {
- case FIRST_DEFAULT_LAYER_KEYCODE ... LAST_DEFAULT_LAYER_KEYCODE:
- if (record->event.pressed) {
- uint8_t mods = mod_config(get_mods() | get_oneshot_mods());
- if (!mods) {
- set_single_persistent_default_layer(keycode - FIRST_DEFAULT_LAYER_KEYCODE);
-#if LAST_DEFAULT_LAYER_KEYCODE > (FIRST_DEFAULT_LAYER_KEYCODE + 3)
- } else if (mods & MOD_MASK_SHIFT) {
- set_single_persistent_default_layer(keycode - FIRST_DEFAULT_LAYER_KEYCODE + 4);
-# if LAST_DEFAULT_LAYER_KEYCODE > (FIRST_DEFAULT_LAYER_KEYCODE + 7)
-
- } else if (mods & MOD_MASK_CTRL) {
- set_single_persistent_default_layer(keycode - FIRST_DEFAULT_LAYER_KEYCODE + 8);
-# endif
-#endif
- }
- }
- break;
-
case VRSN: // Prints firmware version
if (record->event.pressed) {
send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY);
@@ -111,7 +98,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
userspace_config.rgb_layer_change ^= 1;
dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
- eeconfig_update_user(userspace_config.raw);
+ eeconfig_update_user_config(&userspace_config.raw);
if (userspace_config.rgb_layer_change) {
# if defined(CUSTOM_RGB_MATRIX)
rgb_matrix_set_flags(LED_FLAG_UNDERGLOW | LED_FLAG_KEYLIGHT | LED_FLAG_INDICATOR);
@@ -168,38 +155,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
# endif
if (is_eeprom_updated) {
- eeconfig_update_user(userspace_config.raw);
+ eeconfig_update_user_config(&userspace_config.raw);
}
}
break;
#endif
- case KEYLOCK: {
- static host_driver_t *host_driver = 0;
-
+ case KEYLOCK:
if (record->event.pressed) {
- if (host_get_driver()) {
- host_driver = host_get_driver();
- clear_keyboard();
- host_set_driver(0);
- host_driver_disabled = true;
- } else {
- host_set_driver(host_driver);
- host_driver_disabled = false;
- }
+ toggle_keyboard_lock();
}
break;
- }
- case OLED_LOCK: {
-#if defined(OLED_ENABLE) && defined(CUSTOM_OLED_DRIVER)
- extern bool is_oled_locked;
- if (record->event.pressed) {
- is_oled_locked = !is_oled_locked;
- if (is_oled_locked) {
- oled_on();
- }
- }
-#endif
- } break;
#if defined(OS_DETECTION_ENABLE) && defined(OS_DETECTION_DEBUG_ENABLE)
case STORE_SETUPS:
if (record->event.pressed) {
@@ -218,5 +183,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
__attribute__((weak)) void post_process_record_keymap(uint16_t keycode, keyrecord_t *record) {}
void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
+#if defined(OS_DETECTION_ENABLE) && defined(UNICODE_COMMON_ENABLE)
+ switch (keycode) {
+ case QK_MAGIC_SWAP_LCTL_LGUI:
+ case QK_MAGIC_SWAP_RCTL_RGUI:
+ case QK_MAGIC_SWAP_CTL_GUI:
+ case QK_MAGIC_UNSWAP_LCTL_LGUI:
+ case QK_MAGIC_UNSWAP_RCTL_RGUI:
+ case QK_MAGIC_UNSWAP_CTL_GUI:
+ case QK_MAGIC_TOGGLE_CTL_GUI:
+ set_unicode_input_mode_soft(keymap_config.swap_lctl_lgui ? UNICODE_MODE_MACOS : UNICODE_MODE_WINCOMPOSE);
+ break;
+ }
+#endif
post_process_record_keymap(keycode, record);
}
diff --git a/users/drashna/keyrecords/process_records.h b/users/drashna/keyrecords/process_records.h
index 8073b7adb07..01379765802 100644
--- a/users/drashna/keyrecords/process_records.h
+++ b/users/drashna/keyrecords/process_records.h
@@ -5,27 +5,21 @@
#include "drashna.h"
enum userspace_custom_keycodes {
- VRSN = QK_USER, // Prints QMK Firmware and board info
- KC_QWERTY, // Sets default layer to QWERTY
- FIRST_DEFAULT_LAYER_KEYCODE = KC_QWERTY, // Sets default layer to QWERTY
- KC_COLEMAK_DH, // Sets default layer to COLEMAK
- KC_COLEMAK, // Sets default layer to COLEMAK
- KC_DVORAK, // Sets default layer to DVORAK
- LAST_DEFAULT_LAYER_KEYCODE = KC_DVORAK, // Sets default layer to WORKMAN
- KC_DIABLO_CLEAR, // Clears all Diablo Timers
- KC_RGB_T, // Toggles RGB Layer Indication mode
- RGB_IDL, // RGB Idling animations
- KC_SECRET_1, // test1
- KC_SECRET_2, // test2
- KC_SECRET_3, // test3
- KC_SECRET_4, // test4
- KC_SECRET_5, // test5
- KC_CCCV, // Hold to copy, tap to paste
- KC_NUKE, // NUCLEAR LAUNCH DETECTED!!!
- UC_FLIP, // (ಠ痊ಠ)┻━┻
- UC_TABL, // ┬─┬ノ( º _ ºノ)
- UC_SHRG, // ¯\_(ツ)_/¯
- UC_DISA, // ಠ_ಠ
+ VRSN = QK_USER, // Prints QMK Firmware and board info
+ KC_DIABLO_CLEAR, // Clears all Diablo Timers
+ KC_RGB_T, // Toggles RGB Layer Indication mode
+ RGB_IDL, // RGB Idling animations
+ KC_SECRET_1, // test1
+ KC_SECRET_2, // test2
+ KC_SECRET_3, // test3
+ KC_SECRET_4, // test4
+ KC_SECRET_5, // test5
+ KC_CCCV, // Hold to copy, tap to paste
+ KC_NUKE, // NUCLEAR LAUNCH DETECTED!!!
+ UC_FLIP, // (ಠ痊ಠ)┻━┻
+ UC_TABL, // ┬─┬ノ( º _ ºノ)
+ UC_SHRG, // ¯\_(ツ)_/¯
+ UC_DISA, // ಠ_ಠ
UC_IRNY,
UC_CLUE,
KEYLOCK, // Locks keyboard by unmounting driver
@@ -40,11 +34,33 @@ enum userspace_custom_keycodes {
KC_COMIC,
KC_ACCEL,
OLED_LOCK,
+ OLED_BRIGHTNESS_INC,
+ OLED_BRIGHTNESS_DEC,
STORE_SETUPS,
PRINT_SETUPS,
- USER_SAFE_RANGE, // use "NEWPLACEHOLDER for keymap specific codes
+ PD_JIGGLER,
+
+ DYN_MACRO_PROG,
+ DYN_MACRO_KEY00,
+ DYN_MACRO_KEY01,
+ DYN_MACRO_KEY02,
+ DYN_MACRO_KEY03,
+ DYN_MACRO_KEY04,
+ DYN_MACRO_KEY05,
+ DYN_MACRO_KEY06,
+ DYN_MACRO_KEY07,
+ DYN_MACRO_KEY08,
+ DYN_MACRO_KEY09,
+ DYN_MACRO_KEY10,
+ DYN_MACRO_KEY11,
+ DYN_MACRO_KEY12,
+ DYN_MACRO_KEY13,
+ DYN_MACRO_KEY14,
+ DYN_MACRO_KEY15,
+
+ USER_SAFE_RANGE,
};
bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
@@ -69,27 +85,15 @@ bool process_record_unicode(uint16_t keycode, keyrecord_t *record);
#define KC_SEC4 KC_SECRET_4
#define KC_SEC5 KC_SECRET_5
+#define KC_QWERTY DF(_QWERTY)
+#define KC_COLEMAK_DH DF(_COLEMAK_DH)
+#define KC_COLEMAK DF(_COLEMAK)
+#define KC_DVORAK DF(_DVORAK)
+
#define QWERTY KC_QWERTY
#define DVORAK KC_DVORAK
#define COLEMAK KC_COLEMAK
-#define COLEMAKDH KC_COLEMAK_DH
-
-#define DEFLYR1 FIRST_DEFAULT_LAYER_KEYCODE
-#define DEFLYR2 (FIRST_DEFAULT_LAYER_KEYCODE + 1)
-#define DEFLYR3 (FIRST_DEFAULT_LAYER_KEYCODE + 2)
-#define DEFLYR4 (FIRST_DEFAULT_LAYER_KEYCODE + 3)
-#if LAST_DEFAULT_LAYER_KEYCODE > (FIRST_DEFAULT_LAYER_KEYCODE + 3)
-# define DEFLYR5 (FIRST_DEFAULT_LAYER_KEYCODE + 4)
-# define DEFLYR6 (FIRST_DEFAULT_LAYER_KEYCODE + 5)
-# define DEFLYR7 (FIRST_DEFAULT_LAYER_KEYCODE + 6)
-# define DEFLYR8 (FIRST_DEFAULT_LAYER_KEYCODE + 7)
-# if LAST_DEFAULT_LAYER_KEYCODE > (FIRST_DEFAULT_LAYER_KEYCODE + 7)
-# define DEFLYR9 (FIRST_DEFAULT_LAYER_KEYCODE + 8)
-# define DEFLYR10 (FIRST_DEFAULT_LAYER_KEYCODE + 9)
-# define DEFLYR11 (FIRST_DEFAULT_LAYER_KEYCODE + 10)
-# define DEFLYR12 (FIRST_DEFAULT_LAYER_KEYCODE + 11)
-# endif
-#endif
+#define CLMKDH KC_COLEMAK_DH
#ifdef SWAP_HANDS_ENABLE
# define KC_C1R3 SH_T(KC_TAB)
@@ -140,3 +144,7 @@ We use custom codes here, so we can substitute the right stuff
# define KC_D3_3 KC_3
# define KC_D3_4 KC_4
#endif // TAP_DANCE_ENABLE
+
+#define OL_LOCK OLED_LOCK
+#define OL_BINC OLED_BRIGHTNESS_INC
+#define OL_BDEC OLED_BRIGHTNESS_DEC
diff --git a/users/drashna/keyrecords/tapping.c b/users/drashna/keyrecords/tapping.c
index 6a26a02aca3..d4a0e161126 100644
--- a/users/drashna/keyrecords/tapping.c
+++ b/users/drashna/keyrecords/tapping.c
@@ -5,9 +5,14 @@
#ifdef TAPPING_TERM_PER_KEY
__attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+
switch (keycode) {
case BK_LWER:
return TAPPING_TERM + 25;
+ case QK_MOD_TAP ... QK_MOD_TAP_MAX:
+ if (QK_MOD_TAP_GET_MODS(keycode) & MOD_LGUI) {
+ return 300;
+ }
default:
return TAPPING_TERM;
}
diff --git a/users/drashna/keyrecords/unicode.c b/users/drashna/keyrecords/unicode.c
index 16390074cae..a4687d3e590 100644
--- a/users/drashna/keyrecords/unicode.c
+++ b/users/drashna/keyrecords/unicode.c
@@ -434,3 +434,13 @@ bool process_record_unicode(uint16_t keycode, keyrecord_t *record) {
void keyboard_post_init_unicode(void) {
unicode_input_mode_init();
}
+
+/**
+ * @brief Set the unicode input mode without extra functionality
+ *
+ * @param input_mode
+ */
+void set_unicode_input_mode_soft(uint8_t input_mode) {
+ unicode_config.input_mode = input_mode;
+ unicode_input_mode_set_kb(input_mode);
+}
diff --git a/users/drashna/keyrecords/unicode.h b/users/drashna/keyrecords/unicode.h
index 43c2db89c01..fe95e78c3a5 100644
--- a/users/drashna/keyrecords/unicode.h
+++ b/users/drashna/keyrecords/unicode.h
@@ -18,3 +18,4 @@ enum unicode_typing_modes {
extern uint8_t unicode_typing_mode;
extern const PROGMEM char unicode_mode_str[UNCODES_MODE_END][13];
+void set_unicode_input_mode_soft(uint8_t input_mode);
diff --git a/users/drashna/keyrecords/wrappers.h b/users/drashna/keyrecords/wrappers.h
index 31efad5f6ed..b298ef06286 100644
--- a/users/drashna/keyrecords/wrappers.h
+++ b/users/drashna/keyrecords/wrappers.h
@@ -260,7 +260,7 @@ NOTE: These are all the same length. If you do a search/replace
#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_________________ CG_SWAP, DEFLYR1, DEFLYR2, DEFLYR3, DEFLYR4
+#define _________________ADJUST_R2_________________ CG_SWAP, QWERTY, CLMKDH, COLEMAK, DVORAK
#define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
// clang-format on
diff --git a/users/drashna/oled/drashna_font.h b/users/drashna/oled/drashna_font.h
index 7ba03c4c13c..cef1fc49693 100644
--- a/users/drashna/oled/drashna_font.h
+++ b/users/drashna/oled/drashna_font.h
@@ -3,14 +3,7 @@
// additional fonts from
// https://github.com/datacute/TinyOLED-Fonts
-#if __has_include("oled_font.h")
-# include "oled_font.h"
-#else
-
-// additional fonts from
-// https://github.com/datacute/TinyOLED-Fonts
-
-# include "progmem.h"
+#include "progmem.h"
// clang-format off
static const unsigned char font[] PROGMEM = {
@@ -895,7 +888,7 @@ static const unsigned char font[] PROGMEM = {
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
- 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
+ 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
@@ -904,8 +897,8 @@ static const unsigned char font[] PROGMEM = {
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,
+ 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
+ 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
@@ -923,129 +916,6 @@ static const unsigned char font[] PROGMEM = {
# endif
// top Logo section
-# if defined(OLED_LOGO_GMK_BAD)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0x70,
- 0x38, 0x38, 0x38, 0x78, 0x70, 0xF0,
- 0xE0, 0xE0, 0x80, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0xF0, 0xF8,
- 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00,
- 0x80, 0xE0, 0xF8, 0xF8, 0xF8, 0xF8,
- 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x00,
- 0x80, 0xE0, 0xF0, 0xF8, 0x78, 0x38,
- 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x38,
- 0x38, 0xF8, 0xF0, 0xF0, 0xE0, 0x00,
- 0x00, 0x00, 0x00, 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, 0xFC, 0xFC,
- 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_HUE_MANITEE)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0,
- 0x90, 0x70, 0xE8, 0xA8, 0xE4, 0xC4,
- 0xC4, 0xA0, 0xE4, 0xB0, 0xDC, 0xE4,
- 0xFC, 0xFC, 0xFC, 0xFC, 0x3C, 0x3C,
- 0xFC, 0xF8, 0xF0, 0xF0, 0xE0, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 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, 0xF8, 0x00, 0x00, 0x00, 0x00,
- 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(OLED_LOGO_CORNE)
- 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, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0,
- 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
- 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0,
- 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
- 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0,
- 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00,
- 0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0,
- 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
- 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
- 0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_LOOSE)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8,
- 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x00,
- 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
- 0x02, 0xF9, 0x01, 0x01, 0x05, 0x09,
- 0x11, 0x22, 0x06, 0xFE, 0xFE, 0xFE,
- 0xFE, 0xFE, 0xFE, 0xFE, 0x46, 0x46,
- 0x44, 0x44, 0x45, 0x44, 0x29, 0x28,
- 0x2A, 0x28, 0x11, 0x13, 0x05, 0x07,
- 0x05, 0x07, 0x05, 0x07, 0x05, 0x07,
- 0xE5, 0xE7, 0xE5, 0x07, 0x05, 0x07,
- 0x05, 0x07, 0x05, 0x07, 0x05, 0x07,
- 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7,
- 0xE5, 0xE7, 0xE5, 0xC7, 0x85, 0x07,
- 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7,
- 0xE5, 0xE7, 0xE5, 0xC7, 0x85, 0x07,
- 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7,
- 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0x07,
- 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7,
- 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_SKEEB)
- 0xC0, 0x20, 0x10, 0x08, 0x04, 0x02,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x03, 0x07, 0x0F, 0x1F,
- 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x01,
- 0xFF, 0xFF, 0x01, 0x01, 0xFF, 0xFF,
- 0x01, 0x01, 0xFF, 0xFF, 0x19, 0x19,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
- 0x01, 0x01, 0xFF, 0xFF, 0x81, 0x81,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
- 0x19, 0x19, 0xFF, 0xFF, 0xF9, 0xF9,
- 0xF9, 0xF9, 0x01, 0x01, 0xF9, 0xF9,
- 0xF9, 0xF9, 0xFF, 0xFF, 0x99, 0x99,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
- 0xF9, 0xF9, 0xFF, 0xFF, 0x19, 0x19,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
- 0x67, 0x67, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F,
- 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x02, 0x04, 0x08, 0x10, 0x20, 0xC0,
-# else
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x40, 0x40, 0xF0, 0xF8, 0xF8,
- 0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0x3F,
- 0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8,
- 0xF8, 0xF0, 0x40, 0x40, 0x40, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00,
- 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00,
- 0x80, 0xC0, 0xC0, 0x00, 0xC0, 0xC0,
- 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0,
- 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -1055,7 +925,18 @@ static const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-#endif
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// First icon section
0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
@@ -1071,139 +952,27 @@ static const unsigned char font[] PROGMEM = {
0x14, 0x36, 0x00, 0x36, 0x77, 0x77,
// middle logo section
-# if defined(OLED_LOGO_GMK_BAD)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C,
- 0xFF, 0xFF, 0xFF, 0xC1, 0x80, 0x00,
- 0x00, 0x38, 0x38, 0xB8, 0xB8, 0xF9,
- 0xF9, 0xF8, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0xC0, 0xF8, 0xFF, 0xFF, 0x1F,
- 0x01, 0x3F, 0xFF, 0xFF, 0xF0, 0xFE,
- 0x7F, 0x0F, 0x03, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xFF, 0xFF, 0xFF, 0x3F, 0x1E, 0x7F,
- 0xFF, 0xFF, 0xF3, 0xC1, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xFF, 0xFF, 0xFF, 0x3F, 0x1C, 0x1C,
- 0x9C, 0xFF, 0xFF, 0xF3, 0xE1, 0x00,
- 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE,
- 0xFF, 0x0F, 0x07, 0x07, 0x8E, 0xFF,
- 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00,
- 0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0x8F,
- 0x07, 0x07, 0x8E, 0xFF, 0xFF, 0xFF,
- 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_HUE_MANITEE)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
- 0xFC, 0xF6, 0xF7, 0xEF, 0xFF, 0x87,
- 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
- 0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x07, 0x1F, 0x1F, 0x19, 0x15,
- 0xF7, 0x16, 0x1A, 0x1B, 0x16, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0C, 0x0C, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0xC0, 0xC0,
- 0x00, 0x00, 0x03, 0x03, 0xFF, 0xFF,
- 0x03, 0x03, 0x00, 0x00, 0xC0, 0xC0,
- 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0xFC,
- 0xFC, 0x00, 0x00, 0x00, 0xFC, 0xFC,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0x30, 0x30, 0xCC, 0xCC,
- 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_CORNE)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 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, 0x00, 0x00, 0x00,
- 0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x81,
- 0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF,
- 0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF,
- 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
- 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
- 0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_LOOSE)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xE3, 0xC1, 0xC1, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0x00, 0xFF, 0x00, 0x00, 0x80, 0x00,
- 0x1C, 0x3E, 0x7F, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x14, 0x14, 0x14,
- 0x14, 0x14, 0x08, 0x08, 0x00, 0x00,
- 0xFF, 0xFF, 0xFF, 0x80, 0x80, 0x80,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xBE,
- 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0xBD,
- 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
- 0x8F, 0x9F, 0x9C, 0x9C, 0x9C, 0x9C,
- 0x9C, 0x9C, 0x9C, 0xFC, 0xF8, 0x00,
- 0xFF, 0xFF, 0xFF, 0x9C, 0x9C, 0x9C,
- 0x9C, 0x9C, 0x9C, 0x80, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_SKEEB)
- 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x03, 0x07,
- 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x08,
- 0x0F, 0x0F, 0x0E, 0x0E, 0x0F, 0x0F,
- 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08,
- 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
- 0x08, 0x08, 0x0F, 0x0F, 0x09, 0x09,
- 0x09, 0x09, 0xF9, 0xF9, 0x09, 0x09,
- 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F,
- 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F,
- 0x0F, 0x0F, 0x0F, 0x0F, 0x09, 0x09,
- 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
- 0x09, 0x09, 0x0F, 0x0F, 0x08, 0x08,
- 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
- 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F,
- 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-# else
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x49, 0x49, 0x49, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xE0, 0xDF, 0xBF, 0xBF, 0x00,
- 0xBF, 0xBF, 0xDF, 0xE0, 0xFF, 0xFF,
- 0xFF, 0xFF, 0x49, 0x49, 0x49, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F,
- 0x60, 0x60, 0xE0, 0xBF, 0x1F, 0x00,
- 0x7F, 0x7F, 0x07, 0x1E, 0x38, 0x1E,
- 0x07, 0x7F, 0x7F, 0x00, 0x7F, 0x7F,
- 0x0E, 0x1F, 0x3B, 0x71, 0x60, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F,
- 0x0C, 0x0C, 0x0C, 0x00, 0x7E, 0x7E,
- 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x00,
- 0x7F, 0x7E, 0x03, 0x03, 0x7E, 0x7E,
- 0x03, 0x03, 0x7F, 0x7E, 0x00, 0x0F,
- 0x3E, 0x70, 0x3C, 0x06, 0x3C, 0x70,
- 0x3E, 0x0F, 0x00, 0x32, 0x7B, 0x49,
- 0x49, 0x3F, 0x7E, 0x00, 0x7F, 0x7E,
- 0x03, 0x03, 0x00, 0x1E, 0x3F, 0x69,
- 0x69, 0x6F, 0x26, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# endif
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// second icon section
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
@@ -1219,124 +988,6 @@ static const unsigned char font[] PROGMEM = {
0xF0, 0xFC, 0xF2, 0x92, 0xFC, 0xF0,
// bottom logo section
-# if defined(OLED_LOGO_GMK_BAD)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x03, 0x03, 0x03, 0x07,
- 0x07, 0x07, 0x07, 0x03, 0x03, 0x03,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x06, 0x07, 0x07, 0x07, 0x01, 0x00,
- 0x00, 0x00, 0x07, 0x07, 0x07, 0x01,
- 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x07, 0x07, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0x07, 0x07, 0x07, 0x06,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
- 0x07, 0x07, 0x03, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x07,
- 0x07, 0x07, 0x07, 0x03, 0x07, 0x07,
- 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0x07, 0x07, 0x07,
- 0x07, 0x03, 0x07, 0x07, 0x07, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
- 0x07, 0x07, 0x01, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_HUE_MANITEE)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x03, 0x07, 0x07, 0x07, 0x07, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x03, 0x07, 0x07,
- 0x03, 0x00, 0x00, 0x02, 0x04, 0x00,
- 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_CORNE)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x03, 0x07, 0x07,
- 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
- 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x03, 0x07, 0x07, 0x07, 0x07,
- 0x07, 0x07, 0x07, 0x07, 0x03, 0x01,
- 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x07, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
- 0x07, 0x00, 0x00, 0x00, 0x01, 0x03,
- 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
- 0x07, 0x07, 0x03, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_LOOSE)
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F,
- 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00,
- 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
- 0x20, 0x47, 0x48, 0x50, 0x40, 0x41,
- 0x42, 0x24, 0x30, 0x3F, 0x3F, 0x3F,
- 0x3F, 0x3F, 0x3F, 0x3F, 0x31, 0x31,
- 0x11, 0x51, 0x11, 0x11, 0x4A, 0x0A,
- 0x2A, 0x0A, 0x44, 0x64, 0x50, 0x70,
- 0x50, 0x70, 0x50, 0x70, 0x50, 0x70,
- 0x53, 0x73, 0x53, 0x73, 0x53, 0x73,
- 0x53, 0x73, 0x53, 0x73, 0x53, 0x70,
- 0x50, 0x71, 0x53, 0x73, 0x53, 0x73,
- 0x53, 0x73, 0x53, 0x71, 0x50, 0x70,
- 0x50, 0x71, 0x53, 0x73, 0x53, 0x73,
- 0x53, 0x73, 0x53, 0x71, 0x50, 0x70,
- 0x53, 0x73, 0x53, 0x73, 0x53, 0x73,
- 0x53, 0x73, 0x53, 0x73, 0x51, 0x70,
- 0x53, 0x73, 0x53, 0x73, 0x53, 0x73,
- 0x53, 0x73, 0x53, 0x73, 0x53, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-# elif defined(OLED_LOGO_SKEEB)
- 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0xFF,
- 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08,
- 0x03, 0x04, 0x08, 0x10, 0x20, 0x40,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x40, 0x20, 0x10, 0x08, 0x04, 0x03,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
- 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8,
- 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
- 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0x80,
- 0x01, 0x02, 0xFC, 0xF8, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 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,
-#else
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x01, 0x01, 0x07, 0x0F, 0x0F,
- 0x7F, 0x0F, 0x7F, 0x0F, 0x0F, 0x7E,
- 0x0F, 0x0F, 0x7F, 0x0F, 0x7F, 0x0F,
- 0x0F, 0x07, 0x01, 0x01, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -1351,7 +1002,13 @@ static const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-#endif
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// third icon section
0x1F, 0x05, 0x00, 0x02, 0x1F, 0x00,
@@ -1391,14 +1048,13 @@ static const unsigned char font[] PROGMEM = {
0x6A, 0x60, 0x40, 0x00, 0x00, 0x00,
0x00, 0x04, 0x42, 0x69, 0x65, 0x65,
0x65, 0x69, 0x42, 0x04, 0x00, 0x00,
+ 0x06, 0x0F, 0x09, 0x0F, 0x06, 0x00,
0x00, 0x00, 0x1C, 0x14, 0x1C, 0x08,
0x18, 0x08, 0x18, 0x00, 0x00, 0x00,
0x00, 0x70, 0xC8, 0xEE, 0xF9, 0x70,
0x1F, 0x05, 0x00, 0x10, 0x77, 0x40,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x09, 0x59, 0x01, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
// clang-format on
-#endif
diff --git a/users/drashna/oled/oled_assets.h b/users/drashna/oled/oled_assets.h
new file mode 100644
index 00000000000..36dfc7762c7
--- /dev/null
+++ b/users/drashna/oled/oled_assets.h
@@ -0,0 +1,207 @@
+// Copyright 2023 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// clang-format off
+
+static const char PROGMEM code_to_name[256] = {
+// 0 1 2 3 4 5 6 7 8 9 A B c D E F
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', // 0x
+ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', // 1x
+ '3', '4', '5', '6', '7', '8', '9', '0', 20, 19, 27, 26, 22, '-', '=', '[', // 2x
+ ']','\\', '#', ';','\'', '`', ',', '.', '/', 128,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA, // 3x
+ 0xDB,0xDC,0xDD,0xDE,0XDF,0xFB, 'P', 'S', 19, ' ', 17, 30, 16, 16, 31, 26, // 4x
+ 27, 25, 24, 'N', '/', '*', '-', '+', 23, '1', '2', '3', '4', '5', '6', '7', // 5x
+ '8', '9', '0', '.','\\', 'A', 0, '=', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 6x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 7x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 8x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 9x
+ ' ', ' ', ' ', ' ', ' ', 0, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ax
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Bx
+ ' ',0x9E,0x9E, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',0x9D,0x9D,0x9D,0x9D, // Cx
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D, // Dx
+ 'C', 'S', 'A', 'G', 'C', 'S', 'A', 'G', ' ', ' ', ' ', ' ', ' ', 24, 26, 24, // Ex
+ 25, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 24, 25, 27, 26, ' ', ' ', ' ' // Fx
+};
+
+static const char PROGMEM gmk_bad_logo[384] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0x70, 0x38, 0x38, 0x38, 0x78, 0x70, 0xF0, 0xE0, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x00, 0x80, 0xE0, 0xF0, 0xF8, 0x78, 0x38, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x38, 0x38, 0xF8, 0xF0, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 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, 0xFC, 0xFC, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xFF, 0xFF, 0xFF, 0xC1, 0x80, 0x00, 0x00, 0x38, 0x38, 0xB8, 0xB8, 0xF9, 0xF9, 0xF8, 0x38, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0xFF, 0xFF, 0x1F, 0x01, 0x3F, 0xFF, 0xFF, 0xF0, 0xFE, 0x7F, 0x0F, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0x1E, 0x7F, 0xFF, 0xFF, 0xF3, 0xC1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0x1C, 0x1C, 0x9C, 0xFF, 0xFF, 0xF3, 0xE1, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0x0F, 0x07, 0x07, 0x8E, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0x8F, 0x07, 0x07, 0x8E, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x07, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x07, 0x07, 0x03, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x07, 0x07, 0x03, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const char PROGMEM hue_manitee_logo[384] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x90, 0x70, 0xE8, 0xA8, 0xE4, 0xC4, 0xC4, 0xA0, 0xE4, 0xB0, 0xDC, 0xE4, 0xFC, 0xFC, 0xFC, 0xFC, 0x3C, 0x3C, 0xFC, 0xF8, 0xF0, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xF6, 0xF7, 0xEF, 0xFF, 0x87, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x1F, 0x1F, 0x19, 0x15, 0xF7, 0x16, 0x1A, 0x1B, 0x16, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xC0, 0xC0, 0x00, 0x00, 0x03, 0x03, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x30, 0x30, 0xCC, 0xCC, 0x03, 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, 0x01, 0x03, 0x07, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x03, 0x00, 0x00, 0x02, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 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
+};
+
+static const char PROGMEM corne_logo[384] = {
+ 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const char PROGMEM loose_logo[384] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x02, 0xF9, 0x01, 0x01, 0x05, 0x09, 0x11, 0x22, 0x06, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x46, 0x46, 0x44, 0x44, 0x45, 0x44, 0x29, 0x28, 0x2A, 0x28, 0x11, 0x13, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0xE5, 0xE7, 0xE5, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xC7, 0x85, 0x07, 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xC7, 0x85, 0x07, 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0x07, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xC1, 0xC1, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x80, 0x00, 0x1C, 0x3E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x14, 0x14, 0x14, 0x14, 0x14, 0x08, 0x08, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xBE, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0xBD, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x8F, 0x9F, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xFC, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x20, 0x47, 0x48, 0x50, 0x40, 0x41, 0x42, 0x24, 0x30, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x31, 0x31, 0x11, 0x51, 0x11, 0x11, 0x4A, 0x0A, 0x2A, 0x0A, 0x44, 0x64, 0x50, 0x70, 0x50, 0x70, 0x50, 0x70, 0x50, 0x70, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x70, 0x50, 0x71, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x71, 0x50, 0x70, 0x50, 0x71, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x71, 0x50, 0x70, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x51, 0x70, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const char PROGMEM skeeb_logo[384] = {
+ 0xC0, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x01, 0xFF, 0xFF, 0x01, 0x01, 0xFF, 0xFF, 0x01, 0x01, 0xFF, 0xFF, 0x19, 0x19, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x01, 0x01, 0xFF, 0xFF, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x19, 0x19, 0xFF, 0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0x01, 0x01, 0xF9, 0xF9, 0xF9, 0xF9, 0xFF, 0xFF, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xF9, 0xF9, 0xFF, 0xFF, 0x19, 0x19, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x67, 0x67, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0xC0, 0x00,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x0E, 0x0E, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x09, 0x09, 0x09, 0x09, 0xF9, 0xF9, 0x09, 0x09, 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xFF, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x03, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x01, 0x02, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00
+};
+
+static const char PROGMEM qmk_logo[384] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xF0, 0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0x3F, 0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0xF0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 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, 0x49, 0x49, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xDF, 0xBF, 0xBF, 0x00, 0xBF, 0xBF, 0xDF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x60, 0x60, 0xE0, 0xBF, 0x1F, 0x00, 0x7F, 0x7F, 0x07, 0x1E, 0x38, 0x1E, 0x07, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x0E, 0x1F, 0x3B, 0x71, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x0C, 0x0C, 0x0C, 0x00, 0x7E, 0x7E, 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x7E, 0x7E, 0x03, 0x03, 0x7F, 0x7E, 0x00, 0x0F, 0x3E, 0x70, 0x3C, 0x06, 0x3C, 0x70, 0x3E, 0x0F, 0x00, 0x32, 0x7B, 0x49, 0x49, 0x3F, 0x7E, 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x00, 0x1E, 0x3F, 0x69, 0x69, 0x6F, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07, 0x0F, 0x0F, 0x7F, 0x0F, 0x7F, 0x0F, 0x0F, 0x7E, 0x0F, 0x0F, 0x7F, 0x0F, 0x7F, 0x0F, 0x0F, 0x07, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const char PROGMEM qmk_large_logo[1024] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x83, 0x83, 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, 0x81, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x83, 0x83, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1f, 0x3f, 0x7f, 0x7e, 0xf8, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf8, 0x7e, 0x7f, 0x3f, 0x1f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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 header_image[128] = { 0x00, 0xC0, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0xC0 };
+static const char PROGMEM row_2_image[128] = { 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 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, 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, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 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, 0xFF };
+
+static const char PROGMEM display_border[3] = {0x0, 0xFF, 0x0};
+
+static const char PROGMEM footer_image[128] = { 0x00, 0x03, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x03 };
+
+static const char PROGMEM mouse_logo[3][2][16] = {
+ { // mouse icon
+ { 0x00, 0x00, 0x00, 0xFC, 0x02, 0x02, 0x02, 0x3A, 0x02, 0x02, 0x02, 0xFC, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x3F, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x60, 0x3F, 0x00, 0x00, 0x00 }
+ },
+ { // crosshair icon
+ {0x80, 0xF0, 0x88, 0xE4, 0x92, 0x8A, 0xCA, 0x7F, 0xCA, 0x8A, 0x92, 0xE4, 0x88, 0xF0, 0x80, 0x00 },
+ {0x00, 0x07, 0x08, 0x13, 0x24, 0x28, 0x29, 0x7F, 0x29, 0x28, 0x24, 0x13, 0x08, 0x07, 0x00, 0x00 }
+ },
+ { // dragscroll icon
+ {0x00, 0x00, 0x70, 0x88, 0x9C, 0x02, 0x0F, 0x01, 0x0F, 0x02, 0x8C, 0x44, 0x38, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x02, 0x06, 0x0F, 0x1C, 0x3C, 0x7C, 0x3C, 0x1C, 0x0F, 0x06, 0x02, 0x00, 0x00, 0x00}
+ }
+};
+
+
+// Images credit j-inc(/James Incandenza) and pixelbenny.
+// Credit to obosob for initial animation approach.
+// heavily modified by drashna because he's a glutton for punishment
+
+#define OLED_ANIM_SIZE 36
+#define OLED_ANIM_ROWS 4
+#define OLED_ANIM_MAX_FRAMES 3
+
+static const char PROGMEM animation[4][OLED_ANIM_MAX_FRAMES][OLED_ANIM_ROWS][OLED_ANIM_SIZE] = {
+ { // sleep frames
+ {
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xa8, 0x48, 0xa8, 0x18, 0x08, 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, 0x00, 0x00, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x80, 0x44, 0x84, 0x06, 0x05, 0x04, 0x80, 0x40, 0x20, 0x10, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x18, 0x04, 0x04, 0x02, 0x7a, 0x86, 0x01, 0x80, 0x80, 0x01, 0x03, 0x05, 0x07, 0x01, 0x00, 0x00, 0x80, 0x83, 0x45, 0xfa, 0x3c, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x24, 0x28, 0x28, 0x29, 0x29, 0x29, 0x3a, 0x18, 0x1c, 0x39, 0x24, 0x24, 0x3a, 0x2d, 0x26, 0x31, 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, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x3a, 0x2a, 0x26, 0x22, 0x80, 0xc0, 0x80, 0x00, 0x24, 0x34, 0x2c, 0xe4, 0x60, 0x10, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x38, 0x04, 0x02, 0x02, 0x01, 0x79, 0x87, 0x01, 0x80, 0x81, 0x83, 0x05, 0x05, 0x03, 0x01, 0x00, 0x00, 0x80, 0x43, 0x05, 0xfa, 0x3c, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x24, 0x28, 0x28, 0x28, 0x29, 0x29, 0x3a, 0x18, 0x1c, 0x39, 0x24, 0x24, 0x3a, 0x2d, 0x26, 0x31, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ }
+ },
+ { // wake frames
+ {
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x08, 0x10, 0x60, 0x80, 0x00, 0x80, 0x60, 0x10, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x40, 0x40, 0x5c, 0x00, 0x01, 0x41, 0x01, 0x00, 0x5c, 0x40, 0x40, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x80, 0xe1, 0x12, 0x0a, 0x06, 0x00, 0x80, 0x00, 0x06, 0x0a, 0x12, 0xe1, 0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x11, 0x10, 0x10, 0x14, 0x14, 0x1f, 0x1c, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
+ },
+ {
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x08, 0x10, 0x60, 0x80, 0x00, 0x80, 0x60, 0x10, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x90, 0x12, 0x0a, 0x02, 0xf4, 0x09, 0x0d, 0xf1, 0x04, 0x02, 0x0a, 0x12, 0x90, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x80, 0xe1, 0x12, 0x0a, 0x06, 0x01, 0x81, 0x00, 0x06, 0x0a, 0x12, 0xe1, 0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x11, 0x10, 0x10, 0x14, 0x14, 0x1f, 0x1c, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
+ }
+ },
+ { // kaki frames
+ {
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0xfc, 0x84, 0x08, 0x08, 0x10, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x60, 0x80, 0x00, 0x00, 0x91, 0xa1, 0x80, 0x00, 0x00, 0x22, 0x84, 0x40, 0x50, 0x48, 0xc1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x41, 0x82, 0xe2, 0x12, 0x0a, 0x06, 0x00, 0x80, 0x88, 0x4f, 0x02, 0x22, 0xe2, 0x9f, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x14, 0x1f, 0x1a, 0x0a, 0x0a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ },
+ {
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x06, 0x1a, 0x22, 0xc2, 0x04, 0x04, 0x04, 0x07, 0x00, 0xc0, 0x20, 0x10, 0x80, 0x80, 0x01, 0x01, 0x02, 0xfc, 0xfe, 0x02, 0x3c, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0d, 0x8d, 0x55, 0x50, 0x94, 0xf0, 0x10, 0x09, 0x08, 0x00, 0x80, 0x00, 0x06, 0x09, 0x1b, 0xee, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x19, 0x18, 0x1c, 0x14, 0x16, 0x15, 0x14, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
+ },
+ {
+ { 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x01, 0x02, 0x04, 0x04, 0x03, 0x80, 0x40, 0x40, 0x20, 0x00, 0x01, 0x02, 0x8c, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0d, 0x8d, 0x55, 0x50, 0x94, 0xf0, 0x10, 0x0a, 0x0e, 0x1d, 0x95, 0x24, 0x24, 0x27, 0x13, 0xe1, 0x01, 0x01, 0x01, 0x01, 0x02, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x19, 0x18, 0x1c, 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
+ }
+ },
+ { // rtogi frames
+ {
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x0f, 0x90, 0x10, 0x20, 0xf0, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x48, 0x47, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0xc7, 0xc4, 0x62, 0x23, 0x11, 0x3f, 0x00, 0x00, 0x00, 0x00 },
+ { 0x80, 0x40, 0x20, 0x10, 0x88, 0xcc, 0x43, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xc0, 0x80, 0x80, 0xc0, 0xe1, 0xfe, 0xb8, 0x88, 0x0c, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 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, 0xc0, 0x20, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x1f, 0xa0, 0x20, 0x40, 0x80, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x48, 0x47, 0x88, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x28, 0x6b, 0x40, 0xa0, 0x99, 0x86, 0xff, 0x00, 0x00, 0x00, 0x00 },
+ { 0x0f, 0x11, 0x22, 0x44, 0x48, 0x4c, 0x43, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xc0, 0x80, 0x80, 0xc0, 0xe1, 0xfe, 0xb8, 0x88, 0x0c, 0x04, 0x06, 0x06, 0x06, 0x0e, 0x0e, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ }
+ }
+};
+
+static const char PROGMEM tri_layer_image[][3][24] = {
+ { // base
+ { 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E, 0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C, 0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88, 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, 0x00 }
+ },
+ { // raise
+ { 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x88, 0x88, 0x55, 0x55, 0x23, 0x23, 0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47, 0x23, 0x23, 0x55, 0x55, 0x88, 0x88, 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, 0x00 }
+ },
+ { // lower
+ { 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2, 0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4, 0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ },
+ { // adjust
+ { 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0xC0, 0x60, 0xA0, 0x50, 0xB0, 0x58, 0xA8, 0x50, 0xB0, 0x60, 0xA0, 0x40, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x88, 0x88, 0x5D, 0xD5, 0x6B, 0xB6, 0x6D, 0xD6, 0xAD, 0xDA, 0x6D, 0xD6, 0x6B, 0xB6, 0x5D, 0xD5, 0x88, 0x88, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, 0x05, 0x06, 0x0D, 0x0A, 0x05, 0x06, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ },
+ { // blank
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ },
+ { // better gamepad
+ { 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0x70, 0xF0, 0xF0, 0xF0, 0xF0, 0x90, 0x90, 0xF0, 0xF0, 0xF0, 0xF0, 0x70, 0xE0, 0xE0, 0xC0, 0x00, 0x00, 0x00 },
+ { 0x80, 0xF8, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xE6, 0xC3, 0xC3, 0xE6, 0xFF, 0xFF, 0xFE, 0xF7, 0xE3, 0xF6, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF, 0xF8, 0x80 },
+ { 0x07, 0x0F, 0x0F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x0F, 0x0F, 0x07 }
+ },
+ { // mouse
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x20, 0x20, 0x20, 0xA0, 0x20, 0x20, 0x20, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ }
+};
diff --git a/users/drashna/oled/oled_config.h b/users/drashna/oled/oled_config.h
index c46c0c39ce2..427764c4a7a 100644
--- a/users/drashna/oled/oled_config.h
+++ b/users/drashna/oled/oled_config.h
@@ -4,14 +4,12 @@
#pragma once
#ifndef OLED_UPDATE_INTERVAL
-# ifdef OLED_DRIVER_SH1107
-# define OLED_UPDATE_INTERVAL 75
+# ifdef SPLIT_KEYBOARD
+# define OLED_UPDATE_INTERVAL 60
+# elif defined(OLED_DISPLAY_128X128)
+# define OLED_UPDATE_INTERVAL 30
# else
-# ifdef SPLIT_KEYBOARD
-# define OLED_UPDATE_INTERVAL 60
-# else
-# define OLED_UPDATE_INTERVAL 15
-# endif
+# define OLED_UPDATE_INTERVAL 15
# endif
#endif
#define OLED_DISABLE_TIMEOUT
@@ -40,24 +38,3 @@
#define OLED_LOGO_SCIFI
// # define OLED_LOGO_SETS3N
// # define OLED_LOGO_SKEEB
-
-#ifdef OLED_DRIVER_SH1107
-# define OLED_DISPLAY_CUSTOM
-# define OLED_IC_SH1107 2
-# define OLED_DISPLAY_128X128
-# define OLED_DISPLAY_WIDTH 128
-# define OLED_DISPLAY_HEIGHT 128
-# define OLED_MATRIX_SIZE (OLED_DISPLAY_HEIGHT / 8 * OLED_DISPLAY_WIDTH)
-# define OLED_BLOCK_TYPE uint32_t
-# define OLED_SOURCE_MAP \
- { 0, 8, 16, 24, 32, 40, 48, 56 }
-# define OLED_TARGET_MAP \
- { 56, 48, 40, 32, 24, 16, 8, 0 }
-# define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8)
-# define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT)
-# define OLED_COM_PINS COM_PINS_ALT
-# define OLED_IC OLED_IC_SH1107
-# ifndef OLED_BRIGHTNESS
-# define OLED_BRIGHTNESS 50
-# endif
-#endif
diff --git a/users/drashna/oled/oled_stuff.c b/users/drashna/oled/oled_stuff.c
index 98506247df3..d232e90fb26 100644
--- a/users/drashna/oled/oled_stuff.c
+++ b/users/drashna/oled/oled_stuff.c
@@ -16,6 +16,10 @@
*/
#include "drashna.h"
+#include
+#include
+#include
+#include "lib/lib8tion/lib8tion.h"
#ifdef UNICODE_COMMON_ENABLE
# include "process_unicode_common.h"
# include "keyrecords/unicode.h"
@@ -23,42 +27,39 @@
#ifdef AUDIO_CLICKY
# include "process_clicky.h"
#endif
-#include
-bool is_oled_enabled = true, is_oled_locked = false;
-
-extern bool host_driver_disabled;
-
-uint32_t oled_timer = 0;
-char keylog_str[OLED_KEYLOGGER_LENGTH] = {0};
-static uint16_t log_timer = 0;
-#ifdef OLED_DISPLAY_VERBOSE
-const char PROGMEM display_border[3] = {0x0, 0xFF, 0x0};
+#ifndef OLED_BRIGHTNESS_STEP
+# define OLED_BRIGHTNESS_STEP 32
#endif
+bool is_oled_enabled = true, is_oled_locked = false, is_oled_force_off = false;
+
+uint32_t oled_timer = 0;
+char oled_keylog_str[OLED_KEYLOGGER_LENGTH + 1] = {0};
+
deferred_token kittoken;
-// clang-format off
-static const char PROGMEM code_to_name[256] = {
-// 0 1 2 3 4 5 6 7 8 9 A B c D E F
- ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', // 0x
- 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', // 1x
- '3', '4', '5', '6', '7', '8', '9', '0', 20, 19, 27, 26, 22, '-', '=', '[', // 2x
- ']','\\', '#', ';','\'', '`', ',', '.', '/', 128,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA, // 3x
- 0xDB,0xDC,0xDD,0xDE,0XDF,0xFB,'P', 'S', 19, ' ', 17, 30, 16, 16, 31, 26, // 4x
- 27, 25, 24, 'N', '/', '*', '-', '+', 23, '1', '2', '3', '4', '5', '6', '7', // 5x
- '8', '9', '0', '.','\\', 'A', 0, '=', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 6x
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 7x
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 8x
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 9x
- ' ', ' ', ' ', ' ', ' ', 0, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ax
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Bx
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Cx
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Dx
- 'C', 'S', 'A', 'C', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 24, 26, 24, // Ex
- 25,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D, 24, 25, 27, 26, ' ', ' ', ' ' // Fx
-};
-// clang-format on
+extern uint8_t oled_buffer[OLED_MATRIX_SIZE];
+extern OLED_BLOCK_TYPE oled_dirty;
+
+void oled_pan_section(bool left, uint16_t y_start, uint16_t y_end, uint16_t x_start, uint16_t x_end) {
+ uint16_t i = 0;
+ for (uint16_t y = y_start; y < y_end; y++) {
+ if (left) {
+ for (uint16_t x = x_start; x < x_end - 1; x++) {
+ i = y * OLED_DISPLAY_WIDTH + x;
+ oled_buffer[i] = oled_buffer[i + 1];
+ oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
+ }
+ } else {
+ for (uint16_t x = x_end - 1; x > 0; x--) {
+ i = y * OLED_DISPLAY_WIDTH + x;
+ oled_buffer[i] = oled_buffer[i - 1];
+ oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
+ }
+ }
+ }
+}
/**
* @brief parses pressed keycodes and saves to buffer
@@ -67,32 +68,34 @@ static const char PROGMEM code_to_name[256] = {
* @param record keyrecord_t data structure
*/
void add_keylog(uint16_t keycode, keyrecord_t *record) {
- if (keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) {
- keycode = QK_MOD_TAP_GET_TAP_KEYCODE(keycode);
- } else if (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) {
- keycode = QK_LAYER_TAP_GET_TAP_KEYCODE(keycode);
- } else if (keycode >= QK_MODS && keycode <= QK_MODS_MAX) {
- keycode = QK_MODS_GET_BASIC_KEYCODE(keycode);
+ if (IS_QK_MOD_TAP(keycode)) {
+ if (record->tap.count) {
+ keycode = keycode_config(QK_MOD_TAP_GET_TAP_KEYCODE(keycode));
+ } else {
+ keycode = keycode_config(0xE0 + biton(QK_MOD_TAP_GET_MODS(keycode) & 0xF) + biton(QK_MOD_TAP_GET_MODS(keycode) & 0x10));
+ }
+ } else if (IS_QK_LAYER_TAP(keycode) && record->tap.count) {
+ keycode = keycode_config(QK_LAYER_TAP_GET_TAP_KEYCODE(keycode));
+ } else if (IS_QK_MODS(keycode)) {
+ keycode = keycode_config(QK_MODS_GET_BASIC_KEYCODE(keycode));
+ } else if (IS_QK_ONE_SHOT_MOD(keycode)) {
+ keycode = keycode_config(0xE0 + biton(QK_ONE_SHOT_MOD_GET_MODS(keycode) & 0xF) + biton(QK_ONE_SHOT_MOD_GET_MODS(keycode) & 0x10));
+ } else if (IS_QK_BASIC(keycode)) {
+ keycode = keycode_config(keycode);
}
if ((keycode == KC_BSPC) && mod_config(get_mods() | get_oneshot_mods()) & MOD_MASK_CTRL) {
- memset(keylog_str, ' ', OLED_KEYLOGGER_LENGTH);
- keylog_str[OLED_KEYLOGGER_LENGTH-1] = 0x00;
- return;
- }
- if (record->tap.count) {
- keycode &= 0xFF;
- } else if (keycode > 0xFF) {
+ memset(oled_keylog_str, ' ', OLED_KEYLOGGER_LENGTH);
+ oled_keylog_str[OLED_KEYLOGGER_LENGTH] = 0x00;
return;
}
- memmove(keylog_str, keylog_str + 1, OLED_KEYLOGGER_LENGTH - 2);
-
- if (keycode < ARRAY_SIZE(code_to_name)) {
- keylog_str[(OLED_KEYLOGGER_LENGTH - 2)] = pgm_read_byte(&code_to_name[keycode]);
+ if (keycode > ARRAY_SIZE(code_to_name)) {
+ return;
}
- log_timer = timer_read();
+ memmove(oled_keylog_str, oled_keylog_str + 1, OLED_KEYLOGGER_LENGTH - 1);
+ oled_keylog_str[(OLED_KEYLOGGER_LENGTH - 1)] = pgm_read_byte(&code_to_name[keycode]);
}
/**
@@ -107,15 +110,25 @@ void add_keylog(uint16_t keycode, keyrecord_t *record) {
*/
bool process_record_user_oled(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
- oled_timer_reset();
add_keylog(keycode, record);
+ if (keycode == OLED_BRIGHTNESS_INC) {
+ userspace_config.oled_brightness = qadd8(userspace_config.oled_brightness, OLED_BRIGHTNESS_STEP);
+ oled_set_brightness(userspace_config.oled_brightness);
+ eeconfig_update_user_config(&userspace_config.raw);
+ } else if (keycode == OLED_BRIGHTNESS_DEC) {
+ userspace_config.oled_brightness = qsub8(userspace_config.oled_brightness, OLED_BRIGHTNESS_STEP);
+ oled_set_brightness(userspace_config.oled_brightness);
+ eeconfig_update_user_config(&userspace_config.raw);
+ } else if (keycode == OLED_LOCK) {
+ is_oled_locked = !is_oled_locked;
+ if (is_oled_locked) {
+ oled_on();
+ }
+ }
}
return true;
}
-void oled_timer_reset(void) {
- oled_timer = timer_read32();
-}
/**
* @brief Renders keylogger buffer to oled
*
@@ -125,7 +138,7 @@ void render_keylogger_status(uint8_t col, uint8_t line) {
oled_set_cursor(col, line);
#endif
oled_write_P(PSTR(OLED_RENDER_KEYLOGGER), false);
- oled_write(keylog_str, false);
+ oled_write(oled_keylog_str, false);
#ifdef OLED_DISPLAY_VERBOSE
oled_advance_page(true);
#endif
@@ -138,7 +151,18 @@ void render_keylogger_status(uint8_t col, uint8_t line) {
void render_default_layer_state(uint8_t col, uint8_t line) {
#ifdef OLED_DISPLAY_VERBOSE
oled_set_cursor(col, line);
-#endif
+ oled_write_P(PSTR(OLED_RENDER_LAYOUT_NAME), false);
+
+ static char layer_state_buffer[11] = {0};
+ static layer_state_t old_state = 0;
+
+ if (old_state != default_layer_state) {
+ snprintf(layer_state_buffer, sizeof(layer_state_buffer), "%-10s", get_layer_name_string(default_layer_state, false));
+ old_state = default_layer_state;
+ }
+ oled_write(layer_state_buffer, false);
+ oled_advance_page(true);
+#else
oled_write_P(PSTR(OLED_RENDER_LAYOUT_NAME), false);
switch (get_highest_layer(default_layer_state)) {
case _QWERTY:
@@ -154,8 +178,6 @@ void render_default_layer_state(uint8_t col, uint8_t line) {
oled_write_P(PSTR(OLED_RENDER_LAYOUT_DVORAK), false);
break;
}
-#ifdef OLED_DISPLAY_VERBOSE
- oled_advance_page(true);
#endif
}
@@ -165,114 +187,6 @@ void render_default_layer_state(uint8_t col, uint8_t line) {
*/
void render_layer_state(uint8_t col, uint8_t line) {
#ifdef OLED_DISPLAY_VERBOSE
- // clang-format off
- static const char PROGMEM tri_layer_image[][3][24] = {
- // base
- {
- {
- 0x00, 0x00, 0x00, 0x80, 0x80, 0x40,
- 0x40, 0x20, 0x20, 0x10, 0x10, 0x08,
- 0x08, 0x10, 0x10, 0x20, 0x20, 0x40,
- 0x40, 0x80, 0x80, 0x00, 0x00, 0x00
- },
- {
- 0x00, 0x00, 0x00, 0x88, 0x88, 0x5D,
- 0x5D, 0x3E, 0x3E, 0x7C, 0x7C, 0xF8,
- 0xF8, 0x7C, 0x7C, 0x3E, 0x3E, 0x5D,
- 0x5D, 0x88, 0x88, 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, 0x00
- }
- },
- // raise
- {
- {
- 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0,
- 0xC0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF8,
- 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0,
- 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00
- },
- {
- 0x00, 0x00, 0x00, 0x88, 0x88, 0x55,
- 0x55, 0x23, 0x23, 0x47, 0x47, 0x8F,
- 0x8F, 0x47, 0x47, 0x23, 0x23, 0x55,
- 0x55, 0x88, 0x88, 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, 0x00
- }
- },
- // lower
- {
- {
- 0x00, 0x00, 0x00, 0x80, 0x80, 0x40,
- 0x40, 0x20, 0x20, 0x10, 0x10, 0x08,
- 0x08, 0x10, 0x10, 0x20, 0x20, 0x40,
- 0x40, 0x80, 0x80, 0x00, 0x00, 0x00
- },
- {
- 0x00, 0x00, 0x00, 0x88, 0x88, 0xD5,
- 0xD5, 0xE2, 0xE2, 0xC4, 0xC4, 0x88,
- 0x88, 0xC4, 0xC4, 0xE2, 0xE2, 0xD5,
- 0xD5, 0x88, 0x88, 0x00, 0x00, 0x00
- },
- {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x01, 0x03, 0x03, 0x07, 0x07, 0x0F,
- 0x0F, 0x07, 0x07, 0x03, 0x03, 0x01,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
- }
- },
- // adjust
- {
- {
- 0x00, 0x00, 0x00, 0x80, 0x80, 0x40,
- 0xC0, 0x60, 0xA0, 0x50, 0xB0, 0x58,
- 0xA8, 0x50, 0xB0, 0x60, 0xA0, 0x40,
- 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00
- },
- {
- 0x00, 0x00, 0x00, 0x88, 0x88, 0x5D,
- 0xD5, 0x6B, 0xB6, 0x6D, 0xD6, 0xAD,
- 0xDA, 0x6D, 0xD6, 0x6B, 0xB6, 0x5D,
- 0xD5, 0x88, 0x88, 0x00, 0x00, 0x00
- },
- {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x01, 0x03, 0x02, 0x05, 0x06, 0x0D,
- 0x0A, 0x05, 0x06, 0x03, 0x02, 0x01,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
- }
- },
- // blank
- {
- { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
- },
- // better gamepad
- {
- { 0, 0, 0,192,224,224,112,240,240,240,240,144,144,240,240,240,240,112,224,224,192, 0, 0, 0 },
- { 128,248,255,255,255,254,252,230,195,195,230,255,255,254,247,227,246,253,254,255,255,255,248,128 },
- { 7, 15, 15, 15, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 15, 15, 15, 7 }
-
- },
- // mouse
- {
- { 0, 0, 0, 0, 0, 0, 0, 0,192, 32, 32, 32,160, 32, 32, 32,192, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0,240, 15, 0, 0, 0, 3, 0, 0, 0, 15,240, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 3, 6, 4, 4, 4, 4, 4, 4, 4, 6, 3, 0, 0, 0, 0, 0, 0 }
- }
- };
-
- // clang-format on
uint8_t layer_is[4] = {0, 4, 4, 4};
if (layer_state_is(_ADJUST)) {
layer_is[0] = 3;
@@ -376,19 +290,23 @@ void render_mod_status(uint8_t modifiers, uint8_t col, uint8_t line) {
static const char PROGMEM mod_status[5][3] = {{0xE8, 0xE9, 0}, {0xE4, 0xE5, 0}, {0xE6, 0xE7, 0}, {0xEA, 0xEB, 0}, {0xEC, 0xED, 0}};
#if defined(OLED_DISPLAY_VERBOSE)
oled_set_cursor(col, line);
+#endif
+ bool is_caps = host_keyboard_led_state().caps_lock;
+#ifdef CAPS_WORD_ENABLE
+ is_caps |= is_caps_word_on();
#endif
oled_write_P(PSTR(OLED_RENDER_MODS_NAME), false);
#if defined(OLED_DISPLAY_VERBOSE)
- oled_write_P(mod_status[0], (modifiers & MOD_BIT(KC_LSFT)));
+ oled_write_P(mod_status[0], (modifiers & MOD_BIT(KC_LSFT)) || is_caps);
oled_write_P(mod_status[!keymap_config.swap_lctl_lgui ? 3 : 4], (modifiers & MOD_BIT(KC_LGUI)));
oled_write_P(mod_status[2], (modifiers & MOD_BIT(KC_LALT)));
oled_write_P(mod_status[1], (modifiers & MOD_BIT(KC_LCTL)));
oled_write_P(mod_status[1], (modifiers & MOD_BIT(KC_RCTL)));
oled_write_P(mod_status[2], (modifiers & MOD_BIT(KC_RALT)));
oled_write_P(mod_status[!keymap_config.swap_lctl_lgui ? 3 : 4], (modifiers & MOD_BIT(KC_RGUI)));
- oled_write_P(mod_status[0], (modifiers & MOD_BIT(KC_RSFT)));
+ oled_write_P(mod_status[0], (modifiers & MOD_BIT(KC_RSFT)) || is_caps);
#else
- oled_write_P(mod_status[0], (modifiers & MOD_MASK_SHIFT));
+ oled_write_P(mod_status[0], (modifiers & MOD_MASK_SHIFT) || is_caps);
oled_write_P(mod_status[!keymap_config.swap_lctl_lgui ? 3 : 4], (modifiers & MOD_MASK_GUI));
oled_write_P(PSTR(" "), false);
oled_write_P(mod_status[2], (modifiers & MOD_MASK_ALT));
@@ -508,7 +426,7 @@ void render_user_status(uint8_t col, uint8_t line) {
static const char PROGMEM rgb_layer_status[2][3] = {{0xEE, 0xEF, 0}, {0xF0, 0xF1, 0}};
oled_write_P(rgb_layer_status[userspace_config.rgb_layer_change], false);
static const char PROGMEM cat_mode[2][3] = {{0xF8, 0xF9, 0}, {0xF6, 0xF7, 0}};
- oled_write_P(cat_mode[0], host_driver_disabled);
+ oled_write_P(cat_mode[0], get_keyboard_lock());
#if defined(UNICODE_COMMON_ENABLE)
static const char PROGMEM uc_mod_status[5][3] = {{0xEC, 0xED, 0}, {0x20, 0x20, 0}, {0x20, 0x20, 0}, {0x20, 0x20, 0}, {0xEA, 0xEB, 0}};
oled_write_P(uc_mod_status[get_unicode_input_mode()], false);
@@ -538,14 +456,53 @@ void render_rgb_hsv(uint8_t col, uint8_t line) {
oled_write_P(PSTR(", "), false);
oled_write(get_u8_str(rgb_matrix_get_val(), ' '), false);
#elif RGBLIGHT_ENABLE
- oled_write(get_u8_str(rgblight_get_hue(), ' '), false);
- oled_write_P(PSTR(", "), false);
- oled_write(get_u8_str(rgblight_get_sat(), ' '), false);
- oled_write_P(PSTR(", "), false);
- oled_write(get_u8_str(rgblight_get_val(), ' '), false);
+ if (is_rgblight_startup_running()) {
+ oled_write_P(PSTR("Start Animation"), false);
+ } else {
+ oled_write(get_u8_str(rgblight_get_hue(), ' '), false);
+ oled_write_P(PSTR(", "), false);
+ oled_write(get_u8_str(rgblight_get_sat(), ' '), false);
+ oled_write_P(PSTR(", "), false);
+ oled_write(get_u8_str(rgblight_get_val(), ' '), false);
+ }
#endif
}
+void render_rgb_mode(uint8_t col, uint8_t line) {
+ oled_set_cursor(col, line);
+ __attribute__((unused)) static uint8_t mode;
+ bool need_update = false;
+ static char buf[21] = {0};
+
+#ifdef RGB_MATRIX_ENABLE
+ if (mode != rgb_matrix_get_mode()) {
+ snprintf(buf, sizeof(buf), "%-20s", rgb_matrix_name(rgb_matrix_get_mode()));
+ mode = rgb_matrix_get_mode();
+ need_update = true;
+ }
+#elif RGBLIGHT_ENABLE
+ if (mode != rgblight_get_mode()) {
+ snprintf(buf, sizeof(buf), "%-20s", rgblight_name(rgblight_get_mode()));
+ mode = rgblight_get_mode();
+ need_update = true;
+ }
+#endif
+ if (need_update) {
+ for (uint8_t i = 1; i < sizeof(buf); ++i) {
+ if (buf[i] == 0)
+ break;
+ else if (buf[i] == '_')
+ buf[i] = ' ';
+ else if (buf[i - 1] == ' ')
+ buf[i] = toupper(buf[i]);
+ else if (buf[i - 1] != ' ')
+ buf[i] = tolower(buf[i]);
+ }
+ }
+
+ oled_write(buf, false);
+}
+
void render_wpm(uint8_t padding, uint8_t col, uint8_t line) {
#ifdef WPM_ENABLE
oled_set_cursor(col, line);
@@ -642,9 +599,6 @@ void render_pointing_dpi_status(uint16_t cpi, uint8_t padding, uint8_t col, uint
// #define ANIM_FRAME_DURATION 500 // how long each frame lasts in ms
// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing
-#define OLED_ANIM_SIZE 36
-#define OLED_ANIM_ROWS 4
-#define OLED_ANIM_MAX_FRAMES 3
#if (OLED_SLEEP_FRAMES > OLED_ANIM_MAX_FRAMES) || (OLED_WAKE_FRAMES > OLED_ANIM_MAX_FRAMES) || (OLED_KAKI_FRAMES > OLED_ANIM_MAX_FRAMES) || (OLED_RTOGI_FRAMES > OLED_ANIM_MAX_FRAMES)
# error frame size too large
#endif
@@ -653,81 +607,6 @@ static uint8_t animation_frame = 0;
static uint8_t animation_type = 0;
void render_kitty(uint8_t col, uint8_t line) {
- // Images credit j-inc(/James Incandenza) and pixelbenny.
- // Credit to obosob for initial animation approach.
- // heavily modified by drashna because he's a glutton for punishment
-
- // clang-format off
- static const char PROGMEM animation[4][OLED_ANIM_MAX_FRAMES][OLED_ANIM_ROWS][OLED_ANIM_SIZE] = {
- // sleep frames
- {
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xa8, 0x48, 0xa8, 0x18, 0x08, 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, 0x00, 0x00, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x80, 0x44, 0x84, 0x06, 0x05, 0x04, 0x80, 0x40, 0x20, 0x10, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x18, 0x04, 0x04, 0x02, 0x7a, 0x86, 0x01, 0x80, 0x80, 0x01, 0x03, 0x05, 0x07, 0x01, 0x00, 0x00, 0x80, 0x83, 0x45, 0xfa, 0x3c, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x24, 0x28, 0x28, 0x29, 0x29, 0x29, 0x3a, 0x18, 0x1c, 0x39, 0x24, 0x24, 0x3a, 0x2d, 0x26, 0x31, 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, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x3a, 0x2a, 0x26, 0x22, 0x80, 0xc0, 0x80, 0x00, 0x24, 0x34, 0x2c, 0xe4, 0x60, 0x10, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x38, 0x04, 0x02, 0x02, 0x01, 0x79, 0x87, 0x01, 0x80, 0x81, 0x83, 0x05, 0x05, 0x03, 0x01, 0x00, 0x00, 0x80, 0x43, 0x05, 0xfa, 0x3c, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x33, 0x24, 0x28, 0x28, 0x28, 0x29, 0x29, 0x3a, 0x18, 0x1c, 0x39, 0x24, 0x24, 0x3a, 0x2d, 0x26, 0x31, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00 }
- }
- },
- // wake frames
- {
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x08, 0x10, 0x60, 0x80, 0x00, 0x80, 0x60, 0x10, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x40, 0x40, 0x5c, 0x00, 0x01, 0x41, 0x01, 0x00, 0x5c, 0x40, 0x40, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x80, 0xe1, 0x12, 0x0a, 0x06, 0x00, 0x80, 0x00, 0x06, 0x0a, 0x12, 0xe1, 0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x11, 0x10, 0x10, 0x14, 0x14, 0x1f, 0x1c, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
- },
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x08, 0x10, 0x60, 0x80, 0x00, 0x80, 0x60, 0x10, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x90, 0x12, 0x0a, 0x02, 0xf4, 0x09, 0x0d, 0xf1, 0x04, 0x02, 0x0a, 0x12, 0x90, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x80, 0xe1, 0x12, 0x0a, 0x06, 0x01, 0x81, 0x00, 0x06, 0x0a, 0x12, 0xe1, 0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x11, 0x10, 0x10, 0x14, 0x14, 0x1f, 0x1c, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
- }
- },
- // kaki frames
- {
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0xfc, 0x84, 0x08, 0x08, 0x10, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x60, 0x80, 0x00, 0x00, 0x91, 0xa1, 0x80, 0x00, 0x00, 0x22, 0x84, 0x40, 0x50, 0x48, 0xc1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x41, 0x82, 0xe2, 0x12, 0x0a, 0x06, 0x00, 0x80, 0x88, 0x4f, 0x02, 0x22, 0xe2, 0x9f, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x14, 0x1f, 0x1a, 0x0a, 0x0a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 }
- },
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x06, 0x1a, 0x22, 0xc2, 0x04, 0x04, 0x04, 0x07, 0x00, 0xc0, 0x20, 0x10, 0x80, 0x80, 0x01, 0x01, 0x02, 0xfc, 0xfe, 0x02, 0x3c, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0d, 0x8d, 0x55, 0x50, 0x94, 0xf0, 0x10, 0x09, 0x08, 0x00, 0x80, 0x00, 0x06, 0x09, 0x1b, 0xee, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x19, 0x18, 0x1c, 0x14, 0x16, 0x15, 0x14, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
- },
- {
- { 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x01, 0x02, 0x04, 0x04, 0x03, 0x80, 0x40, 0x40, 0x20, 0x00, 0x01, 0x02, 0x8c, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0d, 0x8d, 0x55, 0x50, 0x94, 0xf0, 0x10, 0x0a, 0x0e, 0x1d, 0x95, 0x24, 0x24, 0x27, 0x13, 0xe1, 0x01, 0x01, 0x01, 0x01, 0x02, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x14, 0x14, 0x10, 0x10, 0x11, 0x1f, 0x10, 0x10, 0x18, 0x0f, 0x18, 0x10, 0x10, 0x1f, 0x19, 0x18, 0x1c, 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00 }
- }
- },
- // rtogi frames
- {
- {
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x0f, 0x90, 0x10, 0x20, 0xf0, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x48, 0x47, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x88, 0xc7, 0xc4, 0x62, 0x23, 0x11, 0x3f, 0x00, 0x00, 0x00, 0x00 },
- { 0x80, 0x40, 0x20, 0x10, 0x88, 0xcc, 0x43, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xc0, 0x80, 0x80, 0xc0, 0xe1, 0xfe, 0xb8, 0x88, 0x0c, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 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, 0xc0, 0x20, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x1f, 0xa0, 0x20, 0x40, 0x80, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x48, 0x47, 0x88, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x28, 0x6b, 0x40, 0xa0, 0x99, 0x86, 0xff, 0x00, 0x00, 0x00, 0x00 },
- { 0x0f, 0x11, 0x22, 0x44, 0x48, 0x4c, 0x43, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xc0, 0x80, 0x80, 0xc0, 0xe1, 0xfe, 0xb8, 0x88, 0x0c, 0x04, 0x06, 0x06, 0x06, 0x0e, 0x0e, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
- }
- }
- };
- // clang-format on
-
for (uint8_t i = 0; i < 4; i++) {
oled_set_cursor(col, line + i);
oled_write_raw_P(animation[animation_type][animation_frame][i], OLED_ANIM_SIZE);
@@ -776,13 +655,6 @@ uint32_t kitty_animation_phases(uint32_t triger_time, void *cb_arg) {
void render_mouse_mode(uint8_t col, uint8_t line) {
#if (defined(KEYBOARD_bastardkb_charybdis) || defined(KEYBOARD_handwired_tractyl_manuform)) && defined(POINTING_DEVICE_ENABLE)
// credit and thanks to jaspertandy on discord for these images
- static const char PROGMEM mouse_logo[3][2][16] = {// mouse icon
- {{0, 0, 0, 252, 2, 2, 2, 58, 2, 2, 2, 252, 0, 0, 0, 0}, {0, 0, 63, 96, 64, 64, 64, 64, 64, 64, 64, 96, 63, 0, 0, 0}},
- // crosshair icon
- {{128, 240, 136, 228, 146, 138, 202, 127, 202, 138, 146, 228, 136, 240, 128, 0}, {0, 7, 8, 19, 36, 40, 41, 127, 41, 40, 36, 19, 8, 7, 0, 0}},
- // dragscroll icon
- {{0, 0, 112, 136, 156, 2, 15, 1, 15, 2, 140, 68, 56, 0, 0, 0}, {0, 0, 2, 6, 15, 28, 60, 124, 60, 28, 15, 6, 2, 0, 0, 0}}};
-
uint8_t image_index = 0;
# ifdef OLED_DISPLAY_TEST
image_index = animation_frame;
@@ -848,7 +720,18 @@ void render_status_left(void) {
}
__attribute__((weak)) void oled_render_large_display(bool side) {
- if (!side) {
+ if (side) {
+ render_rgb_hsv(1, 7);
+ render_rgb_mode(1, 8);
+
+ render_wpm_graph(48, 72);
+ } else {
+ oled_advance_page(true);
+ oled_advance_page(true);
+
+ oled_set_cursor(0, 9);
+ oled_write_raw_P(qmk_logo, 384); // is 3 rows of 128 pixels, so 384 bytes.
+
render_unicode_mode(1, 14);
}
}
@@ -864,7 +747,7 @@ __attribute__((weak)) oled_rotation_t oled_init_keymap(oled_rotation_t rotation)
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (is_keyboard_master()) {
- memset(keylog_str, ' ', OLED_KEYLOGGER_LENGTH);
+ memset(oled_keylog_str, ' ', OLED_KEYLOGGER_LENGTH);
}
kittoken = defer_exec(3000, kitty_animation_phases, NULL);
@@ -894,12 +777,7 @@ bool oled_task_user(void) {
}
#if defined(OLED_DISPLAY_VERBOSE)
- static const char PROGMEM header_image[] = {
- 0, 192, 32, 16, 8, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 7, 15, 31, 63, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 63, 31, 15, 7, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 192, 0,
- // 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 7, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0
- };
oled_write_raw_P(header_image, sizeof(header_image));
-
oled_set_cursor(4, 0);
render_oled_title(is_keyboard_left());
#endif
@@ -934,7 +812,6 @@ bool oled_task_user(void) {
oled_write_raw_P(display_border, sizeof(display_border));
}
- static const char PROGMEM footer_image[] = {0, 3, 4, 8, 16, 32, 64, 128, 128, 128, 128, 128, 128, 128, 192, 224, 240, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 240, 224, 192, 128, 128, 128, 128, 128, 128, 128, 64, 32, 16, 8, 4, 3, 0};
oled_set_cursor(0, num_of_rows);
oled_write_raw_P(footer_image, sizeof(footer_image));
#endif
@@ -942,8 +819,12 @@ bool oled_task_user(void) {
return false;
}
-extern bool oled_initialized;
-
-__attribute__((weak)) void housekeeping_task_oled(void) {
- is_oled_enabled = is_oled_locked ? true : !(timer_elapsed32(oled_timer) > 60000);
+void housekeeping_task_oled(void) {
+ is_oled_enabled = false;
+ if ((is_oled_locked || (last_input_activity_elapsed() < 60000)) && !is_oled_force_off) {
+ is_oled_enabled = true;
+ }
+ if (oled_get_brightness() != userspace_config.oled_brightness) {
+ oled_set_brightness(userspace_config.oled_brightness);
+ }
}
diff --git a/users/drashna/oled/oled_stuff.h b/users/drashna/oled/oled_stuff.h
index 419cdc11ebb..414720ff2af 100644
--- a/users/drashna/oled/oled_stuff.h
+++ b/users/drashna/oled/oled_stuff.h
@@ -18,6 +18,7 @@
#include "quantum.h"
#include "oled_driver.h"
+#include "oled_assets.h"
#ifdef DEFFERED_EXEC_ENABLE
extern deferred_token kittoken;
#endif
@@ -55,7 +56,7 @@ void oled_pan_section(bool left, uint16_t y_start, uint16_t y_end, uint16_t x_st
# define OLED_RENDER_KEYLOGGER "Keylogger: "
# ifndef OLED_KEYLOGGER_LENGTH
-# define OLED_KEYLOGGER_LENGTH 10
+# define OLED_KEYLOGGER_LENGTH 9
# endif
# define OLED_RENDER_LAYOUT_NAME "Layout: "
# define OLED_RENDER_LAYOUT_QWERTY "Qwerty"
@@ -102,7 +103,7 @@ void oled_pan_section(bool left, uint16_t y_start, uint16_t y_end, uint16_t x_st
#else
# define OLED_RENDER_KEYLOGGER "KLogr"
# ifndef OLED_KEYLOGGER_LENGTH
-# define OLED_KEYLOGGER_LENGTH 6
+# define OLED_KEYLOGGER_LENGTH 5
# endif
# define OLED_RENDER_LAYOUT_NAME "Lyout"
@@ -149,7 +150,7 @@ void oled_pan_section(bool left, uint16_t y_start, uint16_t y_end, uint16_t x_st
# define OLED_RENDER_WPM_COUNTER "WPM: "
#endif
-extern char keylog_str[];
+extern char oled_keylog_str[OLED_KEYLOGGER_LENGTH + 1];
#ifndef OLED_WPM_GRAPH_MAX_WPM
# define OLED_WPM_GRAPH_MAX_WPM 120
diff --git a/users/drashna/oled/rules.mk b/users/drashna/oled/rules.mk
new file mode 100644
index 00000000000..95be67a9ef6
--- /dev/null
+++ b/users/drashna/oled/rules.mk
@@ -0,0 +1,12 @@
+
+CUSTOM_OLED_DRIVER ?= yes
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ ifeq ($(strip $(CUSTOM_OLED_DRIVER)), yes)
+ OPT_DEFS += -DCUSTOM_OLED_DRIVER
+ SRC += $(USER_PATH)/oled/oled_stuff.c
+ endif
+ ifeq ($(strip $(OLED_DISPLAY_TEST)), yes)
+ OPT_DEFS += -DOLED_DISPLAY_TEST
+ endif
+endif
+DEFERRED_EXEC_ENABLE = yes
diff --git a/users/drashna/oled/sh110x.c b/users/drashna/oled/sh110x.c
deleted file mode 100644
index f96a93a8973..00000000000
--- a/users/drashna/oled/sh110x.c
+++ /dev/null
@@ -1,860 +0,0 @@
-/*
-Copyright 2019 Ryan Caltabiano
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-#include "i2c_master.h"
-#include "oled_driver.h"
-#include OLED_FONT_H
-#include "timer.h"
-#include "print.h"
-
-#include
-
-#include "progmem.h"
-
-#include "keyboard.h"
-
-// for SH1107: https://www.displayfuture.com/Display/datasheet/controller/SH1107.pdf
-
-// Fundamental Commands
-#define CONTRAST 0x81
-#define DISPLAY_ALL_ON 0xA5
-#define DISPLAY_ALL_ON_RESUME 0xA4
-#define NORMAL_DISPLAY 0xA6
-#define INVERT_DISPLAY 0xA7
-#define DISPLAY_ON 0xAF
-#define DISPLAY_OFF 0xAE
-#define NOP 0xE3
-
-// Scrolling Commands
-#define ACTIVATE_SCROLL 0x2F
-#define DEACTIVATE_SCROLL 0x2E
-#define SCROLL_RIGHT 0x26
-#define SCROLL_LEFT 0x27
-#define SCROLL_RIGHT_UP 0x29
-#define SCROLL_LEFT_UP 0x2A
-
-// Addressing Setting Commands
-#define MEMORY_MODE 0x20
-#define COLUMN_ADDR 0x21
-#define PAGE_ADDR 0x22
-#define PAM_SETCOLUMN_LSB 0x00
-#define PAM_SETCOLUMN_MSB 0x10
-#define PAM_PAGE_ADDR 0xB0 // 0xb0 -- 0xb7
-
-// Hardware Configuration Commands
-#define DISPLAY_START_LINE 0x40
-#define SEGMENT_REMAP 0xA0
-#define SEGMENT_REMAP_INV 0xA1
-#define MULTIPLEX_RATIO 0xA8
-#define COM_SCAN_INC 0xC0
-#define COM_SCAN_DEC 0xC8
-#define DISPLAY_OFFSET 0xD3
-#define COM_PINS 0xDA
-#define COM_PINS_SEQ 0x02
-#define COM_PINS_ALT 0x12
-#define COM_PINS_SEQ_LR 0x22
-#define COM_PINS_ALT_LR 0x32
-
-// Timing & Driving Commands
-#define DISPLAY_CLOCK 0xD5
-#define PRE_CHARGE_PERIOD 0xD9
-#define VCOM_DETECT 0xDB
-
-// Advance Graphic Commands
-#define FADE_BLINK 0x23
-#define ENABLE_FADE 0x20
-#define ENABLE_BLINK 0x30
-
-// Charge Pump Commands
-#define CHARGE_PUMP 0x8D
-
-// Commands specific to the SH1107 chip
-#define SH1107_DISPLAY_START_LINE 0xDC
-#define SH1107_MEMORY_MODE_PAGE 0x20
-#define SH1107_MEMORY_MODE_VERTICAL 0x21
-
-// Misc defines
-#ifndef OLED_BLOCK_COUNT
-# define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8)
-#endif
-#ifndef OLED_BLOCK_SIZE
-# define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT)
-#endif
-
-#define OLED_ALL_BLOCKS_MASK (((((OLED_BLOCK_TYPE)1 << (OLED_BLOCK_COUNT - 1)) - 1) << 1) | 1)
-
-#ifndef OLED_COM_PIN_COUNT
-# define OLED_COM_PIN_COUNT 128
-#endif
-
-#ifndef OLED_COM_PIN_OFFSET
-# define OLED_COM_PIN_OFFSET 0
-#endif
-
-// i2c defines
-#define I2C_CMD 0x00
-#define I2C_DATA 0x40
-#if defined(__AVR__)
-# define I2C_TRANSMIT_P(data) i2c_transmit_P((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT)
-#else // defined(__AVR__)
-# define I2C_TRANSMIT_P(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT)
-#endif // defined(__AVR__)
-#define I2C_TRANSMIT(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT)
-#define I2C_WRITE_REG(mode, data, size) i2c_writeReg((OLED_DISPLAY_ADDRESS << 1), mode, data, size, OLED_I2C_TIMEOUT)
-
-#define HAS_FLAGS(bits, flags) ((bits & flags) == flags)
-
-// Display buffer's is the same as the OLED memory layout
-// this is so we don't end up with rounding errors with
-// parts of the display unusable or don't get cleared correctly
-// and also allows for drawing & inverting
-uint8_t oled_buffer[OLED_MATRIX_SIZE];
-uint8_t *oled_cursor;
-OLED_BLOCK_TYPE oled_dirty = 0;
-bool oled_initialized = false;
-bool oled_active = false;
-bool oled_scrolling = false;
-bool oled_inverted = false;
-uint8_t oled_brightness = OLED_BRIGHTNESS;
-oled_rotation_t oled_rotation = 0;
-uint8_t oled_rotation_width = 0;
-uint8_t oled_scroll_speed = 0; // this holds the speed after being remapped to ssd1306 internal values
-uint8_t oled_scroll_start = 0;
-uint8_t oled_scroll_end = 7;
-#if OLED_TIMEOUT > 0
-uint32_t oled_timeout;
-#endif
-#if OLED_SCROLL_TIMEOUT > 0
-uint32_t oled_scroll_timeout;
-#endif
-#if OLED_UPDATE_INTERVAL > 0
-uint16_t oled_update_timeout;
-#endif
-
-// Internal variables to reduce math instructions
-
-#if defined(__AVR__)
-// identical to i2c_transmit, but for PROGMEM since all initialization is in PROGMEM arrays currently
-// probably should move this into i2c_master...
-static i2c_status_t i2c_transmit_P(uint8_t address, const uint8_t *data, uint16_t length, uint16_t timeout) {
- i2c_status_t status = i2c_start(address | I2C_WRITE, timeout);
-
- for (uint16_t i = 0; i < length && status >= 0; i++) {
- status = i2c_write(pgm_read_byte((const char *)data++), timeout);
- if (status) break;
- }
-
- i2c_stop();
-
- return status;
-}
-#endif
-
-// Flips the rendering bits for a character at the current cursor position
-static void InvertCharacter(uint8_t *cursor) {
- const uint8_t *end = cursor + OLED_FONT_WIDTH;
- while (cursor < end) {
- *cursor = ~(*cursor);
- cursor++;
- }
-}
-
-bool oled_init(oled_rotation_t rotation) {
-#if defined(USE_I2C) && defined(SPLIT_KEYBOARD)
- if (!is_keyboard_master()) {
- return true;
- }
-#endif
-
- oled_rotation = oled_init_user(oled_init_kb(rotation));
- if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
- oled_rotation_width = OLED_DISPLAY_WIDTH;
- } else {
- oled_rotation_width = OLED_DISPLAY_HEIGHT;
- }
- i2c_init();
-
- static const uint8_t PROGMEM display_setup1[] = {
- I2C_CMD,
- DISPLAY_OFF,
- DISPLAY_CLOCK,
- 0x80,
- MULTIPLEX_RATIO,
- OLED_DISPLAY_WIDTH - 1,
- SH1107_DISPLAY_START_LINE,
- 0x00,
- CHARGE_PUMP,
- 0x14,
- SH1107_MEMORY_MODE_PAGE,
- };
- if (I2C_TRANSMIT_P(display_setup1) != I2C_STATUS_SUCCESS) {
- print("oled_init cmd set 1 failed\n");
- return false;
- }
-
- if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_180)) {
- static const uint8_t PROGMEM display_normal[] = {
- I2C_CMD,
- SEGMENT_REMAP_INV,
- COM_SCAN_DEC,
- DISPLAY_OFFSET,
- OLED_COM_PIN_OFFSET,
- };
- if (I2C_TRANSMIT_P(display_normal) != I2C_STATUS_SUCCESS) {
- print("oled_init cmd normal rotation failed\n");
- return false;
- }
- } else {
- static const uint8_t PROGMEM display_flipped[] = {
- I2C_CMD,
- SEGMENT_REMAP,
- COM_SCAN_INC,
- DISPLAY_OFFSET,
- (OLED_COM_PIN_COUNT - OLED_COM_PIN_OFFSET) % OLED_COM_PIN_COUNT,
- };
- if (I2C_TRANSMIT_P(display_flipped) != I2C_STATUS_SUCCESS) {
- print("display_flipped failed\n");
- return false;
- }
- }
-
- static const uint8_t PROGMEM display_setup2[] = {
- I2C_CMD, COM_PINS,
- OLED_COM_PINS,
- CONTRAST, OLED_BRIGHTNESS,
- PRE_CHARGE_PERIOD, 0x22,
- VCOM_DETECT, 0x35,
- DISPLAY_ALL_ON_RESUME,
- NORMAL_DISPLAY,
- DEACTIVATE_SCROLL,
- DISPLAY_ON
- };
- if (I2C_TRANSMIT_P(display_setup2) != I2C_STATUS_SUCCESS) {
- print("display_setup2 failed\n");
- return false;
- }
-
-#if OLED_TIMEOUT > 0
- oled_timeout = timer_read32() + OLED_TIMEOUT;
-#endif
-#if OLED_SCROLL_TIMEOUT > 0
- oled_scroll_timeout = timer_read32() + OLED_SCROLL_TIMEOUT;
-#endif
-
- oled_clear();
- oled_initialized = true;
- oled_active = true;
- oled_scrolling = false;
- return true;
-}
-
-__attribute__((weak)) oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
- return rotation;
-}
-__attribute__((weak)) oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return rotation;
-}
-
-void oled_clear(void) {
- memset(oled_buffer, 0, sizeof(oled_buffer));
- oled_cursor = &oled_buffer[0];
- oled_dirty = OLED_ALL_BLOCKS_MASK;
-}
-
-static void calc_bounds(uint8_t update_start, uint8_t *cmd_array) {
- // Calculate commands to set memory addressing bounds.
- uint8_t start_page = OLED_BLOCK_SIZE * update_start / OLED_DISPLAY_WIDTH;
- uint8_t start_column = OLED_BLOCK_SIZE * update_start % OLED_DISPLAY_WIDTH;
- // Commands for Page Addressing Mode. Sets starting page and column; has no end bound.
- // Column value must be split into high and low nybble and sent as two commands.
- cmd_array[0] = PAM_PAGE_ADDR | start_page;
- cmd_array[1] = PAM_SETCOLUMN_LSB | ((OLED_COLUMN_OFFSET + start_column) & 0x0f);
- cmd_array[2] = PAM_SETCOLUMN_MSB | ((OLED_COLUMN_OFFSET + start_column) >> 4 & 0x0f);
-}
-
-static void calc_bounds_90(uint8_t update_start, uint8_t *cmd_array) {
- // Block numbering starts from the bottom left corner, going up and then to
- // the right. The controller needs the page and column numbers for the top
- // left and bottom right corners of that block.
-
- // Total number of pages across the screen height.
- const uint8_t height_in_pages = OLED_DISPLAY_HEIGHT / 8;
-
- // Difference of starting page numbers for adjacent blocks; may be 0 if
- // blocks are large enough to occupy one or more whole 8px columns.
- const uint8_t page_inc_per_block = OLED_BLOCK_SIZE % OLED_DISPLAY_HEIGHT / 8;
-
- // Top page number for a block which is at the bottom edge of the screen.
- const uint8_t bottom_block_top_page = (height_in_pages - page_inc_per_block) % height_in_pages;
-
- // Only the Page Addressing Mode is supported
- uint8_t start_page = bottom_block_top_page - (OLED_BLOCK_SIZE * update_start % OLED_DISPLAY_HEIGHT / 8);
- uint8_t start_column = OLED_BLOCK_SIZE * update_start / OLED_DISPLAY_HEIGHT * 8;
- cmd_array[0] = PAM_PAGE_ADDR | start_page;
- cmd_array[1] = PAM_SETCOLUMN_LSB | ((OLED_COLUMN_OFFSET + start_column) & 0x0f);
- cmd_array[2] = PAM_SETCOLUMN_MSB | ((OLED_COLUMN_OFFSET + start_column) >> 4 & 0x0f);
-}
-
-uint8_t crot(uint8_t a, int8_t n) {
- const uint8_t mask = 0x7;
- n &= mask;
- return a << n | a >> (-n & mask);
-}
-
-static void rotate_90(const uint8_t *src, uint8_t *dest) {
- for (uint8_t i = 0, shift = 7; i < 8; ++i, --shift) {
- uint8_t selector = (1 << i);
- for (uint8_t j = 0; j < 8; ++j) {
- dest[i] |= crot(src[j] & selector, shift - (int8_t)j);
- }
- }
-}
-
-void oled_render(void) {
- // Do we have work to do?
- oled_dirty &= OLED_ALL_BLOCKS_MASK;
- if (!oled_dirty || !oled_initialized || oled_scrolling) {
- return;
- }
-
- // Turn on display if it is off
- oled_on();
-
- uint8_t update_start = 0;
- uint8_t num_processed = 0;
- while (oled_dirty && num_processed++ < OLED_UPDATE_PROCESS_LIMIT) { // render all dirty blocks (up to the configured limit)
- // Find next dirty block
- while (!(oled_dirty & ((OLED_BLOCK_TYPE)1 << update_start))) {
- ++update_start;
- }
-
- // Set column & page position
- static uint8_t display_start[] = {I2C_CMD, PAM_PAGE_ADDR, PAM_SETCOLUMN_LSB, PAM_SETCOLUMN_MSB};
- if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
- calc_bounds(update_start, &display_start[1]); // Offset from I2C_CMD byte at the start
- } else {
- calc_bounds_90(update_start, &display_start[1]); // Offset from I2C_CMD byte at the start
- }
-
- // Send column & page position
- if (I2C_TRANSMIT(display_start) != I2C_STATUS_SUCCESS) {
- print("oled_render offset command failed\n");
- return;
- }
-
- if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
- // Send render data chunk as is
- if (I2C_WRITE_REG(I2C_DATA, &oled_buffer[OLED_BLOCK_SIZE * update_start], OLED_BLOCK_SIZE) != I2C_STATUS_SUCCESS) {
- print("oled_render data failed\n");
- return;
- }
- } else {
- // Rotate the render chunks
- const static uint8_t source_map[] = OLED_SOURCE_MAP;
- const static uint8_t target_map[] = OLED_TARGET_MAP;
-
- static uint8_t temp_buffer[OLED_BLOCK_SIZE];
- memset(temp_buffer, 0, sizeof(temp_buffer));
- for (uint8_t i = 0; i < sizeof(source_map); ++i) {
- rotate_90(&oled_buffer[OLED_BLOCK_SIZE * update_start + source_map[i]], &temp_buffer[target_map[i]]);
- }
-
- // For SH1106 or SH1107 the data chunk must be split into separate pieces for each page
- const uint8_t columns_in_block = (OLED_BLOCK_SIZE + OLED_DISPLAY_HEIGHT - 1) / OLED_DISPLAY_HEIGHT * 8;
- const uint8_t num_pages = OLED_BLOCK_SIZE / columns_in_block;
- for (uint8_t i = 0; i < num_pages; ++i) {
- // Send column & page position for all pages except the first one
- if (i > 0) {
- display_start[1]++;
- if (I2C_TRANSMIT(display_start) != I2C_STATUS_SUCCESS) {
- print("oled_render offset command failed\n");
- return;
- }
- }
- // Send data for the page
- if (I2C_WRITE_REG(I2C_DATA, &temp_buffer[columns_in_block * i], columns_in_block) != I2C_STATUS_SUCCESS) {
- print("oled_render90 data failed\n");
- return;
- }
- }
- }
-
- // Clear dirty flag
- oled_dirty &= ~((OLED_BLOCK_TYPE)1 << update_start);
- }
-}
-
-void oled_set_cursor(uint8_t col, uint8_t line) {
- uint16_t index = line * oled_rotation_width + col * OLED_FONT_WIDTH;
-
- // Out of bounds?
- if (index >= OLED_MATRIX_SIZE) {
- index = 0;
- }
-
- oled_cursor = &oled_buffer[index];
-}
-
-void oled_advance_page(bool clearPageRemainder) {
- uint16_t index = oled_cursor - &oled_buffer[0];
- uint8_t remaining = oled_rotation_width - (index % oled_rotation_width);
-
- if (clearPageRemainder) {
- // Remaining Char count
- remaining = remaining / OLED_FONT_WIDTH;
-
- // Write empty character until next line
- while (remaining--)
- oled_write_char(' ', false);
- } else {
- // Next page index out of bounds?
- if (index + remaining >= OLED_MATRIX_SIZE) {
- index = 0;
- remaining = 0;
- }
-
- oled_cursor = &oled_buffer[index + remaining];
- }
-}
-
-void oled_advance_char(void) {
- uint16_t nextIndex = oled_cursor - &oled_buffer[0] + OLED_FONT_WIDTH;
- uint8_t remainingSpace = oled_rotation_width - (nextIndex % oled_rotation_width);
-
- // Do we have enough space on the current line for the next character
- if (remainingSpace < OLED_FONT_WIDTH) {
- nextIndex += remainingSpace;
- }
-
- // Did we go out of bounds
- if (nextIndex >= OLED_MATRIX_SIZE) {
- nextIndex = 0;
- }
-
- // Update cursor position
- oled_cursor = &oled_buffer[nextIndex];
-}
-
-// Main handler that writes character data to the display buffer
-void oled_write_char(const char data, bool invert) {
- // Advance to the next line if newline
- if (data == '\n') {
- // Old source wrote ' ' until end of line...
- oled_advance_page(true);
- return;
- }
-
- if (data == '\r') {
- oled_advance_page(false);
- return;
- }
-
- // copy the current render buffer to check for dirty after
- static uint8_t oled_temp_buffer[OLED_FONT_WIDTH];
- memcpy(&oled_temp_buffer, oled_cursor, OLED_FONT_WIDTH);
-
- _Static_assert(sizeof(font) >= ((OLED_FONT_END + 1 - OLED_FONT_START) * OLED_FONT_WIDTH), "OLED_FONT_END references outside array");
-
- // set the reder buffer data
- uint8_t cast_data = (uint8_t)data; // font based on unsigned type for index
- if (cast_data < OLED_FONT_START || cast_data > OLED_FONT_END) {
- memset(oled_cursor, 0x00, OLED_FONT_WIDTH);
- } else {
- const uint8_t *glyph = &font[(cast_data - OLED_FONT_START) * OLED_FONT_WIDTH];
- memcpy_P(oled_cursor, glyph, OLED_FONT_WIDTH);
- }
-
- // Invert if needed
- if (invert) {
- InvertCharacter(oled_cursor);
- }
-
- // Dirty check
- if (memcmp(&oled_temp_buffer, oled_cursor, OLED_FONT_WIDTH)) {
- uint16_t index = oled_cursor - &oled_buffer[0];
- oled_dirty |= ((OLED_BLOCK_TYPE)1 << (index / OLED_BLOCK_SIZE));
- // Edgecase check if the written data spans the 2 chunks
- oled_dirty |= ((OLED_BLOCK_TYPE)1 << ((index + OLED_FONT_WIDTH - 1) / OLED_BLOCK_SIZE));
- }
-
- // Finally move to the next char
- oled_advance_char();
-}
-
-void oled_write(const char *data, bool invert) {
- const char *end = data + strlen(data);
- while (data < end) {
- oled_write_char(*data, invert);
- data++;
- }
-}
-
-void oled_write_ln(const char *data, bool invert) {
- oled_write(data, invert);
- oled_advance_page(true);
-}
-
-void oled_pan(bool left) {
- uint16_t i = 0;
- for (uint16_t y = 0; y < OLED_DISPLAY_HEIGHT / 8; y++) {
- if (left) {
- for (uint16_t x = 0; x < OLED_DISPLAY_WIDTH - 1; x++) {
- i = y * OLED_DISPLAY_WIDTH + x;
- oled_buffer[i] = oled_buffer[i + 1];
- }
- } else {
- for (uint16_t x = OLED_DISPLAY_WIDTH - 1; x > 0; x--) {
- i = y * OLED_DISPLAY_WIDTH + x;
- oled_buffer[i] = oled_buffer[i - 1];
- }
- }
- }
- oled_dirty = OLED_ALL_BLOCKS_MASK;
-}
-
-void oled_pan_section(bool left, uint16_t y_start, uint16_t y_end, uint16_t x_start, uint16_t x_end) {
- uint16_t i = 0;
- for (uint16_t y = y_start; y < y_end; y++) {
- if (left) {
- for (uint16_t x = x_start; x < x_end - 1; x++) {
- i = y * OLED_DISPLAY_WIDTH + x;
- oled_buffer[i] = oled_buffer[i + 1];
- oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
- }
- } else {
- for (uint16_t x = x_end - 1; x > 0; x--) {
- i = y * OLED_DISPLAY_WIDTH + x;
- oled_buffer[i] = oled_buffer[i - 1];
- oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
- }
- }
- }
-}
-
-oled_buffer_reader_t oled_read_raw(uint16_t start_index) {
- if (start_index > OLED_MATRIX_SIZE) start_index = OLED_MATRIX_SIZE;
- oled_buffer_reader_t ret_reader;
- ret_reader.current_element = &oled_buffer[start_index];
- ret_reader.remaining_element_count = OLED_MATRIX_SIZE - start_index;
- return ret_reader;
-}
-
-void oled_write_raw_byte(const char data, uint16_t index) {
- if (index > OLED_MATRIX_SIZE) index = OLED_MATRIX_SIZE;
- if (oled_buffer[index] == data) return;
- oled_buffer[index] = data;
- oled_dirty |= ((OLED_BLOCK_TYPE)1 << (index / OLED_BLOCK_SIZE));
-}
-
-void oled_write_raw(const char *data, uint16_t size) {
- uint16_t cursor_start_index = oled_cursor - &oled_buffer[0];
- if ((size + cursor_start_index) > OLED_MATRIX_SIZE) size = OLED_MATRIX_SIZE - cursor_start_index;
- for (uint16_t i = cursor_start_index; i < cursor_start_index + size; i++) {
- uint8_t c = *data++;
- if (oled_buffer[i] == c) continue;
- oled_buffer[i] = c;
- oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
- }
-}
-
-void oled_write_pixel(uint8_t x, uint8_t y, bool on) {
- if (x >= oled_rotation_width) {
- return;
- }
- uint16_t index = x + (y / 8) * oled_rotation_width;
- if (index >= OLED_MATRIX_SIZE) {
- return;
- }
- uint8_t data = oled_buffer[index];
- if (on) {
- data |= (1 << (y % 8));
- } else {
- data &= ~(1 << (y % 8));
- }
- if (oled_buffer[index] != data) {
- oled_buffer[index] = data;
- oled_dirty |= ((OLED_BLOCK_TYPE)1 << (index / OLED_BLOCK_SIZE));
- }
-}
-
-#if defined(__AVR__)
-void oled_write_P(const char *data, bool invert) {
- uint8_t c = pgm_read_byte(data);
- while (c != 0) {
- oled_write_char(c, invert);
- c = pgm_read_byte(++data);
- }
-}
-
-void oled_write_ln_P(const char *data, bool invert) {
- oled_write_P(data, invert);
- oled_advance_page(true);
-}
-
-void oled_write_raw_P(const char *data, uint16_t size) {
- uint16_t cursor_start_index = oled_cursor - &oled_buffer[0];
- if ((size + cursor_start_index) > OLED_MATRIX_SIZE) size = OLED_MATRIX_SIZE - cursor_start_index;
- for (uint16_t i = cursor_start_index; i < cursor_start_index + size; i++) {
- uint8_t c = pgm_read_byte(data++);
- if (oled_buffer[i] == c) continue;
- oled_buffer[i] = c;
- oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
- }
-}
-#endif // defined(__AVR__)
-
-bool oled_on(void) {
- if (!oled_initialized) {
- return oled_active;
- }
-
-#if OLED_TIMEOUT > 0
- oled_timeout = timer_read32() + OLED_TIMEOUT;
-#endif
-
- static const uint8_t PROGMEM display_on[] =
-#ifdef OLED_FADE_OUT
- {I2C_CMD, FADE_BLINK, 0x00};
-#else
- {I2C_CMD, DISPLAY_ON};
-#endif
-
- if (!oled_active) {
- if (I2C_TRANSMIT_P(display_on) != I2C_STATUS_SUCCESS) {
- print("oled_on cmd failed\n");
- return oled_active;
- }
- oled_active = true;
- }
- return oled_active;
-}
-
-bool oled_off(void) {
- if (!oled_initialized) {
- return !oled_active;
- }
-
- static const uint8_t PROGMEM display_off[] =
-#ifdef OLED_FADE_OUT
- {I2C_CMD, FADE_BLINK, ENABLE_FADE | OLED_FADE_OUT_INTERVAL};
-#else
- {I2C_CMD, DISPLAY_OFF};
-#endif
-
- if (oled_active) {
- if (I2C_TRANSMIT_P(display_off) != I2C_STATUS_SUCCESS) {
- print("oled_off cmd failed\n");
- return oled_active;
- }
- oled_active = false;
- }
- return !oled_active;
-}
-
-bool is_oled_on(void) {
- return oled_active;
-}
-
-uint8_t oled_set_brightness(uint8_t level) {
- if (!oled_initialized) {
- return oled_brightness;
- }
-
- uint8_t set_contrast[] = {I2C_CMD, CONTRAST, level};
- if (oled_brightness != level) {
- if (I2C_TRANSMIT(set_contrast) != I2C_STATUS_SUCCESS) {
- print("set_brightness cmd failed\n");
- return oled_brightness;
- }
- oled_brightness = level;
- }
- return oled_brightness;
-}
-
-uint8_t oled_get_brightness(void) {
- return oled_brightness;
-}
-
-// Set the specific 8 lines rows of the screen to scroll.
-// 0 is the default for start, and 7 for end, which is the entire
-// height of the screen. For 128x32 screens, rows 4-7 are not used.
-void oled_scroll_set_area(uint8_t start_line, uint8_t end_line) {
- oled_scroll_start = start_line;
- oled_scroll_end = end_line;
-}
-
-void oled_scroll_set_speed(uint8_t speed) {
- // Sets the speed for scrolling... does not take effect
- // until scrolling is either started or restarted
- // the ssd1306 supports 8 speeds
- // FrameRate2 speed = 7
- // FrameRate3 speed = 4
- // FrameRate4 speed = 5
- // FrameRate5 speed = 0
- // FrameRate25 speed = 6
- // FrameRate64 speed = 1
- // FrameRate128 speed = 2
- // FrameRate256 speed = 3
- // for ease of use these are remaped here to be in order
- static const uint8_t scroll_remap[8] = {7, 4, 5, 0, 6, 1, 2, 3};
- oled_scroll_speed = scroll_remap[speed];
-}
-
-bool oled_scroll_right(void) {
- if (!oled_initialized) {
- return oled_scrolling;
- }
-
- // Dont enable scrolling if we need to update the display
- // This prevents scrolling of bad data from starting the scroll too early after init
- if (!oled_dirty && !oled_scrolling) {
- uint8_t display_scroll_right[] = {I2C_CMD, SCROLL_RIGHT, 0x00, oled_scroll_start, oled_scroll_speed, oled_scroll_end, 0x00, 0xFF, ACTIVATE_SCROLL};
- if (I2C_TRANSMIT(display_scroll_right) != I2C_STATUS_SUCCESS) {
- print("oled_scroll_right cmd failed\n");
- return oled_scrolling;
- }
- oled_scrolling = true;
- }
- return oled_scrolling;
-}
-
-bool oled_scroll_left(void) {
- if (!oled_initialized) {
- return oled_scrolling;
- }
-
- // Dont enable scrolling if we need to update the display
- // This prevents scrolling of bad data from starting the scroll too early after init
- if (!oled_dirty && !oled_scrolling) {
- uint8_t display_scroll_left[] = {I2C_CMD, SCROLL_LEFT, 0x00, oled_scroll_start, oled_scroll_speed, oled_scroll_end, 0x00, 0xFF, ACTIVATE_SCROLL};
- if (I2C_TRANSMIT(display_scroll_left) != I2C_STATUS_SUCCESS) {
- print("oled_scroll_left cmd failed\n");
- return oled_scrolling;
- }
- oled_scrolling = true;
- }
- return oled_scrolling;
-}
-
-bool oled_scroll_off(void) {
- if (!oled_initialized) {
- return !oled_scrolling;
- }
-
- if (oled_scrolling) {
- static const uint8_t PROGMEM display_scroll_off[] = {I2C_CMD, DEACTIVATE_SCROLL};
- if (I2C_TRANSMIT_P(display_scroll_off) != I2C_STATUS_SUCCESS) {
- print("oled_scroll_off cmd failed\n");
- return oled_scrolling;
- }
- oled_scrolling = false;
- oled_dirty = OLED_ALL_BLOCKS_MASK;
- }
- return !oled_scrolling;
-}
-
-bool is_oled_scrolling(void) {
- return oled_scrolling;
-}
-
-bool oled_invert(bool invert) {
- if (!oled_initialized) {
- return oled_inverted;
- }
-
- if (invert && !oled_inverted) {
- static const uint8_t PROGMEM display_inverted[] = {I2C_CMD, INVERT_DISPLAY};
- if (I2C_TRANSMIT_P(display_inverted) != I2C_STATUS_SUCCESS) {
- print("oled_invert cmd failed\n");
- return oled_inverted;
- }
- oled_inverted = true;
- } else if (!invert && oled_inverted) {
- static const uint8_t PROGMEM display_normal[] = {I2C_CMD, NORMAL_DISPLAY};
- if (I2C_TRANSMIT_P(display_normal) != I2C_STATUS_SUCCESS) {
- print("oled_invert cmd failed\n");
- return oled_inverted;
- }
- oled_inverted = false;
- }
-
- return oled_inverted;
-}
-
-uint8_t oled_max_chars(void) {
- if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
- return OLED_DISPLAY_WIDTH / OLED_FONT_WIDTH;
- }
- return OLED_DISPLAY_HEIGHT / OLED_FONT_WIDTH;
-}
-
-uint8_t oled_max_lines(void) {
- if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) {
- return OLED_DISPLAY_HEIGHT / OLED_FONT_HEIGHT;
- }
- return OLED_DISPLAY_WIDTH / OLED_FONT_HEIGHT;
-}
-
-void oled_task(void) {
- if (!oled_initialized) {
- return;
- }
-
-#if OLED_UPDATE_INTERVAL > 0
- if (timer_elapsed(oled_update_timeout) >= OLED_UPDATE_INTERVAL) {
- oled_update_timeout = timer_read();
- oled_set_cursor(0, 0);
- oled_task_kb();
- }
-#else
- oled_set_cursor(0, 0);
- oled_task_kbr();
-#endif
-
-#if OLED_SCROLL_TIMEOUT > 0
- if (oled_dirty && oled_scrolling) {
- oled_scroll_timeout = timer_read32() + OLED_SCROLL_TIMEOUT;
- oled_scroll_off();
- }
-#endif
-
- // Smart render system, no need to check for dirty
- oled_render();
-
- // Display timeout check
-#if OLED_TIMEOUT > 0
- if (oled_active && timer_expired32(timer_read32(), oled_timeout)) {
- oled_off();
- }
-#endif
-
-#if OLED_SCROLL_TIMEOUT > 0
- if (!oled_scrolling && timer_expired32(timer_read32(), oled_scroll_timeout)) {
-# ifdef OLED_SCROLL_TIMEOUT_RIGHT
- oled_scroll_right();
-# else
- oled_scroll_left();
-# endif
- }
-#endif
-}
-
-__attribute__((weak)) bool oled_task_kb(void) {
- return oled_task_user();
-}
-__attribute__((weak)) bool oled_task_user(void) {
- return true;
-}
diff --git a/users/drashna/pointing/pointing.c b/users/drashna/pointing/pointing.c
index 18dad0da816..82cc5a3aa6f 100644
--- a/users/drashna/pointing/pointing.c
+++ b/users/drashna/pointing/pointing.c
@@ -35,12 +35,11 @@ report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
mouse_report.y = 0;
if (x != 0 && y != 0 && (timer_elapsed(mouse_debounce_timer) > TAP_CHECK)) {
-#ifdef OLED_ENABLE
- oled_timer_reset();
-#endif
if (enable_acceleration) {
- x = (mouse_xy_report_t)(x > 0 ? pow(4, x) / 2 + x : -pow(4, abs(x)) / 2 + x);
- y = (mouse_xy_report_t)(y > 0 ? pow(5, y) / 2 + y : -pow(5, abs(y)) / 2 + y);
+ float magnitude = sqrtf( mouse_report.x * mouse_report.x + mouse_report.y * mouse_report.y );
+ float adjusted_magnitude = powf(magnitude, 1.2f);
+ x = (mouse_xy_report_t)(x * adjusted_magnitude);
+ y = (mouse_xy_report_t)(y * adjusted_magnitude);
// x = (mouse_xy_report_t)(x > 0 ? x * x / 16 + x : -x * x / 16 + x);
// y = (mouse_xy_report_t)(y > 0 ? y * y / 16 + y : -y * y / 16 + y);
}
@@ -56,6 +55,12 @@ bool process_record_pointing(uint16_t keycode, keyrecord_t* record) {
case KC_ACCEL:
enable_acceleration = record->event.pressed;
break;
+#if defined(POINTING_DEVICE_MOUSE_JIGGLER_ENABLE)
+ case PD_JIGGLER:
+ if (record->event.pressed) {
+ pointing_device_mouse_jiggler_toggle();
+ }
+#endif
default:
mouse_debounce_timer = timer_read();
break;
@@ -73,6 +78,24 @@ layer_state_t layer_state_set_pointing(layer_state_t state) {
return state;
}
+#if defined(POINTING_DEVICE_MOUSE_JIGGLER_ENABLE)
+static uint16_t mouse_jiggler_timer;
+
+bool has_mouse_report_changed(report_mouse_t* new_report, report_mouse_t* old_report) {
+ // Only report every 5 seconds.
+ if (userspace_config.mouse_jiggler && timer_elapsed(mouse_jiggler_timer) > 5000) {
+ mouse_jiggler_timer = timer_read();
+ return true;
+ }
+ return memcmp(new_report, old_report, sizeof(report_mouse_t));
+}
+
+void pointing_device_mouse_jiggler_toggle(void) {
+ mouse_jiggler_timer = timer_read();
+ userspace_config.mouse_jiggler = !userspace_config.mouse_jiggler;
+}
+
+#endif
#if defined(POINTING_DEVICE_AUTO_MOUSE_ENABLE)
__attribute__((weak)) bool is_mouse_record_keymap(uint16_t keycode, keyrecord_t *record) { return false; }
diff --git a/users/drashna/pointing/pointing.h b/users/drashna/pointing/pointing.h
index 28d8610148f..c97ce5b2dbb 100644
--- a/users/drashna/pointing/pointing.h
+++ b/users/drashna/pointing/pointing.h
@@ -8,3 +8,4 @@ report_mouse_t pointing_device_task_keymap(report_mouse_t mouse_report);
void matrix_scan_pointing(void);
bool process_record_pointing(uint16_t keycode, keyrecord_t* record);
layer_state_t layer_state_set_pointing(layer_state_t state);
+void pointing_device_mouse_jiggler_toggle(void);
diff --git a/users/drashna/post_config.h b/users/drashna/post_config.h
index 85ce0e31081..5a2dfb66371 100644
--- a/users/drashna/post_config.h
+++ b/users/drashna/post_config.h
@@ -121,7 +121,7 @@
# ifndef MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS
# define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8
# endif
-#endif // MOUSEKEY_ENABLE
+#endif // MOUSEKEY_ENABLE
#define MOUSE_EXTENDED_REPORT
@@ -134,7 +134,7 @@
#endif
#if defined(SPLIT_KEYBOARD) && defined(PROTOCOL_CHIBIOS) && !defined(USB_SUSPEND_WAKEUP_DELAY)
-# define USB_SUSPEND_WAKEUP_DELAY 200
+# define USB_SUSPEND_WAKEUP_DELAY 500
#endif
#if defined(XAP_ENABLE) && !defined(__AVR__)
diff --git a/users/drashna/rgb/rgb_matrix_config.h b/users/drashna/rgb/rgb_matrix_config.h
index 86f238f3923..bc2c04d981b 100644
--- a/users/drashna/rgb/rgb_matrix_config.h
+++ b/users/drashna/rgb/rgb_matrix_config.h
@@ -6,7 +6,7 @@
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-// # define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
#undef ENABLE_RGB_MATRIX_ALPHAS_MODS
#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
diff --git a/users/drashna/rgb/rgb_matrix_stuff.c b/users/drashna/rgb/rgb_matrix_stuff.c
index eff9191eb74..588e51daf92 100644
--- a/users/drashna/rgb/rgb_matrix_stuff.c
+++ b/users/drashna/rgb/rgb_matrix_stuff.c
@@ -74,7 +74,7 @@ bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
userspace_config.rgb_matrix_idle_anim ^= 1;
dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
- eeconfig_update_user(userspace_config.raw);
+ eeconfig_update_user_config(&userspace_config.raw);
if (userspace_config.rgb_matrix_idle_anim) {
rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
}
@@ -146,3 +146,45 @@ __attribute__((weak)) bool rgb_matrix_indicators_keymap(void) {
bool rgb_matrix_indicators_user(void) {
return rgb_matrix_indicators_keymap();
}
+
+
+//----------------------------------------------------------
+// RGB Matrix naming
+#include
+
+#if defined(RGB_MATRIX_EFFECT)
+# undef RGB_MATRIX_EFFECT
+#endif // defined(RGB_MATRIX_EFFECT)
+
+#define RGB_MATRIX_EFFECT(x) RGB_MATRIX_EFFECT_##x,
+enum {
+ RGB_MATRIX_EFFECT_NONE,
+#include "rgb_matrix_effects.inc"
+#undef RGB_MATRIX_EFFECT
+#ifdef RGB_MATRIX_CUSTOM_KB
+# include "rgb_matrix_kb.inc"
+#endif
+#ifdef RGB_MATRIX_CUSTOM_USER
+# include "rgb_matrix_user.inc"
+#endif
+};
+
+#define RGB_MATRIX_EFFECT(x) \
+ case RGB_MATRIX_EFFECT_##x: \
+ return #x;
+const char* rgb_matrix_name(uint8_t effect) {
+ switch (effect) {
+ case RGB_MATRIX_EFFECT_NONE:
+ return "NONE";
+#include "rgb_matrix_effects.inc"
+#undef RGB_MATRIX_EFFECT
+#ifdef RGB_MATRIX_CUSTOM_KB
+# include "rgb_matrix_kb.inc"
+#endif
+#ifdef RGB_MATRIX_CUSTOM_USER
+# include "rgb_matrix_user.inc"
+#endif
+ default:
+ return "UNKNOWN";
+ }
+}
diff --git a/users/drashna/rgb/rgb_matrix_stuff.h b/users/drashna/rgb/rgb_matrix_stuff.h
index 9559134c8cc..80770bf40f3 100644
--- a/users/drashna/rgb/rgb_matrix_stuff.h
+++ b/users/drashna/rgb/rgb_matrix_stuff.h
@@ -13,3 +13,5 @@ void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode
bool rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max);
bool rgb_matrix_indicators_keymap(void);
+
+const char* rgb_matrix_name(uint8_t effect);
diff --git a/users/drashna/rgb/rgb_stuff.c b/users/drashna/rgb/rgb_stuff.c
index c283e58d26d..cc85425aff2 100644
--- a/users/drashna/rgb/rgb_stuff.c
+++ b/users/drashna/rgb/rgb_stuff.c
@@ -11,6 +11,9 @@ void rgblight_sethsv_default_helper(uint8_t index) {
rgblight_sethsv_at(rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val(), index);
}
void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) {
+ if (val > RGBLIGHT_LIMIT_VAL) {
+ val = RGBLIGHT_LIMIT_VAL;
+ }
rgblight_sethsv_noeeprom(hue, sat, val);
// wait_us(175); // Add a slight delay between color and mode to ensure it's processed correctly
rgblight_mode_noeeprom(mode);
@@ -48,6 +51,15 @@ uint32_t rgb_startup_animation(uint32_t triger_time, void *cb_arg) {
}
#endif
+bool is_rgblight_startup_running(void) {
+#if defined(RGBLIGHT_STARTUP_ANIMATION)
+ return is_rgblight_startup && is_keyboard_master();
+#else
+ return false;
+#endif
+}
+
+
void keyboard_post_init_rgb_light(void) {
#if defined(RGBLIGHT_STARTUP_ANIMATION)
is_enabled = rgblight_is_enabled();
@@ -121,3 +133,33 @@ layer_state_t default_layer_state_set_rgb_light(layer_state_t state) {
}
return state;
}
+
+#define _RGBM_SINGLE_STATIC(sym) \
+ case RGBLIGHT_MODE_##sym: \
+ return #sym;
+#define _RGBM_SINGLE_DYNAMIC(sym) \
+ case RGBLIGHT_MODE_##sym: \
+ return #sym;
+#define _RGBM_MULTI_STATIC(sym) \
+ case RGBLIGHT_MODE_##sym: \
+ return #sym;
+#define _RGBM_MULTI_DYNAMIC(sym) \
+ case RGBLIGHT_MODE_##sym: \
+ return #sym;
+#define _RGBM_TMP_STATIC(sym, msym) \
+ case RGBLIGHT_MODE_##sym: \
+ return #msym;
+#define _RGBM_TMP_DYNAMIC(sym, msym) \
+ case RGBLIGHT_MODE_##sym: \
+ return #msym;
+
+
+const char* rgblight_name(uint8_t effect) {
+ switch (effect) {
+#include "rgblight_modes.h"
+ case 0:
+ return "Off";
+ default:
+ return "UNKNOWN";
+ }
+}
diff --git a/users/drashna/rgb/rgb_stuff.h b/users/drashna/rgb/rgb_stuff.h
index d720275b60b..f76c591e031 100644
--- a/users/drashna/rgb/rgb_stuff.h
+++ b/users/drashna/rgb/rgb_stuff.h
@@ -10,3 +10,6 @@ void matrix_scan_rgb_light(void);
layer_state_t layer_state_set_rgb_light(layer_state_t state);
layer_state_t default_layer_state_set_rgb_light(layer_state_t state);
void rgblight_sethsv_default_helper(uint8_t index);
+
+const char* rgblight_name(uint8_t effect);
+bool is_rgblight_startup_running(void);
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk
index 43186b024ae..6287d6e78c9 100644
--- a/users/drashna/rules.mk
+++ b/users/drashna/rules.mk
@@ -1,11 +1,21 @@
SRC += $(USER_PATH)/drashna.c \
$(USER_PATH)/callbacks.c \
$(USER_PATH)/keyrecords/process_records.c \
- $(USER_PATH)/keyrecords/tapping.c
+ $(USER_PATH)/keyrecords/tapping.c \
+ $(USER_PATH)/eeconfig_users.c
# TOP_SYMBOLS = yes
-ifneq ($(PLATFORM),CHIBIOS)
+DEBOUNCE_TYPE = asym_eager_defer_pk
+DEFERRED_EXEC_ENABLE = yes
+OS_DETECTION_ENABLE = yes
+
+ifeq ($(PLATFORM),CHIBIOS)
+ # cortex-m4 has DSP+FPU support, so use hack to enable it for lib8tion
+ ifeq ($(strip $(MCU)), cortex-m4)
+ OPT_DEFS += -DFASTLED_TEENSY3
+ endif
+else
ifneq ($(strip $(LTO_SUPPORTED)), no)
LTO_ENABLE = yes
endif
@@ -14,16 +24,7 @@ ifneq ($(PLATFORM),CHIBIOS)
endif
# DEBUG_MATRIX_SCAN_RATE_ENABLE = api
-ifneq ($(strip $(NO_SECRETS)), yes)
- ifneq ("$(wildcard $(USER_PATH)/../../../qmk_secrets/secrets.c)","")
- SRC += $(USER_PATH)/../../../qmk_secrets/secrets.c
- $(shell touch $(USER_PATH)/../../../qmk_secrets/secrets.c)
- SECURE_ENABLE = yes
- endif
- ifeq ($(strip $(NO_SECRETS)), lite)
- OPT_DEFS += -DNO_SECRETS
- endif
-endif
+-include $(USER_PATH)/../../../qmk_secrets/rules.mk
ifeq ($(strip $(MAKE_BOOTLOADER)), yes)
OPT_DEFS += -DMAKE_BOOTLOADER
@@ -67,7 +68,6 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
endif
ifeq ($(strip $(RGBLIGHT_STARTUP_ANIMATION)), yes)
OPT_DEFS += -DRGBLIGHT_STARTUP_ANIMATION
- DEFERRED_EXEC_ENABLE = yes
endif
endif
endif
@@ -92,23 +92,7 @@ ifeq ($(strip $(I2C_SCANNER_ENABLE)), yes)
CONSOLE_ENABLE := yes
endif
-CUSTOM_OLED_DRIVER ?= yes
-ifeq ($(strip $(OLED_ENABLE)), yes)
- ifeq ($(strip $(OLED_DRIVER)), custom)
- OPT_DEFS += -DOLED_ENABLE \
- -DOLED_DRIVER_SH1107
- SRC += $(USER_PATH)/oled/sh110x.c
- QUANTUM_LIB_SRC += i2c_master.c
- endif
- ifeq ($(strip $(CUSTOM_OLED_DRIVER)), yes)
- OPT_DEFS += -DCUSTOM_OLED_DRIVER
- SRC += $(USER_PATH)/oled/oled_stuff.c
- endif
- ifeq ($(strip $(OLED_DISPLAY_TEST)), yes)
- OPT_DEFS += -DOLED_DISPLAY_TEST
- endif
- DEFERRED_EXEC_ENABLE = yes
-endif
+-include $(USER_PATH)/oled/rules.mk
CUSTOM_POINTING_DEVICE ?= yes
ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
@@ -117,6 +101,10 @@ ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
OPT_DEFS += -DCUSTOM_POINTING_DEVICE
OPT_DEFS += -DPOINTING_DEVICE_AUTO_MOUSE_ENABLE
endif
+ POINTING_DEVICE_MOUSE_JIGGLER_ENABLE ?= yes
+ ifeq ($(strip $(POINTING_DEVICE_MOUSE_JIGGLER_ENABLE)), yes)
+ OPT_DEFS += -DPOINTING_DEVICE_MOUSE_JIGGLER_ENABLE
+ endif
endif
CUSTOM_SPLIT_TRANSPORT_SYNC ?= yes
@@ -128,10 +116,6 @@ ifeq ($(strip $(CUSTOM_SPLIT_TRANSPORT_SYNC)), yes)
endif
-ifeq ($(strip $(AUTOCORRECTION_ENABLE)), yes)
- AUTOCORRECT_ENABLE = yes
-endif
-
CUSTOM_BOOTMAGIC_ENABLE ?= yes
ifeq ($(strip $(CUSTOM_BOOTMAGIC_ENABLE)), yes)
ifeq ($(strip $(BOOTMAGIC_ENABLE)), yes)
@@ -139,7 +123,14 @@ ifeq ($(strip $(CUSTOM_BOOTMAGIC_ENABLE)), yes)
endif
endif
-OS_DETECTION_ENABLE ?= yes
-ifeq ($(strip $(OS_DETECTION_ENABLE)), yes)
- DEFERRED_EXEC_ENABLE = yes
+CUSTOM_DYNAMIC_MACROS_ENABLE ?= no
+ifeq ($(strip $(CUSTOM_DYNAMIC_MACROS_ENABLE)), yes)
+ SRC += $(USER_PATH)/keyrecords/dynamic_macros.c
+ OPT_DEFS += -DCUSTOM_DYNAMIC_MACROS_ENABLE
+endif
+
+ifeq ($(strip $(HARDWARE_DEBUG_ENABLE)), yes)
+ LTO_ENABLE := no
+ OPT := 0
+ OPT_DEFS += -g
endif
diff --git a/users/drashna/split/split_config.h b/users/drashna/split/split_config.h
index 17daa4f808d..fd8bf955158 100644
--- a/users/drashna/split/split_config.h
+++ b/users/drashna/split/split_config.h
@@ -9,6 +9,9 @@
#define SPLIT_MODS_ENABLE
#define SPLIT_WATCHDOG_ENABLE
#define SPLIT_WPM_ENABLE
+#define SPLIT_ACTIVITY_ENABLE
+#define SPLIT_DETECTED_OS_ENABLE
+#define SPLIT_HAPTIC_ENABLE
#ifdef SPLIT_OLED_ENABLE
# undef SPLIT_OLED_ENABLE
#endif
@@ -16,5 +19,8 @@
# define SELECT_SOFT_SERIAL_SPEED 1
#endif
#ifdef CUSTOM_SPLIT_TRANSPORT_SYNC
-# define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_STATE_SYNC, RPC_ID_USER_KEYMAP_SYNC, RPC_ID_USER_CONFIG_SYNC, RPC_ID_USER_PLACEHOLDER, RPC_ID_USER_KEYLOG_STR
+# define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_STATE_SYNC, RPC_ID_USER_KEYMAP_SYNC, RPC_ID_USER_CONFIG_SYNC, RPC_ID_USER_PLACEHOLDER, RPC_ID_USER_OLED_KEYLOG_STR
#endif
+
+#define CRC8_USE_TABLE
+#define CRC8_OPTIMIZE_SPEED
diff --git a/users/drashna/split/transport_sync.c b/users/drashna/split/transport_sync.c
index bd6f7c56882..d5a1241586d 100644
--- a/users/drashna/split/transport_sync.c
+++ b/users/drashna/split/transport_sync.c
@@ -15,9 +15,6 @@ extern unicode_config_t unicode_config;
extern audio_config_t audio_config;
extern bool delayed_tasks_run;
#endif
-#if defined(OLED_ENABLE) && !defined(SPLIT_OLED_ENABLE) && defined(CUSTOM_OLED_DRIVER)
-extern bool is_oled_enabled;
-#endif
#if defined(POINTING_DEVICE_ENABLE) && defined(KEYBOARD_handwired_tractyl_manuform)
extern bool tap_toggling;
#endif
@@ -26,7 +23,6 @@ extern bool swap_hands;
#endif
extern userspace_config_t userspace_config;
-extern bool host_driver_disabled;
uint16_t transport_keymap_config = 0;
uint32_t transport_userspace_config = 0, transport_user_state = 0;
@@ -52,8 +48,8 @@ void user_config_sync(uint8_t initiator2target_buffer_size, const void* initiato
#ifdef CUSTOM_OLED_DRIVER
# include "oled/oled_stuff.h"
void keylogger_string_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
- if (initiator2target_buffer_size == (OLED_KEYLOGGER_LENGTH)) {
- memcpy(&keylog_str, initiator2target_buffer, initiator2target_buffer_size);
+ if (initiator2target_buffer_size == (OLED_KEYLOGGER_LENGTH+1)) {
+ memcpy(&oled_keylog_str, initiator2target_buffer, initiator2target_buffer_size);
}
}
#endif
@@ -64,7 +60,7 @@ void keyboard_post_init_transport_sync(void) {
transaction_register_rpc(RPC_ID_USER_KEYMAP_SYNC, user_keymap_sync);
transaction_register_rpc(RPC_ID_USER_CONFIG_SYNC, user_config_sync);
#ifdef CUSTOM_OLED_DRIVER
- transaction_register_rpc(RPC_ID_USER_KEYLOG_STR, keylogger_string_sync);
+ transaction_register_rpc(RPC_ID_USER_OLED_KEYLOG_STR, keylogger_string_sync);
#endif
}
@@ -76,9 +72,6 @@ void user_transport_update(void) {
user_state.audio_enable = is_audio_on();
user_state.audio_clicky_enable = is_clicky_on();
#endif
-#if defined(OLED_ENABLE) && !defined(SPLIT_OLED_ENABLE) && defined(CUSTOM_OLED_DRIVER)
- user_state.is_oled_enabled = is_oled_enabled;
-#endif
#if defined(POINTING_DEVICE_ENABLE) && defined(POINTING_DEVICE_AUTO_MOUSE_ENABLE)
user_state.tap_toggling = get_auto_mouse_toggle();
#endif
@@ -89,7 +82,7 @@ void user_transport_update(void) {
#ifdef SWAP_HANDS_ENABLE
user_state.swap_hands = swap_hands;
#endif
- user_state.host_driver_disabled = host_driver_disabled;
+ user_state.host_driver_disabled = get_keyboard_lock();
transport_user_state = user_state.raw;
} else {
@@ -100,9 +93,6 @@ void user_transport_update(void) {
unicode_config.input_mode = user_state.unicode_mode;
unicode_typing_mode = user_state.unicode_typing_mode;
#endif
-#if defined(OLED_ENABLE) && !defined(SPLIT_OLED_ENABLE) && defined(CUSTOM_OLED_DRIVER)
- is_oled_enabled = user_state.is_oled_enabled;
-#endif
#if defined(POINTING_DEVICE_ENABLE) && defined(POINTING_DEVICE_AUTO_MOUSE_ENABLE)
if (get_auto_mouse_toggle() != user_state.tap_toggling) {
auto_mouse_toggle();
@@ -111,7 +101,7 @@ void user_transport_update(void) {
#ifdef SWAP_HANDS_ENABLE
swap_hands = user_state.swap_hands;
#endif
- host_driver_disabled = user_state.host_driver_disabled;
+ set_keyboard_lock(user_state.host_driver_disabled);
}
}
@@ -122,7 +112,7 @@ void user_transport_sync(void) {
static uint32_t last_config = 0, last_sync[4], last_user_state = 0;
bool needs_sync = false;
#ifdef CUSTOM_OLED_DRIVER
- static char keylog_temp[OLED_KEYLOGGER_LENGTH] = {0};
+ static char keylog_temp[OLED_KEYLOGGER_LENGTH + 1] = {0};
#endif
// Check if the state values are different
@@ -183,9 +173,9 @@ void user_transport_sync(void) {
#ifdef CUSTOM_OLED_DRIVER
// Check if the state values are different
- if (memcmp(&keylog_str, &keylog_temp, OLED_KEYLOGGER_LENGTH)) {
+ if (memcmp(&oled_keylog_str, &keylog_temp, OLED_KEYLOGGER_LENGTH + 1)) {
needs_sync = true;
- memcpy(&keylog_temp, &keylog_str, OLED_KEYLOGGER_LENGTH);
+ memcpy(&keylog_temp, &oled_keylog_str, OLED_KEYLOGGER_LENGTH + 1);
}
if (timer_elapsed32(last_sync[3]) > 250) {
needs_sync = true;
@@ -193,7 +183,7 @@ void user_transport_sync(void) {
// Perform the sync if requested
if (needs_sync) {
- if (transaction_rpc_send(RPC_ID_USER_KEYLOG_STR, OLED_KEYLOGGER_LENGTH, &keylog_str)) {
+ if (transaction_rpc_send(RPC_ID_USER_OLED_KEYLOG_STR, OLED_KEYLOGGER_LENGTH + 1, &oled_keylog_str)) {
last_sync[3] = timer_read32();
}
needs_sync = false;
diff --git a/users/drashna/split/transport_sync.h b/users/drashna/split/transport_sync.h
index e27e598f831..d241e5446f0 100644
--- a/users/drashna/split/transport_sync.h
+++ b/users/drashna/split/transport_sync.h
@@ -6,7 +6,6 @@
#include "drashna.h"
#ifdef OLED_ENABLE
# include "oled/oled_stuff.h"
-extern char keylog_str[];
#endif
typedef union {