From b514a591f3b5695db9fa25db76893bd30af2f12e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 4 Jan 2024 07:28:33 +0000
Subject: [PATCH 01/20] Bump tj-actions/changed-files from 40 to 41 in
 /.github/workflows (#22812)

Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 40 to 41.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v40...v41)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 .github/workflows/format.yml | 2 +-
 .github/workflows/lint.yml   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
index e1f34b9048f..de08442c1ca 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@v40
+      uses: tj-actions/changed-files@v41
 
     - name: Run qmk formatters
       shell: 'bash {0}'
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 6936f24420c..08a131c786f 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@v40
+      uses: tj-actions/changed-files@v41
 
     - name: Print info
       run: |

From b02abcb9a63cc64d050f5d714ab6f2c0a4e278e6 Mon Sep 17 00:00:00 2001
From: QMK Bot <hello@qmk.fm>
Date: Thu, 4 Jan 2024 03:59:38 -0500
Subject: [PATCH 02/20] Regenerate Files (#22821)

---
 quantum/keycodes.h                                    | 2 +-
 quantum/keymap_extras/keymap_belgian.h                | 2 +-
 quantum/keymap_extras/keymap_bepo.h                   | 2 +-
 quantum/keymap_extras/keymap_brazilian_abnt2.h        | 2 +-
 quantum/keymap_extras/keymap_canadian_multilingual.h  | 2 +-
 quantum/keymap_extras/keymap_colemak.h                | 2 +-
 quantum/keymap_extras/keymap_croatian.h               | 2 +-
 quantum/keymap_extras/keymap_czech.h                  | 2 +-
 quantum/keymap_extras/keymap_danish.h                 | 2 +-
 quantum/keymap_extras/keymap_dvorak.h                 | 2 +-
 quantum/keymap_extras/keymap_dvorak_fr.h              | 2 +-
 quantum/keymap_extras/keymap_dvorak_programmer.h      | 2 +-
 quantum/keymap_extras/keymap_estonian.h               | 2 +-
 quantum/keymap_extras/keymap_finnish.h                | 2 +-
 quantum/keymap_extras/keymap_french.h                 | 2 +-
 quantum/keymap_extras/keymap_french_afnor.h           | 2 +-
 quantum/keymap_extras/keymap_french_mac_iso.h         | 2 +-
 quantum/keymap_extras/keymap_german.h                 | 2 +-
 quantum/keymap_extras/keymap_german_mac_iso.h         | 2 +-
 quantum/keymap_extras/keymap_greek.h                  | 2 +-
 quantum/keymap_extras/keymap_hebrew.h                 | 2 +-
 quantum/keymap_extras/keymap_hungarian.h              | 2 +-
 quantum/keymap_extras/keymap_icelandic.h              | 2 +-
 quantum/keymap_extras/keymap_irish.h                  | 2 +-
 quantum/keymap_extras/keymap_italian.h                | 2 +-
 quantum/keymap_extras/keymap_italian_mac_ansi.h       | 2 +-
 quantum/keymap_extras/keymap_italian_mac_iso.h        | 2 +-
 quantum/keymap_extras/keymap_japanese.h               | 2 +-
 quantum/keymap_extras/keymap_korean.h                 | 2 +-
 quantum/keymap_extras/keymap_latvian.h                | 2 +-
 quantum/keymap_extras/keymap_lithuanian_azerty.h      | 2 +-
 quantum/keymap_extras/keymap_lithuanian_qwerty.h      | 2 +-
 quantum/keymap_extras/keymap_neo2.h                   | 2 +-
 quantum/keymap_extras/keymap_nordic.h                 | 2 +-
 quantum/keymap_extras/keymap_norman.h                 | 2 +-
 quantum/keymap_extras/keymap_norwegian.h              | 2 +-
 quantum/keymap_extras/keymap_plover.h                 | 2 +-
 quantum/keymap_extras/keymap_plover_dvorak.h          | 2 +-
 quantum/keymap_extras/keymap_polish.h                 | 2 +-
 quantum/keymap_extras/keymap_portuguese.h             | 2 +-
 quantum/keymap_extras/keymap_portuguese_mac_iso.h     | 2 +-
 quantum/keymap_extras/keymap_romanian.h               | 2 +-
 quantum/keymap_extras/keymap_russian.h                | 2 +-
 quantum/keymap_extras/keymap_russian_typewriter.h     | 2 +-
 quantum/keymap_extras/keymap_serbian.h                | 2 +-
 quantum/keymap_extras/keymap_serbian_latin.h          | 2 +-
 quantum/keymap_extras/keymap_slovak.h                 | 2 +-
 quantum/keymap_extras/keymap_slovenian.h              | 2 +-
 quantum/keymap_extras/keymap_spanish.h                | 2 +-
 quantum/keymap_extras/keymap_spanish_dvorak.h         | 2 +-
 quantum/keymap_extras/keymap_swedish.h                | 2 +-
 quantum/keymap_extras/keymap_swedish_mac_ansi.h       | 2 +-
 quantum/keymap_extras/keymap_swedish_mac_iso.h        | 2 +-
 quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h   | 2 +-
 quantum/keymap_extras/keymap_swedish_pro_mac_iso.h    | 2 +-
 quantum/keymap_extras/keymap_swiss_de.h               | 2 +-
 quantum/keymap_extras/keymap_swiss_fr.h               | 2 +-
 quantum/keymap_extras/keymap_turkish_f.h              | 2 +-
 quantum/keymap_extras/keymap_turkish_q.h              | 2 +-
 quantum/keymap_extras/keymap_uk.h                     | 2 +-
 quantum/keymap_extras/keymap_ukrainian.h              | 2 +-
 quantum/keymap_extras/keymap_us.h                     | 2 +-
 quantum/keymap_extras/keymap_us_extended.h            | 2 +-
 quantum/keymap_extras/keymap_us_international.h       | 2 +-
 quantum/keymap_extras/keymap_us_international_linux.h | 2 +-
 quantum/keymap_extras/keymap_workman.h                | 2 +-
 quantum/keymap_extras/keymap_workman_zxcvm.h          | 2 +-
 quantum/rgblight/rgblight_breathe_table.h             | 2 +-
 tests/test_common/keycode_table.cpp                   | 2 +-
 69 files changed, 69 insertions(+), 69 deletions(-)

diff --git a/quantum/keycodes.h b/quantum/keycodes.h
index 39fd2e27266..69d62b57311 100644
--- a/quantum/keycodes.h
+++ b/quantum/keycodes.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_belgian.h b/quantum/keymap_extras/keymap_belgian.h
index 6851c6b4e82..e553894b52c 100644
--- a/quantum/keymap_extras/keymap_belgian.h
+++ b/quantum/keymap_extras/keymap_belgian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_bepo.h b/quantum/keymap_extras/keymap_bepo.h
index 448727decea..d1886efb102 100644
--- a/quantum/keymap_extras/keymap_bepo.h
+++ b/quantum/keymap_extras/keymap_bepo.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_brazilian_abnt2.h b/quantum/keymap_extras/keymap_brazilian_abnt2.h
index 8fac7666c2a..7dfc2cbb3de 100644
--- a/quantum/keymap_extras/keymap_brazilian_abnt2.h
+++ b/quantum/keymap_extras/keymap_brazilian_abnt2.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h
index 5b9b03babb1..baeafa40778 100644
--- a/quantum/keymap_extras/keymap_canadian_multilingual.h
+++ b/quantum/keymap_extras/keymap_canadian_multilingual.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_colemak.h b/quantum/keymap_extras/keymap_colemak.h
index d63309f010b..b1b2fdcf805 100644
--- a/quantum/keymap_extras/keymap_colemak.h
+++ b/quantum/keymap_extras/keymap_colemak.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_croatian.h b/quantum/keymap_extras/keymap_croatian.h
index 3e7c681ced9..3ed6e29dfb4 100644
--- a/quantum/keymap_extras/keymap_croatian.h
+++ b/quantum/keymap_extras/keymap_croatian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_czech.h b/quantum/keymap_extras/keymap_czech.h
index 351c51ad411..ab00f83820a 100644
--- a/quantum/keymap_extras/keymap_czech.h
+++ b/quantum/keymap_extras/keymap_czech.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_danish.h b/quantum/keymap_extras/keymap_danish.h
index cea9444896b..9e397af1357 100644
--- a/quantum/keymap_extras/keymap_danish.h
+++ b/quantum/keymap_extras/keymap_danish.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h
index 9205a72057f..d83f311e2a2 100644
--- a/quantum/keymap_extras/keymap_dvorak.h
+++ b/quantum/keymap_extras/keymap_dvorak.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_dvorak_fr.h b/quantum/keymap_extras/keymap_dvorak_fr.h
index b206767614e..6c9ca139d61 100644
--- a/quantum/keymap_extras/keymap_dvorak_fr.h
+++ b/quantum/keymap_extras/keymap_dvorak_fr.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_dvorak_programmer.h b/quantum/keymap_extras/keymap_dvorak_programmer.h
index 19187ed13b0..80f39f56d45 100644
--- a/quantum/keymap_extras/keymap_dvorak_programmer.h
+++ b/quantum/keymap_extras/keymap_dvorak_programmer.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_estonian.h b/quantum/keymap_extras/keymap_estonian.h
index ea9c56c12ac..3b6bf66c5ce 100644
--- a/quantum/keymap_extras/keymap_estonian.h
+++ b/quantum/keymap_extras/keymap_estonian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_finnish.h b/quantum/keymap_extras/keymap_finnish.h
index c0dc1af81ec..4c0b78ff60d 100644
--- a/quantum/keymap_extras/keymap_finnish.h
+++ b/quantum/keymap_extras/keymap_finnish.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_french.h b/quantum/keymap_extras/keymap_french.h
index 03dbb7bc40d..db5a7ac2fff 100644
--- a/quantum/keymap_extras/keymap_french.h
+++ b/quantum/keymap_extras/keymap_french.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_french_afnor.h b/quantum/keymap_extras/keymap_french_afnor.h
index 869984c4d2e..894ff4305b7 100644
--- a/quantum/keymap_extras/keymap_french_afnor.h
+++ b/quantum/keymap_extras/keymap_french_afnor.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_french_mac_iso.h b/quantum/keymap_extras/keymap_french_mac_iso.h
index e5f7514a802..89b16478bc8 100644
--- a/quantum/keymap_extras/keymap_french_mac_iso.h
+++ b/quantum/keymap_extras/keymap_french_mac_iso.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_german.h b/quantum/keymap_extras/keymap_german.h
index 38b0c685ba6..074f0d321b3 100644
--- a/quantum/keymap_extras/keymap_german.h
+++ b/quantum/keymap_extras/keymap_german.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_german_mac_iso.h b/quantum/keymap_extras/keymap_german_mac_iso.h
index efa9099f201..1a50fabf1ab 100644
--- a/quantum/keymap_extras/keymap_german_mac_iso.h
+++ b/quantum/keymap_extras/keymap_german_mac_iso.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_greek.h b/quantum/keymap_extras/keymap_greek.h
index 01779cf2e85..e21022abbc8 100644
--- a/quantum/keymap_extras/keymap_greek.h
+++ b/quantum/keymap_extras/keymap_greek.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_hebrew.h b/quantum/keymap_extras/keymap_hebrew.h
index 284562072dc..b122eb09ea8 100644
--- a/quantum/keymap_extras/keymap_hebrew.h
+++ b/quantum/keymap_extras/keymap_hebrew.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_hungarian.h b/quantum/keymap_extras/keymap_hungarian.h
index fbc31ed1556..22ae74538c7 100644
--- a/quantum/keymap_extras/keymap_hungarian.h
+++ b/quantum/keymap_extras/keymap_hungarian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_icelandic.h b/quantum/keymap_extras/keymap_icelandic.h
index 3bd71c19f28..c58e48b22df 100644
--- a/quantum/keymap_extras/keymap_icelandic.h
+++ b/quantum/keymap_extras/keymap_icelandic.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_irish.h b/quantum/keymap_extras/keymap_irish.h
index 6e161628c86..ba23cddc951 100644
--- a/quantum/keymap_extras/keymap_irish.h
+++ b/quantum/keymap_extras/keymap_irish.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_italian.h b/quantum/keymap_extras/keymap_italian.h
index 8092dc13018..0317cc5e780 100644
--- a/quantum/keymap_extras/keymap_italian.h
+++ b/quantum/keymap_extras/keymap_italian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_italian_mac_ansi.h b/quantum/keymap_extras/keymap_italian_mac_ansi.h
index ae1281be262..ebf2e1e7095 100644
--- a/quantum/keymap_extras/keymap_italian_mac_ansi.h
+++ b/quantum/keymap_extras/keymap_italian_mac_ansi.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_italian_mac_iso.h b/quantum/keymap_extras/keymap_italian_mac_iso.h
index f3f01839c32..327777dd8a7 100644
--- a/quantum/keymap_extras/keymap_italian_mac_iso.h
+++ b/quantum/keymap_extras/keymap_italian_mac_iso.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_japanese.h b/quantum/keymap_extras/keymap_japanese.h
index 947317833ed..68a91be18b9 100644
--- a/quantum/keymap_extras/keymap_japanese.h
+++ b/quantum/keymap_extras/keymap_japanese.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_korean.h b/quantum/keymap_extras/keymap_korean.h
index 440a6b3b4df..f759e136bdb 100644
--- a/quantum/keymap_extras/keymap_korean.h
+++ b/quantum/keymap_extras/keymap_korean.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_latvian.h b/quantum/keymap_extras/keymap_latvian.h
index 2f26b1d8afa..3444e744bea 100644
--- a/quantum/keymap_extras/keymap_latvian.h
+++ b/quantum/keymap_extras/keymap_latvian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_lithuanian_azerty.h b/quantum/keymap_extras/keymap_lithuanian_azerty.h
index f6dd94f0ca7..235989e67b3 100644
--- a/quantum/keymap_extras/keymap_lithuanian_azerty.h
+++ b/quantum/keymap_extras/keymap_lithuanian_azerty.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_lithuanian_qwerty.h b/quantum/keymap_extras/keymap_lithuanian_qwerty.h
index 03c6b7a2af5..58f43814202 100644
--- a/quantum/keymap_extras/keymap_lithuanian_qwerty.h
+++ b/quantum/keymap_extras/keymap_lithuanian_qwerty.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_neo2.h b/quantum/keymap_extras/keymap_neo2.h
index bc9445892f9..dbeef8d5442 100644
--- a/quantum/keymap_extras/keymap_neo2.h
+++ b/quantum/keymap_extras/keymap_neo2.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h
index 6464966c711..bb66fcf12f3 100644
--- a/quantum/keymap_extras/keymap_nordic.h
+++ b/quantum/keymap_extras/keymap_nordic.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_norman.h b/quantum/keymap_extras/keymap_norman.h
index 1a3a0bc53a4..9938e53efea 100644
--- a/quantum/keymap_extras/keymap_norman.h
+++ b/quantum/keymap_extras/keymap_norman.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_norwegian.h b/quantum/keymap_extras/keymap_norwegian.h
index af16fec8d6a..e50e1ab3bb1 100644
--- a/quantum/keymap_extras/keymap_norwegian.h
+++ b/quantum/keymap_extras/keymap_norwegian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_plover.h b/quantum/keymap_extras/keymap_plover.h
index c0e3311e90b..285eaa0741d 100644
--- a/quantum/keymap_extras/keymap_plover.h
+++ b/quantum/keymap_extras/keymap_plover.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_plover_dvorak.h b/quantum/keymap_extras/keymap_plover_dvorak.h
index 7feb52a25c7..8347b2b20c1 100644
--- a/quantum/keymap_extras/keymap_plover_dvorak.h
+++ b/quantum/keymap_extras/keymap_plover_dvorak.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_polish.h b/quantum/keymap_extras/keymap_polish.h
index 40870ec2378..422c58c1e39 100644
--- a/quantum/keymap_extras/keymap_polish.h
+++ b/quantum/keymap_extras/keymap_polish.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_portuguese.h b/quantum/keymap_extras/keymap_portuguese.h
index b4570ad922d..6a896de5290 100644
--- a/quantum/keymap_extras/keymap_portuguese.h
+++ b/quantum/keymap_extras/keymap_portuguese.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_portuguese_mac_iso.h b/quantum/keymap_extras/keymap_portuguese_mac_iso.h
index 57a27d04e9b..1a11cfa5ab7 100644
--- a/quantum/keymap_extras/keymap_portuguese_mac_iso.h
+++ b/quantum/keymap_extras/keymap_portuguese_mac_iso.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_romanian.h b/quantum/keymap_extras/keymap_romanian.h
index cf4c17125f1..8f90988855e 100644
--- a/quantum/keymap_extras/keymap_romanian.h
+++ b/quantum/keymap_extras/keymap_romanian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_russian.h b/quantum/keymap_extras/keymap_russian.h
index fd3a1604c8e..440692345ea 100644
--- a/quantum/keymap_extras/keymap_russian.h
+++ b/quantum/keymap_extras/keymap_russian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_russian_typewriter.h b/quantum/keymap_extras/keymap_russian_typewriter.h
index 59f341e38b2..833311076fd 100644
--- a/quantum/keymap_extras/keymap_russian_typewriter.h
+++ b/quantum/keymap_extras/keymap_russian_typewriter.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_serbian.h b/quantum/keymap_extras/keymap_serbian.h
index 732e2e939d1..fa0e474df82 100644
--- a/quantum/keymap_extras/keymap_serbian.h
+++ b/quantum/keymap_extras/keymap_serbian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_serbian_latin.h b/quantum/keymap_extras/keymap_serbian_latin.h
index 5151696a103..a2038b6df82 100644
--- a/quantum/keymap_extras/keymap_serbian_latin.h
+++ b/quantum/keymap_extras/keymap_serbian_latin.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_slovak.h b/quantum/keymap_extras/keymap_slovak.h
index 81a88fa25c0..08666ef060b 100644
--- a/quantum/keymap_extras/keymap_slovak.h
+++ b/quantum/keymap_extras/keymap_slovak.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_slovenian.h b/quantum/keymap_extras/keymap_slovenian.h
index 1e17342c273..31a8c5f9a58 100644
--- a/quantum/keymap_extras/keymap_slovenian.h
+++ b/quantum/keymap_extras/keymap_slovenian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_spanish.h b/quantum/keymap_extras/keymap_spanish.h
index bcdd5af0c25..f87eb6b027c 100644
--- a/quantum/keymap_extras/keymap_spanish.h
+++ b/quantum/keymap_extras/keymap_spanish.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_spanish_dvorak.h b/quantum/keymap_extras/keymap_spanish_dvorak.h
index fb033df770a..782f23a5be2 100644
--- a/quantum/keymap_extras/keymap_spanish_dvorak.h
+++ b/quantum/keymap_extras/keymap_spanish_dvorak.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_swedish.h b/quantum/keymap_extras/keymap_swedish.h
index acb49f77738..a9d015b22e2 100644
--- a/quantum/keymap_extras/keymap_swedish.h
+++ b/quantum/keymap_extras/keymap_swedish.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_swedish_mac_ansi.h b/quantum/keymap_extras/keymap_swedish_mac_ansi.h
index ef48a9e493e..36a31220a16 100644
--- a/quantum/keymap_extras/keymap_swedish_mac_ansi.h
+++ b/quantum/keymap_extras/keymap_swedish_mac_ansi.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_swedish_mac_iso.h b/quantum/keymap_extras/keymap_swedish_mac_iso.h
index 2eaef5e60ca..7f085dc16b6 100644
--- a/quantum/keymap_extras/keymap_swedish_mac_iso.h
+++ b/quantum/keymap_extras/keymap_swedish_mac_iso.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h b/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h
index d33a2590235..20781b2e532 100644
--- a/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h
+++ b/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h b/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h
index 680bd1db9e2..dbbc24ed02c 100644
--- a/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h
+++ b/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_swiss_de.h b/quantum/keymap_extras/keymap_swiss_de.h
index c22191dd4e7..2cedf237881 100644
--- a/quantum/keymap_extras/keymap_swiss_de.h
+++ b/quantum/keymap_extras/keymap_swiss_de.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_swiss_fr.h b/quantum/keymap_extras/keymap_swiss_fr.h
index e0e8e52c9ce..347815504bb 100644
--- a/quantum/keymap_extras/keymap_swiss_fr.h
+++ b/quantum/keymap_extras/keymap_swiss_fr.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_turkish_f.h b/quantum/keymap_extras/keymap_turkish_f.h
index 4fdcf3f7462..d9d08adae58 100644
--- a/quantum/keymap_extras/keymap_turkish_f.h
+++ b/quantum/keymap_extras/keymap_turkish_f.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_turkish_q.h b/quantum/keymap_extras/keymap_turkish_q.h
index 5a9362acb4c..781c4063471 100644
--- a/quantum/keymap_extras/keymap_turkish_q.h
+++ b/quantum/keymap_extras/keymap_turkish_q.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h
index 71e5f38f55a..49237768d4f 100644
--- a/quantum/keymap_extras/keymap_uk.h
+++ b/quantum/keymap_extras/keymap_uk.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_ukrainian.h b/quantum/keymap_extras/keymap_ukrainian.h
index 3f3ec4cec2b..760cc265eaf 100644
--- a/quantum/keymap_extras/keymap_ukrainian.h
+++ b/quantum/keymap_extras/keymap_ukrainian.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_us.h b/quantum/keymap_extras/keymap_us.h
index 6101c8d8ba8..9d1c7ad628a 100644
--- a/quantum/keymap_extras/keymap_us.h
+++ b/quantum/keymap_extras/keymap_us.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_us_extended.h b/quantum/keymap_extras/keymap_us_extended.h
index 90da98c756a..c8e56cc5a83 100644
--- a/quantum/keymap_extras/keymap_us_extended.h
+++ b/quantum/keymap_extras/keymap_us_extended.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_us_international.h b/quantum/keymap_extras/keymap_us_international.h
index bd5f21ec8c6..1b211bd4a6a 100644
--- a/quantum/keymap_extras/keymap_us_international.h
+++ b/quantum/keymap_extras/keymap_us_international.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_us_international_linux.h b/quantum/keymap_extras/keymap_us_international_linux.h
index 4551cbe29ff..778ab4c8998 100644
--- a/quantum/keymap_extras/keymap_us_international_linux.h
+++ b/quantum/keymap_extras/keymap_us_international_linux.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_workman.h b/quantum/keymap_extras/keymap_workman.h
index 808caec054c..31bd953d7f5 100644
--- a/quantum/keymap_extras/keymap_workman.h
+++ b/quantum/keymap_extras/keymap_workman.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/keymap_extras/keymap_workman_zxcvm.h b/quantum/keymap_extras/keymap_workman_zxcvm.h
index f8645ac4cfb..f05c89adb89 100644
--- a/quantum/keymap_extras/keymap_workman_zxcvm.h
+++ b/quantum/keymap_extras/keymap_workman_zxcvm.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/quantum/rgblight/rgblight_breathe_table.h b/quantum/rgblight/rgblight_breathe_table.h
index 5c7660ab6a6..147b1bf09af 100644
--- a/quantum/rgblight/rgblight_breathe_table.h
+++ b/quantum/rgblight/rgblight_breathe_table.h
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************
diff --git a/tests/test_common/keycode_table.cpp b/tests/test_common/keycode_table.cpp
index 9ed80cdbcf6..29f7c710a03 100644
--- a/tests/test_common/keycode_table.cpp
+++ b/tests/test_common/keycode_table.cpp
@@ -1,4 +1,4 @@
-// Copyright 2023 QMK
+// Copyright 2024 QMK
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 /*******************************************************************************

From a474cac2c387830063d803b96c9ac920bc1a7255 Mon Sep 17 00:00:00 2001
From: James Kneafsey <se@sesneaky.com>
Date: Sat, 6 Jan 2024 02:06:14 +0100
Subject: [PATCH 03/20] Update keymap.md (#22834)

---
 docs/keymap.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/keymap.md b/docs/keymap.md
index f9d45b32676..b9c5da6be70 100644
--- a/docs/keymap.md
+++ b/docs/keymap.md
@@ -125,7 +125,7 @@ At the top of the file you'll find this:
 
 These are some handy definitions we can use when building our keymap and our custom function. The `GRAVE_MODS` definition will be used later in our custom function, and the following `_BL`, `_FL`, and `_CL` defines make it easier to refer to each of our layers.
 
-Note: You may also find some older keymap files may also have a define(s) for `_______` and/or `XXXXXXX`. These can be used in place for `KC_TRNS` and `KC_NO` respectively, making it easier to see what keys a layer is overriding. These definitions are now unecessary, as they are included by default.
+Note: You may also find some older keymap files may also have a define(s) for `_______` and/or `XXXXXXX`. These can be used in place for `KC_TRNS` and `KC_NO` respectively, making it easier to see what keys a layer is overriding. These definitions are now unnecessary, as they are included by default.
 
 ### Layers and Keymaps
 

From 31d28ba2283a8130b043c48b6ef2c93e293a7f62 Mon Sep 17 00:00:00 2001
From: 4pplet <mail@4pplet.com>
Date: Sun, 7 Jan 2024 08:35:45 +0100
Subject: [PATCH 04/20] [Keyboard] Add Nordic65 by KBnordic (#22817)

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: 4pplet <4pplet@protonmail.com>
Co-authored-by: 4pplet <stefan.ess@gmail.com>
---
 keyboards/kbnordic/nordic65/readme.md         |  20 +
 keyboards/kbnordic/nordic65/rev_a/info.json   | 739 ++++++++++++++++++
 .../nordic65/rev_a/keymaps/default/keymap.c   |  35 +
 .../nordic65/rev_a/keymaps/via/keymap.c       |  35 +
 .../nordic65/rev_a/keymaps/via/rules.mk       |   1 +
 .../kbnordic/nordic65/rev_a/matrix_diagram.md |  25 +
 keyboards/kbnordic/nordic65/rev_a/readme.md   |  20 +
 keyboards/kbnordic/nordic65/rev_a/rules.mk    |   2 +
 8 files changed, 877 insertions(+)
 create mode 100644 keyboards/kbnordic/nordic65/readme.md
 create mode 100644 keyboards/kbnordic/nordic65/rev_a/info.json
 create mode 100644 keyboards/kbnordic/nordic65/rev_a/keymaps/default/keymap.c
 create mode 100644 keyboards/kbnordic/nordic65/rev_a/keymaps/via/keymap.c
 create mode 100644 keyboards/kbnordic/nordic65/rev_a/keymaps/via/rules.mk
 create mode 100644 keyboards/kbnordic/nordic65/rev_a/matrix_diagram.md
 create mode 100644 keyboards/kbnordic/nordic65/rev_a/readme.md
 create mode 100644 keyboards/kbnordic/nordic65/rev_a/rules.mk

diff --git a/keyboards/kbnordic/nordic65/readme.md b/keyboards/kbnordic/nordic65/readme.md
new file mode 100644
index 00000000000..20912c741b1
--- /dev/null
+++ b/keyboards/kbnordic/nordic65/readme.md
@@ -0,0 +1,20 @@
+# nordic65
+
+PCB designed for kbnordic.se
+
+* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
+* Hardware Supported: nordic65
+
+Make example for this keyboard (after setting up your build environment):
+
+    make kbnordic/nordic65/rev_a:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the ESC key
+* **Physical reset button**: Briefly press the button on the back of the PCB or short the two pads in the "RST" header for more than 3 seconds.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/kbnordic/nordic65/rev_a/info.json b/keyboards/kbnordic/nordic65/rev_a/info.json
new file mode 100644
index 00000000000..8cd90949ea9
--- /dev/null
+++ b/keyboards/kbnordic/nordic65/rev_a/info.json
@@ -0,0 +1,739 @@
+{
+    "keyboard_name": "Nordic65 Rev A",
+    "manufacturer": "KBNORDIC",
+    "url": "kbnordic.se",
+    "maintainer": "4pplet",
+    "usb": {
+        "vid": "0x4445",
+        "pid": "0x0002",
+        "device_version": "0.0.1"
+    },
+    "processor": "STM32F072",
+    "bootloader": "stm32-dfu",
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "key_lock": true,
+        "mousekey": false,
+        "nkro": true,
+        "rgblight": true
+    },
+    "rgblight": {
+        "animations": {
+            "alternating": true,
+            "breathing": true,
+            "christmas": true,
+            "knight": true,
+            "rainbow_mood": true,
+            "rainbow_swirl": true,
+            "rgb_test": true,
+            "snake": true,
+            "static_gradient": true,
+            "twinkle": true
+        },
+        "led_count": 20
+    },
+    "ws2812": {
+        "pin": "A8"
+    },
+    "matrix_pins": {
+        "cols": ["A10", "A3", "A15", "A2", "A1", "A0", "F1", "F0", "C15", "C14", "C13", "B9", "B3", "B5", "B4"], 
+        "rows": ["B15", "A9", "B8", "B7", "B6"] 
+    },
+    "diode_direction": "COL2ROW",
+    "community_layouts": [
+        "65_ansi_blocker",
+        "65_ansi_blocker_split_bs",
+        "65_ansi_blocker_tsangan",
+        "65_ansi_blocker_tsangan_split_bs",
+        "65_iso_blocker",
+        "65_iso_blocker_split_bs",
+        "65_iso_blocker_tsangan",
+        "65_iso_blocker_tsangan_split_bs"
+    ],
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [
+                {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+                {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+                {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+                {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+                {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+                {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+                {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+                {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+                {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+                {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+                {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+                {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+                {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+                {"label": "/", "matrix": [0, 13], "x": 13, "y": 0},
+                {"label": "Backspace", "matrix": [1, 13], "x": 14, "y": 0},
+                {"label": "Home", "matrix": [0, 14], "x": 15, "y": 0},
+
+                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+                {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+                {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+                {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+                {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+                {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+                {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+                {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+                {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+                {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+                {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+                {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+                {"label": "Enter", "matrix": [2, 13], "x":13.75, "y":1, "w":1.25, "h":2}, 
+                {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+                {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+                {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+                {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+                {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+                {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+                {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+                {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+                {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+                {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+                {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+                {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+                {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+                {"label": "~", "matrix": [2, 12], "x":12.75, "y":2},
+                {"label": "Page Up", "matrix": [2, 14], "x": 15, "y": 2},
+
+                {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+                {"label": "\\", "matrix": [3, 1], "x": 1.25, "y": 3},
+                {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+                {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+                {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+                {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+                {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+                {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+                {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+                {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+                {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+                {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+                {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
+                {"label": "Page Down", "matrix": [3, 14], "x": 15, "y": 3},                
+
+                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"label": "GUI", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+                {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+                {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+                {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+                {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+                {"label": "Left", "matrix": [4, 12], "x": 13, "y": 4},
+                {"label": "Down", "matrix": [4, 13], "x": 14, "y": 4},
+                {"label": "Right", "matrix": [4, 14], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_ansi_blocker": {
+            "layout": [
+                {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+                {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+                {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+                {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+                {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+                {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+                {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+                {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+                {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+                {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+                {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+                {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+                {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+                {"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+                {"label": "Home", "matrix": [0, 14], "x": 15, "y": 0},
+
+                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+                {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+                {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+                {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+                {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+                {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+                {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+                {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+                {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+                {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+                {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+                {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+                {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+                {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+                {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+                {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+                {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+                {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+                {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+                {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+                {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+                {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+                {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+                {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+                {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+                {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+                {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+                {"label": "PgUp", "matrix": [2, 14], "x": 15, "y": 2},
+
+                {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+                {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+                {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+                {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+                {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+                {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+                {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+                {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+                {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+                {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+                {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+                {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
+                {"label": "PgDn", "matrix": [3, 14], "x": 15, "y": 3},
+
+                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+                {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+                {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+                {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+                {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+                {"label": "Left", "matrix": [4, 12], "x": 13, "y": 4},
+                {"label": "Down", "matrix": [4, 13], "x": 14, "y": 4},
+                {"label": "Right", "matrix": [4, 14], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_ansi_blocker_split_bs": {
+            "layout": [
+                {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+                {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+                {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+                {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+                {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+                {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+                {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+                {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+                {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+                {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+                {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+                {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+                {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+                {"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0},
+                {"label": "Del", "matrix": [2, 12], "x": 14, "y": 0},
+                {"label": "Home", "matrix": [0, 14], "x": 15, "y": 0},
+
+                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+                {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+                {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+                {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+                {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+                {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+                {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+                {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+                {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+                {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+                {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+                {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+                {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+                {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+                {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+                {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+                {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+                {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+                {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+                {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+                {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+                {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+                {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+                {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+                {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+                {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+                {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+                {"label": "PgUp", "matrix": [2, 14], "x": 15, "y": 2},
+
+                {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+                {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+                {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+                {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+                {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+                {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+                {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+                {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+                {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+                {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+                {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+                {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
+                {"label": "PgDn", "matrix": [3, 14], "x": 15, "y": 3},
+
+                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+                {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+                {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+                {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+                {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+                {"label": "Left", "matrix": [4, 12], "x": 13, "y": 4},
+                {"label": "Down", "matrix": [4, 13], "x": 14, "y": 4},
+                {"label": "Right", "matrix": [4, 14], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_ansi_blocker_tsangan": {
+            "layout": [
+                {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+                {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+                {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+                {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+                {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+                {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+                {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+                {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+                {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+                {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+                {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+                {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+                {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+                {"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+                {"label": "Home", "matrix": [0, 14], "x": 15, "y": 0},
+
+                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+                {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+                {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+                {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+                {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+                {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+                {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+                {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+                {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+                {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+                {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+                {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+                {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+                {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+                {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+                {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+                {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+                {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+                {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+                {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+                {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+                {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+                {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+                {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+                {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+                {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+                {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+                {"label": "PgUp", "matrix": [2, 14], "x": 15, "y": 2},
+
+                {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+                {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+                {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+                {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+                {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+                {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+                {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+                {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+                {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+                {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+                {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+                {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
+                {"label": "PgDn", "matrix": [3, 14], "x": 15, "y": 3},
+
+                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+                {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+                {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+                {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+                {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+                {"label": "Left", "matrix": [4, 12], "x": 13, "y": 4},
+                {"label": "Down", "matrix": [4, 13], "x": 14, "y": 4},
+                {"label": "Right", "matrix": [4, 14], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_ansi_blocker_tsangan_split_bs": {
+            "layout": [
+                {"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
+                {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+                {"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
+                {"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
+                {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+                {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+                {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+                {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+                {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+                {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+                {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+                {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+                {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+                {"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0},
+                {"label": "Del", "matrix": [2, 12], "x": 14, "y": 0},
+                {"label": "Home", "matrix": [0, 14], "x": 15, "y": 0},
+
+                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+                {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+                {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+                {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+                {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+                {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+                {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+                {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+                {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+                {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+                {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+                {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+                {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+                {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+                {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+                {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+                {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+                {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+                {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+                {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+                {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+                {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+                {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+                {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+                {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+                {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
+                {"label": "Enter", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+                {"label": "PgUp", "matrix": [2, 14], "x": 15, "y": 2},
+
+                {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+                {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+                {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+                {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+                {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+                {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+                {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+                {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+                {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+                {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+                {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+                {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
+                {"label": "PgDn", "matrix": [3, 14], "x": 15, "y": 3},
+
+                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+                {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+                {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+                {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+                {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+                {"label": "Left", "matrix": [4, 12], "x": 13, "y": 4},
+                {"label": "Down", "matrix": [4, 13], "x": 14, "y": 4},
+                {"label": "Right", "matrix": [4, 14], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_iso_blocker": {
+            "layout": [
+                {"label": "\u00ac", "matrix": [0, 0], "x": 0, "y": 0},
+                {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+                {"label": "\"", "matrix": [0, 2], "x": 2, "y": 0},
+                {"label": "\u00a3", "matrix": [0, 3], "x": 3, "y": 0},
+                {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+                {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+                {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+                {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+                {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+                {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+                {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+                {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+                {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+                {"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+                {"label": "Home", "matrix": [0, 14], "x": 15, "y": 0},
+
+                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+                {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+                {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+                {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+                {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+                {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+                {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+                {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+                {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+                {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+                {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+                {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+                {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+                {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+                {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+                {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+                {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+                {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+                {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+                {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+                {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+                {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+                {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+                {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+                {"label": "@", "matrix": [2, 11], "x": 11.75, "y": 2},
+                {"label": "~", "matrix": [1, 13], "x": 12.75, "y": 2},
+                {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+                {"label": "PgUp", "matrix": [2, 14], "x": 15, "y": 2},
+
+                {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+                {"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
+                {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+                {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+                {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+                {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+                {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+                {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+                {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+                {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+                {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+                {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+                {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
+                {"label": "PgDn", "matrix": [3, 14], "x": 15, "y": 3},
+
+                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+                {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+                {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+                {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+                {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+                {"label": "Left", "matrix": [4, 12], "x": 13, "y": 4},
+                {"label": "Down", "matrix": [4, 13], "x": 14, "y": 4},
+                {"label": "Right", "matrix": [4, 14], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_iso_blocker_split_bs": {
+            "layout": [
+                {"label": "\u00ac", "matrix": [0, 0], "x": 0, "y": 0},
+                {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+                {"label": "\"", "matrix": [0, 2], "x": 2, "y": 0},
+                {"label": "\u00a3", "matrix": [0, 3], "x": 3, "y": 0},
+                {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+                {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+                {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+                {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+                {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+                {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+                {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+                {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+                {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+                {"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0},
+                {"label": "Del", "matrix": [2, 12], "x": 14, "y": 0},
+                {"label": "Home", "matrix": [0, 14], "x": 15, "y": 0},
+
+                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+                {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+                {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+                {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+                {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+                {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+                {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+                {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+                {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+                {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+                {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+                {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+                {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+                {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+                {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+                {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+                {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+                {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+                {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+                {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+                {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+                {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+                {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+                {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+                {"label": "@", "matrix": [2, 11], "x": 11.75, "y": 2},
+                {"label": "~", "matrix": [1, 13], "x": 12.75, "y": 2},
+                {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+                {"label": "PgUp", "matrix": [2, 14], "x": 15, "y": 2},
+
+                {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+                {"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
+                {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+                {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+                {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+                {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+                {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+                {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+                {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+                {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+                {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+                {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+                {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
+                {"label": "PgDn", "matrix": [3, 14], "x": 15, "y": 3},
+
+                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+                {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+                {"label": "Space", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+                {"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+                {"label": "Ctrl", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+                {"label": "Left", "matrix": [4, 12], "x": 13, "y": 4},
+                {"label": "Down", "matrix": [4, 13], "x": 14, "y": 4},
+                {"label": "Right", "matrix": [4, 14], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_iso_blocker_tsangan": {
+            "layout": [
+                {"label": "\u00ac", "matrix": [0, 0], "x": 0, "y": 0},
+                {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+                {"label": "\"", "matrix": [0, 2], "x": 2, "y": 0},
+                {"label": "\u00a3", "matrix": [0, 3], "x": 3, "y": 0},
+                {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+                {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+                {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+                {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+                {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+                {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+                {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+                {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+                {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+                {"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+                {"label": "Home", "matrix": [0, 14], "x": 15, "y": 0},
+
+                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+                {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+                {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+                {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+                {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+                {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+                {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+                {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+                {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+                {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+                {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+                {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+                {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+                {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+                {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+                {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+                {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+                {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+                {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+                {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+                {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+                {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+                {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+                {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+                {"label": "@", "matrix": [2, 11], "x": 11.75, "y": 2},
+                {"label": "~", "matrix": [1, 13], "x": 12.75, "y": 2},
+                {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+                {"label": "PgUp", "matrix": [2, 14], "x": 15, "y": 2},
+
+                {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+                {"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
+                {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+                {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+                {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+                {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+                {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+                {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+                {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+                {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+                {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+                {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+                {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
+                {"label": "PgDn", "matrix": [3, 14], "x": 15, "y": 3},
+
+                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+                {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+                {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+                {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+                {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+                {"label": "Left", "matrix": [4, 12], "x": 13, "y": 4},
+                {"label": "Down", "matrix": [4, 13], "x": 14, "y": 4},
+                {"label": "Right", "matrix": [4, 14], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_iso_blocker_tsangan_split_bs": {
+            "layout": [
+                {"label": "\u00ac", "matrix": [0, 0], "x": 0, "y": 0},
+                {"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
+                {"label": "\"", "matrix": [0, 2], "x": 2, "y": 0},
+                {"label": "\u00a3", "matrix": [0, 3], "x": 3, "y": 0},
+                {"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
+                {"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
+                {"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
+                {"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
+                {"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
+                {"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
+                {"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
+                {"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
+                {"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
+                {"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0},
+                {"label": "Del", "matrix": [2, 12], "x": 14, "y": 0},
+                {"label": "Home", "matrix": [0, 14], "x": 15, "y": 0},
+
+                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+                {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+                {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+                {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+                {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+                {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+                {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+                {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+                {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+                {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+                {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
+                {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
+                {"label": "End", "matrix": [1, 14], "x": 15, "y": 1},
+
+                {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+                {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+                {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+                {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+                {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+                {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+                {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+                {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+                {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+                {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+                {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
+                {"label": "@", "matrix": [2, 11], "x": 11.75, "y": 2},
+                {"label": "~", "matrix": [1, 13], "x": 12.75, "y": 2},
+                {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+                {"label": "PgUp", "matrix": [2, 14], "x": 15, "y": 2},
+
+                {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+                {"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
+                {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+                {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+                {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+                {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+                {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+                {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+                {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+                {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
+                {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
+                {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
+                {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
+                {"label": "PgDn", "matrix": [3, 14], "x": 15, "y": 3},
+
+                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+                {"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
+                {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+                {"label": "Space", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+                {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+                {"label": "Left", "matrix": [4, 12], "x": 13, "y": 4},
+                {"label": "Down", "matrix": [4, 13], "x": 14, "y": 4},
+                {"label": "Right", "matrix": [4, 14], "x": 15, "y": 4}
+            ]
+        }
+    }
+}
diff --git a/keyboards/kbnordic/nordic65/rev_a/keymaps/default/keymap.c b/keyboards/kbnordic/nordic65/rev_a/keymaps/default/keymap.c
new file mode 100644
index 00000000000..9b259a334fa
--- /dev/null
+++ b/keyboards/kbnordic/nordic65/rev_a/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.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 <http://www.gnu.org/licenses/>.
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT_all(
+    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6, KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,   KC_BSPC, KC_DEL, KC_HOME,
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y, KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC,  KC_ENT,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_NUHS,  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,  MO(1), 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,  KC_DEL, _______, QK_BOOT,
+    _______, _______, KC_UP,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, _______,
+    _______, _______, _______,                    _______,                  _______, _______, _______, _______, _______
+  )
+};
diff --git a/keyboards/kbnordic/nordic65/rev_a/keymaps/via/keymap.c b/keyboards/kbnordic/nordic65/rev_a/keymaps/via/keymap.c
new file mode 100644
index 00000000000..9b259a334fa
--- /dev/null
+++ b/keyboards/kbnordic/nordic65/rev_a/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+/*
+Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.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 <http://www.gnu.org/licenses/>.
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT_all(
+    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6, KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,   KC_BSPC, KC_DEL, KC_HOME,
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y, KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC,  KC_ENT,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_NUHS,  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,  MO(1), 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,  KC_DEL, _______, QK_BOOT,
+    _______, _______, KC_UP,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, _______,
+    _______, _______, _______,                    _______,                  _______, _______, _______, _______, _______
+  )
+};
diff --git a/keyboards/kbnordic/nordic65/rev_a/keymaps/via/rules.mk b/keyboards/kbnordic/nordic65/rev_a/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/kbnordic/nordic65/rev_a/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/kbnordic/nordic65/rev_a/matrix_diagram.md b/keyboards/kbnordic/nordic65/rev_a/matrix_diagram.md
new file mode 100644
index 00000000000..fa1f3b2cbc2
--- /dev/null
+++ b/keyboards/kbnordic/nordic65/rev_a/matrix_diagram.md
@@ -0,0 +1,25 @@
+# Matrix Diagram for kbnordic nordic65
+
+```
+                                                    ┌───────┐
+                                       2u Backspace │1D     │
+                                                    └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │1D │0E │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤      ┌─────┐
+│10   │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │2D   │1E │      │ 2C  │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    ├───┤   ┌──┴─────┤ ANSI Enter
+│20    │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │    │2E │   │    2D  │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤   └────────┘
+│30  │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C    │3D │3E │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+│40  │41  │42  │             46         │ 4A │ 4B │ │4C │4D │4E │
+└────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+
+┌────────┐
+│30      │ 2.25u LShift
+└────────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┐
+│40   │41 │42   │46                         │4B   │ Tsangan
+└─────┴───┴─────┴───────────────────────────┴─────┘ 
+```
\ No newline at end of file
diff --git a/keyboards/kbnordic/nordic65/rev_a/readme.md b/keyboards/kbnordic/nordic65/rev_a/readme.md
new file mode 100644
index 00000000000..20912c741b1
--- /dev/null
+++ b/keyboards/kbnordic/nordic65/rev_a/readme.md
@@ -0,0 +1,20 @@
+# nordic65
+
+PCB designed for kbnordic.se
+
+* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
+* Hardware Supported: nordic65
+
+Make example for this keyboard (after setting up your build environment):
+
+    make kbnordic/nordic65/rev_a:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the ESC key
+* **Physical reset button**: Briefly press the button on the back of the PCB or short the two pads in the "RST" header for more than 3 seconds.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/kbnordic/nordic65/rev_a/rules.mk b/keyboards/kbnordic/nordic65/rev_a/rules.mk
new file mode 100644
index 00000000000..04fe1eba2ac
--- /dev/null
+++ b/keyboards/kbnordic/nordic65/rev_a/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -p FFFF -v FFFF

From 7e03877924ed722dc3c2895d7b0b61ae6f5df0a2 Mon Sep 17 00:00:00 2001
From: Joe Scotto <8194147+joe-scotto@users.noreply.github.com>
Date: Sun, 7 Jan 2024 02:36:22 -0500
Subject: [PATCH 05/20] [Keyboard] Add ScottoKatana handwired keyboard (#22805)

---
 .../scottokeebs/scottokatana/info.json        | 65 +++++++++++++++++++
 .../scottokatana/keymaps/default/config.h     | 23 +++++++
 .../scottokatana/keymaps/default/keymap.c     | 45 +++++++++++++
 .../scottokeebs/scottokatana/readme.md        | 27 ++++++++
 .../scottokeebs/scottokatana/rules.mk         |  1 +
 5 files changed, 161 insertions(+)
 create mode 100644 keyboards/handwired/scottokeebs/scottokatana/info.json
 create mode 100644 keyboards/handwired/scottokeebs/scottokatana/keymaps/default/config.h
 create mode 100644 keyboards/handwired/scottokeebs/scottokatana/keymaps/default/keymap.c
 create mode 100644 keyboards/handwired/scottokeebs/scottokatana/readme.md
 create mode 100644 keyboards/handwired/scottokeebs/scottokatana/rules.mk

diff --git a/keyboards/handwired/scottokeebs/scottokatana/info.json b/keyboards/handwired/scottokeebs/scottokatana/info.json
new file mode 100644
index 00000000000..4b5779b6d91
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottokatana/info.json
@@ -0,0 +1,65 @@
+{
+    "manufacturer": "ScottoKeebs",
+    "keyboard_name": "ScottoKatana",
+    "maintainer": "joe-scotto",
+    "bootloader": "rp2040",
+    "diode_direction": "COL2ROW",
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true
+    },
+    "matrix_pins": {
+        "cols": ["GP3", "GP4", "GP5", "GP6", "GP7", "GP29", "GP28", "GP27", "GP26", "GP22"],
+        "rows": ["GP10", "GP0", "GP1", "GP2"]
+    },
+    "processor": "RP2040",
+    "url": "https://scottokeebs.com",
+    "usb": {
+        "device_version": "1.0.0",
+        "pid": "0x0023",
+        "vid": "0x534B"
+    },
+    "layouts": {
+        "LAYOUT_ortho_3x10_3": {
+            "layout": [
+                {"matrix": [0, 0], "x": 0.5, "y": 0},
+                {"matrix": [0, 1], "x": 1.5, "y": 0},
+                {"matrix": [0, 2], "x": 2.5, "y": 0},
+                {"matrix": [0, 3], "x": 3.5, "y": 0},
+                {"matrix": [0, 4], "x": 4.5, "y": 0},
+                {"matrix": [0, 5], "x": 7.5, "y": 0},
+                {"matrix": [0, 6], "x": 8.5, "y": 0},
+                {"matrix": [0, 7], "x": 9.5, "y": 0},
+                {"matrix": [0, 8], "x": 10.5, "y": 0},
+                {"matrix": [0, 9], "x": 11.5, "y": 0},
+                {"matrix": [1, 0], "x": 0.25, "y": 1},
+                {"matrix": [1, 1], "x": 1.25, "y": 1},
+                {"matrix": [1, 2], "x": 2.25, "y": 1},
+                {"matrix": [1, 3], "x": 3.25, "y": 1},
+                {"matrix": [1, 4], "x": 4.25, "y": 1},
+                {"matrix": [1, 5], "x": 7.75, "y": 1},
+                {"matrix": [1, 6], "x": 8.75, "y": 1},
+                {"matrix": [1, 7], "x": 9.75, "y": 1},
+                {"matrix": [1, 8], "x": 10.75, "y": 1},
+                {"matrix": [1, 9], "x": 11.75, "y": 1},
+                {"matrix": [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": 8, "y": 2},
+                {"matrix": [2, 6], "x": 9, "y": 2},
+                {"matrix": [2, 7], "x": 10, "y": 2},
+                {"matrix": [2, 8], "x": 11, "y": 2},
+                {"matrix": [2, 9], "x": 12, "y": 2},
+                {"matrix": [3, 1], "x": 1.875, "y": 3, "w": 1.5},
+                {"matrix": [3, 4], "x": 3.375, "y": 3, "w": 6.25},
+                {"matrix": [3, 8], "x": 9.625, "y": 3, "w": 1.5}
+            ]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottokatana/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottokatana/keymaps/default/config.h
new file mode 100644
index 00000000000..eb03070d83a
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottokatana/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2024 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 <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottokatana/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottokatana/keymaps/default/keymap.c
new file mode 100644
index 00000000000..b3ef7e97580
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottokatana/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2024 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT_ortho_3x10_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,                              LT(1, KC_SPC),                         LT(2, KC_TAB)
+    ),
+    [1] = LAYOUT_ortho_3x10_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
+    ),
+    [2] = LAYOUT_ortho_3x10_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
+    ),
+    [3] = LAYOUT_ortho_3x10_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
+    )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottokatana/readme.md b/keyboards/handwired/scottokeebs/scottokatana/readme.md
new file mode 100644
index 00000000000..915062f653f
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottokatana/readme.md
@@ -0,0 +1,27 @@
+# ScottoKatana
+
+![ScottoKatana](https://i.imgur.com/pgXehiIh.jpeg)
+
+A 33-key katana staggered keyboard with a 6.25u spacebar and two 1.5u function keys. Case files available [here](https://github.com/joe-scotto/scottokeebs).
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: RP2040
+* Hardware Availability: [Amazon](https://amazon.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/scottokeebs/scottokatana:default
+
+Flashing example for this keyboard:
+
+    make handwired/scottokeebs/scottokatana: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/scottokatana/rules.mk b/keyboards/handwired/scottokeebs/scottokatana/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottokatana/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank

From 0b0c31665e7b4e5a9cd9ac3ac94b0fba10514aa3 Mon Sep 17 00:00:00 2001
From: Ryan <fauxpark@gmail.com>
Date: Sun, 7 Jan 2024 18:37:56 +1100
Subject: [PATCH 06/20] Keychron Q1V1: fix incorrect 3733 address (#22852)

---
 keyboards/keychron/q1v1/config.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/keyboards/keychron/q1v1/config.h b/keyboards/keychron/q1v1/config.h
index ec1bcc5794b..68b431f7b39 100644
--- a/keyboards/keychron/q1v1/config.h
+++ b/keyboards/keychron/q1v1/config.h
@@ -18,7 +18,7 @@
 
 /* RGB Matrix Driver Configuration */
 #define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
-#define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_GND_VCC
+#define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_VCC_VCC
 
 /* DIP switch */
 #define DIP_SWITCH_MATRIX_GRID  { {0,1} }

From 89b46eedd59d80c6bd53e4785e1ee0f846dd6098 Mon Sep 17 00:00:00 2001
From: Magne Lauritzen <mag.lauritzen@gmail.com>
Date: Tue, 9 Jan 2024 10:53:26 +0100
Subject: [PATCH 07/20] Raise Circumflex from the grave in sendstring_french.h
 (#22285)

---
 quantum/keymap_extras/sendstring_french.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/quantum/keymap_extras/sendstring_french.h b/quantum/keymap_extras/sendstring_french.h
index 0e585ec0937..238b650db37 100644
--- a/quantum/keymap_extras/sendstring_french.h
+++ b/quantum/keymap_extras/sendstring_french.h
@@ -56,7 +56,7 @@ const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
     KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
     KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
     KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
-    KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
+    KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
     KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
     KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
     KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
@@ -108,7 +108,7 @@ const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
     // P     Q        R        S        T        U        V        W
     FR_P,    FR_Q,    FR_R,    FR_S,    FR_T,    FR_U,    FR_V,    FR_W,
     // X     Y        Z        [        \        ]        ^        _
-    FR_X,    FR_Y,    FR_Z,    FR_LPRN, FR_UNDS, FR_RPRN, FR_CCED, FR_UNDS,
+    FR_X,    FR_Y,    FR_Z,    FR_LPRN, FR_UNDS, FR_RPRN, FR_CIRC, FR_UNDS,
     // `     a        b        c        d        e        f        g
     FR_EGRV, FR_A,    FR_B,    FR_C,    FR_D,    FR_E,    FR_F,    FR_G,
     // h     i        j        k        l        m        n        o

From 53f1e3b11f856b39a5aaade9d3434f47198e669b Mon Sep 17 00:00:00 2001
From: Markus Knutsson <markus.knutsson@tweety.se>
Date: Tue, 9 Jan 2024 11:17:46 +0100
Subject: [PATCH 08/20] Lotus 58 Glow - Added Auto shift to OLED, corrected
 OLED orientation (#22424)

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
---
 keyboards/tweetydabird/lotus58/info.json      | 22 +++++++-------
 .../lotus58/keymaps/default/keymap.c          | 29 +++++++++++++------
 keyboards/tweetydabird/lotus58/lotus58.c      |  2 +-
 keyboards/tweetydabird/lotus58/rules.mk       |  1 +
 4 files changed, 33 insertions(+), 21 deletions(-)
 create mode 100644 keyboards/tweetydabird/lotus58/rules.mk

diff --git a/keyboards/tweetydabird/lotus58/info.json b/keyboards/tweetydabird/lotus58/info.json
index 4e41fcc7bde..751f57c5198 100644
--- a/keyboards/tweetydabird/lotus58/info.json
+++ b/keyboards/tweetydabird/lotus58/info.json
@@ -16,11 +16,11 @@
         "bootmagic": true,
         "command": false,
         "console": false,
+        "encoder": true,
         "extrakey": true,
         "mousekey": true,
         "nkro": true,
         "oled": true,
-        "encoder": true,
         "rgblight": true,
         "split": true,
         "tri_layer": true
@@ -33,13 +33,10 @@
     "processor": "atmega32u4",
     "rgblight": {
         "led_count": 70,
-        "split": true,
-        "split_count": [35, 35],
+        "max_brightness": 175,
         "sleep": true,
-        "max_brightness": 175
-    },
-    "ws2812": {
-        "pin": "D3"
+        "split": true,
+        "split_count": [35, 35]
     },
     "split": {
         "bootmagic": {
@@ -70,10 +67,13 @@
     },
     "url": "https://lectronz.com/stores/tweetys-wild-thinking",
     "usb": {
-        "vid": "0xFEED",
-        "pid": "0x23B0",
         "device_version": "1.2.3",
-        "force_nkro": true
+        "force_nkro": true,
+        "pid": "0x23B0",
+        "vid": "0xFEED"
+    },
+    "ws2812": {
+        "pin": "D3"
     },
     "layouts": {
         "LAYOUT": {
@@ -141,4 +141,4 @@
             ]
         }
     }
-}
+}
\ No newline at end of file
diff --git a/keyboards/tweetydabird/lotus58/keymaps/default/keymap.c b/keyboards/tweetydabird/lotus58/keymaps/default/keymap.c
index 2a74f1b9a9d..4cb6b4cfe79 100644
--- a/keyboards/tweetydabird/lotus58/keymaps/default/keymap.c
+++ b/keyboards/tweetydabird/lotus58/keymaps/default/keymap.c
@@ -4,10 +4,10 @@
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     [0] = LAYOUT(
-      KC_ESC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_MPLY,        KC_MPLY, 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_LBRC,
-      KC_CAPS,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                             KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
-LCTL_T(KC_LEFT), KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_DOWN,        KC_UP,   KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, RCTL_T(KC_RGHT),
+        QK_GESC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_MPLY,        KC_MPLY, 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_LBRC,
+        KC_CAPS,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                             KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+        LCTL_T(KC_LEFT), KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_DOWN,        KC_UP,   KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, RCTL_T(KC_RGHT),
                                    KC_LGUI, TG(2),   KC_LALT, LSFT_T(KC_SPC), RSFT_T(KC_ENT),   KC_RALT, TG(1), RGUI_T(KC_BSPC)
     ),
 
@@ -28,8 +28,8 @@ LCTL_T(KC_LEFT), KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_DOWN,        KC
     ),
 
     [3] = LAYOUT(
-        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,        _______, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_SAI, RGB_TOG,
-        QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                          XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD,RGB_SAD, RGB_M_P,
+        QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, NK_TOGG, AC_TOGG, _______,        _______, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_SAI, RGB_TOG,
+        QK_RBT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                          XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD,RGB_SAD, RGB_M_P,
         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CAPS,                          XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_VAI, RGB_M_B,
         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUD, RGB_VAD, RGB_M_R,
                                    _______, _______, _______, _______,        _______, _______, _______, _______ 
@@ -39,9 +39,9 @@ LCTL_T(KC_LEFT), KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_DOWN,        KC
 #if defined(ENCODER_MAP_ENABLE)
 const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
     [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
-    [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
-    [2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
-    [3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
+    [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+    [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+    [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
 };
 #endif
 
@@ -76,6 +76,16 @@ static void print_status_narrow(void) {
     led_t led_usb_state = host_keyboard_led_state();
     oled_write_ln_P(PSTR("Caps- lock"), led_usb_state.caps_lock);
     
+#ifdef AUTO_SHIFT_ENABLE
+
+    bool autoshift = get_autoshift_state();
+    oled_advance_page(true);
+    oled_write_P(PSTR("Auto-Shift"), autoshift);
+    oled_advance_page(true);
+    
+#endif
+
+    
 }
 
 bool oled_task_user(void) {
@@ -83,4 +93,5 @@ bool oled_task_user(void) {
     print_status_narrow();
     return false;
 }
+
 #endif
\ No newline at end of file
diff --git a/keyboards/tweetydabird/lotus58/lotus58.c b/keyboards/tweetydabird/lotus58/lotus58.c
index a06c88111cc..f1e433a4265 100644
--- a/keyboards/tweetydabird/lotus58/lotus58.c
+++ b/keyboards/tweetydabird/lotus58/lotus58.c
@@ -6,7 +6,7 @@
 #ifdef OLED_ENABLE
 
 oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
-    return OLED_ROTATION_90;
+    return OLED_ROTATION_270;
 }
 
 void render_logo(void) {
diff --git a/keyboards/tweetydabird/lotus58/rules.mk b/keyboards/tweetydabird/lotus58/rules.mk
new file mode 100644
index 00000000000..4cd2262cc77
--- /dev/null
+++ b/keyboards/tweetydabird/lotus58/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = tweetydabird/lotus58/promicro
\ No newline at end of file

From 13f7b6824057e74e9e70781595378d594beeda55 Mon Sep 17 00:00:00 2001
From: Kai <9492636+kaine119@users.noreply.github.com>
Date: Tue, 9 Jan 2024 18:45:44 +0800
Subject: [PATCH 09/20] Fix user hook call for dynamic_macro_record_key
 (#22250)

---
 quantum/process_keycode/process_dynamic_macro.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/quantum/process_keycode/process_dynamic_macro.c b/quantum/process_keycode/process_dynamic_macro.c
index 30a51503dbb..214cd80a87e 100644
--- a/quantum/process_keycode/process_dynamic_macro.c
+++ b/quantum/process_keycode/process_dynamic_macro.c
@@ -133,9 +133,8 @@ void dynamic_macro_record_key(keyrecord_t *macro_buffer, keyrecord_t **macro_poi
     if (*macro_pointer - direction != macro2_end) {
         **macro_pointer = *record;
         *macro_pointer += direction;
-    } else {
-        dynamic_macro_record_key_user(direction, record);
     }
+    dynamic_macro_record_key_user(direction, record);
 
     dprintf("dynamic macro: slot %d length: %d/%d\n", DYNAMIC_MACRO_CURRENT_SLOT(), DYNAMIC_MACRO_CURRENT_LENGTH(macro_buffer, *macro_pointer), DYNAMIC_MACRO_CURRENT_CAPACITY(macro_buffer, macro2_end));
 }

From 31fdf7d89986d43eefe954d87a34cc831c561eb9 Mon Sep 17 00:00:00 2001
From: Thomas White <TomW1605@users.noreply.github.com>
Date: Tue, 9 Jan 2024 19:13:51 +0800
Subject: [PATCH 10/20] add pywinusb lib to list of example libs for HID
 (#22747)

---
 docs/feature_rawhid.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/feature_rawhid.md b/docs/feature_rawhid.md
index 094dd21c7e9..64cb42fdfee 100644
--- a/docs/feature_rawhid.md
+++ b/docs/feature_rawhid.md
@@ -28,7 +28,7 @@ To send data to the keyboard, you must first find a library for communicating wi
 * **Node.js:** [node-hid](https://github.com/node-hid/node-hid)
 * **C/C++:** [hidapi](https://github.com/libusb/hidapi)
 * **Java:** [purejavahidapi](https://github.com/nyholku/purejavahidapi) and [hid4java](https://github.com/gary-rowe/hid4java)
-* **Python:** [pyhidapi](https://pypi.org/project/hid/)
+* **Python:** [pyhidapi](https://pypi.org/project/hid/) and [pywinusb](https://pypi.org/project/pywinusb)
 
 Please refer to these libraries' own documentation for instructions on usage. Remember to close the device once you are finished with it!
 

From 6cc56f3f8cdde03ee76ed51942de5ffe8d59150c Mon Sep 17 00:00:00 2001
From: Joy Lee <joylee.lc@foxmail.com>
Date: Tue, 9 Jan 2024 19:24:11 +0800
Subject: [PATCH 11/20] Added skiller_sgk50_s3 keyboard (#22382)

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
---
 keyboards/sharkoon/skiller_sgk50_s3/config.h  |  18 +
 keyboards/sharkoon/skiller_sgk50_s3/halconf.h |  10 +
 keyboards/sharkoon/skiller_sgk50_s3/info.json | 452 ++++++++++++++++++
 .../skiller_sgk50_s3/keymaps/default/keymap.c |  24 +
 .../skiller_sgk50_s3/keymaps/via/keymap.c     |  24 +
 .../skiller_sgk50_s3/keymaps/via/rules.mk     |   1 +
 keyboards/sharkoon/skiller_sgk50_s3/mcuconf.h |   9 +
 keyboards/sharkoon/skiller_sgk50_s3/readme.md |  24 +
 keyboards/sharkoon/skiller_sgk50_s3/rules.mk  |   1 +
 9 files changed, 563 insertions(+)
 create mode 100644 keyboards/sharkoon/skiller_sgk50_s3/config.h
 create mode 100644 keyboards/sharkoon/skiller_sgk50_s3/halconf.h
 create mode 100644 keyboards/sharkoon/skiller_sgk50_s3/info.json
 create mode 100644 keyboards/sharkoon/skiller_sgk50_s3/keymaps/default/keymap.c
 create mode 100644 keyboards/sharkoon/skiller_sgk50_s3/keymaps/via/keymap.c
 create mode 100644 keyboards/sharkoon/skiller_sgk50_s3/keymaps/via/rules.mk
 create mode 100644 keyboards/sharkoon/skiller_sgk50_s3/mcuconf.h
 create mode 100644 keyboards/sharkoon/skiller_sgk50_s3/readme.md
 create mode 100644 keyboards/sharkoon/skiller_sgk50_s3/rules.mk

diff --git a/keyboards/sharkoon/skiller_sgk50_s3/config.h b/keyboards/sharkoon/skiller_sgk50_s3/config.h
new file mode 100644
index 00000000000..113ee2bab0f
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s3/config.h
@@ -0,0 +1,18 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* RGB Matrix */
+#define RGB_MATRIX_LED_COUNT 88
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_DEFAULT_VAL 80
+
+/* 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
diff --git a/keyboards/sharkoon/skiller_sgk50_s3/halconf.h b/keyboards/sharkoon/skiller_sgk50_s3/halconf.h
new file mode 100644
index 00000000000..8760386e815
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s3/halconf.h
@@ -0,0 +1,10 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next <halconf.h>
diff --git a/keyboards/sharkoon/skiller_sgk50_s3/info.json b/keyboards/sharkoon/skiller_sgk50_s3/info.json
new file mode 100644
index 00000000000..9dd0ddb50c3
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s3/info.json
@@ -0,0 +1,452 @@
+{
+    "manufacturer": "Sharkoon Technologies GmbH",
+    "keyboard_name": "SKILLER SGK50 S3",
+    "maintainer": "JoyLee",
+    "bootloader": "wb32-dfu",
+    "diode_direction": "ROW2COL",
+    "eeprom": {
+        "driver": "wear_leveling",
+        "wear_leveling": {
+            "driver": "spi_flash",
+            "backing_size": 4096
+        }
+    },
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true,
+        "rgb_matrix": true,
+        "rgblight": false
+    },
+    "matrix_pins": {
+        "cols": ["C0", "C1", "C2", "C3", "A6", "B1", "B10", "B11", "B12", "B13", "B14", "B15", "C6", "C7", "C8", "C9"],
+        "rows": ["A0", "A1", "A2", "A3", "A4", "C13"]
+    },
+    "processor": "WB32FQ95",
+    "rgb_matrix": {
+        "animations": {
+            "alphas_mods": true,
+            "band_pinwheel_sat": true,
+            "band_pinwheel_val": true,
+            "band_sat": true,
+            "band_spiral_sat": true,
+            "band_spiral_val": true,
+            "band_val": true,
+            "breathing": true,
+            "cycle_all": true,
+            "cycle_left_right": true,
+            "cycle_out_in": true,
+            "cycle_out_in_dual": true,
+            "cycle_pinwheel": true,
+            "cycle_spiral": true,
+            "cycle_up_down": true,
+            "digital_rain": true,
+            "dual_beacon": true,
+            "gradient_left_right": true,
+            "gradient_up_down": true,
+            "hue_breathing": true,
+            "hue_pendulum": true,
+            "hue_wave": true,
+            "jellybean_raindrops": true,
+            "multisplash": true,
+            "pixel_flow": true,
+            "pixel_fractal": true,
+            "pixel_rain": true,
+            "rainbow_beacon": true,
+            "rainbow_moving_chevron": true,
+            "rainbow_pinwheels": true,
+            "raindrops": true,
+            "solid_color": true,
+            "solid_multisplash": true,
+            "solid_reactive": true,
+            "solid_reactive_cross": true,
+            "solid_reactive_multicross": true,
+            "solid_reactive_multinexus": true,
+            "solid_reactive_multiwide": true,
+            "solid_reactive_nexus": true,
+            "solid_reactive_simple": true,
+            "solid_reactive_wide": true,
+            "solid_splash": true,
+            "splash": true,
+            "typing_heatmap": true
+        },
+        "driver": "ws2812",
+        "layout": [
+            {"matrix": [5, 6], "x": 90, "y": 64, "flags": 4},
+            {"matrix": [5, 10], "x": 149, "y": 64, "flags": 1},
+            {"matrix": [5, 11], "x": 164, "y": 64, "flags": 1},
+            {"matrix": [5, 12], "x": 179, "y": 64, "flags": 4},
+            {"matrix": [5, 13], "x": 194, "y": 64, "flags": 1},
+            {"matrix": [5, 14], "x": 209, "y": 64, "flags": 1},
+            {"matrix": [5, 15], "x": 224, "y": 64, "flags": 1},
+            {"matrix": [4, 15], "x": 224, "y": 51, "flags": 4},
+            {"matrix": [4, 14], "x": 209, "y": 51, "flags": 1},
+            {"matrix": [4, 12], "x": 179, "y": 51, "flags": 1},
+            {"matrix": [4, 11], "x": 164, "y": 51, "flags": 4},
+            {"matrix": [4, 10], "x": 149, "y": 51, "flags": 4},
+            {"matrix": [4, 9], "x": 134, "y": 51, "flags": 4},
+            {"matrix": [4, 8], "x": 119, "y": 51, "flags": 4},
+            {"matrix": [4, 7], "x": 105, "y": 51, "flags": 4},
+            {"matrix": [4, 6], "x": 90, "y": 51, "flags": 4},
+            {"matrix": [4, 5], "x": 75, "y": 51, "flags": 4},
+            {"matrix": [4, 4], "x": 60, "y": 51, "flags": 4},
+            {"matrix": [4, 3], "x": 45, "y": 51, "flags": 4},
+            {"matrix": [4, 2], "x": 30, "y": 51, "flags": 4},
+            {"matrix": [3, 2], "x": 30, "y": 38, "flags": 4},
+            {"matrix": [3, 3], "x": 45, "y": 38, "flags": 4},
+            {"matrix": [3, 4], "x": 60, "y": 38, "flags": 4},
+            {"matrix": [3, 5], "x": 75, "y": 38, "flags": 4},
+            {"matrix": [3, 6], "x": 90, "y": 38, "flags": 4},
+            {"matrix": [3, 7], "x": 105, "y": 38, "flags": 4},
+            {"matrix": [3, 8], "x": 119, "y": 38, "flags": 4},
+            {"matrix": [3, 9], "x": 134, "y": 38, "flags": 4},
+            {"matrix": [3, 10], "x": 149, "y": 38, "flags": 4},
+            {"matrix": [3, 11], "x": 164, "y": 38, "flags": 4},
+            {"matrix": [3, 12], "x": 179, "y": 38, "flags": 4},
+            {"matrix": [2, 13], "x": 194, "y": 38, "flags": 4},
+            {"x": 194, "y": 38, "flags": 4},
+            {"matrix": [3, 15], "x": 224, "y": 38, "flags": 4},
+            {"matrix": [2, 15], "x": 224, "y": 26, "flags": 4},
+            {"x": 194, "y": 26, "flags": 4},
+            {"matrix": [3, 13], "x": 194, "y": 26, "flags": 1},
+            {"matrix": [2, 12], "x": 179, "y": 26, "flags": 4},
+            {"matrix": [2, 11], "x": 164, "y": 26, "flags": 4},
+            {"matrix": [2, 10], "x": 149, "y": 26, "flags": 4},
+            {"matrix": [2, 9], "x": 134, "y": 26, "flags": 4},
+            {"matrix": [2, 8], "x": 119, "y": 26, "flags": 4},
+            {"matrix": [2, 7], "x": 105, "y": 26, "flags": 4},
+            {"matrix": [2, 6], "x": 90, "y": 26, "flags": 4},
+            {"matrix": [2, 5], "x": 75, "y": 26, "flags": 4},
+            {"matrix": [2, 4], "x": 60, "y": 26, "flags": 4},
+            {"matrix": [2, 3], "x": 45, "y": 26, "flags": 4},
+            {"matrix": [2, 2], "x": 30, "y": 26, "flags": 4},
+            {"matrix": [2, 1], "x": 15, "y": 26, "flags": 4},
+            {"matrix": [1, 1], "x": 15, "y": 13, "flags": 4},
+            {"matrix": [1, 2], "x": 30, "y": 13, "flags": 4},
+            {"matrix": [1, 3], "x": 45, "y": 13, "flags": 4},
+            {"matrix": [1, 4], "x": 60, "y": 13, "flags": 4},
+            {"matrix": [1, 5], "x": 75, "y": 13, "flags": 4},
+            {"matrix": [1, 6], "x": 90, "y": 13, "flags": 4},
+            {"matrix": [1, 7], "x": 105, "y": 13, "flags": 4},
+            {"matrix": [1, 8], "x": 119, "y": 13, "flags": 4},
+            {"matrix": [1, 9], "x": 134, "y": 13, "flags": 4},
+            {"matrix": [1, 10], "x": 149, "y": 13, "flags": 4},
+            {"matrix": [1, 11], "x": 164, "y": 13, "flags": 4},
+            {"matrix": [1, 12], "x": 179, "y": 13, "flags": 4},
+            {"matrix": [1, 13], "x": 194, "y": 13, "flags": 4},
+            {"matrix": [1, 15], "x": 224, "y": 13, "flags": 4},
+            {"matrix": [0, 15], "x": 224, "y": 0, "flags": 4},
+            {"matrix": [0, 14], "x": 209, "y": 0, "flags": 4},
+            {"matrix": [0, 13], "x": 194, "y": 0, "flags": 4},
+            {"matrix": [0, 12], "x": 179, "y": 0, "flags": 4},
+            {"matrix": [0, 11], "x": 164, "y": 0, "flags": 4},
+            {"matrix": [0, 10], "x": 149, "y": 0, "flags": 4},
+            {"matrix": [0, 9], "x": 134, "y": 0, "flags": 4},
+            {"matrix": [0, 8], "x": 119, "y": 0, "flags": 4},
+            {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4},
+            {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4},
+            {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4},
+            {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4},
+            {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4},
+            {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4},
+            {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4},
+            {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
+            {"matrix": [1, 0], "x": 0, "y": 13, "flags": 4},
+            {"matrix": [2, 0], "x": 0, "y": 26, "flags": 4},
+            {"matrix": [3, 0], "x": 0, "y": 38, "flags": 1},
+            {"matrix": [4, 0], "x": 0, "y": 51, "flags": 1},
+            {"matrix": [4, 0], "x": 0, "y": 51, "flags": 1},
+            {"matrix": [5, 0], "x": 0, "y": 64, "flags": 1},
+            {"matrix": [5, 1], "x": 15, "y": 64, "flags": 1},
+            {"matrix": [5, 2], "x": 30, "y": 64, "flags": 1},
+            {"matrix": [4, 1], "x": 15, "y": 51, "flags": 4}
+        ],
+        "max_brightness": 110,
+        "val_steps": 28
+    },
+    "url": "",
+    "usb": {
+        "device_version": "1.0.0",
+        "pid": "0x3663",
+        "suspend_wakeup_delay": 1000,
+        "vid": "0x6332"
+    },
+    "ws2812": {
+        "pin": "A8"
+    },
+    "community_layouts": [
+        "75_ansi",
+        "75_iso"
+    ],
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [
+                {"matrix": [0, 0], "x": 0, "y": 0},
+                {"matrix": [0, 1], "x": 1, "y": 0},
+                {"matrix": [0, 2], "x": 2, "y": 0},
+                {"matrix": [0, 3], "x": 3, "y": 0},
+                {"matrix": [0, 4], "x": 4, "y": 0},
+                {"matrix": [0, 5], "x": 5, "y": 0},
+                {"matrix": [0, 6], "x": 6, "y": 0},
+                {"matrix": [0, 7], "x": 7, "y": 0},
+                {"matrix": [0, 8], "x": 8, "y": 0},
+                {"matrix": [0, 9], "x": 9, "y": 0},
+                {"matrix": [0, 10], "x": 10, "y": 0},
+                {"matrix": [0, 11], "x": 11, "y": 0},
+                {"matrix": [0, 12], "x": 12, "y": 0},
+                {"matrix": [0, 13], "x": 13, "y": 0},
+                {"matrix": [0, 14], "x": 14, "y": 0},
+                {"matrix": [0, 15], "x": 15, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1},
+                {"matrix": [1, 1], "x": 1, "y": 1},
+                {"matrix": [1, 2], "x": 2, "y": 1},
+                {"matrix": [1, 3], "x": 3, "y": 1},
+                {"matrix": [1, 4], "x": 4, "y": 1},
+                {"matrix": [1, 5], "x": 5, "y": 1},
+                {"matrix": [1, 6], "x": 6, "y": 1},
+                {"matrix": [1, 7], "x": 7, "y": 1},
+                {"matrix": [1, 8], "x": 8, "y": 1},
+                {"matrix": [1, 9], "x": 9, "y": 1},
+                {"matrix": [1, 10], "x": 10, "y": 1},
+                {"matrix": [1, 11], "x": 11, "y": 1},
+                {"matrix": [1, 12], "x": 12, "y": 1},
+                {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+                {"matrix": [1, 15], "x": 15, "y": 1},
+                {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+                {"matrix": [2, 1], "x": 1.5, "y": 2},
+                {"matrix": [2, 2], "x": 2.5, "y": 2},
+                {"matrix": [2, 3], "x": 3.5, "y": 2},
+                {"matrix": [2, 4], "x": 4.5, "y": 2},
+                {"matrix": [2, 5], "x": 5.5, "y": 2},
+                {"matrix": [2, 6], "x": 6.5, "y": 2},
+                {"matrix": [2, 7], "x": 7.5, "y": 2},
+                {"matrix": [2, 8], "x": 8.5, "y": 2},
+                {"matrix": [2, 9], "x": 9.5, "y": 2},
+                {"matrix": [2, 10], "x": 10.5, "y": 2},
+                {"matrix": [2, 11], "x": 11.5, "y": 2},
+                {"matrix": [2, 12], "x": 12.5, "y": 2},
+                {"matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5},
+                {"matrix": [2, 15], "x": 15, "y": 2},
+                {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+                {"matrix": [3, 2], "x": 1.75, "y": 3},
+                {"matrix": [3, 3], "x": 2.75, "y": 3},
+                {"matrix": [3, 4], "x": 3.75, "y": 3},
+                {"matrix": [3, 5], "x": 4.75, "y": 3},
+                {"matrix": [3, 6], "x": 5.75, "y": 3},
+                {"matrix": [3, 7], "x": 6.75, "y": 3},
+                {"matrix": [3, 8], "x": 7.75, "y": 3},
+                {"matrix": [3, 9], "x": 8.75, "y": 3},
+                {"matrix": [3, 10], "x": 9.75, "y": 3},
+                {"matrix": [3, 11], "x": 10.75, "y": 3},
+                {"matrix": [3, 12], "x": 11.75, "y": 3},
+                {"matrix": [3, 13], "x": 12.75, "y": 3, "w": 2.25},
+                {"matrix": [3, 15], "x": 15, "y": 3},
+                {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"matrix": [4, 1], "x": 1.25, "y": 4},
+                {"matrix": [4, 2], "x": 2.25, "y": 4},
+                {"matrix": [4, 3], "x": 3.25, "y": 4},
+                {"matrix": [4, 4], "x": 4.25, "y": 4},
+                {"matrix": [4, 5], "x": 5.25, "y": 4},
+                {"matrix": [4, 6], "x": 6.25, "y": 4},
+                {"matrix": [4, 7], "x": 7.25, "y": 4},
+                {"matrix": [4, 8], "x": 8.25, "y": 4},
+                {"matrix": [4, 9], "x": 9.25, "y": 4},
+                {"matrix": [4, 10], "x": 10.25, "y": 4},
+                {"matrix": [4, 11], "x": 11.25, "y": 4},
+                {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+                {"matrix": [4, 14], "x": 14, "y": 4},
+                {"matrix": [4, 15], "x": 15, "y": 4},
+                {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+                {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+                {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+                {"matrix": [5, 6], "x": 3.75, "y": 5, "w": 6.25},
+                {"matrix": [5, 10], "x": 10, "y": 5},
+                {"matrix": [5, 11], "x": 11, "y": 5},
+                {"matrix": [5, 12], "x": 12, "y": 5},
+                {"matrix": [5, 13], "x": 13, "y": 5},
+                {"matrix": [5, 14], "x": 14, "y": 5},
+                {"matrix": [5, 15], "x": 15, "y": 5}
+            ]
+        },
+        "LAYOUT_75_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},
+                {"matrix": [0, 14], "x": 14, "y": 0},
+                {"matrix": [0, 15], "x": 15, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1},
+                {"matrix": [1, 1], "x": 1, "y": 1},
+                {"matrix": [1, 2], "x": 2, "y": 1},
+                {"matrix": [1, 3], "x": 3, "y": 1},
+                {"matrix": [1, 4], "x": 4, "y": 1},
+                {"matrix": [1, 5], "x": 5, "y": 1},
+                {"matrix": [1, 6], "x": 6, "y": 1},
+                {"matrix": [1, 7], "x": 7, "y": 1},
+                {"matrix": [1, 8], "x": 8, "y": 1},
+                {"matrix": [1, 9], "x": 9, "y": 1},
+                {"matrix": [1, 10], "x": 10, "y": 1},
+                {"matrix": [1, 11], "x": 11, "y": 1},
+                {"matrix": [1, 12], "x": 12, "y": 1},
+                {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+                {"matrix": [1, 15], "x": 15, "y": 1},
+                {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+                {"matrix": [2, 1], "x": 1.5, "y": 2},
+                {"matrix": [2, 2], "x": 2.5, "y": 2},
+                {"matrix": [2, 3], "x": 3.5, "y": 2},
+                {"matrix": [2, 4], "x": 4.5, "y": 2},
+                {"matrix": [2, 5], "x": 5.5, "y": 2},
+                {"matrix": [2, 6], "x": 6.5, "y": 2},
+                {"matrix": [2, 7], "x": 7.5, "y": 2},
+                {"matrix": [2, 8], "x": 8.5, "y": 2},
+                {"matrix": [2, 9], "x": 9.5, "y": 2},
+                {"matrix": [2, 10], "x": 10.5, "y": 2},
+                {"matrix": [2, 11], "x": 11.5, "y": 2},
+                {"matrix": [2, 12], "x": 12.5, "y": 2},
+                {"matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5},
+                {"matrix": [2, 15], "x": 15, "y": 2},
+                {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+                {"matrix": [3, 2], "x": 1.75, "y": 3},
+                {"matrix": [3, 3], "x": 2.75, "y": 3},
+                {"matrix": [3, 4], "x": 3.75, "y": 3},
+                {"matrix": [3, 5], "x": 4.75, "y": 3},
+                {"matrix": [3, 6], "x": 5.75, "y": 3},
+                {"matrix": [3, 7], "x": 6.75, "y": 3},
+                {"matrix": [3, 8], "x": 7.75, "y": 3},
+                {"matrix": [3, 9], "x": 8.75, "y": 3},
+                {"matrix": [3, 10], "x": 9.75, "y": 3},
+                {"matrix": [3, 11], "x": 10.75, "y": 3},
+                {"matrix": [3, 12], "x": 11.75, "y": 3},
+                {"matrix": [3, 13], "x": 12.75, "y": 3, "w": 2.25},
+                {"matrix": [3, 15], "x": 15, "y": 3},
+                {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
+                {"matrix": [4, 2], "x": 2.25, "y": 4},
+                {"matrix": [4, 3], "x": 3.25, "y": 4},
+                {"matrix": [4, 4], "x": 4.25, "y": 4},
+                {"matrix": [4, 5], "x": 5.25, "y": 4},
+                {"matrix": [4, 6], "x": 6.25, "y": 4},
+                {"matrix": [4, 7], "x": 7.25, "y": 4},
+                {"matrix": [4, 8], "x": 8.25, "y": 4},
+                {"matrix": [4, 9], "x": 9.25, "y": 4},
+                {"matrix": [4, 10], "x": 10.25, "y": 4},
+                {"matrix": [4, 11], "x": 11.25, "y": 4},
+                {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+                {"matrix": [4, 14], "x": 14, "y": 4},
+                {"matrix": [4, 15], "x": 15, "y": 4},
+                {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+                {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+                {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+                {"matrix": [5, 6], "x": 3.75, "y": 5, "w": 6.25},
+                {"matrix": [5, 10], "x": 10, "y": 5},
+                {"matrix": [5, 11], "x": 11, "y": 5},
+                {"matrix": [5, 12], "x": 12, "y": 5},
+                {"matrix": [5, 13], "x": 13, "y": 5},
+                {"matrix": [5, 14], "x": 14, "y": 5},
+                {"matrix": [5, 15], "x": 15, "y": 5}
+            ]
+        },
+        "LAYOUT_75_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, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1},
+                {"matrix": [1, 1], "x": 1, "y": 1},
+                {"matrix": [1, 2], "x": 2, "y": 1},
+                {"matrix": [1, 3], "x": 3, "y": 1},
+                {"matrix": [1, 4], "x": 4, "y": 1},
+                {"matrix": [1, 5], "x": 5, "y": 1},
+                {"matrix": [1, 6], "x": 6, "y": 1},
+                {"matrix": [1, 7], "x": 7, "y": 1},
+                {"matrix": [1, 8], "x": 8, "y": 1},
+                {"matrix": [1, 9], "x": 9, "y": 1},
+                {"matrix": [1, 10], "x": 10, "y": 1},
+                {"matrix": [1, 11], "x": 11, "y": 1},
+                {"matrix": [1, 12], "x": 12, "y": 1},
+                {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+                {"matrix": [1, 15], "x": 15, "y": 1},
+                {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+                {"matrix": [2, 1], "x": 1.5, "y": 2},
+                {"matrix": [2, 2], "x": 2.5, "y": 2},
+                {"matrix": [2, 3], "x": 3.5, "y": 2},
+                {"matrix": [2, 4], "x": 4.5, "y": 2},
+                {"matrix": [2, 5], "x": 5.5, "y": 2},
+                {"matrix": [2, 6], "x": 6.5, "y": 2},
+                {"matrix": [2, 7], "x": 7.5, "y": 2},
+                {"matrix": [2, 8], "x": 8.5, "y": 2},
+                {"matrix": [2, 9], "x": 9.5, "y": 2},
+                {"matrix": [2, 10], "x": 10.5, "y": 2},
+                {"matrix": [2, 11], "x": 11.5, "y": 2},
+                {"matrix": [2, 12], "x": 12.5, "y": 2},
+                {"matrix": [2, 15], "x": 15, "y": 2},
+                {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+                {"matrix": [3, 2], "x": 1.75, "y": 3},
+                {"matrix": [3, 3], "x": 2.75, "y": 3},
+                {"matrix": [3, 4], "x": 3.75, "y": 3},
+                {"matrix": [3, 5], "x": 4.75, "y": 3},
+                {"matrix": [3, 6], "x": 5.75, "y": 3},
+                {"matrix": [3, 7], "x": 6.75, "y": 3},
+                {"matrix": [3, 8], "x": 7.75, "y": 3},
+                {"matrix": [3, 9], "x": 8.75, "y": 3},
+                {"matrix": [3, 10], "x": 9.75, "y": 3},
+                {"matrix": [3, 11], "x": 10.75, "y": 3},
+                {"matrix": [3, 12], "x": 11.75, "y": 3},
+                {"matrix": [2, 13], "x": 12.75, "y": 3},
+                {"matrix": [3, 13], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+                {"matrix": [3, 15], "x": 15, "y": 3},
+                {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"matrix": [4, 1], "x": 1.25, "y": 4},
+                {"matrix": [4, 2], "x": 2.25, "y": 4},
+                {"matrix": [4, 3], "x": 3.25, "y": 4},
+                {"matrix": [4, 4], "x": 4.25, "y": 4},
+                {"matrix": [4, 5], "x": 5.25, "y": 4},
+                {"matrix": [4, 6], "x": 6.25, "y": 4},
+                {"matrix": [4, 7], "x": 7.25, "y": 4},
+                {"matrix": [4, 8], "x": 8.25, "y": 4},
+                {"matrix": [4, 9], "x": 9.25, "y": 4},
+                {"matrix": [4, 10], "x": 10.25, "y": 4},
+                {"matrix": [4, 11], "x": 11.25, "y": 4},
+                {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+                {"matrix": [4, 14], "x": 14, "y": 4},
+                {"matrix": [4, 15], "x": 15, "y": 4},
+                {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+                {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+                {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+                {"matrix": [5, 6], "x": 3.75, "y": 5, "w": 6.25},
+                {"matrix": [5, 10], "x": 10, "y": 5},
+                {"matrix": [5, 11], "x": 11, "y": 5},
+                {"matrix": [5, 12], "x": 12, "y": 5},
+                {"matrix": [5, 13], "x": 13, "y": 5},
+                {"matrix": [5, 14], "x": 14, "y": 5},
+                {"matrix": [5, 15], "x": 15, "y": 5}
+            ]
+        }
+    }
+}
diff --git a/keyboards/sharkoon/skiller_sgk50_s3/keymaps/default/keymap.c b/keyboards/sharkoon/skiller_sgk50_s3/keymaps/default/keymap.c
new file mode 100644
index 00000000000..dd09e560605
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s3/keymaps/default/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT_all(
+        KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_INS,  KC_HOME, KC_DEL,
+        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC,          KC_PGUP,
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,          KC_PGDN,
+        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,           KC_END,
+        KC_LSFT, KC_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_WHOM,
+        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(1),   KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+
+    [1] = LAYOUT_all(
+        EE_CLR,  KC_MPLY, KC_MPRV, KC_MNXT, KC_MUTE,  KC_VOLD, KC_VOLU, _______,  _______,  _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, _______,
+        _______, _______, _______, _______, _______,  _______, _______, _______,  _______,  _______, _______, RGB_SPD, RGB_SPI, _______,          RGB_SAI,
+        _______, _______, KC_UP,   _______, _______,  _______, _______, _______,  _______,  _______, _______, _______, _______, _______,          RGB_SAD,
+        _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,  _______, _______, _______,  _______,  _______, _______, _______,          _______,          _______,
+        _______, _______, _______, _______, _______,  _______, _______, _______,  _______,  _______, _______, _______,          _______, RGB_VAI, _______,
+        _______, GU_TOGG, _______,                             _______,                              _______, _______, _______, RGB_HUI, RGB_VAD, RGB_MOD
+    ),
+};
diff --git a/keyboards/sharkoon/skiller_sgk50_s3/keymaps/via/keymap.c b/keyboards/sharkoon/skiller_sgk50_s3/keymaps/via/keymap.c
new file mode 100644
index 00000000000..dd09e560605
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s3/keymaps/via/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT_all(
+        KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_INS,  KC_HOME, KC_DEL,
+        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC,          KC_PGUP,
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,          KC_PGDN,
+        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,           KC_END,
+        KC_LSFT, KC_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_WHOM,
+        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(1),   KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+
+    [1] = LAYOUT_all(
+        EE_CLR,  KC_MPLY, KC_MPRV, KC_MNXT, KC_MUTE,  KC_VOLD, KC_VOLU, _______,  _______,  _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, _______,
+        _______, _______, _______, _______, _______,  _______, _______, _______,  _______,  _______, _______, RGB_SPD, RGB_SPI, _______,          RGB_SAI,
+        _______, _______, KC_UP,   _______, _______,  _______, _______, _______,  _______,  _______, _______, _______, _______, _______,          RGB_SAD,
+        _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,  _______, _______, _______,  _______,  _______, _______, _______,          _______,          _______,
+        _______, _______, _______, _______, _______,  _______, _______, _______,  _______,  _______, _______, _______,          _______, RGB_VAI, _______,
+        _______, GU_TOGG, _______,                             _______,                              _______, _______, _______, RGB_HUI, RGB_VAD, RGB_MOD
+    ),
+};
diff --git a/keyboards/sharkoon/skiller_sgk50_s3/keymaps/via/rules.mk b/keyboards/sharkoon/skiller_sgk50_s3/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s3/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/sharkoon/skiller_sgk50_s3/mcuconf.h b/keyboards/sharkoon/skiller_sgk50_s3/mcuconf.h
new file mode 100644
index 00000000000..ca0e017ebdf
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s3/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef WB32_SPI_USE_QSPI
+#define WB32_SPI_USE_QSPI TRUE
diff --git a/keyboards/sharkoon/skiller_sgk50_s3/readme.md b/keyboards/sharkoon/skiller_sgk50_s3/readme.md
new file mode 100644
index 00000000000..46bc97d81fb
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s3/readme.md
@@ -0,0 +1,24 @@
+# SHARKOON SKILLER SGK50 S3
+
+![ISO](https://i.imgur.com/q35h8v0h.png)
+
+* Keyboard Maintainer: [JoyLee](https://github.com/itarze)
+* Hardware Supported: SHARKOON SKILLER SGK50 S3 PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+    make sharkoon/skiller_sgk50_s3:default
+
+Flashing example for this keyboard:
+
+    make sharkoon/skiller_sgk50_s3: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/sharkoon/skiller_sgk50_s3/rules.mk b/keyboards/sharkoon/skiller_sgk50_s3/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s3/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank

From c6ed3cdf1013f3bcea149e860499187b19c49940 Mon Sep 17 00:00:00 2001
From: Nick Brassel <nick@tzarc.org>
Date: Fri, 12 Jan 2024 23:08:11 +1100
Subject: [PATCH 12/20] Add more unwanted compilation output files to
 `.gitignore`. (#22894)

---
 .gitignore | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/.gitignore b/.gitignore
index f6401d9f832..ca9f00a7330 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,6 +18,11 @@
 *.lst
 *.map
 *.o
+*.a
+*.so
+*.dylib
+*.dll
+*.la
 *.stackdump
 *.sym
 

From 452ac581a56106af6f52cd66f8204b4b80274e24 Mon Sep 17 00:00:00 2001
From: ziptyze <mwcordier@gmail.com>
Date: Sat, 13 Jan 2024 01:13:09 -0500
Subject: [PATCH 13/20] [Keyboard] pi60rgb_v2 (#22156)

Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
---
 keyboards/1upkeyboards/pi60_rgb_v2/info.json  | 258 ++++++++++++++++++
 .../pi60_rgb_v2/keymaps/default/keymap.c      |  28 ++
 .../pi60_rgb_v2/keymaps/via/keymap.c          |  44 +++
 .../pi60_rgb_v2/keymaps/via/rules.mk          |   2 +
 keyboards/1upkeyboards/pi60_rgb_v2/readme.md  |  24 ++
 keyboards/1upkeyboards/pi60_rgb_v2/rules.mk   |   0
 6 files changed, 356 insertions(+)
 create mode 100644 keyboards/1upkeyboards/pi60_rgb_v2/info.json
 create mode 100644 keyboards/1upkeyboards/pi60_rgb_v2/keymaps/default/keymap.c
 create mode 100644 keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/keymap.c
 create mode 100644 keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/rules.mk
 create mode 100644 keyboards/1upkeyboards/pi60_rgb_v2/readme.md
 create mode 100644 keyboards/1upkeyboards/pi60_rgb_v2/rules.mk

diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/info.json b/keyboards/1upkeyboards/pi60_rgb_v2/info.json
new file mode 100644
index 00000000000..88b3e1ced4a
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/info.json
@@ -0,0 +1,258 @@
+{
+    "manufacturer": "1upkeyboards",
+    "keyboard_name": "pi60_rgb_v2",
+    "maintainer": "ziptyze",
+    "processor": "RP2040",
+    "bootloader": "rp2040",
+    "usb": {
+        "device_version": "1.0.0",
+        "pid": "0x5612",
+        "vid": "0x6F75"
+    },
+    "diode_direction": "COL2ROW",
+    "dynamic_keymap": {
+        "layer_count": 10
+    },
+    "features": {
+        "bootmagic": true,
+        "extrakey": true,
+        "mousekey": true,
+        "rgb_matrix": true,
+    },
+    "qmk": {
+        "locking": {
+            "enabled": true,
+            "resync": true
+        }
+    },
+    "matrix_pins": {
+        "cols": ["GP25", "GP1", "GP15", "GP4", "GP5", "GP14", "GP6", "GP7", "GP8", "GP13", "GP12", "GP9", "GP11", "GP10"],
+        "rows": ["GP29", "GP27", "GP26", "GP17", "GP16"]
+    },
+    "rgb_matrix": {
+        "max_brightness": 125,
+        "sleep": true,
+        "animations": {
+            "alphas_mods": true,
+            "band_pinwheel_sat": true,
+            "band_pinwheel_val": true,
+            "band_sat": true,
+            "band_spiral_sat": true,
+            "band_spiral_val": true,
+            "band_val": true,
+            "breathing": true,
+            "cycle_all": true,
+            "cycle_left_right": true,
+            "cycle_out_in": true,
+            "cycle_out_in_dual": true,
+            "cycle_pinwheel": true,
+            "cycle_spiral": true,
+            "cycle_up_down": true,
+            "digital_rain": true,
+            "dual_beacon": true,
+            "gradient_left_right": true,
+            "gradient_up_down": true,
+            "hue_breathing": true,
+            "hue_pendulum": true,
+            "hue_wave": true,
+            "jellybean_raindrops": true,
+            "multisplash": true,
+            "pixel_flow": true,
+            "pixel_rain": true,
+            "rainbow_beacon": true,
+            "rainbow_moving_chevron": true,
+            "rainbow_pinwheels": true,
+            "raindrops": true,
+            "solid_multisplash": true,
+            "solid_reactive": true,
+            "solid_reactive_cross": true,
+            "solid_reactive_multicross": true,
+            "solid_reactive_multinexus": true,
+            "solid_reactive_multiwide": true,
+            "solid_reactive_nexus": true,
+            "solid_reactive_simple": true,
+            "solid_reactive_wide": true,
+            "solid_splash": true,
+            "splash": true,
+            "typing_heatmap": true
+        },
+        "driver": "ws2812",
+        "layout": [
+            {"x": 4, "y": 5, "flags": 2},
+            {"matrix": [0, 0], "x": 8, "y": 7, "flags": 1},
+            {"matrix": [0, 1], "x": 23, "y": 7, "flags": 4},
+            {"x": 30, "y": 7, "flags": 2},
+            {"matrix": [0, 2], "x": 37, "y": 7, "flags": 4},
+            {"x": 45, "y": 7, "flags": 2},
+            {"matrix": [0, 3], "x": 52, "y": 7, "flags": 4},
+            {"x": 60, "y": 7, "flags": 2},
+            {"matrix": [0, 4], "x": 67, "y": 7, "flags": 4},
+            {"x": 75, "y": 7, "flags": 2},
+            {"matrix": [0, 5], "x": 82, "y": 7, "flags": 4},
+            {"x": 90, "y": 7, "flags": 2},
+            {"matrix": [0, 6], "x": 97, "y": 7, "flags": 4},
+            {"x": 105, "y": 7, "flags": 2},
+            {"matrix": [0, 7], "x": 112, "y": 7, "flags": 4},
+            {"x": 120, "y": 7, "flags": 2},
+            {"matrix": [0, 8], "x": 127, "y": 7, "flags": 4},
+            {"x": 135, "y": 7, "flags": 2},
+            {"matrix": [0, 9], "x": 142, "y": 7, "flags": 4},
+            {"x": 149, "y": 7, "flags": 2},
+            {"matrix": [0, 10], "x": 157, "y": 7, "flags": 4},
+            {"x": 164, "y": 7, "flags": 2},
+            {"matrix": [0, 11], "x": 172, "y": 7, "flags": 4},
+            {"x": 179, "y": 7, "flags": 2},
+            {"matrix": [0, 12], "x": 187, "y": 7, "flags": 4},
+            {"x": 198, "y": 7, "flags": 2},
+            {"matrix": [0, 13], "x": 209, "y": 7, "flags": 1},
+            {"x": 220, "y": 7, "flags": 2},
+            {"x": 220, "y": 19, "flags": 2},
+            {"matrix": [1, 13], "x": 213, "y": 19, "flags": 1},
+            {"matrix": [1, 12], "x": 194, "y": 19, "flags": 4},
+            {"matrix": [1, 11], "x": 179, "y": 19, "flags": 4},
+            {"matrix": [1, 10], "x": 164, "y": 19, "flags": 4},
+            {"matrix": [1, 9], "x": 149, "y": 19, "flags": 4},
+            {"matrix": [1, 8], "x": 134, "y": 19, "flags": 4},
+            {"matrix": [1, 7], "x": 119, "y": 19, "flags": 4},
+            {"matrix": [1, 6], "x": 105, "y": 19, "flags": 4},
+            {"matrix": [1, 5], "x": 90, "y": 19, "flags": 4},
+            {"matrix": [1, 4], "x": 75, "y": 19, "flags": 4},
+            {"matrix": [1, 3], "x": 60, "y": 19, "flags": 4},
+            {"matrix": [1, 2], "x": 45, "y": 19, "flags": 4},
+            {"matrix": [1, 1], "x": 30, "y": 19, "flags": 4},
+            {"matrix": [1, 0], "x": 11, "y": 19, "flags": 1},
+            {"x": 4, "y": 19, "flags": 2},
+            {"x": 4, "y": 32, "flags": 2},
+            {"matrix": [2, 0], "x": 13, "y": 32, "flags": 1},
+            {"matrix": [2, 1], "x": 34, "y": 32, "flags": 4},
+            {"matrix": [2, 2], "x": 49, "y": 32, "flags": 4},
+            {"matrix": [2, 3], "x": 64, "y": 32, "flags": 4},
+            {"matrix": [2, 4], "x": 79, "y": 32, "flags": 4},
+            {"matrix": [2, 5], "x": 94, "y": 32, "flags": 4},
+            {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4},
+            {"matrix": [2, 7], "x": 123, "y": 32, "flags": 4},
+            {"matrix": [2, 8], "x": 138, "y": 32, "flags": 4},
+            {"matrix": [2, 9], "x": 153, "y": 32, "flags": 4},
+            {"matrix": [2, 10], "x": 168, "y": 32, "flags": 4},
+            {"matrix": [2, 11], "x": 183, "y": 32, "flags": 4},
+            {"matrix": [2, 13], "x": 207, "y": 32, "flags": 1},
+            {"x": 220, "y": 32, "flags": 2},
+            {"x": 220, "y": 45, "flags": 2},
+            {"matrix": [3, 13], "x": 203, "y": 45, "flags": 1},
+            {"matrix": [3, 10], "x": 175, "y": 45, "flags": 4},
+            {"matrix": [3, 9], "x": 161, "y": 45, "flags": 4},
+            {"matrix": [3, 8], "x": 146, "y": 45, "flags": 4},
+            {"matrix": [3, 7], "x": 135, "y": 45, "flags": 4},
+            {"matrix": [3, 6], "x": 116, "y": 45, "flags": 4},
+            {"matrix": [3, 5], "x": 101, "y": 45, "flags": 4},
+            {"matrix": [3, 4], "x": 86, "y": 45, "flags": 4},
+            {"matrix": [3, 3], "x": 71, "y": 45, "flags": 4},
+            {"matrix": [3, 2], "x": 56, "y": 45, "flags": 4},
+            {"matrix": [3, 1], "x": 41, "y": 45, "flags": 4},
+            {"matrix": [3, 0], "x": 17, "y": 45, "flags": 1},
+            {"x": 4, "y": 45, "flags": 2},
+            {"x": 4, "y": 57, "flags": 2},
+            {"matrix": [4, 0], "x": 9, "y": 57, "flags": 1},
+            {"x": 15, "y": 57, "flags": 2},
+            {"x": 23, "y": 57, "flags": 2},
+            {"matrix": [4, 1], "x": 28, "y": 57, "flags": 1},
+            {"x": 34, "y": 57, "flags": 2},
+            {"x": 41, "y": 57, "flags": 2},
+            {"matrix": [4, 2], "x": 47, "y": 57, "flags": 1},
+            {"x": 53, "y": 57, "flags": 2},
+            {"x": 67, "y": 57, "flags": 2},
+            {"x": 71, "y": 57, "flags": 1},
+            {"x": 81, "y": 57, "flags": 2},
+            {"x": 95, "y": 57, "flags": 2},
+            {"matrix": [4, 5], "x": 103, "y": 57, "flags": 1},
+            {"x": 110, "y": 57, "flags": 2},
+            {"x": 125, "y": 57, "flags": 2},
+            {"x": 134, "y": 57, "flags": 1},
+            {"x": 139, "y": 57, "flags": 2},
+            {"x": 153, "y": 57, "flags": 2},
+            {"matrix": [4, 9], "x": 159, "y": 57, "flags": 1},
+            {"x": 165, "y": 57, "flags": 2},
+            {"x": 172, "y": 57, "flags": 2},
+            {"matrix": [4, 10], "x": 177, "y": 57, "flags": 1},
+            {"x": 183, "y": 57, "flags": 2},
+            {"x": 190, "y": 57, "flags": 2},
+            {"matrix": [4, 12], "x": 196, "y": 57, "flags": 1},
+            {"x": 202, "y": 57, "flags": 2},
+            {"x": 209, "y": 57, "flags": 2},
+            {"matrix": [4, 13], "x": 215, "y": 57, "flags": 1},
+            {"x": 220, "y": 57, "flags": 2}
+        ]
+    },
+    "ws2812": {
+        "driver": "vendor",
+        "pin": "GP28"
+    },
+    "community_layouts" : ["60_ansi"],
+    "layouts": {
+        "LAYOUT_60_ansi": {
+            "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": "BS", "matrix": [0, 13], "w": 2, "x": 13, "y": 0},
+                {"label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
+                {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+                {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+                {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+                {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+                {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+                {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+                {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+                {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+                {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+                {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+                {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+                {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+                {"label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1},
+                {"label": "Caps", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2},
+                {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+                {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+                {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+                {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+                {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+                {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+                {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+                {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+                {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+                {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+                {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+                {"label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2},
+                {"label": "LShift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3},
+                {"label": "Z", "matrix": [3, 1], "x": 2.25, "y": 3},
+                {"label": "X", "matrix": [3, 2], "x": 3.25, "y": 3},
+                {"label": "C", "matrix": [3, 3], "x": 4.25, "y": 3},
+                {"label": "V", "matrix": [3, 4], "x": 5.25, "y": 3},
+                {"label": "B", "matrix": [3, 5], "x": 6.25, "y": 3},
+                {"label": "N", "matrix": [3, 6], "x": 7.25, "y": 3},
+                {"label": "M", "matrix": [3, 7], "x": 8.25, "y": 3},
+                {"label": ",", "matrix": [3, 8], "x": 9.25, "y": 3},
+                {"label": ".", "matrix": [3, 9], "x": 10.25, "y": 3},
+                {"label": "/", "matrix": [3, 10], "x": 11.25, "y": 3},
+                {"label": "RShift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3},
+                {"label": "LCtrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4},
+                {"label": "LGui", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4},
+                {"label": "LAlt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4},
+                {"label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4},
+                {"label": "RAlt", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4},
+                {"label": "RGui", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4},
+                {"label": "FN", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4},
+                {"label": "RCtrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4}
+            ]
+        }
+    }
+}
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/default/keymap.c b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/default/keymap.c
new file mode 100644
index 00000000000..88f17a44e9f
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/* Copyright 2022 ziptyze
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    
+    [0] = LAYOUT_60_ansi(
+         KC_GRV,    KC_1,    KC_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, KC_APP,  KC_RCTL
+    )
+};
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/keymap.c b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/keymap.c
new file mode 100644
index 00000000000..5ed2ca48cde
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/keymap.c
@@ -0,0 +1,44 @@
+/* Copyright 2022 ziptyze
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [0] = LAYOUT_60_ansi(
+         KC_ESC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_MINS, KC_EQL,  KC_BSPC,
+         KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+        KC_CAPS,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,          KC_ENT,
+        KC_LSFT,             KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,          KC_RSFT,
+        KC_LCTL, KC_LGUI, KC_LALT,                          KC_SPC,                               KC_RALT, KC_RGUI,   MO(1), KC_RCTL
+    ),
+
+    [1] = LAYOUT_60_ansi(
+         KC_GRV, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,
+        KC_TRNS, KC_TRNS,   KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
+        KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS,  KC_HOME, KC_PGUP,          KC_TRNS,
+        KC_TRNS,          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END,  KC_PGDN,          KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS,                         KC_TRNS,                               KC_TRNS,   MO(2), KC_TRNS, KC_TRNS
+    ),
+
+    [2] = LAYOUT_60_ansi(
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,KC_TRNS, KC_TRNS,          KC_TRNS,
+        KC_TRNS,          RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, RGB_M_SN,RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS,          KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS,                         KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+    )
+};
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/rules.mk b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/readme.md b/keyboards/1upkeyboards/pi60_rgb_v2/readme.md
new file mode 100644
index 00000000000..87dc3f50305
--- /dev/null
+++ b/keyboards/1upkeyboards/pi60_rgb_v2/readme.md
@@ -0,0 +1,24 @@
+# 1up pi60 rgb v2
+
+![1up pi60 rgb v2](https://i.imgur.com/H1tRGZh.png)
+
+The pi60 RGB v2 is a 60% pcb from 1upkeyboards. This keyboard features an ANSI layout hot swap PCB with per-key in-switch RGB lighting as well as RGB underglow. The controller is a Raspberry Pi rp2040 microcontroller.
+
+* Keyboard Maintainer: [ziptyze](https://github.com/ziptyze)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make 1upkeyboards/pi60_rgb_v2:default
+
+Flashing example for this keyboard:
+
+    make 1upkeyboards/pi60_rgb_v2:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Bootloader button**: Hold the button on the back of the PCB and plug in the keyboard
diff --git a/keyboards/1upkeyboards/pi60_rgb_v2/rules.mk b/keyboards/1upkeyboards/pi60_rgb_v2/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d

From f40164985562ef5e19b892536e8d559d55fa6610 Mon Sep 17 00:00:00 2001
From: ziptyze <mwcordier@gmail.com>
Date: Sat, 13 Jan 2024 02:13:45 -0500
Subject: [PATCH 14/20] add lets split v3 (#22465)

Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
---
 keyboards/ziptyze/lets_split_v3/config.h      |  24 ++
 keyboards/ziptyze/lets_split_v3/info.json     | 305 ++++++++++++++++++
 .../lets_split_v3/keymaps/default/keymap.c    |  45 +++
 .../lets_split_v3/keymaps/via/keymap.c        |  45 +++
 .../lets_split_v3/keymaps/via/rules.mk        |   1 +
 keyboards/ziptyze/lets_split_v3/readme.md     |  26 ++
 keyboards/ziptyze/lets_split_v3/rules.mk      |   1 +
 7 files changed, 447 insertions(+)
 create mode 100644 keyboards/ziptyze/lets_split_v3/config.h
 create mode 100644 keyboards/ziptyze/lets_split_v3/info.json
 create mode 100644 keyboards/ziptyze/lets_split_v3/keymaps/default/keymap.c
 create mode 100644 keyboards/ziptyze/lets_split_v3/keymaps/via/keymap.c
 create mode 100644 keyboards/ziptyze/lets_split_v3/keymaps/via/rules.mk
 create mode 100644 keyboards/ziptyze/lets_split_v3/readme.md
 create mode 100644 keyboards/ziptyze/lets_split_v3/rules.mk

diff --git a/keyboards/ziptyze/lets_split_v3/config.h b/keyboards/ziptyze/lets_split_v3/config.h
new file mode 100644
index 00000000000..a4b5e40dcba
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/config.h
@@ -0,0 +1,24 @@
+/*
+Copyright 2023 ziptyze
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP16
+#define SERIAL_USART_RX_PIN GP17
+#define SERIAL_USART_PIN_SWAP
+
diff --git a/keyboards/ziptyze/lets_split_v3/info.json b/keyboards/ziptyze/lets_split_v3/info.json
new file mode 100644
index 00000000000..3db80047568
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/info.json
@@ -0,0 +1,305 @@
+{
+    "manufacturer": "ziptyze",
+    "keyboard_name": "Let's Split v3",
+    "maintainer": "ziptyze",
+    "board": "GENERIC_RP_RP2040",
+    "bootloader": "rp2040",
+    "processor": "RP2040",
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "mousekey": true,
+        "rgb_matrix": true
+    },
+    "dynamic_keymap": {
+        "layer_count": 10
+    },
+    "usb": {
+        "device_version": "1.0.0",
+        "pid": "0x6900",
+        "vid": "0x6F75"
+    },
+    "split": {
+        "transport": {
+            "sync": {
+                "matrix_state": true
+            }
+        },
+        "enabled": true
+    },
+    "matrix_pins": {
+        "direct": [
+            ["GP25", "GP27", "GP28", "GP4", "GP5", "GP8"],
+            ["GP24", "GP26", "GP29", "GP3", "GP6", "GP9"],
+            ["GP23", "GP21", "GP18", "GP15", "GP12", "GP10"],
+            ["GP22", "GP20", "GP19", "GP14", "GP13", "GP11"]
+        ]
+    },
+    "ws2812": {
+        "driver": "vendor",
+        "pin": "GP1"
+    },
+    "community_layouts": ["ortho_4x12"],
+    "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": 7, "y": 0},
+                {"matrix": [4, 1], "x": 8, "y": 0},
+                {"matrix": [4, 2], "x": 9, "y": 0},
+                {"matrix": [4, 3], "x": 10, "y": 0},
+                {"matrix": [4, 4], "x": 11, "y": 0},
+                {"matrix": [4, 5], "x": 12, "y": 0},
+
+                {"matrix": [1, 0], "x": 0, "y": 1},
+                {"matrix": [1, 1], "x": 1, "y": 1},
+                {"matrix": [1, 2], "x": 2, "y": 1},
+                {"matrix": [1, 3], "x": 3, "y": 1},
+                {"matrix": [1, 4], "x": 4, "y": 1},
+                {"matrix": [1, 5], "x": 5, "y": 1},
+
+                {"matrix": [5, 0], "x": 7, "y": 1},
+                {"matrix": [5, 1], "x": 8, "y": 1},
+                {"matrix": [5, 2], "x": 9, "y": 1},
+                {"matrix": [5, 3], "x": 10, "y": 1},
+                {"matrix": [5, 4], "x": 11, "y": 1},
+                {"matrix": [5, 5], "x": 12, "y": 1},
+
+                {"matrix": [2, 0], "x": 0, "y": 2},
+                {"matrix": [2, 1], "x": 1, "y": 2},
+                {"matrix": [2, 2], "x": 2, "y": 2},
+                {"matrix": [2, 3], "x": 3, "y": 2},
+                {"matrix": [2, 4], "x": 4, "y": 2},
+                {"matrix": [2, 5], "x": 5, "y": 2},
+
+                {"matrix": [6, 0], "x": 7, "y": 2},
+                {"matrix": [6, 1], "x": 8, "y": 2},
+                {"matrix": [6, 2], "x": 9, "y": 2},
+                {"matrix": [6, 3], "x": 10, "y": 2},
+                {"matrix": [6, 4], "x": 11, "y": 2},
+                {"matrix": [6, 5], "x": 12, "y": 2},
+
+                {"matrix": [3, 0], "x": 0, "y": 3},
+                {"matrix": [3, 1], "x": 1, "y": 3},
+                {"matrix": [3, 2], "x": 2, "y": 3},
+                {"matrix": [3, 3], "x": 3, "y": 3},
+                {"matrix": [3, 4], "x": 4, "y": 3},
+                {"matrix": [3, 5], "x": 5, "y": 3},
+
+                {"matrix": [7, 0], "x": 7, "y": 3},
+                {"matrix": [7, 1], "x": 8, "y": 3},
+                {"matrix": [7, 2], "x": 9, "y": 3},
+                {"matrix": [7, 3], "x": 10, "y": 3},
+                {"matrix": [7, 4], "x": 11, "y": 3},
+                {"matrix": [7, 5], "x": 12, "y": 3}
+            ]
+        }
+    },
+    "rgb_matrix": {
+        "driver": "ws2812",
+        "split_count": [63, 63],
+        "max_brightness": 200,
+        "sleep": true,
+        "animations": {
+            "alphas_mods": true,
+            "gradient_up_down": true,
+            "gradient_left_right": true,
+            "breathing": true,
+            "band_sat": true,
+            "band_val": true,
+            "band_pinwheel_sat": true,
+            "band_pinwheel_val": true,
+            "band_spiral_sat": true,
+            "band_spiral_val": true,
+            "cycle_all": true,
+            "cycle_left_right": true,
+            "cycle_up_down": true,
+            "cycle_out_in": true,
+            "cycle_out_in_dual": true,
+            "rainbow_moving_chevron": true,
+            "cycle_pinwheel": true,
+            "cycle_spiral": true,
+            "dual_beacon": true,
+            "rainbow_beacon": true,
+            "rainbow_pinwheels": true,
+            "raindrops": true,
+            "jellybean_raindrops": true,
+            "hue_breathing": true,
+            "hue_pendulum": true,
+            "hue_wave": true,
+            "pixel_fractal": true,
+            "pixel_flow": true,
+            "pixel_rain": true,
+            "typing_heatmap": true,
+            "digital_rain": true,
+            "solid_reactive_simple": true,
+            "solid_reactive": true,
+            "solid_reactive_wide": true,
+            "solid_reactive_multiwide": true,
+            "solid_reactive_cross": true,
+            "solid_reactive_multicross": true,
+            "solid_reactive_nexus": true,
+            "solid_reactive_multinexus": true,
+            "splash": true,
+            "multisplash": true,
+            "solid_splash": true,
+            "solid_multisplash": true
+        },
+        "layout": [
+            { "flags": 2, "x": 62, "y": 1 },
+            { "flags": 2, "x": 70, "y": 1 },
+            { "flags": 2, "x": 79, "y": 1 },
+            { "flags": 2, "x": 88, "y": 1 },
+            { "flags": 2, "x": 98, "y": 1 },
+            { "flags": 2, "x": 107, "y": 1 },
+            { "flags": 2, "x": 111, "y": 4 },
+            { "flags": 2, "x": 111, "y": 12 },
+
+            { "flags": 4, "matrix": [0, 5], "x": 103, "y": 8 },
+            { "flags": 4, "matrix": [0, 4], "x": 84, "y": 8 },
+            { "flags": 4, "matrix": [0, 3], "x": 65, "y": 8 },
+            { "flags": 4, "matrix": [1, 3], "x": 65, "y": 24 },
+            { "flags": 4, "matrix": [1, 4], "x": 84, "y": 24 },
+            { "flags": 4, "matrix": [1, 5], "x": 103, "y": 24 },
+
+            { "flags": 2, "x": 111, "y": 20 },
+            { "flags": 2, "x": 111, "y": 28 },
+            { "flags": 2, "x": 111, "y": 36 },
+            { "flags": 2, "x": 111, "y": 44 },
+
+            { "flags": 4, "matrix": [2, 5], "x": 103, "y": 40 },
+            { "flags": 4, "matrix": [2, 4], "x": 84, "y": 40 },
+            { "flags": 4, "matrix": [2, 3], "x": 65, "y": 40 },
+            { "flags": 1, "matrix": [3, 3], "x": 65, "y": 56 },
+            { "flags": 1, "matrix": [3, 4], "x": 84, "y": 56 },
+            { "flags": 1, "matrix": [3, 5], "x": 103, "y": 56 },
+
+            { "flags": 2, "x": 111, "y": 52 },
+            { "flags": 2, "x": 111, "y": 60 },
+            { "flags": 2, "x": 107, "y": 63 },
+            { "flags": 2, "x": 98, "y": 63 },
+            { "flags": 2, "x": 88, "y": 63 },
+            { "flags": 2, "x": 79, "y": 63 },
+            { "flags": 2, "x": 70, "y": 63 },
+            { "flags": 2, "x": 61, "y": 63 },
+            { "flags": 2, "x": 51, "y": 63 },
+            { "flags": 2, "x": 42, "y": 63 },
+            { "flags": 2, "x": 33, "y": 63 },
+            { "flags": 2, "x": 23, "y": 63 },
+            { "flags": 2, "x": 14, "y": 63 },
+            { "flags": 2, "x": 5, "y": 63 },
+            { "flags": 2, "x": 1, "y": 60 },
+            { "flags": 2, "x": 1, "y": 52 },
+
+            { "flags": 1, "matrix": [3, 0], "x": 9, "y": 56 },
+            { "flags": 1, "matrix": [3, 1], "x": 28, "y": 56 },
+            { "flags": 1, "matrix": [3, 2], "x": 47, "y": 56 },
+            { "flags": 4, "matrix": [2, 2], "x": 47, "y": 40 },
+            { "flags": 4, "matrix": [2, 1], "x": 28, "y": 40 },
+            { "flags": 1, "matrix": [2, 0], "x": 9, "y": 40 },
+
+            { "flags": 2, "x": 1, "y": 44 },
+            { "flags": 2, "x": 1, "y": 36 },
+            { "flags": 2, "x": 1, "y": 28 },
+            { "flags": 2, "x": 1, "y": 20 },
+
+            { "flags": 1, "matrix": [1, 0], "x": 9, "y": 24 },
+            { "flags": 4, "matrix": [1, 1], "x": 28, "y": 24 },
+            { "flags": 4, "matrix": [1, 2], "x": 47, "y": 24 },
+            { "flags": 4, "matrix": [0, 2], "x": 47, "y": 8 },
+            { "flags": 4, "matrix": [0, 1], "x": 28, "y": 8 },
+            { "flags": 1, "matrix": [0, 0], "x": 9, "y": 8 },
+
+            { "flags": 2, "x": 1, "y": 12 },
+            { "flags": 2, "x": 1, "y": 4 },
+            { "flags": 2, "x": 5, "y": 1 },
+            { "flags": 2, "x": 13, "y": 1 },
+            { "flags": 2, "x": 28, "y": 1 },
+            { "flags": 2, "x": 37, "y": 1 },
+            { "flags": 2, "x": 47, "y": 1 },
+
+
+
+
+            { "flags": 2, "x": 174, "y": 1 },
+            { "flags": 2, "x": 182, "y": 1 },
+            { "flags": 2, "x": 191, "y": 1 },
+            { "flags": 2, "x": 200, "y": 1 },
+            { "flags": 2, "x": 210, "y": 1 },
+            { "flags": 2, "x": 219, "y": 1 },
+            { "flags": 2, "x": 223, "y": 4 },
+            { "flags": 2, "x": 223, "y": 12 },
+
+            { "flags": 1, "matrix": [4, 5], "x": 215, "y": 8 },
+            { "flags": 4, "matrix": [4, 4], "x": 196, "y": 8 },
+            { "flags": 4, "matrix": [4, 3], "x": 177, "y": 8 },
+            { "flags": 4, "matrix": [5, 3], "x": 177, "y": 24 },
+            { "flags": 4, "matrix": [5, 4], "x": 196, "y": 24 },
+            { "flags": 1, "matrix": [5, 5], "x": 215, "y": 24 },
+
+            { "flags": 2, "x": 223, "y": 20 },
+            { "flags": 2, "x": 223, "y": 28 },
+            { "flags": 2, "x": 223, "y": 36 },
+            { "flags": 2, "x": 223, "y": 44 },
+
+            { "flags": 1, "matrix": [6, 5], "x": 215, "y": 40 },
+            { "flags": 4, "matrix": [6, 4], "x": 196, "y": 40 },
+            { "flags": 4, "matrix": [6, 3], "x": 177, "y": 40 },
+            { "flags": 1, "matrix": [7, 3], "x": 177, "y": 56 },
+            { "flags": 1, "matrix": [7, 4], "x": 196, "y": 56 },
+            { "flags": 1, "matrix": [7, 5], "x": 215, "y": 56 },
+
+            { "flags": 2, "x": 223, "y": 52 },
+            { "flags": 2, "x": 223, "y": 60 },
+            { "flags": 2, "x": 219, "y": 63 },
+            { "flags": 2, "x": 210, "y": 63 },
+            { "flags": 2, "x": 200, "y": 63 },
+            { "flags": 2, "x": 191, "y": 63 },
+            { "flags": 2, "x": 182, "y": 63 },
+            { "flags": 2, "x": 173, "y": 63 },
+            { "flags": 2, "x": 163, "y": 63 },
+            { "flags": 2, "x": 154, "y": 63 },
+            { "flags": 2, "x": 145, "y": 63 },
+            { "flags": 2, "x": 135, "y": 63 },
+            { "flags": 2, "x": 126, "y": 63 },
+            { "flags": 2, "x": 117, "y": 63 },
+            { "flags": 2, "x": 113, "y": 60 },
+            { "flags": 2, "x": 113, "y": 52 },
+
+            { "flags": 1, "matrix": [7, 0], "x": 121, "y": 56 },
+            { "flags": 1, "matrix": [7, 1], "x": 140, "y": 56 },
+            { "flags": 1, "matrix": [7, 2], "x": 159, "y": 56 },
+            { "flags": 4, "matrix": [6, 2], "x": 159, "y": 40 },
+            { "flags": 4, "matrix": [6, 1], "x": 140, "y": 40 },
+            { "flags": 4, "matrix": [6, 0], "x": 121, "y": 40 },
+
+            { "flags": 2, "x": 113, "y": 44 },
+            { "flags": 2, "x": 113, "y": 36 },
+            { "flags": 2, "x": 113, "y": 28 },
+            { "flags": 2, "x": 113, "y": 20 },
+
+            { "flags": 4, "matrix": [5, 0], "x": 121, "y": 24 },
+            { "flags": 4, "matrix": [5, 1], "x": 148, "y": 24 },
+            { "flags": 4, "matrix": [5, 2], "x": 159, "y": 24 },
+            { "flags": 4, "matrix": [4, 2], "x": 159, "y": 8 },
+            { "flags": 4, "matrix": [4, 1], "x": 148, "y": 8 },
+            { "flags": 4, "matrix": [4, 0], "x": 121, "y": 8 },
+
+            { "flags": 2, "x": 113, "y": 12 },
+            { "flags": 2, "x": 113, "y": 4 },
+            { "flags": 2, "x": 117, "y": 1 },
+            { "flags": 2, "x": 140, "y": 1 },
+            { "flags": 2, "x": 149, "y": 1 },
+            { "flags": 2, "x": 159, "y": 1 },
+            { "flags": 2, "x": 169, "y": 1 }
+        ]
+    }
+}
diff --git a/keyboards/ziptyze/lets_split_v3/keymaps/default/keymap.c b/keyboards/ziptyze/lets_split_v3/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d640e1bf234
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Danny Nguyen <danny@keeb.io>
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT_ortho_4x12(
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    KC_GRV,  KC_LCTL, KC_LALT, KC_LGUI, TL_LOWR, KC_SPC,  KC_SPC,  TL_UPPR, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+  ),
+
+  [1] = LAYOUT_ortho_4x12(
+    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,
+    BL_STEP, 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
+  ),
+
+  [2] = LAYOUT_ortho_4x12(
+    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
+  ),
+
+  [3] = LAYOUT_ortho_4x12(
+    _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+    _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+  )
+};
diff --git a/keyboards/ziptyze/lets_split_v3/keymaps/via/keymap.c b/keyboards/ziptyze/lets_split_v3/keymaps/via/keymap.c
new file mode 100644
index 00000000000..d640e1bf234
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/keymaps/via/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Danny Nguyen <danny@keeb.io>
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT_ortho_4x12(
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    KC_GRV,  KC_LCTL, KC_LALT, KC_LGUI, TL_LOWR, KC_SPC,  KC_SPC,  TL_UPPR, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+  ),
+
+  [1] = LAYOUT_ortho_4x12(
+    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,
+    BL_STEP, 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
+  ),
+
+  [2] = LAYOUT_ortho_4x12(
+    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
+  ),
+
+  [3] = LAYOUT_ortho_4x12(
+    _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+    _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+  )
+};
diff --git a/keyboards/ziptyze/lets_split_v3/keymaps/via/rules.mk b/keyboards/ziptyze/lets_split_v3/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/ziptyze/lets_split_v3/readme.md b/keyboards/ziptyze/lets_split_v3/readme.md
new file mode 100644
index 00000000000..18b967d9057
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/readme.md
@@ -0,0 +1,26 @@
+# Let's Split v3
+
+![Let's Split v3](https://i.imgur.com/ksZ64dKh.jpg)
+
+Version 3 of the Let's Split keyboard, originally designed by Wootapatoot. This version features identical PCBs for both halves powered by an RP2040 controller. Each half features full hot swap capability as well as in-switch addressable LEDs and 39 1mm underglow LEDs.
+
+* Keyboard Maintainer: [ziptyze](https://github.com/ziptyze)
+* Hardware Supported: Let's Split v3 PCB
+* Hardware Availability: [1upkeyboards](https://1upkeyboards.com/shop/keyboard-kits/diy-40-kits/lets-split-v3/#choose-your-kit)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make ziptyze/lets_split_v3:default
+
+Flashing example for this keyboard:
+
+    make ziptyze/lets_split_v3:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix, the top left key, and plug in the keyboard
+* **BOOTSEL button**: Hold down the reset button on the PCB, and plug in the keyboard
diff --git a/keyboards/ziptyze/lets_split_v3/rules.mk b/keyboards/ziptyze/lets_split_v3/rules.mk
new file mode 100644
index 00000000000..161ec22b16e
--- /dev/null
+++ b/keyboards/ziptyze/lets_split_v3/rules.mk
@@ -0,0 +1 @@
+SERIAL_DRIVER = vendor

From bea97291dc4f20de6114b73c7eda7cf7c5fe5fcf Mon Sep 17 00:00:00 2001
From: Duncan Sutherland <dunk2k_2000@hotmail.com>
Date: Sat, 13 Jan 2024 07:22:15 +0000
Subject: [PATCH 15/20] Remove community layout from mode/m80*/m80*h (#22461)

---
 keyboards/mode/m80v1/m80h/info.json   | 1 -
 keyboards/mode/m80v2/m80v2h/info.json | 1 -
 2 files changed, 2 deletions(-)

diff --git a/keyboards/mode/m80v1/m80h/info.json b/keyboards/mode/m80v1/m80h/info.json
index be7338c6f87..f132f25fe58 100644
--- a/keyboards/mode/m80v1/m80h/info.json
+++ b/keyboards/mode/m80v1/m80h/info.json
@@ -15,7 +15,6 @@
     "diode_direction": "COL2ROW",
     "processor": "STM32F072",
     "bootloader": "stm32-dfu",
-    "community_layouts": ["tkl_ansi"],
     "layout_aliases": {
         "LAYOUT_eighty_m80h": "LAYOUT_tkl_ansi"
     },
diff --git a/keyboards/mode/m80v2/m80v2h/info.json b/keyboards/mode/m80v2/m80v2h/info.json
index 03a2d912bcd..b332a6853b8 100644
--- a/keyboards/mode/m80v2/m80v2h/info.json
+++ b/keyboards/mode/m80v2/m80v2h/info.json
@@ -19,7 +19,6 @@
     },
     "processor": "STM32F072",
     "bootloader": "stm32-dfu",
-    "community_layouts": ["tkl_ansi"],
     "layout_aliases": {
         "LAYOUT_m80v2h": "LAYOUT_tkl_ansi"
     },

From 624d0964c16557684c84dd3640071bb11b313c27 Mon Sep 17 00:00:00 2001
From: Wilba <wilba@wilba.tech>
Date: Sat, 13 Jan 2024 18:37:10 +1100
Subject: [PATCH 16/20] Added WT20-H1 (HIBI JUNIOR) (#22893)

---
 keyboards/wilba_tech/wt20_h1/info.json        | 80 +++++++++++++++++++
 .../wt20_h1/keymaps/default/keymap.c          | 14 ++++
 .../wilba_tech/wt20_h1/keymaps/via/keymap.c   |  4 +
 .../wilba_tech/wt20_h1/keymaps/via/rules.mk   |  1 +
 keyboards/wilba_tech/wt20_h1/readme.md        | 19 +++++
 keyboards/wilba_tech/wt20_h1/rules.mk         |  1 +
 6 files changed, 119 insertions(+)
 create mode 100644 keyboards/wilba_tech/wt20_h1/info.json
 create mode 100644 keyboards/wilba_tech/wt20_h1/keymaps/default/keymap.c
 create mode 100644 keyboards/wilba_tech/wt20_h1/keymaps/via/keymap.c
 create mode 100644 keyboards/wilba_tech/wt20_h1/keymaps/via/rules.mk
 create mode 100644 keyboards/wilba_tech/wt20_h1/readme.md
 create mode 100644 keyboards/wilba_tech/wt20_h1/rules.mk

diff --git a/keyboards/wilba_tech/wt20_h1/info.json b/keyboards/wilba_tech/wt20_h1/info.json
new file mode 100644
index 00000000000..77905e275e0
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/info.json
@@ -0,0 +1,80 @@
+{
+    "manufacturer": "wilba.tech",
+    "keyboard_name": "WT20-H1",
+    "maintainer": "Wilba",
+    "bootloader": "atmel-dfu",
+    "build": {
+        "lto": true
+    },
+    "diode_direction": "COL2ROW",
+    "features": {
+        "bootmagic": true,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true
+    },
+    "matrix_pins": {
+        "cols": ["F4", "F0", "B2", "B1"],
+        "rows": ["B3", "F1", "F5", "F6", "F7"]
+    },
+    "processor": "atmega32u4",
+    "qmk": {
+        "locking": {
+            "enabled": true,
+            "resync": true
+        }
+    },
+    "usb": {
+        "device_version": "0.0.1",
+        "pid": "0x0041",
+        "vid": "0x6582"
+    },
+    "community_layouts": ["ortho_5x4", "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": [1, 3], "x": 3, "y": 1, "h": 2},
+                {"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, "h": 2},
+                {"matrix": [4, 0], "x": 0, "y": 4, "w": 2},
+                {"matrix": [4, 2], "x": 2, "y": 4}
+            ]
+        },
+        "LAYOUT_ortho_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": [1, 3], "x": 3, "y": 1},
+                {"matrix": [2, 0], "x": 0, "y": 2},
+                {"matrix": [2, 1], "x": 1, "y": 2},
+                {"matrix": [2, 2], "x": 2, "y": 2},
+                {"matrix": [2, 3], "x": 3, "y": 2},
+                {"matrix": [3, 0], "x": 0, "y": 3},
+                {"matrix": [3, 1], "x": 1, "y": 3},
+                {"matrix": [3, 2], "x": 2, "y": 3},
+                {"matrix": [3, 3], "x": 3, "y": 3},
+                {"matrix": [4, 0], "x": 0, "y": 4},
+                {"matrix": [4, 1], "x": 1, "y": 4},
+                {"matrix": [4, 2], "x": 2, "y": 4},
+                {"matrix": [4, 3], "x": 3, "y": 4}
+            ]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/wilba_tech/wt20_h1/keymaps/default/keymap.c b/keyboards/wilba_tech/wt20_h1/keymaps/default/keymap.c
new file mode 100644
index 00000000000..541fbd05fb1
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/keymaps/default/keymap.c
@@ -0,0 +1,14 @@
+// Copyright 2024 Jason Williams (@wilba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#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_PPLS,
+    KC_P4,   KC_P5,   KC_P6,   KC_PPLS,
+    KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+    KC_P0,   KC_P0,   KC_PDOT, KC_PENT
+  ),
+};
diff --git a/keyboards/wilba_tech/wt20_h1/keymaps/via/keymap.c b/keyboards/wilba_tech/wt20_h1/keymaps/via/keymap.c
new file mode 100644
index 00000000000..4fc052443e4
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/keymaps/via/keymap.c
@@ -0,0 +1,4 @@
+// Copyright 2024 Jason Williams (@wilba)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "../default/keymap.c"
diff --git a/keyboards/wilba_tech/wt20_h1/keymaps/via/rules.mk b/keyboards/wilba_tech/wt20_h1/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt20_h1/readme.md b/keyboards/wilba_tech/wt20_h1/readme.md
new file mode 100644
index 00000000000..586b7e36f4e
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/readme.md
@@ -0,0 +1,19 @@
+# wilba.tech WT20-H1
+
+WT20-H1 is a hotswap numpad PCB supporting split plus, enter and zero keys (i.e. 5x4 ortho).
+
+Initially designed for the [HIBI JUNIOR](https://hibi.mx/products/junior-r1)
+
+-   Keyboard Maintainer: [wilba](https://github.com/wilba)
+-   Hardware Supported: wilba.tech WT20-H1-HIBI
+-   Hardware Availability: [HIBI](https://hibi.mx/products/junior-r1)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make wilba_tech/wt20_h1:default
+
+Flashing example for this keyboard:
+
+    make wilba_tech/wt20_h1: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/wilba_tech/wt20_h1/rules.mk b/keyboards/wilba_tech/wt20_h1/rules.mk
new file mode 100644
index 00000000000..c80812f6e0a
--- /dev/null
+++ b/keyboards/wilba_tech/wt20_h1/rules.mk
@@ -0,0 +1 @@
+# This file is intentionally blank

From 33c5a64b5a49a3bfa0a8fd251e4ea8a394362b21 Mon Sep 17 00:00:00 2001
From: Vertex-kb <102476474+Vertex-kb@users.noreply.github.com>
Date: Sun, 14 Jan 2024 11:10:26 +0800
Subject: [PATCH 17/20] add Cycle8 (#22734)

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
---
 keyboards/vertex/cycle8/config.h              |   6 +
 keyboards/vertex/cycle8/halconf.h             |   8 +
 keyboards/vertex/cycle8/info.json             | 523 ++++++++++++++++++
 .../vertex/cycle8/keymaps/default/keymap.c    |  16 +
 keyboards/vertex/cycle8/keymaps/via/keymap.c  |  16 +
 keyboards/vertex/cycle8/keymaps/via/rules.mk  |   2 +
 keyboards/vertex/cycle8/mcuconf.h             |   9 +
 keyboards/vertex/cycle8/readme.md             |  27 +
 keyboards/vertex/cycle8/rules.mk              |   1 +
 9 files changed, 608 insertions(+)
 create mode 100644 keyboards/vertex/cycle8/config.h
 create mode 100644 keyboards/vertex/cycle8/halconf.h
 create mode 100644 keyboards/vertex/cycle8/info.json
 create mode 100644 keyboards/vertex/cycle8/keymaps/default/keymap.c
 create mode 100644 keyboards/vertex/cycle8/keymaps/via/keymap.c
 create mode 100644 keyboards/vertex/cycle8/keymaps/via/rules.mk
 create mode 100644 keyboards/vertex/cycle8/mcuconf.h
 create mode 100644 keyboards/vertex/cycle8/readme.md
 create mode 100644 keyboards/vertex/cycle8/rules.mk

diff --git a/keyboards/vertex/cycle8/config.h b/keyboards/vertex/cycle8/config.h
new file mode 100644
index 00000000000..ea83fd49fa4
--- /dev/null
+++ b/keyboards/vertex/cycle8/config.h
@@ -0,0 +1,6 @@
+// Copyright 2022 Eason
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define WS2812_SPI_DRIVER SPID2
diff --git a/keyboards/vertex/cycle8/halconf.h b/keyboards/vertex/cycle8/halconf.h
new file mode 100644
index 00000000000..7dda577da1b
--- /dev/null
+++ b/keyboards/vertex/cycle8/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Eason
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next <halconf.h>
diff --git a/keyboards/vertex/cycle8/info.json b/keyboards/vertex/cycle8/info.json
new file mode 100644
index 00000000000..100c2d21f16
--- /dev/null
+++ b/keyboards/vertex/cycle8/info.json
@@ -0,0 +1,523 @@
+{
+    "keyboard_name": "Cycle8",
+    "manufacturer": "vertex",
+    "url": "",
+    "maintainer": "Eason",
+    "usb": {
+        "vid": "0x8A94",
+        "pid": "0x8F70",
+        "device_version": "0.0.1",
+        "force_nkro": true
+    },
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true,
+        "rgblight": true
+    },
+    "rgblight": {
+        "led_count": 7,
+        "animations": {
+            "breathing": true,
+            "rainbow_mood": true,
+            "rainbow_swirl": true,
+            "snake": true,
+            "knight": true,
+            "christmas": true,
+            "static_gradient": true,
+            "rgb_test": true,
+            "alternating": true,
+            "twinkle": true
+        }
+    },
+    "ws2812": {
+        "pin": "B15",
+        "driver": "spi"
+    },
+    "indicators": {
+        "caps_lock": "C13",
+        "scroll_lock": "A10"
+    },
+    "matrix_pins": {
+        "rows": ["B7", "B6", "B5", "B4", "B3","A15"],
+        "cols": ["A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "B10", "B11", "B12", "B13", "B14", "A8", "A9"]
+    },
+    "diode_direction": "COL2ROW",
+    "processor": "STM32F103",
+    "bootloader": "uf2boot",
+    "community_layouts": [
+        "tkl_ansi",
+        "tkl_ansi_split_bs_rshift",
+        "tkl_iso",
+        "tkl_iso_split_bs_rshift",
+    ],
+    "layouts":{
+        "LAYOUT_all": {
+            "layout": [
+                {"matrix": [0, 0], "x": 0, "y": 0},
+                {"matrix": [0, 1], "x": 2, "y": 0},
+                {"matrix": [0, 2], "x": 3, "y": 0},
+                {"matrix": [0, 3], "x": 4, "y": 0},
+                {"matrix": [0, 4], "x": 5, "y": 0},
+                {"matrix": [0, 5], "x": 6.5, "y": 0},
+                {"matrix": [0, 6], "x": 7.5, "y": 0},
+                {"matrix": [0, 7], "x": 8.5, "y": 0},
+                {"matrix": [0, 8], "x": 9.5, "y": 0},
+                {"matrix": [0, 9], "x": 11, "y": 0},
+                {"matrix": [0, 10], "x": 12, "y": 0},
+                {"matrix": [0, 11], "x": 13, "y": 0},
+                {"matrix": [0, 12], "x": 14, "y": 0},
+                {"matrix": [0, 13], "x": 15.25, "y": 0},
+                {"matrix": [0, 14], "x": 16.25, "y": 0},
+                {"matrix": [0, 15], "x": 17.25, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1.5},
+                {"matrix": [1, 1], "x": 1, "y": 1.5},
+                {"matrix": [1, 2], "x": 2, "y": 1.5},
+                {"matrix": [1, 3], "x": 3, "y": 1.5},
+                {"matrix": [1, 4], "x": 4, "y": 1.5},
+                {"matrix": [1, 5], "x": 5, "y": 1.5},
+                {"matrix": [1, 6], "x": 6, "y": 1.5},
+                {"matrix": [1, 7], "x": 7, "y": 1.5},
+                {"matrix": [1, 8], "x": 8, "y": 1.5},
+                {"matrix": [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.25, "y": 1.5},
+                {"matrix": [3, 13], "x": 16.25, "y": 1.5},
+                {"matrix": [3, 14], "x": 17.25, "y": 1.5},
+                {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+                {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+                {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+                {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+                {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+                {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+                {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+                {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+                {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+                {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+                {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+                {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+                {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+                {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+                {"matrix": [2, 14], "x": 15.25, "y": 2.5},
+                {"matrix": [2, 15], "x": 16.25, "y": 2.5},
+                {"matrix": [3, 15], "x": 17.25, "y": 2.5},
+                {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+                {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+                {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+                {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+                {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+                {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+                {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+                {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+                {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+                {"matrix": [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, "w": 2.25},
+                {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+                {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+                {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+                {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+                {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+                {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+                {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+                {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+                {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+                {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+                {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+                {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+                {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+                {"matrix": [4, 13], "x": 14, "y": 4.5},
+                {"matrix": [4, 14], "x": 16.25, "y": 4.5},
+                {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+                {"matrix": [5, 9], "x": 10, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 10], "x": 11.25, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 11], "x": 12.5, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 12], "x": 13.75, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 13], "x": 15.25, "y": 5.5},
+                {"matrix": [5, 14], "x": 16.25, "y": 5.5},
+                {"matrix": [5, 15], "x": 17.25, "y": 5.5}
+           ]
+        },
+        "LAYOUT_tkl_ansi_split_bs_rshift": {
+            "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, 13], "x": 15.25, "y": 0},
+                {"matrix": [0, 14], "x": 16.25, "y": 0},
+                {"matrix": [0, 15], "x": 17.25, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1.5},
+                {"matrix": [1, 1], "x": 1, "y": 1.5},
+                {"matrix": [1, 2], "x": 2, "y": 1.5},
+                {"matrix": [1, 3], "x": 3, "y": 1.5},
+                {"matrix": [1, 4], "x": 4, "y": 1.5},
+                {"matrix": [1, 5], "x": 5, "y": 1.5},
+                {"matrix": [1, 6], "x": 6, "y": 1.5},
+                {"matrix": [1, 7], "x": 7, "y": 1.5},
+                {"matrix": [1, 8], "x": 8, "y": 1.5},
+                {"matrix": [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.25, "y": 1.5},
+                {"matrix": [3, 13], "x": 16.25, "y": 1.5},
+                {"matrix": [3, 14], "x": 17.25, "y": 1.5},
+                {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+                {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+                {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+                {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+                {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+                {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+                {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+                {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+                {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+                {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+                {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+                {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+                {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+                {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+                {"matrix": [2, 14], "x": 15.25, "y": 2.5},
+                {"matrix": [2, 15], "x": 16.25, "y": 2.5},
+                {"matrix": [3, 15], "x": 17.25, "y": 2.5},
+                {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+                {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+                {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+                {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+                {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+                {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+                {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+                {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+                {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+                {"matrix": [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, "w": 2.25},
+                {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+                {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+                {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+                {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+                {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+                {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+                {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+                {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+                {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+                {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+                {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+                {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+                {"matrix": [4, 13], "x": 14, "y": 4.5},
+                {"matrix": [4, 14], "x": 16.25, "y": 4.5},
+                {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+                {"matrix": [5, 9], "x": 10, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 10], "x": 11.25, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 11], "x": 12.5, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 12], "x": 13.75, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 13], "x": 15.25, "y": 5.5},
+                {"matrix": [5, 14], "x": 16.25, "y": 5.5},
+                {"matrix": [5, 15], "x": 17.25, "y": 5.5}
+           ]
+        },
+        "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, 13], "x": 15.25, "y": 0},
+                {"matrix": [0, 14], "x": 16.25, "y": 0},
+                {"matrix": [0, 15], "x": 17.25, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1.5},
+                {"matrix": [1, 1], "x": 1, "y": 1.5},
+                {"matrix": [1, 2], "x": 2, "y": 1.5},
+                {"matrix": [1, 3], "x": 3, "y": 1.5},
+                {"matrix": [1, 4], "x": 4, "y": 1.5},
+                {"matrix": [1, 5], "x": 5, "y": 1.5},
+                {"matrix": [1, 6], "x": 6, "y": 1.5},
+                {"matrix": [1, 7], "x": 7, "y": 1.5},
+                {"matrix": [1, 8], "x": 8, "y": 1.5},
+                {"matrix": [1, 9], "x": 9, "y": 1.5},
+                {"matrix": [1, 10], "x": 10, "y": 1.5},
+                {"matrix": [1, 11], "x": 11, "y": 1.5},
+                {"matrix": [1, 12], "x": 12, "y": 1.5},
+                {"matrix": [1, 13], "x": 13, "y": 1.5, "w": 2},
+                {"matrix": [1, 15], "x": 15.25, "y": 1.5},
+                {"matrix": [3, 13], "x": 16.25, "y": 1.5},
+                {"matrix": [3, 14], "x": 17.25, "y": 1.5},
+                {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+                {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+                {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+                {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+                {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+                {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+                {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+                {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+                {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+                {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+                {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+                {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+                {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+                {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 1.5},
+                {"matrix": [2, 14], "x": 15.25, "y": 2.5},
+                {"matrix": [2, 15], "x": 16.25, "y": 2.5},
+                {"matrix": [3, 15], "x": 17.25, "y": 2.5},
+                {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+                {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+                {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+                {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+                {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+                {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+                {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+                {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+                {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+                {"matrix": [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, "w": 2.25},
+                {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+                {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+                {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+                {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+                {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+                {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+                {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+                {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+                {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+                {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+                {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+                {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 2.75},
+                {"matrix": [4, 14], "x": 16.25, "y": 4.5},
+                {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+                {"matrix": [5, 9], "x": 10, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 10], "x": 11.25, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 11], "x": 12.5, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 12], "x": 13.75, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 13], "x": 15.25, "y": 5.5},
+                {"matrix": [5, 14], "x": 16.25, "y": 5.5},
+                {"matrix": [5, 15], "x": 17.25, "y": 5.5}
+           ]
+        },
+        "LAYOUT_tkl_iso_split_bs_rshift": {
+            "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, 13], "x": 15.25, "y": 0},
+                {"matrix": [0, 14], "x": 16.25, "y": 0},
+                {"matrix": [0, 15], "x": 17.25, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1.5},
+                {"matrix": [1, 1], "x": 1, "y": 1.5},
+                {"matrix": [1, 2], "x": 2, "y": 1.5},
+                {"matrix": [1, 3], "x": 3, "y": 1.5},
+                {"matrix": [1, 4], "x": 4, "y": 1.5},
+                {"matrix": [1, 5], "x": 5, "y": 1.5},
+                {"matrix": [1, 6], "x": 6, "y": 1.5},
+                {"matrix": [1, 7], "x": 7, "y": 1.5},
+                {"matrix": [1, 8], "x": 8, "y": 1.5},
+                {"matrix": [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.25, "y": 1.5},
+                {"matrix": [3, 13], "x": 16.25, "y": 1.5},
+                {"matrix": [3, 14], "x": 17.25, "y": 1.5},
+                {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+                {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+                {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+                {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+                {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+                {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+                {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+                {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+                {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+                {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+                {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+                {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+                {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+                {"matrix": [3, 12], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+                {"matrix": [2, 14], "x": 15.25, "y": 2.5},
+                {"matrix": [2, 15], "x": 16.25, "y": 2.5},
+                {"matrix": [3, 15], "x": 17.25, "y": 2.5},
+                {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+                {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+                {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+                {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+                {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+                {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+                {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+                {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+                {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+                {"matrix": [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": [2, 13], "x": 12.75, "y": 3.5},
+                {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+                {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+                {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+                {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+                {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+                {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+                {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+                {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+                {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+                {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+                {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+                {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+                {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+                {"matrix": [4, 13], "x": 14, "y": 4.5},
+                {"matrix": [4, 14], "x": 16.25, "y": 4.5},
+                {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 3], "x": 2.5, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+                {"matrix": [5, 9], "x": 10, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 10], "x": 11.25, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 11], "x": 12.5, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 12], "x": 13.75, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 13], "x": 15.25, "y": 5.5},
+                {"matrix": [5, 14], "x": 16.25, "y": 5.5},
+                {"matrix": [5, 15], "x": 17.25, "y": 5.5}
+           ]
+        },
+        "LAYOUT_tkl_iso": {
+            "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, 13], "x": 15.25, "y": 0},
+                {"matrix": [0, 14], "x": 16.25, "y": 0},
+                {"matrix": [0, 15], "x": 17.25, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1.5},
+                {"matrix": [1, 1], "x": 1, "y": 1.5},
+                {"matrix": [1, 2], "x": 2, "y": 1.5},
+                {"matrix": [1, 3], "x": 3, "y": 1.5},
+                {"matrix": [1, 4], "x": 4, "y": 1.5},
+                {"matrix": [1, 5], "x": 5, "y": 1.5},
+                {"matrix": [1, 6], "x": 6, "y": 1.5},
+                {"matrix": [1, 7], "x": 7, "y": 1.5},
+                {"matrix": [1, 8], "x": 8, "y": 1.5},
+                {"matrix": [1, 9], "x": 9, "y": 1.5},
+                {"matrix": [1, 10], "x": 10, "y": 1.5},
+                {"matrix": [1, 11], "x": 11, "y": 1.5},
+                {"matrix": [1, 12], "x": 12, "y": 1.5},
+                {"matrix": [1, 13], "x": 13, "y": 1.5, "w": 2},
+                {"matrix": [1, 15], "x": 15.25, "y": 1.5},
+                {"matrix": [3, 13], "x": 16.25, "y": 1.5},
+                {"matrix": [3, 14], "x": 17.25, "y": 1.5},
+                {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+                {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+                {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+                {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+                {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+                {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+                {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+                {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+                {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+                {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+                {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+                {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+                {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+                {"matrix": [3, 12], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+                {"matrix": [2, 14], "x": 15.25, "y": 2.5},
+                {"matrix": [2, 15], "x": 16.25, "y": 2.5},
+                {"matrix": [3, 15], "x": 17.25, "y": 2.5},
+                {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+                {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+                {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+                {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+                {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+                {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+                {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+                {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+                {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+                {"matrix": [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": [2, 13], "x": 12.75, "y": 3.5},
+                {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+                {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+                {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+                {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+                {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+                {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+                {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+                {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+                {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+                {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+                {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+                {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+                {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 2.75},
+                {"matrix": [4, 14], "x": 16.25, "y": 4.5},
+                {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
+                {"matrix": [5, 9], "x": 10, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 10], "x": 11.25, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 11], "x": 12.5, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 12], "x": 13.75, "y": 5.5, "w": 1.25},
+                {"matrix": [5, 13], "x": 15.25, "y": 5.5},
+                {"matrix": [5, 14], "x": 16.25, "y": 5.5},
+                {"matrix": [5, 15], "x": 17.25, "y": 5.5}
+           ]
+        }
+    }
+}
diff --git a/keyboards/vertex/cycle8/keymaps/default/keymap.c b/keyboards/vertex/cycle8/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ec3138424f7
--- /dev/null
+++ b/keyboards/vertex/cycle8/keymaps/default/keymap.c
@@ -0,0 +1,16 @@
+// Copyright 2022 Eason
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+ #include QMK_KEYBOARD_H
+
+ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+   [0] = LAYOUT_all(
+       KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SCRL, KC_PAUS,
+       KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_DEL,  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_1,    KC_RSFT, KC_UP,
+       KC_LCTL, KC_LGUI, KC_LALT, KC_SPC,  KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+   )
+ };
diff --git a/keyboards/vertex/cycle8/keymaps/via/keymap.c b/keyboards/vertex/cycle8/keymaps/via/keymap.c
new file mode 100644
index 00000000000..ec3138424f7
--- /dev/null
+++ b/keyboards/vertex/cycle8/keymaps/via/keymap.c
@@ -0,0 +1,16 @@
+// Copyright 2022 Eason
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+ #include QMK_KEYBOARD_H
+
+ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+   [0] = LAYOUT_all(
+       KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SCRL, KC_PAUS,
+       KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_DEL,  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_1,    KC_RSFT, KC_UP,
+       KC_LCTL, KC_LGUI, KC_LALT, KC_SPC,  KC_LALT, KC_LGUI, KC_MENU, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+   )
+ };
diff --git a/keyboards/vertex/cycle8/keymaps/via/rules.mk b/keyboards/vertex/cycle8/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/vertex/cycle8/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/vertex/cycle8/mcuconf.h b/keyboards/vertex/cycle8/mcuconf.h
new file mode 100644
index 00000000000..bac8fc07c5f
--- /dev/null
+++ b/keyboards/vertex/cycle8/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2022 Eason
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef STM32_SPI_USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
diff --git a/keyboards/vertex/cycle8/readme.md b/keyboards/vertex/cycle8/readme.md
new file mode 100644
index 00000000000..b12008b5d0b
--- /dev/null
+++ b/keyboards/vertex/cycle8/readme.md
@@ -0,0 +1,27 @@
+# cycle8
+
+![Cycle8](https://i.imgur.com/gCExreih.png)
+
+A customizable soldered TKL/80% keyboard.
+
+* Keyboard Maintainer: [EASON](https://github.com/EasonQian1)
+* Hardware Supported: Cycle8 PCB
+* Hardware Availability: [EASON](https://github.com/EasonQian1)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make vertex/cycle8:default
+
+Flashing example for this keyboard:
+
+    make vertex/cycle8: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 Esc in the keyboard then replug
+* **Physical reset button**: Briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT`
diff --git a/keyboards/vertex/cycle8/rules.mk b/keyboards/vertex/cycle8/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/vertex/cycle8/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank

From 114a43e1eabd6d3048843d3c9ccca6ca87971133 Mon Sep 17 00:00:00 2001
From: Jesse Leventhal <45154268+jessel92@users.noreply.github.com>
Date: Sat, 13 Jan 2024 22:16:11 -0500
Subject: [PATCH 18/20] Add The Mad Noodle Udon13 (#22704)

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
---
 keyboards/themadnoodle/udon13/config.h        |  6 ++
 keyboards/themadnoodle/udon13/info.json       | 75 ++++++++++++++++++
 .../udon13/keymaps/default/keymap.c           | 52 +++++++++++++
 .../udon13/keymaps/default/rules.mk           |  2 +
 .../themadnoodle/udon13/keymaps/via/keymap.c  | 52 +++++++++++++
 .../themadnoodle/udon13/keymaps/via/rules.mk  |  3 +
 keyboards/themadnoodle/udon13/readme.md       | 27 +++++++
 keyboards/themadnoodle/udon13/rules.mk        |  1 +
 keyboards/themadnoodle/udon13/udon13.c        | 76 +++++++++++++++++++
 9 files changed, 294 insertions(+)
 create mode 100644 keyboards/themadnoodle/udon13/config.h
 create mode 100644 keyboards/themadnoodle/udon13/info.json
 create mode 100644 keyboards/themadnoodle/udon13/keymaps/default/keymap.c
 create mode 100644 keyboards/themadnoodle/udon13/keymaps/default/rules.mk
 create mode 100644 keyboards/themadnoodle/udon13/keymaps/via/keymap.c
 create mode 100644 keyboards/themadnoodle/udon13/keymaps/via/rules.mk
 create mode 100644 keyboards/themadnoodle/udon13/readme.md
 create mode 100644 keyboards/themadnoodle/udon13/rules.mk
 create mode 100644 keyboards/themadnoodle/udon13/udon13.c

diff --git a/keyboards/themadnoodle/udon13/config.h b/keyboards/themadnoodle/udon13/config.h
new file mode 100644
index 00000000000..fbb498c4081
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/config.h
@@ -0,0 +1,6 @@
+// Copyright 2023 Jesse Leventhal (@The=Mad-Noodle)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL + 5
diff --git a/keyboards/themadnoodle/udon13/info.json b/keyboards/themadnoodle/udon13/info.json
new file mode 100644
index 00000000000..b0ece11612f
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/info.json
@@ -0,0 +1,75 @@
+{
+    "manufacturer": "The Mad Noodle",
+    "keyboard_name": "Udon13",
+    "maintainer": "The-Mad-Noodle",
+    "url": "https://www.madnoodleprototypes.com/",
+    "bootloader": "atmel-dfu",
+    "diode_direction": "ROW2COL",
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "encoder": true,
+        "mousekey": true,
+        "nkro": true,
+        "rgblight": true,
+        "oled": true
+    },
+    "rgblight": {
+        "hue_steps": 10,
+        "led_count": 6,
+        "sleep": true,
+        "animations": {
+            "breathing": true,
+            "rainbow_mood": true,
+            "rainbow_swirl": true,
+            "snake": true,
+            "knight": true,
+            "christmas": true,
+            "static_gradient": true,
+            "rgb_test": true,
+            "alternating": true,
+            "twinkle": true
+        }
+    },
+    "ws2812": {
+        "pin": "B7"
+    },
+    "matrix_pins": {
+        "cols": ["F0", "F5", "F4", "F6"],
+        "rows": ["F7", "F1", "D6", "D7"]
+    },
+    "processor": "atmega32u4",
+    "usb": {
+        "device_version": "1.0.0",
+        "pid": "0x0012",
+        "vid": "0x6A6C"
+    },
+    "layouts": {
+        "LAYOUT": {
+          "layout": [
+            {"label":"Encoder", "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]}, 
+            {"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":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]}
+            ]
+        }
+    },
+
+    "encoder": {
+        "rotary": [
+            { "pin_a": "B6", "pin_b": "B5" }
+        ]
+    
+    }
+}
\ No newline at end of file
diff --git a/keyboards/themadnoodle/udon13/keymaps/default/keymap.c b/keyboards/themadnoodle/udon13/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d9e4ddc51ef
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/keymaps/default/keymap.c
@@ -0,0 +1,52 @@
+// Copyright 2023 The Mad Noodle(@the_mad_noodle)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/*Layer 0*/
+    [0] = LAYOUT(
+        KC_MUTE,
+        KC_MPLY, KC_MPRV, KC_MNXT, KC_MSEL, 
+        KC_UNDO, KC_CALC, KC_MAIL, KC_MYCM, 
+        KC_COPY, KC_CUT, KC_PSTE, TO(3)
+        ),
+
+/*Layer 1*/
+    [1] = LAYOUT(
+        RGB_TOG, 
+        RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, 
+        RGB_MOD, RGB_RMOD, RGB_M_P, RGB_M_B, 
+        RGB_M_SW, RGB_SPD, RGB_SPI, TO(0)
+        ),
+
+/*Layer 2*/ 
+    [2] = LAYOUT(
+        KC_NO, 
+        KC_NO, KC_NO, KC_NO, KC_NO, 
+        KC_NO, KC_NO, KC_NO, KC_NO, 
+        KC_NO, KC_NO, KC_NO, TO(0)
+        ),
+
+/*Layer 3*/       
+    [3] = LAYOUT(
+        KC_NO, 
+        TO(1), TO(2), KC_NO, KC_NO, 
+        KC_NO, KC_NO, KC_NO, KC_NO, 
+        KC_NO, KC_NO, KC_NO, TO(0)
+        ),
+
+};
+
+/*Encoder Mapping*/
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+    [0] =  {ENCODER_CCW_CW(KC_VOLD,  KC_VOLU)},
+    [1] =  { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+    [2] =  { ENCODER_CCW_CW(KC_LEFT, KC_RGHT)},
+    [3] =  { ENCODER_CCW_CW(KC_DOWN,   KC_UP)},
+   
+};
+#endif
diff --git a/keyboards/themadnoodle/udon13/keymaps/default/rules.mk b/keyboards/themadnoodle/udon13/keymaps/default/rules.mk
new file mode 100644
index 00000000000..217da48272e
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
+ENCODER_MAP_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/themadnoodle/udon13/keymaps/via/keymap.c b/keyboards/themadnoodle/udon13/keymaps/via/keymap.c
new file mode 100644
index 00000000000..6f6fcc60590
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/keymaps/via/keymap.c
@@ -0,0 +1,52 @@
+// Copyright 2023 The Mad Noodle(@the_mad_noodle)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/*Layer 0*/
+    [0] = LAYOUT(
+    KC_MUTE, 
+        KC_MPLY, KC_MPRV, KC_MNXT, KC_MSEL, 
+        KC_UNDO, KC_CALC, KC_MAIL, KC_MYCM, 
+        KC_COPY, KC_CUT, KC_PSTE, TO(3)
+        ),
+
+/*Layer 1*/
+    [1] = LAYOUT(
+        RGB_TOG, 
+        RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, 
+        RGB_MOD, RGB_RMOD, RGB_M_P, RGB_M_B, 
+        RGB_M_SW, RGB_SPD, RGB_SPI, TO(0)
+        ),
+
+/*Layer 2*/ 
+    [2] = LAYOUT(
+        KC_NO, 
+        KC_NO, KC_NO, KC_NO, KC_NO, 
+        KC_NO, KC_NO, KC_NO, KC_NO, 
+        KC_NO, KC_NO, KC_NO, TO(0)
+        ),
+
+/*Layer 3*/       
+    [3] = LAYOUT(
+        KC_NO, 
+        TO(1), TO(2), KC_NO, KC_NO, 
+        KC_NO, KC_NO, KC_NO, KC_NO, 
+        KC_NO, KC_NO, KC_NO, TO(0)
+        ),
+
+};
+
+/*Encoder Mapping*/
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+    [0] =  {ENCODER_CCW_CW(KC_VOLD,  KC_VOLU)},
+    [1] =  { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
+    [2] =  { ENCODER_CCW_CW(KC_LEFT, KC_RGHT)},
+    [3] =  { ENCODER_CCW_CW(KC_DOWN,   KC_UP)},
+   
+};
+#endif
diff --git a/keyboards/themadnoodle/udon13/keymaps/via/rules.mk b/keyboards/themadnoodle/udon13/keymaps/via/rules.mk
new file mode 100644
index 00000000000..e81bb711d50
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+ENCODER_MAP_ENABLE = yes
+LTO_ENABLE = yes
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/themadnoodle/udon13/readme.md b/keyboards/themadnoodle/udon13/readme.md
new file mode 100644
index 00000000000..a55dc2c7cb3
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/readme.md
@@ -0,0 +1,27 @@
+# Udon:13
+
+![Udon13](https://i.imgur.com/DppYeTCh.jpg)
+
+*The Udon:13 is a 12 hotswap key macro keypad with a push button encoder knob and 128x32 OLED display*
+
+* Keyboard Maintainer: [The Mad Noodle](https://github.com/The-Mad-Noodle)
+* Hardware Supported: Udon:13 PCB
+* Hardware Availability: https://www.madnoodleprototypes.com/shop
+
+
+Compile example for this keyboard (after setting up your build environment):
+
+    qmk compile -kb themadnoodle/udon13 -km default
+
+Flashing example for this keyboard:
+
+    qmk flash -kb themadnoodle/udon13 -km default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader & Flashing
+
+
+**Physical reset button**: 
+
+* Press the physical button located on the top left of the back of the PCB (Labeled RST) to enter Bootloader Mode
diff --git a/keyboards/themadnoodle/udon13/rules.mk b/keyboards/themadnoodle/udon13/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/themadnoodle/udon13/udon13.c b/keyboards/themadnoodle/udon13/udon13.c
new file mode 100644
index 00000000000..bda0ae7e7bc
--- /dev/null
+++ b/keyboards/themadnoodle/udon13/udon13.c
@@ -0,0 +1,76 @@
+// Copyright 2023 The Mad Noodle(@the_mad_noodle)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+
+/* OLED Settings */
+//------------------------------------------------------------------------------------------------
+
+static void render_logo(void) { // Render Mad Noodle logo
+    static const char PROGMEM logo_1[] = {0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x04, 0x06, 0x82, 0xc3, 0x43, 0x61, 0xa1, 0xa1, 0xa1, 0xa1, 0x61, 0x43, 0xc3, 0x82, 0x06, 0x04, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00};
+    static const char PROGMEM logo_2[] = {0xf8, 0x1e, 0xc3, 0xf8, 0x5c, 0x76, 0x7b, 0x6d, 0x75, 0x55, 0x55, 0x75, 0x6d, 0x7b, 0x76, 0x5e, 0x7e, 0x77, 0x5b, 0x6d, 0x75, 0x55, 0x55, 0x75, 0x4d, 0x7b, 0x66, 0x5c, 0xf0, 0xc3, 0x3e, 0xf0};
+    static const char PROGMEM logo_3[] = {0x1f, 0x78, 0xc1, 0x0f, 0x38, 0xe0, 0xc0, 0x00, 0x00, 0x02, 0x0e, 0x0e, 0x8e, 0xc6, 0xc0, 0x40, 0x40, 0xc0, 0xc6, 0x8e, 0x0e, 0x0e, 0x02, 0x00, 0x80, 0xc0, 0x60, 0x38, 0x0f, 0xc0, 0x7c, 0x0f};
+    static const char PROGMEM logo_4[] = {0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, 0x31, 0x23, 0x66, 0x44, 0x44, 0xc4, 0xc4, 0x84, 0x84, 0x84, 0x84, 0xc4, 0xc4, 0x44, 0x46, 0x66, 0x23, 0x11, 0x18, 0x0c, 0x06, 0x03, 0x00, 0x00, 0x00};
+    oled_set_cursor(0, 0);
+    oled_write_raw_P(logo_1, sizeof(logo_1));
+    oled_set_cursor(0, 1);
+    oled_write_raw_P(logo_2, sizeof(logo_2));
+    oled_set_cursor(0, 2);
+    oled_write_raw_P(logo_3, sizeof(logo_3));
+    oled_set_cursor(0, 3);
+    oled_write_raw_P(logo_4, sizeof(logo_4));
+}
+//-----------
+
+bool oled_task_kb(void) {
+    if (!oled_task_user()) { return false; }
+    render_logo();
+    oled_set_cursor(7, 0);
+    oled_write_P(PSTR("The Mad Noodle"), false);
+
+    oled_set_cursor(7, 1);
+    oled_write_P(PSTR("Layer: "), false);
+
+    /*
+    To change LAYER NAMES displayed on the OLED ensure they are a total of 6 characters, including spaces.
+    Example:
+    ---------------------------------------------------
+    case 0:
+          oled_write_P(PSTR("Base  "), false);
+          break;
+    ---------------------------------------------------
+    "B A S E *SPACE* *SPACE*" = 6 characters
+    This would change layer 0 to Base on the OLED
+    */
+
+    switch (get_highest_layer(layer_state)) {
+        case 0:
+            oled_write_P(PSTR("Zero  "), false);
+            break;
+        case 1:
+            oled_write_P(PSTR("One   "), false);
+            break;
+        case 2:
+            oled_write_P(PSTR("Two   "), false);
+            break;
+        case 3:
+            oled_write_P(PSTR("Three "), false);
+            break;
+
+        default:
+            oled_write_P(PSTR("N/A   "), false);
+    }
+    oled_set_cursor(7, 2);
+    oled_write_P(PSTR("Status: "), false);
+    oled_set_cursor(7, 3);
+    led_t led_state = host_keyboard_led_state();
+    oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR("   "), false);
+    oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR("   "), false);
+    oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR("   "), false);
+
+    return false;
+}
+
+#endif
\ No newline at end of file

From a81ae7dd041e8f6baa4c82c5155ca22c66ac1f9b Mon Sep 17 00:00:00 2001
From: Joy Lee <joylee.lc@foxmail.com>
Date: Sun, 14 Jan 2024 14:06:37 +0800
Subject: [PATCH 19/20] Add tac-k1 keyboard (#22522)

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
---
 keyboards/tacworks/tac_k1/config.h            |  13 +
 keyboards/tacworks/tac_k1/halconf.h           |  10 +
 keyboards/tacworks/tac_k1/info.json           | 411 ++++++++++++++++++
 .../tacworks/tac_k1/keymaps/default/keymap.c  |  22 +
 .../tacworks/tac_k1/keymaps/via/keymap.c      |  22 +
 .../tacworks/tac_k1/keymaps/via/rules.mk      |   1 +
 keyboards/tacworks/tac_k1/mcuconf.h           |   9 +
 keyboards/tacworks/tac_k1/readme.md           |  25 ++
 keyboards/tacworks/tac_k1/rules.mk            |   1 +
 9 files changed, 514 insertions(+)
 create mode 100644 keyboards/tacworks/tac_k1/config.h
 create mode 100644 keyboards/tacworks/tac_k1/halconf.h
 create mode 100644 keyboards/tacworks/tac_k1/info.json
 create mode 100644 keyboards/tacworks/tac_k1/keymaps/default/keymap.c
 create mode 100644 keyboards/tacworks/tac_k1/keymaps/via/keymap.c
 create mode 100644 keyboards/tacworks/tac_k1/keymaps/via/rules.mk
 create mode 100644 keyboards/tacworks/tac_k1/mcuconf.h
 create mode 100644 keyboards/tacworks/tac_k1/readme.md
 create mode 100644 keyboards/tacworks/tac_k1/rules.mk

diff --git a/keyboards/tacworks/tac_k1/config.h b/keyboards/tacworks/tac_k1/config.h
new file mode 100644
index 00000000000..7cc691ea956
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/config.h
@@ -0,0 +1,13 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
diff --git a/keyboards/tacworks/tac_k1/halconf.h b/keyboards/tacworks/tac_k1/halconf.h
new file mode 100644
index 00000000000..8760386e815
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/halconf.h
@@ -0,0 +1,10 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next <halconf.h>
diff --git a/keyboards/tacworks/tac_k1/info.json b/keyboards/tacworks/tac_k1/info.json
new file mode 100644
index 00000000000..cf098291be8
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/info.json
@@ -0,0 +1,411 @@
+{
+    "manufacturer": "TACWORKS",
+    "keyboard_name": "TAC-K1",
+    "maintainer": "JoyLee",
+    "bootloader": "wb32-dfu",
+    "diode_direction": "ROW2COL",
+    "eeprom": {
+        "driver": "wear_leveling",
+        "wear_leveling": {
+            "driver": "spi_flash",
+            "backing_size": 4096
+        }
+    },
+    "features": {
+        "bootmagic": true,
+        "command": false,
+        "console": false,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true
+    },
+    "indicators": {
+        "caps_lock": "A5",
+        "on_state": 0
+    },
+    "matrix_pins": {
+        "cols": ["C0", "C1", "C2", "C3", "A6", "B1", "B10", "B11", "B12", "B13", "B14", "B15", "C6", "C7", "C8", "C9"],
+        "rows": ["A1", "A2", "A3", "A4", "C13"]
+    },
+    "processor": "WB32FQ95",
+    "url": "https://tacworks.store",
+    "usb": {
+        "device_version": "1.0.0",
+        "force_nkro": true,
+        "pid": "0xE431",
+        "suspend_wakeup_delay": 1000,
+        "vid": "0x342D"
+    },
+    "community_layouts": [
+        "65_ansi_blocker",
+        "65_ansi_blocker_split_bs",
+        "65_iso_blocker",
+        "65_iso_blocker_split_bs"
+    ],
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [
+                {"matrix": [0, 0], "x": 0, "y": 0},
+                {"matrix": [0, 1], "x": 1, "y": 0},
+                {"matrix": [0, 2], "x": 2, "y": 0},
+                {"matrix": [0, 3], "x": 3, "y": 0},
+                {"matrix": [0, 4], "x": 4, "y": 0},
+                {"matrix": [0, 5], "x": 5, "y": 0},
+                {"matrix": [0, 6], "x": 6, "y": 0},
+                {"matrix": [0, 7], "x": 7, "y": 0},
+                {"matrix": [0, 8], "x": 8, "y": 0},
+                {"matrix": [0, 9], "x": 9, "y": 0},
+                {"matrix": [0, 10], "x": 10, "y": 0},
+                {"matrix": [0, 11], "x": 11, "y": 0},
+                {"matrix": [0, 12], "x": 12, "y": 0},
+                {"matrix": [0, 13], "x": 13, "y": 0},
+                {"matrix": [0, 14], "x": 14, "y": 0},
+                {"matrix": [0, 15], "x": 15, "y": 0},
+                {"matrix": [1, 0], "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},
+                {"matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.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, 14], "x": 14, "y": 3},
+                {"matrix": [3, 15], "x": 15, "y": 3},
+                {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+                {"matrix": [4, 5], "x": 3.75, "y": 4, "w": 2.5},
+                {"matrix": [4, 6], "x": 6.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 7], "x": 7.5, "y": 4, "w": 2.5},
+                {"matrix": [4, 8], "x": 10, "y": 4, "w": 1.25},
+                {"matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 13], "x": 13, "y": 4},
+                {"matrix": [4, 14], "x": 14, "y": 4},
+                {"matrix": [4, 15], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_ansi_blocker": {
+            "layout": [
+                {"matrix": [0, 0], "x": 0, "y": 0},
+                {"matrix": [0, 1], "x": 1, "y": 0},
+                {"matrix": [0, 2], "x": 2, "y": 0},
+                {"matrix": [0, 3], "x": 3, "y": 0},
+                {"matrix": [0, 4], "x": 4, "y": 0},
+                {"matrix": [0, 5], "x": 5, "y": 0},
+                {"matrix": [0, 6], "x": 6, "y": 0},
+                {"matrix": [0, 7], "x": 7, "y": 0},
+                {"matrix": [0, 8], "x": 8, "y": 0},
+                {"matrix": [0, 9], "x": 9, "y": 0},
+                {"matrix": [0, 10], "x": 10, "y": 0},
+                {"matrix": [0, 11], "x": 11, "y": 0},
+                {"matrix": [0, 12], "x": 12, "y": 0},
+                {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+                {"matrix": [0, 15], "x": 15, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"matrix": [1, 1], "x": 1.5, "y": 1},
+                {"matrix": [1, 2], "x": 2.5, "y": 1},
+                {"matrix": [1, 3], "x": 3.5, "y": 1},
+                {"matrix": [1, 4], "x": 4.5, "y": 1},
+                {"matrix": [1, 5], "x": 5.5, "y": 1},
+                {"matrix": [1, 6], "x": 6.5, "y": 1},
+                {"matrix": [1, 7], "x": 7.5, "y": 1},
+                {"matrix": [1, 8], "x": 8.5, "y": 1},
+                {"matrix": [1, 9], "x": 9.5, "y": 1},
+                {"matrix": [1, 10], "x": 10.5, "y": 1},
+                {"matrix": [1, 11], "x": 11.5, "y": 1},
+                {"matrix": [1, 12], "x": 12.5, "y": 1},
+                {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+                {"matrix": [1, 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, 14], "x": 14, "y": 3},
+                {"matrix": [3, 15], "x": 15, "y": 3},
+                {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+                {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+                {"matrix": [4, 8], "x": 10, "y": 4, "w": 1.25},
+                {"matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 13], "x": 13, "y": 4},
+                {"matrix": [4, 14], "x": 14, "y": 4},
+                {"matrix": [4, 15], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_ansi_blocker_split_bs": {
+            "layout": [
+                {"matrix": [0, 0], "x": 0, "y": 0},
+                {"matrix": [0, 1], "x": 1, "y": 0},
+                {"matrix": [0, 2], "x": 2, "y": 0},
+                {"matrix": [0, 3], "x": 3, "y": 0},
+                {"matrix": [0, 4], "x": 4, "y": 0},
+                {"matrix": [0, 5], "x": 5, "y": 0},
+                {"matrix": [0, 6], "x": 6, "y": 0},
+                {"matrix": [0, 7], "x": 7, "y": 0},
+                {"matrix": [0, 8], "x": 8, "y": 0},
+                {"matrix": [0, 9], "x": 9, "y": 0},
+                {"matrix": [0, 10], "x": 10, "y": 0},
+                {"matrix": [0, 11], "x": 11, "y": 0},
+                {"matrix": [0, 12], "x": 12, "y": 0},
+                {"matrix": [0, 13], "x": 13, "y": 0},
+                {"matrix": [0, 14], "x": 14, "y": 0},
+                {"matrix": [0, 15], "x": 15, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"matrix": [1, 1], "x": 1.5, "y": 1},
+                {"matrix": [1, 2], "x": 2.5, "y": 1},
+                {"matrix": [1, 3], "x": 3.5, "y": 1},
+                {"matrix": [1, 4], "x": 4.5, "y": 1},
+                {"matrix": [1, 5], "x": 5.5, "y": 1},
+                {"matrix": [1, 6], "x": 6.5, "y": 1},
+                {"matrix": [1, 7], "x": 7.5, "y": 1},
+                {"matrix": [1, 8], "x": 8.5, "y": 1},
+                {"matrix": [1, 9], "x": 9.5, "y": 1},
+                {"matrix": [1, 10], "x": 10.5, "y": 1},
+                {"matrix": [1, 11], "x": 11.5, "y": 1},
+                {"matrix": [1, 12], "x": 12.5, "y": 1},
+                {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+                {"matrix": [1, 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, 14], "x": 14, "y": 3},
+                {"matrix": [3, 15], "x": 15, "y": 3},
+                {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+                {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+                {"matrix": [4, 8], "x": 10, "y": 4, "w": 1.25},
+                {"matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 13], "x": 13, "y": 4},
+                {"matrix": [4, 14], "x": 14, "y": 4},
+                {"matrix": [4, 15], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_iso_blocker": {
+            "layout": [
+                {"matrix": [0, 0], "x": 0, "y": 0},
+                {"matrix": [0, 1], "x": 1, "y": 0},
+                {"matrix": [0, 2], "x": 2, "y": 0},
+                {"matrix": [0, 3], "x": 3, "y": 0},
+                {"matrix": [0, 4], "x": 4, "y": 0},
+                {"matrix": [0, 5], "x": 5, "y": 0},
+                {"matrix": [0, 6], "x": 6, "y": 0},
+                {"matrix": [0, 7], "x": 7, "y": 0},
+                {"matrix": [0, 8], "x": 8, "y": 0},
+                {"matrix": [0, 9], "x": 9, "y": 0},
+                {"matrix": [0, 10], "x": 10, "y": 0},
+                {"matrix": [0, 11], "x": 11, "y": 0},
+                {"matrix": [0, 12], "x": 12, "y": 0},
+                {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+                {"matrix": [0, 15], "x": 15, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"matrix": [1, 1], "x": 1.5, "y": 1},
+                {"matrix": [1, 2], "x": 2.5, "y": 1},
+                {"matrix": [1, 3], "x": 3.5, "y": 1},
+                {"matrix": [1, 4], "x": 4.5, "y": 1},
+                {"matrix": [1, 5], "x": 5.5, "y": 1},
+                {"matrix": [1, 6], "x": 6.5, "y": 1},
+                {"matrix": [1, 7], "x": 7.5, "y": 1},
+                {"matrix": [1, 8], "x": 8.5, "y": 1},
+                {"matrix": [1, 9], "x": 9.5, "y": 1},
+                {"matrix": [1, 10], "x": 10.5, "y": 1},
+                {"matrix": [1, 11], "x": 11.5, "y": 1},
+                {"matrix": [1, 12], "x": 12.5, "y": 1},
+                {"matrix": [1, 14], "x": 15, "y": 1},
+                {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+                {"matrix": [2, 1], "x": 1.75, "y": 2},
+                {"matrix": [2, 2], "x": 2.75, "y": 2},
+                {"matrix": [2, 3], "x": 3.75, "y": 2},
+                {"matrix": [2, 4], "x": 4.75, "y": 2},
+                {"matrix": [2, 5], "x": 5.75, "y": 2},
+                {"matrix": [2, 6], "x": 6.75, "y": 2},
+                {"matrix": [2, 7], "x": 7.75, "y": 2},
+                {"matrix": [2, 8], "x": 8.75, "y": 2},
+                {"matrix": [2, 9], "x": 9.75, "y": 2},
+                {"matrix": [2, 10], "x": 10.75, "y": 2},
+                {"matrix": [2, 11], "x": 11.75, "y": 2},
+                {"matrix": [2, 12], "x": 12.75, "y": 2},
+                {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+                {"matrix": [2, 14], "x": 15, "y": 2},
+                {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+                {"matrix": [3, 1], "x": 1.25, "y": 3},
+                {"matrix": [3, 2], "x": 2.25, "y": 3},
+                {"matrix": [3, 3], "x": 3.25, "y": 3},
+                {"matrix": [3, 4], "x": 4.25, "y": 3},
+                {"matrix": [3, 5], "x": 5.25, "y": 3},
+                {"matrix": [3, 6], "x": 6.25, "y": 3},
+                {"matrix": [3, 7], "x": 7.25, "y": 3},
+                {"matrix": [3, 8], "x": 8.25, "y": 3},
+                {"matrix": [3, 9], "x": 9.25, "y": 3},
+                {"matrix": [3, 10], "x": 10.25, "y": 3},
+                {"matrix": [3, 11], "x": 11.25, "y": 3},
+                {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"matrix": [3, 14], "x": 14, "y": 3},
+                {"matrix": [3, 15], "x": 15, "y": 3},
+                {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+                {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+                {"matrix": [4, 8], "x": 10, "y": 4, "w": 1.25},
+                {"matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 13], "x": 13, "y": 4},
+                {"matrix": [4, 14], "x": 14, "y": 4},
+                {"matrix": [4, 15], "x": 15, "y": 4}
+            ]
+        },
+        "LAYOUT_65_iso_blocker_split_bs": {
+            "layout": [
+                {"matrix": [0, 0], "x": 0, "y": 0},
+                {"matrix": [0, 1], "x": 1, "y": 0},
+                {"matrix": [0, 2], "x": 2, "y": 0},
+                {"matrix": [0, 3], "x": 3, "y": 0},
+                {"matrix": [0, 4], "x": 4, "y": 0},
+                {"matrix": [0, 5], "x": 5, "y": 0},
+                {"matrix": [0, 6], "x": 6, "y": 0},
+                {"matrix": [0, 7], "x": 7, "y": 0},
+                {"matrix": [0, 8], "x": 8, "y": 0},
+                {"matrix": [0, 9], "x": 9, "y": 0},
+                {"matrix": [0, 10], "x": 10, "y": 0},
+                {"matrix": [0, 11], "x": 11, "y": 0},
+                {"matrix": [0, 12], "x": 12, "y": 0},
+                {"matrix": [0, 13], "x": 13, "y": 0},
+                {"matrix": [0, 14], "x": 14, "y": 0},
+                {"matrix": [0, 15], "x": 15, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+                {"matrix": [1, 1], "x": 1.5, "y": 1},
+                {"matrix": [1, 2], "x": 2.5, "y": 1},
+                {"matrix": [1, 3], "x": 3.5, "y": 1},
+                {"matrix": [1, 4], "x": 4.5, "y": 1},
+                {"matrix": [1, 5], "x": 5.5, "y": 1},
+                {"matrix": [1, 6], "x": 6.5, "y": 1},
+                {"matrix": [1, 7], "x": 7.5, "y": 1},
+                {"matrix": [1, 8], "x": 8.5, "y": 1},
+                {"matrix": [1, 9], "x": 9.5, "y": 1},
+                {"matrix": [1, 10], "x": 10.5, "y": 1},
+                {"matrix": [1, 11], "x": 11.5, "y": 1},
+                {"matrix": [1, 12], "x": 12.5, "y": 1},
+                {"matrix": [1, 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},
+                {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+                {"matrix": [2, 14], "x": 15, "y": 2},
+                {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+                {"matrix": [3, 1], "x": 1.25, "y": 3},
+                {"matrix": [3, 2], "x": 2.25, "y": 3},
+                {"matrix": [3, 3], "x": 3.25, "y": 3},
+                {"matrix": [3, 4], "x": 4.25, "y": 3},
+                {"matrix": [3, 5], "x": 5.25, "y": 3},
+                {"matrix": [3, 6], "x": 6.25, "y": 3},
+                {"matrix": [3, 7], "x": 7.25, "y": 3},
+                {"matrix": [3, 8], "x": 8.25, "y": 3},
+                {"matrix": [3, 9], "x": 9.25, "y": 3},
+                {"matrix": [3, 10], "x": 10.25, "y": 3},
+                {"matrix": [3, 11], "x": 11.25, "y": 3},
+                {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+                {"matrix": [3, 14], "x": 14, "y": 3},
+                {"matrix": [3, 15], "x": 15, "y": 3},
+                {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+                {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+                {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+                {"matrix": [4, 8], "x": 10, "y": 4, "w": 1.25},
+                {"matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25},
+                {"matrix": [4, 13], "x": 13, "y": 4},
+                {"matrix": [4, 14], "x": 14, "y": 4},
+                {"matrix": [4, 15], "x": 15, "y": 4}
+            ]
+        }
+    }
+}
diff --git a/keyboards/tacworks/tac_k1/keymaps/default/keymap.c b/keyboards/tacworks/tac_k1/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ba7dcc81963
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT_all(
+        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, _______, KC_DEL,
+        KC_TAB,  KC_Q,    KC_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,   MO(1),
+        KC_LCTL, KC_LGUI, KC_LALT,                   _______, KC_SPC,  _______,                   KC_RALT, KC_RCTL,          KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+
+    [1] = LAYOUT_all(
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,    KC_F5,   KC_F6,   KC_F7,    KC_F8,    KC_F9,   KC_F10,  KC_F11,  KC_F12,  EE_CLR,  _______, KC_HOME,
+        _______, _______, _______, _______, _______,  _______, _______, _______,  _______,  _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,          KC_END,
+        _______, _______, _______, _______, _______,  _______, _______, _______,  _______,  _______, _______, _______, _______, KC_MPLY,          KC_INS,
+        _______, _______, _______, _______, _______,  _______, _______, _______,  _______,  _______, _______, _______,          _______, KC_VOLU, _______,
+        _______, _______, _______,                    _______, _______, _______,                     _______, _______,          KC_MPRV, KC_VOLD, KC_MNXT
+    )
+};
diff --git a/keyboards/tacworks/tac_k1/keymaps/via/keymap.c b/keyboards/tacworks/tac_k1/keymaps/via/keymap.c
new file mode 100644
index 00000000000..ba7dcc81963
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/keymaps/via/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT_all(
+        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, _______, KC_DEL,
+        KC_TAB,  KC_Q,    KC_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,   MO(1),
+        KC_LCTL, KC_LGUI, KC_LALT,                   _______, KC_SPC,  _______,                   KC_RALT, KC_RCTL,          KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+
+    [1] = LAYOUT_all(
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,    KC_F5,   KC_F6,   KC_F7,    KC_F8,    KC_F9,   KC_F10,  KC_F11,  KC_F12,  EE_CLR,  _______, KC_HOME,
+        _______, _______, _______, _______, _______,  _______, _______, _______,  _______,  _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,          KC_END,
+        _______, _______, _______, _______, _______,  _______, _______, _______,  _______,  _______, _______, _______, _______, KC_MPLY,          KC_INS,
+        _______, _______, _______, _______, _______,  _______, _______, _______,  _______,  _______, _______, _______,          _______, KC_VOLU, _______,
+        _______, _______, _______,                    _______, _______, _______,                     _______, _______,          KC_MPRV, KC_VOLD, KC_MNXT
+    )
+};
diff --git a/keyboards/tacworks/tac_k1/keymaps/via/rules.mk b/keyboards/tacworks/tac_k1/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/tacworks/tac_k1/mcuconf.h b/keyboards/tacworks/tac_k1/mcuconf.h
new file mode 100644
index 00000000000..ca0e017ebdf
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef WB32_SPI_USE_QSPI
+#define WB32_SPI_USE_QSPI TRUE
diff --git a/keyboards/tacworks/tac_k1/readme.md b/keyboards/tacworks/tac_k1/readme.md
new file mode 100644
index 00000000000..8ec29459c74
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/readme.md
@@ -0,0 +1,25 @@
+
+# TAC-K1
+
+![tac-k1](https://i.imgur.com/3YGvrSZh.jpg)
+
+* Keyboard Maintainer: [JoyLee](https://github.com/itarze)
+* Hardware Supported: TAC-K1 PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+    make tacworks/tac_k1:default
+
+Flashing example for this keyboard:
+
+    make tacworks/tac_k1: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/tacworks/tac_k1/rules.mk b/keyboards/tacworks/tac_k1/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/tacworks/tac_k1/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank

From dcc47ea31b3f4ef097a2fc677bdbb9b2560d905a Mon Sep 17 00:00:00 2001
From: James Gzowski <flexyjerkov@gmail.com>
Date: Sun, 14 Jan 2024 06:07:59 +0000
Subject: [PATCH 20/20] Add Proteus67 keyboard (#22439)

Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
---
 keyboards/proteus67/config.h                 |   7 +
 keyboards/proteus67/info.json                | 129 +++++++++++++++++++
 keyboards/proteus67/keymaps/colemak/keymap.c |  42 ++++++
 keyboards/proteus67/keymaps/colemak/rules.mk |   2 +
 keyboards/proteus67/keymaps/default/keymap.c |  41 ++++++
 keyboards/proteus67/keymaps/default/rules.mk |   1 +
 keyboards/proteus67/keymaps/via/keymap.c     |  41 ++++++
 keyboards/proteus67/keymaps/via/rules.mk     |   2 +
 keyboards/proteus67/proteus67.c              |  42 ++++++
 keyboards/proteus67/readme.md                |  25 ++++
 keyboards/proteus67/rules.mk                 |   1 +
 11 files changed, 333 insertions(+)
 create mode 100644 keyboards/proteus67/config.h
 create mode 100644 keyboards/proteus67/info.json
 create mode 100644 keyboards/proteus67/keymaps/colemak/keymap.c
 create mode 100644 keyboards/proteus67/keymaps/colemak/rules.mk
 create mode 100644 keyboards/proteus67/keymaps/default/keymap.c
 create mode 100644 keyboards/proteus67/keymaps/default/rules.mk
 create mode 100644 keyboards/proteus67/keymaps/via/keymap.c
 create mode 100644 keyboards/proteus67/keymaps/via/rules.mk
 create mode 100644 keyboards/proteus67/proteus67.c
 create mode 100644 keyboards/proteus67/readme.md
 create mode 100644 keyboards/proteus67/rules.mk

diff --git a/keyboards/proteus67/config.h b/keyboards/proteus67/config.h
new file mode 100644
index 00000000000..66faa7a2981
--- /dev/null
+++ b/keyboards/proteus67/config.h
@@ -0,0 +1,7 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define RGBLIGHT_MAX_LAYERS 3
+#define ENCODER_MAP_KEY_DELAY 10
+#define ENCODER_DEFAULT_POS 0x3
diff --git a/keyboards/proteus67/info.json b/keyboards/proteus67/info.json
new file mode 100644
index 00000000000..0ab7117ef27
--- /dev/null
+++ b/keyboards/proteus67/info.json
@@ -0,0 +1,129 @@
+{
+    "manufacturer": "gzowski",
+    "keyboard_name": "Proteus67",
+    "maintainer": "gzowski",
+    "development_board": "elite_pi",
+    "diode_direction": "COL2ROW",
+    "encoder": {
+        "rotary": [
+            {"pin_a": "GP21", "pin_b": "GP9"}
+        ]
+    },
+    "features": {
+        "encoder": true,
+        "bootmagic": true,
+        "extrakey": true,
+        "mousekey": true,
+        "nkro": true,
+        "rgblight": true
+    },
+    "matrix_pins": {
+        "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP23", "GP20", "GP22", "GP26", "GP27", "GP28", "GP29"],
+        "rows": ["GP12", "GP13", "GP14", "GP15", "GP16"]
+    },
+    "rgblight": {
+        "animations": {
+            "alternating": true,
+            "breathing": true,
+            "christmas": true,
+            "knight": true,
+            "rainbow_mood": true,
+            "rainbow_swirl": true,
+            "rgb_test": false,
+            "snake": true,
+            "static_gradient": true,
+            "twinkle": true
+        },
+        "brightness_steps": 5,
+        "led_count": 21,
+        "saturation_steps": 5,
+        "sleep": true,
+        "layers": {
+            "enabled": true,
+            "override_rgb": false
+        }
+    },
+    "url": "https://github.com/gzowski",
+    "usb": {
+        "device_version": "1.0.0",
+        "pid": "0x6F64",
+        "vid": "0x7072"
+    },
+    "ws2812": {
+        "pin": "GP0",
+        "driver": "vendor"
+    },
+    "layouts": {
+        "LAYOUT_ortho_5x14": {
+            "layout": [
+                {"matrix": [0, 0], "x": 0, "y": 0},
+                {"matrix": [0, 1], "x": 1, "y": 0},
+                {"matrix": [0, 2], "x": 2, "y": 0},
+                {"matrix": [0, 3], "x": 3, "y": 0},
+                {"matrix": [0, 4], "x": 4, "y": 0},
+                {"matrix": [0, 5], "x": 5, "y": 0},
+                {"matrix": [0, 6], "x": 6, "y": 0},
+                {"matrix": [0, 7], "x": 7, "y": 0},
+                {"matrix": [0, 8], "x": 8, "y": 0},
+                {"matrix": [0, 9], "x": 9, "y": 0},
+                {"matrix": [0, 10], "x": 10, "y": 0},
+                {"matrix": [0, 11], "x": 11, "y": 0},
+                {"matrix": [0, 12], "x": 12, "y": 0},
+                {"matrix": [0, 13], "x": 13, "y": 0},
+                {"matrix": [1, 0], "x": 0, "y": 1},
+                {"matrix": [1, 1], "x": 1, "y": 1},
+                {"matrix": [1, 2], "x": 2, "y": 1},
+                {"matrix": [1, 3], "x": 3, "y": 1},
+                {"matrix": [1, 4], "x": 4, "y": 1},
+                {"matrix": [1, 5], "x": 5, "y": 1},
+                {"matrix": [1, 6], "x": 6, "y": 1},
+                {"matrix": [1, 7], "x": 7, "y": 1},
+                {"matrix": [1, 8], "x": 8, "y": 1},
+                {"matrix": [1, 9], "x": 9, "y": 1},
+                {"matrix": [1, 10], "x": 10, "y": 1},
+                {"matrix": [1, 11], "x": 11, "y": 1},
+                {"matrix": [1, 12], "x": 12, "y": 1},
+                {"matrix": [1, 13], "x": 13, "y": 1},
+                {"matrix": [2, 0], "x": 0, "y": 2},
+                {"matrix": [2, 1], "x": 1, "y": 2},
+                {"matrix": [2, 2], "x": 2, "y": 2},
+                {"matrix": [2, 3], "x": 3, "y": 2},
+                {"matrix": [2, 4], "x": 4, "y": 2},
+                {"matrix": [2, 5], "x": 5, "y": 2},
+                {"matrix": [2, 6], "x": 6, "y": 2},
+                {"matrix": [2, 7], "x": 7, "y": 2},
+                {"matrix": [2, 8], "x": 8, "y": 2},
+                {"matrix": [2, 9], "x": 9, "y": 2},
+                {"matrix": [2, 10], "x": 10, "y": 2},
+                {"matrix": [2, 11], "x": 11, "y": 2},
+                {"matrix": [2, 12], "x": 12, "y": 2},
+                {"matrix": [2, 13], "x": 13, "y": 2},
+                {"matrix": [3, 0], "x": 0, "y": 3},
+                {"matrix": [3, 1], "x": 1, "y": 3},
+                {"matrix": [3, 2], "x": 2, "y": 3},
+                {"matrix": [3, 3], "x": 3, "y": 3},
+                {"matrix": [3, 4], "x": 4, "y": 3},
+                {"matrix": [3, 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},
+                {"matrix": [3, 11], "x": 11, "y": 3},
+                {"matrix": [3, 12], "x": 12, "y": 3},
+                {"matrix": [3, 13], "x": 13, "y": 3},
+                {"matrix": [4, 0], "x": 0, "y": 4},
+                {"matrix": [4, 1], "x": 1, "y": 4},
+                {"matrix": [4, 2], "x": 2, "y": 4},
+                {"matrix": [4, 3], "x": 3, "y": 4},
+                {"matrix": [4, 4], "x": 4, "y": 4},
+                {"matrix": [4, 5], "x": 5, "y": 4},
+                {"matrix": [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},
+                {"matrix": [4, 11], "x": 11, "y": 4}
+            ]
+        }
+    }
+}
diff --git a/keyboards/proteus67/keymaps/colemak/keymap.c b/keyboards/proteus67/keymaps/colemak/keymap.c
new file mode 100644
index 00000000000..df572f0bc01
--- /dev/null
+++ b/keyboards/proteus67/keymaps/colemak/keymap.c
@@ -0,0 +1,42 @@
+// Copyright 2023 James Gzowski
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+enum custom_layer {
+    _LAYERA,
+    _LAYERB,
+    _LAYERC,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_LAYERA] = LAYOUT_ortho_5x14(
+        KC_ESC , KC_1  ,KC_2   ,KC_3   , KC_4  , KC_5  , KC_PSCR  , 			KC_EQL  , KC_6   , KC_7    , KC_8    , KC_9   , KC_0   , KC_GRV ,
+        KC_TAB , KC_Q  ,KC_W   ,KC_F   , KC_P  , KC_G  , KC_END  , 			KC_HOME  , KC_J   , KC_L    , KC_U    , KC_Y   , KC_SCLN ,KC_MINUS,
+        KC_LCTL, KC_A  ,KC_R   ,KC_S   , KC_T  , KC_D  , KC_PGDN  , 			KC_PGUP  , 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_LBRC, 			KC_RBRC, KC_K   , KC_M    , KC_COMM , KC_DOT , KC_SLSH, KC_RSFT,
+             KC_NO  , MO(_LAYERB) ,KC_LGUI,KC_LALT,       KC_SPC ,		KC_MUTE,            KC_ENT ,		KC_BSPC , MO(_LAYERC) , KC_INS , KC_DEL
+),
+    [_LAYERB] = LAYOUT_ortho_5x14(
+        RGB_TOG , RGB_HUD  ,RGB_HUI   ,RGB_SAD   , RGB_SAI  , RGB_VAD  , RGB_VAI  ,                       RGB_M_P  , RGB_M_B   , RGB_M_R    , RGB_M_SW    , RGB_M_K   , RGB_M_TW   , RGB_M_G ,
+        KC_TRNS , KC_TRNS, KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS  ,              KC_TRNS  , KC_TRNS , KC_BTN1    , KC_MS_U    , KC_BTN2   , KC_TRNS   ,KC_TRNS,
+        KC_TRNS, KC_TRNS  ,KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS  ,              KC_TRNS  , KC_TRNS , KC_MS_L    , KC_MS_D , KC_MS_R , KC_SCLN,KC_QUOT ,
+        KC_TRNS, KC_TRNS  ,KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS ,               KC_TRNS  , KC_TRNS , KC_TRNS    , KC_TRNS , KC_TRNS , KC_NUBS, KC_TRNS,
+             KC_TRNS  , KC_TRNS ,KC_TRNS,KC_TRNS,  KC_TRNS ,                       RGB_RMOD,      KC_TRNS  , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+),
+    [_LAYERC] = LAYOUT_ortho_5x14(
+        KC_TRNS , KC_F1  ,KC_F2   ,KC_F3   , KC_F4  , KC_F5  , KC_TRNS  ,                       KC_TRNS  , KC_F6   , KC_F7    , KC_F8    , KC_F9   , KC_F10   , KC_GRV ,
+        KC_TRNS , KC_TRNS, KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS  ,              KC_TRNS  , KC_TRNS , KC_TRNS    , KC_TRNS, KC_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_UP , KC_RIGHT,KC_QUOT ,
+        KC_TRNS, KC_TRNS  ,KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS ,               KC_TRNS  , KC_TRNS , KC_TRNS    , KC_TRNS , KC_TRNS , KC_NUBS, KC_TRNS,
+             KC_TRNS  , KC_TRNS ,KC_TRNS,KC_TRNS,  KC_TRNS ,                       RGB_MOD,      KC_TRNS  , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+    [_LAYERA] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [_LAYERB] =  { ENCODER_CCW_CW(RGB_HUD, RGB_HUI)},
+    [_LAYERC] =  { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}
+};
+#endif
+
diff --git a/keyboards/proteus67/keymaps/colemak/rules.mk b/keyboards/proteus67/keymaps/colemak/rules.mk
new file mode 100644
index 00000000000..f1adcab005e
--- /dev/null
+++ b/keyboards/proteus67/keymaps/colemak/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/proteus67/keymaps/default/keymap.c b/keyboards/proteus67/keymaps/default/keymap.c
new file mode 100644
index 00000000000..bef2a5d1c5b
--- /dev/null
+++ b/keyboards/proteus67/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+// Copyright 2023 James Gzowski
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+enum custom_layer {
+    _LAYERA,
+    _LAYERB,
+    _LAYERC,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_LAYERA] = LAYOUT_ortho_5x14(
+        KC_ESC , KC_1  ,KC_2   ,KC_3   , KC_4  , KC_5  , KC_MINUS  , 			KC_EQL  , KC_6   , KC_7    , KC_8    , KC_9   , KC_0   , KC_GRV ,
+        KC_TAB , KC_Q  ,KC_W   ,KC_E   , KC_R  , KC_T  , KC_END  , 			KC_HOME  , KC_Y   , KC_U    , KC_I    , KC_O   , KC_P   ,KC_MINUS,
+        KC_LCTL, KC_A  ,KC_S   ,KC_D   , KC_F  , KC_G  , KC_PGDN  , 			KC_PGUP  , KC_H   , KC_J    , KC_K    , KC_L   , KC_SCLN,KC_QUOT ,
+        KC_LSFT, KC_Z  ,KC_X   ,KC_C   , KC_V  , KC_B  , KC_LBRC, 			KC_RBRC, KC_N   , KC_M    , KC_COMM , KC_DOT , KC_SLSH, KC_RSFT,
+             KC_NO  , MO(_LAYERB) ,KC_LGUI,KC_LALT,       KC_SPC ,		KC_MUTE,            KC_ENT ,		KC_BSPC , MO(_LAYERC) , KC_INS , KC_DEL
+),
+    [_LAYERB] = LAYOUT_ortho_5x14(
+        RGB_TOG , RGB_HUI  ,RGB_HUD   ,RGB_SAI   , RGB_SAD  , RGB_VAI  , RGB_VAD  ,                       RGB_M_P  , RGB_M_B   , RGB_M_R    , RGB_M_SW    , RGB_M_K   , RGB_M_X   , RGB_M_G ,
+        KC_TRNS , KC_TRNS, KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS  ,              KC_TRNS  , KC_TRNS , KC_BTN1    , KC_MS_U    , KC_BTN2   , KC_TRNS   ,KC_TRNS,
+        KC_TRNS, KC_TRNS  ,KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS  ,              KC_TRNS  , KC_TRNS , KC_MS_L    , KC_MS_D , KC_MS_R , KC_SCLN,KC_QUOT ,
+        KC_TRNS, KC_TRNS  ,KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS ,               KC_TRNS  , KC_TRNS , KC_TRNS    , KC_TRNS , KC_TRNS , KC_NUBS, KC_TRNS,
+             KC_TRNS  , KC_TRNS ,KC_TRNS,KC_TRNS,  KC_TRNS ,                       RGB_RMOD,      KC_TRNS  , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+),
+    [_LAYERC] = LAYOUT_ortho_5x14(
+        KC_TRNS , KC_F1  ,KC_F2   ,KC_F3   , KC_F4  , KC_F5  , KC_TRNS  ,                       KC_TRNS  , KC_F6   , KC_F7    , KC_F8    , KC_F9   , KC_F10   , KC_GRV ,
+        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_LEFT    , KC_DOWN , KC_RIGHT , KC_SCLN,KC_QUOT ,
+        KC_TRNS, KC_TRNS  ,KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS ,               KC_TRNS  , KC_TRNS , KC_TRNS    , KC_TRNS , KC_TRNS , KC_NUBS, KC_TRNS,
+             KC_TRNS  , KC_TRNS ,KC_TRNS,KC_TRNS,  KC_TRNS ,                       RGB_MOD,      KC_TRNS  , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+    [_LAYERA] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [_LAYERB] =  { ENCODER_CCW_CW(RGB_HUD, RGB_HUI)},
+    [_LAYERC] =  { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}
+};
+#endif
diff --git a/keyboards/proteus67/keymaps/default/rules.mk b/keyboards/proteus67/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/proteus67/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/proteus67/keymaps/via/keymap.c b/keyboards/proteus67/keymaps/via/keymap.c
new file mode 100644
index 00000000000..c79ac61e9e6
--- /dev/null
+++ b/keyboards/proteus67/keymaps/via/keymap.c
@@ -0,0 +1,41 @@
+// Copyright 2023 James Gzowski
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+enum custom_layer {
+    _LAYERA,
+    _LAYERB,
+    _LAYERC,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_LAYERA] = LAYOUT_ortho_5x14(
+        KC_ESC , KC_1  ,KC_2   ,KC_3   , KC_4  , KC_5  , KC_MINUS  , 			KC_EQL  , KC_6   , KC_7    , KC_8    , KC_9   , KC_0   , KC_GRV ,
+        KC_TAB , KC_Q  ,KC_W   ,KC_E   , KC_R  , KC_T  , KC_END  , 			KC_HOME  , KC_Y   , KC_U    , KC_I    , KC_O   , KC_P   ,KC_MINUS,
+        KC_LCTL, KC_A  ,KC_S   ,KC_D   , KC_F  , KC_G  , KC_PGDN  , 			KC_PGUP  , KC_H   , KC_J    , KC_K    , KC_L   , KC_SCLN,KC_QUOT ,
+        KC_LSFT, KC_Z  ,KC_X   ,KC_C   , KC_V  , KC_B  , KC_LBRC, 			KC_RBRC, KC_N   , KC_M    , KC_COMM , KC_DOT , KC_SLSH, KC_RSFT,
+             KC_NO  , MO(_LAYERB) ,KC_LGUI,KC_LALT,       KC_SPC ,		KC_MUTE,            KC_ENT ,		KC_BSPC , MO(_LAYERC) , KC_INS , KC_DEL
+),
+    [_LAYERB] = LAYOUT_ortho_5x14(
+        RGB_TOG , RGB_HUD  ,RGB_HUI   ,RGB_SAD   , RGB_SAI  , RGB_VAD  , RGB_VAI  ,                       RGB_M_P  , RGB_M_B   , RGB_M_R    , RGB_M_SW    , RGB_M_K   , RGB_M_TW   , RGB_M_G ,
+        KC_TRNS , KC_TRNS, KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS  ,              KC_TRNS  , KC_TRNS , KC_BTN1    , KC_MS_U    , KC_BTN2   , KC_TRNS   ,KC_TRNS,
+        KC_TRNS, KC_TRNS  ,KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS  ,              KC_TRNS  , KC_TRNS , KC_MS_L    , KC_MS_D , KC_MS_R , KC_SCLN,KC_QUOT ,
+        KC_TRNS, KC_TRNS  ,KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS ,               KC_TRNS  , KC_TRNS , KC_TRNS    , KC_TRNS , KC_TRNS , KC_NUBS, KC_TRNS,
+             KC_TRNS  , KC_TRNS ,KC_TRNS,KC_TRNS,  KC_TRNS ,                       RGB_RMOD,      KC_TRNS  , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+),
+    [_LAYERC] = LAYOUT_ortho_5x14(
+        KC_TRNS , KC_F1  ,KC_F2   ,KC_F3   , KC_F4  , KC_F5  , KC_TRNS  ,                       KC_TRNS  , KC_F6   , KC_F7    , KC_F8    , KC_F9   , KC_F10   , KC_GRV ,
+        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_LEFT    , KC_DOWN , KC_RIGHT , KC_SCLN,KC_QUOT ,
+        KC_TRNS, KC_TRNS  ,KC_TRNS   ,KC_TRNS   , KC_TRNS  , KC_TRNS  , KC_TRNS ,               KC_TRNS  , KC_TRNS , KC_TRNS    , KC_TRNS , KC_TRNS , KC_NUBS, KC_TRNS,
+             KC_TRNS  , KC_TRNS ,KC_TRNS,KC_TRNS,  KC_TRNS ,                       RGB_MOD,      KC_TRNS  , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
+)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+    [_LAYERA] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+    [_LAYERB] =  { ENCODER_CCW_CW(RGB_HUD, RGB_HUI)},
+    [_LAYERC] =  { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}
+};
+#endif
diff --git a/keyboards/proteus67/keymaps/via/rules.mk b/keyboards/proteus67/keymaps/via/rules.mk
new file mode 100644
index 00000000000..f1adcab005e
--- /dev/null
+++ b/keyboards/proteus67/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/proteus67/proteus67.c b/keyboards/proteus67/proteus67.c
new file mode 100644
index 00000000000..4073ac87d3e
--- /dev/null
+++ b/keyboards/proteus67/proteus67.c
@@ -0,0 +1,42 @@
+// Copyright 2023 James Gzowski
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+enum custom_layer {
+    _LAYERA,
+    _LAYERB,
+    _LAYERC,
+};
+
+// MO(_LAYERB)
+const rgblight_segment_t PROGMEM backlight_layer_layerb[] = RGBLIGHT_LAYER_SEGMENTS(
+    {0, 4, HSV_GOLD}
+);
+// MO(_LAYERC)
+const rgblight_segment_t PROGMEM backlight_layer_layerc[] = RGBLIGHT_LAYER_SEGMENTS(
+    {0, 4, HSV_CYAN}
+);
+const rgblight_segment_t PROGMEM backlight_layer_layera[] = RGBLIGHT_LAYER_SEGMENTS(
+    {0, 4, HSV_BLACK}
+);
+const rgblight_segment_t* const PROGMEM set_backlight_mode[] = RGBLIGHT_LAYERS_LIST(
+    backlight_layer_layerb,
+    backlight_layer_layerc,
+    backlight_layer_layera
+);
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+    rgblight_set_layer_state(0, layer_state_cmp(state, _LAYERB));
+    rgblight_set_layer_state(1, layer_state_cmp(state, _LAYERC));
+    rgblight_set_layer_state(2, layer_state_cmp(state, _LAYERA));
+
+    return layer_state_set_user(state);
+}
+
+void keyboard_post_init_kb(void) {
+    rgblight_set_effect_range(4, 17);
+    rgblight_sethsv_range(HSV_BLACK, 0, 4);
+    rgblight_layers = set_backlight_mode;
+
+    keyboard_post_init_user();
+}
diff --git a/keyboards/proteus67/readme.md b/keyboards/proteus67/readme.md
new file mode 100644
index 00000000000..b1422b80421
--- /dev/null
+++ b/keyboards/proteus67/readme.md
@@ -0,0 +1,25 @@
+# proteus67
+
+![proteus67](https://i.imgur.com/mYhl7Jah.png)
+
+67 key ortholinear layout with rotary encoder.
+
+* Keyboard Maintainer: [James Gzowski](https://github.com/gzowski)
+* Hardware Supported: Elite-Pi or equivilent RP2040 controller with additional I/O along bottom.
+* Build Guide: [Proteus67](https://github.com/gzowski/Proteus67)
+
+Make example for this keyboard (after setting up your build environment):
+	
+    make proteus67:default
+
+Flashing example for this keyboard:
+
+    make proteus67: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
+
+* **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, if using a RP2040 press repeatidly to enter boot mode.
+* **Hold down boot loader button on MCU** Hold down the boot loader button on the MCU while plugging in the keyboard
diff --git a/keyboards/proteus67/rules.mk b/keyboards/proteus67/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/proteus67/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank