diff --git a/.editorconfig b/.editorconfig
index 3a537d01b28..692a84da610 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -11,7 +11,8 @@ charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
-[{*.yaml,*.yml}] # To match GitHub Actions formatting
+ # To match GitHub Actions formatting
+[*.{yaml,yml}]
indent_size = 2
[*.md]
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index d402488d407..868237d9599 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,6 +1,5 @@
-
## Description
@@ -15,7 +14,7 @@
- [ ] New feature
- [ ] Enhancement/optimization
- [ ] Keyboard (addition or update)
-- [ ] Keymap/layout/userspace (addition or update)
+- [ ] Keymap/layout (addition or update)
- [ ] Documentation
## Issues Fixed or Closed by This PR
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 7f588fda608..e04bcd080b1 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -56,7 +56,7 @@ jobs:
- name: Deploy
if: ${{ github.event_name == 'push' && github.repository == 'qmk/qmk_firmware' }}
- uses: JamesIves/github-pages-deploy-action@v4.6.3
+ uses: JamesIves/github-pages-deploy-action@v4.6.9
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: gh-pages
diff --git a/.github/workflows/format_push.yml b/.github/workflows/format_push.yml
index ea60fc95b45..c861b2c1112 100644
--- a/.github/workflows/format_push.yml
+++ b/.github/workflows/format_push.yml
@@ -47,7 +47,7 @@ jobs:
git config user.email 'hello@qmk.fm'
- name: Create Pull Request
- uses: peter-evans/create-pull-request@v6
+ uses: peter-evans/create-pull-request@v7
if: ${{ github.repository == 'qmk/qmk_firmware'}}
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
diff --git a/.github/workflows/regen_push.yml b/.github/workflows/regen_push.yml
index 0f014111413..9a05a9461df 100644
--- a/.github/workflows/regen_push.yml
+++ b/.github/workflows/regen_push.yml
@@ -34,7 +34,7 @@ jobs:
git config user.email 'hello@qmk.fm'
- name: Create Pull Request
- uses: peter-evans/create-pull-request@v6
+ uses: peter-evans/create-pull-request@v7
if: ${{ github.repository == 'qmk/qmk_firmware'}}
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
diff --git a/builddefs/docsgen/.vitepress/config.mts b/builddefs/docsgen/.vitepress/config.mts
index 54ecae2e86b..d2fe2886b21 100644
--- a/builddefs/docsgen/.vitepress/config.mts
+++ b/builddefs/docsgen/.vitepress/config.mts
@@ -39,8 +39,15 @@ export default defineConfig(({ mode }) => {
provider: "local",
},
+ editLink: {
+ pattern: 'https://github.com/qmk/qmk_firmware/edit/master/docs/:path'
+ },
+ lastUpdated: true,
+
sidebar: sidebar,
+ externalLinkIcon: true,
+
socialLinks: [
{ icon: { svg: '' }, link: "https://reddit.com/r/olkb" },
{ icon: "discord", link: "https://discord.gg/qmk" },
diff --git a/builddefs/docsgen/package.json b/builddefs/docsgen/package.json
index 435e7481f1f..3bc4b38c86b 100644
--- a/builddefs/docsgen/package.json
+++ b/builddefs/docsgen/package.json
@@ -1,7 +1,7 @@
{
"license": "GPL-2.0-or-later",
"devDependencies": {
- "vite": "^5.2.10",
+ "vite": "^5.2.14",
"vitepress": "^1.1.0",
"vitepress-plugin-tabs": "^0.5.0",
"vue": "^3.4.24"
diff --git a/builddefs/docsgen/yarn.lock b/builddefs/docsgen/yarn.lock
index b40c1298d01..3b5f68035f7 100644
--- a/builddefs/docsgen/yarn.lock
+++ b/builddefs/docsgen/yarn.lock
@@ -298,85 +298,85 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
-"@rollup/rollup-android-arm-eabi@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.16.4.tgz#5e8930291f1e5ead7fb1171d53ba5c87718de062"
- integrity sha512-GkhjAaQ8oUTOKE4g4gsZ0u8K/IHU1+2WQSgS1TwTcYvL+sjbaQjNHFXbOJ6kgqGHIO1DfUhI/Sphi9GkRT9K+Q==
+"@rollup/rollup-android-arm-eabi@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz#8b613b9725e8f9479d142970b106b6ae878610d5"
+ integrity sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==
-"@rollup/rollup-android-arm64@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.16.4.tgz#ffb84f1359c04ec8a022a97110e18a5600f5f638"
- integrity sha512-Bvm6D+NPbGMQOcxvS1zUl8H7DWlywSXsphAeOnVeiZLQ+0J6Is8T7SrjGTH29KtYkiY9vld8ZnpV3G2EPbom+w==
+"@rollup/rollup-android-arm64@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz#654ca1049189132ff602bfcf8df14c18da1f15fb"
+ integrity sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==
-"@rollup/rollup-darwin-arm64@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.16.4.tgz#b2fcee8d4806a0b1b9185ac038cc428ddedce9f4"
- integrity sha512-i5d64MlnYBO9EkCOGe5vPR/EeDwjnKOGGdd7zKFhU5y8haKhQZTN2DgVtpODDMxUr4t2K90wTUJg7ilgND6bXw==
+"@rollup/rollup-darwin-arm64@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz#6d241d099d1518ef0c2205d96b3fa52e0fe1954b"
+ integrity sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==
-"@rollup/rollup-darwin-x64@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.16.4.tgz#fcb25ccbaa3dd33a6490e9d1c64bab2e0e16b932"
- integrity sha512-WZupV1+CdUYehaZqjaFTClJI72fjJEgTXdf4NbW69I9XyvdmztUExBtcI2yIIU6hJtYvtwS6pkTkHJz+k08mAQ==
+"@rollup/rollup-darwin-x64@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz#42bd19d292a57ee11734c980c4650de26b457791"
+ integrity sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==
-"@rollup/rollup-linux-arm-gnueabihf@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.16.4.tgz#40d46bdfe667e5eca31bf40047460e326d2e26bb"
- integrity sha512-ADm/xt86JUnmAfA9mBqFcRp//RVRt1ohGOYF6yL+IFCYqOBNwy5lbEK05xTsEoJq+/tJzg8ICUtS82WinJRuIw==
+"@rollup/rollup-linux-arm-gnueabihf@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz#f23555ee3d8fe941c5c5fd458cd22b65eb1c2232"
+ integrity sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==
-"@rollup/rollup-linux-arm-musleabihf@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.16.4.tgz#7741df2448c11c56588b50835dbfe91b1a10b375"
- integrity sha512-tJfJaXPiFAG+Jn3cutp7mCs1ePltuAgRqdDZrzb1aeE3TktWWJ+g7xK9SNlaSUFw6IU4QgOxAY4rA+wZUT5Wfg==
+"@rollup/rollup-linux-arm-musleabihf@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz#f3bbd1ae2420f5539d40ac1fde2b38da67779baa"
+ integrity sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==
-"@rollup/rollup-linux-arm64-gnu@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.16.4.tgz#0a23b02d2933e4c4872ad18d879890b6a4a295df"
- integrity sha512-7dy1BzQkgYlUTapDTvK997cgi0Orh5Iu7JlZVBy1MBURk7/HSbHkzRnXZa19ozy+wwD8/SlpJnOOckuNZtJR9w==
+"@rollup/rollup-linux-arm64-gnu@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz#7abe900120113e08a1f90afb84c7c28774054d15"
+ integrity sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==
-"@rollup/rollup-linux-arm64-musl@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.16.4.tgz#e37ef259358aa886cc07d782220a4fb83c1e6970"
- integrity sha512-zsFwdUw5XLD1gQe0aoU2HVceI6NEW7q7m05wA46eUAyrkeNYExObfRFQcvA6zw8lfRc5BHtan3tBpo+kqEOxmg==
+"@rollup/rollup-linux-arm64-musl@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz#9e655285c8175cd44f57d6a1e8e5dedfbba1d820"
+ integrity sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==
-"@rollup/rollup-linux-powerpc64le-gnu@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.16.4.tgz#8c69218b6de05ee2ba211664a2d2ac1e54e43f94"
- integrity sha512-p8C3NnxXooRdNrdv6dBmRTddEapfESEUflpICDNKXpHvTjRRq1J82CbU5G3XfebIZyI3B0s074JHMWD36qOW6w==
+"@rollup/rollup-linux-powerpc64le-gnu@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz#9a79ae6c9e9d8fe83d49e2712ecf4302db5bef5e"
+ integrity sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==
-"@rollup/rollup-linux-riscv64-gnu@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.16.4.tgz#d32727dab8f538d9a4a7c03bcf58c436aecd0139"
- integrity sha512-Lh/8ckoar4s4Id2foY7jNgitTOUQczwMWNYi+Mjt0eQ9LKhr6sK477REqQkmy8YHY3Ca3A2JJVdXnfb3Rrwkng==
+"@rollup/rollup-linux-riscv64-gnu@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz#67ac70eca4ace8e2942fabca95164e8874ab8128"
+ integrity sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==
-"@rollup/rollup-linux-s390x-gnu@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.16.4.tgz#d46097246a187d99fc9451fe8393b7155b47c5ec"
- integrity sha512-1xwwn9ZCQYuqGmulGsTZoKrrn0z2fAur2ujE60QgyDpHmBbXbxLaQiEvzJWDrscRq43c8DnuHx3QorhMTZgisQ==
+"@rollup/rollup-linux-s390x-gnu@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz#9f883a7440f51a22ed7f99e1d070bd84ea5005fc"
+ integrity sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==
-"@rollup/rollup-linux-x64-gnu@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.16.4.tgz#6356c5a03a4afb1c3057490fc51b4764e109dbc7"
- integrity sha512-LuOGGKAJ7dfRtxVnO1i3qWc6N9sh0Em/8aZ3CezixSTM+E9Oq3OvTsvC4sm6wWjzpsIlOCnZjdluINKESflJLA==
+"@rollup/rollup-linux-x64-gnu@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz#70116ae6c577fe367f58559e2cffb5641a1dd9d0"
+ integrity sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==
-"@rollup/rollup-linux-x64-musl@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.16.4.tgz#03a5831a9c0d05877b94653b5ddd3020d3c6fb06"
- integrity sha512-ch86i7KkJKkLybDP2AtySFTRi5fM3KXp0PnHocHuJMdZwu7BuyIKi35BE9guMlmTpwwBTB3ljHj9IQXnTCD0vA==
+"@rollup/rollup-linux-x64-musl@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz#f473f88219feb07b0b98b53a7923be716d1d182f"
+ integrity sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==
-"@rollup/rollup-win32-arm64-msvc@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.16.4.tgz#6cc0db57750376b9303bdb6f5482af8974fcae35"
- integrity sha512-Ma4PwyLfOWZWayfEsNQzTDBVW8PZ6TUUN1uFTBQbF2Chv/+sjenE86lpiEwj2FiviSmSZ4Ap4MaAfl1ciF4aSA==
+"@rollup/rollup-win32-arm64-msvc@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz#4349482d17f5d1c58604d1c8900540d676f420e0"
+ integrity sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==
-"@rollup/rollup-win32-ia32-msvc@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.16.4.tgz#aea0b7e492bd9ed46971cb80bc34f1eb14e07789"
- integrity sha512-9m/ZDrQsdo/c06uOlP3W9G2ENRVzgzbSXmXHT4hwVaDQhYcRpi9bgBT0FTG9OhESxwK0WjQxYOSfv40cU+T69w==
+"@rollup/rollup-win32-ia32-msvc@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz#a6fc39a15db618040ec3c2a24c1e26cb5f4d7422"
+ integrity sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==
-"@rollup/rollup-win32-x64-msvc@4.16.4":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.16.4.tgz#c09ad9a132ccb5a67c4f211d909323ab1294f95f"
- integrity sha512-YunpoOAyGLDseanENHmbFvQSfVL5BxW3k7hhy0eN4rb3gS/ct75dVD0EXOWIqFT/nE8XYW6LP6vz6ctKRi0k9A==
+"@rollup/rollup-win32-x64-msvc@4.22.4":
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz#3dd5d53e900df2a40841882c02e56f866c04d202"
+ integrity sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==
"@shikijs/core@1.3.0", "@shikijs/core@^1.3.0":
version "1.3.0"
@@ -697,28 +697,28 @@ rfdc@^1.3.1:
integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==
rollup@^4.13.0:
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.16.4.tgz#fe328eb41293f20c9593a095ec23bdc4b5d93317"
- integrity sha512-kuaTJSUbz+Wsb2ATGvEknkI12XV40vIiHmLuFlejoo7HtDok/O5eDDD0UpCVY5bBX5U5RYo8wWP83H7ZsqVEnA==
+ version "4.22.4"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.22.4.tgz#4135a6446671cd2a2453e1ad42a45d5973ec3a0f"
+ integrity sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==
dependencies:
"@types/estree" "1.0.5"
optionalDependencies:
- "@rollup/rollup-android-arm-eabi" "4.16.4"
- "@rollup/rollup-android-arm64" "4.16.4"
- "@rollup/rollup-darwin-arm64" "4.16.4"
- "@rollup/rollup-darwin-x64" "4.16.4"
- "@rollup/rollup-linux-arm-gnueabihf" "4.16.4"
- "@rollup/rollup-linux-arm-musleabihf" "4.16.4"
- "@rollup/rollup-linux-arm64-gnu" "4.16.4"
- "@rollup/rollup-linux-arm64-musl" "4.16.4"
- "@rollup/rollup-linux-powerpc64le-gnu" "4.16.4"
- "@rollup/rollup-linux-riscv64-gnu" "4.16.4"
- "@rollup/rollup-linux-s390x-gnu" "4.16.4"
- "@rollup/rollup-linux-x64-gnu" "4.16.4"
- "@rollup/rollup-linux-x64-musl" "4.16.4"
- "@rollup/rollup-win32-arm64-msvc" "4.16.4"
- "@rollup/rollup-win32-ia32-msvc" "4.16.4"
- "@rollup/rollup-win32-x64-msvc" "4.16.4"
+ "@rollup/rollup-android-arm-eabi" "4.22.4"
+ "@rollup/rollup-android-arm64" "4.22.4"
+ "@rollup/rollup-darwin-arm64" "4.22.4"
+ "@rollup/rollup-darwin-x64" "4.22.4"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.22.4"
+ "@rollup/rollup-linux-arm-musleabihf" "4.22.4"
+ "@rollup/rollup-linux-arm64-gnu" "4.22.4"
+ "@rollup/rollup-linux-arm64-musl" "4.22.4"
+ "@rollup/rollup-linux-powerpc64le-gnu" "4.22.4"
+ "@rollup/rollup-linux-riscv64-gnu" "4.22.4"
+ "@rollup/rollup-linux-s390x-gnu" "4.22.4"
+ "@rollup/rollup-linux-x64-gnu" "4.22.4"
+ "@rollup/rollup-linux-x64-musl" "4.22.4"
+ "@rollup/rollup-win32-arm64-msvc" "4.22.4"
+ "@rollup/rollup-win32-ia32-msvc" "4.22.4"
+ "@rollup/rollup-win32-x64-msvc" "4.22.4"
fsevents "~2.3.2"
shiki@1.3.0, shiki@^1.3.0:
@@ -743,10 +743,10 @@ tabbable@^6.2.0:
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
-vite@^5.2.10, vite@^5.2.9:
- version "5.2.10"
- resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.10.tgz#2ac927c91e99d51b376a5c73c0e4b059705f5bd7"
- integrity sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==
+vite@^5.2.14, vite@^5.2.9:
+ version "5.2.14"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.14.tgz#fd5f60facf6b5f90ec7da6323c467a365d380c3d"
+ integrity sha512-TFQLuwWLPms+NBNlh0D9LZQ+HXW471COABxw/9TEUBrjuHMo9BrYBPrN/SYAwIuVL+rLerycxiLT41t4f5MZpA==
dependencies:
esbuild "^0.20.1"
postcss "^8.4.38"
diff --git a/docs/_sidebar.json b/docs/_sidebar.json
index 2ca62af92a0..d691011d641 100644
--- a/docs/_sidebar.json
+++ b/docs/_sidebar.json
@@ -167,7 +167,7 @@
},
{ "text": "Audio", "link": "/features/audio" },
{ "text": "Bluetooth", "link": "/features/bluetooth" },
- { "text": "Bootmagic Lite", "link": "/features/bootmagic" },
+ { "text": "Bootmagic", "link": "/features/bootmagic" },
{ "text": "Converters", "link": "/feature_converters" },
{ "text": "Custom Matrix", "link": "/custom_matrix" },
{ "text": "DIP Switch", "link": "/features/dip_switch" },
diff --git a/docs/config_options.md b/docs/config_options.md
index a1ca8c8d503..fec6b22b133 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -413,7 +413,7 @@ Use these to enable or disable building certain features. The more you have enab
* `MAGIC_ENABLE`
* MAGIC actions (BOOTMAGIC without the boot)
* `BOOTMAGIC_ENABLE`
- * Enable Bootmagic Lite
+ * Enable Bootmagic
* `MOUSEKEY_ENABLE`
* Mouse keys
* `EXTRAKEY_ENABLE`
diff --git a/docs/driver_installation_zadig.md b/docs/driver_installation_zadig.md
index 099376faeb1..9743c0adc2f 100644
--- a/docs/driver_installation_zadig.md
+++ b/docs/driver_installation_zadig.md
@@ -8,8 +8,8 @@ We recommend the use of the [Zadig](https://zadig.akeo.ie/) utility. If you have
## Installation
-Put your keyboard into bootloader mode, either by hitting the `QK_BOOT` keycode (which may be on a different layer), or by pressing the reset switch that's usually located on the underside of the board. If your keyboard has neither, try holding Escape or Space+`B` as you plug it in (see the [Bootmagic Lite](features/bootmagic) docs for more details). Some boards use [Command](features/command) instead of Bootmagic; in this case, you can enter bootloader mode by hitting Left Shift+Right Shift+`B` or Left Shift+Right Shift+Escape at any point while the keyboard is plugged in.
-Some keyboards may have specific instructions for entering the bootloader. For example, the [Bootmagic Lite](features/bootmagic) key (default: Escape) might be on a different key, e.g. Left Control; or the magic combination for Command (default: Left Shift+Right Shift) might require you to hold something else, e.g. Left Control+Right Control. Refer to the board's README file if you are unsure.
+Put your keyboard into bootloader mode, either by hitting the `QK_BOOT` keycode (which may be on a different layer), or by pressing the reset switch that's usually located on the underside of the board. If your keyboard has neither, try holding Escape or Space+`B` as you plug it in (see the [Bootmagic](features/bootmagic) docs for more details). Some boards use [Command](features/command) instead of Bootmagic; in this case, you can enter bootloader mode by hitting Left Shift+Right Shift+`B` or Left Shift+Right Shift+Escape at any point while the keyboard is plugged in.
+Some keyboards may have specific instructions for entering the bootloader. For example, the [Bootmagic](features/bootmagic) key (default: Escape) might be on a different key, e.g. Left Control; or the magic combination for Command (default: Left Shift+Right Shift) might require you to hold something else, e.g. Left Control+Right Control. Refer to the board's README file if you are unsure.
To put a device in bootloader mode with USBaspLoader, tap the `RESET` button while holding down the `BOOT` button.
Alternatively, hold `BOOT` while inserting the USB cable.
diff --git a/docs/drivers/audio.md b/docs/drivers/audio.md
index c764c97369a..165e61f0655 100644
--- a/docs/drivers/audio.md
+++ b/docs/drivers/audio.md
@@ -57,27 +57,32 @@ This driver needs one Timer per enabled/used DAC channel, to trigger conversion;
Additionally, in the board config, you'll want to make changes to enable the DACs, GPT for Timers 6, 7 and 8:
-```c
-//halconf.h:
-#define HAL_USE_DAC TRUE
-#define HAL_USE_GPT TRUE
+::: code-group
+```c [halconf.h]
+#pragma once
+
+#define HAL_USE_DAC TRUE // [!code focus]
+#define HAL_USE_GPT TRUE // [!code focus]
+
#include_next
```
+```c [mcuconf.h]
+#pragma once
-```c
-// mcuconf.h:
#include_next
-#undef STM32_DAC_USE_DAC1_CH1
-#define STM32_DAC_USE_DAC1_CH1 TRUE
-#undef STM32_DAC_USE_DAC1_CH2
-#define STM32_DAC_USE_DAC1_CH2 TRUE
-#undef STM32_GPT_USE_TIM6
-#define STM32_GPT_USE_TIM6 TRUE
-#undef STM32_GPT_USE_TIM7
-#define STM32_GPT_USE_TIM7 TRUE
-#undef STM32_GPT_USE_TIM8
-#define STM32_GPT_USE_TIM8 TRUE
+
+#undef STM32_DAC_USE_DAC1_CH1 // [!code focus]
+#define STM32_DAC_USE_DAC1_CH1 TRUE // [!code focus]
+#undef STM32_DAC_USE_DAC1_CH2 // [!code focus]
+#define STM32_DAC_USE_DAC1_CH2 TRUE // [!code focus]
+#undef STM32_GPT_USE_TIM6 // [!code focus]
+#define STM32_GPT_USE_TIM6 TRUE // [!code focus]
+#undef STM32_GPT_USE_TIM7 // [!code focus]
+#define STM32_GPT_USE_TIM7 TRUE // [!code focus]
+#undef STM32_GPT_USE_TIM8 // [!code focus]
+#define STM32_GPT_USE_TIM8 TRUE // [!code focus]
```
+:::
::: tip
Note: DAC1 (A4) uses TIM6, DAC2 (A5) uses TIM7, and the audio state timer uses TIM8 (configurable).
@@ -95,23 +100,28 @@ only needs one timer (GPTD6, Tim6) to trigger the DAC unit to do a conversion; t
Additionally, in the board config, you'll want to make changes to enable the DACs, GPT for Timer 6:
-```c
-//halconf.h:
-#define HAL_USE_DAC TRUE
-#define HAL_USE_GPT TRUE
+::: code-group
+```c [halconf.h]
+#pragma once
+
+#define HAL_USE_DAC TRUE // [!code focus]
+#define HAL_USE_GPT TRUE // [!code focus]
+
#include_next
```
+```c [mcuconf.h]
+#pragma once
-```c
-// mcuconf.h:
#include_next
-#undef STM32_DAC_USE_DAC1_CH1
-#define STM32_DAC_USE_DAC1_CH1 TRUE
-#undef STM32_DAC_USE_DAC1_CH2
-#define STM32_DAC_USE_DAC1_CH2 TRUE
-#undef STM32_GPT_USE_TIM6
-#define STM32_GPT_USE_TIM6 TRUE
+
+#undef STM32_DAC_USE_DAC1_CH1 // [!code focus]
+#define STM32_DAC_USE_DAC1_CH1 TRUE // [!code focus]
+#undef STM32_DAC_USE_DAC1_CH2 // [!code focus]
+#define STM32_DAC_USE_DAC1_CH2 TRUE // [!code focus]
+#undef STM32_GPT_USE_TIM6 // [!code focus]
+#define STM32_GPT_USE_TIM6 TRUE // [!code focus]
```
+:::
### DAC Config
@@ -170,19 +180,25 @@ This driver uses the ChibiOS-PWM system to produce a square-wave on specific out
The hardware directly toggles the pin via its alternate function. See your MCU's data-sheet for which pin can be driven by what timer - looking for TIMx_CHy and the corresponding alternate function.
A configuration example for the STM32F103C8 would be:
-```c
-//halconf.h:
-#define HAL_USE_PWM TRUE
-#define HAL_USE_PAL TRUE
+
+::: code-group
+```c [halconf.h]
+#pragma once
+
+#define HAL_USE_PWM TRUE // [!code focus]
+#define HAL_USE_PAL TRUE // [!code focus]
+
#include_next
```
+```c [mcuconf.h]
+#pragma once
-```c
-// mcuconf.h:
#include_next
-#undef STM32_PWM_USE_TIM1
-#define STM32_PWM_USE_TIM1 TRUE
+
+#undef STM32_PWM_USE_TIM1 // [!code focus]
+#define STM32_PWM_USE_TIM1 TRUE // [!code focus]
```
+:::
If we now target pin A8, looking through the data-sheet of the STM32F103C8, for the timers and alternate functions
- TIM1_CH1 = PA8 <- alternate0
diff --git a/docs/drivers/i2c.md b/docs/drivers/i2c.md
index 10949ed59e0..c806a090c56 100644
--- a/docs/drivers/i2c.md
+++ b/docs/drivers/i2c.md
@@ -54,18 +54,25 @@ The ATmega16/32U2 does not possess I2C functionality, and so cannot use this dri
You'll need to determine which pins can be used for I2C -- a an example, STM32 parts generally have multiple I2C peripherals, labeled I2C1, I2C2, I2C3 etc.
-To enable I2C, modify your board's `halconf.h` to enable I2C:
+To enable I2C, modify your board's `halconf.h` to enable I2C, then modify your board's `mcuconf.h` to enable the peripheral you've chosen:
-```c
-#define HAL_USE_I2C TRUE
+::: code-group
+```c [halconf.h]
+#pragma once
+
+#define HAL_USE_I2C TRUE // [!code focus]
+
+#include_next
```
+```c [mcuconf.h]
+#pragma once
-Then, modify your board's `mcuconf.h` to enable the peripheral you've chosen, for example:
+#include_next
-```c
-#undef STM32_I2C_USE_I2C2
-#define STM32_I2C_USE_I2C2 TRUE
+#undef STM32_I2C_USE_I2C2 // [!code focus]
+#define STM32_I2C_USE_I2C2 TRUE // [!code focus]
```
+:::
|`mcuconf.h` Setting |Description |Default|
|----------------------------|----------------------------------------------------------------------------------|-------|
diff --git a/docs/drivers/serial.md b/docs/drivers/serial.md
index 75d11bc93bc..dda75f629a2 100644
--- a/docs/drivers/serial.md
+++ b/docs/drivers/serial.md
@@ -12,8 +12,6 @@ The Serial driver powers the [Split Keyboard](../features/split_keyboard) featur
Serial in this context should be read as **sending information one bit at a time**, rather than implementing UART/USART/RS485/RS232 standards.
:::
-
-
## Bitbang
This is the Default driver, absence of configuration assumes this driver. It works by [bit banging](https://en.wikipedia.org/wiki/Bit_banging) a GPIO pin using the CPU. It is therefore not as efficient as a dedicated hardware peripheral, which the Half-duplex and Full-duplex drivers use.
@@ -53,11 +51,15 @@ SERIAL_DRIVER = bitbang
#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
```
-3. On ARM platforms you must turn on ChibiOS `PAL_USE_CALLBACKS` feature:
+3. On ARM platforms you must turn on ChibiOS PAL callbacks:
-* In `halconf.h` add the line `#define PAL_USE_CALLBACKS TRUE`.
+```c
+#pragma once
-
+#define PAL_USE_CALLBACKS TRUE // [!code focus]
+
+#include_next
+```
## USART Half-duplex
@@ -117,8 +119,6 @@ For STM32 MCUs several GPIO configuration options can be changed as well. See th
4. Decide either for `SERIAL`, `SIO`, or `PIO` subsystem. See section ["Choosing a driver subsystem"](#choosing-a-driver-subsystem).
-
-
## USART Full-duplex
Targeting ARM boards based on ChibiOS where communication is offloaded to an USART hardware device. The advantages over bitbanging are fast, accurate timings and reduced CPU usage; therefore it is advised to choose this driver over all others where possible. Due to its internal design Full-duplex is slightly more efficient than the Half-duplex driver, but Full-duplex should be primarily chosen if Half-duplex operation is not supported by the controller's USART peripheral.
@@ -179,38 +179,46 @@ For STM32 MCUs several GPIO configuration options, including the ability for `TX
4. Decide either for `SERIAL`, `SIO`, or `PIO` subsystem. See section ["Choosing a driver subsystem"](#choosing-a-driver-subsystem).
-
-
## Choosing a driver subsystem
### The `SERIAL` driver
The `SERIAL` Subsystem is supported for the majority of ChibiOS MCUs and should be used whenever supported. Follow these steps in order to activate it:
-1. In your keyboards `halconf.h` add:
+1. Enable the SERIAL subsystem in the ChibiOS HAL.
-```c
-#define HAL_USE_SERIAL TRUE
-```
+ Add the following to your keyboard's `halconf.h`, creating it if necessary:
-2. In your keyboards `mcuconf.h`: activate the USART peripheral that is used on your MCU. The shown example is for an STM32 MCU, so this will not work on MCUs by other manufacturers. You can find the correct names in the `mcuconf.h` files of your MCU that ship with ChibiOS.
-
-Just below `#include_next ` add:
+ ```c
+ #pragma once
-```c
-#include_next
+ #define HAL_USE_SERIAL TRUE // [!code focus]
-#undef STM32_SERIAL_USE_USARTn
-#define STM32_SERIAL_USE_USARTn TRUE
-```
+ #include_next
+ ```
-Where 'n' matches the peripheral number of your selected USART on the MCU.
+2. Activate the USART peripheral that is used on your MCU. The shown example is for an STM32 MCU, so this will not work on MCUs by other manufacturers. You can find the correct names in the `mcuconf.h` files of your MCU that ship with ChibiOS.
-3. In you keyboards `config.h`: override the default USART `SERIAL` driver if you use a USART peripheral that does not belong to the default selected `SD1` driver. For instance, if you selected `STM32_SERIAL_USE_USART3` the matching driver would be `SD3`.
+ Add the following to your keyboard's `mcuconf.h`, creating it if necessary:
-```c
- #define SERIAL_USART_DRIVER SD3
- ```
+ ```c
+ #pragma once
+
+ #include_next
+
+ #undef STM32_SERIAL_USE_USARTn // [!code focus]
+ #define STM32_SERIAL_USE_USARTn TRUE // [!code focus]
+ ```
+
+ Where *n* matches the peripheral number of your selected USART on the MCU.
+
+3. Override the default USART `SERIAL` driver if you use a USART peripheral that does not belong to the default selected `SD1` driver. For instance, if you selected `STM32_SERIAL_USE_USART3` the matching driver would be `SD3`.
+
+ Add the following to your keyboard's `config.h`:
+
+ ```c
+ #define SERIAL_USART_DRIVER SD3
+ ```
### The `SIO` driver
@@ -218,31 +226,41 @@ The `SIO` Subsystem was added to ChibiOS with the 21.11 release and is only supp
Follow these steps in order to activate it:
-1. In your keyboards `halconf.h` add:
+1. Enable the SIO subsystem in the ChibiOS HAL.
-```c
-#define HAL_USE_SIO TRUE
-```
+ Add the following to your keyboard's `halconf.h`, creating it if necessary:
-2. In your keyboards `mcuconf.h:` activate the USART peripheral that is used on your MCU. The shown example is for an STM32 MCU, so this will not work on MCUs by other manufacturers. You can find the correct names in the `mcuconf.h` files of your MCU that ship with ChibiOS.
-
-Just below `#include_next ` add:
+ ```c
+ #pragma once
-```c
-#include_next
+ #define HAL_USE_SIO TRUE // [!code focus]
-#undef STM32_SIO_USE_USARTn
-#define STM32_SIO_USE_USARTn TRUE
-```
+ #include_next
+ ```
-Where 'n' matches the peripheral number of your selected USART on the MCU.
+2. Activate the USART peripheral that is used on your MCU. The shown example is for an STM32 MCU, so this will not work on MCUs by other manufacturers. You can find the correct names in the `mcuconf.h` files of your MCU that ship with ChibiOS.
-3. In the keyboard's `config.h` file: override the default USART `SIO` driver if you use a USART peripheral that does not belong to the default selected `SIOD1` driver. For instance, if you selected `STM32_SERIAL_USE_USART3` the matching driver would be `SIOD3`.
+ Add the following to your keyboard's `mcuconf.h`, creating it if necessary:
+
+ ```c
+ #pragma once
+
+ #include_next
+
+ #undef STM32_SIO_USE_USARTn // [!code focus]
+ #define STM32_SIO_USE_USARTn TRUE // [!code focus]
+ ```
+
+ Where *n* matches the peripheral number of your selected USART on the MCU.
+
+3. Override the default USART `SIO` driver if you use a USART peripheral that does not belong to the default selected `SIOD1` driver. For instance, if you selected `STM32_SERIAL_USE_USART3` the matching driver would be `SIOD3`.
+
+ Add the following to your keyboard's `config.h`:
+
+ ```c
+ #define SERIAL_USART_DRIVER SIOD3
+ ```
-```c
- #define SERIAL_USART_DRIVER SIOD3
- ```
-
### The `PIO` driver
The `PIO` subsystem is a Raspberry Pi RP2040 specific implementation, using an integrated PIO peripheral and is therefore only available on this MCU. Because of the flexible nature of PIO peripherals, **any** GPIO pin can be used as a `TX` or `RX` pin. Half-duplex and Full-duplex operation modes are fully supported with this driver. Half-duplex uses the built-in pull-ups and GPIO manipulation of the RP2040 to drive the line high by default, thus an external pull-up resistor **is not required**.
@@ -254,8 +272,6 @@ Optionally, the PIO peripheral utilized for split communication can be changed w
The Serial PIO program uses 2 state machines, 13 instructions and the complete interrupt handler of the PIO peripheral it is running on.
-
-
## Advanced Configuration
There are several advanced configuration options that can be defined in your keyboards `config.h` file:
@@ -265,9 +281,11 @@ There are several advanced configuration options that can be defined in your key
If you're having issues or need a higher baudrate with serial communication, you can change the baudrate which in turn controls the communication speed for serial. You want to lower the baudrate if you experience failed transactions.
```c
-#define SELECT_SOFT_SERIAL_SPEED {#}
+#define SELECT_SOFT_SERIAL_SPEED n
```
+Where *n* is one of:
+
| Speed | Bitbang | Half-duplex and Full-duplex |
| ----- | -------------------------- | --------------------------- |
| `0` | 189000 baud (experimental) | 460800 baud |
@@ -287,8 +305,6 @@ This is the default time window in milliseconds in which a successful communicat
#define SERIAL_USART_TIMEOUT 20 // USART driver timeout. default 20
```
-
-
## Troubleshooting
If you're having issues withe serial communication, you can enable debug messages that will give you insights which part of the communication failed. The enable these messages add to your keyboards `config.h` file:
diff --git a/docs/drivers/spi.md b/docs/drivers/spi.md
index ddc35de8511..43d2a056d5d 100644
--- a/docs/drivers/spi.md
+++ b/docs/drivers/spi.md
@@ -32,20 +32,27 @@ You may use more than one slave select pin, not just the `SS` pin. This is usefu
You'll need to determine which pins can be used for SPI -- as an example, STM32 parts generally have multiple SPI peripherals, labeled SPI1, SPI2, SPI3 etc.
-To enable SPI, modify your board's `halconf.h` to enable SPI:
+To enable SPI, modify your board's `halconf.h` to enable SPI, then modify your board's `mcuconf.h` to enable the peripheral you've chosen:
-```c
-#define HAL_USE_SPI TRUE
-#define SPI_USE_WAIT TRUE
-#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+::: code-group
+```c [halconf.h]
+#pragma once
+
+#define HAL_USE_SPI TRUE // [!code focus]
+#define SPI_USE_WAIT TRUE // [!code focus]
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD // [!code focus]
+
+#include_next
```
+```c [mcuconf.h]
+#pragma once
-Then, modify your board's `mcuconf.h` to enable the peripheral you've chosen, for example:
+#include_next
-```c
-#undef STM32_SPI_USE_SPI2
-#define STM32_SPI_USE_SPI2 TRUE
+#undef STM32_SPI_USE_SPI2 // [!code focus]
+#define STM32_SPI_USE_SPI2 TRUE // [!code focus]
```
+:::
Configuration-wise, you'll need to set up the peripheral as per your MCU's datasheet -- the defaults match the pins for a Proton-C, i.e. STM32F303.
diff --git a/docs/drivers/uart.md b/docs/drivers/uart.md
index 23f5b3d6e43..7cc68727eec 100644
--- a/docs/drivers/uart.md
+++ b/docs/drivers/uart.md
@@ -35,8 +35,12 @@ You'll need to determine which pins can be used for UART -- as an example, STM32
To enable UART, modify your board's `mcuconf.h` to enable the peripheral you've chosen, for example:
```c
-#undef STM32_SERIAL_USE_USART2
-#define STM32_SERIAL_USE_USART2 TRUE
+#pragma once
+
+#include_next
+
+#undef STM32_SERIAL_USE_USART2 // [!code focus]
+#define STM32_SERIAL_USE_USART2 TRUE // [!code focus]
```
Configuration-wise, you'll need to set up the peripheral as per your MCU's datasheet -- the defaults match the pins for a Proton-C, i.e. STM32F303.
diff --git a/docs/drivers/ws2812.md b/docs/drivers/ws2812.md
index 61addf1917e..88c096794f2 100644
--- a/docs/drivers/ws2812.md
+++ b/docs/drivers/ws2812.md
@@ -160,15 +160,23 @@ To configure the DI pin for open drain configuration, add the following to your
Depending on the ChibiOS board configuration, you may need to enable SPI at the keyboard level. For STM32, this would look like:
-`halconf.h`:
-```c
-#define HAL_USE_SPI TRUE
+::: code-group
+```c [halconf.h]
+#pragma once
+
+#define HAL_USE_SPI TRUE // [!code focus]
+
+#include_next
```
-`mcuconf.h`:
-```c
-#undef STM32_SPI_USE_SPI1
-#define STM32_SPI_USE_SPI1 TRUE
+```c [mcuconf.h]
+#pragma once
+
+#include_next
+
+#undef STM32_SPI_USE_SPI1 // [!code focus]
+#define STM32_SPI_USE_SPI1 TRUE // [!code focus]
```
+:::
The following `define`s apply only to the `spi` driver:
@@ -213,15 +221,23 @@ The following `#define`s apply only to the PIO driver:
Depending on the ChibiOS board configuration, you may need to enable PWM at the keyboard level. For STM32, this would look like:
-`halconf.h`:
-```c
-#define HAL_USE_PWM TRUE
+::: code-group
+```c [halconf.h]
+#pragma once
+
+#define HAL_USE_PWM TRUE // [!code focus]
+
+#include_next
```
-`mcuconf.h`:
-```c
-#undef STM32_PWM_USE_TIM2
-#define STM32_PWM_USE_TIM2 TRUE
+```c [mcuconf.h]
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM2 // [!code focus]
+#define STM32_PWM_USE_TIM2 TRUE // [!code focus]
```
+:::
The following `#define`s apply only to the `pwm` driver:
diff --git a/docs/faq_keymap.md b/docs/faq_keymap.md
index 56ccc6f6ccf..05bd4fed3e4 100644
--- a/docs/faq_keymap.md
+++ b/docs/faq_keymap.md
@@ -34,7 +34,7 @@ On first run, the VIA code in the firmware will copy the keymap from flash memor
The simple fix for this is to clear the EEPROM. You can do this in several ways:
-* Hold the Bootmagic Lite key (usually top left/Escape) while plugging the board in, which will also place the board into bootloader mode; then unplug and replug the board.
+* Hold the Bootmagic key (usually top left/Escape) while plugging the board in, which will also place the board into bootloader mode; then unplug and replug the board.
* Press the `QK_CLEAR_EEPROM`/`EE_CLR` keycode if it is accessible on your keymap.
* Place the board into bootloader mode and hit the "Clear EEPROM" button. This may not be available for all bootloaders, and you may need to reflash the board afterwards.
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index 7f5a10d1c13..18740044f43 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -11,7 +11,7 @@ These allow you to combine a modifier with a keycode. When pressed, the keydown
|`RCTL(kc)`| |Hold Right Control and press `kc` |
|`RSFT(kc)`| |Hold Right Shift and press `kc` |
|`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt and press `kc` |
-|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)` |Hold Right GUI and press `kc` |
+|`RGUI(kc)`|`RCMD(kc)`, `RWIN(kc)` |Hold Right GUI and press `kc` |
|`LSG(kc)` |`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` |
|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` |
|`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` |
diff --git a/docs/feature_eeprom.md b/docs/feature_eeprom.md
index 2912407ac76..22257b32022 100644
--- a/docs/feature_eeprom.md
+++ b/docs/feature_eeprom.md
@@ -109,7 +109,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
}
```
-And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EE_CLR` keycode or [Bootmagic Lite](features/bootmagic) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued.
+And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EE_CLR` keycode or [Bootmagic](features/bootmagic) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued.
```c
void eeconfig_init_user(void) { // EEPROM is getting reset!
diff --git a/docs/feature_macros.md b/docs/feature_macros.md
index 055bb3ff8f7..b4e37a1ba96 100644
--- a/docs/feature_macros.md
+++ b/docs/feature_macros.md
@@ -42,38 +42,7 @@ You can define up to 32 macros in a `keymap.json` file, as used by [Configurator
### Selecting Your Host Keyboard Layout
-If you type in a language other than English, or use a non-QWERTY layout like Colemak, Dvorak, or Workman, you may have set your computer's input language to match this layout. This presents a challenge when creating macros - you may need to type different keys to get the same letters! To address this you can add the `host_language` key to your `keymap.json`, like so:
-
-```json
-{
- "keyboard": "handwired/my_macropad",
- "keymap": "my_keymap",
- "host_language": "dvorak",
- "macros": [
- ["Hello, World!"]
- ],
- "layout": "LAYOUT_all",
- "layers": [
- ["QK_MACRO_0"]
- ]
-}
-```
-
-The current list of available languages is:
-
-| belgian | bepo | br_abnt2 | canadian_multilingual |
-|:-------:|:----:|:--------:|:---------------------:|
-| **colemak** | **croatian** | **czech** | **danish** |
-| **dvorak_fr** | **dvorak** | **dvp** | **estonian** |
-| **finnish** | **fr_ch** | **french_afnor** | **french** |
-| **french_osx** | **german_ch** | **german** | **german_osx** |
-| **hungarian** | **icelandic** | **italian** | **italian_osx_ansi** |
-| **italian_osx_iso** | **jis** | **latvian** | **lithuanian_azerty** |
-| **lithuanian_qwerty** | **norman** | **norwegian** | **portuguese** |
-| **portuguese_osx_iso** | **romanian** | **serbian_latin** | **slovak** |
-| **slovenian** | **spanish_dvorak** | **spanish_latin_america** | **spanish** |
-| **swedish** | **turkish_f** | **turkish_q** | **uk** |
-| **us_international** | **workman** | **workman_zxcvm** |
+If you type in a language other than English, or use a non-QWERTY layout like Colemak, Dvorak, or Workman, you may have set your computer's input language to match this layout. This presents a challenge when creating macros — you may need to type different keys to get the same letters! To address this you can use [language-specific keycodes](reference_keymap_extras).
### Macro Basics
diff --git a/docs/features/backlight.md b/docs/features/backlight.md
index 94726756fdb..20f84ac6b59 100644
--- a/docs/features/backlight.md
+++ b/docs/features/backlight.md
@@ -161,15 +161,23 @@ Note that the choice of timer may conflict with the [Audio](audio) feature.
Depending on the ChibiOS board configuration, you may need to enable PWM at the keyboard level. For STM32, this would look like:
-`halconf.h`:
-```c
-#define HAL_USE_PWM TRUE
+::: code-group
+```c [halconf.h]
+#pragma once
+
+#define HAL_USE_PWM TRUE // [!code focus]
+
+#include_next
```
-`mcuconf.h`:
-```c
-#undef STM32_PWM_USE_TIM4
-#define STM32_PWM_USE_TIM4 TRUE
+```c [mcuconf.h]
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM4 // [!code focus]
+#define STM32_PWM_USE_TIM4 TRUE // [!code focus]
```
+:::
The following `#define`s apply only to the `pwm` driver:
@@ -187,15 +195,23 @@ Refer to the ST datasheet for your particular MCU to determine these values. For
Depending on the ChibiOS board configuration, you may need to enable general-purpose timers at the keyboard level. For STM32, this would look like:
-`halconf.h`:
-```c
-#define HAL_USE_GPT TRUE
+::: code-group
+```c [halconf.h]
+#pragma once
+
+#define HAL_USE_GPT TRUE // [!code focus]
+
+#include_next
```
-`mcuconf.h`:
-```c
-#undef STM32_GPT_USE_TIM15
-#define STM32_GPT_USE_TIM15 TRUE
+```c [mcuconf.h]
+#pragma once
+
+#include_next
+
+#undef STM32_GPT_USE_TIM15 // [!code focus]
+#define STM32_GPT_USE_TIM15 TRUE // [!code focus]
```
+:::
The following `#define`s apply only to the `timer` driver:
diff --git a/docs/features/command.md b/docs/features/command.md
index 7ad45103c78..a6f96dcd835 100644
--- a/docs/features/command.md
+++ b/docs/features/command.md
@@ -1,6 +1,6 @@
# Command
-Command, formerly known as Magic, is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic Lite](bootmagic). There is a lot of overlap between this functionality and the [Magic Keycodes](../keycodes_magic). Wherever possible we encourage you to use that feature instead of Command.
+Command, formerly known as Magic, is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic](bootmagic). There is a lot of overlap between this functionality and the [Magic Keycodes](../keycodes_magic). Wherever possible we encourage you to use that feature instead of Command.
On some keyboards Command is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk`:
diff --git a/docs/features/ps2_mouse.md b/docs/features/ps2_mouse.md
index 90f4cca8275..52443c3ce29 100644
--- a/docs/features/ps2_mouse.md
+++ b/docs/features/ps2_mouse.md
@@ -90,18 +90,22 @@ PS2_ENABLE = yes
PS2_DRIVER = interrupt
```
-In your keyboard config.h:
+In your keyboard `config.h`:
```c
#define PS2_CLOCK_PIN A8
#define PS2_DATA_PIN A9
```
-And in the chibios specifig halconf.h:
-```c
-#define PAL_USE_CALLBACKS TRUE
-```
+And in the ChibiOS specific `halconf.h`:
+```c
+#pragma once
+
+#define PAL_USE_CALLBACKS TRUE // [!code focus]
+
+#include_next
+```
### USART Version {#usart-version}
diff --git a/docs/flashing.md b/docs/flashing.md
index 798331eb23d..2afb8588602 100644
--- a/docs/flashing.md
+++ b/docs/flashing.md
@@ -53,7 +53,7 @@ QMK maintains [a fork of the LUFA DFU bootloader](https://github.com/qmk/lufa/tr
//#define QMK_LED E6
//#define QMK_SPEAKER C6
```
-Currently we do not recommend making `QMK_ESC` the same key as the one designated for [Bootmagic Lite](features/bootmagic), as holding it down will cause the MCU to loop back and forth between entering and exiting the bootloader.
+Currently we do not recommend making `QMK_ESC` the same key as the one designated for [Bootmagic](features/bootmagic), as holding it down will cause the MCU to loop back and forth between entering and exiting the bootloader.
The manufacturer and product strings are automatically pulled from `config.h`, with " Bootloader" appended to the product string.
@@ -209,7 +209,7 @@ To enable the additional features, add the following defines to your `config.h`:
//#define QMK_SPEAKER C6
```
-Currently we do not recommend making `QMK_ESC` the same key as the one designated for [Bootmagic Lite](features/bootmagic), as holding it down will cause the MCU to loop back and forth between entering and exiting the bootloader.
+Currently we do not recommend making `QMK_ESC` the same key as the one designated for [Bootmagic](features/bootmagic), as holding it down will cause the MCU to loop back and forth between entering and exiting the bootloader.
The manufacturer and product strings are automatically pulled from `config.h`, with " Bootloader" appended to the product string.
diff --git a/docs/getting_started_docker.md b/docs/getting_started_docker.md
index 6e69b17d347..2d90d8566ab 100644
--- a/docs/getting_started_docker.md
+++ b/docs/getting_started_docker.md
@@ -5,6 +5,7 @@ This project includes a Docker workflow that will allow you to build a new firmw
## Requirements
The main prerequisite is a working `docker` or `podman` install.
+
* [Docker CE](https://docs.docker.com/install/#supported-platforms)
* [Podman](https://podman.io/getting-started/installation)
@@ -18,6 +19,7 @@ cd qmk_firmware
```
Run the following command to build a keymap:
+
```
util/docker_build.sh :
# For example: util/docker_build.sh planck/rev6:default
@@ -32,6 +34,8 @@ util/docker_build.sh keyboard:keymap:target
# For example: util/docker_build.sh planck/rev6:default:flash
```
+Note that mass storage bootloaders are not supported by the `flash` target. In this case you will have to manually copy the firmware file to the keyboard.
+
You can also start the script without any parameters, in which case it will ask you to input the build parameters one by one, which you may find easier to use:
```
diff --git a/docs/newbs.md b/docs/newbs.md
index 64593cbad12..95cde67f0cd 100644
--- a/docs/newbs.md
+++ b/docs/newbs.md
@@ -4,7 +4,7 @@ Your computer keyboard has a processor inside of it, similar to the one inside y
QMK tries to put a lot of power into your hands by making easy things easy, and hard things possible. You don't have to know how to program to create powerful keymaps — you only have to follow a few simple syntax rules.
-Not sure if your keyboard can run QMK? If it's a mechanical keyboard you built yourself chances are good it can. We support a [large number of hobbyist boards](https://qmk.fm/keyboards/). If your current keyboard can't run QMK there are a lot of choices out there for boards that do.
+Not sure if your keyboard can run QMK? If it's a mechanical keyboard you built yourself chances are good it can. We support a [large number of hobbyist boards](https://browse.qmk.fm/). If your current keyboard can't run QMK there are a lot of choices out there for boards that do.
::: tip Is This Guide For Me?
If the thought of programming intimidates you, please [take a look at our online GUI](newbs_building_firmware_configurator) instead.
diff --git a/docs/ref_functions.md b/docs/ref_functions.md
index 577273c05d3..3304981ef56 100644
--- a/docs/ref_functions.md
+++ b/docs/ref_functions.md
@@ -99,7 +99,7 @@ To reset to the bootloader use `QK_BOOTLOADER` or `QK_BOOT` keycode or `reset_ke
## Wiping the EEPROM (Persistent Storage)
-If you're having issues with Audio, RGB Underglow, backlighting or keys acting weird, then you can reset the EEPROM (persistent setting storage). To force an EEPROM reset, use the [`EE_CLR` keycode](quantum_keycodes) or [Bootmagic Lite](features/bootmagic) functionality. If neither of those are an option, then you can use a custom macro to do so.
+If you're having issues with Audio, RGB Underglow, backlighting or keys acting weird, then you can reset the EEPROM (persistent setting storage). To force an EEPROM reset, use the [`EE_CLR` keycode](quantum_keycodes) or [Bootmagic](features/bootmagic) functionality. If neither of those are an option, then you can use a custom macro to do so.
To wipe the EEPROM, run `eeconfig_init()` from your function or macro to reset most of the settings to default.
diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md
index e658b48b715..c1061cdf823 100644
--- a/docs/reference_info_json.md
+++ b/docs/reference_info_json.md
@@ -6,51 +6,51 @@ You can create `info.json` files at every level under `qmk_firmware/keyboards/String Required
* A free-form text string describing the keyboard. This will be used as the USB product string. Can include Unicode characters, escaped to ASCII eg. `\u03A8` (Ψ).
* Example: `"Clueboard 66%"`
-* `maintainer` (Required)
+* `maintainer` String Required
* GitHub username of the maintainer, or `qmk` for community maintained boards.
* Example: `"skullydazed"`
-* `manufacturer` (Required)
+* `manufacturer` String Required
* A free-form text string describing the keyboard's manufacturer. This will be used as the USB manufacturer string. Can include Unicode characters, escaped to ASCII eg. `\u03A8` (Ψ).
* Example: `"Clueboard"`
-* `url` (Required)
- * A URL to the keyboard's product page, [QMK.fm/keyboards](https://qmk.fm/keyboards) page, or other page describing information about the keyboard.
+* `url` String Required
+ * A URL to the keyboard's product page, [QMK Keyboards](https://browse.qmk.fm/) page, or other page describing information about the keyboard.
* Example: `"https://clueboard.co"`
-* `bootloader_instructions`
+* `bootloader_instructions` String
* Instructions for putting the keyboard into a mode that allows for firmware flashing.
* Example: `"Press the button marked RESET on the back of the PCB"`
-* `tags`
+* `tags` Array: String
* A list of tags describing the keyboard.
* Example: `["ortho", "split", "rgb"]`
## Hardware Configuration {#hardware-configuration}
-* `board`
+* `board` String
* Override the default ChibiOS board name (ARM-based keyboards only).
* Example: `"BLACKPILL_STM32_F411"`
-* `bootloader`
+* `bootloader` String
* The bootloader in use on the keyboard. Required if `development_board` is not specified.
-* `development_board`
+* `development_board` String
* The microcontroller development board, if applicable.
* Example: `"promicro"`
-* `pin_compatible`
+* `pin_compatible` String
* The form factor of the development board, if applicable. Must be one of `elite_c`, `promicro`.
-* `processor`
+* `processor` String
* The microcontroller in use on the keyboard. Required if `development_board` is not specified.
## Firmware Configuration {#firmware-configuration}
* `build`
- * `debounce_type`
+ * `debounce_type`String
* The debounce algorithm to use. Must be one of `asym_eager_defer_pk`, `custom`, `sym_defer_g`, `sym_defer_pk`, `sym_defer_pr`, `sym_eager_pk`, `sym_eager_pr`.
- * `firmware_format`
+ * `firmware_format`String
* The format of the final output binary. Must be one of `bin`, `hex`, `uf2`.
- * `lto`
+ * `lto`Boolean
* Enable Link-Time Optimization.
* Default: `false`
-* `features`
+* `features`Object: Boolean
* A dictionary of features to enable or disable.
* Example:
```json
@@ -61,36 +61,36 @@ You can create `info.json` files at every level under `qmk_firmware/keyboards/Boolean
* Enable locking switch support.
* Default: `false`
- * `resync`
+ * `resync` Boolean
* Keep switch state consistent with keyboard LED state.
* Default: `false`
- * `tap_capslock_delay`
+ * `tap_capslock_delay` Number
* The delay between keydown and keyup for Caps Lock tap events in milliseconds.
* Default: `80` (80 ms)
- * `tap_keycode_delay`
+ * `tap_keycode_delay` Number
* The delay between keydown and keyup for tap events in milliseconds.
* Default: `0` (no delay)
* `tapping`
- * `hold_on_other_key_press`
+ * `hold_on_other_key_press` Boolean
* Default: `false`
- * `hold_on_other_key_press_per_key`
+ * `hold_on_other_key_press_per_key` Boolean
* Default: `false`
- * `permissive_hold`
+ * `permissive_hold` Boolean
* Default: `false`
- * `permissive_hold_per_key`
+ * `permissive_hold_per_key` Boolean
* Default: `false`
- * `retro`
+ * `retro` Boolean
* Default: `false`
- * `retro_per_key`
+ * `retro_per_key` Boolean
* Default: `false`
- * `term`
+ * `term` Number
* Default: `200` (200 ms)
- * `term_per_key`
+ * `term_per_key` Boolean
* Default: `false`
- * `toggle`
+ * `toggle` Number
* Default: `5`
## APA102 {#apa102}
@@ -98,11 +98,11 @@ You can create `info.json` files at every level under `qmk_firmware/keyboards/Pin Required
* The GPIO pin connected to `CI` on the first LED in the chain.
- * `data_pin` (Required)
+ * `data_pin` Pin Required
* The GPIO pin connected to `DI` on the first LED in the chain.
- * `default_brightness`
+ * `default_brightness` Number
* The initial global brightness level (independent of the RGB data), from 0 to 31.
* Default: `31`
@@ -112,26 +112,26 @@ Configures the [Audio](features/audio) feature.
* `audio`
* `default`
- * `on`
+ * `on` Boolean
* The default audio enabled state.
* Default: `true`
- * `clicky`
+ * `clicky` Boolean
* The default audio clicky enabled state.
* Default: `true`
- * `driver`
+ * `driver` String
* The driver to use. Must be one of `dac_additive`, `dac_basic`, `pwm_software`, `pwm_hardware`.
- * `macro_beep`
+ * `macro_beep` Boolean
* Play a short beep for `\a` (ASCII `BEL`) characters in Send String macros.
* Default: `false`
- * `pins` (Required)
+ * `pins` Array: Pin Required
* The GPIO pin(s) connected to the speaker(s).
* `power_control`
- * `on_state`
+ * `on_state` 0|1
* The logical GPIO state required to turn the speaker on.
* Default: `1` (on = high)
- * `pin`
+ * `pin` Pin
* The GPIO pin connected to speaker power circuit.
- * `voices`
+ * `voices` Boolean
* Use multiple audio voices.
* Default: `false`
@@ -141,40 +141,40 @@ Configures the [Audio](features/audio) feature.
Configures the [Backlight](features/backlight) feature.
* `backlight`
- * `as_caps_lock`
+ * `as_caps_lock` Boolean
* Use the backlight as a Caps Lock indicator.
* Default: `false`
- * `breathing`
+ * `breathing` Boolean
* Whether backlight breathing is enabled.
* Default: `false`
- * `breathing_period`
+ * `breathing_period` Number
* The length of one backlight breathing cycle in seconds.
* Default: `6` (6 seconds)
* `default`
- * `on`
+ * `on` Boolean
* The default backlight enabled state.
* Default: `true`
- * `breathing`
+ * `breathing` Boolean
* The default backlight breathing state.
* Default: `false`
- * `brightness`
+ * `brightness` Number
* The default brightness level.
* Default: `max_brightness`
- * `driver`
+ * `driver` String
* The driver to use. Must be one of `custom`, `pwm`, `software`, `timer`.
* Default: `"pwm"`
- * `levels`
+ * `levels` Number
* The number of brightness levels (excluding off), from 1 to 31.
* Default: `3`
- * `max_brightness`
+ * `max_brightness` Number
* The maximum PWM value which brightness is scaled to, from 0 to 255.
* Default: `255`
- * `on_state`
+ * `on_state` 0|1
* The logical GPIO state required to turn the LEDs on.
* Default: `1` (on = high)
- * `pin`
+ * `pin` Pin
* The GPIO pin connected to the backlight circuit.
- * `pins`
+ * `pins` Array: Pin
* A list of GPIO pins connected to the backlight LEDs (`software` and `timer` drivers only).
## Bluetooth {#bluetooth}
@@ -182,7 +182,7 @@ Configures the [Backlight](features/backlight) feature.
Configures the [Bluetooth](features/bluetooth) feature.
* `bluetooth`
- * `driver`
+ * `driver` String
* The driver to use. Must be one of `custom`, `bluefruit_le`, `rn42`.
## Bootmagic {#bootmagic}
@@ -190,10 +190,10 @@ Configures the [Bluetooth](features/bluetooth) feature.
Configures the [Bootmagic](features/bootmagic) feature.
* `bootmagic`
- * `enabled`
+ * `enabled` Boolean
* Enables the Bootmagic feature.
* Default: `false`
- * `matrix`
+ * `matrix` Matrix
* The matrix position of the key to check during startup. This should generally be set to the (physically) top left key.
* Default: `[0, 0]`
@@ -202,19 +202,19 @@ Configures the [Bootmagic](features/bootmagic) feature.
Configures the [Caps Word](features/caps_word) feature.
* `caps_word`
- * `both_shifts_turns_on`
+ * `both_shifts_turns_on` Boolean
* Activate Caps Word by pressing both Shift keys.
* Default: `false`
- * `double_tap_shift_turns_on`
+ * `double_tap_shift_turns_on` Boolean
* Activate Caps Word by pressing Left Shift twice.
* Default: `false`
- * `enabled`
+ * `enabled` Boolean
* Enables the Caps Word feature.
* Default: `false`
- * `idle_timeout`
+ * `idle_timeout` Number
* The amount of time before Caps Word automatically deactivates in milliseconds.
* Default: `5000` (5 seconds)
- * `invert_on_shift`
+ * `invert_on_shift` Boolean
* Invert shift state instead of deactivating Caps Word when Shift is pressed.
* Default: `false`
@@ -223,7 +223,7 @@ Configures the [Caps Word](features/caps_word) feature.
Configures the [Combo](features/combo) feature.
* `combo`
- * `term`
+ * `term` Number
* The amount of time to recognize a combo in milliseconds.
* Default: `50` (50 ms)
@@ -232,12 +232,12 @@ Configures the [Combo](features/combo) feature.
Configures the [DIP Switches](features/dip_switch) feature.
* `dip_switch`
- * `enabled`
+ * `enabled` Boolean
* Enable the DIP Switches feature.
* Default: `false`
- * `pins`
+ * `pins` Array: Pin
* A list of GPIO pins connected to the MCU.
- * `matrix_grid`
+ * `matrix_grid` Array: Matrix
* A list of matrix locations in the key matrix.
* Example: `[ [0,6], [1,6], [2,6] ]`
@@ -246,15 +246,15 @@ Configures the [DIP Switches](features/dip_switch) feature.
Configures the [EEPROM](drivers/eeprom) driver.
* `eeprom`
- * `driver`
+ * `driver` String
* The EEPROM backend to use. Must be one of `custom`, `i2c`, `legacy_stm32_flash`, `spi`, `transient`, `vendor`, `wear_leveling`.
* Default: `"vendor"`
* `wear_leveling`
- * `driver`
+ * `driver` String
* The driver to use. Must be one of `embedded_flash`, `legacy`, `rp2040_flash`, `spi_flash`, `custom`.
- * `backing_size`
+ * `backing_size` Number
* Number of bytes used by the wear-leveling algorithm for its underlying storage, and needs to be a multiple of the logical size.
- * `logical_size`
+ * `logical_size` Number
* Number of bytes “exposed” to the rest of QMK and denotes the size of the usable EEPROM.
## Encoder {#encoder}
@@ -262,13 +262,13 @@ Configures the [EEPROM](drivers/eeprom) driver.
Configures the [Encoder](features/encoders) feature.
* `encoder`
- * `rotary`
+ * `rotary` Array: Object
* A list of encoder objects.
- * `pin_a` (Required)
+ * `pin_a` Pin Required
* The GPIO pin connected to the encoder's `A` pin.
- * `pin_b` (Required)
+ * `pin_b` Pin Required
* The GPIO pin connected to the encoder's `B` pin.
- * `resolution`
+ * `resolution` Number
* The number of edge transitions on both pins required to register an input.
* Default: `4`
@@ -277,18 +277,18 @@ Configures the [Encoder](features/encoders) feature.
Configures the [LED Indicators](features/led_indicators) feature.
* `indicators`
- * `caps_lock`
+ * `caps_lock` Pin
* The GPIO pin connected to the Caps Lock LED.
- * `compose`
+ * `compose` Pin
* The GPIO pin connected to the Compose LED.
- * `kana`
+ * `kana` Pin
* The GPIO pin connected to the Kana LED.
- * `num_lock`
+ * `num_lock` Pin
* The GPIO pin connected to the Num Lock LED.
- * `on_state`
+ * `on_state` 0|1
* The logical GPIO state required to turn the LEDs on.
* Default: `1` (on = high)
- * `scroll_lock`
+ * `scroll_lock` Pin
* The GPIO pin connected to the Scroll Lock LED.
## Layouts {#layouts}
@@ -301,10 +301,10 @@ All key positions and rotations are specified in relation to the top-left corner
The ISO enter key is represented by a 1.25u×2uh key. Renderers which utilize info.json layout data (such as `qmk info -l` and the QMK Configurator) should display this key as expected.
-* `community_layouts`
+* `community_layouts` Array: String
* A list of community layouts supported by the keyboard.
* Example: `["60_ansi", "60_iso"]`
-* `layout_aliases`
+* `layout_aliases` Object: String
* A mapping of layout aliases to layout definitions.
* Example:
```json
@@ -313,34 +313,34 @@ The ISO enter key is represented by a 1.25u×2uh key. Renderers which utilize in
"LAYOUT_iso": "LAYOUT_60_iso"
}
```
-* `layouts`
+* `layouts` Object
* A dictionary of layouts supported by the keyboard.
- * `LAYOUT_`
- * `layout`
+ * `LAYOUT_` Object
+ * `layout` Array: Object
* A list of key dictionaries comprising the layout. Each key dictionary contains:
- * `matrix` (Required)
+ * `matrix` Matrix Required
* The matrix position for the key.
* Example: `[0, 4]` (row 0, column 4)
- * `x` (Required)
+ * `x` KeyUnit Required
* The absolute position of the key in the horizontal axis, in key units.
- * `y` (Required)
+ * `y` KeyUnit Required
* The absolute position of the key in the vertical axis, in key units.
- * `h`
+ * `h` KeyUnit
* The height of the key, in key units.
* Default: `1` (1u)
- * `label`
+ * `label` String
* What to name the key. This is *not* a key assignment as in the keymap, but should usually correspond to the keycode for the first layer of the default keymap.
* Example: `"Escape"`
- * `r`
+ * `r` Number
* The rotation angle in degrees. Currently not implemented.
- * `rx`
+ * `rx` Number
* The absolute X position of the rotation axis. Currently not implemented.
- * `ry`
+ * `ry` Number
* The absolute Y position of the rotation axis. Currently not implemented.
- * `w`
+ * `w` KeyUnit
* The width of the key, in key units.
* Default: `1` (1u)
- * `encoder`
+ * `encoder` Number
* The index of an encoder this key should be linked to
* Example: `{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25}`
@@ -349,13 +349,13 @@ The ISO enter key is represented by a 1.25u×2uh key. Renderers which utilize in
Configures the [Leader Key](features/leader_key) feature.
* `leader_key`
- * `timing`
+ * `timing` Boolean
* Reset the `timeout` on each keypress.
* Default: `false`
- * `strict_processing`
+ * `strict_processing` Boolean
* Do not extract the tap keycodes from Layer-Tap and Mod-Tap key events.
* Default: `false`
- * `timeout`
+ * `timeout` Number
* The amount of time to complete a leader sequence in milliseconds.
* Default: `300` (300 ms)
@@ -364,7 +364,7 @@ Configures the [Leader Key](features/leader_key) feature.
Configures the [LED Matrix](features/led_matrix) feature.
* `led_matrix`
- * `animations`
+ * `animations` Object: Boolean
* A dictionary of effects to enable or disable. Effects which are absent default to `false`.
* Example:
```json
@@ -374,82 +374,82 @@ Configures the [LED Matrix](features/led_matrix) feature.
"cycle_left_right": false
}
```
- * `center_point`
+ * `center_point` Array: Number
* The centroid (geometric center) of the LEDs. Used for certain effects.
* Default: `[112, 32]`
* `default`
- * `animation`
+ * `animation` String
* The default effect. Must be one of `led_matrix.animations`
* Default: `"solid"`
- * `on`
+ * `on` Boolean
* The default enabled state.
* Default: `true`
- * `val`
+ * `val` Number
* The default brightness level.
* Default: `max_brightness`
- * `speed`
+ * `speed` Number
* The default animation speed.
* Default: `128`
- * `driver` (Required)
+ * `driver` String Required
* The driver to use. Must be one of `custom`, `is31fl3218`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3737`, `is31fl3741`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`, `snled27351`.
- * `layout` (Required)
+ * `layout` Array: Object Required
* List of LED configuration dictionaries. Each dictionary contains:
- * `flags` (Required)
+ * `flags` Number Required
* A bitfield of flags describing the type of LED.
- * `x` (Required)
+ * `x` Number Required
* The position of the LED in the horizontal axis, from 0 to 224.
- * `y` (Required)
+ * `y` Number Required
* The position of the LED in the vertical axis, from 0 to 64.
- * `matrix`
+ * `matrix` Matrix
* The key matrix position associated with the LED.
* Example: `[0, 2]`
* Example: `{"matrix": [2, 1], "x": 20, "y": 48, "flags": 2}`
- * `led_flush_limit`
+ * `led_flush_limit` Number
* Limits in milliseconds how frequently an animation will update the LEDs.
* Default: `16`
- * `led_process_limit`
+ * `led_process_limit` Number
* Limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness).
* Default: `led_count / 5`
- * `max_brightness`
+ * `max_brightness` Number
* The maximum value which brightness is scaled to, from 0 to 255.
* Default: `255`
- * `react_on_keyup`
+ * `react_on_keyup` Boolean
* Animations react to keyup instead of keydown.
* Default: `false`
- * `sleep`
+ * `sleep` Boolean
* Turn off the LEDs when the host goes to sleep.
* Default: `false`
- * `speed_steps`
+ * `speed_steps` Number
* The number of speed adjustment steps.
* Default: `16`
- * `split_count`
+ * `split_count` Array: Number
* For split keyboards, the number of LEDs on each half.
* Example: `[16, 16]`
- * `timeout`
+ * `timeout` Number
* The LED activity timeout in milliseconds.
* Default: `0` (no timeout)
- * `val_steps`
+ * `val_steps` Number
* The number of brightness adjustment steps.
* Default: `8`
## Matrix {#matrix}
-* `debounce`
+* `debounce` Number
* The debounce time in milliseconds.
* Default: `5` (5 ms)
-* `diode_direction`
+* `diode_direction` String
* Which way the diodes are "pointing". Unused for `matrix_pins.direct`. Must be one of `COL2ROW`, `ROW2COL`.
* `matrix_pins`
- * `cols`
+ * `cols` Array: Pin
* A list of GPIO pins connected to the matrix columns.
* Example: `["A0", "A1", "A2"]`
- * `custom`
+ * `custom` Boolean
* Whether to use a custom matrix scanning implementation.
* Default: `false`
- * `custom_lite`
+ * `custom_lite` Boolean
* Whether to use a "lite" custom matrix scanning implementation.
* Default: `false`
- * `direct`
+ * `direct` Array: Array: Pin
* A 2-dimensional list of GPIO pins connected to each keyswitch, forming the "matrix" rows and columns.
* Example:
```json
@@ -459,16 +459,16 @@ Configures the [LED Matrix](features/led_matrix) feature.
["C0", "C1", "C2"]
]
```
- * `ghost`
+ * `ghost` Boolean
* Whether the matrix has no anti-ghosting diodes.
* Default: `false`
- * `input_pressed_state`
+ * `input_pressed_state` 0|1
* The logical GPIO state of the input pins when a key is pressed.
* Default: `0` (pressed = low)
- * `io_delay`
+ * `io_delay` Number
* The amount of time to wait between row/col selection and col/row pin reading, in microseconds.
* Default: `30` (30 µs)
- * `rows`
+ * `rows` Array: Pin
* A list of GPIO pins connected to the matrix rows.
* Example: `["B0", "B1", "B2"]`
@@ -477,23 +477,23 @@ Configures the [LED Matrix](features/led_matrix) feature.
Configures the [Mouse Keys](features/mouse_keys) feature.
* `mouse_key`
- * `delay`
- * `enabled`
+ * `delay` Number
+ * `enabled` Boolean
* Enables the Mouse Keys feature.
* Default: `false`
- * `interval`
- * `max_speed`
- * `time_to_max`
- * `wheel_delay`
+ * `interval` Number
+ * `max_speed` Number
+ * `time_to_max` Number
+ * `wheel_delay` Number
## One Shot {#one-shot}
Configures [One Shot keys](one_shot_keys).
* `oneshot`
- * `tap_toggle`
+ * `tap_toggle` Number
* The number of times to tap the key in order to hold it.
- * `timeout`
+ * `timeout` Number
* The amount of time before the key is released in milliseconds.
## PS/2 {#ps2}
@@ -501,30 +501,30 @@ Configures [One Shot keys](one_shot_keys).
Configures the [PS/2](features/ps2_mouse) feature.
* `ps2`
- * `clock_pin`
+ * `clock_pin` Pin
* The GPIO pin connected to `CLK` on the PS/2 device.
- * `data_pin`
+ * `data_pin` Pin
* The GPIO pin connected to `DATA` on the PS/2 device.
- * `driver`
+ * `driver` String
* The PS/2 driver to use. Must be one of `busywait`, `interrupt`, `usart`, `vendor`.
* Default: `"busywait"`
- * `enabled`
+ * `enabled` Boolean
* Enable the PS/2 feature.
* Default: `false`
- * `mouse_enabled`
+ * `mouse_enabled` Boolean
* Enable the PS/2 mouse handling.
* Default: `false`
## QMK LUFA Bootloader {#qmk-lufa-bootloader}
* `qmk_lufa_bootloader`
- * `esc_input` (Required)
+ * `esc_input` Pin Required
* The GPIO pin connected to the designated "exit bootloader" key's row (if `COL2ROW`).
- * `esc_output` (Required)
+ * `esc_output` Pin Required
* The GPIO pin connected to the designated "exit bootloader" key's column (if `COL2ROW`).
- * `led`
+ * `led` Pin
* The GPIO pin connected to an LED to flash.
- * `speaker`
+ * `speaker` Pin
* The GPIO pin connected to a speaker to click (can also be used for a second LED).
## RGBLight {#rgblight}
@@ -532,9 +532,9 @@ Configures the [PS/2](features/ps2_mouse) feature.
Configures the [RGB Lighting](features/rgblight) feature.
* `rgblight`
- * `led_count` (Required)
+ * `led_count` Number Required
* The number of LEDs in the chain.
- * `animations`
+ * `animations` Object: Boolean
* A dictionary of effects to enable or disable. Effects which are absent default to `false`.
* Example:
```json
@@ -544,60 +544,60 @@ Configures the [RGB Lighting](features/rgblight) feature.
"snake": false
}
```
- * `brightness_steps`
+ * `brightness_steps` Number
* The number of brightness adjustment steps.
* Default: `17`
* `default`
- * `animation`
+ * `animation` String
* The default effect. Must be one of `rgblight.animations`
* Default: `"static_light"`
- * `on`
+ * `on` Boolean
* The default enabled state.
* Default: `true`
- * `hue`
+ * `hue` Number
* The default hue value.
* Default: `0`
- * `sat`
+ * `sat` Number
* The default saturation value.
* Default: `255`
- * `val`
+ * `val` Number
* The default brightness level.
* Default: `max_brightness`
- * `speed`
+ * `speed` Number
* The default animation speed.
* Default: `0`
- * `driver`
+ * `driver` String
* The driver to use. Must be one of `apa102`, `custom`, `ws2812`.
* Default: `"ws2812"`
- * `hue_steps`
+ * `hue_steps` Number
* The number of hue adjustment steps.
* Default: `8`
* `layers`
- * `blink`
+ * `blink` Boolean
* Enable layer blinking API.
* Default: `false`
- * `enabled`
+ * `enabled` Boolean
* Enable RGB Lighting Layers.
* Default: `false`
- * `max`
+ * `max` Number
* The maximum layer count, from 1 to 32.
* Default: `8`
- * `led_map`
+ * `led_map` Array: Number
* Remap LED indices.
* Example: `[4, 3, 2, 1, 0]`
- * `max_brightness`
+ * `max_brightness` Number
* The maximum value which the HSV "V" component is scaled to, from 0 to 255.
* Default: `255`
- * `saturation_steps`
+ * `saturation_steps` Number
* The number of saturation adjustment steps.
* Default: `17`
- * `sleep`
+ * `sleep` Boolean
* Turn off the LEDs when the host goes to sleep.
* Default: `false`
- * `split`
+ * `split` Boolean
* Enable synchronization between split halves.
* Default: `false`
- * `split_count`
+ * `split_count` Array: Number
* When `rgblight.split` is enabled, the number of LEDs on each half.
* Example: `[10, 10]`
@@ -606,7 +606,7 @@ Configures the [RGB Lighting](features/rgblight) feature.
Configures the [RGB Matrix](features/rgb_matrix) feature.
* `rgb_matrix`
- * `animations`
+ * `animations` Object: Boolean
* A dictionary of effects to enable or disable. Effects which are absent default to `false`.
* Example:
```json
@@ -616,73 +616,73 @@ Configures the [RGB Matrix](features/rgb_matrix) feature.
"cycle_left_right": false
}
```
- * `center_point`
+ * `center_point` Array: Number
* The centroid (geometric center) of the LEDs. Used for certain effects.
* Default: `[112, 32]`
* `default`
- * `animation`
+ * `animation` String
* The default effect. Must be one of `rgb_matrix.animations`
* Default: `"solid_color"`
- * `on`
+ * `on` Boolean
* The default enabled state.
* Default: `true`
- * `hue`
+ * `hue` Number
* The default hue value.
* Default: `0`
- * `sat`
+ * `sat` Number
* The default saturation value.
* Default: `255`
- * `val`
+ * `val` Number
* The default brightness level.
* Default: `max_brightness`
- * `speed`
+ * `speed` Number
* The default animation speed.
* Default: `128`
- * `driver` (Required)
+ * `driver` String Required
* The driver to use. Must be one of `aw20216s`, `custom`, `is31fl3218`, `is31fl3236`, `is31fl3729`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3737`, `is31fl3741`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`, `snled27351`, `ws2812`.
- * `hue_steps`
+ * `hue_steps` Number
* The number of hue adjustment steps.
* Default: `8`
- * `layout` (Required)
+ * `layout` Array: Object Required
* List of LED configuration dictionaries. Each dictionary contains:
- * `flags` (Required)
+ * `flags` Number Required
* A bitfield of flags describing the type of LED.
- * `x` (Required)
+ * `x` Number Required
* The position of the LED in the horizontal axis, from 0 to 224.
- * `y` (Required)
+ * `y` Number Required
* The position of the LED in the vertical axis, from 0 to 64.
- * `matrix`
+ * `matrix` Matrix
* The key matrix position associated with the LED.
* Example: `[0, 2]`
* Example: `{"matrix": [2, 1], "x": 20, "y": 48, "flags": 2}`
- * `led_flush_limit`
+ * `led_flush_limit` Number
* Limits in milliseconds how frequently an animation will update the LEDs.
* Default: `16`
- * `led_process_limit`
+ * `led_process_limit` Number
* Limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness).
* Default: `led_count / 5`
- * `max_brightness`
+ * `max_brightness` Number
* The maximum value which the HSV "V" component is scaled to, from 0 to 255.
* Default: `255`
- * `react_on_keyup`
+ * `react_on_keyup` Boolean
* Animations react to keyup instead of keydown.
* Default: `false`
- * `sat_steps`
+ * `sat_steps` Number
* The number of saturation adjustment steps.
* Default: `16`
- * `sleep`
+ * `sleep` Boolean
* Turn off the LEDs when the host goes to sleep.
* Default: `false`
- * `speed_steps`
+ * `speed_steps` Number
* The number of speed adjustment steps.
* Default: `16`
- * `split_count`
+ * `split_count` Array: Number
* For split keyboards, the number of LEDs on each half.
* Example: `[16, 16]`
- * `timeout`
+ * `timeout` Number
* The LED activity timeout in milliseconds.
* Default: `0` (no timeout)
- * `val_steps`
+ * `val_steps` Number
* The number of brightness adjustment steps.
* Default: `16`
@@ -691,16 +691,16 @@ Configures the [RGB Matrix](features/rgb_matrix) feature.
Configures the [Secure](features/secure) feature.
* `secure`
- * `enabled`
+ * `enabled` Boolean
* Enable the Secure feature.
* Default: `false`
- * `idle_timeout`
+ * `idle_timeout` Number
* Timeout while unlocked before returning to the locked state. Set to `0` to disable.
* Default: `60000` (1 minute)
- * `unlock_sequence`
+ * `unlock_sequence` Array: Matrix
* A list of up to five matrix locations comprising the "unlock sequence".
* Example: `[[0, 0], [0, 1], [4, 3]]`
- * `unlock_timeout`
+ * `unlock_timeout` Number
* Timeout for the user to perform the unlock sequence. Set to `0` to disable.
* Default: `5000` (5 seconds)
@@ -716,7 +716,7 @@ Configures the [Split Keyboard](features/split_keyboard) feature.
* `right`
* `pins`
* See [DIP Switches](#dip-switch) config.
- * `enabled`
+ * `enabled` Boolean
* Enable the Split Keyboard feature.
* Default: `false`
* `encoder`
@@ -724,69 +724,69 @@ Configures the [Split Keyboard](features/split_keyboard) feature.
* `rotary`
* See [Encoder](#encoder) config.
* `handedness`
- * `pin`
+ * `pin` Pin
* The GPIO pin connected to determine handedness.
- * `matrix_grid`
+ * `matrix_grid` Array: Pin
* The GPIO pins of the matrix position which determines the handedness.
* Example: `["A1", "B5"]`
* `matrix_pins`
* `right`
* See [Matrix](#matrix) config.
* `serial`
- * `driver`
+ * `driver` String
* The driver to use. Must be one of `bitbang`, `usart`, `vendor`.
* Default: `"bitbang"`
- * `pin`
+ * `pin` Pin
* The GPIO pin to use for transmit and receive.
- * `soft_serial_speed`
+ * `soft_serial_speed` Number
* The protocol speed, from `0` to `5` (`serial` transport protocol only).
* Default: `1`
* `transport`
- * `protocol`
+ * `protocol` String
* The split transport protocol to use. Must be one of `custom`, `i2c`, `serial`.
* `sync`
- * `activity`
+ * `activity` Boolean
* Mirror the activity timestamps to the secondary half.
* Default: `false`
- * `detected_os`
+ * `detected_os` Boolean
* Mirror the [detected OS](features/os_detection) to the secondary half.
* Default: `false`
- * `haptic`
+ * `haptic` Boolean
* Mirror the haptic state and process haptic feedback to the secondary half.
* Default: `false`
- * `layer_state`
+ * `layer_state` Boolean
* Mirror the layer state to the secondary half.
* Default: `false`
- * `indicators`
+ * `indicators` Boolean
* Mirror the indicator state to the secondary half.
* Default: `false`
- * `matrix_state`
+ * `matrix_state` Boolean
* Mirror the main/primary half's matrix state to the secondary half.
* Default: `false`
- * `modifiers`
+ * `modifiers` Boolean
* Mirror the modifier state to the secondary half.
* Default: `false`
- * `oled`
+ * `oled` Boolean
* Mirror the OLED on/off status to the secondary half.
* Default: `false`
- * `st7565`
+ * `st7565` Boolean
* Mirror the ST7565 on/off status to the secondary half.
* Default: `false`
- * `wpm`
+ * `wpm` Boolean
* Mirror the current WPM value to the secondary half.
* Default: `false`
- * `watchdog`
+ * `watchdog` Boolean
* Reboot the secondary half if it loses connection.
* Default: `false`
- * `watchdog_timeout`
+ * `watchdog_timeout` Number
* The amount of time to wait for communication from the primary half in milliseconds.
* `usb_detect`
- * `enabled`
+ * `enabled` Boolean
* Detect USB connection when determining split half roles.
- * `polling_interval`
+ * `polling_interval` Number
* The polling frequency in milliseconds.
* Default: `10` (10 ms)
- * `timeout`
+ * `timeout` Number
* The amount of time to wait for a USB connection in milliseconds.
* Default: `2000` (2 seconds)
@@ -795,48 +795,48 @@ Configures the [Split Keyboard](features/split_keyboard) feature.
Configures the [Stenography](features/stenography) feature.
* `stenography`
- * `enabled`
+ * `enabled` Boolean
* Enable the Stenography feature.
* Default: `false`
- * `protocol`
+ * `protocol` String
* The Steno protocol to use. Must be one of `all`, `geminipr`, `txbolt`.
* Default: `"all"`
## USB {#usb}
* `usb`
- * `device_version` (Required)
+ * `device_version` String Required
* A BCD version number in the format `MM.m.r` (up to `99.9.9`).
* Example: `"1.0.0"`
- * `pid` (Required)
+ * `pid` String Required
* The USB product ID as a four-digit hexadecimal number.
* Example: `"0x23B0"`
- * `vid` (Required)
+ * `vid` String Required
* The USB vendor ID as a four-digit hexadecimal number.
* Example: `"0xC1ED"`
- * `force_nkro`
+ * `force_nkro` Boolean
* Force NKRO to be active.
* Default: `false`
- * `max_power`
+ * `max_power` Number
* The maximum current draw the host should expect from the device. This does not control the actual current usage.
* Default: `500` (500 mA)
- * `no_startup_check`
+ * `no_startup_check` Boolean
* Disable USB suspend check after keyboard startup.
* Default: `false`
- * `polling_interval`
+ * `polling_interval` Number
* The frequency at which the host should poll the keyboard for reports.
* Default: `1` (1 ms/1000 Hz)
* `shared_endpoint`
- * `keyboard`
+ * `keyboard` Boolean
* Send keyboard reports through the "shared" USB endpoint.
* Default: `false`
- * `mouse`
+ * `mouse` Boolean
* Send mouse reports through the "shared" USB endpoint.
* Default: `true`
- * `suspend_wakeup_delay`
+ * `suspend_wakeup_delay` Number
* The amount of time to wait after sending a wakeup packet, in milliseconds.
* Default: `0` (disabled)
- * `wait_for_enumeration`
+ * `wait_for_enumeration` Boolean
* Force the keyboard to wait for USB enumeration before starting up.
* Default: `false`
@@ -845,17 +845,17 @@ Configures the [Stenography](features/stenography) feature.
Configures the [WS2812](drivers/ws2812) driver.
* `ws2812`
- * `driver`
+ * `driver` String
* The driver to use. Must be one of `bitbang`, `custom`, `i2c`, `pwm`, `spi`, `vendor`.
* Default: `"bitbang"`
- * `pin` (Required)
+ * `pin` Pin Required
* The GPIO pin connected to `DI` on the first LED in the chain (`bitbang`, `pwm`, `spi` and `vendor` drivers only).
- * `i2c_address`
+ * `i2c_address` String
* The I²C address of the WS2812 controller (`i2c` driver only).
* Default: `"0xB0"`
- * `i2c_timeout`
+ * `i2c_timeout` Number
* The I²C timeout in milliseconds (`i2c` driver only).
* Default: `100` (100 ms)
- * `rgbw`
+ * `rgbw` Boolean
* Enable RGBW LEDs.
* Default: `false`
diff --git a/docs/reference_keymap_extras.md b/docs/reference_keymap_extras.md
index d45183b6c6a..f6b4b8faf68 100644
--- a/docs/reference_keymap_extras.md
+++ b/docs/reference_keymap_extras.md
@@ -2,9 +2,31 @@
Keyboards are able to support a wide range of languages. However, this support is not actually achieved within the keyboard itself - instead, it sends numerical codes, which the operating system maps to the appropriate characters depending on the user's configured keyboard layout. By default (and per the HID spec), this is the US ANSI layout. For example, when a Swedish person presses the key with the `å` character printed on it, the keyboard is *actually* sending the keycode for `[`.
-Obviously, this can get confusing, so QMK provides language-specific keycode aliases for many keyboard layouts. These won't do much on their own - you still have to set the matching keyboard layout in your OS settings. Think of them more as keycap labels for your keymap.
+Obviously, this can get confusing, so QMK provides language-specific keycode aliases for many keyboard layouts. These are used in place of the `KC_` prefixed ones. They won't do much on their own - you still have to set the matching keyboard layout in your OS settings. Think of them more as keycap labels for your keymap. The language-specific keycode aliases are defined in the files listed in the [Keycodes Header](#header-files) column below.
-Simply `#include` one of the keycode headers below at the top of your `keymap.c`, and assign the keycodes defined in the header in place of the `KC_` prefixed ones.
+## Selecting Your Host Keyboard Layout
+
+To select a host keyboard layout, simply `#include` one of the [keycode headers](#header-files) below at the top of your `keymap.c`. Example:
+
+```c
+#include QMK_KEYBOARD_H
+
+#include "keymap_japanese.h" // [!code focus]
+```
+
+Alternatively, if using `keymap.json`, add the `host_language` key as shown in the following example. The available languages are those with a _Sendstring LUT Header_ entry in one of the [Header Files](#header-files) tables.
+
+```json
+{
+ "keyboard": "handwired/my_macropad",
+ "keymap": "my_keymap",
+ "host_language": "swedish", // [!code focus]
+ "layout": "LAYOUT_all",
+ "layers": [
+ ["SE_ARNG"]
+ ]
+}
+```
## Sendstring Support
diff --git a/docs/syllabus.md b/docs/syllabus.md
index 3082f1ebd51..b68ded2d359 100644
--- a/docs/syllabus.md
+++ b/docs/syllabus.md
@@ -55,7 +55,7 @@ Everything below here requires a lot of foundational knowledge. Besides being ab
* **Advanced Features**
* [Unicode](features/unicode)
* [API](api_overview)
- * [Bootmagic Lite](features/bootmagic)
+ * [Bootmagic](features/bootmagic)
* **Hardware**
* [How Keyboards Work](how_keyboards_work)
* [How A Keyboard Matrix Works](how_a_matrix_works)
diff --git a/drivers/lcd/st7565.c b/drivers/lcd/st7565.c
index 4fce40edbe0..cf71c5e5a33 100644
--- a/drivers/lcd/st7565.c
+++ b/drivers/lcd/st7565.c
@@ -187,6 +187,8 @@ void st7565_render(void) {
st7565_send_data(&st7565_buffer[ST7565_BLOCK_SIZE * update_start], ST7565_BLOCK_SIZE);
+ spi_stop();
+
// Turn on display if it is off
st7565_on();
diff --git a/drivers/sensors/adns9800.c b/drivers/sensors/adns9800.c
index 0ba26a365ad..d5e2ca625a6 100644
--- a/drivers/sensors/adns9800.c
+++ b/drivers/sensors/adns9800.c
@@ -67,14 +67,15 @@
#define REG_SROM_Load_Burst 0x62
#define REG_Pixel_Burst 0x64
-#define MIN_CPI 200
-#define MAX_CPI 8200
-#define CPI_STEP 200
-#define CLAMP_CPI(value) value MAX_CPI ? MAX_CPI : value
-#define US_BETWEEN_WRITES 120
-#define US_BETWEEN_READS 20
-#define US_BEFORE_MOTION 100
-#define MSB1 0x80
+#define MIN_CPI 200
+#define MAX_CPI 8200
+#define CPI_STEP 200
+#define CLAMP_CPI(value) value MAX_CPI ? MAX_CPI : value
+#define US_BETWEEN_WRITES 120
+#define US_BETWEEN_READS 20
+#define US_DELAY_AFTER_ADDR 100
+#define US_BEFORE_MOTION 100
+#define MSB1 0x80
// clang-format on
void adns9800_spi_start(void) {
@@ -92,6 +93,7 @@ void adns9800_write(uint8_t reg_addr, uint8_t data) {
uint8_t adns9800_read(uint8_t reg_addr) {
adns9800_spi_start();
spi_write(reg_addr & 0x7f);
+ wait_us(US_DELAY_AFTER_ADDR);
uint8_t data = spi_read();
spi_stop();
wait_us(US_BETWEEN_READS);
diff --git a/keyboards/1upkeyboards/1up60hte/keyboard.json b/keyboards/1upkeyboards/1up60hte/keyboard.json
index 53e91017ddc..7f8a660d80f 100644
--- a/keyboards/1upkeyboards/1up60hte/keyboard.json
+++ b/keyboards/1upkeyboards/1up60hte/keyboard.json
@@ -62,11 +62,15 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT_tsangan": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_tsangan": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_hhkb", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_hhkb",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/1upkeyboards/1up60hte/keymaps/default/keymap.c b/keyboards/1upkeyboards/1up60hte/keymaps/default/keymap.c
index 40d3d5c3e90..bc21fb2c4ae 100644
--- a/keyboards/1upkeyboards/1up60hte/keymaps/default/keymap.c
+++ b/keyboards/1upkeyboards/1up60hte/keymaps/default/keymap.c
@@ -17,7 +17,7 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
KC_CAPS, BL_TOGG, BL_DOWN, BL_UP, BL_STEP, _______, _______, _______, _______, KC_SCRL, KC_PAUS, KC_UP, _______, KC_CLR,
_______, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPLY, KC_MPRV, KC_MNXT, UG_VALD, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______,
diff --git a/keyboards/1upkeyboards/pi60/keyboard.json b/keyboards/1upkeyboards/pi60/keyboard.json
index 45c3876a6b6..ca3007ee76d 100644
--- a/keyboards/1upkeyboards/pi60/keyboard.json
+++ b/keyboards/1upkeyboards/pi60/keyboard.json
@@ -104,15 +104,20 @@
},
"community_layouts": [
"60_ansi",
+ "60_ansi_arrow",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
- "60_ansi_arrow",
"60_iso",
+ "60_iso_arrow",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -394,7 +399,7 @@
{"label": "RCtrl", "matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/4pplet/eagle_viper_rep/rev_a/keyboard.json b/keyboards/4pplet/eagle_viper_rep/rev_a/keyboard.json
index 18d8ba5d8aa..59a518b9713 100644
--- a/keyboards/4pplet/eagle_viper_rep/rev_a/keyboard.json
+++ b/keyboards/4pplet/eagle_viper_rep/rev_a/keyboard.json
@@ -64,12 +64,16 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -352,7 +356,7 @@
{"label": "Ctrl", "matrix": [8, 6], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/4pplet/eagle_viper_rep/rev_b/keyboard.json b/keyboards/4pplet/eagle_viper_rep/rev_b/keyboard.json
index e0356d5dad5..bf7d11f74ba 100644
--- a/keyboards/4pplet/eagle_viper_rep/rev_b/keyboard.json
+++ b/keyboards/4pplet/eagle_viper_rep/rev_b/keyboard.json
@@ -64,17 +64,19 @@
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"layout_aliases": {
- "LAYOUT": "LAYOUT_all"
+ "LAYOUT": "LAYOUT_all",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_all": {
@@ -360,7 +362,7 @@
{"label": "Ctrl", "matrix": [8, 6], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/4pplet/steezy60/rev_a/keyboard.json b/keyboards/4pplet/steezy60/rev_a/keyboard.json
index ffd44642230..bbc3d1601b8 100644
--- a/keyboards/4pplet/steezy60/rev_a/keyboard.json
+++ b/keyboards/4pplet/steezy60/rev_a/keyboard.json
@@ -18,11 +18,11 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan",
- "60_tsangan_hhkb"
+ "60_iso_tsangan"
],
"diode_direction": "COL2ROW",
"matrix_pins": {
@@ -57,6 +57,9 @@
"ws2812": {
"pin": "D3"
},
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -591,7 +594,7 @@
{"label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/4pplet/steezy60/rev_b/keyboard.json b/keyboards/4pplet/steezy60/rev_b/keyboard.json
index 8ff41bd1561..810f7f8cb95 100644
--- a/keyboards/4pplet/steezy60/rev_b/keyboard.json
+++ b/keyboards/4pplet/steezy60/rev_b/keyboard.json
@@ -14,11 +14,11 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan",
- "60_tsangan_hhkb"
+ "60_iso_tsangan"
],
"diode_direction": "COL2ROW",
"matrix_pins": {
@@ -53,6 +53,9 @@
"ws2812": {
"pin": "A8"
},
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -587,7 +590,7 @@
{"label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/4pplet/waffling60/rev_e/keyboard.json b/keyboards/4pplet/waffling60/rev_e/keyboard.json
index 4cd2501bbd4..9adf6dada3a 100644
--- a/keyboards/4pplet/waffling60/rev_e/keyboard.json
+++ b/keyboards/4pplet/waffling60/rev_e/keyboard.json
@@ -49,7 +49,19 @@
"ws2812": {
"pin": "A8"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -510,7 +522,7 @@
{"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/4pplet/waffling60/rev_e_ansi/keyboard.json b/keyboards/4pplet/waffling60/rev_e_ansi/keyboard.json
index a1b5d0e11eb..15d3c7cfe9e 100644
--- a/keyboards/4pplet/waffling60/rev_e_ansi/keyboard.json
+++ b/keyboards/4pplet/waffling60/rev_e_ansi/keyboard.json
@@ -50,9 +50,12 @@
"pin": "A8"
},
"community_layouts": [
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -122,7 +125,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/4pplet/waffling80/readme.md b/keyboards/4pplet/waffling80/readme.md
index 3eb0745b3f3..356990dd28c 100644
--- a/keyboards/4pplet/waffling80/readme.md
+++ b/keyboards/4pplet/waffling80/readme.md
@@ -8,6 +8,8 @@ A TKL PCB attempting a87 compatibility with different switch and layout-options.
Make example for this keyboard (after setting up your build environment):
make 4pplet/waffling80/rev_a:default
+ make 4pplet/waffling80/rev_b:default
+ make 4pplet/waffling80/rev_b_ansi: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).
diff --git a/keyboards/4pplet/waffling80/rev_b_ansi/config.h b/keyboards/4pplet/waffling80/rev_b_ansi/config.h
new file mode 100644
index 00000000000..036d08cc73c
--- /dev/null
+++ b/keyboards/4pplet/waffling80/rev_b_ansi/config.h
@@ -0,0 +1,19 @@
+/*
+Copyright 2022 Stefan Sundin "4pplet"
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#define WS2812_EXTERNAL_PULLUP
diff --git a/keyboards/4pplet/waffling80/rev_b_ansi/keyboard.json b/keyboards/4pplet/waffling80/rev_b_ansi/keyboard.json
new file mode 100644
index 00000000000..5a449e5e7cb
--- /dev/null
+++ b/keyboards/4pplet/waffling80/rev_b_ansi/keyboard.json
@@ -0,0 +1,29 @@
+{
+ "keyboard_name": "waffling80 Rev B ANSI HS",
+ "usb": {
+ "pid": "0x0017",
+ "device_version": "0.0.1"
+ },
+ "rgblight": {
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "led_count": 2
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "ws2812": {
+ "pin": "A8"
+ },
+ "matrix_pins": {
+ "cols": ["B2", "B1", "B0", "A7", "A6", "A3", "B9", "B8"],
+ "rows": ["B13", "B12", "A5", "A4", "A2", "A1", "F0", "C15", "C13", "C14", "F1", "A0"]
+ },
+ "diode_direction": "COL2ROW",
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu"
+}
diff --git a/keyboards/4pplet/waffling80/rev_b_ansi/readme.md b/keyboards/4pplet/waffling80/rev_b_ansi/readme.md
new file mode 100644
index 00000000000..f374f8c89b5
--- /dev/null
+++ b/keyboards/4pplet/waffling80/rev_b_ansi/readme.md
@@ -0,0 +1,18 @@
+# waffling80
+
+A TKL PCB attempting a87 and a88 compatibility with different switch and layout-options.
+
+* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
+* Hardware Supported: [waffling80](https://github.com/4pplet/waffling80)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 4pplet/waffling80/rev_b_ansi: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).
+
+How to enter bootloader (DFU):
+* Hold the reset-header for a few seconds on the back of the PCB for keyboard to enter DFU. When in DFU, it's ready to flash the firmware.
+
+Alternative option if the firmware is already pre-flashed:
+* Unplug your keyboard, hold down the Esc key, plug in your keyboard and wait a second before releasing the keys. The keyboard will enter DFU and is ready to flash the firmware.
diff --git a/keyboards/4pplet/waffling80/rev_b_ansi/rev_b_ansi.c b/keyboards/4pplet/waffling80/rev_b_ansi/rev_b_ansi.c
new file mode 100644
index 00000000000..9e617eaa7aa
--- /dev/null
+++ b/keyboards/4pplet/waffling80/rev_b_ansi/rev_b_ansi.c
@@ -0,0 +1,47 @@
+/*
+Copyright 2024 Stefan Sundin "4pplet"
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "rev_b_ansi.h"
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (SCROLL_LOCK_ENABLE && res) {
+ if(led_state.scroll_lock) {
+ #ifdef SCROLL_LOCK_COLOR
+ rgblight_sethsv_at(SCROLL_LOCK_COLOR, 0);
+ #else
+ rgblight_sethsv_at(rgblight_get_hue(),rgblight_get_sat(),rgblight_get_val(), 0);
+ #endif
+ }
+ else {
+ rgblight_sethsv_at(HSV_OFF, 0);
+ }
+ }
+ if (CAPS_LOCK_ENABLE && res) {
+ if(led_state.caps_lock) {
+ #ifdef CAPS_LOCK_COLOR
+ rgblight_sethsv_at(CAPS_LOCK_COLOR, 1);
+ #else
+ rgblight_sethsv_at(rgblight_get_hue(),rgblight_get_sat(),rgblight_get_val(), 1);
+ #endif
+ }
+ else{
+ rgblight_sethsv_at(HSV_OFF, 1);
+ }
+ }
+ return res;
+}
+
diff --git a/keyboards/4pplet/waffling80/rev_b_ansi/rev_b_ansi.h b/keyboards/4pplet/waffling80/rev_b_ansi/rev_b_ansi.h
new file mode 100644
index 00000000000..c8d4c8b9714
--- /dev/null
+++ b/keyboards/4pplet/waffling80/rev_b_ansi/rev_b_ansi.h
@@ -0,0 +1,26 @@
+/*
+Copyright 2022 Stefan Sundin "4pplet"
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#define CAPS_LOCK_ENABLE 1
+#define SCROLL_LOCK_ENABLE 1
+
+// If colors are defined, they will be static. If not defined, color for incicators can be set in VIA.
+//#define CAPS_LOCK_COLOR HSV_GREEN
+//#define SCROLL_LOCK_COLOR HSV_GREEN
+
+#include "quantum.h"
diff --git a/keyboards/4pplet/waffling80/rev_b_ansi/rules.mk b/keyboards/4pplet/waffling80/rev_b_ansi/rules.mk
new file mode 100644
index 00000000000..04fe1eba2ac
--- /dev/null
+++ b/keyboards/4pplet/waffling80/rev_b_ansi/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -p FFFF -v FFFF
diff --git a/keyboards/a_jazz/akc084/keyboard.json b/keyboards/a_jazz/akc084/keyboard.json
index c5270e4178c..a489a5ade50 100644
--- a/keyboards/a_jazz/akc084/keyboard.json
+++ b/keyboards/a_jazz/akc084/keyboard.json
@@ -81,7 +81,7 @@
{"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": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
{"matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5},
{"matrix": [5, 11], "x": 15, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
@@ -95,33 +95,33 @@
{"matrix": [3, 8], "x": 8.75, "y": 3},
{"matrix": [3, 9], "x": 9.75, "y": 3},
{"matrix": [3, 10], "x": 10.75, "y": 3},
- {"matrix": [3, 11], "x": 11.75, "y": 3, "w": 2.25},
- {"matrix": [3, 12], "x": 14, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 12], "x": 12.75, "y": 3, "w": 2.25},
{"matrix": [5, 12], "x": 15, "y": 3},
- {"matrix": [4, 0], "x": 0, "y": 3, "w": 2.25},
- {"matrix": [4, 1], "x": 2.25, "y": 3},
- {"matrix": [4, 2], "x": 3.25, "y": 3},
- {"matrix": [4, 3], "x": 4.25, "y": 3},
- {"matrix": [4, 4], "x": 5.25, "y": 3},
- {"matrix": [4, 5], "x": 6.25, "y": 3},
- {"matrix": [4, 6], "x": 7.25, "y": 3},
- {"matrix": [4, 7], "x": 8.25, "y": 3},
- {"matrix": [4, 8], "x": 9.25, "y": 3},
- {"matrix": [4, 9], "x": 10.25, "y": 3},
- {"matrix": [4, 10], "x": 11.25, "y": 3},
- {"matrix": [4, 11], "x": 12.25, "y": 3, "w": 1.75},
- {"matrix": [5, 7], "x": 14, "y": 3},
- {"matrix": [5, 13], "x": 15, "y": 3},
- {"matrix": [5, 0], "x": 0, "y": 4, "w": 1.25},
- {"matrix": [5, 1], "x": 1.25, "y": 4, "w": 1.25},
- {"matrix": [5, 2], "x": 2.5, "y": 4, "w": 1.25},
- {"matrix": [5, 3], "x": 3.75, "y": 4, "w": 6.25},
- {"matrix": [5, 4], "x": 10, "y": 4},
- {"matrix": [5, 5], "x": 11, "y": 4},
- {"matrix": [5, 6], "x": 12, "y": 4},
- {"matrix": [5, 8], "x": 13, "y": 4},
- {"matrix": [5, 9], "x": 14, "y": 4},
- {"matrix": [5, 10], "x": 15, "y": 4}
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [4, 1], "x": 2.25, "y": 4},
+ {"matrix": [4, 2], "x": 3.25, "y": 4},
+ {"matrix": [4, 3], "x": 4.25, "y": 4},
+ {"matrix": [4, 4], "x": 5.25, "y": 4},
+ {"matrix": [4, 5], "x": 6.25, "y": 4},
+ {"matrix": [4, 6], "x": 7.25, "y": 4},
+ {"matrix": [4, 7], "x": 8.25, "y": 4},
+ {"matrix": [4, 8], "x": 9.25, "y": 4},
+ {"matrix": [4, 9], "x": 10.25, "y": 4},
+ {"matrix": [4, 10], "x": 11.25, "y": 4},
+ {"matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [5, 7], "x": 14, "y": 4},
+ {"matrix": [5, 13], "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, 3], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 4], "x": 10, "y": 5},
+ {"matrix": [5, 5], "x": 11, "y": 5},
+ {"matrix": [5, 6], "x": 12, "y": 5},
+ {"matrix": [5, 8], "x": 13, "y": 5},
+ {"matrix": [5, 9], "x": 14, "y": 5},
+ {"matrix": [5, 10], "x": 15, "y": 5}
]
}
}
diff --git a/keyboards/acheron/arctic/keyboard.json b/keyboards/acheron/arctic/keyboard.json
index cc686be5fa2..5b5768a490c 100644
--- a/keyboards/acheron/arctic/keyboard.json
+++ b/keyboards/acheron/arctic/keyboard.json
@@ -29,6 +29,9 @@
"diode_direction": "COL2ROW",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi_tsangan": {
"layout": [
@@ -98,7 +101,7 @@
{"matrix": [4, 11], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/acheron/arctic/keymaps/default/keymap.c b/keyboards/acheron/arctic/keymaps/default/keymap.c
index 041b814bb99..dc5b32a5f1f 100755
--- a/keyboards/acheron/arctic/keymaps/default/keymap.c
+++ b/keyboards/acheron/arctic/keymaps/default/keymap.c
@@ -17,13 +17,13 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT ,
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_RCTL ),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_TRNS, KC_TRNS, KC_DEL, KC_DEL,
KC_TRNS, KC_TRNS, KC_UP , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS,
diff --git a/keyboards/ah/haven60/keyboard.json b/keyboards/ah/haven60/keyboard.json
index a9c2afb0b37..0eb5d8aa20e 100644
--- a/keyboards/ah/haven60/keyboard.json
+++ b/keyboards/ah/haven60/keyboard.json
@@ -46,7 +46,20 @@
"twinkle": true
}
},
- "community_layouts": ["60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
+ "community_layouts": [
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl",
+ "60_iso_wkl_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -179,7 +192,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/ai03/polaris/keyboard.json b/keyboards/ai03/polaris/keyboard.json
index decedbab3df..7e6ab9aec72 100644
--- a/keyboards/ai03/polaris/keyboard.json
+++ b/keyboards/ai03/polaris/keyboard.json
@@ -58,7 +58,14 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -274,7 +281,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/ai03/polaris/keymaps/default_ansi_tsangan/keymap.c b/keyboards/ai03/polaris/keymaps/default_ansi_tsangan/keymap.c
index 10190e13c48..ff4a61e4e4b 100644
--- a/keyboards/ai03/polaris/keymaps/default_ansi_tsangan/keymap.c
+++ b/keyboards/ai03/polaris/keymaps/default_ansi_tsangan/keymap.c
@@ -21,14 +21,14 @@ enum layer_names {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb( /* Base */
+ [_BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift( /* Base */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
MO(1), KC_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_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN] = LAYOUT_60_tsangan_hhkb( /* FN */
+ [_FN] = LAYOUT_60_ansi_tsangan_split_bs_rshift( /* FN */
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC,
_______, _______, KC_PGUP, _______, _______, _______, _______, _______, KC_UP, _______, KC_MPRV, KC_MPLY, KC_MNXT, BL_STEP,
_______, KC_HOME, KC_PGDN, KC_END, _______, KC_VOLD, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
diff --git a/keyboards/alas/keyboard.json b/keyboards/alas/keyboard.json
index b5617189dec..41fa879a69a 100755
--- a/keyboards/alas/keyboard.json
+++ b/keyboards/alas/keyboard.json
@@ -25,7 +25,18 @@
"diode_direction": "COL2ROW",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -518,7 +529,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/ares/keyboard.json b/keyboards/ares/keyboard.json
index 38945657027..f1e650397eb 100644
--- a/keyboards/ares/keyboard.json
+++ b/keyboards/ares/keyboard.json
@@ -52,9 +52,24 @@
"processor": "atmega32a",
"bootloader": "bootloadhid",
"layout_aliases": {
- "LAYOUT": "LAYOUT_all"
+ "LAYOUT": "LAYOUT_all",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl",
+ "60_iso_wkl_split_bs_rshift"
+ ],
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -337,7 +352,7 @@
{"matrix": [0, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
diff --git a/keyboards/argyle/keyboard.json b/keyboards/argyle/keyboard.json
index 82dbe1562af..a7bfc335df9 100755
--- a/keyboards/argyle/keyboard.json
+++ b/keyboards/argyle/keyboard.json
@@ -45,7 +45,7 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_ansi_wkl",
"60_ansi_wkl_split_bs_rshift",
"60_hhkb",
@@ -56,6 +56,9 @@
"60_iso_wkl",
"60_iso_wkl_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -837,7 +840,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/arrayperipherals/vector/keyboard.json b/keyboards/arrayperipherals/vector/keyboard.json
new file mode 100644
index 00000000000..505199831d5
--- /dev/null
+++ b/keyboards/arrayperipherals/vector/keyboard.json
@@ -0,0 +1,40 @@
+{
+ "manufacturer": "Array Peripherals",
+ "keyboard_name": "The Vector",
+ "maintainer": "daviddoan",
+ "bootloader": "atmel-dfu",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "F0", "pin_b": "F1"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true
+ },
+ "matrix_pins": {
+ "direct": [
+ ["D4", "C6", "D7", "E6", "F7"]
+ ]
+ },
+ "processor": "atmega32u4",
+ "url": "https://arrayperipherals.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x4F47",
+ "vid": "0x4152"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "k01", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "k02", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "k03", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "k04", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "k05", "matrix": [0, 4], "x": 4.25, "y": 0}
+ ]
+ }
+ }
+}
diff --git a/keyboards/arrayperipherals/vector/keymaps/default/keymap.c b/keyboards/arrayperipherals/vector/keymaps/default/keymap.c
new file mode 100644
index 00000000000..e290e370764
--- /dev/null
+++ b/keyboards/arrayperipherals/vector/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/*
+Copyright 2024 David Doan
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, TG(1)
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG(1)
+ ),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [1] = {ENCODER_CCW_CW(KC_TRNS, KC_TRNS)},
+};
+#endif // ENCODER_MAP_ENABLE
\ No newline at end of file
diff --git a/keyboards/arrayperipherals/vector/keymaps/default/rules.mk b/keyboards/arrayperipherals/vector/keymaps/default/rules.mk
new file mode 100644
index 00000000000..a40474b4d5c
--- /dev/null
+++ b/keyboards/arrayperipherals/vector/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/arrayperipherals/vector/readme.md b/keyboards/arrayperipherals/vector/readme.md
new file mode 100644
index 00000000000..dee7dc8f9a1
--- /dev/null
+++ b/keyboards/arrayperipherals/vector/readme.md
@@ -0,0 +1,26 @@
+# The Vector Macropad
+
+
+
+A small (1x4) macropad with a rotary. [More info at arrayperipherals.com](https://www.arrayperipherals.com/)
+
+* Keyboard Maintainer: [David Doan](https://github.com/daviddoan)
+* Hardware Supported: Custom PCB with Atmega32u4 processor
+* Hardware Availability: [arrayperipherals.com](https://www.arrayperipherals.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make arrayperipherals/vector:default
+
+Flashing example for this keyboard:
+
+ make arrayperipherals/vector: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 (left most from the rotary)
+* **Physical reset button**: Briefly double press the button on the back of the PCB
\ No newline at end of file
diff --git a/keyboards/atset/at2/keyboard.json b/keyboards/atset/at2/keyboard.json
new file mode 100644
index 00000000000..d612505c900
--- /dev/null
+++ b/keyboards/atset/at2/keyboard.json
@@ -0,0 +1,32 @@
+{
+ "manufacturer": "Atset",
+ "keyboard_name": "AT2",
+ "maintainer": "qmk",
+ "board": "GENERIC_RP_RP2040",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "usb": {
+ "vid": "0x4141",
+ "pid": "0x6174",
+ "device_version": "1.0.0"
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP19", "GP20"],
+ "rows": ["GP28"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0}
+ ]
+ }
+ }
+}
diff --git a/keyboards/atset/at2/keymaps/default/keymap.c b/keyboards/atset/at2/keymaps/default/keymap.c
new file mode 100644
index 00000000000..bdecf93a57a
--- /dev/null
+++ b/keyboards/atset/at2/keymaps/default/keymap.c
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_MUTE, KC_MPLY
+ )
+};
+
diff --git a/keyboards/atset/at2/readme.md b/keyboards/atset/at2/readme.md
new file mode 100644
index 00000000000..0bc777b052e
--- /dev/null
+++ b/keyboards/atset/at2/readme.md
@@ -0,0 +1,24 @@
+# ATSET AT2
+
+A special 2 key keyboard powered by QMK.
+
+* Keyboard Maintainer: [ATSET](https://github.com/anubhavd7)
+* Hardware Supported: ATSET AT2 (https://imgur.com/a/yBbVwef)
+https://www.atsetmediscience.com/atset-at2-9949007.html
+Make example for this keyboard (after setting up your build environment):
+
+ make atset/at2:default
+
+Flashing example for this keyboard:
+
+ make atset/at2: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/atxkb/1894/keyboard.json b/keyboards/atxkb/1894/keyboard.json
index 5abaf88eb0b..878c3d998c1 100644
--- a/keyboards/atxkb/1894/keyboard.json
+++ b/keyboards/atxkb/1894/keyboard.json
@@ -60,7 +60,14 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -276,7 +283,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/atxkb/1894/keymaps/default_ansi_tsangan/keymap.c b/keyboards/atxkb/1894/keymaps/default_ansi_tsangan/keymap.c
index 10190e13c48..ff4a61e4e4b 100644
--- a/keyboards/atxkb/1894/keymaps/default_ansi_tsangan/keymap.c
+++ b/keyboards/atxkb/1894/keymaps/default_ansi_tsangan/keymap.c
@@ -21,14 +21,14 @@ enum layer_names {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb( /* Base */
+ [_BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift( /* Base */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
MO(1), KC_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_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN] = LAYOUT_60_tsangan_hhkb( /* FN */
+ [_FN] = LAYOUT_60_ansi_tsangan_split_bs_rshift( /* FN */
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC,
_______, _______, KC_PGUP, _______, _______, _______, _______, _______, KC_UP, _______, KC_MPRV, KC_MPLY, KC_MNXT, BL_STEP,
_______, KC_HOME, KC_PGDN, KC_END, _______, KC_VOLD, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
diff --git a/keyboards/bastardkb/blacktyl_lars/config.h b/keyboards/bastardkb/blacktyl_lars/config.h
index 396efa80046..f6403af30b7 100644
--- a/keyboards/bastardkb/blacktyl_lars/config.h
+++ b/keyboards/bastardkb/blacktyl_lars/config.h
@@ -16,6 +16,7 @@
/* RGB CONFIG - WS2812 DRIVER */
+/*
#define WS2812_DI_PIN A1
#define RGB_MATRIX_LED_COUNT 36
#define RGBLED_SPLIT \
@@ -28,7 +29,7 @@
#define WS2812_DMA_STREAM STM32_DMA1_STREAM1
// Without the following configurations the WS2812 would not light up
#define WS2812_PWM_TARGET_PERIOD 800000
-
+*/
/* CRC DRIVER
#define CRC8_USE_TABLE
diff --git a/keyboards/bastardkb/blacktyl_lars/keymaps/lars/config.h b/keyboards/bastardkb/blacktyl_lars/keymaps/lars/config.h
index 436c999a6e8..b8c7f7d0e2d 100644
--- a/keyboards/bastardkb/blacktyl_lars/keymaps/lars/config.h
+++ b/keyboards/bastardkb/blacktyl_lars/keymaps/lars/config.h
@@ -40,11 +40,11 @@ along with this program. If not, see .
//#define RETRO_TAPPING
// Underglow configuration
-#ifdef RGBLIGHT_ENABLE
- #define RGBLIGHT_ANIMATIONS
- #define RGBLIGHT_HUE_STEP 8
- #define RGBLIGHT_SAT_STEP 8
- #define RGBLIGHT_VAL_STEP 8
-#endif
+//#ifdef RGBLIGHT_ENABLE
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+//#endif
//#define UNICODE_SELECTED_MODES UC_MAC
diff --git a/keyboards/bastardkb/blacktyl_lars/keymaps/lars/keymap.json b/keyboards/bastardkb/blacktyl_lars/keymaps/lars/keymap.json
index 98fd8002dad..b086182c52e 100644
--- a/keyboards/bastardkb/blacktyl_lars/keymaps/lars/keymap.json
+++ b/keyboards/bastardkb/blacktyl_lars/keymaps/lars/keymap.json
@@ -2,124 +2,124 @@
"version": 1,
"notes": "My awesome keymap",
"documentation": "\"This file is a QMK Configurator export. You can import this at . It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: \n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
- "keyboard": "bastardkb/skeletyl",
- "keymap": "default",
+ "keyboard": "bastardkb/skeletyl/blackpill",
+ "keymap": "bastardkb_skeletyl_blackpill_default",
"layout": "LAYOUT_split_3x5_3",
"layers": [
[
"KC_Q",
- "KC_W",
- "KC_F",
- "KC_P",
- "KC_B",
- "KC_J",
- "KC_L",
- "KC_U",
- "KC_Y",
- "KC_SCLN",
- "KC_A",
- "KC_R",
- "KC_S",
- "KC_T",
- "KC_G",
- "KC_M",
- "KC_N",
- "KC_E",
- "KC_I",
- "KC_O",
- "LSFT_T(KC_Z)",
- "LCTL_T(KC_X)",
- "RALT_T(KC_C)",
- "KC_D",
- "KC_V",
- "KC_K",
- "KC_H",
- "RALT_T(KC_COMM)",
- "LCTL_T(KC_DOT)",
- "LSFT_T(KC_SLSH)",
- "TO(1)",
- "KC_BSPC",
+ "KC_W",
+ "KC_F",
+ "KC_P",
+ "KC_B",
+ "KC_J",
+ "KC_L",
+ "KC_U",
+ "KC_Y",
+ "KC_SCLN",
+ "KC_A",
+ "KC_R",
+ "KC_S",
+ "KC_T",
+ "KC_G",
+ "KC_M",
+ "KC_N",
+ "KC_E",
+ "KC_I",
+ "KC_O",
+ "LSFT_T(KC_Z)",
+ "LCTL_T(KC_X)",
+ "RALT_T(KC_C)",
+ "KC_D",
+ "KC_V",
+ "KC_K",
+ "KC_H",
+ "RALT_T(KC_COMM)",
+ "LCTL_T(KC_DOT)",
+ "LSFT_T(KC_SLSH)",
+ "TO(1)",
+ "KC_BSPC",
"KC_TAB",
- "KC_DEL",
- "KC_SPC",
- "KC_ENT"
- ],
- [
- "KC_TRNS",
- "KC_7",
- "KC_8",
- "KC_9",
- "KC_TRNS",
- "KC_QUOT",
- "KC_MINS",
- "KC_EQL",
- "KC_ASTR",
- "KC_CIRC",
- "KC_TRNS",
- "KC_4",
- "KC_5",
- "KC_6",
- "KC_0",
- "KC_TAB",
- "KC_LPRN",
- "KC_RPRN",
- "KC_LBRC",
- "KC_RBRC",
- "KC_LSFT",
- "KC_1",
- "KC_2",
- "KC_3",
- "KC_TRNS",
- "KC_PIPE",
- "KC_GRV",
- "KC_LALT",
- "KC_LCTL",
- "KC_RSFT",
- "TO(2)",
- "KC_BSPC",
- "KC_TAB",
- "KC_DEL",
- "TO(0)",
- "KC_ENT"
+ "OSM(MOD_LGUI)",
+ "KC_SPC",
+ "KC_ENT"
],
[
"KC_TRNS",
- "KC_TRNS",
- "KC_PGUP",
- "KC_TRNS",
- "KC_TRNS",
- "ANY(UC(0xE6))",
- "ANY(UC(0xF8))",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_LEFT",
- "KC_UP",
- "KC_DOWN",
- "KC_RGHT",
- "KC_TRNS",
- "KC_TRNS",
- "KC_LGUI",
- "ANY(UC(0xE5))",
- "LCTL(KC_LALT)",
- "LCA(KC_LSFT)",
- "KC_TRNS",
- "KC_HOME",
- "KC_PGDN",
- "KC_END",
- "KC_TRNS",
- "KC_TRNS",
- "KC_RBRC",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
+ "KC_7",
+ "KC_8",
+ "KC_9",
+ "KC_TRNS",
+ "KC_QUOT",
+ "KC_MINS",
+ "KC_EQL",
+ "KC_ASTR",
+ "KC_CIRC",
+ "KC_TRNS",
+ "KC_4",
+ "KC_5",
+ "KC_6",
+ "KC_0",
+ "KC_BSLS",
+ "KC_LPRN",
+ "KC_RPRN",
+ "KC_LBRC",
+ "KC_RBRC",
+ "KC_LSFT",
+ "KC_1",
+ "KC_2",
+ "KC_3",
+ "KC_TRNS",
+ "KC_PIPE",
+ "KC_GRV",
+ "KC_LALT",
+ "KC_LCTL",
+ "KC_RSFT",
+ "TO(2)",
+ "KC_BSPC",
"KC_TAB",
"KC_DEL",
- "TO(0)",
- "KC_TRNS"
- ]
+ "TO(0)",
+ "KC_ENT"
+ ],
+ [
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_PGUP",
+ "KC_TRNS",
+ "KC_TRNS",
+ "ANY(UC(0xE6))",
+ "ANY(UC(0xF8))",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_LEFT",
+ "KC_UP",
+ "KC_DOWN",
+ "KC_RGHT",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_LGUI",
+ "ANY(UC(0xE5))",
+ "LCTL(KC_LALT)",
+ "LCA(KC_LSFT)",
+ "KC_TRNS",
+ "KC_HOME",
+ "KC_PGDN",
+ "KC_END",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_RBRC",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TAB",
+ "KC_DEL",
+ "TO(0)",
+ "KC_TRNS"
+ ]
],
"author": "thomas.haukland@gmail.com"
-}
+}
\ No newline at end of file
diff --git a/keyboards/bastardkb/blacktyl_lars/rules.mk b/keyboards/bastardkb/blacktyl_lars/rules.mk
index 4a20d4ebc59..383340f8366 100644
--- a/keyboards/bastardkb/blacktyl_lars/rules.mk
+++ b/keyboards/bastardkb/blacktyl_lars/rules.mk
@@ -28,8 +28,8 @@ EXTRAKEY_ENABLE = yes
RGB_MATRIX_SUPPORTED = yes # RGB matrix is supported and enabled by default
RGBLIGHT_SUPPORTED = no # RGB underglow is supported, but not enabled by default
-RGB_MATRIX_ENABLE = yes # Enable keyboard RGB matrix functionality
-RGB_MATRIX_DRIVER = ws2812
+# RGB_MATRIX_ENABLE = yes # Enable keyboard RGB matrix functionality
+# RGB_MATRIX_DRIVER = ws2812
SPLIT_KEYBOARD = yes
diff --git a/keyboards/bioi/f60/keyboard.json b/keyboards/bioi/f60/keyboard.json
index 9adbb2f48ab..8974a68e027 100644
--- a/keyboards/bioi/f60/keyboard.json
+++ b/keyboards/bioi/f60/keyboard.json
@@ -53,7 +53,20 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_tsangan", "60_ansi_split_bs_rshift", "60_hhkb", "60_tsangan_hhkb", "60_ansi_arrow", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_arrow",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -406,7 +419,7 @@
{"matrix": [4, 12], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/bioi/g60/keyboard.json b/keyboards/bioi/g60/keyboard.json
index b98aee8273f..4140abfbe2f 100644
--- a/keyboards/bioi/g60/keyboard.json
+++ b/keyboards/bioi/g60/keyboard.json
@@ -64,6 +64,9 @@
},
"processor": "atmega32u4",
"bootloader": "qmk-dfu",
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -282,7 +285,7 @@
{"label": "\u2192", "matrix": [4, 13], "x": 14, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
@@ -496,7 +499,7 @@
{"label": "\u2192", "matrix": [4, 13], "x": 14, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb_iso": {
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/bioi/g60ble/keyboard.json b/keyboards/bioi/g60ble/keyboard.json
index 2d09fadff08..8b24556b37f 100644
--- a/keyboards/bioi/g60ble/keyboard.json
+++ b/keyboards/bioi/g60ble/keyboard.json
@@ -60,7 +60,16 @@
},
"processor": "atmega32u4",
"bootloader": "qmk-dfu",
- "community_layouts": ["60_ansi", "60_iso", "60_hhkb", "60_ansi_split_bs_rshift", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb",
+ "60_iso"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -415,7 +424,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/blank/blank01/keyboard.json b/keyboards/blank/blank01/keyboard.json
index f8af736bef8..672a292def3 100644
--- a/keyboards/blank/blank01/keyboard.json
+++ b/keyboards/blank/blank01/keyboard.json
@@ -32,8 +32,11 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/blank/blank01/keymaps/default/keymap.c b/keyboards/blank/blank01/keymaps/default/keymap.c
index 2e2a863f278..03f8987fa7e 100644
--- a/keyboards/blank/blank01/keymaps/default/keymap.c
+++ b/keyboards/blank/blank01/keymaps/default/keymap.c
@@ -18,7 +18,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Default layer
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
// Fn1 Layer
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, QK_BOOT, 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,
diff --git a/keyboards/buildakb/mw60/keyboard.json b/keyboards/buildakb/mw60/keyboard.json
index 9a8b7955a85..9969768345b 100644
--- a/keyboards/buildakb/mw60/keyboard.json
+++ b/keyboards/buildakb/mw60/keyboard.json
@@ -23,7 +23,24 @@
"pid": "0x0004",
"vid": "0x4A56"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl",
+ "60_iso_wkl_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -805,7 +822,7 @@
{"label": "k413", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "k000", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "k001", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/cannonkeys/an_c/keyboard.json b/keyboards/cannonkeys/an_c/keyboard.json
index ea127998710..29225da183f 100644
--- a/keyboards/cannonkeys/an_c/keyboard.json
+++ b/keyboards/cannonkeys/an_c/keyboard.json
@@ -55,7 +55,10 @@
"resync": true
}
},
- "community_layouts": ["60_ansi", "60_tsangan_hhkb"],
+ "community_layouts": ["60_ansi", "60_ansi_tsangan_split_bs_rshift"],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -126,7 +129,7 @@
{"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/cannonkeys/an_c/keymaps/tsangan/keymap.c b/keyboards/cannonkeys/an_c/keymaps/tsangan/keymap.c
index ac3e794880f..9d799168358 100644
--- a/keyboards/cannonkeys/an_c/keymaps/tsangan/keymap.c
+++ b/keyboards/cannonkeys/an_c/keymaps/tsangan/keymap.c
@@ -26,7 +26,7 @@ along with this program. If not, see .
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb(
+ [_BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN1] = LAYOUT_60_tsangan_hhkb(
+ [_FN1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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, _______,
UG_TOGG, UG_NEXT, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cannonkeys/bastion60/keyboard.json b/keyboards/cannonkeys/bastion60/keyboard.json
index 07443b50b78..26cf507984c 100644
--- a/keyboards/cannonkeys/bastion60/keyboard.json
+++ b/keyboards/cannonkeys/bastion60/keyboard.json
@@ -53,12 +53,16 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -260,7 +264,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/cannonkeys/brutalv2_60/keyboard.json b/keyboards/cannonkeys/brutalv2_60/keyboard.json
index 3ee5f0d576b..923be17c9af 100644
--- a/keyboards/cannonkeys/brutalv2_60/keyboard.json
+++ b/keyboards/cannonkeys/brutalv2_60/keyboard.json
@@ -29,12 +29,16 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -300,7 +304,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/cannonkeys/db60/hotswap/keyboard.json b/keyboards/cannonkeys/db60/hotswap/keyboard.json
index d272b35a0f6..dfed24c5654 100644
--- a/keyboards/cannonkeys/db60/hotswap/keyboard.json
+++ b/keyboards/cannonkeys/db60/hotswap/keyboard.json
@@ -3,7 +3,13 @@
"usb": {
"pid": "0xDB62"
},
- "community_layouts": ["60_ansi", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -74,7 +80,7 @@
{"x": 13.75, "y": 4, "w": 1.25, "matrix": [4, 14]}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"x": 0, "y": 0, "matrix": [0, 0]},
{"x": 1, "y": 0, "matrix": [0, 1]},
diff --git a/keyboards/cannonkeys/db60/j02/keyboard.json b/keyboards/cannonkeys/db60/j02/keyboard.json
index 0778b604fff..bb693bcfc04 100644
--- a/keyboards/cannonkeys/db60/j02/keyboard.json
+++ b/keyboards/cannonkeys/db60/j02/keyboard.json
@@ -3,7 +3,14 @@
"usb": {
"pid": "0xDB60"
},
- "community_layouts": ["60_ansi", "60_tsangan_hhkb", "60_iso"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -74,7 +81,7 @@
{"x": 13.75, "y": 4, "w": 1.25, "matrix": [4, 14]}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"x": 0, "y": 0, "matrix": [0, 0]},
{"x": 1, "y": 0, "matrix": [0, 1]},
diff --git a/keyboards/cannonkeys/db60/keymaps/tsangan/keymap.c b/keyboards/cannonkeys/db60/keymaps/tsangan/keymap.c
index 279b238547e..f82afc8b323 100644
--- a/keyboards/cannonkeys/db60/keymaps/tsangan/keymap.c
+++ b/keyboards/cannonkeys/db60/keymaps/tsangan/keymap.c
@@ -28,7 +28,7 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb(
+ [_BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN1] = LAYOUT_60_tsangan_hhkb(
+ [_FN1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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, _______,
UG_TOGG, UG_NEXT, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cannonkeys/db60/rev2/keyboard.json b/keyboards/cannonkeys/db60/rev2/keyboard.json
index dc45ffecd50..81fc8208d56 100644
--- a/keyboards/cannonkeys/db60/rev2/keyboard.json
+++ b/keyboards/cannonkeys/db60/rev2/keyboard.json
@@ -3,7 +3,14 @@
"usb": {
"pid": "0xDB61"
},
- "community_layouts": ["60_ansi", "60_tsangan_hhkb", "60_iso"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -74,7 +81,7 @@
{"x": 13.75, "y": 4, "w": 1.25, "matrix": [4, 14]}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"x": 0, "y": 0, "matrix": [0, 0]},
{"x": 1, "y": 0, "matrix": [0, 1]},
diff --git a/keyboards/cannonkeys/ellipse/keyboard.json b/keyboards/cannonkeys/ellipse/keyboard.json
index 2f35c453516..c7e37befbdc 100644
--- a/keyboards/cannonkeys/ellipse/keyboard.json
+++ b/keyboards/cannonkeys/ellipse/keyboard.json
@@ -37,11 +37,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -324,7 +328,7 @@
{"label": "Ctrl", "matrix": [4, 14], "x": 13.5, "y": 4.0, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0.0, "y": 0.0},
{"label": "!", "matrix": [0, 1], "x": 1.0, "y": 0.0},
diff --git a/keyboards/cannonkeys/ellipse_hs/keyboard.json b/keyboards/cannonkeys/ellipse_hs/keyboard.json
index 098882fcc3b..da79dea27af 100644
--- a/keyboards/cannonkeys/ellipse_hs/keyboard.json
+++ b/keyboards/cannonkeys/ellipse_hs/keyboard.json
@@ -24,13 +24,14 @@
"pid": "0x0016"
},
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
- "60_tsangan_hhkb"
+ "60_ansi_tsangan_split_bs_rshift"
],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/cannonkeys/ellipse_hs/keymaps/default/keymap.c b/keyboards/cannonkeys/ellipse_hs/keymaps/default/keymap.c
index 3d829466c36..e4e3af2dabd 100644
--- a/keyboards/cannonkeys/ellipse_hs/keymaps/default/keymap.c
+++ b/keyboards/cannonkeys/ellipse_hs/keymaps/default/keymap.c
@@ -12,7 +12,7 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb(
+ [_BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -20,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN1] = LAYOUT_60_tsangan_hhkb(
+ [_FN1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -28,7 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, QK_BOOT
),
- [_FN2] = LAYOUT_60_tsangan_hhkb(
+ [_FN2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______
),
- [_FN3] = LAYOUT_60_tsangan_hhkb(
+ [_FN3] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cannonkeys/instant60/keyboard.json b/keyboards/cannonkeys/instant60/keyboard.json
index 3261a82f28b..f802823709b 100644
--- a/keyboards/cannonkeys/instant60/keyboard.json
+++ b/keyboards/cannonkeys/instant60/keyboard.json
@@ -55,7 +55,13 @@
"resync": true
}
},
- "community_layouts": ["60_ansi", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -126,7 +132,7 @@
{"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/cannonkeys/instant60/keymaps/tsangan/keymap.c b/keyboards/cannonkeys/instant60/keymaps/tsangan/keymap.c
index dc04a39c5e6..c9e5d9ba16e 100644
--- a/keyboards/cannonkeys/instant60/keymaps/tsangan/keymap.c
+++ b/keyboards/cannonkeys/instant60/keymaps/tsangan/keymap.c
@@ -30,7 +30,7 @@ enum custom_keycodes {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb(
+ [_BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN1] = LAYOUT_60_tsangan_hhkb(
+ [_FN1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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, _______,
UG_TOGG, UG_NEXT, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cannonkeys/leviatan/keyboard.json b/keyboards/cannonkeys/leviatan/keyboard.json
index 7e8d6c6fdd1..c929447e89d 100644
--- a/keyboards/cannonkeys/leviatan/keyboard.json
+++ b/keyboards/cannonkeys/leviatan/keyboard.json
@@ -23,7 +23,14 @@
"diode_direction": "COL2ROW",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
- "community_layouts": ["60_ansi", "60_tsangan_hhkb", "60_iso"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -94,7 +101,7 @@
{"x": 13.75, "y": 4, "w": 1.25, "matrix": [4, 14]}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"x": 0, "y": 0, "matrix": [0, 0]},
{"x": 1, "y": 0, "matrix": [0, 1]},
diff --git a/keyboards/cannonkeys/leviatan/keymaps/tsangan/keymap.c b/keyboards/cannonkeys/leviatan/keymaps/tsangan/keymap.c
index c735160c3d6..30d1781fe65 100644
--- a/keyboards/cannonkeys/leviatan/keymaps/tsangan/keymap.c
+++ b/keyboards/cannonkeys/leviatan/keymaps/tsangan/keymap.c
@@ -28,7 +28,7 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb(
+ [_BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN1] = LAYOUT_60_tsangan_hhkb(
+ [_FN1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cannonkeys/moment/keyboard.json b/keyboards/cannonkeys/moment/keyboard.json
index 4e489a7d973..4aec3c9c060 100644
--- a/keyboards/cannonkeys/moment/keyboard.json
+++ b/keyboards/cannonkeys/moment/keyboard.json
@@ -35,9 +35,13 @@
},
"community_layouts": [
"60_ansi_tsangan",
- "60_tsangan_hhkb",
- "60_iso_tsangan"
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -179,7 +183,7 @@
{"label": "Ctrl", "matrix": [4, 14], "x": 13.5, "y": 4.0, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0.0, "y": 0.0},
{"label": "!", "matrix": [0, 1], "x": 1.0, "y": 0.0},
@@ -318,7 +322,7 @@
{"label": "Ctrl", "matrix": [4, 14], "x": 13.5, "y": 4.0, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb_iso": {
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0.0, "y": 0.0},
{"label": "!", "matrix": [0, 1], "x": 1.0, "y": 0.0},
diff --git a/keyboards/cannonkeys/moment_hs/keyboard.json b/keyboards/cannonkeys/moment_hs/keyboard.json
index c83c5e7a9d7..dc1f6503227 100644
--- a/keyboards/cannonkeys/moment_hs/keyboard.json
+++ b/keyboards/cannonkeys/moment_hs/keyboard.json
@@ -28,13 +28,14 @@
"pid": "0x0013"
},
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
- "60_tsangan_hhkb"
+ "60_ansi_tsangan_split_bs_rshift"
],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/cannonkeys/moment_hs/keymaps/default/keymap.c b/keyboards/cannonkeys/moment_hs/keymaps/default/keymap.c
index 3d829466c36..e4e3af2dabd 100644
--- a/keyboards/cannonkeys/moment_hs/keymaps/default/keymap.c
+++ b/keyboards/cannonkeys/moment_hs/keymaps/default/keymap.c
@@ -12,7 +12,7 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb(
+ [_BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -20,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN1] = LAYOUT_60_tsangan_hhkb(
+ [_FN1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -28,7 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, QK_BOOT
),
- [_FN2] = LAYOUT_60_tsangan_hhkb(
+ [_FN2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______
),
- [_FN3] = LAYOUT_60_tsangan_hhkb(
+ [_FN3] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cannonkeys/satisfaction75_hs/keyboard.json b/keyboards/cannonkeys/satisfaction75_hs/keyboard.json
index 6e8172ec028..48faa60362b 100644
--- a/keyboards/cannonkeys/satisfaction75_hs/keyboard.json
+++ b/keyboards/cannonkeys/satisfaction75_hs/keyboard.json
@@ -112,9 +112,9 @@
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
- {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1},
- {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1},
- {"matrix": [5, 9], "x": 12, "y": 5.25, "w": 1},
+ {"matrix": [5, 10], "x": 10, "y": 5.25},
+ {"matrix": [5, 11], "x": 11, "y": 5.25},
+ {"matrix": [5, 9], "x": 12, "y": 5.25},
{"matrix": [5, 12], "x": 13.25, "y": 5.5},
{"matrix": [5, 13], "x": 14.25, "y": 5.5},
{"matrix": [5, 14], "x": 15.25, "y": 5.5}
diff --git a/keyboards/cannonkeys/vector/keyboard.json b/keyboards/cannonkeys/vector/keyboard.json
index 09fd5b601fd..46fc0b45780 100644
--- a/keyboards/cannonkeys/vector/keyboard.json
+++ b/keyboards/cannonkeys/vector/keyboard.json
@@ -29,9 +29,13 @@
},
"community_layouts": [
"60_ansi_tsangan",
- "60_tsangan_hhkb",
- "60_iso_tsangan"
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -174,7 +178,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/cheapino/config.h b/keyboards/cheapino/config.h
index 760469b5ea7..712125ad619 100644
--- a/keyboards/cheapino/config.h
+++ b/keyboards/cheapino/config.h
@@ -23,7 +23,6 @@
#define WS2812_PIO_USE_PIO1 // Force the usage of PIO1 peripheral, by default the WS2812 implementation uses the PIO0 peripheral
//#define WS2812_TRST_US 80
#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_RGB
-#define RGB_MATRIX_DEFAULT_VAL 32
// Pick good defaults for enabling homerow modifiers
@@ -38,3 +37,7 @@
// #define DEBUG_MATRIX_SCAN_RATE
+#define RGBLIGHT_DEFAULT_HUE 128 // Sets the default hue value, if none has been set
+#define RGBLIGHT_DEFAULT_SAT 128 // Sets the default saturation value, if none has been set
+#define RGBLIGHT_DEFAULT_VAL 32 // Sets the default brightness value, if none has been set
+ //
diff --git a/keyboards/cheapino/keymaps/default/keymap.json b/keyboards/cheapino/keymaps/default/keymap.json
index 55343b1b67b..1f2ab54b4a2 100644
--- a/keyboards/cheapino/keymaps/default/keymap.json
+++ b/keyboards/cheapino/keymaps/default/keymap.json
@@ -17,261 +17,147 @@
"KC_I",
"KC_O",
"KC_P",
- "LGUI_T(KC_A)",
- "LALT_T(KC_S)",
- "LCTL_T(KC_D)",
- "LSFT_T(KC_F)",
+ "KC_A",
+ "KC_S",
+ "KC_D",
+ "KC_F",
"KC_G",
"KC_H",
- "RSFT_T(KC_J)",
- "LCTL_T(KC_K)",
- "LALT_T(KC_L)",
- "LGUI_T(KC_SCLN)",
+ "KC_J",
+ "KC_K",
+ "KC_L",
+ "KC_SCLN",
"KC_Z",
"KC_X",
"KC_C",
"KC_V",
- "LT(5,KC_B)",
- "LT(1,KC_N)",
+ "KC_B",
+ "KC_N",
"KC_M",
"KC_COMM",
"KC_DOT",
"KC_SLSH",
- "LT(6,KC_ESC)",
- "LT(3,KC_SPC)",
- "LT(5,KC_TAB)",
- "LT(1,KC_DEL)",
- "LT(2,KC_BSPC)",
- "LT(4,KC_ENT)"
+ "KC_LGUI",
+ "KC_SPC",
+ "MO(1)",
+ "MO(2)",
+ "KC_ENT",
+ "KC_RALT"
],
[
- "KC_VOLU",
- "KC_WH_L",
- "KC_MS_U",
- "KC_WH_U",
- "KC_WH_R",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "ANY(QK_RBT)",
- "KC_MS_L",
- "KC_BTN2",
- "KC_BTN1",
- "KC_MS_R",
- "KC_MUTE",
- "KC_NO",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_VOLD",
- "KC_MNXT",
- "KC_MS_D",
- "KC_WH_D",
- "KC_MPLY",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_TRNS",
- "KC_TRNS",
- "KC_NO",
- "KC_NO",
- "KC_NO"
- ],
- [
- "KC_NO",
- "KC_HOME",
- "KC_DEL",
- "KC_PGUP",
- "KC_NO",
- "KC_NO",
+ "KC_1",
+ "KC_2",
+ "KC_3",
+ "KC_4",
+ "KC_5",
+ "KC_6",
+ "KC_7",
+ "KC_8",
+ "KC_9",
+ "KC_0",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_LEFT",
+ "KC_DOWN",
"KC_UP",
"KC_RGHT",
"KC_NO",
"KC_NO",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_NO",
- "KC_END",
- "KC_DOWN",
- "KC_PGDN",
"KC_NO",
"KC_NO",
- "KC_BTN1",
- "KC_BTN2",
- "KC_BTN3",
- "KC_BTN4",
"KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_LGUI",
+ "KC_SPC",
"KC_TRNS",
- "KC_TRNS",
- "KC_NO",
- "KC_NO",
- "KC_NO"
+ "MO(3)",
+ "KC_ENT",
+ "KC_RALT"
],
[
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_WH_U",
- "KC_AT",
- "KC_UNDS",
- "KC_PIPE",
- "KC_GRV",
- "KC_PERC",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "RGB_TOG",
- "KC_HASH",
- "KC_TAB",
"KC_EXLM",
- "KC_DQUO",
+ "KC_AT",
+ "KC_HASH",
"KC_DLR",
- "KC_BTN4",
- "KC_BTN3",
- "KC_BTN2",
- "KC_BTN1",
- "KC_WH_D",
- "KC_TILD",
- "KC_QUOT",
- "KC_BSLS",
- "KC_SLSH",
- "KC_AMPR",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_TRNS",
- "KC_TRNS",
- "KC_NO"
- ],
- [
- "KC_EQL",
+ "KC_PERC",
"KC_CIRC",
- "KC_LT",
- "KC_GT",
- "KC_SCLN",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_LCBR",
- "KC_RCBR",
+ "KC_AMPR",
+ "KC_ASTR",
"KC_LPRN",
"KC_RPRN",
- "KC_AT",
"KC_NO",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
"KC_MINS",
- "KC_EXLM",
+ "KC_EQL",
"KC_LBRC",
"KC_RBRC",
+ "KC_BSLS",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_UNDS",
+ "KC_PLUS",
+ "KC_LCBR",
+ "KC_RCBR",
+ "KC_PIPE",
+ "KC_LGUI",
+ "KC_SPC",
+ "MO(3)",
"KC_TRNS",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_NO",
- "KC_NO"
+ "KC_ENT",
+ "KC_RALT"
],
[
- "ANY(QK_RBT)",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_NO",
- "KC_F7",
- "KC_F8",
- "KC_F9",
- "KC_F10",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_NO",
- "KC_NO",
- "KC_F4",
- "KC_F5",
- "KC_F6",
- "KC_F11",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
- "KC_F1",
- "KC_F2",
- "KC_F3",
- "KC_F12",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS"
- ],
- [
- "RGB_SPI",
- "RGB_VAI",
- "RGB_SAI",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
"RGB_HUI",
- "RGB_MOD",
- "KC_PPLS",
- "KC_P7",
- "KC_P8",
- "KC_P9",
- "KC_PAST",
- "EE_CLR",
- "KC_TRNS",
- "KC_TRNS",
- "KC_TRNS",
- "RGB_TOG",
- "KC_PMNS",
- "KC_P4",
- "KC_P5",
- "KC_P6",
- "KC_PSLS",
- "RGB_SPD",
- "RGB_VAD",
- "RGB_SAD",
+ "RGB_SAI",
+ "RGB_VAI",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
"RGB_HUD",
- "RGB_RMOD",
- "KC_PDOT",
- "KC_P1",
- "KC_P2",
- "KC_P3",
- "KC_PEQL",
+ "RGB_SAD",
+ "RGB_VAD",
"KC_NO",
"KC_NO",
"KC_NO",
- "KC_0",
- "KC_COMM",
- "KC_P0"
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_NO",
+ "KC_LGUI",
+ "KC_SPC",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_ENT",
+ "KC_RALT"
]
],
- "author": "thomas.haukland@gmail.com"
+ "author": ""
}
diff --git a/keyboards/cheapino/keymaps/tompi/keymap.json b/keyboards/cheapino/keymaps/tompi/keymap.json
index 1ead8e4842e..6930a239cec 100644
--- a/keyboards/cheapino/keymaps/tompi/keymap.json
+++ b/keyboards/cheapino/keymaps/tompi/keymap.json
@@ -53,7 +53,7 @@
"KC_NO",
"KC_NO",
"KC_NO",
- "KC_NO",
+ "QK_CLEAR_EEPROM",
"ANY(QK_RBT)",
"KC_NO",
"KC_MS_L",
diff --git a/keyboards/checkerboards/g_idb60/keyboard.json b/keyboards/checkerboards/g_idb60/keyboard.json
index b4fc0f9b6d9..16f70dc8683 100644
--- a/keyboards/checkerboards/g_idb60/keyboard.json
+++ b/keyboards/checkerboards/g_idb60/keyboard.json
@@ -30,11 +30,12 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi_tsangan",
- "60_tsangan_hhkb"
+ "60_ansi_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_60_ansi_tsangan": {
@@ -105,7 +106,7 @@
{"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/checkerboards/g_idb60/keymaps/default/keymap.c b/keyboards/checkerboards/g_idb60/keymaps/default/keymap.c
index f49a3ff09d5..8f783947535 100644
--- a/keyboards/checkerboards/g_idb60/keymaps/default/keymap.c
+++ b/keyboards/checkerboards/g_idb60/keymaps/default/keymap.c
@@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl |GUI |Alt | Space |Alt |GUI |Ctrl |
* `-------------------------------------------------------------'
*/
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -54,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | |QK_BOOT |
* `------------------------------------------------------------------------------'
*/
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -75,7 +75,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | |QK_BOOT |
* `------------------------------------------------------------------------------'
*/
- [2] = LAYOUT_60_tsangan_hhkb(
+ [2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/checkerboards/nop60/keyboard.json b/keyboards/checkerboards/nop60/keyboard.json
index a07c2af3bc5..9b86a3936a4 100644
--- a/keyboards/checkerboards/nop60/keyboard.json
+++ b/keyboards/checkerboards/nop60/keyboard.json
@@ -59,11 +59,12 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT_2x3u": "LAYOUT_60_tsangan_hhkb_split_space",
- "LAYOUT_7u": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_2x3u": "LAYOUT_60_ansi_tsangan_split_bs_rshift_split_space",
+ "LAYOUT_7u": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb_split_space": "LAYOUT_60_ansi_tsangan_split_bs_rshift_split_space"
},
"layouts": {
- "LAYOUT_60_tsangan_hhkb_split_space": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift_split_space": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -135,7 +136,7 @@
{"matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/checkerboards/nop60/keymaps/7u/keymap.c b/keyboards/checkerboards/nop60/keymaps/7u/keymap.c
index 6cf55851fd5..8443807d5ff 100644
--- a/keyboards/checkerboards/nop60/keymaps/7u/keymap.c
+++ b/keyboards/checkerboards/nop60/keymaps/7u/keymap.c
@@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl |GUI |Alt | Space |Alt |GUI |Ctrl |
* `-------------------------------------------------------------'
*/
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -54,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | |QK_BOOT |
* `------------------------------------------------------------------------------'
*/
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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, _______,
UG_TOGG, UG_NEXT, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -75,7 +75,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | |QK_BOOT |
* `------------------------------------------------------------------------------'
*/
- [2] = LAYOUT_60_tsangan_hhkb(
+ [2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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, _______,
UG_TOGG, UG_NEXT, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/checkerboards/nop60/keymaps/default/keymap.c b/keyboards/checkerboards/nop60/keymaps/default/keymap.c
index 6c64d98c122..9a8fb4f8b79 100644
--- a/keyboards/checkerboards/nop60/keymaps/default/keymap.c
+++ b/keyboards/checkerboards/nop60/keymaps/default/keymap.c
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl |GUI |Alt |Space |BLTOG |Space |Alt |GUI |Ctrl |
* `-------------------------------------------------------------'
*/
- [0] = LAYOUT_60_tsangan_hhkb_split_space(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift_split_space(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |QK_BOOT |
* `------------------------------------------------------------------------------'
*/
- [1] = LAYOUT_60_tsangan_hhkb_split_space(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift_split_space(
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, _______,
UG_TOGG, UG_NEXT, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -73,7 +73,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |QK_BOOT |
* `------------------------------------------------------------------------------'
*/
- [2] = LAYOUT_60_tsangan_hhkb_split_space(
+ [2] = LAYOUT_60_ansi_tsangan_split_bs_rshift_split_space(
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, _______,
UG_TOGG, UG_NEXT, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/chickenman/ciel/keyboard.json b/keyboards/chickenman/ciel/keyboard.json
index 554d41c3945..f28995794cd 100644
--- a/keyboards/chickenman/ciel/keyboard.json
+++ b/keyboards/chickenman/ciel/keyboard.json
@@ -29,7 +29,14 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u2",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi_split_bs_rshift", "60_ansi", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
@@ -171,7 +178,7 @@
{"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/chlx/lfn_merro60/keyboard.json b/keyboards/chlx/lfn_merro60/keyboard.json
index a35b598f0eb..54a235c7f83 100644
--- a/keyboards/chlx/lfn_merro60/keyboard.json
+++ b/keyboards/chlx/lfn_merro60/keyboard.json
@@ -34,7 +34,24 @@
"pid": "0x0604",
"vid": "0x4358"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl",
+ "60_iso_wkl_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -816,7 +833,7 @@
{"matrix": [8, 6], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/chlx/merro60/keyboard.json b/keyboards/chlx/merro60/keyboard.json
index 700af7e7e74..31f83f80a59 100644
--- a/keyboards/chlx/merro60/keyboard.json
+++ b/keyboards/chlx/merro60/keyboard.json
@@ -33,9 +33,16 @@
"LAYOUT_default": "LAYOUT_all",
"LAYOUT_hhkb": "LAYOUT_60_hhkb",
"LAYOUT_iso": "LAYOUT_60_iso_split_bs_rshift",
- "LAYOUT_tsangan": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_tsangan": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_hhkb", "60_iso", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb",
+ "60_iso"
+ ],
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -460,7 +467,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/chlx/merro60/keymaps/tsangan/keymap.c b/keyboards/chlx/merro60/keymaps/tsangan/keymap.c
index 557711eeed6..e7266d227e2 100644
--- a/keyboards/chlx/merro60/keymaps/tsangan/keymap.c
+++ b/keyboards/chlx/merro60/keymaps/tsangan/keymap.c
@@ -19,14 +19,14 @@ along with this program. If not, see .
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT_60_tsangan_hhkb(
+[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
-[1] = LAYOUT_60_tsangan_hhkb(
+[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/chlx/ppr_merro60/keyboard.json b/keyboards/chlx/ppr_merro60/keyboard.json
index f8f45232a1a..9f056fef529 100644
--- a/keyboards/chlx/ppr_merro60/keyboard.json
+++ b/keyboards/chlx/ppr_merro60/keyboard.json
@@ -34,7 +34,24 @@
"pid": "0x0603",
"vid": "0x4358"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl",
+ "60_iso_wkl_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -816,7 +833,7 @@
{"matrix": [8, 6], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/chlx/ppr_merro60/keymaps/tsangan/keymap.c b/keyboards/chlx/ppr_merro60/keymaps/tsangan/keymap.c
index 73282416ab8..53f0cd52361 100644
--- a/keyboards/chlx/ppr_merro60/keymaps/tsangan/keymap.c
+++ b/keyboards/chlx/ppr_merro60/keymaps/tsangan/keymap.c
@@ -19,14 +19,14 @@ along with this program. If not, see .
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT_60_tsangan_hhkb(
+[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
-[1] = LAYOUT_60_tsangan_hhkb(
+[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_CAPS, _______, KC_HOME, KC_UP, KC_PGUP, _______, _______, _______, _______, _______, _______, KC_UP, _______, QK_BOOT,
_______, KC_END, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______,
diff --git a/keyboards/chlx/str_merro60/keyboard.json b/keyboards/chlx/str_merro60/keyboard.json
index cfd0286dd35..4310f81d2e1 100644
--- a/keyboards/chlx/str_merro60/keyboard.json
+++ b/keyboards/chlx/str_merro60/keyboard.json
@@ -53,9 +53,16 @@
"LAYOUT_default": "LAYOUT_all",
"LAYOUT_hhkb": "LAYOUT_60_hhkb",
"LAYOUT_iso": "LAYOUT_60_iso_split_bs_rshift",
- "LAYOUT_tsangan": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_tsangan": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_hhkb", "60_iso", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb",
+ "60_iso"
+ ],
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -480,7 +487,7 @@
{"matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/chlx/str_merro60/keymaps/tsangan/keymap.c b/keyboards/chlx/str_merro60/keymaps/tsangan/keymap.c
index 1ee50bdaf0b..56888fefc88 100644
--- a/keyboards/chlx/str_merro60/keymaps/tsangan/keymap.c
+++ b/keyboards/chlx/str_merro60/keymaps/tsangan/keymap.c
@@ -19,14 +19,14 @@ along with this program. If not, see .
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT_60_tsangan_hhkb(
+[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
-[1] = LAYOUT_60_tsangan_hhkb(
+[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cipulot/chroma/keyboard.json b/keyboards/cipulot/chroma/keyboard.json
index 5d418fdce1f..b029d324f42 100644
--- a/keyboards/cipulot/chroma/keyboard.json
+++ b/keyboards/cipulot/chroma/keyboard.json
@@ -25,7 +25,20 @@
},
"vid": "0x6369"
},
- "community_layouts": ["60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
+ "community_layouts": [
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl",
+ "60_iso_wkl_split_bs_rshift"
+ ],
"layouts": {
"LAYOUT_60_ansi_tsangan": {
"layout": [
@@ -541,7 +554,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/cipulot/ec_60x/keyboard.json b/keyboards/cipulot/ec_60x/keyboard.json
index 1d121800fcc..550bca953a2 100644
--- a/keyboards/cipulot/ec_60x/keyboard.json
+++ b/keyboards/cipulot/ec_60x/keyboard.json
@@ -40,7 +40,7 @@
"static_gradient": true,
"twinkle": true
},
- "led_count": 22
+ "led_count": 19
},
"usb": {
"device_version": "0.0.1",
diff --git a/keyboards/cipulot/ec_60x/matrix_diagram.md b/keyboards/cipulot/ec_60x/matrix_diagram.md
new file mode 100644
index 00000000000..92fae552a3b
--- /dev/null
+++ b/keyboards/cipulot/ec_60x/matrix_diagram.md
@@ -0,0 +1,44 @@
+# Matrix Diagram for Cipulot EC 60
+
+```
+ ┌───────┐
+ 2u Backpace │0E │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ┌─────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ┌──┴┐1E │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2D │ │2C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ └───┴────┘
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3E │
+├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬────┬┴───┤
+│40 │41 │42 │44 │46 │48 │4A │4B │4C │4D │
+└────┴────┴────┴────────┴────┴──────────┴────┴────┴────┴────┘
+Shift Row:
+┌────────┐ ┌──────────┐
+│30 │ 2.25u LShift 2.75u RShift │3D │
+└────────┘ └──────────┘
+ ┌───┬──────┐
+ 1u-1.75u RShift │3C │3D │
+ └───┴──────┘
+Bottom Row:
+┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
+│40 │41 │42 │46 │4A │4B │4C │4D │ 6.25u Spacebar
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40** │41*│42 │46 │4B │4C*│4D** │ Tsangan/WKL*/HHKB**
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+┌─────┬───┬─────┬───────────────────────┬─────┬───┬───┬─────┐
+│40* │41 │42 │46 │4A │4B │4C*│4D* │ Infinity/True HHKB*
+└─────┴───┴─────┴───────────────────────┴─────┴───┴───┴─────┘
+ ┌───────────┬───────────┐
+ │44 │48 │ Split 6u Spacebar (3u-3u)
+ └───────────┴───────────┘
+ ┌─────────┬───┬─────────┐
+ │44 │46 │48 │ Split 6u Spacebar (2.5u-1u-2.5u)
+ └─────────┴───┴─────────┘
+┌─────┬───┬─────┬─────┬─────────┬─────┬─────┬─────┬───┬─────┐
+│40 │41*│42 │44 │46 │48 │4A │4B │4C*│4D │ JIS/JIS WKL*
+└─────┴───┴─────┴─────┴─────────┴─────┴─────┴─────┴───┴─────┘
+```
diff --git a/keyboards/cipulot/mnk_60_ec/keyboard.json b/keyboards/cipulot/mnk_60_ec/keyboard.json
index 802e216f672..8929e3d5ff8 100644
--- a/keyboards/cipulot/mnk_60_ec/keyboard.json
+++ b/keyboards/cipulot/mnk_60_ec/keyboard.json
@@ -25,7 +25,14 @@
"pid": "0x6BB6",
"vid": "0x6369"
},
- "community_layouts": ["60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi_wkl_split_bs_rshift": {
"layout": [
@@ -155,7 +162,7 @@
{"matrix": [4, 11], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/cipulot/mnk_60_ec/keymaps/default/keymap.c b/keyboards/cipulot/mnk_60_ec/keymaps/default/keymap.c
index 08599b93d3a..6ce10b13752 100644
--- a/keyboards/cipulot/mnk_60_ec/keymaps/default/keymap.c
+++ b/keyboards/cipulot/mnk_60_ec/keymaps/default/keymap.c
@@ -18,21 +18,21 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_RGUI, KC_RALT),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, _______,
_______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______,
_______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
_______, _______, _______, _______, _______, MO(2), _______),
- [2] = LAYOUT_60_tsangan_hhkb(
+ [2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/converter/thinkpad_t6x/rpi_pico/keyboard.json b/keyboards/converter/thinkpad_t6x/rpi_pico/keyboard.json
new file mode 100644
index 00000000000..4f876a4a94e
--- /dev/null
+++ b/keyboards/converter/thinkpad_t6x/rpi_pico/keyboard.json
@@ -0,0 +1,131 @@
+{
+ "manufacturer": "strobo5",
+ "keyboard_name": "converter/thinkpad_t6x/rpi_pico",
+ "maintainer": "strobo5",
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true
+ },
+ "matrix_pins": {
+ "cols": ["GP7", "GP9", "GP11", "GP13", "GP17", "GP16", "GP14", "GP12", "GP15", "GP8", "GP10", "GP6", "GP4", "GP2", "GP5", "GP3"],
+ "rows": ["GP20", "GP26", "GP22", "GP21", "GP18", "GP19", "GP27", "GP28"]
+ },
+ "processor": "RP2040",
+ "ps2": {
+ "clock_pin": "GP1",
+ "data_pin": "GP0",
+ "driver": "vendor",
+ "enabled": true,
+ "mouse_enabled": true
+ },
+ "url": "https://github.com/strobo5/T61_PiPico_Scanner",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT_iso": {
+ "layout": [
+ {"label": "Esc", "matrix": [5, 0], "x": 0, "y": 0, "w": 0.9, "h": 0.75},
+ {"label": "Mute", "matrix": [4, 10], "x": 0.9, "y": 0, "w": 0.75, "h": 0.5},
+ {"label": "Vol -", "matrix": [3, 10], "x": 1.65, "y": 0, "w": 0.75, "h": 0.5},
+ {"label": "Vol +", "matrix": [2, 10], "x": 2.4, "y": 0, "w": 0.75, "h": 0.5},
+ {"label": "ThinkVantage", "matrix": [5, 10], "x": 3.5, "y": 0, "w": 1.25, "h": 0.5},
+ {"label": "PrtSc", "matrix": [1, 13], "x": 8.9, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "ScrLk", "matrix": [2, 13], "x": 9.8, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "Pause", "matrix": [6, 12], "x": 10.7, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "Insert", "matrix": [0, 9], "x": 12, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "Home", "matrix": [0, 12], "x": 12.9, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "PgUp", "matrix": [0, 11], "x": 13.8, "y": 0, "w": 0.9, "h": 0.65},
+ {"label": "F1", "matrix": [0, 1], "x": 0, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F2", "matrix": [0, 2], "x": 0.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F3", "matrix": [3, 2], "x": 1.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F4", "matrix": [5, 2], "x": 2.7, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F5", "matrix": [5, 8], "x": 4, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F6", "matrix": [5, 5], "x": 4.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F7", "matrix": [3, 6], "x": 5.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F8", "matrix": [0, 6], "x": 6.7, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F9", "matrix": [0, 8], "x": 8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F10", "matrix": [1, 8], "x": 8.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F11", "matrix": [1, 10], "x": 9.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "F12", "matrix": [1, 9], "x": 10.7, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "Delete", "matrix": [0, 10], "x": 12, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "End", "matrix": [1, 12], "x": 12.9, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "PgDn", "matrix": [1, 11], "x": 13.8, "y": 0.75, "w": 0.9, "h": 0.65},
+ {"label": "`\u00ac", "matrix": [0, 0], "x": 0, "y": 1.4},
+ {"label": "1!", "matrix": [1, 0], "x": 1, "y": 1.4},
+ {"label": "2\"", "matrix": [1, 1], "x": 2, "y": 1.4},
+ {"label": "3\u00a3", "matrix": [1, 2], "x": 3, "y": 1.4},
+ {"label": "4$", "matrix": [1, 3], "x": 4, "y": 1.4},
+ {"label": "5%", "matrix": [0, 3], "x": 5, "y": 1.4},
+ {"label": "6^", "matrix": [0, 4], "x": 6, "y": 1.4},
+ {"label": "7&", "matrix": [1, 4], "x": 7, "y": 1.4},
+ {"label": "8*", "matrix": [1, 5], "x": 8, "y": 1.4},
+ {"label": "9(", "matrix": [1, 6], "x": 9, "y": 1.4},
+ {"label": "0)", "matrix": [1, 7], "x": 10, "y": 1.4},
+ {"label": "-_", "matrix": [0, 7], "x": 11, "y": 1.4},
+ {"label": "=+", "matrix": [0, 5], "x": 12, "y": 1.4},
+ {"label": "Bksp", "matrix": [3, 8], "x": 13, "y": 1.4, "w": 2},
+ {"label": "Tab", "matrix": [3, 0], "x": 0, "y": 2.4, "w": 1.5},
+ {"label": "Q", "matrix": [2, 0], "x": 1.5, "y": 2.4},
+ {"label": "W", "matrix": [2, 1], "x": 2.5, "y": 2.4},
+ {"label": "E", "matrix": [2, 2], "x": 3.5, "y": 2.4},
+ {"label": "R", "matrix": [2, 3], "x": 4.5, "y": 2.4},
+ {"label": "T", "matrix": [3, 3], "x": 5.5, "y": 2.4},
+ {"label": "Y", "matrix": [3, 4], "x": 6.5, "y": 2.4},
+ {"label": "U", "matrix": [2, 4], "x": 7.5, "y": 2.4},
+ {"label": "I", "matrix": [2, 5], "x": 8.5, "y": 2.4},
+ {"label": "O", "matrix": [2, 6], "x": 9.5, "y": 2.4},
+ {"label": "P", "matrix": [2, 7], "x": 10.5, "y": 2.4},
+ {"label": "[{", "matrix": [3, 7], "x": 11.5, "y": 2.4},
+ {"label": "]}", "matrix": [3, 5], "x": 12.5, "y": 2.4},
+ {"label": "Caps Lock", "matrix": [3, 1], "x": 0, "y": 3.4, "w": 1.75},
+ {"label": "A", "matrix": [4, 0], "x": 1.75, "y": 3.4},
+ {"label": "S", "matrix": [4, 1], "x": 2.75, "y": 3.4},
+ {"label": "D", "matrix": [4, 2], "x": 3.75, "y": 3.4},
+ {"label": "F", "matrix": [4, 3], "x": 4.75, "y": 3.4},
+ {"label": "G", "matrix": [5, 3], "x": 5.75, "y": 3.4},
+ {"label": "H", "matrix": [5, 4], "x": 6.75, "y": 3.4},
+ {"label": "J", "matrix": [4, 4], "x": 7.75, "y": 3.4},
+ {"label": "K", "matrix": [4, 5], "x": 8.75, "y": 3.4},
+ {"label": "L", "matrix": [4, 6], "x": 9.75, "y": 3.4},
+ {"label": ";:", "matrix": [4, 7], "x": 10.75, "y": 3.4},
+ {"label": "'@", "matrix": [5, 7], "x": 11.75, "y": 3.4},
+ {"label": "#~", "matrix": [6, 7], "x": 12.75, "y": 3.4},
+ {"label": "Enter", "matrix": [6, 8], "x": 13.75, "y": 2.4, "w": 1.25, "h": 2},
+ {"label": "Shift", "matrix": [3, 14], "x": 0, "y": 4.4, "w": 1.25},
+ {"label": "\\|", "matrix": [5, 1], "x": 1.25, "y": 4.4},
+ {"label": "Z", "matrix": [6, 0], "x": 2.25, "y": 4.4},
+ {"label": "X", "matrix": [6, 1], "x": 3.25, "y": 4.4},
+ {"label": "C", "matrix": [6, 2], "x": 4.25, "y": 4.4},
+ {"label": "V", "matrix": [6, 3], "x": 5.25, "y": 4.4},
+ {"label": "B", "matrix": [7, 3], "x": 6.25, "y": 4.4},
+ {"label": "N", "matrix": [7, 4], "x": 7.25, "y": 4.4},
+ {"label": "M", "matrix": [6, 4], "x": 8.25, "y": 4.4},
+ {"label": ",<", "matrix": [6, 5], "x": 9.25, "y": 4.4},
+ {"label": ".>", "matrix": [6, 6], "x": 10.25, "y": 4.4},
+ {"label": "/?", "matrix": [7, 7], "x": 11.25, "y": 4.4},
+ {"label": "Shift", "matrix": [6, 14], "x": 12.25, "y": 4.4, "w": 2.75},
+ {"label": "Fn", "matrix": [4, 9], "x": 0, "y": 5.4},
+ {"label": "Ctrl", "matrix": [0, 15], "x": 1, "y": 5.4, "w": 1.25},
+ {"label": "Left OS", "matrix": [2, 11], "x": 2.25, "y": 5.4, "w": 0.9},
+ {"label": "Alt", "matrix": [5, 13], "x": 3.15, "y": 5.4},
+ {"label": "Space", "matrix": [7, 8], "x": 4.15, "y": 5.4, "w": 5},
+ {"label": "AltGr", "matrix": [7, 13], "x": 9.25, "y": 5.4},
+ {"label": "Menu", "matrix": [4, 11], "x": 10.25, "y": 5.4},
+ {"label": "Ctrl", "matrix": [6, 15], "x": 11.25, "y": 5.4},
+ {"label": "Browser Back", "matrix": [6, 11], "x": 12.25, "y": 5.4, "w": 0.9, "h": 0.75},
+ {"label": "Up", "matrix": [5, 12], "x": 13.15, "y": 5.4, "w": 0.9, "h": 0.75},
+ {"label": "Browser Forward", "matrix": [7, 11], "x": 14.05, "y": 5.4, "w": 0.9, "h": 0.75},
+ {"label": "Left", "matrix": [7, 12], "x": 12.25, "y": 6.15, "w": 0.9, "h": 0.75},
+ {"label": "Down", "matrix": [7, 10], "x": 13.15, "y": 6.15, "w": 0.9, "h": 0.75},
+ {"label": "Right", "matrix": [7, 9], "x": 14.05, "y": 6.15, "w": 0.9, "h": 0.75}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/thinkpad_t6x/rpi_pico/keymaps/default/keymap.c b/keyboards/converter/thinkpad_t6x/rpi_pico/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4dac20888fb
--- /dev/null
+++ b/keyboards/converter/thinkpad_t6x/rpi_pico/keymaps/default/keymap.c
@@ -0,0 +1,17 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_iso(
+ KC_ESC, KC_MUTE, KC_VOLD, KC_VOLU, QK_BOOT, KC_PSCR, KC_SCRL, KC_PAUS, KC_INS, KC_HOME, KC_PGUP,
+ KC_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_END, KC_PGDN,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_NO, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_WBAK, KC_UP , KC_WFWD,
+ KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/converter/thinkpad_t6x/rpi_pico/readme.md b/keyboards/converter/thinkpad_t6x/rpi_pico/readme.md
new file mode 100644
index 00000000000..0008dad2f14
--- /dev/null
+++ b/keyboards/converter/thinkpad_t6x/rpi_pico/readme.md
@@ -0,0 +1,27 @@
+# converter/thinkpad_t6x/rpi_pico
+
+
+
+This is a converter PCB for Lenovo Thinkpad keyboards from a wide range of models (T60, T61, X220, ...), based on the Raspberry Pi Pico. The QMK implementation here is specific to the converter in the link below. Similar PCB designs to convert a Thinkpad keyboard to USB exist, but they use a different microcontroller and wiring of the keyboard connector with the MCU.
+
+* Keyboard Maintainer: [Michael Büchler](https://github.com/strobo5)
+* Hardware Supported: The linked converter PCB with keyboards from various Thinkpad models
+* Hardware Availability: [Custom PCB](https://github.com/strobo5/T61_PiPico_Scanner)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/thinkpad_t6x/rpi_pico:default
+
+Flashing example for this keyboard:
+
+ make converter/thinkpad_t6x/rpi_pico: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/cutie_club/keebcats/denis/keyboard.json b/keyboards/cutie_club/keebcats/denis/keyboard.json
index f9d06af12ad..098ae39cd24 100644
--- a/keyboards/cutie_club/keebcats/denis/keyboard.json
+++ b/keyboards/cutie_club/keebcats/denis/keyboard.json
@@ -32,7 +32,19 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_iso_tsangan", "60_iso_split_bs_rshift", "60_iso", "60_tsangan_hhkb", "60_hhkb", "60_ansi_tsangan", "60_ansi_split_bs_rshift", "60_ansi"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -596,7 +608,7 @@
{"matrix": [4, 12], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/deemen17/de60fs/keyboard.json b/keyboards/deemen17/de60fs/keyboard.json
index b2d9a12f4e7..573c012baaf 100644
--- a/keyboards/deemen17/de60fs/keyboard.json
+++ b/keyboards/deemen17/de60fs/keyboard.json
@@ -49,11 +49,12 @@
"pin": "GP11"
},
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_ansi_wkl",
"60_ansi_wkl_split_bs_rshift",
"60_hhkb"
@@ -127,7 +128,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/deemen17/de80/config.h b/keyboards/deemen17/de80/config.h
new file mode 100644
index 00000000000..e4066d3954b
--- /dev/null
+++ b/keyboards/deemen17/de80/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2024 Deemen17
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define WS2812_SPI_DRIVER SPID2
+#define WS2812_SPI_USE_CIRCULAR_BUFFER
diff --git a/keyboards/deemen17/de80/halconf.h b/keyboards/deemen17/de80/halconf.h
new file mode 100644
index 00000000000..ccf74472856
--- /dev/null
+++ b/keyboards/deemen17/de80/halconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2022 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next
+
diff --git a/keyboards/deemen17/de80/keyboard.json b/keyboards/deemen17/de80/keyboard.json
new file mode 100644
index 00000000000..f2b6b2dbdd4
--- /dev/null
+++ b/keyboards/deemen17/de80/keyboard.json
@@ -0,0 +1,893 @@
+{
+ "manufacturer": "Deemen17",
+ "keyboard_name": "DE80",
+ "maintainer": "Deemen17",
+ "bootloader": "uf2boot",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true,
+ "encoder": true
+ },
+ "matrix_pins": {
+ "rows": ["A8", "A10", "A9", "B11", "C14", "C13"],
+ "cols": ["B14", "B13", "B12", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "A15", "B7", "B6"]
+ },
+ "processor": "STM32F103",
+ "usb": {
+ "vid": "0xDE17",
+ "pid": "0x80F1",
+ "device_version": "1.0.0"
+ },
+ "indicators": {
+ "caps_lock": "B10",
+ "scroll_lock": "B3"
+ },
+ "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": 40,
+ "max_brightness": 250,
+ "sleep": true
+ },
+ "ws2812": {
+ "driver": "spi",
+ "pin": "B15"
+ },
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B5", "pin_b": "B4"}
+ ]
+ },
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_tkl_f13_ansi_tsangan_split_bs_rshift"
+ },
+ "community_layouts": ["tkl_ansi_tsangan", "tkl_ansi_tsangan_split_bs_rshift", "tkl_ansi_wkl", "tkl_ansi_wkl_split_bs_rshift", "tkl_f13_ansi_tsangan", "tkl_f13_ansi_tsangan_split_bs_rshift", "tkl_f13_ansi_wkl", "tkl_f13_ansi_wkl_split_bs_rshift" ],
+ "layouts": {
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [3, 12], "x": 14, "y": 1.25},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"matrix": [0, 9], "x": 9.75, "y": 0},
+ {"matrix": [0, 10], "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"matrix": [0, 13], "x": 14, "y": 0},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"matrix": [0, 9], "x": 9.75, "y": 0},
+ {"matrix": [0, 10], "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"matrix": [0, 13], "x": 14, "y": 0},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [3, 12], "x": 14, "y": 1.25},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [3, 12], "x": 14, "y": 1.25},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"matrix": [0, 9], "x": 9.75, "y": 0},
+ {"matrix": [0, 10], "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"matrix": [0, 13], "x": 14, "y": 0},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+
+ {"matrix": [0, 9], "x": 9.75, "y": 0},
+ {"matrix": [0, 10], "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "x": 12.75, "y": 0},
+
+ {"matrix": [0, 13], "x": 14, "y": 0},
+
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [3, 12], "x": 14, "y": 1.25},
+
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.25},
+
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/deemen17/de80/keymaps/default/keymap.c b/keyboards/deemen17/de80/keymaps/default/keymap.c
new file mode 100644
index 00000000000..cd354304470
--- /dev/null
+++ b/keyboards/deemen17/de80/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2024 Deemen17 Works
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_LSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, MO(1), KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAI, RGB_HUI,
+ KC_TRNS, KC_TRNS, KC_TRNS, 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_SAD, RGB_HUD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD, RGB_VAD, RGB_MOD
+ )
+
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+};
+#endif
diff --git a/keyboards/deemen17/de80/keymaps/default/rules.mk b/keyboards/deemen17/de80/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/deemen17/de80/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/deemen17/de80/mcuconf.h b/keyboards/deemen17/de80/mcuconf.h
new file mode 100644
index 00000000000..8b309107b0c
--- /dev/null
+++ b/keyboards/deemen17/de80/mcuconf.h
@@ -0,0 +1,23 @@
+/* Copyright 2022 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+
+#undef STM32_SPI_USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
diff --git a/keyboards/deemen17/de80/readme.md b/keyboards/deemen17/de80/readme.md
new file mode 100644
index 00000000000..c82330d8f22
--- /dev/null
+++ b/keyboards/deemen17/de80/readme.md
@@ -0,0 +1,27 @@
+# DE80
+
+
+
+The DE80 is a portable TKL PCB that features a compact A87 form factor, dual USB Type C ports (breakable), seven JST SH 4P 1.0 ports, two FPC ports, and compatibility with both F12 and F13 footprints, making it suitable for use with a variety of TKL boards.
+
+* Keyboard Maintainer: [Deemen17](https://github.com/Deemen17)
+* Hardware Supported: DE80 R1 2024 PCB w/ STM32F103 MCU
+* Hardware Availability: [Deemen17 Facebook Page](https://www.facebook.com/deemen17/), [Deemen17 Works Instagram](https://www.instagram.com/deemen17.works)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make deemen17/de80:default
+
+Flashing example for this keyboard:
+
+ make deemen17/de80:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (ESC/Escape) and plug in the keyboard
+* **Physical reset button**: Double tap the button RESET on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/dnworks/sbl/keyboard.json b/keyboards/dnworks/sbl/keyboard.json
index 81461ead4d5..2086fc5aa12 100644
--- a/keyboards/dnworks/sbl/keyboard.json
+++ b/keyboards/dnworks/sbl/keyboard.json
@@ -27,16 +27,18 @@
"cols": ["GP28","GP27","GP26","GP25","GP24","GP23","GP22","GP3","GP2","GP1","GP8","GP9","GP10","GP11","GP7"]
},
"layout_aliases": {
- "LAYOUT": "LAYOUT_all"
+ "LAYOUT": "LAYOUT_all",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_all": {
@@ -320,7 +322,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/doio/kb09/keyboard.json b/keyboards/doio/kb09/keyboard.json
new file mode 100644
index 00000000000..e3012f510cb
--- /dev/null
+++ b/keyboards/doio/kb09/keyboard.json
@@ -0,0 +1,123 @@
+{
+ "manufacturer": "DOIO",
+ "keyboard_name": "KB09-01",
+ "maintainer": "DOIO2022",
+ "bootloader": "stm32duino",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B5", "pin_b": "B6"},
+ {"pin_a": "A1", "pin_b": "A2"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["B14", "B13", "B12", "B0", "A7"],
+ "rows": ["B3", "B4", "B9", "B8"]
+ },
+ "processor": "STM32F103",
+ "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_fractal": 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
+ },
+ "default": {
+ "animation": "cycle_up_down"
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
+ {"matrix": [0, 1], "x": 56, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 112, "y": 0, "flags": 4},
+ {"matrix": [1, 0], "x": 0, "y": 21, "flags": 4},
+ {"matrix": [1, 1], "x": 56, "y": 21, "flags": 4},
+ {"matrix": [1, 2], "x": 112, "y": 21, "flags": 4},
+ {"matrix": [2, 0], "x": 0, "y": 42, "flags": 4},
+ {"matrix": [2, 1], "x": 56, "y": 42, "flags": 4},
+ {"matrix": [2, 2], "x": 112, "y": 42, "flags": 4}
+ ],
+ "max_brightness": 200,
+ "sleep": true
+ },
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0901",
+ "vid": "0xD010"
+ },
+ "ws2812": {
+ "pin": "A10"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [1, 3], "x": 1, "y": 0},
+ {"matrix": [0, 0], "x": 4, "y": 0},
+ {"matrix": [0, 1], "x": 5, "y": 0},
+ {"matrix": [0, 2], "x": 6, "y": 0},
+ {"matrix": [0, 4], "x": 8, "y": 0},
+ {"matrix": [1, 4], "x": 9, "y": 0},
+ {"matrix": [0, 3], "x": 0, "y": 1},
+ {"matrix": [2, 3], "x": 2, "y": 1},
+ {"matrix": [1, 0], "x": 4, "y": 1},
+ {"matrix": [1, 1], "x": 5, "y": 1},
+ {"matrix": [1, 2], "x": 6, "y": 1},
+ {"matrix": [3, 0], "x": 1, "y": 2},
+ {"matrix": [2, 0], "x": 4, "y": 2},
+ {"matrix": [2, 1], "x": 5, "y": 2},
+ {"matrix": [2, 2], "x": 6, "y": 2},
+ {"matrix": [3, 1], "x": 3, "y": 3},
+ {"matrix": [3, 2], "x": 3, "y": 3}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/doio/kb09/keymaps/default/keymap.c b/keyboards/doio/kb09/keymaps/default/keymap.c
new file mode 100644
index 00000000000..657a6bc428f
--- /dev/null
+++ b/keyboards/doio/kb09/keymaps/default/keymap.c
@@ -0,0 +1,58 @@
+/* Copyright 2022 DOIO
+ * Copyright 2022 DOIO2022
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _LAY0,
+ _LAY1,
+ _LAY2,
+ _LAY3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_LAY0] = LAYOUT(
+ KC_UP, KC_1, KC_2, KC_3, KC_MPLY, KC_MUTE,
+ KC_LEFT, KC_RIGHT, KC_4, KC_5, KC_6,
+ KC_DOWN, KC_7, KC_8, KC_9,
+ TO(1), LWIN(KC_D)),
+ [_LAY1] = LAYOUT(
+ KC_TRNS, C(S(KC_S)), C(KC_H), C(KC_G), KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, C(S(KC_A)), C(KC_J), C(S(KC_G)),
+ KC_TRNS, C(KC_Z), KC_DEL, C(A(S(KC_E))),
+ TO(2), KC_TRNS),
+ [_LAY2] = LAYOUT(
+ KC_TRNS, S(KC_I), A(KC_EQL), C(S(KC_M)), KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, S(KC_O), A(KC_MINS), S(KC_M),
+ KC_TRNS, KC_C, KC_V, C(KC_M),
+ TO(3), KC_TRNS),
+ [_LAY3] = LAYOUT(
+ KC_TRNS, RGB_SPI, RGB_SPD, RGB_HUI, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, RGB_SAI, RGB_SAD, RGB_HUD,
+ KC_TRNS, RGB_MOD, RGB_VAI, RGB_VAD,
+ TO(0), KC_TRNS)
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_LAY0] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_LAY1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [_LAY2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [_LAY3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+};
+#endif
diff --git a/keyboards/doio/kb09/readme.md b/keyboards/doio/kb09/readme.md
new file mode 100644
index 00000000000..a7b23dc58da
--- /dev/null
+++ b/keyboards/doio/kb09/readme.md
@@ -0,0 +1,26 @@
+# doio/kb09
+
+
+
+QMK for DOIO GBA keypad .
+
+* Keyboard Maintainer: DOIO2022
+* Hardware Supported: DOIO GBA keypad
+
+Make example for this keyboard (after setting up your build environment):
+
+ make doio/kb09:default
+
+Flashing example for this keyboard:
+
+ make doio/kb09: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
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/dp60/keyboard.json b/keyboards/dp60/keyboard.json
index 9780141ceab..51a2c08d470 100644
--- a/keyboards/dp60/keyboard.json
+++ b/keyboards/dp60/keyboard.json
@@ -151,9 +151,15 @@
},
"layout_aliases": {
"LAYOUT_60_wkl": "LAYOUT_60_ansi_tsangan_split_rshift",
- "LAYOUT_60_wkl_split_bs": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_60_wkl_split_bs": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_ansi", "60_hhkb", "60_iso", "60_ansi_split_bs_rshift"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_hhkb",
+ "60_iso"
+ ],
"layouts": {
"LAYOUT_60_ansi_tsangan_split_rshift": {
"layout": [
@@ -502,7 +508,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/druah/majestouch_redux/keyboard.json b/keyboards/druah/majestouch_redux/keyboard.json
new file mode 100644
index 00000000000..b9ea139bd58
--- /dev/null
+++ b/keyboards/druah/majestouch_redux/keyboard.json
@@ -0,0 +1,131 @@
+{
+ "manufacturer": "FILCO",
+ "keyboard_name": "Majestouch Redux",
+ "maintainer": "Druah",
+ "bootloader": "atmel-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "C1",
+ "scroll_lock": "C0"
+ },
+ "matrix_pins": {
+ "cols": ["A0", "A1", "A2", "F6", "F7", "E6", "F0", "F1", "F2", "B3", "B2", "B1", "F3", "F4", "C5", "C6", "C3"],
+ "rows": ["C2", "B4", "B5", "F5", "C7", "C4"]
+ },
+ "processor": "at90usb646",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "url": "https://druah.moe",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0003",
+ "vid": "0x444E"
+ },
+ "community_layouts": ["tkl_ansi"],
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.5},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.5},
+ {"matrix": [1, 16], "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": [2, 16], "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, 13], "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, 13], "x": 12.25, "y": 4.5, "w": 2.75},
+ {"matrix": [4, 15], "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, 7], "x": 3.75, "y": 5.5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 11], "x": 11.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.5},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.5},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/druah/majestouch_redux/keymaps/default/keymap.c b/keyboards/druah/majestouch_redux/keymaps/default/keymap.c
new file mode 100644
index 00000000000..a3f8be1bbac
--- /dev/null
+++ b/keyboards/druah/majestouch_redux/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2024 Druah (@Druah)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12││PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp││Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ ││Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl││ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/druah/majestouch_redux/readme.md b/keyboards/druah/majestouch_redux/readme.md
new file mode 100644
index 00000000000..19df7d46974
--- /dev/null
+++ b/keyboards/druah/majestouch_redux/readme.md
@@ -0,0 +1,27 @@
+# Majestouch Redux
+
+
+
+A replacement PCB for the FILCO Majestouch TKL line of keyboards (and other keyboards) compatible with [Phantom TKL](https://deskthority.net/wiki/Phantom) PCB spacing
+
+* Keyboard Maintainer: [Druah](https://github.com/Druah)
+* Hardware Supported: Majestouch Redux
+* Hardware Availability: Private buy
+
+Make example for this keyboard (after setting up your build environment):
+
+ make druah/majestouch_redux:default
+
+Flashing example for this keyboard:
+
+ make druah/majestouch_redux:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the Escape/top left key) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB labelled with "RESET"
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/dyz/dyz60_hs/keyboard.json b/keyboards/dyz/dyz60_hs/keyboard.json
index 637f02d910d..112b1285772 100644
--- a/keyboards/dyz/dyz60_hs/keyboard.json
+++ b/keyboards/dyz/dyz60_hs/keyboard.json
@@ -51,7 +51,16 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_tsangan_hhkb", "60_iso", "60_iso_split_bs_rshift"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso",
+ "60_iso_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -266,7 +275,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/dz60/keyboard.json b/keyboards/dz60/keyboard.json
index e3e74959582..8a8e631f1b7 100644
--- a/keyboards/dz60/keyboard.json
+++ b/keyboards/dz60/keyboard.json
@@ -60,7 +60,18 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_arrow", "60_ansi_split_bs_rshift", "60_hhkb", "60_iso", "60_abnt2", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_arrow",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_abnt2"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT": {
"layout": [
@@ -1425,7 +1436,7 @@
{"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/dztech/dz60rgb_wkl/info.json b/keyboards/dztech/dz60rgb_wkl/info.json
index 52685db180f..ca43c1cbd70 100644
--- a/keyboards/dztech/dz60rgb_wkl/info.json
+++ b/keyboards/dztech/dz60rgb_wkl/info.json
@@ -6,12 +6,13 @@
"usb": {
"vid": "0x445A"
},
- "community_layouts": ["60_tsangan_hhkb"],
+ "community_layouts": ["60_ansi_tsangan_split_bs_rshift"],
"layout_aliases": {
- "LAYOUT_HHKB": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_HHKB": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c b/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c
index bf02a301be1..a1bbe830e31 100644
--- a/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c
+++ b/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c
@@ -1,21 +1,21 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
CTL_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SCRL, KC_PAUS, QK_BOOT,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______,
KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, NK_TOGG, _______, _______, KC_END, KC_PGDN, KC_MNXT, _______,
_______, _______, _______, _______, _______, _______, _______
),
- [2] = LAYOUT_60_tsangan_hhkb(
+ [2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______,
_______, RGB_TOG, _______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, _______, _______, _______, QK_BOOT,
_______, _______, _______, _______, _______, _______, _______, _______, RGB_SPI, RGB_SPD, _______, _______, _______,
diff --git a/keyboards/dztech/dz60v2/keyboard.json b/keyboards/dztech/dz60v2/keyboard.json
index 52889396089..7714e4b7d25 100644
--- a/keyboards/dztech/dz60v2/keyboard.json
+++ b/keyboards/dztech/dz60v2/keyboard.json
@@ -53,14 +53,18 @@
"60_ansi_arrow",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan",
- "60_tsangan_hhkb",
+ "60_iso_tsangan_split_bs_rshift"
"64_ansi",
"64_iso"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT": {
"layout": [
@@ -1818,7 +1822,7 @@
{ "label": "k4e", "matrix": [4, 14], "w": 1.5, "x": 13.5, "y": 4 }
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{ "label": "k00", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "k01", "matrix": [0, 1], "x": 1, "y": 0 },
diff --git a/keyboards/dztech/tofu60/keyboard.json b/keyboards/dztech/tofu60/keyboard.json
index 57c57604d13..149f04d46a8 100644
--- a/keyboards/dztech/tofu60/keyboard.json
+++ b/keyboards/dztech/tofu60/keyboard.json
@@ -29,12 +29,16 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan",
- "60_tsangan_hhkb"
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -381,7 +385,7 @@
{ "label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5 }
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{ "label": "~", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
diff --git a/keyboards/era/linx3/fave65s/keyboard.json b/keyboards/era/linx3/fave65s/keyboard.json
index 9bb1e456949..87f4fdf513e 100644
--- a/keyboards/era/linx3/fave65s/keyboard.json
+++ b/keyboards/era/linx3/fave65s/keyboard.json
@@ -136,7 +136,7 @@
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 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},
@@ -279,7 +279,7 @@
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 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},
@@ -420,7 +420,7 @@
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 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},
@@ -565,7 +565,7 @@
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 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},
diff --git a/keyboards/era/sirind/tomak79h/config.h b/keyboards/era/sirind/tomak79h/config.h
new file mode 100644
index 00000000000..f04429bcd89
--- /dev/null
+++ b/keyboards/era/sirind/tomak79h/config.h
@@ -0,0 +1,15 @@
+// Copyright 2024 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Split configuration */
+#define USB_VBUS_PIN GP19
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
+#define SERIAL_USART_PIN_SWAP
+
+/* Reset */
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak79h/keyboard.json b/keyboards/era/sirind/tomak79h/keyboard.json
new file mode 100644
index 00000000000..216250f8502
--- /dev/null
+++ b/keyboards/era/sirind/tomak79h/keyboard.json
@@ -0,0 +1,393 @@
+{
+ "manufacturer": "SIRIND",
+ "keyboard_name": "Tomak79H",
+ "maintainer": "eerraa",
+ "bootloader": "rp2040",
+ "build": {
+ "debounce_type": "sym_defer_pk"
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP9", "GP7", "GP6", "GP5", "GP4", "GP3", "GP2", null],
+ "rows": ["GP24", "GP8", "GP26", "GP25", "GP27", "GP28"]
+ },
+ "processor": "RP2040",
+ "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,
+ "flower_blooming": 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,
+ "riverflow": 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,
+ "starlight": true,
+ "starlight_dual_hue": true,
+ "starlight_dual_sat": true,
+ "typing_heatmap": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
+ {"matrix": [0, 2], "x": 20, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 33, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 47, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 60, "y": 0, "flags": 4},
+ {"matrix": [0, 6], "x": 80, "y": 0, "flags": 4},
+ {"matrix": [0, 7], "x": 93, "y": 0, "flags": 4},
+ {"matrix": [1, 7], "x": 95, "y": 15, "flags": 4},
+ {"matrix": [1, 6], "x": 81, "y": 15, "flags": 4},
+ {"matrix": [1, 5], "x": 68, "y": 15, "flags": 4},
+ {"matrix": [1, 4], "x": 54, "y": 15, "flags": 4},
+ {"matrix": [1, 3], "x": 41, "y": 15, "flags": 4},
+ {"matrix": [1, 2], "x": 27, "y": 15, "flags": 4},
+ {"matrix": [1, 1], "x": 14, "y": 15, "flags": 4},
+ {"matrix": [1, 0], "x": 0, "y": 15, "flags": 4},
+ {"matrix": [2, 0], "x": 3, "y": 26, "flags": 1},
+ {"matrix": [2, 1], "x": 20, "y": 26, "flags": 4},
+ {"matrix": [2, 2], "x": 34, "y": 26, "flags": 4},
+ {"matrix": [2, 3], "x": 47, "y": 26, "flags": 4},
+ {"matrix": [2, 4], "x": 61, "y": 26, "flags": 4},
+ {"matrix": [2, 5], "x": 75, "y": 26, "flags": 4},
+ {"matrix": [2, 6], "x": 88, "y": 26, "flags": 4},
+ {"matrix": [3, 6], "x": 92, "y": 38, "flags": 4},
+ {"matrix": [3, 5], "x": 78, "y": 38, "flags": 4},
+ {"matrix": [3, 4], "x": 64, "y": 38, "flags": 4},
+ {"matrix": [3, 3], "x": 51, "y": 38, "flags": 4},
+ {"matrix": [3, 2], "x": 37, "y": 38, "flags": 4},
+ {"matrix": [3, 1], "x": 24, "y": 38, "flags": 4},
+ {"matrix": [3, 0], "x": 5, "y": 38, "flags": 1},
+ {"matrix": [3, 0], "x": 2, "y": 38, "flags": 1},
+ {"matrix": [4, 0], "x": 8, "y": 49, "flags": 1},
+ {"matrix": [4, 2], "x": 31, "y": 49, "flags": 4},
+ {"matrix": [4, 3], "x": 44, "y": 49, "flags": 4},
+ {"matrix": [4, 4], "x": 58, "y": 49, "flags": 4},
+ {"matrix": [4, 5], "x": 71, "y": 49, "flags": 4},
+ {"matrix": [4, 6], "x": 85, "y": 49, "flags": 4},
+ {"matrix": [5, 6], "x": 93, "y": 64, "flags": 1},
+ {"matrix": [5, 5], "x": 71, "y": 64, "flags": 4},
+ {"matrix": [5, 2], "x": 37, "y": 61, "flags": 1},
+ {"matrix": [5, 1], "x": 20, "y": 61, "flags": 1},
+ {"matrix": [5, 0], "x": 3, "y": 61, "flags": 1},
+ {"matrix": [6, 8], "x": 221, "y": 0, "flags": 4},
+ {"matrix": [6, 7], "x": 205, "y": 0, "flags": 4},
+ {"matrix": [6, 5], "x": 185, "y": 0, "flags": 4},
+ {"matrix": [6, 4], "x": 171, "y": 0, "flags": 4},
+ {"matrix": [6, 3], "x": 158, "y": 0, "flags": 4},
+ {"matrix": [6, 2], "x": 144, "y": 0, "flags": 4},
+ {"matrix": [6, 1], "x": 124, "y": 0, "flags": 4},
+ {"matrix": [6, 0], "x": 111, "y": 0, "flags": 4},
+ {"matrix": [7, 0], "x": 109, "y": 15, "flags": 4},
+ {"matrix": [7, 1], "x": 123, "y": 15, "flags": 4},
+ {"matrix": [7, 2], "x": 136, "y": 15, "flags": 4},
+ {"matrix": [7, 3], "x": 150, "y": 15, "flags": 4},
+ {"matrix": [7, 4], "x": 163, "y": 15, "flags": 4},
+ {"matrix": [7, 5], "x": 177, "y": 15, "flags": 4},
+ {"matrix": [7, 7], "x": 197, "y": 15, "flags": 1},
+ {"matrix": [7, 8], "x": 221, "y": 15, "flags": 1},
+ {"matrix": [8, 8], "x": 221, "y": 26, "flags": 4},
+ {"matrix": [8, 7], "x": 200, "y": 26, "flags": 4},
+ {"matrix": [8, 6], "x": 184, "y": 26, "flags": 4},
+ {"matrix": [8, 5], "x": 170, "y": 26, "flags": 4},
+ {"matrix": [8, 4], "x": 157, "y": 26, "flags": 4},
+ {"matrix": [8, 3], "x": 143, "y": 26, "flags": 4},
+ {"matrix": [8, 2], "x": 130, "y": 26, "flags": 4},
+ {"matrix": [8, 1], "x": 116, "y": 26, "flags": 4},
+ {"matrix": [8, 0], "x": 102, "y": 26, "flags": 4},
+ {"matrix": [9, 0], "x": 106, "y": 38, "flags": 4},
+ {"matrix": [9, 1], "x": 119, "y": 38, "flags": 4},
+ {"matrix": [9, 2], "x": 133, "y": 38, "flags": 4},
+ {"matrix": [9, 3], "x": 147, "y": 38, "flags": 4},
+ {"matrix": [9, 4], "x": 160, "y": 38, "flags": 4},
+ {"matrix": [9, 5], "x": 174, "y": 38, "flags": 4},
+ {"matrix": [9, 7], "x": 200, "y": 38, "flags": 1},
+ {"matrix": [10, 7], "x": 208, "y": 52, "flags": 4},
+ {"matrix": [10, 6], "x": 186, "y": 49, "flags": 1},
+ {"matrix": [10, 5], "x": 167, "y": 49, "flags": 4},
+ {"matrix": [10, 4], "x": 153, "y": 49, "flags": 4},
+ {"matrix": [10, 3], "x": 140, "y": 49, "flags": 4},
+ {"matrix": [10, 2], "x": 126, "y": 49, "flags": 4},
+ {"matrix": [10, 1], "x": 113, "y": 49, "flags": 4},
+ {"matrix": [10, 0], "x": 99, "y": 49, "flags": 4},
+ {"matrix": [11, 2], "x": 123, "y": 64, "flags": 4},
+ {"matrix": [11, 4], "x": 160, "y": 61, "flags": 1},
+ {"matrix": [11, 5], "x": 177, "y": 61, "flags": 1},
+ {"matrix": [11, 6], "x": 194, "y": 64, "flags": 4},
+ {"matrix": [11, 7], "x": 208, "y": 64, "flags": 4},
+ {"matrix": [11, 8], "x": 221, "y": 64, "flags": 4},
+ {"x": 224, "y": 53, "flags": 2},
+ {"x": 224, "y": 51, "flags": 2},
+ {"x": 224, "y": 49, "flags": 2},
+ {"x": 224, "y": 48, "flags": 2},
+ {"x": 224, "y": 46, "flags": 2},
+ {"x": 224, "y": 44, "flags": 2},
+ {"x": 224, "y": 43, "flags": 2},
+ {"x": 224, "y": 41, "flags": 2},
+ {"x": 224, "y": 39, "flags": 2}
+ ],
+ "sleep": true,
+ "split_count": [41, 55]
+ },
+ "split": {
+ "bootmagic": {
+ "matrix": [6, 0]
+ },
+ "enabled": true,
+ "handedness": {
+ "pin": "GP20"
+ },
+ "matrix_pins": {
+ "right": {
+ "cols": ["GP25", "GP24", "GP23", "GP22", "GP7", "GP6", "GP5", "GP4", "GP2"],
+ "rows": ["GP29", "GP28", "GP27", "GP26", "GP11", "GP3"]
+ }
+ },
+ "serial": {
+ "driver": "vendor"
+ },
+ "transport": {
+ "sync": {
+ "indicators": true,
+ "layer_state": true,
+ "matrix_state": true
+ }
+ }
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0014",
+ "vid": "0x4552"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP17"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [6, 0], "x": 9.5, "y": 0},
+ {"matrix": [6, 1], "x": 10.5, "y": 0},
+ {"matrix": [6, 2], "x": 12, "y": 0},
+ {"matrix": [6, 3], "x": 13, "y": 0},
+ {"matrix": [6, 4], "x": 14, "y": 0},
+ {"matrix": [6, 5], "x": 15, "y": 0},
+ {"matrix": [6, 7], "x": 16.5, "y": 0},
+ {"matrix": [6, 8], "x": 17.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [7, 0], "x": 9.5, "y": 1.25},
+ {"matrix": [7, 1], "x": 10.5, "y": 1.25},
+ {"matrix": [7, 2], "x": 11.5, "y": 1.25},
+ {"matrix": [7, 3], "x": 12.5, "y": 1.25},
+ {"matrix": [7, 4], "x": 13.5, "y": 1.25},
+ {"matrix": [7, 5], "x": 14.5, "y": 1.25},
+ {"matrix": [7, 6], "x": 15.5, "y": 1.25},
+ {"matrix": [7, 7], "x": 16.5, "y": 1.25},
+ {"matrix": [7, 8], "x": 17.75, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [8, 0], "x": 9, "y": 2.25},
+ {"matrix": [8, 1], "x": 10, "y": 2.25},
+ {"matrix": [8, 2], "x": 11, "y": 2.25},
+ {"matrix": [8, 3], "x": 12, "y": 2.25},
+ {"matrix": [8, 4], "x": 13, "y": 2.25},
+ {"matrix": [8, 5], "x": 14, "y": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 2.25},
+ {"matrix": [8, 7], "x": 16, "y": 2.25, "w": 1.5},
+ {"matrix": [8, 8], "x": 17.75, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [9, 0], "x": 9.25, "y": 3.25},
+ {"matrix": [9, 1], "x": 10.25, "y": 3.25},
+ {"matrix": [9, 2], "x": 11.25, "y": 3.25},
+ {"matrix": [9, 3], "x": 12.25, "y": 3.25},
+ {"matrix": [9, 4], "x": 13.25, "y": 3.25},
+ {"matrix": [9, 5], "x": 14.25, "y": 3.25},
+ {"matrix": [9, 7], "x": 15.25, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [10, 0], "x": 8.75, "y": 4.25},
+ {"matrix": [10, 1], "x": 9.75, "y": 4.25},
+ {"matrix": [10, 2], "x": 10.75, "y": 4.25},
+ {"matrix": [10, 3], "x": 11.75, "y": 4.25},
+ {"matrix": [10, 4], "x": 12.75, "y": 4.25},
+ {"matrix": [10, 5], "x": 13.75, "y": 4.25},
+ {"matrix": [10, 6], "x": 14.75, "y": 4.25, "w": 1.75},
+ {"matrix": [10, 7], "x": 16.75, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 5], "x": 4.75, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 6], "x": 7, "y": 5.5},
+ {"matrix": [11, 2], "x": 9.5, "y": 5.5, "w": 2.75},
+ {"matrix": [11, 4], "x": 13, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 5], "x": 14.5, "y": 5.25},
+ {"matrix": [11, 6], "x": 15.75, "y": 5.5},
+ {"matrix": [11, 7], "x": 16.75, "y": 5.5},
+ {"matrix": [11, 8], "x": 17.75, "y": 5.5}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [6, 0], "x": 9.5, "y": 0},
+ {"matrix": [6, 1], "x": 10.5, "y": 0},
+ {"matrix": [6, 2], "x": 12, "y": 0},
+ {"matrix": [6, 3], "x": 13, "y": 0},
+ {"matrix": [6, 4], "x": 14, "y": 0},
+ {"matrix": [6, 5], "x": 15, "y": 0},
+ {"matrix": [6, 7], "x": 16.5, "y": 0},
+ {"matrix": [6, 8], "x": 17.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [7, 0], "x": 9.5, "y": 1.25},
+ {"matrix": [7, 1], "x": 10.5, "y": 1.25},
+ {"matrix": [7, 2], "x": 11.5, "y": 1.25},
+ {"matrix": [7, 3], "x": 12.5, "y": 1.25},
+ {"matrix": [7, 4], "x": 13.5, "y": 1.25},
+ {"matrix": [7, 5], "x": 14.5, "y": 1.25},
+ {"matrix": [7, 7], "x": 15.5, "y": 1.25},
+ {"matrix": [7, 8], "x": 17.75, "y": 1.25, "w": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [8, 0], "x": 9, "y": 2.25},
+ {"matrix": [8, 1], "x": 10, "y": 2.25},
+ {"matrix": [8, 2], "x": 11, "y": 2.25},
+ {"matrix": [8, 3], "x": 12, "y": 2.25},
+ {"matrix": [8, 4], "x": 13, "y": 2.25},
+ {"matrix": [8, 5], "x": 14, "y": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 2.25},
+ {"matrix": [8, 7], "x": 16, "y": 2.25, "w": 1.5},
+ {"matrix": [8, 8], "x": 17.75, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [9, 0], "x": 9.25, "y": 3.25},
+ {"matrix": [9, 1], "x": 10.25, "y": 3.25},
+ {"matrix": [9, 2], "x": 11.25, "y": 3.25},
+ {"matrix": [9, 3], "x": 12.25, "y": 3.25},
+ {"matrix": [9, 4], "x": 13.25, "y": 3.25},
+ {"matrix": [9, 5], "x": 14.25, "y": 3.25},
+ {"matrix": [9, 7], "x": 15.25, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [10, 0], "x": 8.75, "y": 4.25},
+ {"matrix": [10, 1], "x": 9.75, "y": 4.25},
+ {"matrix": [10, 2], "x": 10.75, "y": 4.25},
+ {"matrix": [10, 3], "x": 11.75, "y": 4.25},
+ {"matrix": [10, 4], "x": 12.75, "y": 4.25},
+ {"matrix": [10, 5], "x": 13.75, "y": 4.25},
+ {"matrix": [10, 6], "x": 14.75, "y": 4.25, "w": 1.75},
+ {"matrix": [10, 7], "x": 16.75, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 5], "x": 4.75, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 6], "x": 7, "y": 5.5},
+ {"matrix": [11, 2], "x": 9.5, "y": 5.5, "w": 2.75},
+ {"matrix": [11, 4], "x": 13, "y": 5.25, "w": 1.5},
+ {"matrix": [11, 5], "x": 14.5, "y": 5.25},
+ {"matrix": [11, 6], "x": 15.75, "y": 5.5},
+ {"matrix": [11, 7], "x": 16.75, "y": 5.5},
+ {"matrix": [11, 8], "x": 17.75, "y": 5.5}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak79h/keymaps/default/keymap.c b/keyboards/era/sirind/tomak79h/keymaps/default/keymap.c
new file mode 100644
index 00000000000..7b8a5b8a139
--- /dev/null
+++ b/keyboards/era/sirind/tomak79h/keymaps/default/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2024 Hyojin Bak (@eerraa)
+// 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_F13, KC_PSCR,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_MOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak79h/readme.md b/keyboards/era/sirind/tomak79h/readme.md
new file mode 100644
index 00000000000..528731ef12c
--- /dev/null
+++ b/keyboards/era/sirind/tomak79h/readme.md
@@ -0,0 +1,27 @@
+# Tomak79H, Hotswap ver
+
+
+
+Ergonomics Split Keyboard powered by RP2040.
+
+* Keyboard Maintainer: [ERA](https://github.com/eerraa)
+* Hardware supported: SIRIND Tomak79
+* Hardware availability: [Syryan](https://srind.mysoho.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make era/sirind/tomak79h:default
+
+Flashing example for this keyboard:
+
+ make era/sirind/tomak79h:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the 'top-left(ESC, F7)' key and plug in the keyboard.
+* **Physical reset**: Short the 'RESET' and 'GND' holes twice within one second, or plug in the keyboard with the 'BOOT' and 'GND' holes shorted.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak79h/tomak79h.c b/keyboards/era/sirind/tomak79h/tomak79h.c
new file mode 100644
index 00000000000..580a1ba68b1
--- /dev/null
+++ b/keyboards/era/sirind/tomak79h/tomak79h.c
@@ -0,0 +1,16 @@
+// Copyright 2024 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+bool rgb_matrix_indicators_kb(void) {
+ if (!rgb_matrix_indicators_user()) {
+ return false;
+ }
+ if (host_keyboard_led_state().caps_lock) {
+ for (uint8_t i = 87; i <= 95; i++) {
+ rgb_matrix_set_color(i, 0, 128, 128);
+ }
+ }
+ return true;
+}
\ No newline at end of file
diff --git a/keyboards/evyd13/plain60/keyboard.json b/keyboards/evyd13/plain60/keyboard.json
index 711bc515596..ce08a523ed7 100644
--- a/keyboards/evyd13/plain60/keyboard.json
+++ b/keyboards/evyd13/plain60/keyboard.json
@@ -27,7 +27,17 @@
},
"processor": "atmega32u4",
"bootloader": "qmk-dfu",
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_hhkb", "60_iso", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT": {
"layout": [
@@ -452,7 +462,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/exclusive/e6_rgb/keyboard.json b/keyboards/exclusive/e6_rgb/keyboard.json
index 36c186584f3..401bee9abac 100644
--- a/keyboards/exclusive/e6_rgb/keyboard.json
+++ b/keyboards/exclusive/e6_rgb/keyboard.json
@@ -48,9 +48,15 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT_60_wkl_split_bs": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_60_wkl_split_bs": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_ansi", "60_hhkb", "60_tsangan_hhkb", "60_ansi_split_bs_rshift"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb"
+ ],
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -189,7 +195,7 @@
{"matrix": [4, 12], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/exclusive/e6_rgb/keymaps/60_tsangan_hhkb/keymap.c b/keyboards/exclusive/e6_rgb/keymaps/60_tsangan_hhkb/keymap.c
index fef10517adb..ec354f398fe 100644
--- a/keyboards/exclusive/e6_rgb/keymaps/60_tsangan_hhkb/keymap.c
+++ b/keyboards/exclusive/e6_rgb/keymaps/60_tsangan_hhkb/keymap.c
@@ -1,14 +1,14 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_END,
KC_CAPS, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSCR,
QK_BOOT, UG_TOGG, UG_NEXT, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______,
diff --git a/keyboards/fjlabs/midway60/keyboard.json b/keyboards/fjlabs/midway60/keyboard.json
index d05975699b6..98ebcba6498 100644
--- a/keyboards/fjlabs/midway60/keyboard.json
+++ b/keyboards/fjlabs/midway60/keyboard.json
@@ -35,11 +35,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -321,7 +325,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/fjlabs/polaris/keyboard.json b/keyboards/fjlabs/polaris/keyboard.json
index 674cf8484bc..a16b547c8db 100644
--- a/keyboards/fjlabs/polaris/keyboard.json
+++ b/keyboards/fjlabs/polaris/keyboard.json
@@ -35,11 +35,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -323,7 +327,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/fjlabs/sinanjuwk/keyboard.json b/keyboards/fjlabs/sinanjuwk/keyboard.json
index cb1565c6829..66c9f683c05 100644
--- a/keyboards/fjlabs/sinanjuwk/keyboard.json
+++ b/keyboards/fjlabs/sinanjuwk/keyboard.json
@@ -32,13 +32,14 @@
}
},
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift"
+ "LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb"
+ "60_ansi_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_60_ansi": {
@@ -249,7 +250,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/foxlab/leaf60/hotswap/keyboard.json b/keyboards/foxlab/leaf60/hotswap/keyboard.json
index b452fb91e37..55639853e90 100644
--- a/keyboards/foxlab/leaf60/hotswap/keyboard.json
+++ b/keyboards/foxlab/leaf60/hotswap/keyboard.json
@@ -61,8 +61,11 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/foxlab/leaf60/hotswap/keymaps/default/keymap.c b/keyboards/foxlab/leaf60/hotswap/keymaps/default/keymap.c
index 1edc814bab0..b52ab44e8f5 100644
--- a/keyboards/foxlab/leaf60/hotswap/keymaps/default/keymap.c
+++ b/keyboards/foxlab/leaf60/hotswap/keymaps/default/keymap.c
@@ -17,14 +17,14 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT_60_tsangan_hhkb(
+ LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSLS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RCTL),
- LAYOUT_60_tsangan_hhkb(
+ LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
KC_TRNS, BL_TOGG, BL_DOWN,BL_UP, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/geigeigeist/klor/config.h b/keyboards/geigeigeist/klor/config.h
new file mode 100644
index 00000000000..2ece9b3d29e
--- /dev/null
+++ b/keyboards/geigeigeist/klor/config.h
@@ -0,0 +1,17 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#ifdef POINTING_DEVICE_ENABLE
+# define POINTING_DEVICE_SCLK_PIN D0
+# define POINTING_DEVICE_SDIO_PIN D1
+#endif
+
+#ifdef AUDIO_ENABLE
+# define AUDIO_PIN B5
+#endif
+
+#ifdef OLED_ENABLE
+# define OLED_DISPLAY_128X64
+# define OLED_FONT_H "keyboards/geigeigeist/klor/glcdfont.c"
+#endif
diff --git a/keyboards/geigeigeist/klor/glcdfont.c b/keyboards/geigeigeist/klor/glcdfont.c
new file mode 100644
index 00000000000..3bab5d5081e
--- /dev/null
+++ b/keyboards/geigeigeist/klor/glcdfont.c
@@ -0,0 +1,16 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "progmem.h"
+
+static const unsigned char PROGMEM font[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x94, 0xB6, 0xFF, 0xB6, 0x94, 0x00, 0x08, 0x0C, 0x7E, 0x0C, 0x08, 0x00,
+ 0x10, 0x30, 0x7E, 0x30, 0x10, 0x00, 0x08, 0x08, 0x3E, 0x1C, 0x08, 0x00, 0x08, 0x1C, 0x3E, 0x08, 0x08, 0x00, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x14, 0x3E, 0x14, 0x3E, 0x14, 0x00, 0x2E, 0x2A, 0x7F, 0x2A, 0x3A, 0x00, 0x20, 0x12, 0x08, 0x24, 0x02, 0x00, 0x37, 0x49, 0x49, 0x37, 0x50, 0x00, 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x7F, 0x51, 0x49, 0x45, 0x7F, 0x00, 0x08, 0x04, 0x02, 0x7F, 0x00, 0x00,
+ 0x71, 0x49, 0x49, 0x49, 0x4F, 0x00, 0x41, 0x41, 0x49, 0x49, 0x77, 0x00, 0x0F, 0x10, 0x10, 0x10, 0x7F, 0x00, 0x4F, 0x49, 0x49, 0x49, 0x71, 0x00, 0x7E, 0x49, 0x49, 0x49, 0x70, 0x00, 0x01, 0x01, 0x71, 0x09, 0x07, 0x00, 0x77, 0x49, 0x49, 0x49, 0x77, 0x00, 0x07, 0x49, 0x49, 0x49, 0x3F, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x01, 0x01, 0x59, 0x09, 0x0F, 0x00, 0x7F, 0x41, 0x5D, 0x59, 0x4F, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x7F, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x76, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x41, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x7E, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x49, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x09, 0x00, 0x7F, 0x41, 0x41, 0x49, 0x7B, 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x70, 0x40, 0x40, 0x40, 0x7F, 0x00,
+ 0x7F, 0x08, 0x08, 0x08, 0x77, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x7F, 0x01, 0x1F, 0x01, 0x7F, 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x0F, 0x00, 0x7F, 0x41, 0x71, 0x41, 0x7F, 0x00, 0x7F, 0x09, 0x09, 0x19, 0x6F, 0x00, 0x47, 0x49, 0x49, 0x49, 0x79, 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x7F, 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x7F, 0x40, 0x7F, 0x40, 0x7F, 0x00, 0x77, 0x08, 0x08, 0x08, 0x77, 0x00, 0x4F, 0x48, 0x48, 0x48, 0x7F, 0x00, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x60, 0x54, 0x54, 0x54, 0x7C, 0x00, 0x7F, 0x44, 0x44, 0x44, 0x78, 0x00, 0x7C, 0x44, 0x44, 0x44, 0x44, 0x00,
+ 0x78, 0x44, 0x44, 0x44, 0x7F, 0x00, 0x7C, 0x54, 0x54, 0x54, 0x5C, 0x00, 0x08, 0x7F, 0x09, 0x09, 0x09, 0x00, 0x38, 0xA4, 0xA4, 0xA4, 0xFC, 0x00, 0x7F, 0x04, 0x04, 0x04, 0x78, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x70, 0x40, 0x40, 0x7D, 0x00, 0x00, 0x7F, 0x08, 0x08, 0x08, 0x76, 0x00, 0x00, 0x00, 0x7F, 0x40, 0x00, 0x00, 0x7C, 0x04, 0x7C, 0x04, 0x7C, 0x00, 0x7C, 0x04, 0x04, 0x04, 0x78, 0x00, 0x7C, 0x44, 0x44, 0x44, 0x7C, 0x00, 0xFC, 0x24, 0x24, 0x24, 0x38, 0x00, 0x38, 0x24, 0x24, 0x24, 0xFC, 0x00, 0x7C, 0x04, 0x04, 0x04, 0x04, 0x00, 0x5C, 0x54, 0x54, 0x54, 0x74, 0x00, 0x04, 0x04, 0x7F, 0x04, 0x04, 0x00, 0x7C, 0x40, 0x40, 0x40, 0x7C, 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x00, 0x6C, 0x10, 0x10, 0x10, 0x6C, 0x00, 0xBC, 0xA0, 0xA0, 0xA0, 0xFC, 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFE, 0xFF, 0x9F, 0x0F, 0x0F, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x0F, 0x0F, 0x9F, 0xFF, 0xFE, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x10, 0x08, 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x7F, 0x51, 0x55, 0x55, 0x45, 0x7F, 0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00, 0x7F, 0x41, 0x7B, 0x77, 0x41, 0x7F, 0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00, 0x7F, 0x41, 0x5D, 0x5D, 0x5D, 0x7F, 0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00, 0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0,
+ 0xE6, 0xF7, 0xF3, 0xF0, 0x60, 0x00, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0xF8, 0x1C, 0xDE, 0x1F, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, 0x1C, 0xF8, 0x00, 0xC0, 0xE2, 0xB4, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xB4, 0xE2, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x87, 0xE1, 0xF9, 0xF9, 0xE1, 0x87, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x33, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0xC8, 0x08, 0x08, 0x0F,
+ 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x78, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x24, 0x24, 0x12, 0x12, 0x24, 0x24, 0x48, 0x48, 0x24, 0x24, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x3F, 0x3F, 0x7F, 0x7F, 0x38, 0x10, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x0F, 0x14, 0x21, 0x40, 0x45, 0x41, 0x45, 0x40, 0x21, 0x14, 0x0F, 0x00, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x30, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00, 0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x00, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/keyboards/geigeigeist/klor/keyboard.json b/keyboards/geigeigeist/klor/keyboard.json
new file mode 100644
index 00000000000..a61c931dd9e
--- /dev/null
+++ b/keyboards/geigeigeist/klor/keyboard.json
@@ -0,0 +1,167 @@
+{
+ "manufacturer": "Geigeigeist",
+ "keyboard_name": "Klor",
+ "maintainer": "waffle87",
+ "build": {
+ "lto": true
+ },
+ "development_board": "elite_c",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "F5", "pin_b": "F4"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "haptic": true,
+ "mousekey": true,
+ "oled": true,
+ "pointing_device": false,
+ "rgb_matrix": true,
+ "audio": false
+ },
+ "haptic": {
+ "driver": "drv2605l"
+ },
+ "matrix_pins": {
+ "cols": ["F6", "F7", "B1", "B3", "B2", "B6"],
+ "rows": ["C6", "D7", "E6", "B4"]
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "animations": {
+ "alphas_mods": true,
+ "band_sat": true,
+ "band_val": true,
+ "breathing": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true
+ },
+ "layout": [
+ {"matrix": [3, 4], "x": 102, "y": 63, "flags": 1},
+ {"matrix": [3, 3], "x": 89, "y": 54, "flags": 1},
+ {"matrix": [3, 2], "x": 74, "y": 49, "flags": 1},
+ {"matrix": [2, 5], "x": 75, "y": 34, "flags": 4},
+ {"matrix": [1, 5], "x": 75, "y": 21, "flags": 4},
+ {"matrix": [0, 5], "x": 75, "y": 8, "flags": 4},
+ {"matrix": [0, 4], "x": 60, "y": 6, "flags": 4},
+ {"matrix": [1, 4], "x": 60, "y": 19, "flags": 4},
+ {"matrix": [2, 4], "x": 60, "y": 32, "flags": 4},
+ {"matrix": [3, 1], "x": 58, "y": 48, "flags": 1},
+ {"matrix": [2, 3], "x": 46, "y": 25, "flags": 4},
+ {"matrix": [1, 3], "x": 46, "y": 12, "flags": 4},
+ {"matrix": [0, 3], "x": 46, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 29, "y": 7, "flags": 4},
+ {"matrix": [1, 2], "x": 30, "y": 20, "flags": 4},
+ {"matrix": [2, 2], "x": 31, "y": 33, "flags": 4},
+ {"matrix": [2, 1], "x": 17, "y": 42, "flags": 4},
+ {"matrix": [1, 1], "x": 15, "y": 30, "flags": 4},
+ {"matrix": [0, 1], "x": 13, "y": 17, "flags": 4},
+ {"matrix": [1, 0], "x": 0, "y": 28, "flags": 1},
+ {"matrix": [2, 0], "x": 3, "y": 41, "flags": 1},
+ {"matrix": [7, 4], "x": 122, "y": 63, "flags": 1},
+ {"matrix": [7, 3], "x": 135, "y": 54, "flags": 1},
+ {"matrix": [7, 2], "x": 150, "y": 49, "flags": 1},
+ {"matrix": [6, 5], "x": 149, "y": 34, "flags": 4},
+ {"matrix": [5, 5], "x": 149, "y": 21, "flags": 4},
+ {"matrix": [4, 5], "x": 149, "y": 8, "flags": 4},
+ {"matrix": [4, 4], "x": 163, "y": 6, "flags": 4},
+ {"matrix": [5, 4], "x": 163, "y": 19, "flags": 4},
+ {"matrix": [6, 4], "x": 163, "y": 32, "flags": 4},
+ {"matrix": [7, 1], "x": 166, "y": 48, "flags": 1},
+ {"matrix": [6, 3], "x": 178, "y": 25, "flags": 4},
+ {"matrix": [5, 3], "x": 178, "y": 12, "flags": 4},
+ {"matrix": [4, 3], "x": 178, "y": 0, "flags": 4},
+ {"matrix": [4, 2], "x": 195, "y": 7, "flags": 4},
+ {"matrix": [5, 2], "x": 194, "y": 20, "flags": 4},
+ {"matrix": [6, 2], "x": 193, "y": 33, "flags": 4},
+ {"matrix": [4, 1], "x": 206, "y": 42, "flags": 4},
+ {"matrix": [5, 1], "x": 209, "y": 30, "flags": 4},
+ {"matrix": [6, 1], "x": 211, "y": 17, "flags": 4},
+ {"matrix": [5, 0], "x": 224, "y": 28, "flags": 1},
+ {"matrix": [6, 0], "x": 221, "y": 41, "flags": 1}
+ ],
+ "split_count": [21, 21]
+ },
+ "split": {
+ "enabled": true,
+ "encoder": {
+ "right": {
+ "rotary": [
+ {"pin_a": "F4", "pin_b": "F5"}
+ ]
+ }
+ },
+ "serial": {
+ "pin": "D2"
+ },
+ "transport": {
+ "sync": {
+ "oled": true,
+ "matrix_state": true
+ }
+ }
+ },
+ "url": "https://github.com/geigeigeist/klor",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0001",
+ "vid": "0x3A3C"
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "L01", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "L02", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "L03", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "L04", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "L05", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "R00", "matrix": [4, 5], "x": 9, "y": 0},
+ {"label": "R01", "matrix": [4, 4], "x": 10, "y": 0},
+ {"label": "R02", "matrix": [4, 3], "x": 11, "y": 0},
+ {"label": "R03", "matrix": [4, 2], "x": 12, "y": 0},
+ {"label": "R04", "matrix": [4, 1], "x": 13, "y": 0},
+ {"label": "L10", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "L11", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "L12", "matrix": [1, 2], "x": 2, "y": 1},
+ {"label": "L13", "matrix": [1, 3], "x": 3, "y": 1},
+ {"label": "L14", "matrix": [1, 4], "x": 4, "y": 1},
+ {"label": "L15", "matrix": [1, 5], "x": 5, "y": 1},
+ {"label": "R10", "matrix": [5, 5], "x": 9, "y": 1},
+ {"label": "R11", "matrix": [5, 4], "x": 10, "y": 1},
+ {"label": "R12", "matrix": [5, 3], "x": 11, "y": 1},
+ {"label": "R13", "matrix": [5, 2], "x": 12, "y": 1},
+ {"label": "R14", "matrix": [5, 1], "x": 13, "y": 1},
+ {"label": "R15", "matrix": [5, 0], "x": 14, "y": 1},
+ {"label": "L20", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "L21", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "L22", "matrix": [2, 2], "x": 2, "y": 2},
+ {"label": "L23", "matrix": [2, 3], "x": 3, "y": 2},
+ {"label": "L24", "matrix": [2, 4], "x": 4, "y": 2},
+ {"label": "L25", "matrix": [2, 5], "x": 5, "y": 2},
+ {"label": "L35", "matrix": [3, 5], "x": 6, "y": 2},
+ {"label": "R30", "matrix": [7, 5], "x": 8, "y": 2},
+ {"label": "R20", "matrix": [6, 5], "x": 9, "y": 2},
+ {"label": "R21", "matrix": [6, 4], "x": 10, "y": 2},
+ {"label": "R22", "matrix": [6, 3], "x": 11, "y": 2},
+ {"label": "R23", "matrix": [6, 2], "x": 12, "y": 2},
+ {"label": "R24", "matrix": [6, 1], "x": 13, "y": 2},
+ {"label": "R25", "matrix": [6, 0], "x": 14, "y": 2},
+ {"label": "L31", "matrix": [3, 1], "x": 2, "y": 3},
+ {"label": "L32", "matrix": [3, 2], "x": 3, "y": 3},
+ {"label": "L33", "matrix": [3, 3], "x": 4, "y": 3},
+ {"label": "L34", "matrix": [3, 4], "x": 5, "y": 3},
+ {"label": "R31", "matrix": [7, 4], "x": 9, "y": 3},
+ {"label": "R32", "matrix": [7, 3], "x": 10, "y": 3},
+ {"label": "R33", "matrix": [7, 2], "x": 11, "y": 3},
+ {"label": "R34", "matrix": [7, 1], "x": 12, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/geigeigeist/klor/keymaps/default/keymap.json b/keyboards/geigeigeist/klor/keymaps/default/keymap.json
new file mode 100644
index 00000000000..cb9e5b40059
--- /dev/null
+++ b/keyboards/geigeigeist/klor/keymaps/default/keymap.json
@@ -0,0 +1,13 @@
+{
+ "keyboard": "geigeigeist/klor",
+ "keymap": "default",
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P",
+ "KC_TAB", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
+ "KC_DEL", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_MUTE", "KC_MPLY", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT",
+ "KC_LCTL", "KC_TRNS", "KC_SPC", "KC_LALT", "KC_LGUI", "KC_ENT", "KC_TRNS", "KC_BSPC"
+ ]
+ ]
+}
diff --git a/keyboards/geigeigeist/klor/klor.c b/keyboards/geigeigeist/klor/klor.c
new file mode 100644
index 00000000000..5676c974f0e
--- /dev/null
+++ b/keyboards/geigeigeist/klor/klor.c
@@ -0,0 +1,103 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ return OLED_ROTATION_180;
+}
+
+static const char PROGMEM klor_face[] = {
+ // clang-format off
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ // clang-format on
+};
+
+void render_keyboard_status(void) {
+ static const char PROGMEM sep_v[] = {0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0};
+ static const char PROGMEM sep_h1[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
+ static const char PROGMEM sep_h2[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
+ static const char PROGMEM face_1[] = {0x80, 0x81, 0x82, 0x83, 0x84, 0xE1, 0};
+ static const char PROGMEM face_2[] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xE1, 0};
+ static const char PROGMEM os_m_1[] = {0x95, 0x96, 0};
+ static const char PROGMEM os_m_2[] = {0xB5, 0xB6, 0};
+ static const char PROGMEM os_w_1[] = {0x97, 0x98, 0};
+ static const char PROGMEM os_w_2[] = {0xB7, 0xB8, 0};
+ static const char PROGMEM s_lock[] = {0x8F, 0x90, 0};
+ static const char PROGMEM n_lock[] = {0x91, 0x92, 0};
+ static const char PROGMEM c_lock[] = {0x93, 0x94, 0};
+ static const char PROGMEM b_lock[] = {0xE1, 0xE1, 0};
+ static const char PROGMEM hap_en[] = {0xB1, 0xB2, 0};
+# ifdef AUDIO_ENABLE
+ static const char PROGMEM aud_en[] = {0xAF, 0xB0, 0};
+ static const char PROGMEM aud_di[] = {0xCF, 0xD0, 0};
+# endif
+ oled_write_ln_P(sep_v, false);
+ oled_write_P(keymap_config.swap_lctl_lgui ? os_m_1 : os_w_1, false);
+ oled_write_P(sep_h1, false);
+ oled_write_P(face_1, false);
+ oled_write_P(keymap_config.swap_lctl_lgui ? os_m_2 : os_w_2, false);
+ oled_write_P(sep_h1, false);
+ oled_write_P(face_2, false);
+ oled_write_ln_P(sep_v, false);
+
+ led_t led_usb_state = host_keyboard_led_state();
+ oled_write_P(led_usb_state.num_lock ? n_lock : b_lock, false);
+ oled_write_P(led_usb_state.caps_lock ? c_lock : b_lock, false);
+ oled_write_P(led_usb_state.scroll_lock ? s_lock : b_lock, false);
+ oled_write_P(sep_h2, false);
+
+# ifndef AUDIO_ENABLE
+ oled_write_P(b_lock, false);
+# endif
+ oled_write_P(b_lock, false);
+
+# ifdef AUDIO_ENABLE
+ oled_write_P(is_audio_on() ? aud_en : aud_di, false);
+# endif
+ oled_write_P(hap_en, false);
+}
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ if (is_keyboard_master()) {
+ render_keyboard_status();
+ } else {
+ oled_write_raw_P(klor_face, sizeof(klor_face));
+ }
+ return false;
+}
+#endif
diff --git a/keyboards/geigeigeist/klor/readme.md b/keyboards/geigeigeist/klor/readme.md
new file mode 100644
index 00000000000..905dc8c5b39
--- /dev/null
+++ b/keyboards/geigeigeist/klor/readme.md
@@ -0,0 +1,26 @@
+# Klor
+
+
+
+* Keyboard Maintainer: [waffle87](https://github.com/waffle87)
+* Hardware Supported: Klor PCBs w/ Pro-Micro compatible microcontrollers
+* Hardware Availability: [github:geigeigeist/klor](https://github.com/geigeigeist/klor)
+
+**Note**: Audio and Pointing Device features are disabled by default to conserve firmware space on AVR
+
+Make example for this keyboard (after setting up your build environment):
+
+ make geigeigeist/klor:default
+
+Flashing example for this keyboard:
+
+ make geigeigeist/klor: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
+* **Physical reset button**: Briefly press the button on the PCB
diff --git a/keyboards/geigeigeist/klor/rules.mk b/keyboards/geigeigeist/klor/rules.mk
new file mode 100644
index 00000000000..5ff6500c9a8
--- /dev/null
+++ b/keyboards/geigeigeist/klor/rules.mk
@@ -0,0 +1 @@
+POINTING_DEVICE_DRIVER = paw3204
diff --git a/keyboards/geonworks/frogmini/fmh/keyboard.json b/keyboards/geonworks/frogmini/fmh/keyboard.json
index 29c5ee8272c..414aa18e121 100644
--- a/keyboards/geonworks/frogmini/fmh/keyboard.json
+++ b/keyboards/geonworks/frogmini/fmh/keyboard.json
@@ -33,11 +33,16 @@
"processor": "STM32F401",
"bootloader": "stm32-dfu",
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_tsangan_hhkb", "60_ansi_tsangan", "60_hhkb"],
+ "community_layouts": [
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb"
+ ],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/geonworks/frogmini/fmh/keymaps/default/keymap.c b/keyboards/geonworks/frogmini/fmh/keymaps/default/keymap.c
index 4a800e085b1..b4a9e530800 100644
--- a/keyboards/geonworks/frogmini/fmh/keymaps/default/keymap.c
+++ b/keyboards/geonworks/frogmini/fmh/keymaps/default/keymap.c
@@ -16,28 +16,28 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT_60_tsangan_hhkb( /* Base */
+[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift( /* Base */
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
-[1] = LAYOUT_60_tsangan_hhkb(
+[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
-[2] = LAYOUT_60_tsangan_hhkb(
+[2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
-[3] = LAYOUT_60_tsangan_hhkb(
+[3] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/geonworks/frogmini/fms/keyboard.json b/keyboards/geonworks/frogmini/fms/keyboard.json
index 06a9c560473..c34765288bc 100644
--- a/keyboards/geonworks/frogmini/fms/keyboard.json
+++ b/keyboards/geonworks/frogmini/fms/keyboard.json
@@ -37,6 +37,10 @@
},
"processor": "STM32F401",
"bootloader": "stm32-dfu",
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb_10u_space": "LAYOUT_60_ansi_tsangan_split_bs_rshift_10u_space"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -319,7 +323,7 @@
{"matrix": [5, 12], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -591,7 +595,7 @@
{"matrix": [5, 11], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb_10u_space": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift_10u_space": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/geonworks/frogmini/fms/keymaps/default_60_tsangan_hhkb_10u_space/keymap.c b/keyboards/geonworks/frogmini/fms/keymaps/default_60_tsangan_hhkb_10u_space/keymap.c
index db8693a1460..041d458e9b7 100644
--- a/keyboards/geonworks/frogmini/fms/keymaps/default_60_tsangan_hhkb_10u_space/keymap.c
+++ b/keyboards/geonworks/frogmini/fms/keymaps/default_60_tsangan_hhkb_10u_space/keymap.c
@@ -16,28 +16,28 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT_60_tsangan_hhkb_10u_space( /* Base */
+[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift_10u_space( /* Base */
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_SPC, MO(1), KC_RCTL
),
-[1] = LAYOUT_60_tsangan_hhkb_10u_space(
+[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift_10u_space(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
-[2] = LAYOUT_60_tsangan_hhkb_10u_space(
+[2] = LAYOUT_60_ansi_tsangan_split_bs_rshift_10u_space(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
-[3] = LAYOUT_60_tsangan_hhkb_10u_space(
+[3] = LAYOUT_60_ansi_tsangan_split_bs_rshift_10u_space(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/gh60/revc/keyboard.json b/keyboards/gh60/revc/keyboard.json
index ea9794d9d27..4f90f2540cc 100644
--- a/keyboards/gh60/revc/keyboard.json
+++ b/keyboards/gh60/revc/keyboard.json
@@ -33,7 +33,15 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_iso", "60_ansi_split_bs_rshift", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -532,7 +540,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/handwired/fruity60/keyboard.json b/keyboards/handwired/fruity60/keyboard.json
index 728b0c63cbb..7ea84bc052e 100644
--- a/keyboards/handwired/fruity60/keyboard.json
+++ b/keyboards/handwired/fruity60/keyboard.json
@@ -31,9 +31,12 @@
"resync": true
}
},
- "community_layouts": ["60_tsangan_hhkb"],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
+ "community_layouts": ["60_ansi_tsangan_split_bs_rshift"],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/handwired/fruity60/keymaps/default/keymap.c b/keyboards/handwired/fruity60/keymaps/default/keymap.c
index ba748ac23bd..34a3d8a9ad2 100644
--- a/keyboards/handwired/fruity60/keymaps/default/keymap.c
+++ b/keyboards/handwired/fruity60/keymaps/default/keymap.c
@@ -6,7 +6,7 @@ enum layer {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [BASE] = LAYOUT_60_tsangan_hhkb(
+ [BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, 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,
LCTL_T(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_ENT,
@@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL
),
- [FN] = LAYOUT_60_tsangan_hhkb(
+ [FN] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, QK_BOOT,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/handwired/scottokeebs/scotto37/keyboard.json b/keyboards/handwired/scottokeebs/scotto37/keyboard.json
new file mode 100644
index 00000000000..579840e8d14
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto37/keyboard.json
@@ -0,0 +1,69 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "Scotto37",
+ "maintainer": "joe-scotto",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP29", "GP28"],
+ "rows": ["GP22", "GP20", "GP23", "GP21"]
+ },
+ "processor": "RP2040",
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0027",
+ "vid": "0x534B"
+ },
+ "layouts": {
+ "LAYOUT_3x10_7": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/scottokeebs/scotto37/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scotto37/keymaps/default/config.h
new file mode 100644
index 00000000000..8ac58ca23c0
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto37/keymaps/default/config.h
@@ -0,0 +1,22 @@
+/*
+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 .
+*/
+
+#pragma once
+
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
diff --git a/keyboards/handwired/scottokeebs/scotto37/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scotto37/keymaps/default/keymap.c
new file mode 100644
index 00000000000..a5d489f0044
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto37/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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_3x10_7(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
+ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
+ KC_ESC, KC_LCTL, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), KC_ESC
+ ),
+ [1] = LAYOUT_3x10_7(
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
+ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_3x10_7(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_3x10_7(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scotto37/readme.md b/keyboards/handwired/scottokeebs/scotto37/readme.md
new file mode 100644
index 00000000000..a2198e17e30
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scotto37/readme.md
@@ -0,0 +1,29 @@
+# Scotto37
+
+
+
+A 37-key gasket-mounted 0.25u column-staggered keyboard with a 3u spacebar.
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: RP2040 Pro Micro
+* Hardware Availability: [ScottoKeebs](https://scottokeebs.com), [Amazon](https://amazon.com), [AliExpress](https://aliexpress.com)
+
+# Compiling
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/scottokeebs/scotto37:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scotto37:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+# Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/handwired/tenstad/keyboard.json b/keyboards/handwired/tenstad/keyboard.json
new file mode 100644
index 00000000000..1220d3b107f
--- /dev/null
+++ b/keyboards/handwired/tenstad/keyboard.json
@@ -0,0 +1,85 @@
+{
+ "manufacturer": "Amund Tenstad",
+ "keyboard_name": "tenstad",
+ "maintainer": "tenstad",
+ "bootloader": "rp2040",
+ "diode_direction": "ROW2COL",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP15", "GP14"],
+ "rows": ["GP3", "GP4", "GP5", "GP6"]
+ },
+ "processor": "RP2040",
+ "split": {
+ "enabled": true,
+ "serial": {
+ "driver": "vendor"
+ },
+ "transport": {
+ "protocol": "serial"
+ }
+ },
+ "url": "https://github.com/tenstad/keyboard",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT_split_3x6_5": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 1.35},
+ {"matrix": [0, 1], "x": 1, "y": 0.95},
+ {"matrix": [0, 2], "x": 2.35, "y": 0.35},
+ {"matrix": [0, 3], "x": 3.35, "y": 0},
+ {"matrix": [0, 4], "x": 4.65, "y": 0.4},
+ {"matrix": [0, 5], "x": 5.65, "y": 0.4},
+ {"matrix": [4, 5], "x": 12.25, "y": 0.4},
+ {"matrix": [4, 4], "x": 13.25, "y": 0.4},
+ {"matrix": [4, 3], "x": 14.55, "y": 0},
+ {"matrix": [4, 2], "x": 15.55, "y": 0.35},
+ {"matrix": [4, 1], "x": 16.9, "y": 0.95},
+ {"matrix": [4, 0], "x": 17.9, "y": 1.35},
+ {"matrix": [1, 0], "x": 0.1, "y": 2.35},
+ {"matrix": [1, 1], "x": 1.1, "y": 1.95},
+ {"matrix": [1, 2], "x": 2.4, "y": 1.35},
+ {"matrix": [1, 3], "x": 3.4, "y": 1},
+ {"matrix": [1, 4], "x": 4.65, "y": 1.4},
+ {"matrix": [1, 5], "x": 5.65, "y": 1.4},
+ {"matrix": [5, 5], "x": 12.25, "y": 1.4},
+ {"matrix": [5, 4], "x": 13.25, "y": 1.4},
+ {"matrix": [5, 3], "x": 14.5, "y": 1},
+ {"matrix": [5, 2], "x": 15.5, "y": 1.35},
+ {"matrix": [5, 1], "x": 16.8, "y": 1.95},
+ {"matrix": [5, 0], "x": 17.8, "y": 2.35},
+ {"matrix": [2, 0], "x": 0.2, "y": 3.35},
+ {"matrix": [2, 1], "x": 1.2, "y": 2.95},
+ {"matrix": [2, 2], "x": 2.45, "y": 2.35},
+ {"matrix": [2, 3], "x": 3.45, "y": 2},
+ {"matrix": [2, 4], "x": 4.65, "y": 2.4},
+ {"matrix": [2, 5], "x": 5.65, "y": 2.4},
+ {"matrix": [6, 5], "x": 12.25, "y": 2.4},
+ {"matrix": [6, 4], "x": 13.25, "y": 2.4},
+ {"matrix": [6, 3], "x": 14.45, "y": 2},
+ {"matrix": [6, 2], "x": 15.45, "y": 2.35},
+ {"matrix": [6, 1], "x": 16.7, "y": 2.95},
+ {"matrix": [6, 0], "x": 17.7, "y": 3.35},
+ {"matrix": [3, 5], "x": 6.85, "y": 3},
+ {"matrix": [3, 3], "x": 7.95, "y": 3.35},
+ {"matrix": [3, 4], "x": 5.6, "y": 3.95},
+ {"matrix": [3, 1], "x": 6.7, "y": 4.1},
+ {"matrix": [3, 2], "x": 7.8, "y": 4.45},
+ {"matrix": [7, 3], "x": 9.95, "y": 3.35},
+ {"matrix": [7, 5], "x": 11.05, "y": 3},
+ {"matrix": [7, 2], "x": 10.1, "y": 4.45},
+ {"matrix": [7, 1], "x": 11.2, "y": 4.1},
+ {"matrix": [7, 4], "x": 12.3, "y": 3.95}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/tenstad/keymaps/default/keymap.json b/keyboards/handwired/tenstad/keymaps/default/keymap.json
new file mode 100644
index 00000000000..4882e307321
--- /dev/null
+++ b/keyboards/handwired/tenstad/keymaps/default/keymap.json
@@ -0,0 +1,55 @@
+{
+ "keyboard": "handwired/tenstad",
+ "keymap": "default",
+ "layout": "LAYOUT_split_3x6_5",
+ "layers": [
+ [
+ "KC_ESC",
+ "KC_Q",
+ "KC_W",
+ "KC_E",
+ "KC_R",
+ "KC_T",
+ "KC_Y",
+ "KC_U",
+ "KC_I",
+ "KC_O",
+ "KC_P",
+ "KC_RBRC",
+ "KC_TAB",
+ "KC_A",
+ "KC_S",
+ "KC_D",
+ "KC_F",
+ "KC_G",
+ "KC_H",
+ "KC_J",
+ "KC_K",
+ "KC_L",
+ "KC_GRV",
+ "KC_QUOT",
+ "KC_LCTL",
+ "KC_Z",
+ "KC_X",
+ "KC_C",
+ "KC_V",
+ "KC_B",
+ "KC_N",
+ "KC_M",
+ "KC_COMM",
+ "KC_DOT",
+ "KC_MINS",
+ "KC_RSFT",
+ "KC_NO",
+ "KC_NO",
+ "KC_TAB",
+ "KC_NO",
+ "KC_NO",
+ "KC_DEL",
+ "KC_NO",
+ "KC_BSPC",
+ "KC_SPC",
+ "KC_ENT"
+ ]
+ ]
+}
diff --git a/keyboards/handwired/tenstad/readme.md b/keyboards/handwired/tenstad/readme.md
new file mode 100644
index 00000000000..8ed97513303
--- /dev/null
+++ b/keyboards/handwired/tenstad/readme.md
@@ -0,0 +1,19 @@
+# tenstad
+
+
+
+[tenstad/keyboard](https://github.com/tenstad/keyboard) - hand-soldered ergonomic split 3x6 keyboard with 5 thumb keys
+
+* Keyboard Maintainer: [Amund Tenstad](https://github.com/tenstad)
+* Hardware Supported: RP2040 Zero
+* Hardware Availability: [List of Parts](https://github.com/tenstad/keyboard/blob/main/README.md#parts) from [AliExpress](https://aliexpress.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/tenstad:default
+
+Flashing example for this keyboard:
+
+ make handwired/tenstad: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/herevoland/buff75/keyboard.json b/keyboards/herevoland/buff75/keyboard.json
new file mode 100644
index 00000000000..15f3e27ac18
--- /dev/null
+++ b/keyboards/herevoland/buff75/keyboard.json
@@ -0,0 +1,137 @@
+{
+ "keyboard_name": "Buff75",
+ "processor": "STM32F103",
+ "bootloader": "stm32duino",
+ "manufacturer": "HereVoLand",
+ "url": "",
+ "maintainer": "Here VoLand @Vem",
+ "usb": {
+ "vid": "0xB727",
+ "pid": "0xB727",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "rgblight": {
+ "led_count": 1,
+ "brightness_steps": 8,
+ "saturation_steps": 8,
+ "sleep": true,
+ "animations": {
+ "breathing": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "knight": true,
+ "christmas": true,
+ "static_gradient": true,
+ "alternating": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "pin": "B2"
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A8", "B15", "B14", "B13", "B12", "A3", "A4" ],
+ "rows": ["A5", "B10", "B1", "B0", "A7", "A6"]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "matrix": [0,0], "x":0, "y":0},
+ {"label":"F1", "matrix": [0,1], "x":1.5, "y":0},
+ {"label":"F2", "matrix": [0,2], "x":2.5, "y":0},
+ {"label":"F3", "matrix": [0,3], "x":3.5, "y":0},
+ {"label":"F4", "matrix": [0,4], "x":4.5, "y":0},
+ {"label":"F5", "matrix": [0,6], "x":6, "y":0},
+ {"label":"F6", "matrix": [0,7], "x":7, "y":0},
+ {"label":"F7", "matrix": [0,8], "x":8, "y":0},
+ {"label":"F8", "matrix": [0,9], "x":9, "y":0},
+ {"label":"F9", "matrix": [0,10], "x":10.5, "y":0},
+ {"label":"F10", "matrix": [0,11], "x":11.5, "y":0},
+ {"label":"F11", "matrix": [0,12], "x":12.5, "y":0},
+ {"label":"F12", "matrix": [0,13], "x":13.5, "y":0},
+ {"label":"Home", "matrix": [0,14], "x":15, "y":0},
+
+ {"label":"`~", "matrix": [1,0], "x":0, "y":1.25},
+ {"label":"1!", "matrix": [1,1], "x":1, "y":1.25},
+ {"label":"2@", "matrix": [1,2], "x":2, "y":1.25},
+ {"label":"3#", "matrix": [1,3], "x":3, "y":1.25},
+ {"label":"4$", "matrix": [1,4], "x":4, "y":1.25},
+ {"label":"5%", "matrix": [1,5], "x":5, "y":1.25},
+ {"label":"6^", "matrix": [1,6], "x":6, "y":1.25},
+ {"label":"7&", "matrix": [1,7], "x":7, "y":1.25},
+ {"label":"8*", "matrix": [1,8], "x":8, "y":1.25},
+ {"label":"9(", "matrix": [1,9], "x":9, "y":1.25},
+ {"label":"0)", "matrix": [1,10], "x":10, "y":1.25},
+ {"label":"-_", "matrix": [1,11], "x":11, "y":1.25},
+ {"label":"=+", "matrix": [1,12], "x":12, "y":1.25},
+ {"label":"Backspace", "matrix": [1,13], "x":13, "y":1.25},
+ {"label":"Page Up", "matrix": [1,14], "x":15, "y":1.25},
+
+ {"label":"Tab", "matrix": [2,0], "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "matrix": [2,1], "x":1.5, "y":2.25},
+ {"label":"W", "matrix": [2,2], "x":2.5, "y":2.25},
+ {"label":"E", "matrix": [2,3], "x":3.5, "y":2.25},
+ {"label":"R", "matrix": [2,4], "x":4.5, "y":2.25},
+ {"label":"T", "matrix": [2,5], "x":5.5, "y":2.25},
+ {"label":"Y", "matrix": [2,6], "x":6.5, "y":2.25},
+ {"label":"U", "matrix": [2,7], "x":7.5, "y":2.25},
+ {"label":"I", "matrix": [2,8], "x":8.5, "y":2.25},
+ {"label":"O", "matrix": [2,9], "x":9.5, "y":2.25},
+ {"label":"P", "matrix": [2,10], "x":10.5, "y":2.25},
+ {"label":"[", "matrix": [2,11], "x":11.5, "y":2.25},
+ {"label":"]", "matrix": [2,12], "x":12.5, "y":2.25},
+ {"label":"\\", "matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"label":"Page Down", "matrix": [2,14], "x":15, "y":2.25},
+
+ {"label":"Caps Lock", "matrix": [3,0], "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "matrix": [3,1], "x":1.75, "y":3.25},
+ {"label":"S", "matrix": [3,2], "x":2.75, "y":3.25},
+ {"label":"D", "matrix": [3,3], "x":3.75, "y":3.25},
+ {"label":"F", "matrix": [3,4], "x":4.75, "y":3.25},
+ {"label":"G", "matrix": [3,5], "x":5.75, "y":3.25},
+ {"label":"H", "matrix": [3,6], "x":6.75, "y":3.25},
+ {"label":"J", "matrix": [3,7], "x":7.75, "y":3.25},
+ {"label":"K", "matrix": [3,8], "x":8.75, "y":3.25},
+ {"label":"L", "matrix": [3,9], "x":9.75, "y":3.25},
+ {"label":";", "matrix": [3,10], "x":10.75, "y":3.25},
+ {"label":"'", "matrix": [3,11], "x":11.75, "y":3.25},
+ {"label":"Enter", "matrix": [3,13], "x":12.75, "y":3.25, "w":2.25},
+ {"label":"End", "matrix": [3,14], "x":15, "y":3.25},
+
+ {"label":"Shift", "matrix": [4,0], "x":0, "y":4.25, "w":2.25},
+ {"label":"Z", "matrix": [4,2], "x":2.25, "y":4.25},
+ {"label":"X", "matrix": [4,3], "x":3.25, "y":4.25},
+ {"label":"C", "matrix": [4,4], "x":4.25, "y":4.25},
+ {"label":"V", "matrix": [4,5], "x":5.25, "y":4.25},
+ {"label":"B", "matrix": [4,6], "x":6.25, "y":4.25},
+ {"label":"N", "matrix": [4,7], "x":7.25, "y":4.25},
+ {"label":"M", "matrix": [4,8], "x":8.25, "y":4.25},
+ {"label":",", "matrix": [4,9], "x":9.25, "y":4.25},
+ {"label":".", "matrix": [4,10], "x":10.25, "y":4.25},
+ {"label":"/", "matrix": [4,11], "x":11.25, "y":4.25},
+ {"label":"Shift", "matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"label":"Up", "matrix": [4,13], "x":14, "y":4.25},
+ {"label":"End", "matrix": [4,14], "x":15, "y":4.25},
+
+ {"label":"Ctrl", "matrix": [5,0], "x":0, "y":5.25, "w":1.25},
+ {"label":"Win", "matrix": [5,1], "x":1.25, "y":5.25, "w":1.25},
+ {"label":"Alt", "matrix": [5,2], "x":2.5, "y":5.25, "w":1.25},
+ {"label":"Space", "matrix": [5,6], "x":3.75, "y":5.25, "w":6.25},
+ {"label":"Alt", "matrix": [5,10], "x":10, "y":5.25, "w":1.25},
+ {"label":"Fn", "matrix": [5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"label":"Left", "matrix": [5,12], "x":13, "y":5.25},
+ {"label":"Down", "matrix": [5,13], "x":14, "y":5.25},
+ {"label":"Right", "matrix": [5,14], "x":15, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/herevoland/buff75/keymaps/default/keymap.c b/keyboards/herevoland/buff75/keymaps/default/keymap.c
new file mode 100644
index 00000000000..28762b9a17c
--- /dev/null
+++ b/keyboards/herevoland/buff75/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2024 楽(HereVoLand @Vem)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME,
+ KC_GRV, KC_1, KC_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_DEL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/herevoland/buff75/matrix_diagram.md b/keyboards/herevoland/buff75/matrix_diagram.md
new file mode 100644
index 00000000000..35cca7ec06f
--- /dev/null
+++ b/keyboards/herevoland/buff75/matrix_diagram.md
@@ -0,0 +1,18 @@
+# Matrix Diagram for Buff75
+
+```
+ ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┐
+ │00 │ │01 │02 │03 │04 │ │06 │07 │08 │09 │ │0A │0B │0C │0D │ │0E │
+ └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┘
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ │10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬──┼───┤
+ │20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D│2E │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬─────┴──┼───┤
+ │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3E │
+ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ │40 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4E │
+ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴───┴┬─┬───┼───┼───┤
+ │50 │51 │52 │56 │5A │ 5B │ │5C │5D |5E |
+ └────┴────┴────┴────────────────────────┴───┴─────┘ └───┴───┘───┘
+```
diff --git a/keyboards/herevoland/buff75/readme.md b/keyboards/herevoland/buff75/readme.md
new file mode 100644
index 00000000000..b5ce6407d71
--- /dev/null
+++ b/keyboards/herevoland/buff75/readme.md
@@ -0,0 +1,25 @@
+# Buff75
+
+
+An 75%/TenKeyLess sized keyboard with 1 RGB.
+
+* Keyboard Maintainer: [HereVoLand](https://github.com/Vem-596)
+* Hardware Supported: buff75
+* Hardware Availability: [BUFF Customer-Keyboard](https://shop107132374.taobao.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make herevoland/buff75:default
+
+Flashing example for this keyboard:
+
+ make herevoland/buff75: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 which is Escape in this keyboard) and plug in the keyboard
+- **Keycode in layout**: Press the key mapped to `QK_BOOT`
diff --git a/keyboards/hineybush/h60/keyboard.json b/keyboards/hineybush/h60/keyboard.json
index ea058b6d646..b7b24b2626e 100644
--- a/keyboards/hineybush/h60/keyboard.json
+++ b/keyboards/hineybush/h60/keyboard.json
@@ -61,7 +61,15 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_hhkb", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -271,7 +279,7 @@
{"matrix": [4, 11], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/horrortroll/paws60/keyboard.json b/keyboards/horrortroll/paws60/keyboard.json
index ac93b580a08..fb158d57910 100644
--- a/keyboards/horrortroll/paws60/keyboard.json
+++ b/keyboards/horrortroll/paws60/keyboard.json
@@ -27,7 +27,15 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi_split_bs_rshift", "60_ansi", "60_ansi_tsangan", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
@@ -237,7 +245,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/hotdox76v2/hotdox76v2.c b/keyboards/hotdox76v2/hotdox76v2.c
index 3ee58941070..e60777703ee 100644
--- a/keyboards/hotdox76v2/hotdox76v2.c
+++ b/keyboards/hotdox76v2/hotdox76v2.c
@@ -20,12 +20,12 @@ led_config_t g_led_config = {
{ 13, 12, 11, 10, 9, 8, 7 },
{ 0, 1, 2, 3, 4, 5, 6 },
/*right*/
- { NO_LED, 72, 71, 70, 73, 75, 74 },
- { 65, 66, 67, 68, 69, NO_LED, NO_LED },
- { 64, 63, 62, 61, 60, 59, 58 },
- { 52, 53, 54, 55, 56, 57, NO_LED },
- { 51, 50, 49, 48, 47, 46, 45 },
- { 38, 39, 40, 41, 42, 43, 44 }
+ { NO_LED, 77, 76, 75, 78, 80, 79 },
+ { 70, 71, 72, 73, 74, NO_LED, NO_LED },
+ { 69, 68, 67, 66, 65, 64, 63 },
+ { 57, 58, 59, 60, 61, 62, NO_LED },
+ { 56, 55, 54, 53, 52, 51, 50 },
+ { 43, 44, 45, 46, 47, 48, 49 }
},
{
// LED Index to Physical Position
@@ -60,7 +60,7 @@ led_config_t g_led_config = {
#ifdef OLED_ENABLE
-# define UNC (94 + 0x21)
+# define UNC (' ')
typedef struct _master_to_slave_t {
int cur_alp_index;
char current_alp[7];
@@ -115,8 +115,8 @@ void render_layer_helper_fun(uint8_t start_line, const char *data, uint8_t gap_w
for (j = 0; j < l; ++j) { // font index
for (k = 0; k < 12; ++k) { // font byte index
// base + logo_w(32) + gap_w(12) +l*font_w(12)+current_byte_index
- oled_write_raw_byte(pgm_read_byte(&ext_big_font[pgm_read_byte(&data[j]) - 0x21][k]), start_line * 2 * 128 + 32 + gap_w + j * 12 + k);
- oled_write_raw_byte(pgm_read_byte(&ext_big_font[pgm_read_byte(&data[j]) - 0x21][k + 12]), start_line * 2 * 128 + 128 + 32 + gap_w + j * 12 + k);
+ oled_write_raw_byte(pgm_read_byte(&ext_big_font[pgm_read_byte(&data[j]) - 0x20][k]), start_line * 2 * 128 + 32 + gap_w + j * 12 + k);
+ oled_write_raw_byte(pgm_read_byte(&ext_big_font[pgm_read_byte(&data[j]) - 0x20][k + 12]), start_line * 2 * 128 + 128 + 32 + gap_w + j * 12 + k);
}
}
for (j = 0; j < gap_w; ++j) {
@@ -151,8 +151,8 @@ void render_cur_input_helper_fun(uint8_t start_line, const char *data, uint8_t g
for (j = 0; j < l; ++j) { // font index
for (k = 0; k < 12; ++k) { // font byte index
// base + logo_w(0) + gap_w(12) +l*font_w(12)+current_byte_index
- oled_write_raw_byte(pgm_read_byte(&ext_big_font[data[j] - 0x21][k]), start_line * 2 * 128 + gap_w + j * 12 + k);
- oled_write_raw_byte(pgm_read_byte(&ext_big_font[data[j] - 0x21][12 + k]), start_line * 2 * 128 + 128 + gap_w + j * 12 + k);
+ oled_write_raw_byte(pgm_read_byte(&ext_big_font[data[j] - 0x20][k]), start_line * 2 * 128 + gap_w + j * 12 + k);
+ oled_write_raw_byte(pgm_read_byte(&ext_big_font[data[j] - 0x20][12 + k]), start_line * 2 * 128 + 128 + gap_w + j * 12 + k);
}
}
for (j = 0; j < gap_w; ++j) {
diff --git a/keyboards/hotdox76v2/oled_font_lib/ext_font.h b/keyboards/hotdox76v2/oled_font_lib/ext_font.h
index 3d0f524025c..dbcb59ed80e 100644
--- a/keyboards/hotdox76v2/oled_font_lib/ext_font.h
+++ b/keyboards/hotdox76v2/oled_font_lib/ext_font.h
@@ -7,116 +7,116 @@
#include "progmem.h"
/*
- !(0) "(1) #(2) $(3) %(4) &(5) '(6) ((7)
- )(8) *(9) +(10) ,(11) -(12) .(13) /(14) 0(15)
- 1(16) 2(17) 3(18) 4(19) 5(20) 6(21) 7(22) 8(23)
- 9(24) :(25) ;(26) <(27) =(28) >(29) ?(30) @(31)
- A(32) B(33) C(34) D(35) E(36) F(37) G(38) H(39)
- I(40) J(41) K(42) L(43) M(44) N(45) O(46) P(47)
- Q(48) R(49) S(50) T(51) U(52) V(53) W(54) X(55)
- Y(56) Z(57) [(58) \(59) ](60) ^(61) _(62) `(63)
- a(64) b(65) c(66) d(67) e(68) f(69) g(70) h(71)
- i(72) j(73) k(74) l(75) m(76) n(77) o(78) p(79)
- q(80) r(81) s(82) t(83) u(84) v(85) w(86) x(87)
- y(88) z(89) {(90) |(91) }(92) ~(93) (94)
+ (0) !(1) "(2) #(3) $(4) %(5) &(6) '(7) ((8)
+ )(9) *(10) +(11) ,(12) -(13) .(14) /(15) 0(16)
+ 1(17) 2(18) 3(19) 4(20) 5(21) 6(22) 7(23) 8(24)
+ 9(25) :(26) ;(27) <(28) =(29) >(30) ?(31) @(32)
+ A(33) B(34) C(35) D(36) E(37) F(38) G(39) H(40)
+ I(41) J(42) K(43) L(44) M(45) N(46) O(47) P(48)
+ Q(49) R(50) S(51) T(52) U(53) V(54) W(55) X(56)
+ Y(57) Z(58) [(59) \(60) ](61) ^(62) _(63) `(64)
+ a(65) b(66) c(67) d(68) e(69) f(70) g(71) h(72)
+ i(73) j(74) k(75) l(76) m(77) n(78) o(79) p(80)
+ q(81) r(82) s(83) t(84) u(85) v(86) w(87) x(88)
+ y(89) z(90) {(91) |(92) }(93) ~(94)
*/
static const unsigned char ext_big_font[95][24] PROGMEM = {
-{0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x1B,0x1B,0x1B,0x00,0x00,0x00,0x00},/*"!",0*/
-{0x00,0x00,0x00,0x18,0xF8,0x18,0x00,0x18,0xF8,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",1*/
-{0x00,0x00,0x60,0x60,0xFE,0xFE,0x60,0xFE,0xFE,0x60,0x00,0x00,0x00,0x00,0x06,0x7F,0x7F,0x06,0x7F,0x7F,0x06,0x06,0x00,0x00},/*"#",2*/
-{0x00,0x00,0x00,0xF0,0xF8,0x9E,0x9E,0xB8,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0xF9,0xF9,0x1F,0x0F,0x00,0x00,0x00},/*"$",3*/
-{0x00,0x00,0x38,0x44,0xC4,0xC4,0xB8,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x0E,0x11,0x11,0x11,0x0E,0x00,0x00,0x00},/*"%",4*/
-{0x00,0x00,0x60,0xE0,0xB0,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x0E,0x0F,0x19,0x19,0x1B,0x1E,0x0E,0x0F,0x1B,0x00,0x00},/*"&",5*/
-{0x00,0x00,0x00,0x00,0x00,0x18,0xF8,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",6*/
-{0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x3C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x78,0x60,0x00,0x00,0x00},/*"(",7*/
-{0x00,0x00,0x0C,0x3C,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x78,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00},/*")",8*/
-{0x00,0x00,0x30,0xB0,0xF0,0xFC,0xFC,0xF0,0xB0,0x30,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x00},/*"*",9*/
-{0x00,0x80,0x80,0x80,0x80,0xF8,0xF8,0x80,0x80,0x80,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x1F,0x1F,0x01,0x01,0x01,0x01,0x00},/*"+",10*/
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x08,0x00,0x00,0x00,0x00,0x00},/*",",11*/
-{0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00},/*"-",12*/
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00},/*".",13*/
-{0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x78,0x1E,0x06,0x00,0x00,0x00,0x00,0x60,0x78,0x1E,0x07,0x01,0x00,0x00,0x00,0x00,0x00},/*"/",14*/
-{0x00,0x00,0xF0,0xF8,0x1C,0x0C,0x1C,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00},/*"0",15*/
-{0x00,0x00,0x18,0x18,0x18,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00},/*"1",16*/
-{0x00,0x00,0x30,0x38,0x0C,0x0C,0x8C,0xF8,0x70,0x00,0x00,0x00,0x00,0x00,0x18,0x1C,0x1E,0x1B,0x19,0x18,0x18,0x00,0x00,0x00},/*"2",17*/
-{0x00,0x00,0x18,0x1C,0xCC,0xCC,0xCC,0xFC,0x38,0x00,0x00,0x00,0x00,0x0C,0x1C,0x18,0x18,0x18,0x19,0x0F,0x07,0x00,0x00,0x00},/*"3",18*/
-{0x00,0x00,0xC0,0xE0,0x78,0x1C,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x1B,0x1B,0x1F,0x1F,0x1B,0x00,0x00,0x00},/*"4",19*/
-{0x00,0x00,0xFC,0xFC,0xCC,0xCC,0xCC,0x8C,0x00,0x00,0x00,0x00,0x00,0x0C,0x1C,0x18,0x18,0x18,0x18,0x0F,0x07,0x00,0x00,0x00},/*"5",20*/
-{0x00,0x00,0xE0,0xF0,0xB8,0xDC,0xCC,0xCC,0x8C,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x19,0x18,0x18,0x1F,0x0F,0x00,0x00,0x00},/*"6",21*/
-{0x00,0x00,0x1C,0x1C,0x0C,0x0C,0xCC,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1F,0x03,0x00,0x00,0x00,0x00},/*"7",22*/
-{0x00,0x00,0x38,0xFC,0xCC,0xCC,0xCC,0xFC,0x38,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x1F,0x0F,0x00,0x00,0x00},/*"8",23*/
-{0x00,0x00,0xF8,0xFC,0x8C,0x8C,0xCC,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x18,0x19,0x19,0x1D,0x0E,0x07,0x03,0x00,0x00,0x00},/*"9",24*/
-{0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00},/*":",25*/
-{0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x18,0x08,0x00,0x00,0x00,0x00,0x00},/*";",26*/
-{0x00,0x00,0x00,0x80,0x80,0xC0,0x60,0x60,0x30,0x30,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x06,0x0C,0x0C,0x18,0x18,0x00,0x00},/*"<",27*/
-{0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00},/*"=",28*/
-{0x00,0x30,0x30,0x60,0x60,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x0C,0x0C,0x06,0x03,0x03,0x01,0x01,0x00,0x00},/*">",29*/
-{0x00,0x00,0x70,0x78,0x18,0x18,0x98,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x1B,0x01,0x01,0x00,0x00,0x00,0x00},/*"?",30*/
-{0x00,0x00,0xF0,0x08,0xC4,0x24,0x24,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x21,0x22,0x22,0x13,0x00,0x00,0x00,0x00},/*"@",31*/
-{0x00,0x00,0x18,0x98,0xF8,0x38,0x38,0xF0,0x80,0x00,0x00,0x00,0x00,0x18,0x1C,0x1F,0x1B,0x03,0x03,0x1B,0x1F,0x1C,0x18,0x00},/*"A",32*/
-{0x00,0x18,0xF8,0xF8,0x98,0x98,0x98,0xF8,0x70,0x00,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x19,0x19,0x19,0x1F,0x0E,0x00,0x00},/*"B",33*/
-{0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x10,0x78,0x78,0x00,0x00,0x00,0x07,0x0F,0x0C,0x18,0x18,0x18,0x18,0x0C,0x0C,0x00,0x00},/*"C",34*/
-{0x00,0x18,0xF8,0xF8,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,0x18,0x1F,0x1F,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00},/*"D",35*/
-{0x00,0x18,0xF8,0xF8,0x98,0xD8,0xD8,0x18,0x78,0x78,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x1B,0x1B,0x18,0x1E,0x1E,0x00,0x00},/*"E",36*/
-{0x00,0x18,0xF8,0xF8,0x98,0xD8,0xD8,0x18,0x78,0x78,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x1B,0x1B,0x00,0x00,0x00,0x00,0x00},/*"F",37*/
-{0x00,0xE0,0xF0,0x38,0x18,0x18,0x10,0x38,0x38,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x1B,0x1B,0x1F,0x0F,0x03,0x00,0x00},/*"G",38*/
-{0x00,0x18,0xF8,0xF8,0x98,0x80,0x98,0xF8,0xF8,0x18,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x01,0x19,0x1F,0x1F,0x18,0x00,0x00},/*"H",39*/
-{0x00,0x00,0x18,0x18,0x18,0xF8,0xF8,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00},/*"I",40*/
-{0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xF8,0xF8,0x18,0x18,0x00,0x00,0x00,0x0F,0x0F,0x18,0x18,0x18,0x0F,0x0F,0x00,0x00,0x00},/*"J",41*/
-{0x00,0x18,0xF8,0xF8,0x98,0xC0,0x78,0x38,0x18,0x18,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x01,0x07,0x1E,0x18,0x18,0x00,0x00},/*"K",42*/
-{0x00,0x18,0x18,0xF8,0xF8,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x1F,0x1F,0x00,0x00},/*"L",43*/
-{0x18,0xF8,0xF8,0x38,0xE0,0x00,0xE0,0x38,0xF8,0xF8,0x18,0x00,0x18,0x1F,0x1F,0x18,0x19,0x03,0x19,0x18,0x1F,0x1F,0x18,0x00},/*"M",44*/
-{0x00,0x18,0xF8,0xF8,0xF8,0xE0,0x18,0xF8,0xF8,0x18,0x00,0x00,0x00,0x18,0x1F,0x1F,0x18,0x03,0x1F,0x1F,0x1F,0x00,0x00,0x00},/*"N",45*/
-{0x00,0xC0,0xF0,0x30,0x18,0x18,0x18,0x30,0xF0,0xC0,0x00,0x00,0x00,0x03,0x0F,0x0C,0x18,0x18,0x18,0x0C,0x0F,0x03,0x00,0x00},/*"O",46*/
-{0x00,0x18,0xF8,0xF8,0x98,0x98,0x98,0xF8,0xF0,0x00,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x19,0x19,0x01,0x00,0x00,0x00,0x00},/*"P",47*/
-{0x00,0xC0,0xF0,0x30,0x18,0x18,0x18,0x30,0xF0,0xC0,0x00,0x00,0x00,0x03,0x0F,0xCC,0xF8,0x78,0x78,0xCC,0xEF,0x63,0x00,0x00},/*"Q",48*/
-{0x00,0x18,0xF8,0xF8,0x98,0x98,0x98,0xF8,0x70,0x00,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x1B,0x07,0x0E,0x1C,0x18,0x00,0x00},/*"R",49*/
-{0x00,0x00,0x70,0xF8,0x98,0x98,0x90,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x09,0x19,0x19,0x1F,0x0E,0x00,0x00,0x00},/*"S",50*/
-{0x00,0xF8,0xF8,0x18,0x18,0xF8,0xF8,0x18,0x18,0xF8,0xF8,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x1F,0x18,0x18,0x00,0x00,0x00},/*"T",51*/
-{0x00,0x18,0xF8,0xF8,0x18,0x00,0x18,0xF8,0xF8,0x18,0x00,0x00,0x00,0x00,0x07,0x0F,0x18,0x18,0x18,0x0F,0x07,0x00,0x00,0x00},/*"U",52*/
-{0x00,0x18,0x78,0xF8,0x98,0x00,0x98,0xF8,0x78,0x18,0x00,0x00,0x00,0x00,0x00,0x03,0x1F,0x18,0x1F,0x03,0x00,0x00,0x00,0x00},/*"V",53*/
-{0x18,0xF8,0xF8,0x18,0xD8,0xC0,0xD8,0x18,0xF8,0xF8,0x18,0x00,0x00,0x01,0x1F,0x1C,0x1F,0x01,0x1F,0x1C,0x1F,0x01,0x00,0x00},/*"W",54*/
-{0x00,0x18,0x38,0x78,0xD8,0x80,0xD8,0x78,0x38,0x18,0x00,0x00,0x00,0x18,0x1C,0x1E,0x1B,0x01,0x1B,0x1E,0x1C,0x18,0x00,0x00},/*"X",55*/
-{0x00,0x18,0x38,0x78,0xD8,0x80,0x80,0xD8,0x78,0x38,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x1F,0x18,0x18,0x00,0x00,0x00},/*"Y",56*/
-{0x00,0x00,0x78,0x78,0x18,0x98,0xD8,0x78,0x38,0x00,0x00,0x00,0x00,0x00,0x1C,0x1E,0x1B,0x19,0x18,0x1E,0x1E,0x00,0x00,0x00},/*"Z",57*/
-{0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x60,0x60,0x00,0x00,0x00},/*"[",58*/
-{0x00,0x00,0x06,0x1E,0x78,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x1E,0x78,0x60,0x00,0x00},/*"\",59*/
-{0x00,0x00,0x00,0x0C,0x0C,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00},/*"]",60*/
-{0x00,0x00,0x00,0x60,0x70,0x18,0x0C,0x18,0x70,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",61*/
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"_",62*/
-{0x00,0x00,0x00,0x00,0x02,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",63*/
-{0x00,0x00,0x00,0x60,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x0E,0x1F,0x1B,0x1B,0x0B,0x1F,0x1F,0x18,0x00,0x00},/*"a",64*/
-{0x00,0x0C,0xFC,0xFC,0xC0,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x18,0x1F,0x1F,0x0C,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00},/*"b",65*/
-{0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0xC0,0xE0,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x0C,0x00,0x00},/*"c",66*/
-{0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0xCC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x0C,0x1F,0x1F,0x18,0x00},/*"d",67*/
-{0x00,0x00,0x80,0xC0,0x60,0x60,0x60,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x07,0x0F,0x1B,0x1B,0x1B,0x1B,0x1B,0x0B,0x00,0x00},/*"e",68*/
-{0x00,0x00,0x60,0x60,0xF8,0xFC,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00,0x00},/*"f",69*/
-{0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0xC0,0xE0,0xE0,0x60,0x00,0x00,0x00,0x07,0x0F,0xDC,0xD8,0xD8,0xCC,0xFF,0x7F,0x00,0x00},/*"g",70*/
-{0x00,0x0C,0xFC,0xFC,0xC0,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x18,0x1F,0x1F,0x18,0x00,0x00,0x18,0x1F,0x1F,0x18,0x00},/*"h",71*/
-{0x00,0x00,0x00,0x60,0x60,0xEC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00},/*"i",72*/
-{0x00,0x00,0x60,0x60,0x60,0x6C,0x6C,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0x7F,0x00,0x00,0x00},/*"j",73*/
-{0x00,0x00,0x0C,0xFC,0xFC,0x80,0xE0,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x18,0x1F,0x1F,0x03,0x06,0x1C,0x18,0x18,0x00,0x00},/*"k",74*/
-{0x00,0x00,0x00,0x0C,0x0C,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00},/*"l",75*/
-{0x00,0x60,0xE0,0xE0,0x60,0xE0,0xC0,0x60,0xE0,0xC0,0x00,0x00,0x00,0x18,0x1F,0x1F,0x00,0x1F,0x1F,0x00,0x1F,0x1F,0x18,0x00},/*"m",76*/
-{0x00,0x60,0xE0,0xE0,0xC0,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x18,0x1F,0x1F,0x18,0x00,0x00,0x18,0x1F,0x1F,0x18,0x00},/*"n",77*/
-{0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00},/*"o",78*/
-{0x00,0x60,0xE0,0xE0,0xC0,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xCC,0xD8,0x18,0x1C,0x0F,0x07,0x00,0x00},/*"p",79*/
-{0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0xC0,0xE0,0xE0,0x60,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0xD8,0xCC,0xFF,0xFF,0xC0,0x00},/*"q",80*/
-{0x00,0x00,0x60,0x60,0xE0,0xE0,0xC0,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00,0x00},/*"r",81*/
-{0x00,0x00,0xC0,0xE0,0x60,0x60,0x60,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x1D,0x1D,0x1B,0x1B,0x1B,0x1E,0x0E,0x00,0x00,0x00},/*"s",82*/
-{0x00,0x00,0x60,0x60,0xFC,0xFC,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x0C,0x00,0x00},/*"t",83*/
-{0x00,0x60,0xE0,0xE0,0x00,0x00,0x00,0x60,0xE0,0xE0,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x0C,0x1F,0x1F,0x18,0x00},/*"u",84*/
-{0x00,0x60,0xE0,0xE0,0x60,0x00,0x60,0xE0,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x18,0x1F,0x07,0x00,0x00,0x00,0x00},/*"v",85*/
-{0x60,0xE0,0xE0,0x60,0x00,0x80,0x00,0x60,0xE0,0xE0,0x60,0x00,0x00,0x01,0x1F,0x1E,0x07,0x03,0x07,0x1E,0x1F,0x01,0x00,0x00},/*"w",86*/
-{0x00,0x00,0x60,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x60,0x00,0x00,0x00,0x00,0x18,0x1C,0x1F,0x03,0x03,0x1F,0x1C,0x18,0x00,0x00},/*"x",87*/
-{0x00,0x60,0xE0,0xE0,0x60,0x00,0x00,0x60,0xE0,0xE0,0x60,0x00,0x00,0xC0,0xC0,0xC1,0xE7,0xFE,0xDC,0xC7,0x03,0x00,0x00,0x00},/*"y",88*/
-{0x00,0x00,0xE0,0xE0,0x60,0x60,0x60,0xE0,0xE0,0x60,0x00,0x00,0x00,0x00,0x18,0x1C,0x1E,0x1B,0x1B,0x19,0x1C,0x1C,0x00,0x00},/*"z",89*/
-{0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3F,0x7E,0x60,0x00,0x00,0x00,0x00},/*"{",90*/
-{0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00},/*"|",91*/
-{0x00,0x00,0x00,0x00,0x0C,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x7E,0x3F,0x01,0x00,0x00,0x00,0x00},/*"}",92*/
-{0x00,0x00,0x80,0xC0,0xC0,0xC0,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x03,0x03,0x03,0x01,0x00,0x00},/*"~",93*/
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",94*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
+{0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x1B,0x1B,0x1B,0x00,0x00,0x00,0x00},/*"!",1*/
+{0x00,0x00,0x00,0x18,0xF8,0x18,0x00,0x18,0xF8,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
+{0x00,0x00,0x60,0x60,0xFE,0xFE,0x60,0xFE,0xFE,0x60,0x00,0x00,0x00,0x00,0x06,0x7F,0x7F,0x06,0x7F,0x7F,0x06,0x06,0x00,0x00},/*"#",3*/
+{0x00,0x00,0x00,0xF0,0xF8,0x9E,0x9E,0xB8,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0xF9,0xF9,0x1F,0x0F,0x00,0x00,0x00},/*"$",4*/
+{0x00,0x00,0x38,0x44,0xC4,0xC4,0xB8,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x0E,0x11,0x11,0x11,0x0E,0x00,0x00,0x00},/*"%",5*/
+{0x00,0x00,0x60,0xE0,0xB0,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x0E,0x0F,0x19,0x19,0x1B,0x1E,0x0E,0x0F,0x1B,0x00,0x00},/*"&",6*/
+{0x00,0x00,0x00,0x00,0x00,0x18,0xF8,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
+{0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x3C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x78,0x60,0x00,0x00,0x00},/*"(",8*/
+{0x00,0x00,0x0C,0x3C,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x78,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/
+{0x00,0x00,0x30,0xB0,0xF0,0xFC,0xFC,0xF0,0xB0,0x30,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x00},/*"*",10*/
+{0x00,0x80,0x80,0x80,0x80,0xF8,0xF8,0x80,0x80,0x80,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x1F,0x1F,0x01,0x01,0x01,0x01,0x00},/*"+",11*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x08,0x00,0x00,0x00,0x00,0x00},/*",",12*/
+{0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00},/*"-",13*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00},/*".",14*/
+{0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x78,0x1E,0x06,0x00,0x00,0x00,0x00,0x60,0x78,0x1E,0x07,0x01,0x00,0x00,0x00,0x00,0x00},/*"/",15*/
+{0x00,0x00,0xF0,0xF8,0x1C,0x0C,0x1C,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00},/*"0",16*/
+{0x00,0x00,0x18,0x18,0x18,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00},/*"1",17*/
+{0x00,0x00,0x30,0x38,0x0C,0x0C,0x8C,0xF8,0x70,0x00,0x00,0x00,0x00,0x00,0x18,0x1C,0x1E,0x1B,0x19,0x18,0x18,0x00,0x00,0x00},/*"2",18*/
+{0x00,0x00,0x18,0x1C,0xCC,0xCC,0xCC,0xFC,0x38,0x00,0x00,0x00,0x00,0x0C,0x1C,0x18,0x18,0x18,0x19,0x0F,0x07,0x00,0x00,0x00},/*"3",19*/
+{0x00,0x00,0xC0,0xE0,0x78,0x1C,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x1B,0x1B,0x1F,0x1F,0x1B,0x00,0x00,0x00},/*"4",20*/
+{0x00,0x00,0xFC,0xFC,0xCC,0xCC,0xCC,0x8C,0x00,0x00,0x00,0x00,0x00,0x0C,0x1C,0x18,0x18,0x18,0x18,0x0F,0x07,0x00,0x00,0x00},/*"5",21*/
+{0x00,0x00,0xE0,0xF0,0xB8,0xDC,0xCC,0xCC,0x8C,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x19,0x18,0x18,0x1F,0x0F,0x00,0x00,0x00},/*"6",22*/
+{0x00,0x00,0x1C,0x1C,0x0C,0x0C,0xCC,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1F,0x03,0x00,0x00,0x00,0x00},/*"7",23*/
+{0x00,0x00,0x38,0xFC,0xCC,0xCC,0xCC,0xFC,0x38,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x1F,0x0F,0x00,0x00,0x00},/*"8",24*/
+{0x00,0x00,0xF8,0xFC,0x8C,0x8C,0xCC,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x18,0x19,0x19,0x1D,0x0E,0x07,0x03,0x00,0x00,0x00},/*"9",25*/
+{0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00},/*":",26*/
+{0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x18,0x08,0x00,0x00,0x00,0x00,0x00},/*";",27*/
+{0x00,0x00,0x00,0x80,0x80,0xC0,0x60,0x60,0x30,0x30,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x06,0x0C,0x0C,0x18,0x18,0x00,0x00},/*"<",28*/
+{0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00},/*"=",29*/
+{0x00,0x30,0x30,0x60,0x60,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x0C,0x0C,0x06,0x03,0x03,0x01,0x01,0x00,0x00},/*">",30*/
+{0x00,0x00,0x70,0x78,0x18,0x18,0x98,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x1B,0x01,0x01,0x00,0x00,0x00,0x00},/*"?",31*/
+{0x00,0x00,0xF0,0x08,0xC4,0x24,0x24,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x21,0x22,0x22,0x13,0x00,0x00,0x00,0x00},/*"@",32*/
+{0x00,0x00,0x18,0x98,0xF8,0x38,0x38,0xF0,0x80,0x00,0x00,0x00,0x00,0x18,0x1C,0x1F,0x1B,0x03,0x03,0x1B,0x1F,0x1C,0x18,0x00},/*"A",33*/
+{0x00,0x18,0xF8,0xF8,0x98,0x98,0x98,0xF8,0x70,0x00,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x19,0x19,0x19,0x1F,0x0E,0x00,0x00},/*"B",34*/
+{0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x10,0x78,0x78,0x00,0x00,0x00,0x07,0x0F,0x0C,0x18,0x18,0x18,0x18,0x0C,0x0C,0x00,0x00},/*"C",35*/
+{0x00,0x18,0xF8,0xF8,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,0x18,0x1F,0x1F,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00},/*"D",36*/
+{0x00,0x18,0xF8,0xF8,0x98,0xD8,0xD8,0x18,0x78,0x78,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x1B,0x1B,0x18,0x1E,0x1E,0x00,0x00},/*"E",37*/
+{0x00,0x18,0xF8,0xF8,0x98,0xD8,0xD8,0x18,0x78,0x78,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x1B,0x1B,0x00,0x00,0x00,0x00,0x00},/*"F",38*/
+{0x00,0xE0,0xF0,0x38,0x18,0x18,0x10,0x38,0x38,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x1B,0x1B,0x1F,0x0F,0x03,0x00,0x00},/*"G",39*/
+{0x00,0x18,0xF8,0xF8,0x98,0x80,0x98,0xF8,0xF8,0x18,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x01,0x19,0x1F,0x1F,0x18,0x00,0x00},/*"H",40*/
+{0x00,0x00,0x18,0x18,0x18,0xF8,0xF8,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00},/*"I",41*/
+{0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xF8,0xF8,0x18,0x18,0x00,0x00,0x00,0x0F,0x0F,0x18,0x18,0x18,0x0F,0x0F,0x00,0x00,0x00},/*"J",42*/
+{0x00,0x18,0xF8,0xF8,0x98,0xC0,0x78,0x38,0x18,0x18,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x01,0x07,0x1E,0x18,0x18,0x00,0x00},/*"K",43*/
+{0x00,0x18,0x18,0xF8,0xF8,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x1F,0x1F,0x00,0x00},/*"L",44*/
+{0x18,0xF8,0xF8,0x38,0xE0,0x00,0xE0,0x38,0xF8,0xF8,0x18,0x00,0x18,0x1F,0x1F,0x18,0x19,0x03,0x19,0x18,0x1F,0x1F,0x18,0x00},/*"M",45*/
+{0x00,0x18,0xF8,0xF8,0xF8,0xE0,0x18,0xF8,0xF8,0x18,0x00,0x00,0x00,0x18,0x1F,0x1F,0x18,0x03,0x1F,0x1F,0x1F,0x00,0x00,0x00},/*"N",46*/
+{0x00,0xC0,0xF0,0x30,0x18,0x18,0x18,0x30,0xF0,0xC0,0x00,0x00,0x00,0x03,0x0F,0x0C,0x18,0x18,0x18,0x0C,0x0F,0x03,0x00,0x00},/*"O",47*/
+{0x00,0x18,0xF8,0xF8,0x98,0x98,0x98,0xF8,0xF0,0x00,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x19,0x19,0x01,0x00,0x00,0x00,0x00},/*"P",48*/
+{0x00,0xC0,0xF0,0x30,0x18,0x18,0x18,0x30,0xF0,0xC0,0x00,0x00,0x00,0x03,0x0F,0xCC,0xF8,0x78,0x78,0xCC,0xEF,0x63,0x00,0x00},/*"Q",49*/
+{0x00,0x18,0xF8,0xF8,0x98,0x98,0x98,0xF8,0x70,0x00,0x00,0x00,0x00,0x18,0x1F,0x1F,0x19,0x1B,0x07,0x0E,0x1C,0x18,0x00,0x00},/*"R",50*/
+{0x00,0x00,0x70,0xF8,0x98,0x98,0x90,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x09,0x19,0x19,0x1F,0x0E,0x00,0x00,0x00},/*"S",51*/
+{0x00,0xF8,0xF8,0x18,0x18,0xF8,0xF8,0x18,0x18,0xF8,0xF8,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x1F,0x18,0x18,0x00,0x00,0x00},/*"T",52*/
+{0x00,0x18,0xF8,0xF8,0x18,0x00,0x18,0xF8,0xF8,0x18,0x00,0x00,0x00,0x00,0x07,0x0F,0x18,0x18,0x18,0x0F,0x07,0x00,0x00,0x00},/*"U",53*/
+{0x00,0x18,0x78,0xF8,0x98,0x00,0x98,0xF8,0x78,0x18,0x00,0x00,0x00,0x00,0x00,0x03,0x1F,0x18,0x1F,0x03,0x00,0x00,0x00,0x00},/*"V",54*/
+{0x18,0xF8,0xF8,0x18,0xD8,0xC0,0xD8,0x18,0xF8,0xF8,0x18,0x00,0x00,0x01,0x1F,0x1C,0x1F,0x01,0x1F,0x1C,0x1F,0x01,0x00,0x00},/*"W",55*/
+{0x00,0x18,0x38,0x78,0xD8,0x80,0xD8,0x78,0x38,0x18,0x00,0x00,0x00,0x18,0x1C,0x1E,0x1B,0x01,0x1B,0x1E,0x1C,0x18,0x00,0x00},/*"X",56*/
+{0x00,0x18,0x38,0x78,0xD8,0x80,0x80,0xD8,0x78,0x38,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x1F,0x18,0x18,0x00,0x00,0x00},/*"Y",57*/
+{0x00,0x00,0x78,0x78,0x18,0x98,0xD8,0x78,0x38,0x00,0x00,0x00,0x00,0x00,0x1C,0x1E,0x1B,0x19,0x18,0x1E,0x1E,0x00,0x00,0x00},/*"Z",58*/
+{0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x60,0x60,0x00,0x00,0x00},/*"[",59*/
+{0x00,0x00,0x06,0x1E,0x78,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x1E,0x78,0x60,0x00,0x00},/*"\",60*/
+{0x00,0x00,0x00,0x0C,0x0C,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00},/*"]",61*/
+{0x00,0x00,0x00,0x60,0x70,0x18,0x0C,0x18,0x70,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"_",63*/
+{0x00,0x00,0x00,0x00,0x02,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
+{0x00,0x00,0x00,0x60,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x0E,0x1F,0x1B,0x1B,0x0B,0x1F,0x1F,0x18,0x00,0x00},/*"a",65*/
+{0x00,0x0C,0xFC,0xFC,0xC0,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x18,0x1F,0x1F,0x0C,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00},/*"b",66*/
+{0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0xC0,0xE0,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x0C,0x00,0x00},/*"c",67*/
+{0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0xCC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x0C,0x1F,0x1F,0x18,0x00},/*"d",68*/
+{0x00,0x00,0x80,0xC0,0x60,0x60,0x60,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x07,0x0F,0x1B,0x1B,0x1B,0x1B,0x1B,0x0B,0x00,0x00},/*"e",69*/
+{0x00,0x00,0x60,0x60,0xF8,0xFC,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00,0x00},/*"f",70*/
+{0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0xC0,0xE0,0xE0,0x60,0x00,0x00,0x00,0x07,0x0F,0xDC,0xD8,0xD8,0xCC,0xFF,0x7F,0x00,0x00},/*"g",71*/
+{0x00,0x0C,0xFC,0xFC,0xC0,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x18,0x1F,0x1F,0x18,0x00,0x00,0x18,0x1F,0x1F,0x18,0x00},/*"h",72*/
+{0x00,0x00,0x00,0x60,0x60,0xEC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00},/*"i",73*/
+{0x00,0x00,0x60,0x60,0x60,0x6C,0x6C,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0x7F,0x00,0x00,0x00},/*"j",74*/
+{0x00,0x00,0x0C,0xFC,0xFC,0x80,0xE0,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x18,0x1F,0x1F,0x03,0x06,0x1C,0x18,0x18,0x00,0x00},/*"k",75*/
+{0x00,0x00,0x00,0x0C,0x0C,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00},/*"l",76*/
+{0x00,0x60,0xE0,0xE0,0x60,0xE0,0xC0,0x60,0xE0,0xC0,0x00,0x00,0x00,0x18,0x1F,0x1F,0x00,0x1F,0x1F,0x00,0x1F,0x1F,0x18,0x00},/*"m",77*/
+{0x00,0x60,0xE0,0xE0,0xC0,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x18,0x1F,0x1F,0x18,0x00,0x00,0x18,0x1F,0x1F,0x18,0x00},/*"n",78*/
+{0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00},/*"o",79*/
+{0x00,0x60,0xE0,0xE0,0xC0,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xCC,0xD8,0x18,0x1C,0x0F,0x07,0x00,0x00},/*"p",80*/
+{0x00,0x00,0x80,0xC0,0xE0,0x60,0x60,0xC0,0xE0,0xE0,0x60,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0xD8,0xCC,0xFF,0xFF,0xC0,0x00},/*"q",81*/
+{0x00,0x00,0x60,0x60,0xE0,0xE0,0xC0,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x00,0x00,0x00},/*"r",82*/
+{0x00,0x00,0xC0,0xE0,0x60,0x60,0x60,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x1D,0x1D,0x1B,0x1B,0x1B,0x1E,0x0E,0x00,0x00,0x00},/*"s",83*/
+{0x00,0x00,0x60,0x60,0xFC,0xFC,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x0C,0x00,0x00},/*"t",84*/
+{0x00,0x60,0xE0,0xE0,0x00,0x00,0x00,0x60,0xE0,0xE0,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x0C,0x1F,0x1F,0x18,0x00},/*"u",85*/
+{0x00,0x60,0xE0,0xE0,0x60,0x00,0x60,0xE0,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x18,0x1F,0x07,0x00,0x00,0x00,0x00},/*"v",86*/
+{0x60,0xE0,0xE0,0x60,0x00,0x80,0x00,0x60,0xE0,0xE0,0x60,0x00,0x00,0x01,0x1F,0x1E,0x07,0x03,0x07,0x1E,0x1F,0x01,0x00,0x00},/*"w",87*/
+{0x00,0x00,0x60,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x60,0x00,0x00,0x00,0x00,0x18,0x1C,0x1F,0x03,0x03,0x1F,0x1C,0x18,0x00,0x00},/*"x",88*/
+{0x00,0x60,0xE0,0xE0,0x60,0x00,0x00,0x60,0xE0,0xE0,0x60,0x00,0x00,0xC0,0xC0,0xC1,0xE7,0xFE,0xDC,0xC7,0x03,0x00,0x00,0x00},/*"y",89*/
+{0x00,0x00,0xE0,0xE0,0x60,0x60,0x60,0xE0,0xE0,0x60,0x00,0x00,0x00,0x00,0x18,0x1C,0x1E,0x1B,0x1B,0x19,0x1C,0x1C,0x00,0x00},/*"z",90*/
+{0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3F,0x7E,0x60,0x00,0x00,0x00,0x00},/*"{",91*/
+{0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00},/*"|",92*/
+{0x00,0x00,0x00,0x00,0x0C,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x7E,0x3F,0x01,0x00,0x00,0x00,0x00},/*"}",93*/
+{0x00,0x00,0x80,0xC0,0xC0,0xC0,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x03,0x03,0x03,0x01,0x00,0x00},/*"~",94*/
};
static const unsigned char blank_block PROGMEM = 0x00;
diff --git a/keyboards/ibm/model_m/modelh/keyboard.json b/keyboards/ibm/model_m/modelh/keyboard.json
index 513d5d9bb6b..6b9cf20c1d5 100644
--- a/keyboards/ibm/model_m/modelh/keyboard.json
+++ b/keyboards/ibm/model_m/modelh/keyboard.json
@@ -284,6 +284,93 @@
{"matrix": [0, 12], "x": 18.5, "y": 5.5, "w": 2},
{"matrix": [0, 13], "x": 20.5, "y": 5.5}
]
- }
+ },
+ "LAYOUT_wheelwriter_1x_iso": {
+ "layout": [
+ {"matrix": [2, 2], "x": 0, "y": 0},
+
+ {"matrix": [2, 4], "x": 1.25, "y": 0},
+ {"matrix": [3, 4], "x": 2.25, "y": 0},
+ {"matrix": [3, 5], "x": 3.25, "y": 0},
+ {"matrix": [3, 6], "x": 4.25, "y": 0},
+ {"matrix": [3, 7], "x": 5.25, "y": 0},
+ {"matrix": [2, 7], "x": 6.25, "y": 0},
+ {"matrix": [2, 8], "x": 7.25, "y": 0},
+ {"matrix": [3, 8], "x": 8.25, "y": 0},
+ {"matrix": [3, 9], "x": 9.25, "y": 0},
+ {"matrix": [3, 10], "x": 10.25, "y": 0},
+ {"matrix": [3, 11], "x": 11.25, "y": 0},
+ {"matrix": [2, 11], "x": 12.25, "y": 0},
+ {"matrix": [2, 9], "x": 13.25, "y": 0},
+ {"matrix": [2, 12], "x": 14.25, "y": 0, "w": 2},
+
+ {"matrix": [2, 13], "x": 17.5, "y": 0},
+
+ {"matrix": [4, 1], "x": 0, "y": 1},
+
+ {"matrix": [4, 2], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [4, 4], "x": 2.75, "y": 1},
+ {"matrix": [4, 5], "x": 3.75, "y": 1},
+ {"matrix": [4, 6], "x": 4.75, "y": 1},
+ {"matrix": [4, 7], "x": 5.75, "y": 1},
+ {"matrix": [5, 7], "x": 6.75, "y": 1},
+ {"matrix": [5, 8], "x": 7.75, "y": 1},
+ {"matrix": [4, 8], "x": 8.75, "y": 1},
+ {"matrix": [4, 9], "x": 9.75, "y": 1},
+ {"matrix": [4, 10], "x": 10.75, "y": 1},
+ {"matrix": [4, 11], "x": 11.75, "y": 1},
+ {"matrix": [5, 11], "x": 12.75, "y": 1},
+ {"matrix": [5, 9], "x": 13.75, "y": 1},
+
+ {"matrix": [4, 13], "x": 17.5, "y": 1},
+
+ {"matrix": [5, 2], "x": 0, "y": 2},
+
+ {"matrix": [6, 2], "x": 1.25, "y": 2, "w": 1.5},
+ {"matrix": [1, 4], "x": 3, "y": 2},
+ {"matrix": [1, 5], "x": 4, "y": 2},
+ {"matrix": [1, 6], "x": 5, "y": 2},
+ {"matrix": [1, 7], "x": 6, "y": 2},
+ {"matrix": [0, 7], "x": 7, "y": 2},
+ {"matrix": [0, 8], "x": 8, "y": 2},
+ {"matrix": [1, 8], "x": 9, "y": 2},
+ {"matrix": [1, 9], "x": 10, "y": 2},
+ {"matrix": [1, 10], "x": 11, "y": 2},
+ {"matrix": [1, 11], "x": 12, "y": 2},
+ {"matrix": [0, 11], "x": 13, "y": 2},
+ {"matrix": [6, 11], "x": 14, "y": 2},
+ {"matrix": [0, 12], "x": 15, "y": 2, "w": 1.25, "h": 2},
+
+ {"matrix": [1, 13], "x": 17.5, "y": 2},
+
+ {"matrix": [1, 2], "x": 0, "y": 3},
+
+ {"matrix": [7, 3], "x": 1.25, "y": 3, "w": 1.25},
+ {"matrix": [7, 4], "x": 2.5, "y": 3},
+ {"matrix": [6, 4], "x": 3.5, "y": 3},
+ {"matrix": [6, 5], "x": 4.5, "y": 3},
+ {"matrix": [6, 6], "x": 5.5, "y": 3},
+ {"matrix": [6, 7], "x": 6.5, "y": 3},
+ {"matrix": [7, 7], "x": 7.5, "y": 3},
+ {"matrix": [7, 8], "x": 8.5, "y": 3},
+ {"matrix": [6, 8], "x": 9.5, "y": 3},
+ {"matrix": [6, 9], "x": 10.5, "y": 3},
+ {"matrix": [6, 10], "x": 11.5, "y": 3},
+ {"matrix": [7, 11], "x": 12.5, "y": 3},
+ {"matrix": [6, 3], "x": 13.5, "y": 3, "w": 2.75},
+
+ {"matrix": [6, 12], "x": 17.5, "y": 3},
+
+ {"matrix": [0, 1], "x": 0, "y": 4},
+
+ {"matrix": [7, 14], "x": 3.75, "y": 4, "w": 2.5},
+ {"matrix": [7, 1], "x": 6.25, "y": 4, "w": 7.25},
+ {"matrix": [7, 2], "x": 14.75, "y": 4, "w": 1.5},
+
+ {"matrix": [7, 12], "x": 16.5, "y": 4},
+ {"matrix": [0, 13], "x": 17.5, "y": 4},
+ {"matrix": [7, 13], "x": 18.5, "y": 4}
+ ]
+ }
}
}
diff --git a/keyboards/ibm/model_m/modelh/keymaps/wheelwriter_1x_iso/keymap.c b/keyboards/ibm/model_m/modelh/keymaps/wheelwriter_1x_iso/keymap.c
new file mode 100644
index 00000000000..e603de22df9
--- /dev/null
+++ b/keyboards/ibm/model_m/modelh/keymaps/wheelwriter_1x_iso/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2024 Robin Haberkorn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_wheelwriter_1x_iso( /* Base layer */
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
+ KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, MO(1),
+ KC_APP, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_wheelwriter_1x_iso( /* Function key layer */
+ KC_MUTE, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_BRIU,
+ KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BRID,
+ KC_VOLD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_END
+ ),
+};
diff --git a/keyboards/ibm/model_m/modelh/readme.md b/keyboards/ibm/model_m/modelh/readme.md
index bed79619cea..2a59ce99c86 100644
--- a/keyboards/ibm/model_m/modelh/readme.md
+++ b/keyboards/ibm/model_m/modelh/readme.md
@@ -17,4 +17,8 @@ Flashing example for this keyboard:
make ibm/model_m/modelh:default:flash
+For IBM Wheelwriter 10/15/1000 modules (ISO), you can try the `wheelwriter_1x_iso` keymap:
+
+ make ibm/model_m/modelh:wheelwriter_1x_iso
+
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/idb/idb_60/keyboard.json b/keyboards/idb/idb_60/keyboard.json
index 80bbd17a5ae..22ed07b71bc 100644
--- a/keyboards/idb/idb_60/keyboard.json
+++ b/keyboards/idb/idb_60/keyboard.json
@@ -31,7 +31,8 @@
"bootloader": "atmel-dfu",
"layout_aliases": {
"LAYOUT": "LAYOUT_all",
- "LAYOUT_default": "LAYOUT_60_ansi_wkl_split_rshift"
+ "LAYOUT_default": "LAYOUT_60_ansi_wkl_split_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_all": {
@@ -173,7 +174,7 @@
{"matrix": [9, 6], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/idyllic/pizzapad/keyboard.json b/keyboards/idyllic/pizzapad/keyboard.json
new file mode 100644
index 00000000000..638db198227
--- /dev/null
+++ b/keyboards/idyllic/pizzapad/keyboard.json
@@ -0,0 +1,36 @@
+{
+ "manufacturer": "Zykrah",
+ "keyboard_name": "Pizza Pad",
+ "maintainer": "zykrah",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 6
+ },
+ "matrix_pins": {
+ "cols": ["GP1", "GP0", "GP7"],
+ "rows": ["GP6", "GP29", "GP28"]
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x5050",
+ "vid": "0x7A79"
+ },
+ "community_layouts": ["ortho_3x3"],
+ "layouts": {
+ "LAYOUT_ortho_3x3": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/idyllic/pizzapad/keymaps/default/keymap.c b/keyboards/idyllic/pizzapad/keymaps/default/keymap.c
new file mode 100644
index 00000000000..333b33bc0b4
--- /dev/null
+++ b/keyboards/idyllic/pizzapad/keymaps/default/keymap.c
@@ -0,0 +1,12 @@
+// Copyright 2024 Zykrah (@zykrah)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x3(
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6,
+ KC_P1, KC_P2, KC_P3
+ )
+};
diff --git a/keyboards/idyllic/pizzapad/readme.md b/keyboards/idyllic/pizzapad/readme.md
new file mode 100644
index 00000000000..04098cb522d
--- /dev/null
+++ b/keyboards/idyllic/pizzapad/readme.md
@@ -0,0 +1,27 @@
+# Pizza Pad PCB
+
+
+
+A 3x3 PCB designed for the Idyllic Pretty Pad.
+
+* Keyboard Maintainer: Zykrah
+* Hardware Supported: Pizza Pad PCB (using a SEEED XIAO RP2040)
+* Hardware Availability: [Mechstock](https://mechstock.com.au/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make idyllic/pizzapad:default
+
+Flashing example for this keyboard:
+
+ make idyllic/pizzapad: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 both the `BOOT` and `RESET` buttons at the same time
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/illusion/rosa/keyboard.json b/keyboards/illusion/rosa/keyboard.json
index 7fef56841d8..29b7a2124d3 100644
--- a/keyboards/illusion/rosa/keyboard.json
+++ b/keyboards/illusion/rosa/keyboard.json
@@ -33,10 +33,10 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi_tsangan", "60_tsangan_hhkb"],
+ "community_layouts": ["60_ansi_tsangan", "60_ansi_tsangan_split_bs_rshift"],
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_tsangan_hhkb",
- "LAYOUT_60_ansi_tsangan_split_bs_rshift": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_60_ansi_tsangan": {
@@ -176,7 +176,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/inett_studio/sqx/hotswap/keyboard.json b/keyboards/inett_studio/sqx/hotswap/keyboard.json
index 071b38d992a..432112e7f45 100644
--- a/keyboards/inett_studio/sqx/hotswap/keyboard.json
+++ b/keyboards/inett_studio/sqx/hotswap/keyboard.json
@@ -81,9 +81,12 @@
"diode_direction": "ROW2COL",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_tsangan_hhkb"],
+ "community_layouts": ["60_ansi_tsangan_split_bs_rshift"],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/inett_studio/sqx/hotswap/keymaps/default/keymap.c b/keyboards/inett_studio/sqx/hotswap/keymaps/default/keymap.c
index 4c32519ed82..0b552abec9a 100644
--- a/keyboards/inett_studio/sqx/hotswap/keymaps/default/keymap.c
+++ b/keyboards/inett_studio/sqx/hotswap/keymaps/default/keymap.c
@@ -18,14 +18,14 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, 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_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1),KC_RCTL),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,KC_PSCR,
QK_BOOT,RGB_TOG,RGB_MOD,_______, KC_F16, KC_F17,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
_______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME, KC_END,_______,
diff --git a/keyboards/inett_studio/sqx/universal/keyboard.json b/keyboards/inett_studio/sqx/universal/keyboard.json
index d201f391fab..11bb224a0f0 100644
--- a/keyboards/inett_studio/sqx/universal/keyboard.json
+++ b/keyboards/inett_studio/sqx/universal/keyboard.json
@@ -81,7 +81,16 @@
"diode_direction": "ROW2COL",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_hhkb", "60_iso", "60_ansi_split_bs_rshift", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb",
+ "60_iso"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi_tsangan_split_rshift": {
"layout": [
@@ -430,7 +439,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/iriskeyboards/keyboard.json b/keyboards/iriskeyboards/keyboard.json
index 4a821b2649a..200c3a3f6ae 100644
--- a/keyboards/iriskeyboards/keyboard.json
+++ b/keyboards/iriskeyboards/keyboard.json
@@ -33,11 +33,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -319,7 +323,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "`", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/jacky_studio/piggy60/info.json b/keyboards/jacky_studio/piggy60/info.json
index 9f851939162..39cc3fe9eee 100644
--- a/keyboards/jacky_studio/piggy60/info.json
+++ b/keyboards/jacky_studio/piggy60/info.json
@@ -139,7 +139,7 @@
{"label": "Alt", "matrix": [4, 12], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1!", "matrix": [0, 1], "x": 1, "y": 0},
@@ -205,5 +205,8 @@
{"label": "Ctrl", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4}
]
}
+ },
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
}
}
diff --git a/keyboards/jacky_studio/piggy60/keymaps/default/keymap.c b/keyboards/jacky_studio/piggy60/keymaps/default/keymap.c
index d2458a1422c..f3d83c98aed 100644
--- a/keyboards/jacky_studio/piggy60/keymaps/default/keymap.c
+++ b/keyboards/jacky_studio/piggy60/keymaps/default/keymap.c
@@ -23,14 +23,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* │Ctrl │GUI│ Alt │ │ Alt │GUI│ Ctrl│
* └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
*/
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
LT(1,KC_CAPS), KC_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, LT(1,KC_MUTE),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_PSCR,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_PGUP, KC_HOME, KC_TRNS, KC_VOLU, KC_BRIU, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_DEL,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_END, KC_TRNS, KC_VOLD, KC_BRID, KC_TRNS, KC_WH_D, KC_TRNS, KC_TRNS,
diff --git a/keyboards/jacky_studio/piggy60/rev1/hotswap/keyboard.json b/keyboards/jacky_studio/piggy60/rev1/hotswap/keyboard.json
index 8b109207006..71fbbefa0a5 100644
--- a/keyboards/jacky_studio/piggy60/rev1/hotswap/keyboard.json
+++ b/keyboards/jacky_studio/piggy60/rev1/hotswap/keyboard.json
@@ -1,4 +1,4 @@
{
"diode_direction": "ROW2COL",
- "community_layouts": ["60_hhkb", "60_tsangan_hhkb"]
+ "community_layouts": ["60_hhkb", "60_ansi_tsangan_split_bs_rshift"]
}
diff --git a/keyboards/jacky_studio/piggy60/rev1/solder/keyboard.json b/keyboards/jacky_studio/piggy60/rev1/solder/keyboard.json
index 3f4d4a26327..4c792f8ff9c 100644
--- a/keyboards/jacky_studio/piggy60/rev1/solder/keyboard.json
+++ b/keyboards/jacky_studio/piggy60/rev1/solder/keyboard.json
@@ -4,11 +4,11 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan",
- "60_tsangan_hhkb"
],
"layouts": {
"LAYOUT_60_ansi": {
diff --git a/keyboards/jacky_studio/piggy60/rev2/keyboard.json b/keyboards/jacky_studio/piggy60/rev2/keyboard.json
index 2a3c7e3313d..4dcc0cbab6a 100644
--- a/keyboards/jacky_studio/piggy60/rev2/keyboard.json
+++ b/keyboards/jacky_studio/piggy60/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"bootloader": "uf2boot",
"diode_direction": "ROW2COL",
- "community_layouts": ["60_hhkb", "60_tsangan_hhkb"],
"features": {
"bootmagic": true,
"extrakey": true,
@@ -79,6 +78,10 @@
"device_version": "2.0.0",
"pid": "0x1002"
},
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
+ "community_layouts": ["60_hhkb", "60_ansi_tsangan_split_bs_rshift"],
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -213,7 +216,7 @@
{"label": "Alt", "matrix": [4, 12], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1!", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/janus/config.h b/keyboards/janus/config.h
index 2d9cead0e3e..8f28edfb916 100644
--- a/keyboards/janus/config.h
+++ b/keyboards/janus/config.h
@@ -3,8 +3,8 @@
#pragma once
-
-/* Serial communication */
+/* Split keyboard configuration */
+#define EE_HANDS
#define SERIAL_USART_FULL_DUPLEX
#define SERIAL_USART_TX_PIN GP0
#define SERIAL_USART_RX_PIN GP1
diff --git a/keyboards/janus/readme.md b/keyboards/janus/readme.md
index aa9e65cdc49..93b3b00c6fd 100644
--- a/keyboards/janus/readme.md
+++ b/keyboards/janus/readme.md
@@ -18,6 +18,8 @@ Flashing example for this keyboard:
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+If you would like to plug in your keyboard using either half, then set the EEPROM left/right UF2 bootloader parameter when flashing each half for the first time. Refer to [QMK's handedness by EEPROM documentation](https://docs.qmk.fm/features/split_keyboard#handedness-by-eeprom). Without this bootloader parameter, the configuration assumes the left half will be plugged in.
+
## Bootloader
Enter the bootloader in 3 ways:
diff --git a/keyboards/jaykeeb/jk60/keyboard.json b/keyboards/jaykeeb/jk60/keyboard.json
index 99eb3d4a381..3899d90699c 100644
--- a/keyboards/jaykeeb/jk60/keyboard.json
+++ b/keyboards/jaykeeb/jk60/keyboard.json
@@ -27,7 +27,18 @@
"pid": "0x7760",
"vid": "0x414C"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -309,7 +320,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/jaykeeb/jk60rgb/jk60rgb.c b/keyboards/jaykeeb/jk60rgb/jk60rgb.c
new file mode 100644
index 00000000000..53f14b3a444
--- /dev/null
+++ b/keyboards/jaykeeb/jk60rgb/jk60rgb.c
@@ -0,0 +1,29 @@
+/* Copyright 2024 Alabahuy
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifdef RGB_MATRIX_ENABLE
+bool rgb_matrix_indicators_kb(void) {
+ if (!rgb_matrix_indicators_user()) {
+ return false;
+ }
+ if (host_keyboard_led_state().caps_lock) { // Capslock = WHITE
+ rgb_matrix_set_color(36, 255, 255, 255);
+ }
+ return true;
+}
+#endif
diff --git a/keyboards/jaykeeb/jk60rgb/keyboard.json b/keyboards/jaykeeb/jk60rgb/keyboard.json
new file mode 100644
index 00000000000..fd6876d5632
--- /dev/null
+++ b/keyboards/jaykeeb/jk60rgb/keyboard.json
@@ -0,0 +1,238 @@
+{
+ "manufacturer": "Jaykeeb Studio",
+ "keyboard_name": "JK60 RGB",
+ "maintainer": "Alabahuy",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP25", "GP20", "GP7", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0"],
+ "rows": ["GP21", "GP22", "GP23", "GP24", "GP15"]
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP19"
+ },
+ "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},
+ {"matrix": [0, 2], "x": 37, "y": 7, "flags": 4},
+ {"matrix": [0, 3], "x": 52, "y": 7, "flags": 4},
+ {"x": 60, "y": 0, "flags": 2},
+ {"matrix": [0, 4], "x": 67, "y": 7, "flags": 4},
+ {"matrix": [0, 5], "x": 82, "y": 7, "flags": 4},
+ {"matrix": [0, 6], "x": 97, "y": 7, "flags": 4},
+ {"x": 105, "y": 0, "flags": 2},
+ {"matrix": [0, 7], "x": 112, "y": 7, "flags": 4},
+ {"matrix": [0, 8], "x": 127, "y": 7, "flags": 4},
+ {"matrix": [0, 9], "x": 142, "y": 7, "flags": 4},
+ {"x": 150, "y": 0, "flags": 2},
+ {"matrix": [0, 10], "x": 157, "y": 7, "flags": 4},
+ {"matrix": [0, 11], "x": 172, "y": 7, "flags": 4},
+ {"matrix": [0, 12], "x": 187, "y": 7, "flags": 4},
+ {"x": 195, "y": 0, "flags": 2},
+ {"matrix": [0, 13], "x": 201, "y": 7, "flags": 4},
+ {"matrix": [1, 13], "x": 216, "y": 7, "flags": 1},
+ {"x": 224, "y": 13, "flags": 2},
+
+ {"matrix": [2, 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},
+
+ {"matrix": [2, 0], "x": 13, "y": 32, "flags": 8},
+ {"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, 12], "x": 183, "y": 32, "flags": 1},
+
+ {"matrix": [3, 13], "x": 216, "y": 45, "flags": 1},
+ {"matrix": [3, 12], "x": 196, "y": 45, "flags": 4},
+ {"matrix": [3, 11], "x": 175, "y": 45, "flags": 4},
+ {"matrix": [3, 10], "x": 161, "y": 45, "flags": 4},
+ {"matrix": [3, 9], "x": 146, "y": 45, "flags": 4},
+ {"matrix": [3, 8], "x": 135, "y": 45, "flags": 4},
+ {"matrix": [3, 7], "x": 116, "y": 45, "flags": 4},
+ {"matrix": [3, 6], "x": 101, "y": 45, "flags": 4},
+ {"matrix": [3, 5], "x": 86, "y": 45, "flags": 4},
+ {"matrix": [3, 4], "x": 71, "y": 45, "flags": 4},
+ {"matrix": [3, 3], "x": 56, "y": 45, "flags": 4},
+ {"matrix": [3, 2], "x": 41, "y": 45, "flags": 4},
+ {"matrix": [3, 0], "x": 17, "y": 45, "flags": 1},
+
+ {"x": 4, "y": 51, "flags": 2},
+ {"matrix": [4, 0], "x": 11, "y": 57, "flags": 1},
+ {"x": 15, "y": 57, "flags": 2},
+ {"matrix": [4, 1], "x": 28, "y": 57, "flags": 1},
+ {"matrix": [4, 2], "x": 50, "y": 57, "flags": 1},
+ {"x": 72, "y": 57, "flags": 2},
+ {"x": 92, "y": 57, "flags": 2},
+ {"matrix": [4, 7], "x": 112, "y": 57, "flags": 1},
+ {"x": 132, "y": 57, "flags": 2},
+ {"x": 152, "y": 57, "flags": 2},
+ {"matrix": [4, 11], "x": 172, "y": 57, "flags": 1},
+ {"matrix": [4, 12], "x": 194, "y": 57, "flags": 1},
+ {"x": 209, "y": 57, "flags": 2},
+ {"matrix": [4, 13], "x": 213, "y": 57, "flags": 1},
+ {"x": 220, "y": 51, "flags": 2}
+ ]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x7762",
+ "vid": "0x414C"
+ },
+ "community_layouts": [
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layouts": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "Delete", "matrix": [1, 13], "x": 14, "y": 0},
+
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Enter", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": ",", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": ".", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "/", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
+
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"label": "GUI", "matrix": [4, 12], "x": 12.5, "y": 4},
+ {"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/jaykeeb/jk60rgb/keymaps/default/keymap.c b/keyboards/jaykeeb/jk60rgb/keymaps/default/keymap.c
new file mode 100644
index 00000000000..809c0764b4b
--- /dev/null
+++ b/keyboards/jaykeeb/jk60rgb/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2024 Alabahuy
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
+ 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, _______,
+ RM_TOGG, RM_NEXT, RM_HUEU, RM_SATU, RM_VALU, RM_SPDU, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS,
+ _______, RM_PREV, RM_HUED, RM_SATD, RM_VALD, RM_SPDD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, QK_BOOT, _______, _______, _______
+ )
+};
diff --git a/keyboards/jaykeeb/jk60rgb/readme.md b/keyboards/jaykeeb/jk60rgb/readme.md
new file mode 100644
index 00000000000..fa0616c3872
--- /dev/null
+++ b/keyboards/jaykeeb/jk60rgb/readme.md
@@ -0,0 +1,27 @@
+# JK60 RGB
+
+
+
+Layout 60% rgb per keys support keyboard case existing
+
+* Keyboard Maintainer: [Alabahuy](https://github.com/Alabahuy)
+* Hardware Supported: JK60 RGB pcb, RP2040, led sk6812 per switch
+* Hardware Availability: Private GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jaykeeb/jk60rgb:default
+
+Flashing example for this keyboard:
+
+ make jaykeeb/jk60rgb: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/kc60/keyboard.json b/keyboards/kc60/keyboard.json
index 2b2f9c49510..fc214771637 100644
--- a/keyboards/kc60/keyboard.json
+++ b/keyboards/kc60/keyboard.json
@@ -56,7 +56,18 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_hhkb", "60_abnt2", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan"],
+ "community_layouts": [
+ "60_abnt2",
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
+ ],
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -339,7 +350,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/keebfront/vanguard65/config.h b/keyboards/keebfront/vanguard65/config.h
new file mode 100644
index 00000000000..71e47341d9b
--- /dev/null
+++ b/keyboards/keebfront/vanguard65/config.h
@@ -0,0 +1,22 @@
+/*
+Copyright 2022
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* Define MIDI */
+#define MIDI_ADVANCED
+#define SLIDER_PINA D6
diff --git a/keyboards/keebfront/vanguard65/keyboard.json b/keyboards/keebfront/vanguard65/keyboard.json
new file mode 100644
index 00000000000..34d9eca4a57
--- /dev/null
+++ b/keyboards/keebfront/vanguard65/keyboard.json
@@ -0,0 +1,744 @@
+{
+ "manufacturer": "Keebfront",
+ "keyboard_name": "Vanguard65",
+ "maintainer": "Keebfront",
+ "bootloader": "atmel-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "E6", "pin_b": "D4"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "midi": true,
+ "rgblight": true,
+ "mousekey": true,
+ "encoder": true
+ },
+ "matrix_pins": {
+ "cols": ["F0", "B1", "B2", "B3", "B7", "D0", "D1", "D2", "D3", "D5", "D7", "B4", "B5", "B6", "C6"],
+ "rows": ["F4", "F1", "F7", "F6", "F5"]
+ },
+ "processor": "atmega32u4",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "brightness_steps": 12,
+ "led_count": 36
+ },
+ "url": "https://www.keebfront.com",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x1823",
+ "vid": "0x7074"
+ },
+ "ws2812": {
+ "pin": "C7"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [3, 14], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.5, "y": 0},
+ {"matrix": [0, 1], "x": 2.5, "y": 0},
+ {"matrix": [0, 2], "x": 3.5, "y": 0},
+ {"matrix": [0, 3], "x": 4.5, "y": 0},
+ {"matrix": [0, 4], "x": 5.5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 10.5, "y": 0},
+ {"matrix": [0, 10], "x": 11.5, "y": 0},
+ {"matrix": [0, 11], "x": 12.5, "y": 0},
+ {"matrix": [0, 12], "x": 13.5, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0},
+ {"matrix": [2, 13], "x": 15.5, "y": 0},
+ {"matrix": [0, 14], "x": 16.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 3, "y": 1},
+ {"matrix": [1, 2], "x": 4, "y": 1},
+ {"matrix": [1, 3], "x": 5, "y": 1},
+ {"matrix": [1, 4], "x": 6, "y": 1},
+ {"matrix": [1, 5], "x": 7, "y": 1},
+ {"matrix": [1, 6], "x": 8, "y": 1},
+ {"matrix": [1, 7], "x": 9, "y": 1},
+ {"matrix": [1, 8], "x": 10, "y": 1},
+ {"matrix": [1, 9], "x": 11, "y": 1},
+ {"matrix": [1, 10], "x": 12, "y": 1},
+ {"matrix": [1, 11], "x": 13, "y": 1},
+ {"matrix": [1, 12], "x": 14, "y": 1},
+ {"matrix": [1, 13], "x": 15, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 16.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 3.25, "y": 2},
+ {"matrix": [2, 2], "x": 4.25, "y": 2},
+ {"matrix": [2, 3], "x": 5.25, "y": 2},
+ {"matrix": [2, 4], "x": 6.25, "y": 2},
+ {"matrix": [2, 5], "x": 7.25, "y": 2},
+ {"matrix": [2, 6], "x": 8.25, "y": 2},
+ {"matrix": [2, 7], "x": 9.25, "y": 2},
+ {"matrix": [2, 8], "x": 10.25, "y": 2},
+ {"matrix": [2, 9], "x": 11.25, "y": 2},
+ {"matrix": [2, 10], "x": 12.25, "y": 2},
+ {"matrix": [2, 11], "x": 13.25, "y": 2},
+ {"matrix": [2, 12], "x": 14.25, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 16.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 1.5, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 2.75, "y": 3},
+ {"matrix": [3, 2], "x": 3.75, "y": 3},
+ {"matrix": [3, 3], "x": 4.75, "y": 3},
+ {"matrix": [3, 4], "x": 5.75, "y": 3},
+ {"matrix": [3, 5], "x": 6.75, "y": 3},
+ {"matrix": [3, 6], "x": 7.75, "y": 3},
+ {"matrix": [3, 7], "x": 8.75, "y": 3},
+ {"matrix": [3, 8], "x": 9.75, "y": 3},
+ {"matrix": [3, 9], "x": 10.75, "y": 3},
+ {"matrix": [3, 10], "x": 11.75, "y": 3},
+ {"matrix": [3, 11], "x": 12.75, "y": 3},
+ {"matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 1.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 2.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 4, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 5.25, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 11.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 12.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 14.5, "y": 4},
+ {"matrix": [4, 13], "x": 15.5, "y": 4},
+ {"matrix": [4, 14], "x": 16.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_blocker": {
+ "layout": [
+ {"matrix": [3, 14], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.5, "y": 0},
+ {"matrix": [0, 1], "x": 2.5, "y": 0},
+ {"matrix": [0, 2], "x": 3.5, "y": 0},
+ {"matrix": [0, 3], "x": 4.5, "y": 0},
+ {"matrix": [0, 4], "x": 5.5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 10.5, "y": 0},
+ {"matrix": [0, 10], "x": 11.5, "y": 0},
+ {"matrix": [0, 11], "x": 12.5, "y": 0},
+ {"matrix": [0, 12], "x": 13.5, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0, "w": 2},
+ {"matrix": [0, 14], "x": 16.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 3, "y": 1},
+ {"matrix": [1, 2], "x": 4, "y": 1},
+ {"matrix": [1, 3], "x": 5, "y": 1},
+ {"matrix": [1, 4], "x": 6, "y": 1},
+ {"matrix": [1, 5], "x": 7, "y": 1},
+ {"matrix": [1, 6], "x": 8, "y": 1},
+ {"matrix": [1, 7], "x": 9, "y": 1},
+ {"matrix": [1, 8], "x": 10, "y": 1},
+ {"matrix": [1, 9], "x": 11, "y": 1},
+ {"matrix": [1, 10], "x": 12, "y": 1},
+ {"matrix": [1, 11], "x": 13, "y": 1},
+ {"matrix": [1, 12], "x": 14, "y": 1},
+ {"matrix": [1, 13], "x": 15, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 16.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 3.25, "y": 2},
+ {"matrix": [2, 2], "x": 4.25, "y": 2},
+ {"matrix": [2, 3], "x": 5.25, "y": 2},
+ {"matrix": [2, 4], "x": 6.25, "y": 2},
+ {"matrix": [2, 5], "x": 7.25, "y": 2},
+ {"matrix": [2, 6], "x": 8.25, "y": 2},
+ {"matrix": [2, 7], "x": 9.25, "y": 2},
+ {"matrix": [2, 8], "x": 10.25, "y": 2},
+ {"matrix": [2, 9], "x": 11.25, "y": 2},
+ {"matrix": [2, 10], "x": 12.25, "y": 2},
+ {"matrix": [2, 11], "x": 13.25, "y": 2},
+ {"matrix": [2, 12], "x": 14.25, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 16.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 1.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.75, "y": 3},
+ {"matrix": [3, 3], "x": 4.75, "y": 3},
+ {"matrix": [3, 4], "x": 5.75, "y": 3},
+ {"matrix": [3, 5], "x": 6.75, "y": 3},
+ {"matrix": [3, 6], "x": 7.75, "y": 3},
+ {"matrix": [3, 7], "x": 8.75, "y": 3},
+ {"matrix": [3, 8], "x": 9.75, "y": 3},
+ {"matrix": [3, 9], "x": 10.75, "y": 3},
+ {"matrix": [3, 10], "x": 11.75, "y": 3},
+ {"matrix": [3, 11], "x": 12.75, "y": 3},
+ {"matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 1.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 2.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 4, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 5.25, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 11.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 12.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 14.5, "y": 4},
+ {"matrix": [4, 13], "x": 15.5, "y": 4},
+ {"matrix": [4, 14], "x": 16.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_split_bs": {
+ "layout": [
+ {"matrix": [3, 14], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.5, "y": 0},
+ {"matrix": [0, 1], "x": 2.5, "y": 0},
+ {"matrix": [0, 2], "x": 3.5, "y": 0},
+ {"matrix": [0, 3], "x": 4.5, "y": 0},
+ {"matrix": [0, 4], "x": 5.5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 10.5, "y": 0},
+ {"matrix": [0, 10], "x": 11.5, "y": 0},
+ {"matrix": [0, 11], "x": 12.5, "y": 0},
+ {"matrix": [0, 12], "x": 13.5, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0},
+ {"matrix": [2, 13], "x": 15.5, "y": 0},
+ {"matrix": [0, 14], "x": 16.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 3, "y": 1},
+ {"matrix": [1, 2], "x": 4, "y": 1},
+ {"matrix": [1, 3], "x": 5, "y": 1},
+ {"matrix": [1, 4], "x": 6, "y": 1},
+ {"matrix": [1, 5], "x": 7, "y": 1},
+ {"matrix": [1, 6], "x": 8, "y": 1},
+ {"matrix": [1, 7], "x": 9, "y": 1},
+ {"matrix": [1, 8], "x": 10, "y": 1},
+ {"matrix": [1, 9], "x": 11, "y": 1},
+ {"matrix": [1, 10], "x": 12, "y": 1},
+ {"matrix": [1, 11], "x": 13, "y": 1},
+ {"matrix": [1, 12], "x": 14, "y": 1},
+ {"matrix": [1, 13], "x": 15, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 16.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 3.25, "y": 2},
+ {"matrix": [2, 2], "x": 4.25, "y": 2},
+ {"matrix": [2, 3], "x": 5.25, "y": 2},
+ {"matrix": [2, 4], "x": 6.25, "y": 2},
+ {"matrix": [2, 5], "x": 7.25, "y": 2},
+ {"matrix": [2, 6], "x": 8.25, "y": 2},
+ {"matrix": [2, 7], "x": 9.25, "y": 2},
+ {"matrix": [2, 8], "x": 10.25, "y": 2},
+ {"matrix": [2, 9], "x": 11.25, "y": 2},
+ {"matrix": [2, 10], "x": 12.25, "y": 2},
+ {"matrix": [2, 11], "x": 13.25, "y": 2},
+ {"matrix": [2, 12], "x": 14.25, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 16.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 1.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.75, "y": 3},
+ {"matrix": [3, 3], "x": 4.75, "y": 3},
+ {"matrix": [3, 4], "x": 5.75, "y": 3},
+ {"matrix": [3, 5], "x": 6.75, "y": 3},
+ {"matrix": [3, 6], "x": 7.75, "y": 3},
+ {"matrix": [3, 7], "x": 8.75, "y": 3},
+ {"matrix": [3, 8], "x": 9.75, "y": 3},
+ {"matrix": [3, 9], "x": 10.75, "y": 3},
+ {"matrix": [3, 10], "x": 11.75, "y": 3},
+ {"matrix": [3, 11], "x": 12.75, "y": 3},
+ {"matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 1.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 2.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 4, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 5.25, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 11.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 12.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 14.5, "y": 4},
+ {"matrix": [4, 13], "x": 15.5, "y": 4},
+ {"matrix": [4, 14], "x": 16.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_tsangan": {
+ "layout": [
+ {"matrix": [3, 14], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.5, "y": 0},
+ {"matrix": [0, 1], "x": 2.5, "y": 0},
+ {"matrix": [0, 2], "x": 3.5, "y": 0},
+ {"matrix": [0, 3], "x": 4.5, "y": 0},
+ {"matrix": [0, 4], "x": 5.5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 10.5, "y": 0},
+ {"matrix": [0, 10], "x": 11.5, "y": 0},
+ {"matrix": [0, 11], "x": 12.5, "y": 0},
+ {"matrix": [0, 12], "x": 13.5, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0, "w": 2},
+ {"matrix": [0, 14], "x": 16.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 3, "y": 1},
+ {"matrix": [1, 2], "x": 4, "y": 1},
+ {"matrix": [1, 3], "x": 5, "y": 1},
+ {"matrix": [1, 4], "x": 6, "y": 1},
+ {"matrix": [1, 5], "x": 7, "y": 1},
+ {"matrix": [1, 6], "x": 8, "y": 1},
+ {"matrix": [1, 7], "x": 9, "y": 1},
+ {"matrix": [1, 8], "x": 10, "y": 1},
+ {"matrix": [1, 9], "x": 11, "y": 1},
+ {"matrix": [1, 10], "x": 12, "y": 1},
+ {"matrix": [1, 11], "x": 13, "y": 1},
+ {"matrix": [1, 12], "x": 14, "y": 1},
+ {"matrix": [1, 13], "x": 15, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 16.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 3.25, "y": 2},
+ {"matrix": [2, 2], "x": 4.25, "y": 2},
+ {"matrix": [2, 3], "x": 5.25, "y": 2},
+ {"matrix": [2, 4], "x": 6.25, "y": 2},
+ {"matrix": [2, 5], "x": 7.25, "y": 2},
+ {"matrix": [2, 6], "x": 8.25, "y": 2},
+ {"matrix": [2, 7], "x": 9.25, "y": 2},
+ {"matrix": [2, 8], "x": 10.25, "y": 2},
+ {"matrix": [2, 9], "x": 11.25, "y": 2},
+ {"matrix": [2, 10], "x": 12.25, "y": 2},
+ {"matrix": [2, 11], "x": 13.25, "y": 2},
+ {"matrix": [2, 12], "x": 14.25, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 16.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 1.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.75, "y": 3},
+ {"matrix": [3, 3], "x": 4.75, "y": 3},
+ {"matrix": [3, 4], "x": 5.75, "y": 3},
+ {"matrix": [3, 5], "x": 6.75, "y": 3},
+ {"matrix": [3, 6], "x": 7.75, "y": 3},
+ {"matrix": [3, 7], "x": 8.75, "y": 3},
+ {"matrix": [3, 8], "x": 9.75, "y": 3},
+ {"matrix": [3, 9], "x": 10.75, "y": 3},
+ {"matrix": [3, 10], "x": 11.75, "y": 3},
+ {"matrix": [3, 11], "x": 12.75, "y": 3},
+ {"matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 1.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 3, "y": 4},
+ {"matrix": [4, 2], "x": 4, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 5.5, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 14.5, "y": 4},
+ {"matrix": [4, 13], "x": 15.5, "y": 4},
+ {"matrix": [4, 14], "x": 16.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [3, 14], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.5, "y": 0},
+ {"matrix": [0, 1], "x": 2.5, "y": 0},
+ {"matrix": [0, 2], "x": 3.5, "y": 0},
+ {"matrix": [0, 3], "x": 4.5, "y": 0},
+ {"matrix": [0, 4], "x": 5.5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 10.5, "y": 0},
+ {"matrix": [0, 10], "x": 11.5, "y": 0},
+ {"matrix": [0, 11], "x": 12.5, "y": 0},
+ {"matrix": [0, 12], "x": 13.5, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0},
+ {"matrix": [2, 13], "x": 15.5, "y": 0},
+ {"matrix": [0, 14], "x": 16.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 3, "y": 1},
+ {"matrix": [1, 2], "x": 4, "y": 1},
+ {"matrix": [1, 3], "x": 5, "y": 1},
+ {"matrix": [1, 4], "x": 6, "y": 1},
+ {"matrix": [1, 5], "x": 7, "y": 1},
+ {"matrix": [1, 6], "x": 8, "y": 1},
+ {"matrix": [1, 7], "x": 9, "y": 1},
+ {"matrix": [1, 8], "x": 10, "y": 1},
+ {"matrix": [1, 9], "x": 11, "y": 1},
+ {"matrix": [1, 10], "x": 12, "y": 1},
+ {"matrix": [1, 11], "x": 13, "y": 1},
+ {"matrix": [1, 12], "x": 14, "y": 1},
+ {"matrix": [1, 13], "x": 15, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 16.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 3.25, "y": 2},
+ {"matrix": [2, 2], "x": 4.25, "y": 2},
+ {"matrix": [2, 3], "x": 5.25, "y": 2},
+ {"matrix": [2, 4], "x": 6.25, "y": 2},
+ {"matrix": [2, 5], "x": 7.25, "y": 2},
+ {"matrix": [2, 6], "x": 8.25, "y": 2},
+ {"matrix": [2, 7], "x": 9.25, "y": 2},
+ {"matrix": [2, 8], "x": 10.25, "y": 2},
+ {"matrix": [2, 9], "x": 11.25, "y": 2},
+ {"matrix": [2, 10], "x": 12.25, "y": 2},
+ {"matrix": [2, 11], "x": 13.25, "y": 2},
+ {"matrix": [2, 12], "x": 14.25, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 16.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 1.5, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.75, "y": 3},
+ {"matrix": [3, 3], "x": 4.75, "y": 3},
+ {"matrix": [3, 4], "x": 5.75, "y": 3},
+ {"matrix": [3, 5], "x": 6.75, "y": 3},
+ {"matrix": [3, 6], "x": 7.75, "y": 3},
+ {"matrix": [3, 7], "x": 8.75, "y": 3},
+ {"matrix": [3, 8], "x": 9.75, "y": 3},
+ {"matrix": [3, 9], "x": 10.75, "y": 3},
+ {"matrix": [3, 10], "x": 11.75, "y": 3},
+ {"matrix": [3, 11], "x": 12.75, "y": 3},
+ {"matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 1.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 3, "y": 4},
+ {"matrix": [4, 2], "x": 4, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 5.5, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 14.5, "y": 4},
+ {"matrix": [4, 13], "x": 15.5, "y": 4},
+ {"matrix": [4, 14], "x": 16.5, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker": {
+ "layout": [
+ {"matrix": [3, 14], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.5, "y": 0},
+ {"matrix": [0, 1], "x": 2.5, "y": 0},
+ {"matrix": [0, 2], "x": 3.5, "y": 0},
+ {"matrix": [0, 3], "x": 4.5, "y": 0},
+ {"matrix": [0, 4], "x": 5.5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 10.5, "y": 0},
+ {"matrix": [0, 10], "x": 11.5, "y": 0},
+ {"matrix": [0, 11], "x": 12.5, "y": 0},
+ {"matrix": [0, 12], "x": 13.5, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0, "w": 2},
+ {"matrix": [0, 14], "x": 16.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 3, "y": 1},
+ {"matrix": [1, 2], "x": 4, "y": 1},
+ {"matrix": [1, 3], "x": 5, "y": 1},
+ {"matrix": [1, 4], "x": 6, "y": 1},
+ {"matrix": [1, 5], "x": 7, "y": 1},
+ {"matrix": [1, 6], "x": 8, "y": 1},
+ {"matrix": [1, 7], "x": 9, "y": 1},
+ {"matrix": [1, 8], "x": 10, "y": 1},
+ {"matrix": [1, 9], "x": 11, "y": 1},
+ {"matrix": [1, 10], "x": 12, "y": 1},
+ {"matrix": [1, 11], "x": 13, "y": 1},
+ {"matrix": [1, 12], "x": 14, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 3.25, "y": 2},
+ {"matrix": [2, 2], "x": 4.25, "y": 2},
+ {"matrix": [2, 3], "x": 5.25, "y": 2},
+ {"matrix": [2, 4], "x": 6.25, "y": 2},
+ {"matrix": [2, 5], "x": 7.25, "y": 2},
+ {"matrix": [2, 6], "x": 8.25, "y": 2},
+ {"matrix": [2, 7], "x": 9.25, "y": 2},
+ {"matrix": [2, 8], "x": 10.25, "y": 2},
+ {"matrix": [2, 9], "x": 11.25, "y": 2},
+ {"matrix": [2, 10], "x": 12.25, "y": 2},
+ {"matrix": [2, 11], "x": 13.25, "y": 2},
+ {"matrix": [2, 12], "x": 14.25, "y": 2},
+ {"matrix": [1, 13], "x": 15.25, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 16.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 1.5, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 2.75, "y": 3},
+ {"matrix": [3, 2], "x": 3.75, "y": 3},
+ {"matrix": [3, 3], "x": 4.75, "y": 3},
+ {"matrix": [3, 4], "x": 5.75, "y": 3},
+ {"matrix": [3, 5], "x": 6.75, "y": 3},
+ {"matrix": [3, 6], "x": 7.75, "y": 3},
+ {"matrix": [3, 7], "x": 8.75, "y": 3},
+ {"matrix": [3, 8], "x": 9.75, "y": 3},
+ {"matrix": [3, 9], "x": 10.75, "y": 3},
+ {"matrix": [3, 10], "x": 11.75, "y": 3},
+ {"matrix": [3, 11], "x": 12.75, "y": 3},
+ {"matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 1.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 2.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 4, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 5.25, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 11.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 12.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 14.5, "y": 4},
+ {"matrix": [4, 13], "x": 15.5, "y": 4},
+ {"matrix": [4, 14], "x": 16.5, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker_split_bs": {
+ "layout": [
+ {"matrix": [3, 14], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.5, "y": 0},
+ {"matrix": [0, 1], "x": 2.5, "y": 0},
+ {"matrix": [0, 2], "x": 3.5, "y": 0},
+ {"matrix": [0, 3], "x": 4.5, "y": 0},
+ {"matrix": [0, 4], "x": 5.5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 10.5, "y": 0},
+ {"matrix": [0, 10], "x": 11.5, "y": 0},
+ {"matrix": [0, 11], "x": 12.5, "y": 0},
+ {"matrix": [0, 12], "x": 13.5, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0},
+ {"matrix": [2, 13], "x": 15.5, "y": 0},
+ {"matrix": [0, 14], "x": 16.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 3, "y": 1},
+ {"matrix": [1, 2], "x": 4, "y": 1},
+ {"matrix": [1, 3], "x": 5, "y": 1},
+ {"matrix": [1, 4], "x": 6, "y": 1},
+ {"matrix": [1, 5], "x": 7, "y": 1},
+ {"matrix": [1, 6], "x": 8, "y": 1},
+ {"matrix": [1, 7], "x": 9, "y": 1},
+ {"matrix": [1, 8], "x": 10, "y": 1},
+ {"matrix": [1, 9], "x": 11, "y": 1},
+ {"matrix": [1, 10], "x": 12, "y": 1},
+ {"matrix": [1, 11], "x": 13, "y": 1},
+ {"matrix": [1, 12], "x": 14, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 3.25, "y": 2},
+ {"matrix": [2, 2], "x": 4.25, "y": 2},
+ {"matrix": [2, 3], "x": 5.25, "y": 2},
+ {"matrix": [2, 4], "x": 6.25, "y": 2},
+ {"matrix": [2, 5], "x": 7.25, "y": 2},
+ {"matrix": [2, 6], "x": 8.25, "y": 2},
+ {"matrix": [2, 7], "x": 9.25, "y": 2},
+ {"matrix": [2, 8], "x": 10.25, "y": 2},
+ {"matrix": [2, 9], "x": 11.25, "y": 2},
+ {"matrix": [2, 10], "x": 12.25, "y": 2},
+ {"matrix": [2, 11], "x": 13.25, "y": 2},
+ {"matrix": [2, 12], "x": 14.25, "y": 2},
+ {"matrix": [1, 13], "x": 15.25, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 16.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 1.5, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 2.75, "y": 3},
+ {"matrix": [3, 2], "x": 3.75, "y": 3},
+ {"matrix": [3, 3], "x": 4.75, "y": 3},
+ {"matrix": [3, 4], "x": 5.75, "y": 3},
+ {"matrix": [3, 5], "x": 6.75, "y": 3},
+ {"matrix": [3, 6], "x": 7.75, "y": 3},
+ {"matrix": [3, 7], "x": 8.75, "y": 3},
+ {"matrix": [3, 8], "x": 9.75, "y": 3},
+ {"matrix": [3, 9], "x": 10.75, "y": 3},
+ {"matrix": [3, 10], "x": 11.75, "y": 3},
+ {"matrix": [3, 11], "x": 12.75, "y": 3},
+ {"matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 1.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 2.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 4, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 5.25, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 11.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 12.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 14.5, "y": 4},
+ {"matrix": [4, 13], "x": 15.5, "y": 4},
+ {"matrix": [4, 14], "x": 16.5, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker_tsangan": {
+ "layout": [
+ {"matrix": [3, 14], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.5, "y": 0},
+ {"matrix": [0, 1], "x": 2.5, "y": 0},
+ {"matrix": [0, 2], "x": 3.5, "y": 0},
+ {"matrix": [0, 3], "x": 4.5, "y": 0},
+ {"matrix": [0, 4], "x": 5.5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 10.5, "y": 0},
+ {"matrix": [0, 10], "x": 11.5, "y": 0},
+ {"matrix": [0, 11], "x": 12.5, "y": 0},
+ {"matrix": [0, 12], "x": 13.5, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0, "w": 2},
+ {"matrix": [0, 14], "x": 16.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 3, "y": 1},
+ {"matrix": [1, 2], "x": 4, "y": 1},
+ {"matrix": [1, 3], "x": 5, "y": 1},
+ {"matrix": [1, 4], "x": 6, "y": 1},
+ {"matrix": [1, 5], "x": 7, "y": 1},
+ {"matrix": [1, 6], "x": 8, "y": 1},
+ {"matrix": [1, 7], "x": 9, "y": 1},
+ {"matrix": [1, 8], "x": 10, "y": 1},
+ {"matrix": [1, 9], "x": 11, "y": 1},
+ {"matrix": [1, 10], "x": 12, "y": 1},
+ {"matrix": [1, 11], "x": 13, "y": 1},
+ {"matrix": [1, 12], "x": 14, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 3.25, "y": 2},
+ {"matrix": [2, 2], "x": 4.25, "y": 2},
+ {"matrix": [2, 3], "x": 5.25, "y": 2},
+ {"matrix": [2, 4], "x": 6.25, "y": 2},
+ {"matrix": [2, 5], "x": 7.25, "y": 2},
+ {"matrix": [2, 6], "x": 8.25, "y": 2},
+ {"matrix": [2, 7], "x": 9.25, "y": 2},
+ {"matrix": [2, 8], "x": 10.25, "y": 2},
+ {"matrix": [2, 9], "x": 11.25, "y": 2},
+ {"matrix": [2, 10], "x": 12.25, "y": 2},
+ {"matrix": [2, 11], "x": 13.25, "y": 2},
+ {"matrix": [2, 12], "x": 14.25, "y": 2},
+ {"matrix": [1, 13], "x": 15.25, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 16.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 1.5, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 2.75, "y": 3},
+ {"matrix": [3, 2], "x": 3.75, "y": 3},
+ {"matrix": [3, 3], "x": 4.75, "y": 3},
+ {"matrix": [3, 4], "x": 5.75, "y": 3},
+ {"matrix": [3, 5], "x": 6.75, "y": 3},
+ {"matrix": [3, 6], "x": 7.75, "y": 3},
+ {"matrix": [3, 7], "x": 8.75, "y": 3},
+ {"matrix": [3, 8], "x": 9.75, "y": 3},
+ {"matrix": [3, 9], "x": 10.75, "y": 3},
+ {"matrix": [3, 10], "x": 11.75, "y": 3},
+ {"matrix": [3, 11], "x": 12.75, "y": 3},
+ {"matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 1.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 3, "y": 4},
+ {"matrix": [4, 2], "x": 4, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 5.5, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 14.5, "y": 4},
+ {"matrix": [4, 13], "x": 15.5, "y": 4},
+ {"matrix": [4, 14], "x": 16.5, "y": 4}
+ ]
+ },
+ "LAYOUT_iso_blocker_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [3, 14], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.5, "y": 0},
+ {"matrix": [0, 1], "x": 2.5, "y": 0},
+ {"matrix": [0, 2], "x": 3.5, "y": 0},
+ {"matrix": [0, 3], "x": 4.5, "y": 0},
+ {"matrix": [0, 4], "x": 5.5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 10.5, "y": 0},
+ {"matrix": [0, 10], "x": 11.5, "y": 0},
+ {"matrix": [0, 11], "x": 12.5, "y": 0},
+ {"matrix": [0, 12], "x": 13.5, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0},
+ {"matrix": [2, 13], "x": 15.5, "y": 0},
+ {"matrix": [0, 14], "x": 16.75, "y": 0},
+
+ {"matrix": [1, 0], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 3, "y": 1},
+ {"matrix": [1, 2], "x": 4, "y": 1},
+ {"matrix": [1, 3], "x": 5, "y": 1},
+ {"matrix": [1, 4], "x": 6, "y": 1},
+ {"matrix": [1, 5], "x": 7, "y": 1},
+ {"matrix": [1, 6], "x": 8, "y": 1},
+ {"matrix": [1, 7], "x": 9, "y": 1},
+ {"matrix": [1, 8], "x": 10, "y": 1},
+ {"matrix": [1, 9], "x": 11, "y": 1},
+ {"matrix": [1, 10], "x": 12, "y": 1},
+ {"matrix": [1, 11], "x": 13, "y": 1},
+ {"matrix": [1, 12], "x": 14, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1},
+
+ {"matrix": [2, 0], "x": 1.5, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 3.25, "y": 2},
+ {"matrix": [2, 2], "x": 4.25, "y": 2},
+ {"matrix": [2, 3], "x": 5.25, "y": 2},
+ {"matrix": [2, 4], "x": 6.25, "y": 2},
+ {"matrix": [2, 5], "x": 7.25, "y": 2},
+ {"matrix": [2, 6], "x": 8.25, "y": 2},
+ {"matrix": [2, 7], "x": 9.25, "y": 2},
+ {"matrix": [2, 8], "x": 10.25, "y": 2},
+ {"matrix": [2, 9], "x": 11.25, "y": 2},
+ {"matrix": [2, 10], "x": 12.25, "y": 2},
+ {"matrix": [2, 11], "x": 13.25, "y": 2},
+ {"matrix": [2, 12], "x": 14.25, "y": 2},
+ {"matrix": [1, 13], "x": 15.25, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 16.75, "y": 2},
+
+ {"matrix": [3, 0], "x": 1.5, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 2.75, "y": 3},
+ {"matrix": [3, 2], "x": 3.75, "y": 3},
+ {"matrix": [3, 3], "x": 4.75, "y": 3},
+ {"matrix": [3, 4], "x": 5.75, "y": 3},
+ {"matrix": [3, 5], "x": 6.75, "y": 3},
+ {"matrix": [3, 6], "x": 7.75, "y": 3},
+ {"matrix": [3, 7], "x": 8.75, "y": 3},
+ {"matrix": [3, 8], "x": 9.75, "y": 3},
+ {"matrix": [3, 9], "x": 10.75, "y": 3},
+ {"matrix": [3, 10], "x": 11.75, "y": 3},
+ {"matrix": [3, 11], "x": 12.75, "y": 3},
+ {"matrix": [3, 12], "x": 13.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 15.5, "y": 3},
+
+ {"matrix": [4, 0], "x": 1.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 3, "y": 4},
+ {"matrix": [4, 2], "x": 4, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 5.5, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 14.5, "y": 4},
+ {"matrix": [4, 13], "x": 15.5, "y": 4},
+ {"matrix": [4, 14], "x": 16.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keebfront/vanguard65/keymaps/default/keymap.c b/keyboards/keebfront/vanguard65/keymaps/default/keymap.c
new file mode 100644
index 00000000000..3768ba89cc9
--- /dev/null
+++ b/keyboards/keebfront/vanguard65/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+#include "analog.h"
+uint8_t last_val = 0;
+extern MidiDevice midi_device;
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT_all(
+ KC_MUTE, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT_all(
+ _______, QK_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_END,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_PSCR, KC_SCRL, KC_PAUS, QK_BOOT, _______,
+ _______, RGB_SPI, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_LAYER0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_LAYER1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+};
+#endif
+
+void slider(void) {
+ uint8_t current_val = analogReadPin(SLIDER_PINA) >>3;
+
+ if ( last_val - current_val < -1 || last_val - current_val > 1 ) {
+ midi_send_cc(&midi_device, 0, 90, current_val );
+ }
+
+ last_val = current_val;
+}
+
+void housekeeping_task_user(void) {
+ slider();
+}
diff --git a/keyboards/keebfront/vanguard65/keymaps/default/rules.mk b/keyboards/keebfront/vanguard65/keymaps/default/rules.mk
new file mode 100644
index 00000000000..a0aef8b6e78
--- /dev/null
+++ b/keyboards/keebfront/vanguard65/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
+ENCODER_MAP_ENABLE = yes
+ANALOG_DRIVER_REQUIRED = yes
diff --git a/keyboards/keebfront/vanguard65/readme.md b/keyboards/keebfront/vanguard65/readme.md
new file mode 100644
index 00000000000..d054271bb3c
--- /dev/null
+++ b/keyboards/keebfront/vanguard65/readme.md
@@ -0,0 +1,29 @@
+# Vanguard65
+
+
+
+*A 65% keyboard with knob and slider by [Keebfront](https://keebfront.com/).*
+
+* Keyboard Maintainer: [Keebfront](https://keebfront.com/)
+* Hardware Supported: Vanguard65
+* Hardware Availability: https://www.keebfront.com/product/vanguard65
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keebfront/vanguard65:default
+
+Flashing example for this keyboard:
+
+ make keebfront/vanguard65:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset**: pressing the two reset pads on the back of the PCB with tweezers.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
+
+## Matrix Diagram
+
\ No newline at end of file
diff --git a/keyboards/keebfront/vanguard65/rules.mk b/keyboards/keebfront/vanguard65/rules.mk
new file mode 100644
index 00000000000..3437a35bdf1
--- /dev/null
+++ b/keyboards/keebfront/vanguard65/rules.mk
@@ -0,0 +1,2 @@
+# Processor frequency
+F_CPU = 8000000
diff --git a/keyboards/keebio/iris_lm/g1/config.h b/keyboards/keebio/iris_lm/g1/config.h
new file mode 100644
index 00000000000..952033edf10
--- /dev/null
+++ b/keyboards/keebio/iris_lm/g1/config.h
@@ -0,0 +1,26 @@
+// Copyright 2024 Danny Nguyen (@nooges)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Defines for the split keyboard setup */
+#define SERIAL_USART_DRIVER SD3 // USART 3
+#define SERIAL_USART_TX_PIN B10
+#define SERIAL_USART_RX_PIN B11
+#define SERIAL_USART_TX_PAL_MODE 7
+#define SERIAL_USART_RX_PAL_MODE 7
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_PIN_SWAP
+
+#define USB_VBUS_PIN C6
+#define SPLIT_HAND_PIN A0
+
+/* Defines for the RGB matrix */
+#ifdef RGB_MATRIX_ENABLE
+# define WS2812_PWM_DRIVER PWMD3
+# define WS2812_PWM_CHANNEL 4
+# define WS2812_PWM_PAL_MODE 10
+# define WS2812_DMA_STREAM STM32_DMA1_STREAM2
+# define WS2812_DMA_CHANNEL 2
+# define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP
+#endif
diff --git a/keyboards/keebio/iris_lm/g1/g1.c b/keyboards/keebio/iris_lm/g1/g1.c
new file mode 100644
index 00000000000..7843a900a3f
--- /dev/null
+++ b/keyboards/keebio/iris_lm/g1/g1.c
@@ -0,0 +1,11 @@
+// Copyright 2024 Danny Nguyen (@nooges)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+void keyboard_pre_init_kb(void) {
+ // Disable the PD peripheral in pre-init because its pins (B4, B6) are being used in the matrix:
+ PWR->CR3 |= PWR_CR3_UCPD_DBDIS;
+ // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions)
+ keyboard_pre_init_user();
+}
diff --git a/keyboards/keebio/iris_lm/g1/halconf.h b/keyboards/keebio/iris_lm/g1/halconf.h
new file mode 100644
index 00000000000..45321a55bc8
--- /dev/null
+++ b/keyboards/keebio/iris_lm/g1/halconf.h
@@ -0,0 +1,10 @@
+// Copyright 2024 Danny Nguyen (@nooges)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SERIAL TRUE
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/keebio/iris_lm/g1/keyboard.json b/keyboards/keebio/iris_lm/g1/keyboard.json
new file mode 100644
index 00000000000..6aca0c9bacd
--- /dev/null
+++ b/keyboards/keebio/iris_lm/g1/keyboard.json
@@ -0,0 +1,257 @@
+{
+ "keyboard_name": "Iris LM-G Rev. 1",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true
+ },
+ "encoder": {
+ "rotary": [
+ {"pin_a": "A15", "pin_b": "C10"},
+ {"pin_a": "B13", "pin_b": "B12"}
+ ]
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B7"
+ },
+ "matrix_pins": {
+ "cols": ["C4", "B2", "A5", "C11", "C13", "C14"],
+ "rows": ["A4", "A3", "B14", "B5", "F1"]
+ },
+ "split": {
+ "enabled": true,
+ "encoder": {
+ "right": {
+ "rotary": [
+ {"pin_a": "A5", "pin_b": "A6"},
+ {"pin_a": "A15", "pin_b": "C10"}
+ ]
+ }
+ },
+ "matrix_pins": {
+ "right": {
+ "cols": ["C11", "C13", "B6", "B9", "B12", "B2"],
+ "rows": ["C4", "A7", "B14", "B5", "F1"]
+ }
+ },
+ "serial": {
+ "driver": "usart"
+ },
+ "transport": {
+ "sync" :{
+ "matrix_state": true
+ }
+ }
+ },
+ "processor": "STM32G431",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1656"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.375},
+ {"matrix": [0, 1], "x": 1, "y": 0.375},
+ {"matrix": [0, 2], "x": 2, "y": 0.125},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.125},
+ {"matrix": [0, 5], "x": 5, "y": 0.25},
+
+ {"matrix": [5, 5], "x": 9, "y": 0.25},
+ {"matrix": [5, 4], "x": 10, "y": 0.125},
+ {"matrix": [5, 3], "x": 11, "y": 0},
+ {"matrix": [5, 2], "x": 12, "y": 0.125},
+ {"matrix": [5, 1], "x": 13, "y": 0.375},
+ {"matrix": [5, 0], "x": 14, "y": 0.375},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.375},
+ {"matrix": [1, 1], "x": 1, "y": 1.375},
+ {"matrix": [1, 2], "x": 2, "y": 1.125},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.125},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+
+ {"matrix": [6, 5], "x": 9, "y": 1.25},
+ {"matrix": [6, 4], "x": 10, "y": 1.125},
+ {"matrix": [6, 3], "x": 11, "y": 1},
+ {"matrix": [6, 2], "x": 12, "y": 1.125},
+ {"matrix": [6, 1], "x": 13, "y": 1.375},
+ {"matrix": [6, 0], "x": 14, "y": 1.375},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.375},
+ {"matrix": [2, 1], "x": 1, "y": 2.375},
+ {"matrix": [2, 2], "x": 2, "y": 2.125},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.125},
+ {"matrix": [2, 5], "x": 5, "y": 2.25},
+
+ {"matrix": [7, 5], "x": 9, "y": 2.25},
+ {"matrix": [7, 4], "x": 10, "y": 2.125},
+ {"matrix": [7, 3], "x": 11, "y": 2},
+ {"matrix": [7, 2], "x": 12, "y": 2.125},
+ {"matrix": [7, 1], "x": 13, "y": 2.375},
+ {"matrix": [7, 0], "x": 14, "y": 2.375},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.375},
+ {"matrix": [3, 1], "x": 1, "y": 3.375},
+ {"matrix": [3, 2], "x": 2, "y": 3.125},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3.125},
+ {"matrix": [3, 5], "x": 5, "y": 3.25},
+ {"matrix": [4, 5], "x": 6.15, "y": 3.75},
+
+ {"matrix": [9, 5], "x": 7.85, "y": 3.75},
+ {"matrix": [8, 5], "x": 9, "y": 3.25},
+ {"matrix": [8, 4], "x": 10, "y": 3.125},
+ {"matrix": [8, 3], "x": 11, "y": 3},
+ {"matrix": [8, 2], "x": 12, "y": 3.125},
+ {"matrix": [8, 1], "x": 13, "y": 3.375},
+ {"matrix": [8, 0], "x": 14, "y": 3.375},
+
+ {"matrix": [4, 2], "x": 3.5, "y": 4.25},
+ {"matrix": [4, 3], "x": 4.5, "y": 4.375},
+ {"matrix": [4, 4], "x": 5.6, "y": 4.75},
+
+ {"matrix": [9, 4], "x": 8.4, "y": 4.75},
+ {"matrix": [9, 3], "x": 9.5, "y": 4.375},
+ {"matrix": [9, 2], "x": 10.5, "y": 4.25}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "ws2812",
+ "split_count": [34, 34],
+ "max_brightness": 120,
+ "layout": [
+ {"matrix": [0,0], "flags":4, "x":0, "y":5},
+ {"flags":2, "x":8, "y":5},
+ {"matrix": [0,1], "flags":4, "x":16, "y":5},
+ {"matrix": [0,2], "flags":4, "x":32, "y":2},
+ {"flags":2, "x":40, "y":1},
+ {"matrix": [0,3], "flags":4, "x":48, "y":0},
+ {"matrix": [0,4], "flags":4, "x":64, "y":5},
+ {"flags":2, "x":72, "y":3},
+ {"matrix": [0,5], "flags":4, "x":80, "y":3},
+
+ {"matrix": [1,5], "flags":4, "x":80, "y":17},
+ {"matrix": [1,4], "flags":4, "x":64, "y":15},
+ {"matrix": [1,3], "flags":4, "x":48, "y":13},
+ {"matrix": [1,2], "flags":4, "x":32, "y":15},
+ {"matrix": [1,1], "flags":4, "x":16, "y":18},
+ {"matrix": [1,0], "flags":4, "x":0, "y":18},
+
+ {"matrix": [2,0], "flags":4, "x":0, "y":32},
+ {"matrix": [2,1], "flags":4, "x":16, "y":32},
+ {"matrix": [2,2], "flags":4, "x":32, "y":28},
+ {"matrix": [2,3], "flags":4, "x":48, "y":27},
+ {"matrix": [2,4], "flags":4, "x":64, "y":28},
+ {"matrix": [2,5], "flags":4, "x":80, "y":30},
+
+ {"matrix": [3,5], "flags":4, "x":80, "y":43},
+ {"matrix": [3,4], "flags":4, "x":64, "y":42},
+ {"matrix": [3,3], "flags":4, "x":48, "y":40},
+ {"flags":2, "x":40, "y":50},
+ {"matrix": [3,2], "flags":4, "x":32, "y":42},
+ {"matrix": [3,1], "flags":4, "x":16, "y":45},
+ {"flags":2, "x":8, "y":43},
+ {"matrix": [3,0], "flags":4, "x":0, "y":45},
+
+ {"matrix": [4,5], "flags":4, "x":98, "y":52},
+ {"matrix": [4,4], "flags":4, "x":90, "y":64},
+ {"flags":2, "x":80, "y":58},
+ {"matrix": [4,3], "flags":4, "x":72, "y":58},
+ {"matrix": [4,2], "flags":4, "x":56, "y":47},
+
+ {"matrix": [5,0], "flags":4, "x":224, "y":5},
+ {"flags":2, "x":216, "y":5},
+ {"matrix": [5,1], "flags":4, "x":208, "y":5},
+ {"matrix": [5,2], "flags":4, "x":192, "y":2},
+ {"flags":2, "x":184, "y":1},
+ {"matrix": [5,3], "flags":4, "x":176, "y":0},
+ {"matrix": [5,4], "flags":4, "x":160, "y":5},
+ {"flags":2, "x":152, "y":3},
+ {"matrix": [5,5], "flags":4, "x":144, "y":3},
+
+ {"matrix": [6,5], "flags":4, "x":144, "y":17},
+ {"matrix": [6,4], "flags":4, "x":160, "y":15},
+ {"matrix": [6,3], "flags":4, "x":176, "y":13},
+ {"matrix": [6,2], "flags":4, "x":192, "y":15},
+ {"matrix": [6,1], "flags":4, "x":208, "y":18},
+ {"matrix": [6,0], "flags":4, "x":224, "y":18},
+
+ {"matrix": [7,0], "flags":4, "x":224, "y":32},
+ {"matrix": [7,1], "flags":4, "x":208, "y":32},
+ {"matrix": [7,2], "flags":4, "x":192, "y":28},
+ {"matrix": [7,3], "flags":4, "x":176, "y":27},
+ {"matrix": [7,4], "flags":4, "x":160, "y":28},
+ {"matrix": [7,5], "flags":4, "x":144, "y":30},
+
+ {"matrix": [8,5], "flags":4, "x":144, "y":43},
+ {"matrix": [8,4], "flags":4, "x":160, "y":42},
+ {"matrix": [8,3], "flags":4, "x":176, "y":40},
+ {"flags":2, "x":184, "y":50},
+ {"matrix": [8,2], "flags":4, "x":192, "y":42},
+ {"matrix": [8,1], "flags":4, "x":208, "y":45},
+ {"flags":2, "x":216, "y":43},
+ {"matrix": [8,0], "flags":4, "x":224, "y":45},
+
+ {"matrix": [9,2], "flags":4, "x":168, "y":47},
+ {"matrix": [9,3], "flags":4, "x":152, "y":58},
+ {"flags":2, "x":144, "y":58},
+ {"matrix": [9,4], "flags":4, "x":134, "y":64},
+ {"matrix": [9,5], "flags":4, "x":126, "y":52}
+ ],
+ "sleep": true
+ }
+}
diff --git a/keyboards/keebio/iris_lm/g1/mcuconf.h b/keyboards/keebio/iris_lm/g1/mcuconf.h
new file mode 100644
index 00000000000..e1a054267d6
--- /dev/null
+++ b/keyboards/keebio/iris_lm/g1/mcuconf.h
@@ -0,0 +1,14 @@
+// Copyright 2024 Danny Nguyen (@nooges)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+/* enable USART3, used for split comms */
+#undef STM32_SERIAL_USE_USART3
+#define STM32_SERIAL_USE_USART3 TRUE
+
+/* enable TIM3, used for RGB LED PWM driver */
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
diff --git a/keyboards/keebio/iris_lm/g1/readme.md b/keyboards/keebio/iris_lm/g1/readme.md
new file mode 100644
index 00000000000..1483e68ff6f
--- /dev/null
+++ b/keyboards/keebio/iris_lm/g1/readme.md
@@ -0,0 +1,25 @@
+# Iris LM-G
+
+A split ergo 4x6 keyboard with 4 thumb keys made and sold by Keebio that supports Gateron KS-33 low-profile switches. [More info at Keebio](https://keeb.io).
+
+* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)
+* Hardware Supported: Iris LM-G PCBs
+* Hardware Availability: [Keebio](https://keeb.io)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keebio/iris_lm/g1:default
+
+Example of flashing this keyboard:
+
+ make keebio/iris_lm/g1: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 the top left and plug in the keyboard
+* **Physical reset button**: Press and hold the button on the back of the PCB for at least 1 second and let go
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/keebio/iris_lm/info.json b/keyboards/keebio/iris_lm/info.json
new file mode 100644
index 00000000000..64fa5a05caf
--- /dev/null
+++ b/keyboards/keebio/iris_lm/info.json
@@ -0,0 +1,8 @@
+{
+ "manufacturer": "Keebio",
+ "maintainer": "Keebio",
+ "url": "https://keeb.io",
+ "usb": {
+ "vid": "0xCB10"
+ }
+}
diff --git a/keyboards/keebio/iris_lm/k1/config.h b/keyboards/keebio/iris_lm/k1/config.h
new file mode 100644
index 00000000000..952033edf10
--- /dev/null
+++ b/keyboards/keebio/iris_lm/k1/config.h
@@ -0,0 +1,26 @@
+// Copyright 2024 Danny Nguyen (@nooges)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Defines for the split keyboard setup */
+#define SERIAL_USART_DRIVER SD3 // USART 3
+#define SERIAL_USART_TX_PIN B10
+#define SERIAL_USART_RX_PIN B11
+#define SERIAL_USART_TX_PAL_MODE 7
+#define SERIAL_USART_RX_PAL_MODE 7
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_PIN_SWAP
+
+#define USB_VBUS_PIN C6
+#define SPLIT_HAND_PIN A0
+
+/* Defines for the RGB matrix */
+#ifdef RGB_MATRIX_ENABLE
+# define WS2812_PWM_DRIVER PWMD3
+# define WS2812_PWM_CHANNEL 4
+# define WS2812_PWM_PAL_MODE 10
+# define WS2812_DMA_STREAM STM32_DMA1_STREAM2
+# define WS2812_DMA_CHANNEL 2
+# define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP
+#endif
diff --git a/keyboards/keebio/iris_lm/k1/halconf.h b/keyboards/keebio/iris_lm/k1/halconf.h
new file mode 100644
index 00000000000..45321a55bc8
--- /dev/null
+++ b/keyboards/keebio/iris_lm/k1/halconf.h
@@ -0,0 +1,10 @@
+// Copyright 2024 Danny Nguyen (@nooges)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SERIAL TRUE
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/keebio/iris_lm/k1/k1.c b/keyboards/keebio/iris_lm/k1/k1.c
new file mode 100644
index 00000000000..7843a900a3f
--- /dev/null
+++ b/keyboards/keebio/iris_lm/k1/k1.c
@@ -0,0 +1,11 @@
+// Copyright 2024 Danny Nguyen (@nooges)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+void keyboard_pre_init_kb(void) {
+ // Disable the PD peripheral in pre-init because its pins (B4, B6) are being used in the matrix:
+ PWR->CR3 |= PWR_CR3_UCPD_DBDIS;
+ // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions)
+ keyboard_pre_init_user();
+}
diff --git a/keyboards/keebio/iris_lm/k1/keyboard.json b/keyboards/keebio/iris_lm/k1/keyboard.json
new file mode 100644
index 00000000000..e5b0d5c655b
--- /dev/null
+++ b/keyboards/keebio/iris_lm/k1/keyboard.json
@@ -0,0 +1,242 @@
+{
+ "keyboard_name": "Iris LM-K Rev. 1",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": true
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B7"
+ },
+ "matrix_pins": {
+ "cols": ["A6", "A5", "B2", "B13", "B12", "C11"],
+ "rows": ["B1", "B0", "B14", "A15", "F1"]
+ },
+ "split": {
+ "enabled": true,
+ "matrix_pins": {
+ "right": {
+ "cols": ["C11", "C13", "B6", "B9", "B12", "B2"],
+ "rows": ["C4", "A7", "A6", "B5", "F1"]
+ }
+ },
+ "serial": {
+ "driver": "usart"
+ },
+ "transport": {
+ "sync" :{
+ "matrix_state": true
+ }
+ }
+ },
+ "processor": "STM32G431",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1756"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.375},
+ {"matrix": [0, 1], "x": 1, "y": 0.375},
+ {"matrix": [0, 2], "x": 2, "y": 0.125},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.125},
+ {"matrix": [0, 5], "x": 5, "y": 0.25},
+
+ {"matrix": [5, 5], "x": 9, "y": 0.25},
+ {"matrix": [5, 4], "x": 10, "y": 0.125},
+ {"matrix": [5, 3], "x": 11, "y": 0},
+ {"matrix": [5, 2], "x": 12, "y": 0.125},
+ {"matrix": [5, 1], "x": 13, "y": 0.375},
+ {"matrix": [5, 0], "x": 14, "y": 0.375},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.375},
+ {"matrix": [1, 1], "x": 1, "y": 1.375},
+ {"matrix": [1, 2], "x": 2, "y": 1.125},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.125},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+
+ {"matrix": [6, 5], "x": 9, "y": 1.25},
+ {"matrix": [6, 4], "x": 10, "y": 1.125},
+ {"matrix": [6, 3], "x": 11, "y": 1},
+ {"matrix": [6, 2], "x": 12, "y": 1.125},
+ {"matrix": [6, 1], "x": 13, "y": 1.375},
+ {"matrix": [6, 0], "x": 14, "y": 1.375},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.375},
+ {"matrix": [2, 1], "x": 1, "y": 2.375},
+ {"matrix": [2, 2], "x": 2, "y": 2.125},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.125},
+ {"matrix": [2, 5], "x": 5, "y": 2.25},
+
+ {"matrix": [7, 5], "x": 9, "y": 2.25},
+ {"matrix": [7, 4], "x": 10, "y": 2.125},
+ {"matrix": [7, 3], "x": 11, "y": 2},
+ {"matrix": [7, 2], "x": 12, "y": 2.125},
+ {"matrix": [7, 1], "x": 13, "y": 2.375},
+ {"matrix": [7, 0], "x": 14, "y": 2.375},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.375},
+ {"matrix": [3, 1], "x": 1, "y": 3.375},
+ {"matrix": [3, 2], "x": 2, "y": 3.125},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3.125},
+ {"matrix": [3, 5], "x": 5, "y": 3.25},
+ {"matrix": [4, 5], "x": 6.15, "y": 3.75},
+
+ {"matrix": [9, 5], "x": 7.85, "y": 3.75},
+ {"matrix": [8, 5], "x": 9, "y": 3.25},
+ {"matrix": [8, 4], "x": 10, "y": 3.125},
+ {"matrix": [8, 3], "x": 11, "y": 3},
+ {"matrix": [8, 2], "x": 12, "y": 3.125},
+ {"matrix": [8, 1], "x": 13, "y": 3.375},
+ {"matrix": [8, 0], "x": 14, "y": 3.375},
+
+ {"matrix": [4, 2], "x": 3.5, "y": 4.25},
+ {"matrix": [4, 3], "x": 4.5, "y": 4.375},
+ {"matrix": [4, 4], "x": 5.6, "y": 4.75},
+
+ {"matrix": [9, 4], "x": 8.4, "y": 4.75},
+ {"matrix": [9, 3], "x": 9.5, "y": 4.375},
+ {"matrix": [9, 2], "x": 10.5, "y": 4.25}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "rainbow_moving_chevron": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_fractal": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "ws2812",
+ "split_count": [34, 34],
+ "max_brightness": 120,
+ "layout": [
+ {"matrix": [0,0], "flags":4, "x":0, "y":5},
+ {"flags":2, "x":8, "y":5},
+ {"matrix": [0,1], "flags":4, "x":16, "y":5},
+ {"matrix": [0,2], "flags":4, "x":32, "y":2},
+ {"flags":2, "x":40, "y":1},
+ {"matrix": [0,3], "flags":4, "x":48, "y":0},
+ {"matrix": [0,4], "flags":4, "x":64, "y":5},
+ {"flags":2, "x":72, "y":3},
+ {"matrix": [0,5], "flags":4, "x":80, "y":3},
+
+ {"matrix": [1,5], "flags":4, "x":80, "y":17},
+ {"matrix": [1,4], "flags":4, "x":64, "y":15},
+ {"matrix": [1,3], "flags":4, "x":48, "y":13},
+ {"matrix": [1,2], "flags":4, "x":32, "y":15},
+ {"matrix": [1,1], "flags":4, "x":16, "y":18},
+ {"matrix": [1,0], "flags":4, "x":0, "y":18},
+
+ {"matrix": [2,0], "flags":4, "x":0, "y":32},
+ {"matrix": [2,1], "flags":4, "x":16, "y":32},
+ {"matrix": [2,2], "flags":4, "x":32, "y":28},
+ {"matrix": [2,3], "flags":4, "x":48, "y":27},
+ {"matrix": [2,4], "flags":4, "x":64, "y":28},
+ {"matrix": [2,5], "flags":4, "x":80, "y":30},
+
+ {"matrix": [3,5], "flags":4, "x":80, "y":43},
+ {"matrix": [3,4], "flags":4, "x":64, "y":42},
+ {"matrix": [3,3], "flags":4, "x":48, "y":40},
+ {"flags":2, "x":40, "y":50},
+ {"matrix": [3,2], "flags":4, "x":32, "y":42},
+ {"matrix": [3,1], "flags":4, "x":16, "y":45},
+ {"flags":2, "x":8, "y":43},
+ {"matrix": [3,0], "flags":4, "x":0, "y":45},
+
+ {"matrix": [4,5], "flags":4, "x":98, "y":52},
+ {"matrix": [4,4], "flags":4, "x":90, "y":64},
+ {"flags":2, "x":80, "y":58},
+ {"matrix": [4,3], "flags":4, "x":72, "y":58},
+ {"matrix": [4,2], "flags":4, "x":56, "y":47},
+
+ {"matrix": [5,0], "flags":4, "x":224, "y":5},
+ {"flags":2, "x":216, "y":5},
+ {"matrix": [5,1], "flags":4, "x":208, "y":5},
+ {"matrix": [5,2], "flags":4, "x":192, "y":2},
+ {"flags":2, "x":184, "y":1},
+ {"matrix": [5,3], "flags":4, "x":176, "y":0},
+ {"matrix": [5,4], "flags":4, "x":160, "y":5},
+ {"flags":2, "x":152, "y":3},
+ {"matrix": [5,5], "flags":4, "x":144, "y":3},
+
+ {"matrix": [6,5], "flags":4, "x":144, "y":17},
+ {"matrix": [6,4], "flags":4, "x":160, "y":15},
+ {"matrix": [6,3], "flags":4, "x":176, "y":13},
+ {"matrix": [6,2], "flags":4, "x":192, "y":15},
+ {"matrix": [6,1], "flags":4, "x":208, "y":18},
+ {"matrix": [6,0], "flags":4, "x":224, "y":18},
+
+ {"matrix": [7,0], "flags":4, "x":224, "y":32},
+ {"matrix": [7,1], "flags":4, "x":208, "y":32},
+ {"matrix": [7,2], "flags":4, "x":192, "y":28},
+ {"matrix": [7,3], "flags":4, "x":176, "y":27},
+ {"matrix": [7,4], "flags":4, "x":160, "y":28},
+ {"matrix": [7,5], "flags":4, "x":144, "y":30},
+
+ {"matrix": [8,5], "flags":4, "x":144, "y":43},
+ {"matrix": [8,4], "flags":4, "x":160, "y":42},
+ {"matrix": [8,3], "flags":4, "x":176, "y":40},
+ {"flags":2, "x":184, "y":50},
+ {"matrix": [8,2], "flags":4, "x":192, "y":42},
+ {"matrix": [8,1], "flags":4, "x":208, "y":45},
+ {"flags":2, "x":216, "y":43},
+ {"matrix": [8,0], "flags":4, "x":224, "y":45},
+
+ {"matrix": [9,2], "flags":4, "x":168, "y":47},
+ {"matrix": [9,3], "flags":4, "x":152, "y":58},
+ {"flags":2, "x":144, "y":58},
+ {"matrix": [9,4], "flags":4, "x":134, "y":64},
+ {"matrix": [9,5], "flags":4, "x":126, "y":52}
+ ],
+ "sleep": true
+ }
+}
diff --git a/keyboards/keebio/iris_lm/k1/mcuconf.h b/keyboards/keebio/iris_lm/k1/mcuconf.h
new file mode 100644
index 00000000000..e1a054267d6
--- /dev/null
+++ b/keyboards/keebio/iris_lm/k1/mcuconf.h
@@ -0,0 +1,14 @@
+// Copyright 2024 Danny Nguyen (@nooges)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+/* enable USART3, used for split comms */
+#undef STM32_SERIAL_USE_USART3
+#define STM32_SERIAL_USE_USART3 TRUE
+
+/* enable TIM3, used for RGB LED PWM driver */
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
diff --git a/keyboards/keebio/iris_lm/k1/readme.md b/keyboards/keebio/iris_lm/k1/readme.md
new file mode 100644
index 00000000000..8b373eb32b8
--- /dev/null
+++ b/keyboards/keebio/iris_lm/k1/readme.md
@@ -0,0 +1,25 @@
+# Iris LM-K
+
+A split ergo 4x6 keyboard with 4 thumb keys made and sold by Keebio that supports Kailh Choc V1 & V2 low-profile switches. [More info at Keebio](https://keeb.io).
+
+* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)
+* Hardware Supported: Iris LM-K PCBs
+* Hardware Availability: [Keebio](https://keeb.io)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keebio/iris_lm/k1:default
+
+Example of flashing this keyboard:
+
+ make keebio/iris_lm/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 the top left and plug in the keyboard
+* **Physical reset button**: Press and hold the button on the back of the PCB for at least 1 second and let go
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/keebio/iris_lm/keymaps/default/keymap.c b/keyboards/keebio/iris_lm/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d5021d647d4
--- /dev/null
+++ b/keyboards/keebio/iris_lm/keymaps/default/keymap.c
@@ -0,0 +1,55 @@
+// Copyright 2023 Danny Nguyen (@nooges)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum custom_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_HOME, KC_END, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LGUI, TL_LOWR, KC_ENT, KC_SPC, TL_UPPR, KC_RALT
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PGUP,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_GRV, _______, KC_UP, _______, QK_BOOT, _______, _______, KC_P7, KC_P8, KC_P9, KC_P0, KC_PGDN,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_PIPE,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_MOD, EE_CLR, _______, _______, _______, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_P1, KC_P2, KC_P3, KC_MINS, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, KC_DEL, KC_DEL, _______, KC_P0
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_RAISE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_TOG, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, QK_BOOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_MOD, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS, KC_EQL, KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, KC_BSLS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, KC_LPRN, _______, KC_PLUS, KC_END, RGB_HUD, RGB_SAD, RGB_VAD, EE_CLR,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
diff --git a/keyboards/keebio/iris_lm/keymaps/default/rules.mk b/keyboards/keebio/iris_lm/keymaps/default/rules.mk
new file mode 100644
index 00000000000..7c9bf212a6f
--- /dev/null
+++ b/keyboards/keebio/iris_lm/keymaps/default/rules.mk
@@ -0,0 +1 @@
+TRI_LAYER_ENABLE = yes
diff --git a/keyboards/keebio/iris_lm/readme.md b/keyboards/keebio/iris_lm/readme.md
new file mode 100644
index 00000000000..1036d0f7cc5
--- /dev/null
+++ b/keyboards/keebio/iris_lm/readme.md
@@ -0,0 +1,6 @@
+# Iris LM
+
+The Iris LM comes in two variants:
+
+- [Iris LM-G](g1/readme.md) - Supports Gateron KS-33 low-profile switches
+- [Iris LM-K](k1/readme.md) - Supports Kailh Choc V1 & V2 low-profile switches
diff --git a/keyboards/keyhive/uno/rev2/keyboard.jsono b/keyboards/keyhive/uno/rev2/keyboard.json
similarity index 100%
rename from keyboards/keyhive/uno/rev2/keyboard.jsono
rename to keyboards/keyhive/uno/rev2/keyboard.json
diff --git a/keyboards/keyten/diablo/keyboard.json b/keyboards/keyten/diablo/keyboard.json
index 3b3e040b08a..3882d4e160b 100644
--- a/keyboards/keyten/diablo/keyboard.json
+++ b/keyboards/keyten/diablo/keyboard.json
@@ -22,13 +22,16 @@
"pid": "0x6003",
"vid": "0xEB69"
},
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"community_layouts": [
"60_ansi_wkl_split_bs_rshift",
"60_hhkb",
- "60_tsangan_hhkb"
+ "60_ansi_tsangan_split_bs_rshift"
],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/keyten/diablo/keymaps/default/keymap.c b/keyboards/keyten/diablo/keymaps/default/keymap.c
index 658b09636a8..3ea6baf7f7d 100644
--- a/keyboards/keyten/diablo/keymaps/default/keymap.c
+++ b/keyboards/keyten/diablo/keymaps/default/keymap.c
@@ -5,7 +5,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, 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,
@@ -13,7 +13,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/keyten/imi60/keyboard.json b/keyboards/keyten/imi60/keyboard.json
index 2ccf8314116..262584442c1 100644
--- a/keyboards/keyten/imi60/keyboard.json
+++ b/keyboards/keyten/imi60/keyboard.json
@@ -20,9 +20,12 @@
"pid": "0x6005",
"vid": "0xEB69"
},
- "community_layouts": ["60_tsangan_hhkb"],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
+ "community_layouts": ["60_ansi_tsangan_split_bs_rshift"],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/keyten/imi60/keymaps/default/keymap.c b/keyboards/keyten/imi60/keymaps/default/keymap.c
index 36859fad550..c7c051dca69 100644
--- a/keyboards/keyten/imi60/keymaps/default/keymap.c
+++ b/keyboards/keyten/imi60/keymaps/default/keymap.c
@@ -4,7 +4,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -12,7 +12,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
diff --git a/keyboards/keyten/kt60_m/keyboard.json b/keyboards/keyten/kt60_m/keyboard.json
index 3c3061f0174..f72deeebbd5 100644
--- a/keyboards/keyten/kt60_m/keyboard.json
+++ b/keyboards/keyten/kt60_m/keyboard.json
@@ -27,11 +27,12 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_tsangan_hhkb"],
+ "community_layouts": ["60_ansi_tsangan_split_bs_rshift"],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/keyten/kt60_m/keymaps/default/keymap.c b/keyboards/keyten/kt60_m/keymaps/default/keymap.c
index 594dceb624d..d499b7fa05a 100644
--- a/keyboards/keyten/kt60_m/keymaps/default/keymap.c
+++ b/keyboards/keyten/kt60_m/keymaps/default/keymap.c
@@ -23,14 +23,14 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_MAIN] = LAYOUT_60_tsangan_hhkb(
+ [_MAIN] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_BSPC,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
- [_FN] = LAYOUT_60_tsangan_hhkb(
+ [_FN] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keyten/kt60hs_t/keyboard.json b/keyboards/keyten/kt60hs_t/keyboard.json
index 819ce1bf1e8..63a755d6989 100644
--- a/keyboards/keyten/kt60hs_t/keyboard.json
+++ b/keyboards/keyten/kt60hs_t/keyboard.json
@@ -25,8 +25,11 @@
"community_layouts": [
"60_ansi_wkl_split_bs_rshift",
"60_hhkb",
- "60_tsangan_hhkb"
+ "60_ansi_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi_wkl_split_bs_rshift": {
"layout": [
@@ -156,7 +159,7 @@
{"matrix": [4, 11], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/keyten/kt60hs_t/keymaps/default/keymap.c b/keyboards/keyten/kt60hs_t/keymaps/default/keymap.c
index ef9de98d3c1..38938bf162f 100644
--- a/keyboards/keyten/kt60hs_t/keymaps/default/keymap.c
+++ b/keyboards/keyten/kt60hs_t/keymaps/default/keymap.c
@@ -4,7 +4,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, 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,
@@ -12,7 +12,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/kkatano/bakeneko60/keyboard.json b/keyboards/kkatano/bakeneko60/keyboard.json
index fee9b9d533d..094cc71728d 100644
--- a/keyboards/kkatano/bakeneko60/keyboard.json
+++ b/keyboards/kkatano/bakeneko60/keyboard.json
@@ -29,7 +29,14 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi_split_bs_rshift", "60_ansi", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi_split_bs_rshift",
+ "60_ansi",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
@@ -171,7 +178,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/kopibeng/mnk60_stm32/keyboard.json b/keyboards/kopibeng/mnk60_stm32/keyboard.json
index e0853d543f5..8b2278aff07 100644
--- a/keyboards/kopibeng/mnk60_stm32/keyboard.json
+++ b/keyboards/kopibeng/mnk60_stm32/keyboard.json
@@ -59,6 +59,7 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
"60_ansi_wkl",
"60_ansi_wkl_split_bs_rshift",
"60_hhkb",
@@ -67,9 +68,11 @@
"60_iso_tsangan",
"60_iso_tsangan_split_bs_rshift",
"60_iso_wkl",
- "60_iso_wkl_split_bs_rshift",
- "60_tsangan_hhkb"
+ "60_iso_wkl_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -403,7 +406,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/kopibeng/xt60/keyboard.json b/keyboards/kopibeng/xt60/keyboard.json
index a170d36e417..24dc8f490bb 100644
--- a/keyboards/kopibeng/xt60/keyboard.json
+++ b/keyboards/kopibeng/xt60/keyboard.json
@@ -52,11 +52,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -340,7 +344,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/kopibeng/xt60_singa/keyboard.json b/keyboards/kopibeng/xt60_singa/keyboard.json
index 280a58c07b3..b1d239cd20f 100644
--- a/keyboards/kopibeng/xt60_singa/keyboard.json
+++ b/keyboards/kopibeng/xt60_singa/keyboard.json
@@ -52,11 +52,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -340,7 +344,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/lily58/keymaps/default/keymap.c b/keyboards/lily58/keymaps/default/keymap.c
index 44288d39d04..7e34752f2d0 100644
--- a/keyboards/lily58/keymaps/default/keymap.c
+++ b/keyboards/lily58/keymaps/default/keymap.c
@@ -37,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | ` | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | - |
+ * | ` | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | ~ |
* |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
* | | | | | | |-------| |-------| | _ | + | { | } | | |
* `-----------------------------------------/ / \ \-----------------------------------------'
diff --git a/keyboards/lily58/lite_rev3/config.h b/keyboards/lily58/lite_rev3/config.h
new file mode 100644
index 00000000000..9d2d289f5bb
--- /dev/null
+++ b/keyboards/lily58/lite_rev3/config.h
@@ -0,0 +1,14 @@
+// Copyright 2023 yuchi
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
+
+#define I2C_DRIVER I2CD1
+#define I2C1_SDA_PIN GP14
+#define I2C1_SCL_PIN GP15
diff --git a/keyboards/lily58/lite_rev3/halconf.h b/keyboards/lily58/lite_rev3/halconf.h
new file mode 100644
index 00000000000..4639740d44e
--- /dev/null
+++ b/keyboards/lily58/lite_rev3/halconf.h
@@ -0,0 +1,7 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
\ No newline at end of file
diff --git a/keyboards/lily58/lite_rev3/keyboard.json b/keyboards/lily58/lite_rev3/keyboard.json
new file mode 100644
index 00000000000..2073c0661e5
--- /dev/null
+++ b/keyboards/lily58/lite_rev3/keyboard.json
@@ -0,0 +1,104 @@
+{
+ "keyboard_name": "Lily58 Lite Rev3",
+ "manufacturer": "Liliums",
+ "maintainer": "yuchi",
+ "url": "",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "usb": {
+ "vid": "0x1209",
+ "pid": "0x5801",
+ "device_version": "1.0.0"
+ },
+ "split": {
+ "enabled": true,
+ "serial": {
+ "driver": "vendor"
+ }
+ },
+ "matrix_pins": {
+ "cols": ["GP8", "GP7", "GP6", "GP5", "GP4", "GP3"],
+ "rows": ["GP13", "GP12", "GP11", "GP10", "GP9"]
+ },
+ "features": {
+ "oled": true,
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.5},
+ {"matrix": [0, 1], "x": 1, "y": 0.375},
+ {"matrix": [0, 2], "x": 2, "y": 0.125},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.125},
+ {"matrix": [0, 5], "x": 5, "y": 0.25},
+
+ {"matrix": [5, 5], "x": 10.5, "y": 0.25},
+ {"matrix": [5, 4], "x": 11.5, "y": 0.125},
+ {"matrix": [5, 3], "x": 12.5, "y": 0},
+ {"matrix": [5, 2], "x": 13.5, "y": 0.125},
+ {"matrix": [5, 1], "x": 14.5, "y": 0.375},
+ {"matrix": [5, 0], "x": 15.5, "y": 0.5},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.375},
+ {"matrix": [1, 2], "x": 2, "y": 1.125},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.125},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+
+ {"matrix": [6, 5], "x": 10.5, "y": 1.25},
+ {"matrix": [6, 4], "x": 11.5, "y": 1.125},
+ {"matrix": [6, 3], "x": 12.5, "y": 1},
+ {"matrix": [6, 2], "x": 13.5, "y": 1.125},
+ {"matrix": [6, 1], "x": 14.5, "y": 1.375},
+ {"matrix": [6, 0], "x": 15.5, "y": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.5},
+ {"matrix": [2, 1], "x": 1, "y": 2.375},
+ {"matrix": [2, 2], "x": 2, "y": 2.125},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.125},
+ {"matrix": [2, 5], "x": 5, "y": 2.25},
+
+ {"matrix": [7, 5], "x": 10.5, "y": 2.25},
+ {"matrix": [7, 4], "x": 11.5, "y": 2.125},
+ {"matrix": [7, 3], "x": 12.5, "y": 2},
+ {"matrix": [7, 2], "x": 13.5, "y": 2.125},
+ {"matrix": [7, 1], "x": 14.5, "y": 2.375},
+ {"matrix": [7, 0], "x": 15.5, "y": 2.5},
+
+ {"matrix": [3, 0], "x": 0, "y": 3.5},
+ {"matrix": [3, 1], "x": 1, "y": 3.375},
+ {"matrix": [3, 2], "x": 2, "y": 3.125},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3.125},
+ {"matrix": [3, 5], "x": 5, "y": 3.25},
+ {"matrix": [4, 5], "x": 6, "y": 2.75},
+
+ {"matrix": [9, 5], "x": 9.5, "y": 2.75},
+ {"matrix": [8, 5], "x": 10.5, "y": 3.25},
+ {"matrix": [8, 4], "x": 11.5, "y": 3.125},
+ {"matrix": [8, 3], "x": 12.5, "y": 3},
+ {"matrix": [8, 2], "x": 13.5, "y": 3.125},
+ {"matrix": [8, 1], "x": 14.5, "y": 3.375},
+ {"matrix": [8, 0], "x": 15.5, "y": 3.5},
+
+ {"matrix": [4, 1], "x": 2.5, "y": 4.125},
+ {"matrix": [4, 2], "x": 3.5, "y": 4.15},
+ {"matrix": [4, 3], "x": 4.5, "y": 4.25},
+ {"matrix": [4, 4], "x": 6, "y": 4.25, "h": 1.5},
+
+ {"matrix": [9, 4], "x": 9.5, "y": 4.25, "h": 1.5},
+ {"matrix": [9, 3], "x": 11, "y": 4.25},
+ {"matrix": [9, 2], "x": 12, "y": 4.15},
+ {"matrix": [9, 1], "x": 13, "y": 4.15}
+ ]
+ }
+ }
+}
diff --git a/keyboards/lily58/lite_rev3/mcuconf.h b/keyboards/lily58/lite_rev3/mcuconf.h
new file mode 100644
index 00000000000..432c72853ac
--- /dev/null
+++ b/keyboards/lily58/lite_rev3/mcuconf.h
@@ -0,0 +1,11 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next
+
+#undef RP_I2C_USE_I2C0
+#define RP_I2C_USE_I2C0 FALSE
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/lily58/lite_rev3/readme.md b/keyboards/lily58/lite_rev3/readme.md
new file mode 100644
index 00000000000..54ce6229d1b
--- /dev/null
+++ b/keyboards/lily58/lite_rev3/readme.md
@@ -0,0 +1,28 @@
+# Lily58 Lite Rev3
+
+
+
+
+
+* Keyboard Maintainer: [yuchi](https://github.com/kata0510)
+* Hardware Supported: RP2040-Zero
+* Hardware Availability: [PCB Link](https://github.com/kata0510/Lily58/tree/master/Lite_Rev3)
+* Other Information(ja) [Link](https://docs.liliums.net/lily58-lite-rev3/about/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make lily58/lite_rev3:default
+
+Flashing example for this keyboard:
+
+ make lily58/lite_rev3:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/linworks/fave60/keyboard.json b/keyboards/linworks/fave60/keyboard.json
index 5b9a14b43fa..38c5458445c 100644
--- a/keyboards/linworks/fave60/keyboard.json
+++ b/keyboards/linworks/fave60/keyboard.json
@@ -50,13 +50,14 @@
"vid": "0x4C58"
},
"Layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift"
+ "LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi",
"60_ansi_tsangan",
"60_ansi_split_bs_rshift",
- "60_tsangan_hhkb"
+ "60_ansi_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_60_ansi": {
@@ -255,7 +256,7 @@
{ "matrix": [4, 14], "w": 1.5, "x": 13.5, "y": 4 }
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
diff --git a/keyboards/linworks/fave60a/keyboard.json b/keyboards/linworks/fave60a/keyboard.json
index 6d59949b230..7972e94baee 100644
--- a/keyboards/linworks/fave60a/keyboard.json
+++ b/keyboards/linworks/fave60a/keyboard.json
@@ -168,14 +168,15 @@
"vid": "0x4C58"
},
"layout_aliases": {
- "LAYOUT": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_ansi_tsangan"
],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
diff --git a/keyboards/linworks/fave60a/keymaps/default/keymap.c b/keyboards/linworks/fave60a/keymaps/default/keymap.c
index c77f1b4143d..350b9571efe 100644
--- a/keyboards/linworks/fave60a/keymaps/default/keymap.c
+++ b/keyboards/linworks/fave60a/keymaps/default/keymap.c
@@ -16,14 +16,14 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL, KC_TRNS,
diff --git a/keyboards/madjax_macropad/keyboard.json b/keyboards/madjax_macropad/keyboard.json
new file mode 100644
index 00000000000..ac2802faef2
--- /dev/null
+++ b/keyboards/madjax_macropad/keyboard.json
@@ -0,0 +1,55 @@
+{
+ "manufacturer": "MadJax",
+ "keyboard_name": "madjax_macropad",
+ "maintainer": "guidoism",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP26", "GP27", "GP28", "GP29"],
+ "rows": ["GP6", "GP7", "GP0", "GP4", "GP3"]
+ },
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP1", "pin_b": "GP2"}
+ ]
+ },
+ "processor": "RP2040",
+ "url": "https://github.com/guidoism/madjax_macropad",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"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}
+ ]
+ }
+ }
+}
diff --git a/keyboards/madjax_macropad/keymaps/default/keymap.c b/keyboards/madjax_macropad/keymaps/default/keymap.c
new file mode 100644
index 00000000000..693438c1f3e
--- /dev/null
+++ b/keyboards/madjax_macropad/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+ KC_P00 = SAFE_RANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐
+ * │ - │
+ * ┌───┬───┬───┼───┤
+ * │ 7 │ 8 │ 9 │ + │
+ * ├───┼───┼───┼───┤
+ * │ 4 │ 5 │ 6 │ % │
+ * ├───┼───┼───┼───┤
+ * │ 1 │ 2 │ 3 │ = │
+ * ├───┼───┼───┼───┤
+ * │ 0 │00 │ . │Ent│
+ * └───┴───┴───┴───┘
+ */
+ [0] = LAYOUT(
+ KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PERC,
+ KC_P1, KC_P2, KC_P3, KC_EQL,
+ KC_P0, KC_P00, KC_PDOT, KC_PENT
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case KC_P00:
+ tap_code(KC_P0);
+ tap_code(KC_P0);
+ return false;
+ }
+ }
+ return true;
+}
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_PGUP, KC_PGDN) }
+};
+#endif
diff --git a/keyboards/madjax_macropad/keymaps/default/rules.mk b/keyboards/madjax_macropad/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/madjax_macropad/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/madjax_macropad/readme.md b/keyboards/madjax_macropad/readme.md
new file mode 100644
index 00000000000..1abe17ecca9
--- /dev/null
+++ b/keyboards/madjax_macropad/readme.md
@@ -0,0 +1,24 @@
+# MadJax Macropad
+
+* Keyboard Maintainer: [Guido Bartolucci](https://github.com/guidoism)
+* Hardware Supported: Seeed Studio XIAO RP2040
+* Hardware Availability: https://github.com/guidoism/madjax_macropad
+
+Make example for this keyboard (after setting up your build environment):
+
+ make madjax_macropad:default
+
+Flashing example for this keyboard:
+
+ make madjax_macropad: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/mechkeys/acr60/keyboard.json b/keyboards/mechkeys/acr60/keyboard.json
index 90b1fd25711..6486b21f122 100644
--- a/keyboards/mechkeys/acr60/keyboard.json
+++ b/keyboards/mechkeys/acr60/keyboard.json
@@ -59,10 +59,28 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_ansi_arrow", "64_ansi", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift", "64_iso"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_arrow",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl",
+ "60_iso_wkl_split_bs_rshift",
+ "64_ansi",
+ "64_iso"
+ ],
"layout_aliases": {
"LAYOUT_2_shifts": "LAYOUT_all",
- "LAYOUT_mitchsplit": "LAYOUT_60_ansi_split_space_split_rshift"
+ "LAYOUT_mitchsplit": "LAYOUT_60_ansi_split_space_split_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_all": {
@@ -349,7 +367,7 @@
{"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/mechlovin/jay60/keyboard.json b/keyboards/mechlovin/jay60/keyboard.json
index c7e05d2327f..75bf190d88e 100644
--- a/keyboards/mechlovin/jay60/keyboard.json
+++ b/keyboards/mechlovin/jay60/keyboard.json
@@ -30,13 +30,14 @@
"processor": "atmega32a",
"bootloader": "usbasploader",
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift"
+ "LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb"
+ "60_ansi_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_60_ansi": {
@@ -247,7 +248,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/melgeek/mj6xy/info.json b/keyboards/melgeek/mj6xy/info.json
index 21c79d6327f..0dd1212354d 100755
--- a/keyboards/melgeek/mj6xy/info.json
+++ b/keyboards/melgeek/mj6xy/info.json
@@ -27,7 +27,8 @@
"LAYOUT_60_iso_arrow_6u_spc_split_bs": "LAYOUT_60_iso_arrow_split_bs",
"LAYOUT_64_iso_6u_spc_split_bs": "LAYOUT_64_iso_split_bs",
"LAYOUT_60_iso_1u_lshift_split_bs_rshift": "LAYOUT_60_iso_split_bs_rshift",
- "LAYOUT_60_iso_1u_lshift_7u_spc_split_bs_rshift": "LAYOUT_60_iso_tsangan_split_bs_rshift"
+ "LAYOUT_60_iso_1u_lshift_7u_spc_split_bs_rshift": "LAYOUT_60_iso_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": ["60_ansi"],
"layouts": {
@@ -1255,7 +1256,7 @@
{"matrix": [4, 14], "x": 14, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/melgeek/mj6xy/keymaps/default_60_tsangan_hhkb/keymap.c b/keyboards/melgeek/mj6xy/keymaps/default_60_tsangan_hhkb/keymap.c
index 35f341892f9..26dc01d0eb9 100644
--- a/keyboards/melgeek/mj6xy/keymaps/default_60_tsangan_hhkb/keymap.c
+++ b/keyboards/melgeek/mj6xy/keymaps/default_60_tsangan_hhkb/keymap.c
@@ -18,14 +18,14 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT_60_tsangan_hhkb(
+ LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, 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_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_RCTL),
- LAYOUT_60_tsangan_hhkb(
+ LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL,
KC_TRNS, UG_TOGG, UG_NEXT, UG_HUEU, UG_HUED, UG_SATU, UG_SATD, UG_VALU, UG_VALD, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, QK_BOOT,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS,
diff --git a/keyboards/mmkeyboard/class60/soldered/keyboard.json b/keyboards/mmkeyboard/class60/soldered/keyboard.json
index 758299cf2b6..cb28da366c3 100644
--- a/keyboards/mmkeyboard/class60/soldered/keyboard.json
+++ b/keyboards/mmkeyboard/class60/soldered/keyboard.json
@@ -40,7 +40,24 @@
"pid": "0x3876",
"vid": "0x4F66"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl",
+ "60_iso_wkl_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -822,7 +839,7 @@
{"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/monoflex60/keyboard.json b/keyboards/monoflex60/keyboard.json
index 25c19865a61..4c6fca75246 100644
--- a/keyboards/monoflex60/keyboard.json
+++ b/keyboards/monoflex60/keyboard.json
@@ -27,9 +27,12 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"community_layouts": [
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso_tsangan"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -102,7 +105,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/monoflex60/keymaps/60_tsangan_hhkb/keymap.c b/keyboards/monoflex60/keymaps/60_tsangan_hhkb/keymap.c
index cd308a9d0ca..7927ac448b9 100644
--- a/keyboards/monoflex60/keymaps/60_tsangan_hhkb/keymap.c
+++ b/keyboards/monoflex60/keymaps/60_tsangan_hhkb/keymap.c
@@ -18,14 +18,14 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/montsinger/palmetto/keyboard.json b/keyboards/montsinger/palmetto/keyboard.json
index 9ff29ba893f..b44944d39f3 100755
--- a/keyboards/montsinger/palmetto/keyboard.json
+++ b/keyboards/montsinger/palmetto/keyboard.json
@@ -25,12 +25,16 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan",
- "60_tsangan_hhkb",
+ "60_iso_tsangan_split_bs_rshift"
"60_hhkb"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -447,7 +451,7 @@
{"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/mountainmechdesigns/teton_78/keyboard.json b/keyboards/mountainmechdesigns/teton_78/keyboard.json
new file mode 100644
index 00000000000..d6f5ce9cd83
--- /dev/null
+++ b/keyboards/mountainmechdesigns/teton_78/keyboard.json
@@ -0,0 +1,113 @@
+{
+ "manufacturer": "Bennett Balogh",
+ "keyboard_name": "teton_78",
+ "maintainer": "qmk",
+ "bootloader": "atmel-dfu",
+ "bootmagic": {
+ "matrix": [0, 2]
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["F7", "F6", "F5", "F4", "F1", "F0", "B0", "B1", "B2", "B3", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7"],
+ "rows": ["D0", "D1", "D2", "D3", "D5"]
+ },
+ "processor": "atmega32u4",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x3349",
+ "vid": "0x8A5B"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 0, "y": 1},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 7.25, "y": 0},
+ {"matrix": [0, 8], "x": 8.25, "y": 0},
+ {"matrix": [0, 9], "x": 9.25, "y": 0},
+ {"matrix": [0, 10], "x": 10.25, "y": 0},
+ {"matrix": [0, 11], "x": 11.25, "y": 0},
+ {"matrix": [0, 12], "x": 12.25, "y": 0},
+ {"matrix": [0, 13], "x": 13.25, "y": 0},
+ {"matrix": [0, 14], "x": 14.25, "y": 0},
+ {"matrix": [0, 15], "x": 15.25, "y": 0, "w": 2},
+ {"matrix": [0, 16], "x": 17.5, "y": 0},
+ {"matrix": [0, 17], "x": 18.5, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 7.75, "y": 1},
+ {"matrix": [1, 8], "x": 8.75, "y": 1},
+ {"matrix": [1, 9], "x": 9.75, "y": 1},
+ {"matrix": [1, 10], "x": 10.75, "y": 1},
+ {"matrix": [1, 11], "x": 11.75, "y": 1},
+ {"matrix": [1, 12], "x": 12.75, "y": 1},
+ {"matrix": [1, 13], "x": 13.75, "y": 1},
+ {"matrix": [1, 14], "x": 14.75, "y": 1},
+ {"matrix": [1, 15], "x": 15.75, "y": 1, "w": 1.5},
+ {"matrix": [1, 16], "x": 17.5, "y": 1},
+ {"matrix": [1, 17], "x": 18.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [2, 10], "x": 11, "y": 2},
+ {"matrix": [2, 11], "x": 12, "y": 2},
+ {"matrix": [2, 12], "x": 13, "y": 2},
+ {"matrix": [2, 13], "x": 14, "y": 2},
+ {"matrix": [2, 14], "x": 15, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+ {"matrix": [3, 7], "x": 8.5, "y": 3},
+ {"matrix": [3, 8], "x": 9.5, "y": 3},
+ {"matrix": [3, 9], "x": 10.5, "y": 3},
+ {"matrix": [3, 10], "x": 11.5, "y": 3},
+ {"matrix": [3, 11], "x": 12.5, "y": 3},
+ {"matrix": [3, 12], "x": 13.5, "y": 3},
+ {"matrix": [3, 13], "x": 14.5, "y": 3, "w": 2.75},
+ {"matrix": [3, 16], "x": 17.5, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 3.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 7], "x": 6, "y": 4, "w": 6.25},
+ {"matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 14.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 16.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 16], "x": 17.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 17], "x": 18.5, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/mountainmechdesigns/teton_78/keymaps/default/keymap.c b/keyboards/mountainmechdesigns/teton_78/keymaps/default/keymap.c
new file mode 100644
index 00000000000..c4762d577d6
--- /dev/null
+++ b/keyboards/mountainmechdesigns/teton_78/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+/* Copyright 2024 Bennett Balogh LLC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+ [0] = LAYOUT(
+
+ KC_F1, KC_F6, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME,
+ KC_F2, KC_F7, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END,
+ KC_F3, KC_F8, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_F4, KC_F9, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_F5, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/mountainmechdesigns/teton_78/readme.md b/keyboards/mountainmechdesigns/teton_78/readme.md
new file mode 100644
index 00000000000..40ef5c436bf
--- /dev/null
+++ b/keyboards/mountainmechdesigns/teton_78/readme.md
@@ -0,0 +1,37 @@
+# Teton 78 QMK Firmware
+
+## Introduction
+
+
+
+This is the QMK firmware repository for the Teton78, a 68XT solder and hotswao keyboard designed by Mountain Mech Designs - Bennett Balogh.
+
+The Teton 78 has entered GB and sucessfully finalized in November 2024 The IC page for the keyboard can be found [here](https://geekhack.org/index.php?topic=123275.0).
+The sale page can be found [here](https://www.mountainmechdesigns.com/)
+Discord link can be found [here](https://discord.gg/h9dMwRNfVy)
+
+## About
+
+* Keyboard Maintainer: [Bennett Balogh](https://github.com/AwesomeBalogh)
+* Hardware Supported: Atmega32u4
+* Hardware Availability: N/A
+
+## How to compile
+
+After setting up your build environment, you can compile the Teton 78 default keymap by using:
+
+ make mountainmechdesigns/teton_78:default
+
+Flash using
+
+ make mountainmechdesigns/teton_78: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/mtbkeys/mtb60/solder/keyboard.json b/keyboards/mtbkeys/mtb60/solder/keyboard.json
index 1059f1fd76e..e1289816264 100644
--- a/keyboards/mtbkeys/mtb60/solder/keyboard.json
+++ b/keyboards/mtbkeys/mtb60/solder/keyboard.json
@@ -55,13 +55,14 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT": "LAYOUT_all"
+ "LAYOUT": "LAYOUT_all",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb"
+ "60_ansi_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_all": {
@@ -348,7 +349,7 @@
{"label": "Ctrl", "matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/mykeyclub/jris65/hotswap/keyboard.json b/keyboards/mykeyclub/jris65/hotswap/keyboard.json
new file mode 100644
index 00000000000..3ed56136d14
--- /dev/null
+++ b/keyboards/mykeyclub/jris65/hotswap/keyboard.json
@@ -0,0 +1,389 @@
+{
+ "manufacturer": "zlkb",
+ "keyboard_name": "IRIS65",
+ "maintainer": "5217zl",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B6", "C6", "C7", "F1", "F0", "E6", "B0", "B1", "B3", "B7", "D2", "D1", "D0", "D7", "B4", "B5"],
+ "rows": ["F7", "F6", "F5", "B2", "F4"]
+ },
+ "processor": "atmega32u4",
+ "url": "",
+ "usb": {
+ "device_version": "0.1.0",
+ "pid": "0x4953",
+ "vid": "0x5A4C"
+ },
+ "community_layouts": ["65_ansi_blocker", "65_ansi_blocker_split_bs", "65_iso_blocker", "65_iso_blocker_split_bs"],
+ "layouts": {
+ "LAYOUT_65_ansi_blocker": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"label": "0,15", "matrix": [0, 15], "x": 15, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "1,,8", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "1,13", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "1,14", "matrix": [1, 14], "x": 15, "y": 1},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "2,13", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "2,14", "matrix": [2, 14], "x": 15, "y": 2},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "3,12", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "3,13", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "3,14", "matrix": [3, 14], "x": 15, "y": 3},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "4,12", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "4,13", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "4,14", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_split_bs": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "0,15", "matrix": [0, 15], "x": 15, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "1,,8", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "1,13", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "1,14", "matrix": [1, 14], "x": 15, "y": 1},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "2,13", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "2,14", "matrix": [2, 14], "x": 15, "y": 2},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "3,12", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "3,13", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "3,14", "matrix": [3, 14], "x": 15, "y": 3},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "4,12", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "4,13", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "4,14", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+ {"label": "0,15", "matrix": [0, 15], "x": 15, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "1,,8", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "1,14", "matrix": [1, 14], "x": 15, "y": 1},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "2,13", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "2,14", "matrix": [2, 14], "x": 15, "y": 2},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "3,1", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "3,12", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "3,13", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "3,14", "matrix": [3, 14], "x": 15, "y": 3},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "4,12", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "4,13", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "4,14", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker_split_bs": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "0,15", "matrix": [0, 15], "x": 15, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "1,,8", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "1,14", "matrix": [1, 14], "x": 15, "y": 1},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "2,13", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "2,14", "matrix": [2, 14], "x": 15, "y": 2},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "3,1", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "3,12", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "3,13", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "3,14", "matrix": [3, 14], "x": 15, "y": 3},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "4,12", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "4,13", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "4,14", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "0,15", "matrix": [0, 15], "x": 15, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "1,,8", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "1,13", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "1,14", "matrix": [1, 14], "x": 15, "y": 1},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "2,13", "matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
+ {"label": "2,14", "matrix": [2, 14], "x": 15, "y": 2},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "3,1", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "3,12", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "3,13", "matrix": [3, 13], "x": 14, "y": 3},
+ {"label": "3,14", "matrix": [3, 14], "x": 15, "y": 3},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "4,12", "matrix": [4, 12], "x": 13, "y": 4},
+ {"label": "4,13", "matrix": [4, 13], "x": 14, "y": 4},
+ {"label": "4,14", "matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mykeyclub/jris65/keymaps/default/keymap.json b/keyboards/mykeyclub/jris65/keymaps/default/keymap.json
new file mode 100644
index 00000000000..fefbecd6fcb
--- /dev/null
+++ b/keyboards/mykeyclub/jris65/keymaps/default/keymap.json
@@ -0,0 +1,21 @@
+{
+ "keyboard": "mykeyclub/jris65/hotswap",
+ "keymap": "default",
+ "layout": "LAYOUT_all",
+ "layers": [
+ [
+ "KC_ESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSLS", "KC_BSPC", "KC_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_BSLS", "KC_ENT", "KC_END",
+ "KC_LSFT", "KC_BSLS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_DOT", "KC_COMM", "KC_SLSH", "KC_RSFT", "KC_UP", "KC_DEL",
+ "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_LEFT", "KC_DOWN", "KC_RGHT"
+ ],
+ [
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "QK_BOOT", "KC_TRNS",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
+ ]
+ ]
+}
diff --git a/keyboards/mykeyclub/jris65/readme.md b/keyboards/mykeyclub/jris65/readme.md
new file mode 100644
index 00000000000..c216a11d435
--- /dev/null
+++ b/keyboards/mykeyclub/jris65/readme.md
@@ -0,0 +1,35 @@
+# JRIS65
+
+
+**Hotswap PCB**
+
+A 65% keyboard sold by Mykeyclub.
+
+* Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+* Hardware Supported: JRIS65 R1 hotswap.
+* Hardware Availability: intermitently via group buys from [Mykeyclub](https://www.mykeyclub.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mykeyclub/jris65/hotswap:default
+
+Flashing example for this keyboard:
+
+ make mykeyclub/jris65/hotswap:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Keycode in layout**: Using the default firmware, assign a key to Reset (`QK_BOOT`) and press the assigned key.
+* **Physical reset button**: Briefly press the button on the back of the PCB
+
+The QMK default keymap has FN+Backspace assigned to `QK_BOOT` so you can use that key sequence for subsequent flashing.
+
+## Disclaimer
+
+In May 2024 Mykeyclub was contacted to see if they had interest in contributing firmware to the QMK project they did not. This code is thus community supported.
+
+This firmware has only been tested with JRIS65 R1 hotswap and is likely to work with R2 hotswap. The soldered variant of this PCB requires testing, with actual hardware, before being added.
diff --git a/keyboards/mykeyclub/readme.md b/keyboards/mykeyclub/readme.md
new file mode 100644
index 00000000000..e5df7a26385
--- /dev/null
+++ b/keyboards/mykeyclub/readme.md
@@ -0,0 +1,5 @@
+# Mykeyclub
+
+Mykeyclub is a retailer of mechanical keyboards and related products. They also facilitate the design and manufacture of keyboard products.
+
+**Website:** https://www.mykeyclub.com/
diff --git a/keyboards/nightly_boards/daily60/keyboard.json b/keyboards/nightly_boards/daily60/keyboard.json
index d13ead3251d..d3614d1b440 100644
--- a/keyboards/nightly_boards/daily60/keyboard.json
+++ b/keyboards/nightly_boards/daily60/keyboard.json
@@ -32,11 +32,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -321,7 +325,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/nopunin10did/jabberwocky/v2/keyboard.json b/keyboards/nopunin10did/jabberwocky/v2/keyboard.json
index 177f5235f45..7c688039a37 100644
--- a/keyboards/nopunin10did/jabberwocky/v2/keyboard.json
+++ b/keyboards/nopunin10did/jabberwocky/v2/keyboard.json
@@ -140,8 +140,8 @@
{"matrix": [9, 1], "x": 3, "y": 4.375},
{"matrix": [8, 2], "x": 4.25, "y": 4.375, "w": 1.25},
- {"matrix": [9, 2], "x": 5.25, "y": 4.375},
- {"matrix": [8, 3], "x": 6.25, "y": 4.375},
+ {"matrix": [9, 2], "x": 5.5, "y": 4.375},
+ {"matrix": [8, 3], "x": 6.5, "y": 4.375},
{"matrix": [9, 3], "x": 8.5, "y": 4.375},
{"matrix": [8, 4], "x": 9.5, "y": 4.25},
{"matrix": [9, 4], "x": 10.5, "y": 4.375},
diff --git a/keyboards/nopunin10did/styrkatmel/keyboard.json b/keyboards/nopunin10did/styrkatmel/keyboard.json
new file mode 100644
index 00000000000..98a9597b34d
--- /dev/null
+++ b/keyboards/nopunin10did/styrkatmel/keyboard.json
@@ -0,0 +1,127 @@
+{
+ "keyboard_name": "Styrka Atmel",
+ "manufacturer": "NoPunIn10Did",
+ "url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/nopunin10did/styrkatmel",
+ "maintainer": "NoPunIn10Did",
+ "usb": {
+ "vid": "0x4E50",
+ "pid": "0x5341",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "backlight": false,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "matrix_pins": {
+ "cols": ["F7", "F6", "F5", "F4", "F1", "D7", "B4", "B5", "B6"],
+ "rows": ["B3", "B0", "B1", "B2", "E6", "B7", "C6", "C7", "D6", "D4"]
+ },
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 3
+ },
+ "indicators": {
+ "caps_lock": "F0"
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [1, 1], "x": 3.25, "y": 0},
+ {"matrix": [0, 2], "x": 4.25, "y": 0},
+ {"matrix": [1, 2], "x": 5.25, "y": 0},
+ {"matrix": [0, 3], "x": 6.25, "y": 0},
+ {"matrix": [1, 3], "x": 7.25, "y": 0},
+ {"matrix": [0, 4], "x": 8.25, "y": 0},
+ {"matrix": [1, 4], "x": 9.25, "y": 0},
+ {"matrix": [0, 5], "x": 10.25, "y": 0},
+ {"matrix": [1, 5], "x": 11.25, "y": 0},
+ {"matrix": [0, 6], "x": 12.25, "y": 0},
+ {"matrix": [1, 6], "x": 13.25, "y": 0},
+ {"matrix": [0, 7], "x": 14.25, "y": 0},
+ {"matrix": [0, 8], "x": 15.25, "y": 0, "w": 2},
+ {"matrix": [1, 8], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 0], "x": 0, "y": 1},
+ {"matrix": [3, 0], "x": 1, "y": 1},
+ {"matrix": [2, 1], "x": 2.25, "y": 1, "w":1.5},
+ {"matrix": [3, 1], "x": 3.75, "y": 1},
+ {"matrix": [2, 2], "x": 4.75, "y": 1},
+ {"matrix": [3, 2], "x": 5.75, "y": 1},
+ {"matrix": [2, 3], "x": 6.75, "y": 1},
+ {"matrix": [3, 3], "x": 7.75, "y": 1},
+ {"matrix": [2, 4], "x": 8.75, "y": 1},
+ {"matrix": [3, 4], "x": 9.75, "y": 1},
+ {"matrix": [2, 5], "x": 10.75, "y": 1},
+ {"matrix": [3, 5], "x": 11.75, "y": 1},
+ {"matrix": [2, 6], "x": 12.75, "y": 1},
+ {"matrix": [3, 6], "x": 13.75, "y": 1},
+ {"matrix": [2, 7], "x": 14.75, "y": 1},
+ {"matrix": [3, 8], "x": 17.25, "y": 1},
+
+ {"matrix": [4, 0], "x": 0, "y": 2},
+ {"matrix": [5, 0], "x": 1, "y": 2},
+ {"matrix": [4, 1], "x": 2.25, "y": 2, "w":1.25},
+ {"matrix": [5, 1], "x": 4, "y": 2},
+ {"matrix": [4, 2], "x": 5, "y": 2},
+ {"matrix": [5, 2], "x": 6, "y": 2},
+ {"matrix": [4, 3], "x": 7, "y": 2},
+ {"matrix": [5, 3], "x": 8, "y": 2},
+ {"matrix": [4, 4], "x": 9, "y": 2},
+ {"matrix": [5, 4], "x": 10, "y": 2},
+ {"matrix": [4, 5], "x": 11, "y": 2},
+ {"matrix": [5, 5], "x": 12, "y": 2},
+ {"matrix": [4, 6], "x": 13, "y": 2},
+ {"matrix": [5, 6], "x": 14, "y": 2},
+ {"matrix": [4, 7], "x": 15, "y": 2},
+ {"matrix": [4, 8], "x": 16, "y": 1, "w":1.25, "h":2},
+ {"matrix": [5, 8], "x": 17.25, "y": 2},
+
+ {"matrix": [6, 0], "x": 0, "y": 3},
+ {"matrix": [7, 0], "x": 1, "y": 3},
+ {"matrix": [6, 1], "x": 2.25, "y": 3, "w":1.25},
+ {"matrix": [7, 1], "x": 3.5, "y": 3},
+ {"matrix": [6, 2], "x": 4.5, "y": 3},
+ {"matrix": [7, 2], "x": 5.5, "y": 3},
+ {"matrix": [6, 3], "x": 6.5, "y": 3},
+ {"matrix": [7, 3], "x": 7.5, "y": 3},
+ {"matrix": [6, 4], "x": 8.5, "y": 3},
+ {"matrix": [7, 4], "x": 9.5, "y": 3},
+ {"matrix": [6, 5], "x": 10.5, "y": 3},
+ {"matrix": [7, 5], "x": 11.5, "y": 3},
+ {"matrix": [6, 6], "x": 12.5, "y": 3},
+ {"matrix": [7, 6], "x": 13.5, "y": 3},
+ {"matrix": [6, 7], "x": 14.5, "y": 3, "w":1.75},
+ {"matrix": [6, 8], "x": 16.25, "y": 3},
+ {"matrix": [7, 8], "x": 17.25, "y": 3},
+
+ {"matrix": [8, 0], "x": 0, "y": 4},
+ {"matrix": [9, 0], "x": 1, "y": 4},
+ {"matrix": [8, 1], "x": 2.25, "y": 4, "w":1.25},
+ {"matrix": [9, 1], "x": 3.5, "y": 4, "w":1.25},
+ {"matrix": [8, 2], "x": 4.75, "y": 4, "w":1.25},
+ {"matrix": [8, 4], "x": 6, "y": 4, "w":7},
+ {"matrix": [8, 6], "x": 12.25, "y": 4, "w":1.25},
+ {"matrix": [9, 6], "x": 13.5, "y": 4, "w":1.25},
+ {"matrix": [8, 7], "x": 15.25, "y": 4},
+ {"matrix": [8, 8], "x": 16.25, "y": 4},
+ {"matrix": [9, 8], "x": 17.25, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/nopunin10did/styrkatmel/keymaps/default/keymap.c b/keyboards/nopunin10did/styrkatmel/keymaps/default/keymap.c
new file mode 100644
index 00000000000..30feaae1cec
--- /dev/null
+++ b/keyboards/nopunin10did/styrkatmel/keymaps/default/keymap.c
@@ -0,0 +1,48 @@
+/* Copyright 2024 W. Alex Ronke, a.k.a. NoPunIn10Did (w.alex.ronke@gmail.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap BASE: (Base Layer) Default Layer
+ * .-------.,---------------------------------------------------------------.
+ * | F1| F2||Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BkSpc |Ins|
+ * |---|---||---------------------------------------------------------------|
+ * | F3| F4||Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |Del|
+ * |---|---||---------------------------------------------------------------|
+ * | F5| F6||CAPS | A| S| D| F| G| H| J| K| L| ;| '| \| Ent|PgU|
+ * |---|---||---------------------------------------------------------------|
+ * | F7| F8||Shft| <>| Z| X| C| V| B| N| M| ,| .| /| Shift| Up|PgD|
+ * |---|---||---------------------------------------------------------------|
+ * | F9|F10||LCtl|LGUI|LAlt| Space | Alt| FN||| Lt| Dn| Rt|
+ * `-------'`---------------------------------------------------------------'
+ */
+[0] = LAYOUT(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ KC_F7, KC_F8, 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_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+[1] = LAYOUT(
+ QK_BOOT, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_INS,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ KC_F7, KC_F8, 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_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+};
diff --git a/keyboards/nopunin10did/styrkatmel/readme.md b/keyboards/nopunin10did/styrkatmel/readme.md
new file mode 100644
index 00000000000..df9656d1a67
--- /dev/null
+++ b/keyboards/nopunin10did/styrkatmel/readme.md
@@ -0,0 +1,25 @@
+# Viktus Styrka Atmel Edition
+
+The Viktus Styrka is a 65% + left macro block created in a collaboration of OneCreativeMind and BlindAssassin111 (Viktus owner).
+
+This is a custom Atmel ISO Hotswap PCB for the Viktus Styrka designed and maintained by NoPunIn10Did.
+
+* Firmware Maintainer: [nopunin10did](https://github.com/nopunin10did)
+* Hardware Supported: Styrka
+* Hardware Availability:
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nopunin10did/styrkatmel:default
+
+Flashing example for this keyboard:
+
+ make nopunin10did/styrkatmel:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at the top left in the macro columns (default: F1) and plug in the keyboard.
+* **Physical reset button**: Briefly press the button on the back of the PCB.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT`. For the default layout, hold down the rightmost 1.25u key on the bottom row, then tap the top-left key in the macro columns.
\ No newline at end of file
diff --git a/keyboards/novelkeys/nk_classic_tkl/keymaps/default/keymap.c b/keyboards/novelkeys/nk_classic_tkl/keymaps/default/keymap.c
index a99350ef7fc..a0ea79c45f4 100644
--- a/keyboards/novelkeys/nk_classic_tkl/keymaps/default/keymap.c
+++ b/keyboards/novelkeys/nk_classic_tkl/keymaps/default/keymap.c
@@ -43,6 +43,10 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
for (uint8_t i = 50; i <= 55; i++) {
rgb_matrix_set_color(i, 255, 86, 0);
}
+ } else if ((rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP) || (rgb_matrix_get_mode() == RGB_MATRIX_DIGITAL_RAIN)) {
+ for (uint8_t i = 50; i <= 55; i++) {
+ rgb_matrix_set_color(i, 0, 0, 0);
+ }
}
return false;
}
diff --git a/keyboards/novelkeys/nk_classic_tkl_iso/config.h b/keyboards/novelkeys/nk_classic_tkl_iso/config.h
new file mode 100644
index 00000000000..62744a2589b
--- /dev/null
+++ b/keyboards/novelkeys/nk_classic_tkl_iso/config.h
@@ -0,0 +1,25 @@
+/* Copyright 2024 Yiancar-Designs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+/* RGB options */
+
+#define WS2812_PWM_DRIVER PWMD3
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM3
+#define WS2812_DMA_CHANNEL 3
diff --git a/keyboards/novelkeys/nk_classic_tkl_iso/halconf.h b/keyboards/novelkeys/nk_classic_tkl_iso/halconf.h
new file mode 100644
index 00000000000..c7f5bab5c85
--- /dev/null
+++ b/keyboards/novelkeys/nk_classic_tkl_iso/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2024 Yiancar-Designs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/novelkeys/nk_classic_tkl_iso/keyboard.json b/keyboards/novelkeys/nk_classic_tkl_iso/keyboard.json
new file mode 100755
index 00000000000..12085cbacc1
--- /dev/null
+++ b/keyboards/novelkeys/nk_classic_tkl_iso/keyboard.json
@@ -0,0 +1,270 @@
+{
+ "manufacturer": "Yiancar-Designs",
+ "keyboard_name": "NK_ Classic TKL ISO",
+ "maintainer": "Yiancar",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["B12", "B13", "B14", "B15", "A8", "A10", "A14", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "A0", "A1"],
+ "rows": ["B11", "B10", "B2", "B1", "A9", "A5"]
+ },
+ "processor": "STM32F072",
+ "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_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": [0, 0], "x": 0, "y": 0, "flags": 1},
+ {"matrix": [0, 1], "x": 26, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 38, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 51, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 83, "y": 0, "flags": 1},
+ {"matrix": [0, 6], "x": 96, "y": 0, "flags": 1},
+ {"matrix": [0, 7], "x": 109, "y": 0, "flags": 1},
+ {"matrix": [0, 8], "x": 122, "y": 0, "flags": 1},
+ {"matrix": [0, 9], "x": 141, "y": 0, "flags": 4},
+ {"matrix": [0, 10], "x": 154, "y": 0, "flags": 4},
+ {"matrix": [0, 11], "x": 166, "y": 0, "flags": 4},
+ {"matrix": [0, 12], "x": 179, "y": 0, "flags": 4},
+ {"matrix": [0, 14], "x": 195, "y": 0, "flags": 1},
+ {"matrix": [0, 15], "x": 208, "y": 0, "flags": 1},
+ {"matrix": [0, 16], "x": 221, "y": 0, "flags": 1},
+ {"matrix": [1, 16], "x": 221, "y": 15, "flags": 1},
+ {"matrix": [1, 15], "x": 208, "y": 15, "flags": 1},
+ {"matrix": [1, 14], "x": 195, "y": 15, "flags": 1},
+ {"matrix": [1, 13], "x": 173, "y": 15, "flags": 1},
+ {"matrix": [1, 12], "x": 154, "y": 15, "flags": 4},
+ {"matrix": [1, 11], "x": 141, "y": 15, "flags": 4},
+ {"matrix": [1, 10], "x": 128, "y": 15, "flags": 4},
+ {"matrix": [1, 9], "x": 115, "y": 15, "flags": 4},
+ {"matrix": [1, 8], "x": 102, "y": 15, "flags": 4},
+ {"matrix": [1, 7], "x": 90, "y": 15, "flags": 4},
+ {"matrix": [1, 6], "x": 77, "y": 15, "flags": 4},
+ {"matrix": [1, 5], "x": 64, "y": 15, "flags": 4},
+ {"matrix": [1, 4], "x": 51, "y": 15, "flags": 4},
+ {"matrix": [1, 3], "x": 38, "y": 15, "flags": 4},
+ {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4},
+ {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4},
+ {"matrix": [1, 0], "x": 0, "y": 15, "flags": 4},
+ {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1},
+ {"matrix": [2, 1], "x": 19, "y": 27, "flags": 4},
+ {"matrix": [2, 2], "x": 32, "y": 27, "flags": 4},
+ {"matrix": [2, 3], "x": 45, "y": 27, "flags": 4},
+ {"matrix": [2, 4], "x": 58, "y": 27, "flags": 4},
+ {"matrix": [2, 5], "x": 70, "y": 27, "flags": 4},
+ {"matrix": [2, 6], "x": 83, "y": 27, "flags": 4},
+ {"matrix": [2, 7], "x": 96, "y": 27, "flags": 4},
+ {"matrix": [2, 8], "x": 109, "y": 27, "flags": 4},
+ {"matrix": [2, 9], "x": 122, "y": 27, "flags": 4},
+ {"matrix": [2, 10], "x": 134, "y": 27, "flags": 4},
+ {"matrix": [2, 11], "x": 147, "y": 27, "flags": 4},
+ {"matrix": [2, 12], "x": 160, "y": 27, "flags": 4},
+ {"matrix": [3, 13], "x": 178, "y": 21, "flags": 1},
+ {"matrix": [2, 14], "x": 195, "y": 27, "flags": 1},
+ {"matrix": [2, 15], "x": 208, "y": 27, "flags": 1},
+ {"matrix": [2, 16], "x": 221, "y": 27, "flags": 1},
+ {"x": 224, "y": 34, "flags": 9},
+ {"x": 218, "y": 34, "flags": 9},
+ {"x": 211, "y": 34, "flags": 9},
+ {"x": 205, "y": 34, "flags": 9},
+ {"x": 198, "y": 34, "flags": 9},
+ {"x": 192, "y": 34, "flags": 9},
+ {"matrix": [3, 12], "x": 163, "y": 40, "flags": 4},
+ {"matrix": [3, 11], "x": 150, "y": 40, "flags": 4},
+ {"matrix": [3, 10], "x": 138, "y": 40, "flags": 4},
+ {"matrix": [3, 9], "x": 125, "y": 40, "flags": 4},
+ {"matrix": [3, 8], "x": 112, "y": 40, "flags": 4},
+ {"matrix": [3, 7], "x": 99, "y": 40, "flags": 4},
+ {"matrix": [3, 6], "x": 86, "y": 40, "flags": 4},
+ {"matrix": [3, 5], "x": 74, "y": 40, "flags": 4},
+ {"matrix": [3, 4], "x": 61, "y": 40, "flags": 4},
+ {"matrix": [3, 3], "x": 48, "y": 40, "flags": 4},
+ {"matrix": [3, 2], "x": 35, "y": 40, "flags": 4},
+ {"matrix": [3, 1], "x": 22, "y": 40, "flags": 4},
+ {"matrix": [3, 0], "x": 5, "y": 40, "flags": 1},
+ {"matrix": [4, 0], "x": 1, "y": 52, "flags": 1},
+ {"matrix": [4, 1], "x": 16, "y": 52, "flags": 4},
+ {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4},
+ {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4},
+ {"matrix": [4, 4], "x": 54, "y": 52, "flags": 4},
+ {"matrix": [4, 5], "x": 67, "y": 52, "flags": 4},
+ {"matrix": [4, 6], "x": 80, "y": 52, "flags": 4},
+ {"matrix": [4, 7], "x": 93, "y": 52, "flags": 4},
+ {"matrix": [4, 8], "x": 106, "y": 52, "flags": 4},
+ {"matrix": [4, 9], "x": 118, "y": 52, "flags": 4},
+ {"matrix": [4, 10], "x": 131, "y": 52, "flags": 4},
+ {"matrix": [4, 11], "x": 144, "y": 52, "flags": 4},
+ {"matrix": [4, 12], "x": 168, "y": 52, "flags": 1},
+ {"matrix": [4, 15], "x": 208, "y": 52, "flags": 1},
+ {"matrix": [5, 16], "x": 221, "y": 64, "flags": 1},
+ {"matrix": [5, 15], "x": 208, "y": 64, "flags": 1},
+ {"matrix": [5, 14], "x": 195, "y": 64, "flags": 1},
+ {"matrix": [5, 13], "x": 176, "y": 64, "flags": 1},
+ {"matrix": [5, 12], "x": 160, "y": 64, "flags": 1},
+ {"matrix": [5, 11], "x": 144, "y": 64, "flags": 1},
+ {"matrix": [5, 6], "x": 90, "y": 64, "flags": 4},
+ {"matrix": [5, 2], "x": 35, "y": 64, "flags": 1},
+ {"matrix": [5, 1], "x": 19, "y": 64, "flags": 1},
+ {"matrix": [5, 0], "x": 3, "y": 64, "flags": 1}
+ ],
+ "max_brightness": 120,
+ "sleep": true
+ },
+ "url": "www.yiancar-designs.com",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x4E55",
+ "vid": "0x8968"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B0"
+ },
+ "community_layouts": ["tkl_iso_tsangan"],
+ "layouts": {
+ "LAYOUT_tkl_iso_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [0, 2], "x": 3, "y": 0},
+ {"matrix": [0, 3], "x": 4, "y": 0},
+ {"matrix": [0, 4], "x": 5, "y": 0},
+ {"matrix": [0, 5], "x": 6.5, "y": 0},
+ {"matrix": [0, 6], "x": 7.5, "y": 0},
+ {"matrix": [0, 7], "x": 8.5, "y": 0},
+ {"matrix": [0, 8], "x": 9.5, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12, "y": 0},
+ {"matrix": [0, 11], "x": 13, "y": 0},
+ {"matrix": [0, 12], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/novelkeys/nk_classic_tkl_iso/keymaps/default/keymap.c b/keyboards/novelkeys/nk_classic_tkl_iso/keymaps/default/keymap.c
new file mode 100644
index 00000000000..8939cde8a4c
--- /dev/null
+++ b/keyboards/novelkeys/nk_classic_tkl_iso/keymaps/default/keymap.c
@@ -0,0 +1,73 @@
+/* Copyright 2024 Yiancar-Designs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+enum my_keycodes {
+ RETRO_RGB = QK_USER_0
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_tkl_iso_tsangan( /* Base */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_tkl_iso_tsangan( /* FN */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, KC_VOLD, KC_MUTE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, _______, _______,
+ _______, _______, _______, RETRO_RGB, _______, _______, _______, _______, _______, _______),
+
+};
+
+bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
+ if (host_keyboard_led_state().caps_lock) {
+ for (uint8_t i = 50; i <= 55; i++) {
+ rgb_matrix_set_color(i, 255, 86, 0);
+ }
+ } else if ((rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP) || (rgb_matrix_get_mode() == RGB_MATRIX_DIGITAL_RAIN)) {
+ for (uint8_t i = 50; i <= 55; i++) {
+ rgb_matrix_set_color(i, 0, 0, 0);
+ }
+ }
+ return false;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RETRO_RGB:
+ if (record->event.pressed) {
+ switch (rgb_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ rgb_matrix_set_flags(LED_FLAG_INDICATOR);
+ }
+ break;
+ default: {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ }
+ break;
+ }
+ }
+ return false; // Skip all further processing of this key
+ default:
+ return true; // Process all other keycodes normally
+ }
+}
diff --git a/keyboards/novelkeys/nk_classic_tkl_iso/mcuconf.h b/keyboards/novelkeys/nk_classic_tkl_iso/mcuconf.h
new file mode 100644
index 00000000000..ec984442ed0
--- /dev/null
+++ b/keyboards/novelkeys/nk_classic_tkl_iso/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2024 Yiancar-Designs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
diff --git a/keyboards/novelkeys/nk_classic_tkl_iso/readme.md b/keyboards/novelkeys/nk_classic_tkl_iso/readme.md
new file mode 100644
index 00000000000..d748f2476a4
--- /dev/null
+++ b/keyboards/novelkeys/nk_classic_tkl_iso/readme.md
@@ -0,0 +1,32 @@
+# NK Classic TKL
+
+This is a TKL ISO PCB. It supports VIA and full per-key RGB.
+
+* Keyboard Maintainer: [Yiancar](https://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A TKL keyboard with STM32F072CB or APM compatible
+* Hardware Availability: https://novelkeys.com/
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make novelkeys/nk_classic_tkl_iso:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+### Reset
+
+- Unplug
+- Hold Escape
+- Plug In
+- Unplug
+- Release Escape
+
+### Flash
+
+- Unplug
+- Hold Escape
+- Plug In
+- Flash using QMK Toolbox or dfu-util (`make novelkeys/nk_classic_tkl_iso::dfu-util`)
diff --git a/keyboards/novelkeys/nk_classic_tkl_iso/rules.mk b/keyboards/novelkeys/nk_classic_tkl_iso/rules.mk
new file mode 100644
index 00000000000..0ab54aaaf71
--- /dev/null
+++ b/keyboards/novelkeys/nk_classic_tkl_iso/rules.mk
@@ -0,0 +1,2 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
diff --git a/keyboards/novelkeys/skelett60/keyboard.json b/keyboards/novelkeys/skelett60/keyboard.json
index 1a8f988b018..145d24b3af9 100755
--- a/keyboards/novelkeys/skelett60/keyboard.json
+++ b/keyboards/novelkeys/skelett60/keyboard.json
@@ -25,7 +25,24 @@
"pid": "0x7336",
"vid": "0x8968"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift",
+ "60_iso_wkl",
+ "60_iso_wkl_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -808,7 +825,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/noxary/260/keyboard.json b/keyboards/noxary/260/keyboard.json
index b5f876f5d91..d5353d4244e 100644
--- a/keyboards/noxary/260/keyboard.json
+++ b/keyboards/noxary/260/keyboard.json
@@ -41,7 +41,15 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_iso", "60_hhkb", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_iso",
+ "60_hhkb",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -323,7 +331,7 @@
{"matrix": [4, 12], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/noxary/valhalla_v2/valhalla_v2.c b/keyboards/noxary/valhalla_v2/valhalla_v2.c
new file mode 100644
index 00000000000..2cd32d51492
--- /dev/null
+++ b/keyboards/noxary/valhalla_v2/valhalla_v2.c
@@ -0,0 +1,25 @@
+/* Copyright 2023 Gondolindrim
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+bool led_update_kb(led_t led_state) {
+ if (!led_update_user(led_state)) {
+ return false;
+ }
+ (led_state.caps_lock && is_backlight_enabled()) ? backlight_set(get_backlight_level()) : backlight_set(0);
+ return true;
+}
diff --git a/keyboards/pearlboards/pandora/keyboard.json b/keyboards/pearlboards/pandora/keyboard.json
index 869852b58d6..670aa6f75ab 100644
--- a/keyboards/pearlboards/pandora/keyboard.json
+++ b/keyboards/pearlboards/pandora/keyboard.json
@@ -71,11 +71,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -427,7 +431,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/phdesign/phac/keyboard.json b/keyboards/phdesign/phac/keyboard.json
new file mode 100644
index 00000000000..660cf6c2ad4
--- /dev/null
+++ b/keyboards/phdesign/phac/keyboard.json
@@ -0,0 +1,46 @@
+{
+ "manufacturer": "PHDesign",
+ "keyboard_name": "phac",
+ "maintainer": "nonameCCC",
+ "bootloader": "rp2040",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP7", "pin_b": "GP8", "resolution": 1},
+ {"pin_a": "GP10", "pin_b": "GP9", "resolution": 1}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "direct": [
+ ["GP1", "GP6", "GP5", "GP4", "GP3", "GP2", "GP0"]
+ ]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "2.2.0",
+ "pid": "0x0001",
+ "vid": "0x5048"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 2.5, "y": 0},
+ {"matrix": [0, 1], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [0, 2], "x": 1.5, "y": 1, "w": 1.5},
+ {"matrix": [0, 3], "x": 3, "y": 1, "w": 1.5},
+ {"matrix": [0, 4], "x": 4.5, "y": 1, "w": 1.5},
+ {"matrix": [0, 5], "x": 0.375, "y": 2, "w": 2.25},
+ {"matrix": [0, 6], "x": 3.375, "y": 2, "w": 2.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/phdesign/phac/keymaps/default/keymap.c b/keyboards/phdesign/phac/keymaps/default/keymap.c
new file mode 100644
index 00000000000..630cca64a78
--- /dev/null
+++ b/keyboards/phdesign/phac/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT(
+ KC_B,
+ KC_S, KC_D, KC_K, KC_L,
+ KC_V, KC_N
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_BL] = { ENCODER_CCW_CW(MS_UP, MS_DOWN), ENCODER_CCW_CW(MS_LEFT, MS_RGHT) },
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/phdesign/phac/keymaps/default/rules.mk b/keyboards/phdesign/phac/keymaps/default/rules.mk
new file mode 100644
index 00000000000..a40474b4d5c
--- /dev/null
+++ b/keyboards/phdesign/phac/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/phdesign/phac/readme.md b/keyboards/phdesign/phac/readme.md
new file mode 100644
index 00000000000..88801888dbd
--- /dev/null
+++ b/keyboards/phdesign/phac/readme.md
@@ -0,0 +1,26 @@
+# phac
+
+
+
+A rhythm game controller with 7 keys and 2 encoders on it.
+
+* Keyboard Maintainer: [Xufeng Tao](https://github.com/nonameCCC)
+* Hardware Supported: RP2040 minimal system
+* Hardware Availability: https://m.tb.cn/h.gLFXLaX?tk=7DpL3TuPVxx (currently not available outside of mainland China)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make phdesign/phac:default
+
+Flashing example for this keyboard:
+
+ make phdesign/phac: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,5) in the matrix (the START button) and plug in the controller
+* **Physical reset button**: Short pin hole SW1 on the back of the PCB (not recommended as the case is not easy to open)
diff --git a/keyboards/piantoruv44/config.h b/keyboards/piantoruv44/config.h
new file mode 100644
index 00000000000..e6ba4c0be93
--- /dev/null
+++ b/keyboards/piantoruv44/config.h
@@ -0,0 +1,12 @@
+// Copyright 2022 beekeeb
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
diff --git a/keyboards/piantoruv44/keyboard.json b/keyboards/piantoruv44/keyboard.json
new file mode 100644
index 00000000000..e2374dca6da
--- /dev/null
+++ b/keyboards/piantoruv44/keyboard.json
@@ -0,0 +1,98 @@
+{
+ "manufacturer": "azhizhinov",
+ "keyboard_name": "PIANTORUV44",
+ "maintainer": "azhizhinov",
+ "bootloader": "rp2040",
+ "bootmagic": {
+ "matrix": [0, 5]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "direct": [
+ ["GP5", "GP4", "GP11", "GP15", "GP3", "GP2"],
+ ["GP22", "GP20", "GP10", "GP14", "GP9", "GP8"],
+ ["GP21", "GP19", "GP6", "GP7", "GP13", "GP12"],
+ ["GP17", "GP18", "GP16", "GP26", null, null]
+ ]
+ },
+ "processor": "RP2040",
+ "split": {
+ "enabled": true,
+ "matrix_pins": {
+ "right": {
+ "direct": [
+ ["GP2", "GP3", "GP15", "GP11", "GP4", "GP5"],
+ ["GP8", "GP9", "GP14", "GP10", "GP20", "GP22"],
+ ["GP12", "GP13", "GP7", "GP6", "GP19", "GP21"],
+ ["GP26", "GP16", "GP18", "GP17", null, null]
+ ]
+ }
+ },
+ "serial": {
+ "driver": "vendor"
+ }
+ },
+ "url": "https://github.com/azhizhinov/PIANTORUV44",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0004",
+ "vid": "0x415A"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.25},
+ {"matrix": [0, 1], "x": 1, "y": 0.25},
+ {"matrix": [0, 2], "x": 2, "y": 0.125},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.125},
+ {"matrix": [0, 5], "x": 5, "y": 0.25},
+ {"matrix": [4, 0], "x": 8, "y": 0.25},
+ {"matrix": [4, 1], "x": 9, "y": 0.125},
+ {"matrix": [4, 2], "x": 10, "y": 0},
+ {"matrix": [4, 3], "x": 11, "y": 0.125},
+ {"matrix": [4, 4], "x": 12, "y": 0.25},
+ {"matrix": [4, 5], "x": 13, "y": 0.25},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.125},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.125},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [5, 0], "x": 8, "y": 1.25},
+ {"matrix": [5, 1], "x": 9, "y": 1.125},
+ {"matrix": [5, 2], "x": 10, "y": 1},
+ {"matrix": [5, 3], "x": 11, "y": 1.125},
+ {"matrix": [5, 4], "x": 12, "y": 1.25},
+ {"matrix": [5, 5], "x": 13, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25},
+ {"matrix": [2, 1], "x": 1, "y": 2.25},
+ {"matrix": [2, 2], "x": 2, "y": 2.125},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.125},
+ {"matrix": [2, 5], "x": 5, "y": 2.25},
+ {"matrix": [6, 0], "x": 8, "y": 2.25},
+ {"matrix": [6, 1], "x": 9, "y": 2.125},
+ {"matrix": [6, 2], "x": 10, "y": 2},
+ {"matrix": [6, 3], "x": 11, "y": 2.125},
+ {"matrix": [6, 4], "x": 12, "y": 2.25},
+ {"matrix": [6, 5], "x": 13, "y": 2.25},
+ {"matrix": [3, 0], "x": 2.5, "y": 3},
+ {"matrix": [3, 1], "x": 3.5, "y": 3.25},
+ {"matrix": [3, 2], "x": 4.5, "y": 3.5},
+ {"matrix": [3, 3], "x": 5.5, "y": 3.75},
+ {"matrix": [7, 0], "x": 7.5, "y": 3.75},
+ {"matrix": [7, 1], "x": 8.5, "y": 3.5},
+ {"matrix": [7, 2], "x": 9.5, "y": 3.25},
+ {"matrix": [7, 3], "x": 10.5, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/piantoruv44/keymaps/default/keymap.c b/keyboards/piantoruv44/keymaps/default/keymap.c
new file mode 100644
index 00000000000..49d5e4d178e
--- /dev/null
+++ b/keyboards/piantoruv44/keymaps/default/keymap.c
@@ -0,0 +1,30 @@
+// Copyright 2021 azhizhinov (@azhizhinov)
+// SPDX-License-Identifier: GPL-2.0-or-late
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ 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_TAB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RBRC,
+ KC_LALT, KC_LSFT, MO(1), KC_BSPC, KC_ENT, MO(2), KC_SPC, RCTL(KC_BSPC)
+ ),
+ [1] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_UP, KC_RGHT, KC_NO, KC_HOME, KC_NO,
+ KC_LSFT, KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DOWN, KC_NO, KC_NO, KC_END, KC_RALT,
+ KC_LALT, KC_LGUI, KC_TRNS, KC_ESC, KC_ENT, MO(3), KC_SPC, RCTL(KC_BSPC)
+ ),
+ [2] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_LCTL, KC_BSPC, KC_C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_LSFT, KC_X, KC_V, KC_S, KC_L, KC_NO, KC_UNDS, KC_PLUS, KC_PMNS, KC_NO, KC_NO, KC_RALT,
+ KC_LALT, KC_LGUI, MO(3), KC_ESC, KC_ENT, KC_TRNS, KC_SPC, RCTL(KC_BSPC)
+ ),
+ [3] = LAYOUT(
+ KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
+ KC_LSFT, KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_RALT,
+ KC_LALT, KC_LGUI, KC_TRNS, KC_ESC, KC_ENT, KC_TRNS, KC_SPC, RCTL(KC_BSPC)
+ )
+};
diff --git a/keyboards/piantoruv44/readme.md b/keyboards/piantoruv44/readme.md
new file mode 100644
index 00000000000..0fe5fe2d0c0
--- /dev/null
+++ b/keyboards/piantoruv44/readme.md
@@ -0,0 +1,27 @@
+# Piantor UV 44
+
+
+
+PiantorUV44 is a Piantor/Cantor fork with Raspberry Pi Pico, hybrid hotswap socket and soldered-in switches support and flippable PCB.
+
+* Keyboard Maintainer: [azhizhinov](https://github.com/azhizhinov)
+* Hardware Supported: RP2040
+* Hardware Availability: https://github.com/azhizhinov/PIANTORUV44
+
+Make example for this keyboard (after setting up your build environment):
+
+ make piantoruv44:default
+
+Flashing example for this keyboard:
+
+ make piantoruv44:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset button**: Hold the `BOOT` button on the Pico and press the `RST` button on the Pico, release the the `RST` button before the `BOOT` button.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
+Once you enter the bootloader, the keyboard will show up as a USB device on your computer, you could drag and drop a firmware file to flash it, but I recommend using the flash commands for the respective side.
diff --git a/keyboards/protozoa/cassini/keyboard.json b/keyboards/protozoa/cassini/keyboard.json
index 696480024fe..551c3091ed3 100644
--- a/keyboards/protozoa/cassini/keyboard.json
+++ b/keyboards/protozoa/cassini/keyboard.json
@@ -29,11 +29,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -315,7 +319,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/quarkeys/z60/solder/keyboard.json b/keyboards/quarkeys/z60/solder/keyboard.json
index 52514fc7a3a..e85f7e6dc8c 100644
--- a/keyboards/quarkeys/z60/solder/keyboard.json
+++ b/keyboards/quarkeys/z60/solder/keyboard.json
@@ -46,9 +46,18 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT": "LAYOUT_all"
+ "LAYOUT": "LAYOUT_all",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_iso", "60_iso_tsangan", "60_iso_split_bs_rshift"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso",
+ "60_iso_tsangan",
+ "60_iso_split_bs_rshift"
+ ],
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -331,7 +340,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/rationalist/ratio60_hotswap/rev_a/keyboard.json b/keyboards/rationalist/ratio60_hotswap/rev_a/keyboard.json
index 5d3763d52d9..1fd52f032b7 100644
--- a/keyboards/rationalist/ratio60_hotswap/rev_a/keyboard.json
+++ b/keyboards/rationalist/ratio60_hotswap/rev_a/keyboard.json
@@ -45,7 +45,16 @@
"ws2812": {
"pin": "A8"
},
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_hhkb", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_hhkb"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -307,7 +316,7 @@
{"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/rmi_kb/mona/v1/keyboard.json b/keyboards/rmi_kb/mona/v1/keyboard.json
index 7bd5f56e142..9d8f66af2f7 100644
--- a/keyboards/rmi_kb/mona/v1/keyboard.json
+++ b/keyboards/rmi_kb/mona/v1/keyboard.json
@@ -28,7 +28,8 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_iso_split_bs_rshift"
+ "LAYOUT_all": "LAYOUT_60_iso_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_60_ansi": {
@@ -100,7 +101,7 @@
{"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/rmi_kb/mona/v1_1/keyboard.json b/keyboards/rmi_kb/mona/v1_1/keyboard.json
index 7f25b8da478..b1e1f27fc01 100644
--- a/keyboards/rmi_kb/mona/v1_1/keyboard.json
+++ b/keyboards/rmi_kb/mona/v1_1/keyboard.json
@@ -24,6 +24,9 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -94,7 +97,7 @@
{"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/rmi_kb/mona/v32a/keyboard.json b/keyboards/rmi_kb/mona/v32a/keyboard.json
index 363ea3438f5..e4b7760813e 100644
--- a/keyboards/rmi_kb/mona/v32a/keyboard.json
+++ b/keyboards/rmi_kb/mona/v32a/keyboard.json
@@ -24,6 +24,9 @@
},
"processor": "atmega32a",
"bootloader": "usbasploader",
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -94,7 +97,7 @@
{"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/sawnsprojects/krush/krush60/solder/keyboard.json b/keyboards/sawnsprojects/krush/krush60/solder/keyboard.json
index 4f5ca808ceb..17c0b00f94d 100644
--- a/keyboards/sawnsprojects/krush/krush60/solder/keyboard.json
+++ b/keyboards/sawnsprojects/krush/krush60/solder/keyboard.json
@@ -46,7 +46,8 @@
"bootloader": "atmel-dfu",
"layout_aliases": {
"LAYOUT_60_ansi_arrow_split_bs_7u_spc": "LAYOUT_60_ansi_arrow_tsangan_split_bs",
- "LAYOUT_60_ansi_arrow_7u_spc": "LAYOUT_60_ansi_arrow_tsangan"
+ "LAYOUT_60_ansi_arrow_7u_spc": "LAYOUT_60_ansi_arrow_tsangan",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": ["60_ansi", "60_ansi_arrow"],
"layouts": {
@@ -1114,7 +1115,7 @@
{"matrix": [9, 7], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/sawnsprojects/krush/krush60/solder/keymaps/60_tsangan_hhkb/keymap.c b/keyboards/sawnsprojects/krush/krush60/solder/keymaps/60_tsangan_hhkb/keymap.c
index de10ed2916c..69d283bfd2c 100644
--- a/keyboards/sawnsprojects/krush/krush60/solder/keymaps/60_tsangan_hhkb/keymap.c
+++ b/keyboards/sawnsprojects/krush/krush60/solder/keymaps/60_tsangan_hhkb/keymap.c
@@ -18,7 +18,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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, _______,
_______, UG_TOGG, UG_NEXT, UG_HUEU, UG_HUED, UG_SATU, UG_SATD, UG_VALU, UG_VALD, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______,
diff --git a/keyboards/sawnsprojects/okayu/info.json b/keyboards/sawnsprojects/okayu/info.json
index 89743590368..08c5afe6881 100644
--- a/keyboards/sawnsprojects/okayu/info.json
+++ b/keyboards/sawnsprojects/okayu/info.json
@@ -22,12 +22,16 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"matrix_pins": {
"cols": ["A9", "A0", "A8", "C13", "A1", "A2", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4"],
"rows": ["B3", "A15", "A3", "A10", "B14"]
@@ -338,7 +342,7 @@
{"label": "K4D", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/scottokeebs/scotto69/keyboard.json b/keyboards/scottokeebs/scotto69/keyboard.json
new file mode 100644
index 00000000000..144e7b3a7e5
--- /dev/null
+++ b/keyboards/scottokeebs/scotto69/keyboard.json
@@ -0,0 +1,107 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "Scotto69 (PCB Edition)",
+ "maintainer": "joe-scotto",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B15", "pin_b": "B14"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["A7", "A8", "A14", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "C14", "C15", "A3", "A4", "A5", "A6"],
+ "rows": ["B11", "B10", "B2", "B1", "B0"]
+ },
+ "processor": "STM32F072",
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0030",
+ "vid": "0x534B"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0.5},
+ {"matrix": [0, 2], "x": 3, "y": 0.5},
+ {"matrix": [0, 3], "x": 4, "y": 0.5},
+ {"matrix": [0, 4], "x": 5, "y": 0.5},
+ {"matrix": [0, 5], "x": 6, "y": 0.5},
+ {"matrix": [0, 6], "x": 7, "y": 0.5},
+ {"matrix": [0, 7], "x": 8, "y": 0.5},
+ {"matrix": [0, 8], "x": 9, "y": 0.5},
+ {"matrix": [0, 9], "x": 10, "y": 0.5},
+ {"matrix": [0, 10], "x": 11, "y": 0.5},
+ {"matrix": [0, 11], "x": 12, "y": 0.5},
+ {"matrix": [0, 12], "x": 13, "y": 0.5},
+ {"matrix": [0, 13], "x": 15, "y": 0},
+ {"matrix": [0, 14], "x": 16, "y": 0},
+ {"matrix": [0, 15], "x": 17, "y": 0},
+ {"matrix": [0, 16], "x": 18, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 2, "y": 1.5},
+ {"matrix": [1, 2], "x": 3, "y": 1.5},
+ {"matrix": [1, 3], "x": 4, "y": 1.5},
+ {"matrix": [1, 4], "x": 5, "y": 1.5},
+ {"matrix": [1, 5], "x": 6, "y": 1.5},
+ {"matrix": [1, 6], "x": 7, "y": 1.5},
+ {"matrix": [1, 7], "x": 8, "y": 1.5},
+ {"matrix": [1, 8], "x": 9, "y": 1.5},
+ {"matrix": [1, 9], "x": 10, "y": 1.5},
+ {"matrix": [1, 10], "x": 11, "y": 1.5},
+ {"matrix": [1, 11], "x": 12, "y": 1.5},
+ {"matrix": [1, 12], "x": 13, "y": 1.5},
+ {"matrix": [1, 13], "x": 15, "y": 1},
+ {"matrix": [1, 14], "x": 16, "y": 1},
+ {"matrix": [1, 15], "x": 17, "y": 1},
+ {"matrix": [1, 16], "x": 18, "y": 1, "h": 2},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 2, "y": 2.5},
+ {"matrix": [2, 2], "x": 3, "y": 2.5},
+ {"matrix": [2, 3], "x": 4, "y": 2.5},
+ {"matrix": [2, 4], "x": 5, "y": 2.5},
+ {"matrix": [2, 5], "x": 6, "y": 2.5},
+ {"matrix": [2, 6], "x": 7, "y": 2.5},
+ {"matrix": [2, 7], "x": 8, "y": 2.5},
+ {"matrix": [2, 8], "x": 9, "y": 2.5},
+ {"matrix": [2, 9], "x": 10, "y": 2.5},
+ {"matrix": [2, 10], "x": 11, "y": 2.5},
+ {"matrix": [2, 11], "x": 12, "y": 2.5},
+ {"matrix": [2, 12], "x": 13, "y": 2.5},
+ {"matrix": [2, 13], "x": 15, "y": 2},
+ {"matrix": [2, 14], "x": 16, "y": 2},
+ {"matrix": [2, 15], "x": 17, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 2, "y": 3.5},
+ {"matrix": [3, 2], "x": 3, "y": 3.5},
+ {"matrix": [3, 3], "x": 4, "y": 3.5},
+ {"matrix": [3, 4], "x": 5, "y": 3.5},
+ {"matrix": [3, 5], "x": 6, "y": 3.5},
+ {"matrix": [3, 6], "x": 7, "y": 3.5, "w": 2},
+ {"matrix": [3, 8], "x": 9, "y": 3.5},
+ {"matrix": [3, 9], "x": 10, "y": 3.53},
+ {"matrix": [3, 10], "x": 11, "y": 3.53},
+ {"matrix": [3, 11], "x": 12, "y": 3.5},
+ {"matrix": [3, 12], "x": 13, "y": 3.5},
+ {"matrix": [3, 13], "x": 15, "y": 3},
+ {"matrix": [3, 14], "x": 16, "y": 3},
+ {"matrix": [3, 15], "x": 17, "y": 3},
+ {"matrix": [3, 16], "x": 18, "y": 3, "h": 2},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 13], "x": 15, "y": 4, "w": 2},
+ {"matrix": [4, 15], "x": 17, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/scottokeebs/scotto69/keymaps/default/keymap.c b/keyboards/scottokeebs/scotto69/keymaps/default/keymap.c
new file mode 100644
index 00000000000..96ee0e18779
--- /dev/null
+++ b/keyboards/scottokeebs/scotto69/keymaps/default/keymap.c
@@ -0,0 +1,58 @@
+/*
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+#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(_______, _______) },
+ [2] = { ENCODER_CCW_CW(_______, _______) },
+ [3] = { ENCODER_CCW_CW(_______, _______) }
+};
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_1, 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_LNUM, KC_SLSH, KC_ASTR, KC_MINS,
+ KC_2, KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC, KC_QUOT, KC_7, KC_8, KC_9, KC_PLUS,
+ KC_MUTE, KC_LSFT, LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), KC_RSFT, KC_4, KC_5, KC_6,
+ KC_4, KC_ESC, KC_NO, KC_NO, KC_LCTL, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), KC_NO, KC_NO, KC_NO, KC_1, KC_2, KC_3, KC_ENT,
+ KC_5, KC_0, KC_DOT
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/scottokeebs/scotto69/keymaps/default/rules.mk b/keyboards/scottokeebs/scotto69/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/scottokeebs/scotto69/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/scottokeebs/scotto69/readme.md b/keyboards/scottokeebs/scotto69/readme.md
new file mode 100644
index 00000000000..d46b93b70b7
--- /dev/null
+++ b/keyboards/scottokeebs/scotto69/readme.md
@@ -0,0 +1,29 @@
+# Scotto69 (PCB Edition)
+
+
+
+The Scotto69 (PCB Edition) is a standard 4x12 ortholinear keyboard with a numpad on the right and 5 macro keys on the left with an optional encoder.
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: STM32F072CBT6
+* Hardware Availability: [ScottoKeebs](https://scottokeebs.com)
+
+# Compiling
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/scottokeebs/scotto69:default
+
+Flashing example for this keyboard:
+
+ make handwired/scottokeebs/scotto69: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/sdrakbs/sdrakb00/keyboard.json b/keyboards/sdrakbs/sdrakb00/keyboard.json
new file mode 100644
index 00000000000..f9e24cc63f0
--- /dev/null
+++ b/keyboards/sdrakbs/sdrakb00/keyboard.json
@@ -0,0 +1,71 @@
+{
+ "manufacturer": "Diego Andres Rabaioli",
+ "keyboard_name": "sdrakb00",
+ "maintainer": "drabaioli",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B5", "pin_b": "B6", "resolution": 2}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["F0", "F1", "F4", "F5"],
+ "rows": ["D4", "D6", "D7"]
+ },
+ "processor": "atmega32u4",
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
+ {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
+ {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4},
+ {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4},
+ {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4},
+ {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4},
+ {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4},
+ {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4},
+ {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4},
+ {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}
+ ],
+ "max_brightness": 100,
+ "sleep": true,
+ "timeout": 300000
+ },
+ "url": "https://github.com/drabaioli/SdraKb00",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x4200",
+ "vid": "0x7331"
+ },
+ "ws2812": {
+ "pin": "B0"
+ },
+ "layouts": {
+ "LAYOUT_ortho_3x4": {
+ "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, "encoder": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/sdrakbs/sdrakb00/keymaps/default/keymap.c b/keyboards/sdrakbs/sdrakb00/keymaps/default/keymap.c
new file mode 100644
index 00000000000..c5481b1076e
--- /dev/null
+++ b/keyboards/sdrakbs/sdrakb00/keymaps/default/keymap.c
@@ -0,0 +1,74 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+/* Keymap for 3x4 Macropad
+ *
+ * Layer 0 (Base Layer) - Numpad layout with mute button and layer toggle:
+ * ,----------------------,
+ * | 7 | 8 | 9 | MUTE |
+ * |-------+-------+-------+--------|
+ * | 4 | 5 | 6 | Layer1 |
+ * |-------+-------+-------+--------|
+ * | 1 | 2 | 3 | 0 |
+ * `-----------------------^--------'
+ *
+ * Layer 1 (Function Layer) - Accessed by holding MO(1):
+ * ,----------------------,
+ * | BKSP | / | - | ---- |
+ * |-------+-------+-------+--------|
+ * | = | * | + | ---- |
+ * |-------+-------+-------+--------|
+ * | ENTER | ---- | ---- | . |
+ * `-----------------------^--------'
+ *
+ * The base layer (0) provides standard numpad functionality with:
+ * - Numbers 0-9 in traditional numpad layout
+ * - Mute button in top right
+ * - Layer 1 momentary toggle (MO1) in middle right
+ *
+ * The function layer (1) adds:
+ * - Basic mathematical operators (+, -, *, /)
+ * - Backspace, Enter, and decimal point
+ * - Equal sign for calculations
+ * - Empty slots marked as ---- (KC_NO)
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ortho_3x4(
+ KC_KP_7, KC_KP_8, KC_KP_9, KC_MUTE,
+ KC_KP_4, KC_KP_5, KC_KP_6, MO(1),
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_0
+ ),
+
+ [1] = LAYOUT_ortho_3x4(
+ KC_BACKSPACE, KC_KP_SLASH, KC_KP_MINUS, _______,
+ KC_EQUAL, KC_KP_ASTERISK, KC_KP_PLUS, _______,
+ KC_ENTER, _______, _______, KC_KP_DOT
+ )
+};
+
+
+/*
+ * Handle layer state changes by updating RGB matrix colors
+ *
+ * Sets RGB matrix colors based on active layer:
+ * - Layer 0: Light green (#88FB7A)
+ * - Layer 1: Red
+ * - Other layers: Red (fallback)
+ */
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case 0:
+ rgb_matrix_sethsv(85, 255, 251); // #88FB7A for layer 0
+ break;
+ case 1:
+ rgb_matrix_sethsv(0, 255, 255); // Red for layer 1
+ break;
+ default:
+ rgb_matrix_sethsv(0, 255, 255); // Red for any other layer
+ break;
+ }
+ return state;
+}
diff --git a/keyboards/sdrakbs/sdrakb00/readme.md b/keyboards/sdrakbs/sdrakb00/readme.md
new file mode 100644
index 00000000000..21e56f9595a
--- /dev/null
+++ b/keyboards/sdrakbs/sdrakb00/readme.md
@@ -0,0 +1,52 @@
+# sdrakb00
+
+
+
+11 keys hot-swap macropad with rotary encoder.
+
+Macropad features:
+- 11 hot-swap keys
+- Rotary encoder with push button
+- AtMega32U4 MCU
+- Per-key RGB led for backlighting
+- USB-C connector
+- On PCB SPI header
+- MCU reset button
+- Switch mounting plate
+- Power LED indicator
+
+* Keyboard Maintainer: [Diego Andres Rabaioli](https://github.com/drabaioli)
+* Hardware Supported: Pro Micro Atmega32u4 based macropad with 11 keys, RGB LED chain and rotary encoder
+* Hardware Availability: [Get the gerbers and have fun building it your self ;)](https://github.com/drabaioli/SdraKb00)
+
+Build SdraKb00 firmware:
+
+ make sdrakbs/sdrakb00:default
+
+Flashing SdraKb00 firmware, execute:
+
+ make sdrakbs/sdrakb00:default:flash
+
+Then press the reset button on the back side of the PCB.
+
+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:
+
+* **Physical reset button** (preferred): Briefly press the button on the back of the PCB
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+
+## Default Keymap
+
+### Base Layer (0)
+- NumPad layout (1-9, 0)
+- Encoder: Volume Up/Down
+- Encoder Push: Mute
+- Layer Switch: Hold (1,3) key for function layer
+
+### Function Layer (1)
+- NumPad operators (+, -, *, /)
+- Enter, "=" and backspace keys
+- Decimal point
diff --git a/keyboards/senselessclay/had60/keyboard.json b/keyboards/senselessclay/had60/keyboard.json
index ca05589a2e4..03ace8014b9 100644
--- a/keyboards/senselessclay/had60/keyboard.json
+++ b/keyboards/senselessclay/had60/keyboard.json
@@ -33,11 +33,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -319,7 +323,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/shorty/keyboard.json b/keyboards/shorty/keyboard.json
new file mode 100644
index 00000000000..158648badd4
--- /dev/null
+++ b/keyboards/shorty/keyboard.json
@@ -0,0 +1,48 @@
+{
+ "manufacturer": "Hawtkeys",
+ "keyboard_name": "shorty",
+ "maintainer": "hawtkeys",
+ "bootloader": "rp2040",
+ "diode_direction": "ROW2COL",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP28", "pin_b": "GP27"},
+ {"pin_a": "GP3", "pin_b": "GP4"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP14", "GP13", "GP12"],
+ "rows": ["GP11", "GP10", "GP9", "GP29", "GP2"]
+ },
+ "processor": "RP2040",
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x5400",
+ "vid": "0x5453"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [3, 0], "x": 0, "y": 0},
+ {"matrix": [4, 0], "x": 2, "y": 0},
+ {"matrix": [0, 0], "x": 0, "y": 1},
+ {"matrix": [0, 1], "x": 1, "y": 1},
+ {"matrix": [0, 2], "x": 2, "y": 1},
+ {"matrix": [1, 0], "x": 0, "y": 2},
+ {"matrix": [1, 1], "x": 1, "y": 2},
+ {"matrix": [1, 2], "x": 2, "y": 2},
+ {"matrix": [2, 0], "x": 0, "y": 3},
+ {"matrix": [2, 1], "x": 1, "y": 3},
+ {"matrix": [2, 2], "x": 2, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/shorty/keymaps/default/keymap.c b/keyboards/shorty/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ef4bbba7ef0
--- /dev/null
+++ b/keyboards/shorty/keymaps/default/keymap.c
@@ -0,0 +1,18 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_A, KC_D,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6,
+ KC_P1, KC_P2, KC_P3
+ )
+};
+
+#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(MS_WHLD, MS_WHLU) }
+};
+#endif
diff --git a/keyboards/shorty/readme.md b/keyboards/shorty/readme.md
new file mode 100644
index 00000000000..23f023b92ce
--- /dev/null
+++ b/keyboards/shorty/readme.md
@@ -0,0 +1,27 @@
+# Shorty Zero
+
+
+
+The Shorty Zero is a 3x3 customizable macropad designed for productivity, gaming, and creative workflows, featuring programmable keys and rotary knobs.
+
+* Keyboard Maintainer: [Hawtkeys](https://github.com/hawtkeys)
+* Hardware Supported: Raspberry Pi Pico, Hawtkeys Shorty Zero PCB
+* Hardware Availability: [Available @ hawtkeys.com](https://hawtkeys.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make shorty:default
+
+Flashing example for this keyboard:
+
+ make shorty: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/smithrune/iron160/iron160_h/keyboard.json b/keyboards/smithrune/iron160/iron160_h/keyboard.json
index d9ada0879d5..c1dd4c9f540 100644
--- a/keyboards/smithrune/iron160/iron160_h/keyboard.json
+++ b/keyboards/smithrune/iron160/iron160_h/keyboard.json
@@ -33,10 +33,11 @@
},
"diode_direction": "COL2ROW",
"layout_aliases": {
- "LAYOUT": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
- "60_tsangan_hhkb"
+ "60_ansi_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_60_ansi_tsangan_split_rshift": {
@@ -108,7 +109,7 @@
{"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c b/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c
index b8dc909c947..524830a2448 100755
--- a/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c
+++ b/keyboards/smithrune/iron160/iron160_h/keymaps/default/keymap.c
@@ -18,14 +18,14 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT ,
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC , KC_RALT, KC_RWIN, KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/smithrune/iron160/iron160_s/keyboard.json b/keyboards/smithrune/iron160/iron160_s/keyboard.json
index d6bf0a43f5c..fc14114826a 100644
--- a/keyboards/smithrune/iron160/iron160_s/keyboard.json
+++ b/keyboards/smithrune/iron160/iron160_s/keyboard.json
@@ -39,16 +39,18 @@
"caps_lock": "B0"
},
"layout_aliases": {
- "LAYOUT": "LAYOUT_all"
+ "LAYOUT": "LAYOUT_all",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_all": {
@@ -332,7 +334,7 @@
{"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "~", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/stratos/keyboard.json b/keyboards/stratos/keyboard.json
index 4d4bca34470..842c9b87a3d 100644
--- a/keyboards/stratos/keyboard.json
+++ b/keyboards/stratos/keyboard.json
@@ -46,7 +46,19 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_arrow", "60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_split_bs_rshift", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_arrow",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -331,7 +343,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/stratos/keymaps/tsangan_hhkb/keymap.c b/keyboards/stratos/keymaps/tsangan_hhkb/keymap.c
index d8b6c552fcf..a1d4ee3a187 100644
--- a/keyboards/stratos/keymaps/tsangan_hhkb/keymap.c
+++ b/keyboards/stratos/keymaps/tsangan_hhkb/keymap.c
@@ -16,14 +16,14 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/studiokestra/cascade/keyboard.json b/keyboards/studiokestra/cascade/keyboard.json
index 962276e62aa..8e7673da0ec 100644
--- a/keyboards/studiokestra/cascade/keyboard.json
+++ b/keyboards/studiokestra/cascade/keyboard.json
@@ -51,6 +51,9 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -192,7 +195,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/studiokestra/cascade/keymaps/default_tsangan_hhkb/keymap.c b/keyboards/studiokestra/cascade/keymaps/default_tsangan_hhkb/keymap.c
index 34a1df69090..075179cb68b 100644
--- a/keyboards/studiokestra/cascade/keymaps/default_tsangan_hhkb/keymap.c
+++ b/keyboards/studiokestra/cascade/keymaps/default_tsangan_hhkb/keymap.c
@@ -23,14 +23,14 @@ enum layer_names {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb( /* Base */
+ [_BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift( /* Base */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN] = LAYOUT_60_tsangan_hhkb( /* FN */
+ [_FN] = LAYOUT_60_ansi_tsangan_split_bs_rshift( /* FN */
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC,
_______, _______, KC_PGUP, _______, _______, _______, _______, _______, KC_UP, _______, KC_MPRV, KC_MPLY, KC_MNXT, BL_STEP,
_______, KC_HOME, KC_PGDN, KC_END, _______, KC_VOLD, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
diff --git a/keyboards/studiokestra/fairholme/keyboard.json b/keyboards/studiokestra/fairholme/keyboard.json
new file mode 100644
index 00000000000..f789c2059bb
--- /dev/null
+++ b/keyboards/studiokestra/fairholme/keyboard.json
@@ -0,0 +1,1002 @@
+{
+ "manufacturer": "Studio Kestra",
+ "keyboard_name": "Fairholme",
+ "maintainer": "Studio Kestra",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["B11", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "F1", "F0", "C15", "C14", "C13"],
+ "rows": ["A0", "A1", "A2", "A9", "A10"]
+ },
+ "processor": "STM32F072",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x6002",
+ "vid": "0x7C10"
+ },
+ "indicators": {
+ "caps_lock": "B10",
+ "on_state": 1
+ },
+ "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_ansi_tsangan_split_bs_rshift", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
+ "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": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 13], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h":2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h":2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h":2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h":2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h":2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [1, 13], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h":2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/studiokestra/fairholme/keymaps/60_ansi/keymap.c b/keyboards/studiokestra/fairholme/keymaps/60_ansi/keymap.c
new file mode 100644
index 00000000000..f240a1c67e0
--- /dev/null
+++ b/keyboards/studiokestra/fairholme/keymaps/60_ansi/keymap.c
@@ -0,0 +1,34 @@
+// Copyright 2024 Studio Kestra
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│ Fn │Ctrl│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ [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( /* FN */
+ KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_NO, KC_NO, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_HOME, KC_PGDN, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______, KC_NO
+ )
+};
diff --git a/keyboards/studiokestra/fairholme/keymaps/60_ansi_split_bs_rshift/keymap.c b/keyboards/studiokestra/fairholme/keymaps/60_ansi_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..50299b26af1
--- /dev/null
+++ b/keyboards/studiokestra/fairholme/keymaps/60_ansi_split_bs_rshift/keymap.c
@@ -0,0 +1,34 @@
+// Copyright 2024 Studio Kestra
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ | │ ~ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bcksp│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Fn │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ [0] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ ),
+ [1] = LAYOUT_60_ansi_split_bs_rshift( /* FN */
+ KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL,
+ KC_NO, KC_NO, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_HOME, KC_PGDN, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/studiokestra/fairholme/keymaps/60_iso/keymap.c b/keyboards/studiokestra/fairholme/keymaps/60_iso/keymap.c
new file mode 100644
index 00000000000..67468d4ffb7
--- /dev/null
+++ b/keyboards/studiokestra/fairholme/keymaps/60_iso/keymap.c
@@ -0,0 +1,34 @@
+// Copyright 2024 Studio Kestra
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐Ent │
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ` │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│ Fn │Ctrl│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ [0] = LAYOUT_60_iso(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
+ ),
+ [1] = LAYOUT_60_iso( /* FN */
+ KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_NO, KC_NO, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_HOME, KC_PGDN, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______, KC_NO
+ )
+};
diff --git a/keyboards/studiokestra/fairholme/keymaps/default/keymap.c b/keyboards/studiokestra/fairholme/keymaps/default/keymap.c
new file mode 100644
index 00000000000..15ad875016a
--- /dev/null
+++ b/keyboards/studiokestra/fairholme/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+// Copyright 2024 Studio Kestra
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ | │ ~ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bcksp│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Fn │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ ),
+ [1] = LAYOUT_all( /* FN */
+ KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL,
+ KC_NO, KC_NO, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_HOME, KC_PGDN, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
diff --git a/keyboards/studiokestra/fairholme/readme.md b/keyboards/studiokestra/fairholme/readme.md
new file mode 100644
index 00000000000..b5b92bacc24
--- /dev/null
+++ b/keyboards/studiokestra/fairholme/readme.md
@@ -0,0 +1,27 @@
+# studiokestra/fairholme
+
+
+
+60% PCB developed as a successor to Cascade PCB powered by STM32F072.
+
+* Keyboard Maintainer: [studiokestra](https://github.com/studiokestra)
+* Hardware Supported: Geonworks F2-60
+* Hardware Availability: https://geon.works
+
+Make example for this keyboard (after setting up your build environment):
+
+ make studiokestra/fairholme:default
+
+Flashing example for this keyboard:
+
+ make studiokestra/fairholme: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/studiokestra/nue/keyboard.json b/keyboards/studiokestra/nue/keyboard.json
index a98d8382482..b12d048497c 100644
--- a/keyboards/studiokestra/nue/keyboard.json
+++ b/keyboards/studiokestra/nue/keyboard.json
@@ -33,11 +33,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -319,7 +323,7 @@
{"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/synthlabs/060/keyboard.json b/keyboards/synthlabs/060/keyboard.json
index 2fe90c96fda..1094d430e6e 100644
--- a/keyboards/synthlabs/060/keyboard.json
+++ b/keyboards/synthlabs/060/keyboard.json
@@ -138,11 +138,14 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -426,7 +429,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/takashicompany/klec_01/keyboard.json b/keyboards/takashicompany/klec_01/keyboard.json
new file mode 100644
index 00000000000..36baa8bf60f
--- /dev/null
+++ b/keyboards/takashicompany/klec_01/keyboard.json
@@ -0,0 +1,77 @@
+{
+ "manufacturer": "takashicompany",
+ "keyboard_name": "KLEC-01",
+ "maintainer": "takashicompany",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6"],
+ "rows": ["D4", "C6", "D7", "E6", "B4", "B5"]
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1001",
+ "vid": "0x7463"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [1, 0], "x": 4, "y": 0},
+ {"matrix": [1, 1], "x": 5, "y": 0},
+ {"matrix": [1, 2], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [2, 0], "x": 8, "y": 0},
+ {"matrix": [2, 1], "x": 9, "y": 0},
+ {"matrix": [2, 2], "x": 10, "y": 0},
+ {"matrix": [2, 3], "x": 11, "y": 0, "w": 1.75},
+ {"matrix": [0, 4], "x": 0, "y": 1, "w": 1.25},
+ {"matrix": [0, 5], "x": 1.25, "y": 1},
+ {"matrix": [0, 6], "x": 2.25, "y": 1},
+ {"matrix": [0, 7], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [1, 5], "x": 5.25, "y": 1},
+ {"matrix": [1, 6], "x": 6.25, "y": 1},
+ {"matrix": [1, 7], "x": 7.25, "y": 1},
+ {"matrix": [2, 4], "x": 8.25, "y": 1},
+ {"matrix": [2, 5], "x": 9.25, "y": 1},
+ {"matrix": [2, 6], "x": 10.25, "y": 1},
+ {"matrix": [2, 7], "x": 11.25, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 2},
+ {"matrix": [3, 2], "x": 2.75, "y": 2},
+ {"matrix": [3, 3], "x": 3.75, "y": 2},
+ {"matrix": [4, 0], "x": 4.75, "y": 2},
+ {"matrix": [4, 1], "x": 5.75, "y": 2},
+ {"matrix": [4, 2], "x": 6.75, "y": 2},
+ {"matrix": [4, 3], "x": 7.75, "y": 2},
+ {"matrix": [5, 0], "x": 8.75, "y": 2},
+ {"matrix": [5, 1], "x": 9.75, "y": 2},
+ {"matrix": [5, 2], "x": 10.75, "y": 2},
+ {"matrix": [5, 3], "x": 11.75, "y": 2},
+ {"matrix": [3, 4], "x": 0, "y": 3},
+ {"matrix": [3, 5], "x": 1, "y": 3},
+ {"matrix": [3, 6], "x": 2, "y": 3},
+ {"matrix": [3, 7], "x": 3, "y": 3, "w": 1.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 3, "w": 2},
+ {"matrix": [4, 5], "x": 6.25, "y": 3, "w": 2.25},
+ {"matrix": [5, 4], "x": 8.5, "y": 3, "w": 1.25},
+ {"matrix": [5, 5], "x": 9.75, "y": 3},
+ {"matrix": [5, 6], "x": 10.75, "y": 3},
+ {"matrix": [5, 7], "x": 11.75, "y": 3}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/takashicompany/klec_01/keymaps/default/keymap.c b/keyboards/takashicompany/klec_01/keymaps/default/keymap.c
new file mode 100644
index 00000000000..551c211b73a
--- /dev/null
+++ b/keyboards/takashicompany/klec_01/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, KC_ENT,
+ KC_LSFT, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_UP, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LNG1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3, KC_TRNS,
+ KC_TRNS, LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3), KC_TRNS,
+ KC_TRNS, KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3), KC_TRNS,
+ KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ KC_TRNS, LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS,
+ KC_TRNS, KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, KC_TRNS,
+ KC_TRNS, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [4] = LAYOUT(
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3, KC_TRNS,
+ KC_TRNS, LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [5] = LAYOUT(
+ KC_TRNS, KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
+ KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [6] = LAYOUT(
+ KC_TRNS, KC_ESC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_LCTL, KC_TRNS, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [7] = LAYOUT(
+ KC_TRNS, KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+ KC_TRNS, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [8] = LAYOUT(
+ KC_TRNS, UG_TOGG, UG_NEXT, UG_HUEU, UG_SATU, UG_VALU, KC_NO, KC_NO, KC_NO, DF(0), DF(3), KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/takashicompany/klec_01/readme.md b/keyboards/takashicompany/klec_01/readme.md
new file mode 100644
index 00000000000..e907c7b68a3
--- /dev/null
+++ b/keyboards/takashicompany/klec_01/readme.md
@@ -0,0 +1,29 @@
+# takashicompany/klec_01
+
+
+
+46-key integrated keyboard.
+
+The layout is similar to a conventional keyboard, making it a good introduction to 40% keyboards.
+
+* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
+* Hardware Supported: PCB, Pro Micro
+* Hardware Availability: https://github.com/takashicompany/klec_01
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashicompany/klec_01:default
+
+Flashing example for this keyboard:
+
+ make takashicompany/klec_01:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/takashicompany/klec_02/keyboard.json b/keyboards/takashicompany/klec_02/keyboard.json
new file mode 100644
index 00000000000..045c4ef315c
--- /dev/null
+++ b/keyboards/takashicompany/klec_02/keyboard.json
@@ -0,0 +1,73 @@
+{
+ "manufacturer": "takashicompany",
+ "keyboard_name": "KLEC-02",
+ "maintainer": "takashicompany",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["D4", "C6", "D7", "E6", "B4"],
+ "rows": ["F4", "F5", "F6", "F7"]
+ },
+ "split": {
+ "enabled": true,
+ "serial": {
+ "pin": "D2"
+ }
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1002",
+ "vid": "0x7463"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [4, 0], "x": 6.25, "y": 0},
+ {"matrix": [4, 1], "x": 7.25, "y": 0},
+ {"matrix": [4, 2], "x": 8.25, "y": 0},
+ {"matrix": [4, 3], "x": 9.25, "y": 0},
+ {"matrix": [4, 4], "x": 10.25, "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": [5, 0], "x": 6.5, "y": 1},
+ {"matrix": [5, 1], "x": 7.5, "y": 1},
+ {"matrix": [5, 2], "x": 8.5, "y": 1},
+ {"matrix": [5, 3], "x": 9.5, "y": 1},
+ {"matrix": [5, 4], "x": 10.5, "y": 1},
+ {"matrix": [2, 0], "x": 0.5, "y": 2},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [6, 0], "x": 6.75, "y": 2},
+ {"matrix": [6, 1], "x": 7.75, "y": 2},
+ {"matrix": [6, 2], "x": 8.75, "y": 2},
+ {"matrix": [6, 3], "x": 9.75, "y": 2},
+ {"matrix": [6, 4], "x": 10.75, "y": 2},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.25},
+ {"matrix": [3, 4], "x": 5, "y": 3},
+ {"matrix": [7, 0], "x": 6.25, "y": 3},
+ {"matrix": [7, 1], "x": 7.25, "y": 3, "w": 1.25},
+ {"matrix": [7, 2], "x": 8.5, "y": 3}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/takashicompany/klec_02/keymaps/default/keymap.c b/keyboards/takashicompany/klec_02/keymaps/default/keymap.c
new file mode 100644
index 00000000000..0431b8e6b7e
--- /dev/null
+++ b/keyboards/takashicompany/klec_02/keymaps/default/keymap.c
@@ -0,0 +1,70 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LNG1), KC_RGUI
+ ),
+
+ [1] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_INT1, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_INT3,
+ LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_INT3),
+ KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_INT1), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_INT3),
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT,
+ LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC,
+ KC_LGUI, LALT_T(KC_LNG2), LSFT_T(KC_TAB), LT(5, KC_SPC), LT(4, KC_LNG1), KC_RGUI
+ ),
+
+ [4] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_INT3,
+ LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [5] = LAYOUT(
+ KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS,
+ KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_LSFT, KC_SPC, KC_LNG1, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [6] = LAYOUT(
+ KC_ESC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO,
+ KC_LCTL, KC_TRNS, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,
+ KC_LSFT, KC_LGUI, KC_LALT, KC_LNG2, KC_TRNS, KC_NO, KC_LNG1, KC_NO, KC_NO, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [7] = LAYOUT(
+ KC_NO, KC_TAB, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, MO(8), MO(9),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [8] = LAYOUT(
+ UG_TOGG, UG_NEXT, UG_HUEU, UG_SATU, UG_VALU, KC_NO, KC_NO, KC_NO, DF(0), DF(3),
+ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/takashicompany/klec_02/readme.md b/keyboards/takashicompany/klec_02/readme.md
new file mode 100644
index 00000000000..0b492a5e18a
--- /dev/null
+++ b/keyboards/takashicompany/klec_02/readme.md
@@ -0,0 +1,28 @@
+# KLEC-02
+
+
+
+The KLEC-02 is a 36-key segmented keyboard.
+The PCB can be fitted with key switch sockets, allowing easy replacement of key switches.
+
+* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
+* Hardware Supported: PCB, Pro Micro
+* Hardware Availability: https://github.com/takashicompany/klec_02
+
+Make example for this keyboard (after setting up your build environment):
+
+ make takashicompany/klec_02:default
+
+Flashing example for this keyboard:
+
+ make takashicompany/klec_02: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/thumbsup/keymaps/default/keymap.c b/keyboards/thumbsup/keymaps/default/keymap.c
new file mode 100644
index 00000000000..04a16a50815
--- /dev/null
+++ b/keyboards/thumbsup/keymaps/default/keymap.c
@@ -0,0 +1,171 @@
+/* Copyright 2022 Alexander (Sasha) Karmanov
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _QWERTY,
+ _CURSORLEFT,
+ _CURSORRGHT,
+ _NUMBERS,
+ _EXTRARIGHT
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------+ +-----------------------------------------.
+ * | Esc | Q | W | E | R | T | | Y | U | I | O | P |BSpc |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | | H | J | K | L | ; |Enter |
+Hold:
+ Extra-Rt
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | Z | X | C | V | B | | N | M | , | . | / |RCtrl |
+ * +------+------+------+------+------+------+ +------+------+------+------+------+------+
+ . | GUI | Alt | | | | | | RAlt | Menu | .
+ | +------+------+ | | | | +------+------+ |
+Hold: | | LSft |CursLt| |CursRt| RSft | |
+Single hit: | | |Space | |Space | | |
+ | +------+------| |------+------+ |
+ +------------------------------> SPACE SPACE <-----------------------------+
+
+ */
+[_QWERTY] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT(_EXTRARIGHT,KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_PENT,
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RCTL,
+ KC_SPC, KC_LGUI, KC_LALT, KC_LSFT, LT(_CURSORLEFT,KC_SPC), LT(_CURSORRGHT ,KC_SPC), KC_RSFT, KC_RALT, KC_APP, KC_SPC
+),
+
+
+/*
+
+Layers below are used on top of QWERTY layer defined above.
+(Except the PLOVER/STENO layers.)
+ +-------+
+The keys which are shown empty, like this: | |, represent a transparent key,
+ +-------+
+meaning the key from the underlaying layer (i.e. QWERTY) will be used.
+In the keymaps those keys are defined as "_______".
+
+ +-------+ +-------+
+The keys which are shown solid, like this: | XXXXX | or this | ... |, represent an opaque/blocking key?
+ +-------+ +-------+
+Such key is not doing anything in that layer nor allowing the key from the underlaying layer
+to be invoked.
+In the keymaps those keys are defined as "XXXXXXX".
+
+Most of the modifiers are the same in all layers.
+So in most layers they are defined as transparent keys,
+letting the keys from QWERTY layer to do the work.
+
+With that idea all the layers below leave the unmodified keys as transparent keys.
+In the same time - the layers block the keys that have no sense to be used
+in that given layer. For instance in the cursor control layers
+some of the keys are not used in the layer, but they are blocked to avoid
+alpha-keys from QWERTY layer to appear.
+
+For the same reason the keymaps below are shown simplified,
+without separate thumbcluster.
+
+*/
+
+
+
+/* Cursor Control on the right (Right Space)
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc |Break |WheelD|MousUp|WheelU| Del | Ins | Home | Up | End | ` | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | |SelAll|MousLt|MousDn|MousRt| ... | PgUp | Left | Down |Right | ... | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | Undo | Cut | Copy | Paste| ... | PgDn |MsBtLe|MsBtMi|MsBtRt| ... | |
+ * `------+------+------+------+------+------+------+------+------+------+------+------.
+ * | | | | | X | | | |
+ * `-------------------------------------------------------'
+ */
+[_CURSORRGHT] = LAYOUT(
+ _______, KC_BRK, KC_WH_D, KC_MS_U, KC_WH_U, KC_DEL, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_GRV, KC_DEL,
+ KC_ENT, LCTL(KC_A), KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, _______,
+ _______, LCTL(KC_Z), LSFT(KC_DEL), LCTL(KC_INS), LSFT(KC_INS), XXXXXXX, KC_INS, KC_BTN1, KC_BTN3, KC_BTN2, XXXXXXX, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+
+
+ /* Cursor Control on the left (Left Space)
+ * ,-----------------------------------------------------------------------------------.
+ * | |Break | Home | Up | End | Ins | Del |WheelU|MousUp|WheelD| ` | Del |
+ * |------+------+------+------+------+------+-------------+------+------+------+------|
+ * | Enter|SelAll|Right | Down | Left | PgUp | xxx |MousLt|MousDn|MousRt| xxx |Enter |
+ * |------+------+------+------+------+------+------|------+------+------+------+------|
+ * | | xxx |MsBtRt|MsBtMi|MsBtLe| PgDn | xxx | Cut | Copy | Paste| xxx | |
+ * `------+------+------+------+------+------+------+------+------+------+------+------.
+ * | | | | X | | | | |
+ * `-------------------------------------------------------'
+ */
+[_CURSORLEFT] = LAYOUT(
+ _______, KC_BRK, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_DEL, KC_WH_U, KC_MS_U, KC_WH_D, KC_GRV, KC_DEL,
+ KC_ENT, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, _______,
+ _______, XXXXXXX, KC_BTN2, KC_BTN3, KC_BTN1, KC_INS, XXXXXXX, LCTL(KC_DEL), LCTL(KC_INS), LSFT(KC_INS), XXXXXXX, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+
+ /* Numbers on the home row, FNs on the top row, symbols in the second row
+ * (Lower or Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |BackSp|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10| Enter|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F11 | F12 | LAlt |LShift| LAlt | RAlt |RShift| , | . | / | |
+ * `------+------+------+------+------+------+------+------+------+------+------+------.
+ * | | | | | | | | |
+ * `-------------------------------------------------------'
+ */
+[_NUMBERS] = LAYOUT(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ LT(_EXTRARIGHT,KC_TAB), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, KC_F11, KC_F12, KC_LALT, KC_LSFT, KC_LALT, KC_RALT, KC_RSFT, KC_COMM, KC_DOT, KC_SLSH, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* ExtraRightSide (the keys from the right side which did not fit into the matrix)
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc |BREAK |PLOVR2|PLOVER|TxBOLT|TxBlt2| ` | = | ( | ) | - | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |******| | | | | |PrtScr| | | | ' | |
+ This is the
+ key turning
+ this layer on
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | |NumPad|Qwerty| | | | [ | ] | \ | |
+ * `------+------+------+------+------+------+------+------+------+------+------+------.
+ * | | | | | | | | |
+ * `-------------------------------------------------------'
+ */
+[_EXTRARIGHT] = LAYOUT(
+ _______, KC_BRK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_GRV, KC_EQL, KC_LPRN, KC_RPRN, KC_MINS, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, KC_QUOT, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _CURSORLEFT, _CURSORRGHT, _NUMBERS);
+}
diff --git a/keyboards/thumbsup/rev9_promicro_4x12/config.h b/keyboards/thumbsup/rev9_promicro_4x12/config.h
new file mode 100644
index 00000000000..71300e008d0
--- /dev/null
+++ b/keyboards/thumbsup/rev9_promicro_4x12/config.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2024 Alexander (Sasha) Karmanov (ak66666)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+
+#pragma once
+
+
+//Cirque ProGlide Touchpad configuration
+#define POINTING_DEVICE_ROTATION_90
+#define CIRQUE_PINNACLE_TAP_ENABLE
+#define CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE
+#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE
+
+#define CIRQUE_PINNACLE_POSITION_MODE CIRQUE_PINNACLE_ABSOLUTE_MODE
diff --git a/keyboards/thumbsup/rev9_promicro_4x12/keyboard.json b/keyboards/thumbsup/rev9_promicro_4x12/keyboard.json
new file mode 100644
index 00000000000..95fa6664b24
--- /dev/null
+++ b/keyboards/thumbsup/rev9_promicro_4x12/keyboard.json
@@ -0,0 +1,77 @@
+{
+ "manufacturer": "Alexander (Sasha) Karmanov",
+ "keyboard_name": "ThumbsUp! v9",
+ "maintainer": "u/ak66666",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "pointing_device": true
+ },
+ "dynamic_keymap": {
+ "layer_count": 6
+ },
+ "matrix_pins": {
+ "cols": ["B2", "B6", "B5", "B4", "E6", "D7", "B3", "F4", "F5", "F6", "F7", "B1"],
+ "rows": ["D3", "D2", "D4", "C6"]
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0090",
+ "vid": "0x5361"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "ESC", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "Q", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "W", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "E", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "R", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "T", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "Y", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "U", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "I", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "O", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "P", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "BKSPC", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "TAB", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "A", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "S", "matrix": [1, 2], "x": 2, "y": 1},
+ {"label": "D", "matrix": [1, 3], "x": 3, "y": 1},
+ {"label": "F", "matrix": [1, 4], "x": 4, "y": 1},
+ {"label": "G", "matrix": [1, 5], "x": 5, "y": 1},
+ {"label": "H", "matrix": [1, 6], "x": 6, "y": 1},
+ {"label": "J", "matrix": [1, 7], "x": 7, "y": 1},
+ {"label": "K", "matrix": [1, 8], "x": 8, "y": 1},
+ {"label": "L", "matrix": [1, 9], "x": 9, "y": 1},
+ {"label": ";", "matrix": [1, 10], "x": 10, "y": 1},
+ {"label": "ENTER", "matrix": [1, 11], "x": 11, "y": 1},
+ {"label": "LCTRL", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "Z", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "X", "matrix": [2, 2], "x": 2, "y": 2},
+ {"label": "C", "matrix": [2, 3], "x": 3, "y": 2},
+ {"label": "V", "matrix": [2, 4], "x": 4, "y": 2},
+ {"label": "B", "matrix": [2, 5], "x": 5, "y": 2},
+ {"label": "N", "matrix": [2, 6], "x": 6, "y": 2},
+ {"label": "M", "matrix": [2, 7], "x": 7, "y": 2},
+ {"label": ",", "matrix": [2, 8], "x": 8, "y": 2},
+ {"label": ".", "matrix": [2, 9], "x": 9, "y": 2},
+ {"label": "/", "matrix": [2, 10], "x": 10, "y": 2},
+ {"label": "RCTRL", "matrix": [2, 11], "x": 11, "y": 2},
+ {"label": "SPACE", "matrix": [3, 1], "x": 1, "y": 3},
+ {"label": "WIN", "matrix": [3, 2], "x": 2, "y": 3},
+ {"label": "LALT", "matrix": [3, 3], "x": 3, "y": 3},
+ {"label": "LSHIFT", "matrix": [3, 5], "x": 4, "y": 3},
+ {"label": "RAISE", "matrix": [3, 4], "x": 5, "y": 3},
+ {"label": "LOWER", "matrix": [3, 7], "x": 6, "y": 3},
+ {"label": "RSHIFT", "matrix": [3, 6], "x": 7, "y": 3},
+ {"label": "RALT", "matrix": [3, 8], "x": 8, "y": 3},
+ {"label": "MENU", "matrix": [3, 9], "x": 9, "y": 3},
+ {"label": "SPACE", "matrix": [3, 10], "x": 10, "y": 3}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/thumbsup/rev9_promicro_4x12/readme.md b/keyboards/thumbsup/rev9_promicro_4x12/readme.md
new file mode 100644
index 00000000000..e74da5cec8f
--- /dev/null
+++ b/keyboards/thumbsup/rev9_promicro_4x12/readme.md
@@ -0,0 +1,27 @@
+# ThumbsUp! v9
+
+
+
+A yet another version of the ThumbsUp! keyboard, a three-level PCB-based keyboard supporting Kailh Choc (1350) switches.
+This v9 version got 4x12 key layout with 2- or 3-key thumbcluster and an optional touchpad.
+
+
+* Keyboard Maintainer: [Alexander (Sasha) Karmanov](https://github.com/ak66666)
+* Hardware Supported: AtMega32u4 ProMicro-compatibles
+* Hardware Availability: https://www.etsy.com/ca/listing/1641077896/thumbsup-v9-ergonomic-mechanical
+
+Make example for this keyboard (after setting up your build environment):
+
+ make thumbsup/rev9_promicro_4x12:default
+
+Flashing example for this keyboard:
+
+ make thumbsup/rev9_promicro_4x12:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader:
+
+* **Physical reset button**: Press twice the button on the bottom side of the middle PCB.
diff --git a/keyboards/thumbsup/rev9_promicro_4x12/rules.mk b/keyboards/thumbsup/rev9_promicro_4x12/rules.mk
new file mode 100644
index 00000000000..9bfd1498a33
--- /dev/null
+++ b/keyboards/thumbsup/rev9_promicro_4x12/rules.mk
@@ -0,0 +1 @@
+POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c
\ No newline at end of file
diff --git a/keyboards/tr60w/keyboard.json b/keyboards/tr60w/keyboard.json
index dc71e3ad7aa..ef483ed2e27 100644
--- a/keyboards/tr60w/keyboard.json
+++ b/keyboards/tr60w/keyboard.json
@@ -60,8 +60,11 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/tr60w/keymaps/default/keymap.c b/keyboards/tr60w/keymaps/default/keymap.c
index d32c9d5cd6f..09523f15054 100644
--- a/keyboards/tr60w/keymaps/default/keymap.c
+++ b/keyboards/tr60w/keymaps/default/keymap.c
@@ -2,7 +2,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT_60_tsangan_hhkb(
+ LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -10,7 +10,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- LAYOUT_60_tsangan_hhkb(
+ LAYOUT_60_ansi_tsangan_split_bs_rshift(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, KC_DEL,
_______, _______, _______, UG_TOGG, UG_NEXT, UG_HUEU, UG_HUED, UG_SATU, UG_SATD, UG_VALU, KC_LEFT, KC_RGHT, _______,
diff --git a/keyboards/trnthsn/s6xty/config.h b/keyboards/trnthsn/s6xty/config.h
new file mode 100644
index 00000000000..cb72d64967e
--- /dev/null
+++ b/keyboards/trnthsn/s6xty/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2024 ThanhSon.Mech
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define WS2812_SPI_DRIVER SPID2
+#define WS2812_SPI_SCK_PIN B13
diff --git a/keyboards/trnthsn/s6xty/halconf.h b/keyboards/trnthsn/s6xty/halconf.h
new file mode 100644
index 00000000000..b8f0a217c4b
--- /dev/null
+++ b/keyboards/trnthsn/s6xty/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2024 ThanhSon.Mech
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next
diff --git a/keyboards/trnthsn/s6xty/keyboard.json b/keyboards/trnthsn/s6xty/keyboard.json
new file mode 100644
index 00000000000..3ec2f87f3df
--- /dev/null
+++ b/keyboards/trnthsn/s6xty/keyboard.json
@@ -0,0 +1,504 @@
+{
+ "manufacturer": "ThanhSon.Mech",
+ "keyboard_name": "S6xty",
+ "maintainer": "trnthsn",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "B12"
+ },
+ "matrix_pins": {
+ "cols": ["B14", "A0", "A10", "C15", "A2", "A1", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4"],
+ "rows": ["B3", "B7", "A3", "A9", "A8"]
+ },
+ "processor": "STM32F072",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 22,
+ "sleep": true
+ },
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x5336",
+ "vid": "0x5453"
+ },
+ "ws2812": {
+ "driver": "spi",
+ "pin": "B15"
+ },
+ "community_layouts": ["60_ansi_tsangan", "60_ansi_tsangan_split_bs_rshift", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb"],
+ "layouts": {
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan_arrow": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 12], "x": 13, "y": 3},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12, "y": 4},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [2, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [2, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [2, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 12], "x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [2, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 12], "x": 13, "y": 3},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12, "y": 4},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/trnthsn/s6xty/keymaps/default/keymap.c b/keyboards/trnthsn/s6xty/keymaps/default/keymap.c
new file mode 100644
index 00000000000..97dba0d7491
--- /dev/null
+++ b/keyboards/trnthsn/s6xty/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ // │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│
+ // ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ // │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
+ // ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ // │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ // ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
+ // │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │Shift │↑ │/ │
+ // ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴──┬───┼───┼───┤
+ // │Ctrl │GUI│ Alt │ │Fn │← │↓ │→ │
+ // └─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_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_RSFT, KC_UP, KC_SLSH,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ MO(2) , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/trnthsn/s6xty/mcuconf.h b/keyboards/trnthsn/s6xty/mcuconf.h
new file mode 100644
index 00000000000..3bf940e0bec
--- /dev/null
+++ b/keyboards/trnthsn/s6xty/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2024 ThanhSon.Mech
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_SPI_USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
diff --git a/keyboards/trnthsn/s6xty/readme.md b/keyboards/trnthsn/s6xty/readme.md
new file mode 100644
index 00000000000..eb518b7cee5
--- /dev/null
+++ b/keyboards/trnthsn/s6xty/readme.md
@@ -0,0 +1,27 @@
+# S6xty
+
+
+
+A 60% keyboard PCB compatible with various keyboard cases. Supports a left USB Type-C connector or 3 JST SH positions for a daughter board
+
+* Keyboard Maintainer: [ThanhSon.Mech](https://github.com/trnthsn)
+* Hardware Supported: s6xty PCB, STM32F072
+* Hardware Availability: [ThanhSon.Mech](https://www.facebook.com/ThanhSon.mech)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make trnthsn/s6xty:default
+
+Flashing example for this keyboard:
+
+ make trnthsn/s6xty: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/unikorn/keyboard.json b/keyboards/unikorn/keyboard.json
index 4d50e2ad749..1a3c46d691a 100644
--- a/keyboards/unikorn/keyboard.json
+++ b/keyboards/unikorn/keyboard.json
@@ -48,6 +48,9 @@
},
"processor": "atmega32a",
"bootloader": "bootloadhid",
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -193,7 +196,7 @@
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/unikorn/keymaps/tsangan/keymap.c b/keyboards/unikorn/keymaps/tsangan/keymap.c
index 814c0992854..0bb8918ac43 100644
--- a/keyboards/unikorn/keymaps/tsangan/keymap.c
+++ b/keyboards/unikorn/keymaps/tsangan/keymap.c
@@ -17,7 +17,7 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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,
@@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/vertex/arc60/keyboard.json b/keyboards/vertex/arc60/keyboard.json
index c6e9f6500af..ab98c446f0d 100644
--- a/keyboards/vertex/arc60/keyboard.json
+++ b/keyboards/vertex/arc60/keyboard.json
@@ -51,11 +51,15 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -338,7 +342,7 @@
{"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/vertex/arc60h/keyboard.json b/keyboards/vertex/arc60h/keyboard.json
index 4d4d903dc47..e6fed06bc19 100644
--- a/keyboards/vertex/arc60h/keyboard.json
+++ b/keyboards/vertex/arc60h/keyboard.json
@@ -52,7 +52,13 @@
"layout_aliases": {
"LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb"],
+ "community_layouts": [
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_ansi_wkl",
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb"
+ ],
"layouts": {
"LAYOUT_all": {
"layout": [
diff --git a/keyboards/weirdo/geminate60/keyboard.json b/keyboards/weirdo/geminate60/keyboard.json
index 828630725a0..12bc42b30d6 100644
--- a/keyboards/weirdo/geminate60/keyboard.json
+++ b/keyboards/weirdo/geminate60/keyboard.json
@@ -38,16 +38,18 @@
"bootloader": "stm32-dfu",
"board": "QMK_PROTON_C",
"layout_aliases": {
- "LAYOUT": "LAYOUT_all"
+ "LAYOUT": "LAYOUT_all",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_all": {
@@ -331,7 +333,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/weirdo/naiping/nphhkb/keyboard.json b/keyboards/weirdo/naiping/nphhkb/keyboard.json
index e89854f02e4..cc791374b42 100644
--- a/keyboards/weirdo/naiping/nphhkb/keyboard.json
+++ b/keyboards/weirdo/naiping/nphhkb/keyboard.json
@@ -38,11 +38,12 @@
"bootloader": "stm32-dfu",
"board": "QMK_PROTON_C",
"layout_aliases": {
- "LAYOUT": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
- "community_layouts": ["60_tsangan_hhkb"],
+ "community_layouts": ["60_ansi_tsangan_split_bs_rshift"],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/weirdo/naiping/nphhkb/keymaps/default/keymap.c b/keyboards/weirdo/naiping/nphhkb/keymaps/default/keymap.c
index 2c4b6324be3..491c28758d3 100644
--- a/keyboards/weirdo/naiping/nphhkb/keymaps/default/keymap.c
+++ b/keyboards/weirdo/naiping/nphhkb/keymaps/default/keymap.c
@@ -23,7 +23,7 @@ enum layer_names {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_60_tsangan_hhkb(
+ [_BASE] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_LALT, KC_LCTL, KC_SPC, KC_RCTL, KC_RALT, KC_TRNS ),
- [_FN] = LAYOUT_60_tsangan_hhkb(
+ [_FN] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_BSPC, KC_DEL,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/wekey/polaris/keyboard.json b/keyboards/wekey/polaris/keyboard.json
index 29d79b6a0bc..c3fe12f1440 100644
--- a/keyboards/wekey/polaris/keyboard.json
+++ b/keyboards/wekey/polaris/keyboard.json
@@ -32,7 +32,14 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_tsangan_hhkb"],
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -248,7 +255,7 @@
{"matrix": [9, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 1, "y": 0},
diff --git a/keyboards/westfoxtrot/prophet/keyboard.json b/keyboards/westfoxtrot/prophet/keyboard.json
index f82c6da14dd..b431adddae6 100644
--- a/keyboards/westfoxtrot/prophet/keyboard.json
+++ b/keyboards/westfoxtrot/prophet/keyboard.json
@@ -35,9 +35,13 @@
"bootloader": "stm32-dfu",
"community_layouts": [
"60_ansi_tsangan",
- "60_tsangan_hhkb",
- "60_iso_tsangan"
+ "60_ansi_tsangan_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -178,7 +182,7 @@
{"label": "Ctrl", "matrix": [4, 12], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/whitefacemountain/ampersand/keyboard.json b/keyboards/whitefacemountain/ampersand/keyboard.json
index 04840d05bcd..b0929e2d3c9 100644
--- a/keyboards/whitefacemountain/ampersand/keyboard.json
+++ b/keyboards/whitefacemountain/ampersand/keyboard.json
@@ -64,13 +64,13 @@
{"label": ".", "matrix": [2, 9], "x": 9.75, "y": 2},
{"label": "/", "matrix": [2, 10], "x": 10.75, "y": 2},
{"label": "Shift", "matrix": [2, 11], "x": 11.75, "y": 2, "w": 1.75},
- {"label": "Ctrl", "matrix": [3, 0], "x": 0, "y": 3, "w": 1},
- {"label": "LAlt", "matrix": [3, 1], "x": 1.75, "y": 3, "w": 1},
- {"label": "LGui", "matrix": [3, 2], "x": 2.75, "y": 3, "w": 1},
+ {"label": "Ctrl", "matrix": [3, 0], "x": 0, "y": 3},
+ {"label": "LAlt", "matrix": [3, 1], "x": 1.75, "y": 3},
+ {"label": "LGui", "matrix": [3, 2], "x": 2.75, "y": 3},
{"label": "Space", "matrix": [3, 5], "x": 3.75, "y": 3, "w": 6},
- {"label": "RGui", "matrix": [3, 8], "x": 9.75, "y": 3, "w": 1},
- {"label": "RAlt", "matrix": [3, 9], "x": 10.75, "y": 3, "w": 1},
- {"label": "RCtrl", "matrix": [3, 11], "x": 12.5, "y": 3, "w": 1}
+ {"label": "RGui", "matrix": [3, 8], "x": 9.75, "y": 3},
+ {"label": "RAlt", "matrix": [3, 9], "x": 10.75, "y": 3},
+ {"label": "RCtrl", "matrix": [3, 11], "x": 12.5, "y": 3}
]
},
"LAYOUT_split_bars": {
@@ -113,14 +113,14 @@
{"label": ".", "matrix": [2, 9], "x": 9.75, "y": 2},
{"label": "/", "matrix": [2, 10], "x": 10.75, "y": 2},
{"label": "Shift", "matrix": [2, 11], "x": 11.75, "y": 2, "w": 1.75},
- {"label": "Ctrl", "matrix": [3, 0], "x": 0, "y": 3, "w": 1},
+ {"label": "Ctrl", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "LAlt", "matrix": [3, 1], "x": 1.75, "y": 3, "w": 1.5},
- {"label": "LGui", "matrix": [3, 2], "x": 3.25, "y": 3, "w": 1},
+ {"label": "LGui", "matrix": [3, 2], "x": 3.25, "y": 3},
{"label": "Space", "matrix": [3, 3], "x": 4.25, "y": 3, "w": 2.25},
{"label": "Space", "matrix": [3, 7], "x": 6.5, "y": 3, "w": 2.75},
- {"label": "RGui", "matrix": [3, 8], "x": 9.25, "y": 3, "w": 1},
+ {"label": "RGui", "matrix": [3, 8], "x": 9.25, "y": 3},
{"label": "RAlt", "matrix": [3, 9], "x": 10.25, "y": 3, "w": 1.5},
- {"label": "RCtrl", "matrix": [3, 11], "x": 12.5, "y": 3, "w": 1}
+ {"label": "RCtrl", "matrix": [3, 11], "x": 12.5, "y": 3}
]
}
}
diff --git a/keyboards/wilba_tech/wt60_b/keyboard.json b/keyboards/wilba_tech/wt60_b/keyboard.json
index 9cbd43cdbb9..9b637bc0216 100644
--- a/keyboards/wilba_tech/wt60_b/keyboard.json
+++ b/keyboards/wilba_tech/wt60_b/keyboard.json
@@ -28,14 +28,15 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb"
],
"layouts": {
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/wilba_tech/wt60_b/keymaps/default/keymap.c b/keyboards/wilba_tech/wt60_b/keymaps/default/keymap.c
index 968fb7ffcab..c8988c78d3a 100644
--- a/keyboards/wilba_tech/wt60_b/keymaps/default/keymap.c
+++ b/keyboards/wilba_tech/wt60_b/keymaps/default/keymap.c
@@ -4,7 +4,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Default layer
-[0] = LAYOUT_60_tsangan_hhkb(
+[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -12,7 +12,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NO, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, TL_UPPR, KC_NO),
// Fn1 Layer
-[1] = LAYOUT_60_tsangan_hhkb(
+[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
@@ -20,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
// Fn2 Layer
-[2] = LAYOUT_60_tsangan_hhkb(
+[2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -28,7 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
// Fn3 Layer (zeal60 Configuration)
-[3] = LAYOUT_60_tsangan_hhkb(
+[3] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/wilba_tech/wt60_bx/keyboard.json b/keyboards/wilba_tech/wt60_bx/keyboard.json
index 7699df71063..f99a2cc868e 100644
--- a/keyboards/wilba_tech/wt60_bx/keyboard.json
+++ b/keyboards/wilba_tech/wt60_bx/keyboard.json
@@ -28,10 +28,11 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb"
],
"layouts": {
@@ -104,7 +105,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/wilba_tech/wt60_bx/keymaps/default/keymap.c b/keyboards/wilba_tech/wt60_bx/keymaps/default/keymap.c
index 72721af4f51..a255f0105bc 100644
--- a/keyboards/wilba_tech/wt60_bx/keymaps/default/keymap.c
+++ b/keyboards/wilba_tech/wt60_bx/keymaps/default/keymap.c
@@ -4,7 +4,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Default layer
-[0] = LAYOUT_60_tsangan_hhkb(
+[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -12,7 +12,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NO, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, TL_UPPR, KC_NO),
// Fn1 Layer
-[1] = LAYOUT_60_tsangan_hhkb(
+[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
@@ -20,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
// Fn2 Layer
-[2] = LAYOUT_60_tsangan_hhkb(
+[2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -28,7 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
// Fn3 Layer (zeal60 Configuration)
-[3] = LAYOUT_60_tsangan_hhkb(
+[3] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/wilba_tech/wt60_c/keyboard.json b/keyboards/wilba_tech/wt60_c/keyboard.json
index 27a59c69ff5..e155073c51c 100644
--- a/keyboards/wilba_tech/wt60_c/keyboard.json
+++ b/keyboards/wilba_tech/wt60_c/keyboard.json
@@ -28,10 +28,11 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb"
],
"layouts": {
@@ -104,7 +105,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/wilba_tech/wt60_c/keymaps/default/keymap.c b/keyboards/wilba_tech/wt60_c/keymaps/default/keymap.c
index d02327a8743..0aa69285213 100644
--- a/keyboards/wilba_tech/wt60_c/keymaps/default/keymap.c
+++ b/keyboards/wilba_tech/wt60_c/keymaps/default/keymap.c
@@ -3,28 +3,28 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT_60_tsangan_hhkb(
+[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, TL_LOWR,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, TL_UPPR, KC_RCTL),
-[1] = LAYOUT_60_tsangan_hhkb(
+[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-[2] = LAYOUT_60_tsangan_hhkb(
+[2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-[3] = LAYOUT_60_tsangan_hhkb(
+[3] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/wilba_tech/wt60_d/keyboard.json b/keyboards/wilba_tech/wt60_d/keyboard.json
index 95ecda66edc..731e9b8cdca 100644
--- a/keyboards/wilba_tech/wt60_d/keyboard.json
+++ b/keyboards/wilba_tech/wt60_d/keyboard.json
@@ -34,12 +34,16 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan",
- "60_tsangan_hhkb"
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_60_ansi": {
"layout": [
@@ -599,7 +603,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "`", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 3], "x": 1, "y": 0},
diff --git a/keyboards/wilba_tech/wt60_g/keyboard.json b/keyboards/wilba_tech/wt60_g/keyboard.json
index ba8a6a4d47d..526a6a9d727 100644
--- a/keyboards/wilba_tech/wt60_g/keyboard.json
+++ b/keyboards/wilba_tech/wt60_g/keyboard.json
@@ -33,12 +33,16 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
- "60_iso_tsangan"
+ "60_iso_tsangan",
+ "60_iso_tsangan_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -320,7 +324,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/wilba_tech/wt60_g2/keyboard.json b/keyboards/wilba_tech/wt60_g2/keyboard.json
index 85d51d0cd73..5f62d9d52bb 100644
--- a/keyboards/wilba_tech/wt60_g2/keyboard.json
+++ b/keyboards/wilba_tech/wt60_g2/keyboard.json
@@ -30,11 +30,12 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT_all": "LAYOUT_60_tsangan_hhkb"
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"community_layouts": [
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb"
],
"layouts": {
@@ -106,7 +107,7 @@
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/wilba_tech/wt60_g2/keymaps/default/keymap.c b/keyboards/wilba_tech/wt60_g2/keymaps/default/keymap.c
index 6901f2d6761..9910c070fc5 100644
--- a/keyboards/wilba_tech/wt60_g2/keymaps/default/keymap.c
+++ b/keyboards/wilba_tech/wt60_g2/keymaps/default/keymap.c
@@ -19,7 +19,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Default layer
- [0] = LAYOUT_60_tsangan_hhkb(
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),
// Fn1 Layer
- [1] = LAYOUT_60_tsangan_hhkb(
+ [1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
@@ -35,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
// Fn2 Layer
- [2] = LAYOUT_60_tsangan_hhkb(
+ [2] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -43,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
// Fn3 Layer
- [3] = LAYOUT_60_tsangan_hhkb(
+ [3] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
diff --git a/keyboards/windstudio/wind_x/r1/keyboard.json b/keyboards/windstudio/wind_x/r1/keyboard.json
new file mode 100644
index 00000000000..1b5f34fe3e8
--- /dev/null
+++ b/keyboards/windstudio/wind_x/r1/keyboard.json
@@ -0,0 +1,205 @@
+{
+ "manufacturer": "Windstudio",
+ "keyboard_name": "Wind X R1",
+ "maintainer": "chrisgve",
+ "bootloader": "atmel-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["C7", "C6", "B6", "E6", "F6", "D6", "D7", "B4", "B5", "F7", "B7", "F4", "F5", "D4", "B0", "B1", "B2", "B3"],
+ "rows": ["F0", "F1", "D2", "D1", "D0"]
+ },
+ "processor": "atmega32u4",
+ "url": "",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6801",
+ "vid": "0x6F75"
+ },
+ "layout_aliases": {
+ "LAYOUT_tsangan": "LAYOUT_7u_space_bar_split_bs"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"label": "Del", "matrix": [4, 11], "x": 16, "y": 0},
+ {"label": "NumLock", "matrix": [0, 14], "x": 18, "y": 0},
+ {"label": "KP/", "matrix": [0, 15], "x": 19, "y": 0},
+ {"label": "KP*", "matrix": [0, 16], "x": 20, "y": 0},
+ {"label": "KP-", "matrix": [0, 17], "x": 21, "y": 0},
+ {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "[", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "]", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "\\", "matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "PgUp", "matrix": [4, 12], "x": 16, "y": 1},
+ {"label": "KP7", "matrix": [1, 14], "x": 18, "y": 1},
+ {"label": "KP8", "matrix": [1, 15], "x": 19, "y": 1},
+ {"label": "KP9", "matrix": [1, 16], "x": 20, "y": 1},
+ {"label": "KP+", "matrix": [1, 17], "x": 21, "y": 1},
+ {"label": "Caps", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": ";", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "'", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "Return", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "PgDn", "matrix": [4, 13], "x": 16, "y": 2},
+ {"label": "KP4", "matrix": [2, 14], "x": 18, "y": 2},
+ {"label": "KP5", "matrix": [2, 15], "x": 19, "y": 2},
+ {"label": "KP6", "matrix": [2, 16], "x": 20, "y": 2},
+ {"label": "KP+", "matrix": [2, 17], "x": 21, "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": 13, "y": 3},
+ {"label": "KP1", "matrix": [3, 14], "x": 18, "y": 3},
+ {"label": "KP2", "matrix": [3, 15], "x": 19, "y": 3},
+ {"label": "KP3", "matrix": [3, 16], "x": 20, "y": 3},
+ {"label": "Enter", "matrix": [3, 17], "x": 21, "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, 5], "x": 3.75, "y": 4, "w": 6.25},
+ {"label": "GUI", "matrix": [4, 6], "x": 10, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "matrix": [4, 7], "x": 11.25, "y": 4, "w": 1.25},
+ {"label": "Left", "matrix": [4, 8], "x": 14, "y": 4},
+ {"label": "Down", "matrix": [4, 9], "x": 15, "y": 4},
+ {"label": "Right", "matrix": [4, 10], "x": 16, "y": 4},
+ {"label": "KP0", "matrix": [4, 16], "x": 18, "y": 4},
+ {"label": "KP.", "matrix": [4, 17], "x": 19, "y": 4}
+ ]
+ },
+ "LAYOUT_7u_space_bar_split_bs": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "=", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "\\", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "`", "matrix": [1, 13], "x": 14, "y": 0},
+ {"label": "PgUp", "matrix": [4, 11], "x": 16, "y": 0},
+ {"label": "NumLock", "matrix": [0, 14], "x": 18, "y": 0},
+ {"label": "KP/", "matrix": [0, 15], "x": 19, "y": 0},
+ {"label": "KP*", "matrix": [0, 16], "x": 20, "y": 0},
+ {"label": "KP-", "matrix": [0, 17], "x": 21, "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": "Backspace", "matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "PgDn", "matrix": [4, 12], "x": 16, "y": 1},
+ {"label": "KP7", "matrix": [1, 14], "x": 18, "y": 1},
+ {"label": "KP8", "matrix": [1, 15], "x": 19, "y": 1},
+ {"label": "KP9", "matrix": [1, 16], "x": 20, "y": 1},
+ {"label": "KP+", "matrix": [1, 17], "x": 21, "y": 1},
+ {"label": "Ctrl", "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": "Return", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "End", "matrix": [4, 13], "x": 16, "y": 2},
+ {"label": "KP4", "matrix": [2, 14], "x": 18, "y": 2},
+ {"label": "KP5", "matrix": [2, 15], "x": 19, "y": 2},
+ {"label": "KP6", "matrix": [2, 16], "x": 20, "y": 2},
+ {"label": "KP+", "matrix": [2, 17], "x": 21, "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": 13, "y": 3},
+ {"label": "KP1", "matrix": [3, 14], "x": 18, "y": 3},
+ {"label": "KP2", "matrix": [3, 15], "x": 19, "y": 3},
+ {"label": "KP3", "matrix": [3, 16], "x": 20, "y": 3},
+ {"label": "Enter", "matrix": [3, 17], "x": 21, "y": 3},
+ {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "Space", "matrix": [4, 5], "x": 4, "y": 4, "w": 7},
+ {"label": "Ctrl", "matrix": [4, 7], "x": 11, "y": 4, "w": 1.5},
+ {"label": "Left", "matrix": [4, 8], "x": 13, "y": 4},
+ {"label": "Down", "matrix": [4, 9], "x": 14, "y": 4},
+ {"label": "Right", "matrix": [4, 10], "x": 15, "y": 4},
+ {"label": "KP0", "matrix": [4, 16], "x": 18, "y": 4},
+ {"label": "KP.", "matrix": [4, 17], "x": 19, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/windstudio/wind_x/r1/keymaps/default/keymap.c b/keyboards/windstudio/wind_x/r1/keymaps/default/keymap.c
new file mode 100644
index 00000000000..dd3134e2a0f
--- /dev/null
+++ b/keyboards/windstudio/wind_x/r1/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2024 chrisgve
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
+
+// clang-format on
diff --git a/keyboards/windstudio/wind_x/r1/keymaps/default/readme.md b/keyboards/windstudio/wind_x/r1/keymaps/default/readme.md
new file mode 100644
index 00000000000..2fa0952a830
--- /dev/null
+++ b/keyboards/windstudio/wind_x/r1/keymaps/default/readme.md
@@ -0,0 +1,6 @@
+# Default Wind X R1 Layout
+
+This is the default layout that comes flashed on every Wind X R1. For the most
+part it's a straightforward and easy to follow layout. The only unusual key is
+the key in the upper left, which sends Escape normally, but Grave when any of
+the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/windstudio/wind_x/r1/readme.md b/keyboards/windstudio/wind_x/r1/readme.md
new file mode 100644
index 00000000000..c501951e422
--- /dev/null
+++ b/keyboards/windstudio/wind_x/r1/readme.md
@@ -0,0 +1,28 @@
+# WindX R1 by Windstudio
+
+
+_Compact, yet feature full working or gaming keyboard_
+
+A large layout keyboard without the function keys. [More info on geekhack.org](https://geekhack.org/index.php?topic=114767.0)
+
+- Keyboard Maintainer: [Christian C. Berclaz](https://github.com/chrisgve)
+- Hardware Supported: Wind X R1 w/ ATmega32U4 microcontroller
+- Hardware Availability: [windstudio.store](https://windstudio.store/collections/wind-x)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make windstudio/wind_x/r1:default
+
+Flashing example for this keyboard:
+
+ make windstudio/wind_x/r1:default:flash
+
+See the [build environment setup](getting_started_build_tools) and the [make instructions](getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](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/xdboards/recon/config.h b/keyboards/xdboards/recon/config.h
new file mode 100644
index 00000000000..22fbc833c14
--- /dev/null
+++ b/keyboards/xdboards/recon/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2024 XD Boards
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+ */
+
+#pragma once
+
+#define OLED_DISPLAY_128X64
diff --git a/keyboards/xdboards/recon/keyboard.json b/keyboards/xdboards/recon/keyboard.json
new file mode 100644
index 00000000000..65f3c88a329
--- /dev/null
+++ b/keyboards/xdboards/recon/keyboard.json
@@ -0,0 +1,201 @@
+{
+ "manufacturer": "XD Boards",
+ "keyboard_name": "xdboards/recon",
+ "maintainer": "Xanimos",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "nkro": true,
+ "rgb_matrix": true,
+ "oled": true
+ },
+ "matrix_pins": {
+ "cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
+ "rows": ["F4", "F5", "F6", "F7", "B1"]
+ },
+ "url": "https://xdboards.xyz",
+ "tags": ["columnar", "split", "thumb cluster", "rgb", "encoder"],
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x02F7",
+ "vid": "0xFEED"
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "B6","pin_b": "B2" }
+ ]
+ },
+ "split": {
+ "enabled": true,
+ "serial": {
+ "pin": "D3"
+ },
+ "handedness": {
+ "pin": "D2"
+ },
+ "transport": {
+ "sync": {
+ "layer_state": true,
+ "oled": true,
+ "matrix_state": true,
+ "modifiers": true
+ }
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "L01", "matrix": [0, 0], "x": 0, "y": 0.75},
+ {"label": "L02", "matrix": [0, 1], "x": 1, "y": 0.75},
+ {"label": "L03", "matrix": [0, 2], "x": 2, "y": 0.25},
+ {"label": "L04", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "L05", "matrix": [0, 4], "x": 4, "y": 0.25},
+ {"label": "L06", "matrix": [0, 5], "x": 5, "y": 0.5},
+
+ {"label": "R06", "matrix": [5, 5], "x": 10.5, "y": 0.5},
+ {"label": "R05", "matrix": [5, 4], "x": 11.5, "y": 0.25},
+ {"label": "R04", "matrix": [5, 3], "x": 12.5, "y": 0},
+ {"label": "R03", "matrix": [5, 2], "x": 13.5, "y": 0.25},
+ {"label": "R02", "matrix": [5, 1], "x": 14.5, "y": 0.75},
+ {"label": "R01", "matrix": [5, 0], "x": 15.5, "y": 0.75},
+
+ {"label": "L07", "matrix": [1, 0], "x": 0, "y": 1.75},
+ {"label": "L08", "matrix": [1, 1], "x": 1, "y": 1.75},
+ {"label": "L09", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "L10", "matrix": [1, 3], "x": 3, "y": 1},
+ {"label": "L11", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "L12", "matrix": [1, 5], "x": 5, "y": 1.5},
+
+ {"label": "R12", "matrix": [6, 5], "x": 10.5, "y": 1.5},
+ {"label": "R11", "matrix": [6, 4], "x": 11.5, "y": 1.25},
+ {"label": "R10", "matrix": [6, 3], "x": 12.5, "y": 1},
+ {"label": "R09", "matrix": [6, 2], "x": 13.5, "y": 1.25},
+ {"label": "R08", "matrix": [6, 1], "x": 14.5, "y": 1.75},
+ {"label": "R07", "matrix": [6, 0], "x": 15.5, "y": 1.75},
+
+ {"label": "L13", "matrix": [2, 0], "x": 0, "y": 2.75},
+ {"label": "L14", "matrix": [2, 1], "x": 1, "y": 2.75},
+ {"label": "L15", "matrix": [2, 2], "x": 2, "y": 2.25},
+ {"label": "L16", "matrix": [2, 3], "x": 3, "y": 2},
+ {"label": "L17", "matrix": [2, 4], "x": 4, "y": 2.25},
+ {"label": "L18", "matrix": [2, 5], "x": 5, "y": 2.5},
+
+ {"label": "R18", "matrix": [7, 5], "x": 10.5, "y": 2.5},
+ {"label": "R17", "matrix": [7, 4], "x": 11.5, "y": 2.25},
+ {"label": "R16", "matrix": [7, 3], "x": 12.5, "y": 2},
+ {"label": "R15", "matrix": [7, 2], "x": 13.5, "y": 2.25},
+ {"label": "R14", "matrix": [7, 1], "x": 14.5, "y": 2.75},
+ {"label": "R13", "matrix": [7, 0], "x": 15.5, "y": 2.75},
+
+ {"label": "L27", "encoder": 0, "matrix": [3, 0], "x": 6, "y": 2.7},
+
+ {"label": "R27", "encoder": 1, "matrix": [8, 0], "x": 9.5, "y": 2.7},
+
+ {"label": "L19", "matrix": [3, 2], "x": 4.25, "y": 3.5},
+ {"label": "L20", "matrix": [3, 3], "x": 5.25, "y": 3.75},
+ {"label": "L21", "matrix": [3, 4], "x": 6.25, "y": 4},
+ {"label": "L22", "matrix": [3, 5], "x": 7.25, "y": 4.25},
+
+ {"label": "R22", "matrix": [8, 5], "x": 8, "y": 4.25},
+ {"label": "R21", "matrix": [8, 4], "x": 9, "y": 4},
+ {"label": "R20", "matrix": [8, 3], "x": 10, "y": 3.75},
+ {"label": "R19", "matrix": [8, 2], "x": 11, "y": 3.5},
+
+ {"label": "L23", "matrix": [4, 2], "x": 4.25, "y": 4.5},
+ {"label": "L24", "matrix": [4, 3], "x": 5.25, "y": 4.75},
+ {"label": "L25", "matrix": [4, 4], "x": 6.25, "y": 5},
+ {"label": "L26", "matrix": [4, 5], "x": 7.25, "y": 5.25},
+
+ {"label": "R26", "matrix": [9, 5], "x": 8, "y": 5.25},
+ {"label": "R25", "matrix": [9, 4], "x": 9, "y": 5},
+ {"label": "R24", "matrix": [9, 3], "x": 10, "y": 4.75},
+ {"label": "R23", "matrix": [9, 2], "x": 11, "y": 4.5}
+
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "layout": [
+
+ {"flags": 4, "matrix": [0, 0], "x": 13, "y": 16},
+ {"flags": 4, "matrix": [0, 1], "x": 21, "y": 16},
+ {"flags": 4, "matrix": [0, 2], "x": 30, "y": 11},
+ {"flags": 4, "matrix": [0, 3], "x": 38, "y": 6},
+ {"flags": 4, "matrix": [0, 4], "x": 46, "y": 11},
+ {"flags": 4, "matrix": [0, 5], "x": 55, "y": 12},
+ {"flags": 4, "matrix": [1, 0], "x": 13, "y": 24},
+ {"flags": 4, "matrix": [1, 1], "x": 21, "y": 24},
+ {"flags": 4, "matrix": [1, 2], "x": 30, "y": 19},
+ {"flags": 4, "matrix": [1, 3], "x": 38, "y": 14},
+ {"flags": 4, "matrix": [1, 4], "x": 46, "y": 19},
+ {"flags": 4, "matrix": [1, 5], "x": 55, "y": 20},
+ {"flags": 4, "matrix": [2, 0], "x": 13, "y": 32},
+ {"flags": 4, "matrix": [2, 1], "x": 21, "y": 32},
+ {"flags": 4, "matrix": [2, 2], "x": 30, "y": 26},
+ {"flags": 4, "matrix": [2, 3], "x": 38, "y": 22},
+ {"flags": 4, "matrix": [2, 4], "x": 46, "y": 27},
+ {"flags": 4, "matrix": [2, 5], "x": 55, "y": 28},
+
+ {"flags": 4, "matrix": [3, 2], "x": 42, "y": 35},
+ {"flags": 4, "matrix": [3, 3], "x": 54, "y": 37},
+ {"flags": 4, "matrix": [3, 4], "x": 65, "y": 40},
+ {"flags": 4, "matrix": [3, 5], "x": 76, "y": 45},
+ {"flags": 4, "matrix": [4, 2], "x": 42, "y": 44},
+ {"flags": 4, "matrix": [4, 3], "x": 52, "y": 45},
+ {"flags": 4, "matrix": [4, 4], "x": 62, "y": 47},
+ {"flags": 4, "matrix": [4, 5], "x": 71, "y": 52},
+
+ {"flags": 2, "x": 68, "y": 36},
+ {"flags": 2, "x": 57, "y": 8},
+ {"flags": 2, "x": 31, "y": 6},
+ {"flags": 2, "x": 14, "y": 12},
+ {"flags": 2, "x": 28, "y": 37},
+
+ {"flags": 4, "matrix": [5, 0], "x": 175, "y": 16},
+ {"flags": 4, "matrix": [5, 1], "x": 166, "y": 16},
+ {"flags": 4, "matrix": [5, 2], "x": 158, "y": 11},
+ {"flags": 4, "matrix": [5, 3], "x": 149, "y": 6},
+ {"flags": 4, "matrix": [5, 4], "x": 141, "y": 11},
+ {"flags": 4, "matrix": [5, 5], "x": 133, "y": 12},
+ {"flags": 4, "matrix": [6, 0], "x": 175, "y": 24},
+ {"flags": 4, "matrix": [6, 1], "x": 166, "y": 24},
+ {"flags": 4, "matrix": [6, 2], "x": 158, "y": 19},
+ {"flags": 4, "matrix": [6, 3], "x": 149, "y": 14},
+ {"flags": 4, "matrix": [6, 4], "x": 141, "y": 19},
+ {"flags": 4, "matrix": [6, 5], "x": 133, "y": 20},
+ {"flags": 4, "matrix": [7, 0], "x": 175, "y": 32},
+ {"flags": 4, "matrix": [7, 1], "x": 166, "y": 32},
+ {"flags": 4, "matrix": [7, 2], "x": 158, "y": 26},
+ {"flags": 4, "matrix": [7, 3], "x": 149, "y": 22},
+ {"flags": 4, "matrix": [7, 4], "x": 141, "y": 27},
+ {"flags": 4, "matrix": [7, 5], "x": 133, "y": 28},
+
+ {"flags": 4, "matrix": [8, 2], "x": 146, "y": 35},
+ {"flags": 4, "matrix": [8, 3], "x": 134, "y": 37},
+ {"flags": 4, "matrix": [8, 4], "x": 123, "y": 40},
+ {"flags": 4, "matrix": [8, 5], "x": 113, "y": 45},
+ {"flags": 4, "matrix": [9, 2], "x": 146, "y": 44},
+ {"flags": 4, "matrix": [9, 3], "x": 136, "y": 45},
+ {"flags": 4, "matrix": [9, 4], "x": 126, "y": 47},
+ {"flags": 4, "matrix": [9, 5], "x": 117, "y": 52},
+
+ {"flags": 2, "x": 121, "y": 36},
+ {"flags": 2, "x": 130, "y": 8},
+ {"flags": 2, "x": 156, "y": 6},
+ {"flags": 2, "x": 172, "y": 12},
+ {"flags": 2, "x": 158, "y": 37}
+ ],
+ "split_count": [31, 31],
+ "animations": {
+ "alphas_mods": true,
+ "solid_reactive": true
+ },
+ "default": {
+ "animation": "solid_reactive",
+ "hue": 126
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/xdboards/recon/keymaps/default/keymap.c b/keyboards/xdboards/recon/keymaps/default/keymap.c
new file mode 100644
index 00000000000..30d96e09bad
--- /dev/null
+++ b/keyboards/xdboards/recon/keymaps/default/keymap.c
@@ -0,0 +1,155 @@
+/* Copyright 2024 XD Boards
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _SYMBOLS,
+ _NUMBERS,
+ _FUNCTION,
+ _RGB
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ ESC │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ Bsp │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ Tab │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ CTL │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │Shift│ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │Shift│
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ ┌─────┐ ┌─────┐ └─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌─────┐ │Mute │ │P Scr│ ┌─────┐
+ * │ ALT ├─────┐ └─────┘ └─────┘ ┌─────┤ Alt │
+ * ├─────┤ ( ├─────┐ ┌─────┤ ) ├─────┤
+ * │ GUI ├─────┤ { ├─────┐ ┌─────┤ } ├─────┤ App │
+ * └─────┤Space├─────┤ [ │ │ ] ├─────┤ Ent ├─────┘
+ * └─────┤ Fnc ├─────┤ ├─────┤ Sym ├─────┘
+ * └─────┤Qwert│ │ Num ├─────┘
+ * └─────┘ └─────┘
+ */
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RCTL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_MUTE, KC_PSCR,
+ KC_LALT, KC_LPRN, KC_LCBR, KC_LBRC, KC_RBRC, KC_RCBR, KC_RPRN, KC_RALT,
+ KC_LGUI, KC_SPC,TO(_FUNCTION),TO(_QWERTY), TO(_NUMBERS),TO(_SYMBOLS),KC_ENT, KC_APP
+ ),
+ /*
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ ` │ ! │ @ │ # │ $ │ % │ │ + │ " │ ' │ | │ \ │ Bsp │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ Tab │ ^ │ & │ * │ ( │ ) │ │ = │ < │ > │ : │ ; │ Ctl │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │Shift│ _ │ [ │ ] │ { │ } │ │ - │ ~ │ , │ . │ ? │Shift│
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ ┌─────┐ ┌─────┐ └─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌─────┐ │Mute │ │P Scr│ ┌─────┐
+ * │ ALT ├─────┐ └─────┘ └─────┘ ┌─────┤ Alt │
+ * ├─────┤ ( ├─────┐ ┌─────┤ ) ├─────┤
+ * │ GUI ├─────┤ { ├─────┐ ┌─────┤ } ├─────┤ App │
+ * └─────┤Space├─────┤ [ │ │ ] ├─────┤ Ent ├─────┘
+ * └─────┤ Fnc ├─────┤ ├─────┤ Sym ├─────┘
+ * └─────┤Qwert│ │ Num ├─────┘
+ * └─────┘ └─────┘
+ */
+ [_SYMBOLS] = LAYOUT(
+ KC_GRAVE, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PLUS, KC_DQUO, KC_QUOTE,KC_PIPE, KC_BSLS, KC_BSPC,
+ KC_TAB, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_EQUAL,KC_LT, KC_GT, KC_COLN, KC_SCLN, KC_RCTL,
+ KC_LSFT, KC_UNDS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_MINUS,KC_TILD, KC_COMM, KC_DOT, KC_QUES, KC_NUM,
+ KC_MUTE, KC_PSCR,
+ KC_LALT, KC_LPRN, KC_LCBR, KC_LBRC, KC_RBRC, KC_RCBR, KC_RPRN, KC_RALT,
+ KC_LGUI, KC_SPC,TO(_FUNCTION),TO(_QWERTY), TO(_NUMBERS),TO(_SYMBOLS),KC_ENT, KC_APP
+ ),
+ /*
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ │ + │ 7 │ 8 │ 9 │ * │ Bsp │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ Ctl │ 6 │ 7 │ 8 │ 9 │ 0 │ │ = │ 4 │ 5 │ 6 │ \ │ : │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │Shift│ │ │ │ │ │ │ - │ 1 │ 2 │ 3 │ / │Nm Lk│
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ ┌─────┐ ┌─────┐ └─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌─────┐ │Mute │ │P Scr│ ┌─────┐
+ * │ ALT ├─────┐ └─────┘ └─────┘ ┌─────┤ 0 │
+ * ├─────┤ ├─────┐ ┌─────┤ . ├─────┤
+ * │ GUI ├─────┤ ├─────┐ ┌─────┤ , ├─────┤ App │
+ * └─────┤Space├─────┤ │ │ ├─────┤ Ent ├─────┘
+ * └─────┤ Fnc ├─────┤ ├─────┤ Sym ├─────┘
+ * └─────┤Qwert│ │ Num ├─────┘
+ * └─────┘ └─────┘
+ */
+ [_NUMBERS] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_PPLS, KC_P7, KC_P8, KC_P9, KC_PAST, KC_BSPC,
+ KC_LCTL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PEQL, KC_P4, KC_P5, KC_P6, KC_BSLS, KC_COLN,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PMNS, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_NUM,
+ KC_MUTE, KC_PSCR,
+ KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_PDOT, KC_P0,
+ KC_LGUI, KC_SPC,TO(_FUNCTION),TO(_QWERTY), TO(_NUMBERS),TO(_SYMBOLS),KC_ENT, KC_APP
+ ),
+ /*
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │Caps │ │ │ ↑ │ │ │ │ Ins │ Home│Pg Up│Pause│ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │Shift│ │ ← │ ↓ │ → │ │ │ Del │ End │Pg Dn│ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ ┌─────┐ ┌─────┐ └─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌─────┐ │Mute │ │P Scr│ ┌─────┐
+ * │ ALT ├─────┐ └─────┘ └─────┘ ┌─────┤ 0 │
+ * ├─────┤ ├─────┐ ┌─────┤ . ├─────┤
+ * │ GUI ├─────┤ ├─────┐ ┌─────┤ ├─────┤ App │
+ * └─────┤Space├─────┤ │ │ ├─────┤ Ent ├─────┘
+ * └─────┤ RGB ├─────┤ ├─────┤ Sym ├─────┘
+ * └─────┤Qwert│ │ Num ├─────┘
+ * └─────┘ └─────┘
+ */
+ [_FUNCTION] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_CAPS, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_INS, KC_HOME, KC_PGUP, KC_PAUS, KC_NO, KC_NO,
+ KC_LSFT, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_NO, KC_DEL, KC_END, KC_PGDN, KC_NO, KC_NO, KC_RSFT,
+ KC_MUTE, KC_PSCR,
+ KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DOT, KC_0,
+ KC_LGUI, KC_SPC,MO(_RGB),TO(_QWERTY), TO(_NUMBERS),TO(_SYMBOLS),KC_ENT, KC_APP
+ ),
+/*
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │Mode↑│Hue ↑│Sat ↑│Val ↑│Spd ↑│ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┤
+ * │OnOff│Mode↓│Hue ↓│Sat ↓│Val ↓│Spd ↓│ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴─────┘ ┌─────┐ ┌─────┐ └─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌─────┐ │ │ │ │ ┌─────┐
+ * │ ├─────┐ └─────┘ └─────┘ ┌─────┤ │
+ * ├─────┤ ├─────┐ ┌─────┤ ├─────┤
+ * │ ├─────┤ ├─────┐ ┌─────┤ ├─────┤ │
+ * └─────┤ ├─────┤ │ │ ├─────┤ ├─────┘
+ * └─────┤ ├─────┤ ├─────┤ ├─────┘
+ * └─────┤ │ │ ├─────┘
+ * └─────┘ └─────┘
+ */
+ [_RGB] = LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ RGB_TOG, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO,
+ KC_NO , KC_NO, KC_NO, KC_NO, KC_NO , KC_NO, KC_NO, KC_NO,
+ KC_NO , KC_NO, KC_NO, KC_NO, KC_NO , KC_NO, KC_NO, KC_NO
+ )
+};
+// clang-format on
diff --git a/keyboards/xdboards/recon/post_config.h b/keyboards/xdboards/recon/post_config.h
new file mode 100644
index 00000000000..9e4950e04a8
--- /dev/null
+++ b/keyboards/xdboards/recon/post_config.h
@@ -0,0 +1,24 @@
+/* Copyright 2024 XD Boards
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+ */
+
+#pragma once
+
+#ifdef USE_SEA_PICRO_RGB_PIN
+ // Dedicated 5V RGB signal pin on sea-picro
+# define WS2812_DI_PIN 25U
+#else
+# define WS2812_DI_PIN B3
+#endif
\ No newline at end of file
diff --git a/keyboards/xdboards/recon/post_rules.mk b/keyboards/xdboards/recon/post_rules.mk
new file mode 100644
index 00000000000..8b9382b32ab
--- /dev/null
+++ b/keyboards/xdboards/recon/post_rules.mk
@@ -0,0 +1,3 @@
+ifeq ($(strip $(USE_SEA_PICRO_RGB_PIN)), yes)
+ OPT_DEFS += -DUSE_SEA_PICRO_RGB_PIN
+endif
\ No newline at end of file
diff --git a/keyboards/xdboards/recon/readme.md b/keyboards/xdboards/recon/readme.md
new file mode 100644
index 00000000000..49dbddbbfb1
--- /dev/null
+++ b/keyboards/xdboards/recon/readme.md
@@ -0,0 +1,57 @@
+# xdboards/recon
+
+
+
+A split low profile keyboard with hotswap sockets that is built around the Sea-Picro microcontroller for it's dedicated RGB pin.
+
+* Keyboard Maintainer: [Daniel Weeks](https://github.com/Xanimos)
+* Hardware Supported: Recon PCB, Sea-Picro, backwards compatibility with ProMicro pin layout.
+* Hardware Availability: [xdboards.xyz shop](https://www.xdboards.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make xdboards/recon: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 2 ways:
+
+* **Physical reset button**: Briefly press the button on the side of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
+* **Boot Magic**: Hold down the boot magic key while plugging in the USB cable
+
+## Setup for Sea-Picro microcontrollers
+
+To take advantage of the dedicated 5v RGB pin on the sea-picro you must create your keymap
+and then add a `rules.mk` file and copy and paste the following:
+```
+CONVERT_TO = rp2040_ce
+USE_SEA_PICRO_RGB_PIN = yes
+```
+
+If you do not want to use the dedicated 5v RGB header then follow the Setup for non Sea-Picro microcontrollers.
+
+## Setup for non Sea-Picro microcontrollers
+
+Solder the "Pro-Micro Compatibility" jumper on the bottom of both boards.
+
+In your keymap directory:
+ - add/modify a `rules.mk` file
+ - Remove or set `CONVERT_TO` to desired converter see [QMK Documentation](https://docs.qmk.fm/#/feature_converters)
+ - Remove or set `USE_SEA_PICRO_RGB_PIN` to `no`
+
+
+## Setup for Underglow rgb only
+
+
+Solder the "Per-Key RGB Skip" jumper on the bottom of both boards. Do not install per key RGBs.
+
+In your keymap directory:
+ - add/modify a `config.h` file and insert
+ ```
+ #define RGB_MATRIX_SPLIT { 5, 5 }
+ #define RGB_MATRIX_LED_COUNT 10
+ ```
+
\ No newline at end of file
diff --git a/keyboards/xdboards/recon/recon.c b/keyboards/xdboards/recon/recon.c
new file mode 100644
index 00000000000..708c9d894c9
--- /dev/null
+++ b/keyboards/xdboards/recon/recon.c
@@ -0,0 +1,118 @@
+/* Copyright 2024 XD Boards
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ return OLED_ROTATION_180;
+}
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ if (is_keyboard_master()) {
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("Layer: "), false);
+ switch (get_highest_layer(layer_state | default_layer_state)) {
+ case 0:
+ oled_write_P(PSTR("QWERTY\n"), false);
+ break;
+ case 1:
+ oled_write_P(PSTR("Symbols\n"), false);
+ break;
+ case 2:
+ oled_write_P(PSTR("Numbers\n"), false);
+ break;
+ case 3:
+ oled_write_P(PSTR("Function\n"), false);
+ break;
+ case 4:
+ oled_write_P(PSTR("RGB\n"), false);
+ break;
+ default:
+ oled_write_P(PSTR("Undefined\n"), false);
+ }
+ // Host Keyboard LED Status
+ led_t led_usb_state = host_keyboard_led_state();
+ oled_write_P(PSTR("CAPSLCK"), led_usb_state.caps_lock);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("NUMLCK"), led_usb_state.num_lock);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("SCRLCK"), led_usb_state.scroll_lock);
+ oled_write_P(PSTR("\n"), false);
+
+ oled_write_P(PSTR("\n"), false);
+
+ static const char PROGMEM qmk_logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
+ };
+
+ oled_write_P(qmk_logo, false);
+
+ } else {
+ // clang-format off
+ static const char PROGMEM recon_logo[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,254,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,224,240,240,248,252,124,126, 62, 62, 31, 31, 31, 0, 0, 0,255,255,255, 0, 0, 31, 31, 31, 62, 62, 62,124,252,248,248,240,224,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,128,224,248,252,255,127, 31, 15, 7, 3, 1, 0, 0, 0, 0,128,192,224,224,240,240,240,115,115,115,240,240,224,224,192,192,128, 0, 0, 0, 0, 1, 3, 7, 15, 63,255,254,252,240,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 192,192,192,192,192,192,192,204,207,207,207,207,193,192,192,192,192, 0, 0,224,248,254,255, 15, 7, 3, 1, 0,192,224,224,224,224,192, 0, 1, 1, 3, 7, 63,255,252,240, 0, 0,192,192,192,192,192,199,207,207,207,207,192,192,192,192,192,192,192,128, 0,254,254,254,254,254, 0,134,254,254,252,124, 48, 0, 0,254,254,254,254,254,252,134,230,222, 62, 0,224,248,252,252,254, 6, 2, 6, 14, 62,126, 0,224,248,252,254,254, 6, 6,254,254,252,248,240, 0, 6,238,254,126,254,254,252,240,224,134,254, 14, 6, 0,
+ 3, 3, 3, 3, 3, 3, 3, 51,243,243,243,243,131, 3, 3, 3, 3, 0, 0, 7, 31,127,255,240,224,192,128, 0, 1, 7, 7, 7, 7, 3, 0,128,128,192,224,252,255, 63, 15, 0, 0, 3, 3, 3, 3, 3,227,243,243,243,243, 3, 3, 3, 3, 3, 3, 3, 1, 64,127,127,127,127,127, 97, 3,127,127,127,126,120, 48, 0,127,127,127,127,127, 63, 97,103,119,124, 48, 15, 31, 63,127,127, 96, 64, 96, 96, 48, 24, 0, 15, 31, 63,127,127, 64, 64,127,127, 63, 63, 15, 0, 64,127,127, 96, 1, 7, 15, 63,127,127,127, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 31, 63,255,254,248,240,224,192,128, 0, 0, 0, 0, 1, 3, 7, 7, 7, 15, 15,207,206,207, 15, 15, 7, 7, 3, 3, 1, 0, 0, 0, 0,128,192,224,248,252,255,127, 63, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 7, 15, 15, 31, 63, 62,126,124,124,248,248,248, 0, 0, 0,255,255,255, 0, 0,248,248,248,124,124,124, 62, 63, 31, 15, 15, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ // clang-format on
+ oled_write_raw_P(recon_logo, sizeof(recon_logo));
+ }
+ return false;
+}
+#endif
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+
+ if (index == 0) {
+ // Volume control
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) {
+ // Page up/Page down
+ if (clockwise) {
+#ifdef MOUSEKEY_ENABLE
+ tap_code(KC_WH_U);
+#else
+ tap_code(KC_PGUP);
+#endif
+ } else {
+#ifdef MOUSEKEY_ENABLE
+ tap_code(KC_WH_D);
+#else
+ tap_code(KC_PGDN);
+#endif
+ }
+ }
+ return true;
+}
+#endif
\ No newline at end of file
diff --git a/keyboards/xelus/dawn60/info.json b/keyboards/xelus/dawn60/info.json
index aafac25e05d..2c71fef898e 100644
--- a/keyboards/xelus/dawn60/info.json
+++ b/keyboards/xelus/dawn60/info.json
@@ -17,6 +17,7 @@
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layout_aliases": {
- "LAYOUT_60_all": "LAYOUT_all"
+ "LAYOUT_60_all": "LAYOUT_all",
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
}
}
diff --git a/keyboards/xelus/dawn60/rev1/keyboard.json b/keyboards/xelus/dawn60/rev1/keyboard.json
index bfdaf26e764..a865ac31199 100644
--- a/keyboards/xelus/dawn60/rev1/keyboard.json
+++ b/keyboards/xelus/dawn60/rev1/keyboard.json
@@ -85,7 +85,7 @@
{"matrix": [4, 13], "x": 14, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/xelus/dawn60/rev1_qmk/keyboard.json b/keyboards/xelus/dawn60/rev1_qmk/keyboard.json
index 7c3aa607dfe..0045879a1ff 100644
--- a/keyboards/xelus/dawn60/rev1_qmk/keyboard.json
+++ b/keyboards/xelus/dawn60/rev1_qmk/keyboard.json
@@ -139,7 +139,7 @@
{"matrix": [4, 13], "x": 14, "y": 4}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/xelus/rs60/info.json b/keyboards/xelus/rs60/info.json
index c1771427f13..c36d968d37b 100644
--- a/keyboards/xelus/rs60/info.json
+++ b/keyboards/xelus/rs60/info.json
@@ -13,5 +13,13 @@
"resync": true
}
},
- "community_layouts": ["60_ansi_split_bs_rshift", "60_ansi", "60_ansi_tsangan", "60_tsangan_hhkb"]
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ }
}
diff --git a/keyboards/xelus/rs60/rev1/keyboard.json b/keyboards/xelus/rs60/rev1/keyboard.json
index df872967fb4..f8b36734311 100644
--- a/keyboards/xelus/rs60/rev1/keyboard.json
+++ b/keyboards/xelus/rs60/rev1/keyboard.json
@@ -231,7 +231,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/xelus/rs60/rev2_0/keyboard.json b/keyboards/xelus/rs60/rev2_0/keyboard.json
index 9cb7b24043e..754225b17cc 100644
--- a/keyboards/xelus/rs60/rev2_0/keyboard.json
+++ b/keyboards/xelus/rs60/rev2_0/keyboard.json
@@ -236,7 +236,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/xelus/rs60/rev2_1/keyboard.json b/keyboards/xelus/rs60/rev2_1/keyboard.json
index d7e56fe1cfc..12f6e42823c 100644
--- a/keyboards/xelus/rs60/rev2_1/keyboard.json
+++ b/keyboards/xelus/rs60/rev2_1/keyboard.json
@@ -239,7 +239,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/zeix/eden/keyboard.json b/keyboards/zeix/eden/keyboard.json
index 2b5fd6eae7c..3d44a663b9b 100644
--- a/keyboards/zeix/eden/keyboard.json
+++ b/keyboards/zeix/eden/keyboard.json
@@ -30,7 +30,7 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_ansi_wkl",
"60_ansi_wkl_split_bs_rshift",
"60_hhkb",
@@ -41,6 +41,9 @@
"60_iso_wkl",
"60_iso_wkl_split_bs_rshift"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -323,7 +326,7 @@
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/zeix/qwertyqop60hs/keyboard.json b/keyboards/zeix/qwertyqop60hs/keyboard.json
index 8a3e06f2eb4..6397551ff70 100644
--- a/keyboards/zeix/qwertyqop60hs/keyboard.json
+++ b/keyboards/zeix/qwertyqop60hs/keyboard.json
@@ -26,9 +26,12 @@
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
- "60_tsangan_hhkb",
+ "60_ansi_tsangan_split_bs_rshift",
"60_hhkb"
],
+ "layout_aliases": {
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -310,7 +313,7 @@
{ "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
]
},
- "LAYOUT_60_tsangan_hhkb": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
diff --git a/keyboards/zeix/singa/kohaku/config.h b/keyboards/zeix/singa/kohaku/config.h
new file mode 100644
index 00000000000..77970ce4d34
--- /dev/null
+++ b/keyboards/zeix/singa/kohaku/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2023 zeix (@itsme-zeix)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
diff --git a/keyboards/zeix/singa/kohaku/keyboard.json b/keyboards/zeix/singa/kohaku/keyboard.json
new file mode 100644
index 00000000000..542bad9c6fc
--- /dev/null
+++ b/keyboards/zeix/singa/kohaku/keyboard.json
@@ -0,0 +1,698 @@
+{
+ "manufacturer": "SINGA",
+ "keyboard_name": "Kohaku",
+ "maintainer": "itsme-zeix",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "rgblight": true,
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true
+ },
+ "indicators": {
+ "caps_lock": "GP29"
+ },
+ "matrix_pins": {
+ "cols": ["GP7", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0"],
+ "rows": ["GP27", "GP28", "GP10", "GP11", "GP18", "GP19", "GP23", "GP24", "GP25", "GP26"]
+ },
+ "processor": "RP2040",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "brightness_steps": 8,
+ "led_count": 28,
+ "saturation_steps": 8,
+ "sleep": true
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x8888",
+ "vid": "0x4C27"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP20"
+ },
+ "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": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [1, 1], "x": 3, "y": 0},
+ {"matrix": [0, 2], "x": 4, "y": 0},
+ {"matrix": [1, 2], "x": 5, "y": 0},
+ {"matrix": [0, 3], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [0, 4], "x": 8, "y": 0},
+ {"matrix": [1, 4], "x": 9, "y": 0},
+ {"matrix": [0, 5], "x": 10, "y": 0},
+ {"matrix": [1, 5], "x": 11, "y": 0},
+ {"matrix": [0, 6], "x": 12, "y": 0},
+ {"matrix": [1, 6], "x": 13, "y": 0},
+ {"matrix": [0, 7], "x": 14, "y": 0},
+ {"matrix": [1, 7], "x": 15, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 1.5, "y": 1},
+ {"matrix": [2, 1], "x": 2.5, "y": 1},
+ {"matrix": [3, 1], "x": 3.5, "y": 1},
+ {"matrix": [2, 2], "x": 4.5, "y": 1},
+ {"matrix": [3, 2], "x": 5.5, "y": 1},
+ {"matrix": [2, 3], "x": 6.5, "y": 1},
+ {"matrix": [3, 3], "x": 7.5, "y": 1},
+ {"matrix": [2, 4], "x": 8.5, "y": 1},
+ {"matrix": [3, 4], "x": 9.5, "y": 1},
+ {"matrix": [2, 5], "x": 10.5, "y": 1},
+ {"matrix": [3, 5], "x": 11.5, "y": 1},
+ {"matrix": [2, 6], "x": 12.5, "y": 1},
+ {"matrix": [3, 6], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [3, 7], "x": 15, "y": 1},
+ {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 1.75, "y": 2},
+ {"matrix": [4, 1], "x": 2.75, "y": 2},
+ {"matrix": [5, 1], "x": 3.75, "y": 2},
+ {"matrix": [4, 2], "x": 4.75, "y": 2},
+ {"matrix": [5, 2], "x": 5.75, "y": 2},
+ {"matrix": [4, 3], "x": 6.75, "y": 2},
+ {"matrix": [5, 3], "x": 7.75, "y": 2},
+ {"matrix": [4, 4], "x": 8.75, "y": 2},
+ {"matrix": [5, 4], "x": 9.75, "y": 2},
+ {"matrix": [4, 5], "x": 10.75, "y": 2},
+ {"matrix": [5, 5], "x": 11.75, "y": 2},
+ {"matrix": [4, 6], "x": 12.75, "y": 2},
+ {"matrix": [5, 6], "x": 13.75, "y": 2, "w": 1.25},
+ {"matrix": [5, 7], "x": 15, "y": 2},
+ {"matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [7, 0], "x": 1.25, "y": 3},
+ {"matrix": [6, 1], "x": 2.25, "y": 3},
+ {"matrix": [7, 1], "x": 3.25, "y": 3},
+ {"matrix": [6, 2], "x": 4.25, "y": 3},
+ {"matrix": [7, 2], "x": 5.25, "y": 3},
+ {"matrix": [6, 3], "x": 6.25, "y": 3},
+ {"matrix": [7, 3], "x": 7.25, "y": 3},
+ {"matrix": [6, 4], "x": 8.25, "y": 3},
+ {"matrix": [7, 4], "x": 9.25, "y": 3},
+ {"matrix": [6, 5], "x": 10.25, "y": 3},
+ {"matrix": [7, 5], "x": 11.25, "y": 3},
+ {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 6], "x": 14, "y": 3},
+ {"matrix": [7, 7], "x": 15, "y": 3},
+ {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [9, 2], "x": 3.75, "y": 4, "w": 2.75},
+ {"matrix": [8, 3], "x": 6.5, "y": 4, "w": 1.25},
+ {"matrix": [9, 4], "x": 7.75, "y": 4, "w": 2.25},
+ {"matrix": [8, 5], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 6], "x": 13, "y": 4},
+ {"matrix": [9, 6], "x": 14, "y": 4},
+ {"matrix": [9, 7], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [1, 1], "x": 3, "y": 0},
+ {"matrix": [0, 2], "x": 4, "y": 0},
+ {"matrix": [1, 2], "x": 5, "y": 0},
+ {"matrix": [0, 3], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [0, 4], "x": 8, "y": 0},
+ {"matrix": [1, 4], "x": 9, "y": 0},
+ {"matrix": [0, 5], "x": 10, "y": 0},
+ {"matrix": [1, 5], "x": 11, "y": 0},
+ {"matrix": [0, 6], "x": 12, "y": 0},
+ {"matrix": [0, 7], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 7], "x": 15, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 1.5, "y": 1},
+ {"matrix": [2, 1], "x": 2.5, "y": 1},
+ {"matrix": [3, 1], "x": 3.5, "y": 1},
+ {"matrix": [2, 2], "x": 4.5, "y": 1},
+ {"matrix": [3, 2], "x": 5.5, "y": 1},
+ {"matrix": [2, 3], "x": 6.5, "y": 1},
+ {"matrix": [3, 3], "x": 7.5, "y": 1},
+ {"matrix": [2, 4], "x": 8.5, "y": 1},
+ {"matrix": [3, 4], "x": 9.5, "y": 1},
+ {"matrix": [2, 5], "x": 10.5, "y": 1},
+ {"matrix": [3, 5], "x": 11.5, "y": 1},
+ {"matrix": [2, 6], "x": 12.5, "y": 1},
+ {"matrix": [3, 6], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [3, 7], "x": 15, "y": 1},
+ {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 1.75, "y": 2},
+ {"matrix": [4, 1], "x": 2.75, "y": 2},
+ {"matrix": [5, 1], "x": 3.75, "y": 2},
+ {"matrix": [4, 2], "x": 4.75, "y": 2},
+ {"matrix": [5, 2], "x": 5.75, "y": 2},
+ {"matrix": [4, 3], "x": 6.75, "y": 2},
+ {"matrix": [5, 3], "x": 7.75, "y": 2},
+ {"matrix": [4, 4], "x": 8.75, "y": 2},
+ {"matrix": [5, 4], "x": 9.75, "y": 2},
+ {"matrix": [4, 5], "x": 10.75, "y": 2},
+ {"matrix": [5, 5], "x": 11.75, "y": 2},
+ {"matrix": [5, 6], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [5, 7], "x": 15, "y": 2},
+ {"matrix": [6, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [6, 1], "x": 2.25, "y": 3},
+ {"matrix": [7, 1], "x": 3.25, "y": 3},
+ {"matrix": [6, 2], "x": 4.25, "y": 3},
+ {"matrix": [7, 2], "x": 5.25, "y": 3},
+ {"matrix": [6, 3], "x": 6.25, "y": 3},
+ {"matrix": [7, 3], "x": 7.25, "y": 3},
+ {"matrix": [6, 4], "x": 8.25, "y": 3},
+ {"matrix": [7, 4], "x": 9.25, "y": 3},
+ {"matrix": [6, 5], "x": 10.25, "y": 3},
+ {"matrix": [7, 5], "x": 11.25, "y": 3},
+ {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 6], "x": 14, "y": 3},
+ {"matrix": [7, 7], "x": 15, "y": 3},
+ {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [8, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [8, 5], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 6], "x": 13, "y": 4},
+ {"matrix": [9, 6], "x": 14, "y": 4},
+ {"matrix": [9, 7], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [1, 1], "x": 3, "y": 0},
+ {"matrix": [0, 2], "x": 4, "y": 0},
+ {"matrix": [1, 2], "x": 5, "y": 0},
+ {"matrix": [0, 3], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [0, 4], "x": 8, "y": 0},
+ {"matrix": [1, 4], "x": 9, "y": 0},
+ {"matrix": [0, 5], "x": 10, "y": 0},
+ {"matrix": [1, 5], "x": 11, "y": 0},
+ {"matrix": [0, 6], "x": 12, "y": 0},
+ {"matrix": [1, 6], "x": 13, "y": 0},
+ {"matrix": [0, 7], "x": 14, "y": 0},
+ {"matrix": [1, 7], "x": 15, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 1.5, "y": 1},
+ {"matrix": [2, 1], "x": 2.5, "y": 1},
+ {"matrix": [3, 1], "x": 3.5, "y": 1},
+ {"matrix": [2, 2], "x": 4.5, "y": 1},
+ {"matrix": [3, 2], "x": 5.5, "y": 1},
+ {"matrix": [2, 3], "x": 6.5, "y": 1},
+ {"matrix": [3, 3], "x": 7.5, "y": 1},
+ {"matrix": [2, 4], "x": 8.5, "y": 1},
+ {"matrix": [3, 4], "x": 9.5, "y": 1},
+ {"matrix": [2, 5], "x": 10.5, "y": 1},
+ {"matrix": [3, 5], "x": 11.5, "y": 1},
+ {"matrix": [2, 6], "x": 12.5, "y": 1},
+ {"matrix": [3, 6], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [3, 7], "x": 15, "y": 1},
+ {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 1.75, "y": 2},
+ {"matrix": [4, 1], "x": 2.75, "y": 2},
+ {"matrix": [5, 1], "x": 3.75, "y": 2},
+ {"matrix": [4, 2], "x": 4.75, "y": 2},
+ {"matrix": [5, 2], "x": 5.75, "y": 2},
+ {"matrix": [4, 3], "x": 6.75, "y": 2},
+ {"matrix": [5, 3], "x": 7.75, "y": 2},
+ {"matrix": [4, 4], "x": 8.75, "y": 2},
+ {"matrix": [5, 4], "x": 9.75, "y": 2},
+ {"matrix": [4, 5], "x": 10.75, "y": 2},
+ {"matrix": [5, 5], "x": 11.75, "y": 2},
+ {"matrix": [5, 6], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [5, 7], "x": 15, "y": 2},
+ {"matrix": [6, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [6, 1], "x": 2.25, "y": 3},
+ {"matrix": [7, 1], "x": 3.25, "y": 3},
+ {"matrix": [6, 2], "x": 4.25, "y": 3},
+ {"matrix": [7, 2], "x": 5.25, "y": 3},
+ {"matrix": [6, 3], "x": 6.25, "y": 3},
+ {"matrix": [7, 3], "x": 7.25, "y": 3},
+ {"matrix": [6, 4], "x": 8.25, "y": 3},
+ {"matrix": [7, 4], "x": 9.25, "y": 3},
+ {"matrix": [6, 5], "x": 10.25, "y": 3},
+ {"matrix": [7, 5], "x": 11.25, "y": 3},
+ {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 6], "x": 14, "y": 3},
+ {"matrix": [7, 7], "x": 15, "y": 3},
+ {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [8, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [8, 5], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 6], "x": 13, "y": 4},
+ {"matrix": [9, 6], "x": 14, "y": 4},
+ {"matrix": [9, 7], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [1, 1], "x": 3, "y": 0},
+ {"matrix": [0, 2], "x": 4, "y": 0},
+ {"matrix": [1, 2], "x": 5, "y": 0},
+ {"matrix": [0, 3], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [0, 4], "x": 8, "y": 0},
+ {"matrix": [1, 4], "x": 9, "y": 0},
+ {"matrix": [0, 5], "x": 10, "y": 0},
+ {"matrix": [1, 5], "x": 11, "y": 0},
+ {"matrix": [0, 6], "x": 12, "y": 0},
+ {"matrix": [0, 7], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 7], "x": 15, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 1.5, "y": 1},
+ {"matrix": [2, 1], "x": 2.5, "y": 1},
+ {"matrix": [3, 1], "x": 3.5, "y": 1},
+ {"matrix": [2, 2], "x": 4.5, "y": 1},
+ {"matrix": [3, 2], "x": 5.5, "y": 1},
+ {"matrix": [2, 3], "x": 6.5, "y": 1},
+ {"matrix": [3, 3], "x": 7.5, "y": 1},
+ {"matrix": [2, 4], "x": 8.5, "y": 1},
+ {"matrix": [3, 4], "x": 9.5, "y": 1},
+ {"matrix": [2, 5], "x": 10.5, "y": 1},
+ {"matrix": [3, 5], "x": 11.5, "y": 1},
+ {"matrix": [2, 6], "x": 12.5, "y": 1},
+ {"matrix": [3, 6], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [3, 7], "x": 15, "y": 1},
+ {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 1.75, "y": 2},
+ {"matrix": [4, 1], "x": 2.75, "y": 2},
+ {"matrix": [5, 1], "x": 3.75, "y": 2},
+ {"matrix": [4, 2], "x": 4.75, "y": 2},
+ {"matrix": [5, 2], "x": 5.75, "y": 2},
+ {"matrix": [4, 3], "x": 6.75, "y": 2},
+ {"matrix": [5, 3], "x": 7.75, "y": 2},
+ {"matrix": [4, 4], "x": 8.75, "y": 2},
+ {"matrix": [5, 4], "x": 9.75, "y": 2},
+ {"matrix": [4, 5], "x": 10.75, "y": 2},
+ {"matrix": [5, 5], "x": 11.75, "y": 2},
+ {"matrix": [5, 6], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [5, 7], "x": 15, "y": 2},
+ {"matrix": [6, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [6, 1], "x": 2.25, "y": 3},
+ {"matrix": [7, 1], "x": 3.25, "y": 3},
+ {"matrix": [6, 2], "x": 4.25, "y": 3},
+ {"matrix": [7, 2], "x": 5.25, "y": 3},
+ {"matrix": [6, 3], "x": 6.25, "y": 3},
+ {"matrix": [7, 3], "x": 7.25, "y": 3},
+ {"matrix": [6, 4], "x": 8.25, "y": 3},
+ {"matrix": [7, 4], "x": 9.25, "y": 3},
+ {"matrix": [6, 5], "x": 10.25, "y": 3},
+ {"matrix": [7, 5], "x": 11.25, "y": 3},
+ {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 6], "x": 14, "y": 3},
+ {"matrix": [7, 7], "x": 15, "y": 3},
+ {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [9, 0], "x": 1.5, "y": 4},
+ {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [8, 3], "x": 4, "y": 4, "w": 7},
+ {"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [8, 6], "x": 13, "y": 4},
+ {"matrix": [9, 6], "x": 14, "y": 4},
+ {"matrix": [9, 7], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [1, 1], "x": 3, "y": 0},
+ {"matrix": [0, 2], "x": 4, "y": 0},
+ {"matrix": [1, 2], "x": 5, "y": 0},
+ {"matrix": [0, 3], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [0, 4], "x": 8, "y": 0},
+ {"matrix": [1, 4], "x": 9, "y": 0},
+ {"matrix": [0, 5], "x": 10, "y": 0},
+ {"matrix": [1, 5], "x": 11, "y": 0},
+ {"matrix": [0, 6], "x": 12, "y": 0},
+ {"matrix": [1, 6], "x": 13, "y": 0},
+ {"matrix": [0, 7], "x": 14, "y": 0},
+ {"matrix": [1, 7], "x": 15, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 1.5, "y": 1},
+ {"matrix": [2, 1], "x": 2.5, "y": 1},
+ {"matrix": [3, 1], "x": 3.5, "y": 1},
+ {"matrix": [2, 2], "x": 4.5, "y": 1},
+ {"matrix": [3, 2], "x": 5.5, "y": 1},
+ {"matrix": [2, 3], "x": 6.5, "y": 1},
+ {"matrix": [3, 3], "x": 7.5, "y": 1},
+ {"matrix": [2, 4], "x": 8.5, "y": 1},
+ {"matrix": [3, 4], "x": 9.5, "y": 1},
+ {"matrix": [2, 5], "x": 10.5, "y": 1},
+ {"matrix": [3, 5], "x": 11.5, "y": 1},
+ {"matrix": [2, 6], "x": 12.5, "y": 1},
+ {"matrix": [3, 6], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [3, 7], "x": 15, "y": 1},
+ {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 1.75, "y": 2},
+ {"matrix": [4, 1], "x": 2.75, "y": 2},
+ {"matrix": [5, 1], "x": 3.75, "y": 2},
+ {"matrix": [4, 2], "x": 4.75, "y": 2},
+ {"matrix": [5, 2], "x": 5.75, "y": 2},
+ {"matrix": [4, 3], "x": 6.75, "y": 2},
+ {"matrix": [5, 3], "x": 7.75, "y": 2},
+ {"matrix": [4, 4], "x": 8.75, "y": 2},
+ {"matrix": [5, 4], "x": 9.75, "y": 2},
+ {"matrix": [4, 5], "x": 10.75, "y": 2},
+ {"matrix": [5, 5], "x": 11.75, "y": 2},
+ {"matrix": [5, 6], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [5, 7], "x": 15, "y": 2},
+ {"matrix": [6, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [6, 1], "x": 2.25, "y": 3},
+ {"matrix": [7, 1], "x": 3.25, "y": 3},
+ {"matrix": [6, 2], "x": 4.25, "y": 3},
+ {"matrix": [7, 2], "x": 5.25, "y": 3},
+ {"matrix": [6, 3], "x": 6.25, "y": 3},
+ {"matrix": [7, 3], "x": 7.25, "y": 3},
+ {"matrix": [6, 4], "x": 8.25, "y": 3},
+ {"matrix": [7, 4], "x": 9.25, "y": 3},
+ {"matrix": [6, 5], "x": 10.25, "y": 3},
+ {"matrix": [7, 5], "x": 11.25, "y": 3},
+ {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 6], "x": 14, "y": 3},
+ {"matrix": [7, 7], "x": 15, "y": 3},
+ {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [9, 0], "x": 1.5, "y": 4},
+ {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [8, 3], "x": 4, "y": 4, "w": 7},
+ {"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [8, 6], "x": 13, "y": 4},
+ {"matrix": [9, 6], "x": 14, "y": 4},
+ {"matrix": [9, 7], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [1, 1], "x": 3, "y": 0},
+ {"matrix": [0, 2], "x": 4, "y": 0},
+ {"matrix": [1, 2], "x": 5, "y": 0},
+ {"matrix": [0, 3], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [0, 4], "x": 8, "y": 0},
+ {"matrix": [1, 4], "x": 9, "y": 0},
+ {"matrix": [0, 5], "x": 10, "y": 0},
+ {"matrix": [1, 5], "x": 11, "y": 0},
+ {"matrix": [0, 6], "x": 12, "y": 0},
+ {"matrix": [0, 7], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 7], "x": 15, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 1.5, "y": 1},
+ {"matrix": [2, 1], "x": 2.5, "y": 1},
+ {"matrix": [3, 1], "x": 3.5, "y": 1},
+ {"matrix": [2, 2], "x": 4.5, "y": 1},
+ {"matrix": [3, 2], "x": 5.5, "y": 1},
+ {"matrix": [2, 3], "x": 6.5, "y": 1},
+ {"matrix": [3, 3], "x": 7.5, "y": 1},
+ {"matrix": [2, 4], "x": 8.5, "y": 1},
+ {"matrix": [3, 4], "x": 9.5, "y": 1},
+ {"matrix": [2, 5], "x": 10.5, "y": 1},
+ {"matrix": [3, 5], "x": 11.5, "y": 1},
+ {"matrix": [2, 6], "x": 12.5, "y": 1},
+ {"matrix": [3, 7], "x": 15, "y": 1},
+ {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 1.75, "y": 2},
+ {"matrix": [4, 1], "x": 2.75, "y": 2},
+ {"matrix": [5, 1], "x": 3.75, "y": 2},
+ {"matrix": [4, 2], "x": 4.75, "y": 2},
+ {"matrix": [5, 2], "x": 5.75, "y": 2},
+ {"matrix": [4, 3], "x": 6.75, "y": 2},
+ {"matrix": [5, 3], "x": 7.75, "y": 2},
+ {"matrix": [4, 4], "x": 8.75, "y": 2},
+ {"matrix": [5, 4], "x": 9.75, "y": 2},
+ {"matrix": [4, 5], "x": 10.75, "y": 2},
+ {"matrix": [5, 5], "x": 11.75, "y": 2},
+ {"matrix": [4, 6], "x": 12.75, "y": 2},
+ {"matrix": [5, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [5, 7], "x": 15, "y": 2},
+ {"matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [7, 0], "x": 1.25, "y": 3},
+ {"matrix": [6, 1], "x": 2.25, "y": 3},
+ {"matrix": [7, 1], "x": 3.25, "y": 3},
+ {"matrix": [6, 2], "x": 4.25, "y": 3},
+ {"matrix": [7, 2], "x": 5.25, "y": 3},
+ {"matrix": [6, 3], "x": 6.25, "y": 3},
+ {"matrix": [7, 3], "x": 7.25, "y": 3},
+ {"matrix": [6, 4], "x": 8.25, "y": 3},
+ {"matrix": [7, 4], "x": 9.25, "y": 3},
+ {"matrix": [6, 5], "x": 10.25, "y": 3},
+ {"matrix": [7, 5], "x": 11.25, "y": 3},
+ {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 6], "x": 14, "y": 3},
+ {"matrix": [7, 7], "x": 15, "y": 3},
+ {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [8, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [8, 5], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 6], "x": 13, "y": 4},
+ {"matrix": [9, 6], "x": 14, "y": 4},
+ {"matrix": [9, 7], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [1, 1], "x": 3, "y": 0},
+ {"matrix": [0, 2], "x": 4, "y": 0},
+ {"matrix": [1, 2], "x": 5, "y": 0},
+ {"matrix": [0, 3], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [0, 4], "x": 8, "y": 0},
+ {"matrix": [1, 4], "x": 9, "y": 0},
+ {"matrix": [0, 5], "x": 10, "y": 0},
+ {"matrix": [1, 5], "x": 11, "y": 0},
+ {"matrix": [0, 6], "x": 12, "y": 0},
+ {"matrix": [1, 6], "x": 13, "y": 0},
+ {"matrix": [0, 7], "x": 14, "y": 0},
+ {"matrix": [1, 7], "x": 15, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 1.5, "y": 1},
+ {"matrix": [2, 1], "x": 2.5, "y": 1},
+ {"matrix": [3, 1], "x": 3.5, "y": 1},
+ {"matrix": [2, 2], "x": 4.5, "y": 1},
+ {"matrix": [3, 2], "x": 5.5, "y": 1},
+ {"matrix": [2, 3], "x": 6.5, "y": 1},
+ {"matrix": [3, 3], "x": 7.5, "y": 1},
+ {"matrix": [2, 4], "x": 8.5, "y": 1},
+ {"matrix": [3, 4], "x": 9.5, "y": 1},
+ {"matrix": [2, 5], "x": 10.5, "y": 1},
+ {"matrix": [3, 5], "x": 11.5, "y": 1},
+ {"matrix": [2, 6], "x": 12.5, "y": 1},
+ {"matrix": [3, 7], "x": 15, "y": 1},
+ {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 1.75, "y": 2},
+ {"matrix": [4, 1], "x": 2.75, "y": 2},
+ {"matrix": [5, 1], "x": 3.75, "y": 2},
+ {"matrix": [4, 2], "x": 4.75, "y": 2},
+ {"matrix": [5, 2], "x": 5.75, "y": 2},
+ {"matrix": [4, 3], "x": 6.75, "y": 2},
+ {"matrix": [5, 3], "x": 7.75, "y": 2},
+ {"matrix": [4, 4], "x": 8.75, "y": 2},
+ {"matrix": [5, 4], "x": 9.75, "y": 2},
+ {"matrix": [4, 5], "x": 10.75, "y": 2},
+ {"matrix": [5, 5], "x": 11.75, "y": 2},
+ {"matrix": [4, 6], "x": 12.75, "y": 2},
+ {"matrix": [5, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [5, 7], "x": 15, "y": 2},
+ {"matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [7, 0], "x": 1.25, "y": 3},
+ {"matrix": [6, 1], "x": 2.25, "y": 3},
+ {"matrix": [7, 1], "x": 3.25, "y": 3},
+ {"matrix": [6, 2], "x": 4.25, "y": 3},
+ {"matrix": [7, 2], "x": 5.25, "y": 3},
+ {"matrix": [6, 3], "x": 6.25, "y": 3},
+ {"matrix": [7, 3], "x": 7.25, "y": 3},
+ {"matrix": [6, 4], "x": 8.25, "y": 3},
+ {"matrix": [7, 4], "x": 9.25, "y": 3},
+ {"matrix": [6, 5], "x": 10.25, "y": 3},
+ {"matrix": [7, 5], "x": 11.25, "y": 3},
+ {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 6], "x": 14, "y": 3},
+ {"matrix": [7, 7], "x": 15, "y": 3},
+ {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [8, 3], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [8, 5], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [9, 5], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [8, 6], "x": 13, "y": 4},
+ {"matrix": [9, 6], "x": 14, "y": 4},
+ {"matrix": [9, 7], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [1, 1], "x": 3, "y": 0},
+ {"matrix": [0, 2], "x": 4, "y": 0},
+ {"matrix": [1, 2], "x": 5, "y": 0},
+ {"matrix": [0, 3], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [0, 4], "x": 8, "y": 0},
+ {"matrix": [1, 4], "x": 9, "y": 0},
+ {"matrix": [0, 5], "x": 10, "y": 0},
+ {"matrix": [1, 5], "x": 11, "y": 0},
+ {"matrix": [0, 6], "x": 12, "y": 0},
+ {"matrix": [0, 7], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 7], "x": 15, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 1.5, "y": 1},
+ {"matrix": [2, 1], "x": 2.5, "y": 1},
+ {"matrix": [3, 1], "x": 3.5, "y": 1},
+ {"matrix": [2, 2], "x": 4.5, "y": 1},
+ {"matrix": [3, 2], "x": 5.5, "y": 1},
+ {"matrix": [2, 3], "x": 6.5, "y": 1},
+ {"matrix": [3, 3], "x": 7.5, "y": 1},
+ {"matrix": [2, 4], "x": 8.5, "y": 1},
+ {"matrix": [3, 4], "x": 9.5, "y": 1},
+ {"matrix": [2, 5], "x": 10.5, "y": 1},
+ {"matrix": [3, 5], "x": 11.5, "y": 1},
+ {"matrix": [2, 6], "x": 12.5, "y": 1},
+ {"matrix": [3, 7], "x": 15, "y": 1},
+ {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 1.75, "y": 2},
+ {"matrix": [4, 1], "x": 2.75, "y": 2},
+ {"matrix": [5, 1], "x": 3.75, "y": 2},
+ {"matrix": [4, 2], "x": 4.75, "y": 2},
+ {"matrix": [5, 2], "x": 5.75, "y": 2},
+ {"matrix": [4, 3], "x": 6.75, "y": 2},
+ {"matrix": [5, 3], "x": 7.75, "y": 2},
+ {"matrix": [4, 4], "x": 8.75, "y": 2},
+ {"matrix": [5, 4], "x": 9.75, "y": 2},
+ {"matrix": [4, 5], "x": 10.75, "y": 2},
+ {"matrix": [5, 5], "x": 11.75, "y": 2},
+ {"matrix": [4, 6], "x": 12.75, "y": 2},
+ {"matrix": [5, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [5, 7], "x": 15, "y": 2},
+ {"matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [7, 0], "x": 1.25, "y": 3},
+ {"matrix": [6, 1], "x": 2.25, "y": 3},
+ {"matrix": [7, 1], "x": 3.25, "y": 3},
+ {"matrix": [6, 2], "x": 4.25, "y": 3},
+ {"matrix": [7, 2], "x": 5.25, "y": 3},
+ {"matrix": [6, 3], "x": 6.25, "y": 3},
+ {"matrix": [7, 3], "x": 7.25, "y": 3},
+ {"matrix": [6, 4], "x": 8.25, "y": 3},
+ {"matrix": [7, 4], "x": 9.25, "y": 3},
+ {"matrix": [6, 5], "x": 10.25, "y": 3},
+ {"matrix": [7, 5], "x": 11.25, "y": 3},
+ {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 6], "x": 14, "y": 3},
+ {"matrix": [7, 7], "x": 15, "y": 3},
+ {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [9, 0], "x": 1.5, "y": 4},
+ {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [8, 3], "x": 4, "y": 4, "w": 7},
+ {"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [8, 6], "x": 13, "y": 4},
+ {"matrix": [9, 6], "x": 14, "y": 4},
+ {"matrix": [9, 7], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker_tsangan_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [1, 0], "x": 1, "y": 0},
+ {"matrix": [0, 1], "x": 2, "y": 0},
+ {"matrix": [1, 1], "x": 3, "y": 0},
+ {"matrix": [0, 2], "x": 4, "y": 0},
+ {"matrix": [1, 2], "x": 5, "y": 0},
+ {"matrix": [0, 3], "x": 6, "y": 0},
+ {"matrix": [1, 3], "x": 7, "y": 0},
+ {"matrix": [0, 4], "x": 8, "y": 0},
+ {"matrix": [1, 4], "x": 9, "y": 0},
+ {"matrix": [0, 5], "x": 10, "y": 0},
+ {"matrix": [1, 5], "x": 11, "y": 0},
+ {"matrix": [0, 6], "x": 12, "y": 0},
+ {"matrix": [1, 6], "x": 13, "y": 0},
+ {"matrix": [0, 7], "x": 14, "y": 0},
+ {"matrix": [1, 7], "x": 15, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 1.5, "y": 1},
+ {"matrix": [2, 1], "x": 2.5, "y": 1},
+ {"matrix": [3, 1], "x": 3.5, "y": 1},
+ {"matrix": [2, 2], "x": 4.5, "y": 1},
+ {"matrix": [3, 2], "x": 5.5, "y": 1},
+ {"matrix": [2, 3], "x": 6.5, "y": 1},
+ {"matrix": [3, 3], "x": 7.5, "y": 1},
+ {"matrix": [2, 4], "x": 8.5, "y": 1},
+ {"matrix": [3, 4], "x": 9.5, "y": 1},
+ {"matrix": [2, 5], "x": 10.5, "y": 1},
+ {"matrix": [3, 5], "x": 11.5, "y": 1},
+ {"matrix": [2, 6], "x": 12.5, "y": 1},
+ {"matrix": [3, 7], "x": 15, "y": 1},
+ {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [5, 0], "x": 1.75, "y": 2},
+ {"matrix": [4, 1], "x": 2.75, "y": 2},
+ {"matrix": [5, 1], "x": 3.75, "y": 2},
+ {"matrix": [4, 2], "x": 4.75, "y": 2},
+ {"matrix": [5, 2], "x": 5.75, "y": 2},
+ {"matrix": [4, 3], "x": 6.75, "y": 2},
+ {"matrix": [5, 3], "x": 7.75, "y": 2},
+ {"matrix": [4, 4], "x": 8.75, "y": 2},
+ {"matrix": [5, 4], "x": 9.75, "y": 2},
+ {"matrix": [4, 5], "x": 10.75, "y": 2},
+ {"matrix": [5, 5], "x": 11.75, "y": 2},
+ {"matrix": [4, 6], "x": 12.75, "y": 2},
+ {"matrix": [5, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [5, 7], "x": 15, "y": 2},
+ {"matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [7, 0], "x": 1.25, "y": 3},
+ {"matrix": [6, 1], "x": 2.25, "y": 3},
+ {"matrix": [7, 1], "x": 3.25, "y": 3},
+ {"matrix": [6, 2], "x": 4.25, "y": 3},
+ {"matrix": [7, 2], "x": 5.25, "y": 3},
+ {"matrix": [6, 3], "x": 6.25, "y": 3},
+ {"matrix": [7, 3], "x": 7.25, "y": 3},
+ {"matrix": [6, 4], "x": 8.25, "y": 3},
+ {"matrix": [7, 4], "x": 9.25, "y": 3},
+ {"matrix": [6, 5], "x": 10.25, "y": 3},
+ {"matrix": [7, 5], "x": 11.25, "y": 3},
+ {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 6], "x": 14, "y": 3},
+ {"matrix": [7, 7], "x": 15, "y": 3},
+ {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [9, 0], "x": 1.5, "y": 4},
+ {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [8, 3], "x": 4, "y": 4, "w": 7},
+ {"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [8, 6], "x": 13, "y": 4},
+ {"matrix": [9, 6], "x": 14, "y": 4},
+ {"matrix": [9, 7], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/zeix/singa/kohaku/keymaps/default/keymap.c b/keyboards/zeix/singa/kohaku/keymaps/default/keymap.c
new file mode 100644
index 00000000000..e58dd0c18ae
--- /dev/null
+++ b/keyboards/zeix/singa/kohaku/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/*
+Copyright 2024 zeix (@itsme-zeix)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+[1] = LAYOUT_all(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+};
diff --git a/keyboards/zeix/singa/kohaku/matrix_diagram.md b/keyboards/zeix/singa/kohaku/matrix_diagram.md
new file mode 100644
index 00000000000..79cd5d07845
--- /dev/null
+++ b/keyboards/zeix/singa/kohaku/matrix_diagram.md
@@ -0,0 +1,30 @@
+# Matrix Diagram for Singa Kohaku (Designed by Zeix)
+
+```
+ ┌───┬───┐
+ Split Backspace │16 │07 │
+ └───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+│00 │10 │01 │11 │02 │12 │03 │13 │04 │14 │05 │15 │06 │07 │17 │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ ┌─────┐
+│20 │30 │21 │31 │22 │32 │23 │33 │24 │34 │25 │35 │26 │36 │37 │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐56 │ ISO Enter
+│40 │50 │41 │51 │42 │52 │43 │53 │44 │54 │45 │55 │56 │57 │ │46 │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
+│60 │61 │71 │62 │72 │63 │73 │64 │74 │65 │75 │66 │76 │77 │
+├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬─┬───┼───┼───┤
+│80 │90 │81 │83 │95 │ │86 │96 │97 │
+└─────┴───┴─────┴───────────────────────────┴─────┘ └───┴───┴───┘
+┌────┬───┐
+│60 │70 │ Split Left Shift
+└────┴───┘
+┌────┬────┬────┬────────────────────────┬────┬────┐
+│80 │90 │81 │83 │85 │95 │ 6.25u
+└────┴────┴────┴────────────────────────┴────┴────┘
+┌────┬────┬────┬───────────┬────┬───────┬────┬────┐
+│80 │90 │81 │92 │83 │94 │85 │95 │ Split Space (Left 2.75u)
+└────┴────┴────┴───────────┴────┴───────┴────┴────┘
+┌────┬────┬────┬───────┬────┬───────────┬────┬────┐
+│80 │90 │81 │92 │83 │94 │85 │95 │ Split Space (Left 2.25u)
+└────┴────┴────┴───────┴────┴───────────┴────┴────┘
+```
diff --git a/keyboards/zeix/singa/kohaku/readme.md b/keyboards/zeix/singa/kohaku/readme.md
new file mode 100644
index 00000000000..864f660e5c9
--- /dev/null
+++ b/keyboards/zeix/singa/kohaku/readme.md
@@ -0,0 +1,27 @@
+# SINGA Kohaku R2 (PCB designed by Zeix)
+
+
+
+65% PCB designed to support Kohaku R2.
+
+- Keyboard Maintainer: [Zeix](https://github.com/itsme-zeix)
+- Hardware Supported: Singa Kohaku R2 (PCB designed by Zeix)
+- Hardware Availability: https://singakbd.com/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make zeix/singa/kohaku:default
+
+Flashing example for this keyboard:
+
+ make zeix/singa/kohaku:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+- **Bootmagic reset**: Hold down the top left key and plug in the keyboard.
+- **Physical reset button**: Briefly press the `RESET` button twice or short the 'USB_BOOT' and `GND` pads and plug in the keyboard.
+- **Keycode in layout**: Press the key mapped to `QK_BOOT`.
diff --git a/keyboards/zsa/moonlander/moonlander.c b/keyboards/zsa/moonlander/moonlander.c
index 14405fc4126..faa1dc75e82 100644
--- a/keyboards/zsa/moonlander/moonlander.c
+++ b/keyboards/zsa/moonlander/moonlander.c
@@ -404,7 +404,7 @@ void keyboard_post_init_kb(void) {
is_launching = true;
defer_exec(500, startup_exec, NULL);
#endif
- matrix_init_user();
+ keyboard_post_init_user();
}
void eeconfig_init_kb(void) { // EEPROM is getting reset!
diff --git a/keyboards/zykrah/fuyu_hs/config.h b/keyboards/zykrah/fuyu_hs/config.h
new file mode 100644
index 00000000000..767cc3f69ac
--- /dev/null
+++ b/keyboards/zykrah/fuyu_hs/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2024 Zykrah
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
diff --git a/keyboards/zykrah/fuyu_hs/keyboard.json b/keyboards/zykrah/fuyu_hs/keyboard.json
new file mode 100644
index 00000000000..de5530b8dec
--- /dev/null
+++ b/keyboards/zykrah/fuyu_hs/keyboard.json
@@ -0,0 +1,404 @@
+{
+ "keyboard_name": "Fuyu Hotswap",
+ "maintainer": "zykrah",
+ "manufacturer": "Zykrah",
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x4648",
+ "vid": "0x7A79"
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 6
+ },
+ "matrix_pins": {
+ "rows": ["GP13", "GP12", "GP11", "GP10", "GP15", "GP14"],
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18", "GP17", "GP16", "GP2", "GP1", "GP0"]
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_rain": true,
+ "pixel_flow": true,
+ "pixel_fractal": true
+ },
+ "default": {
+ "val": 150
+ },
+ "driver": "ws2812",
+ "max_brightness": 200,
+ "layout": [
+ {"x": 112, "y": 32, "flags": 8},
+ {"x": 138, "y": 17, "flags": 8},
+ {"x": 112, "y": 2, "flags": 8},
+ {"x": 86, "y": 17, "flags": 8},
+ {"x": 86, "y": 47, "flags": 8},
+ {"x": 112, "y": 62, "flags": 8},
+ {"x": 138, "y": 47, "flags": 8},
+ {"x": 0, "y": 0, "flags": 2},
+ {"x": 16, "y": 0, "flags": 2},
+ {"x": 32, "y": 0, "flags": 2},
+ {"x": 48, "y": 0, "flags": 2},
+ {"x": 64, "y": 0, "flags": 2},
+ {"x": 80, "y": 0, "flags": 2},
+ {"x": 96, "y": 0, "flags": 2},
+ {"x": 112, "y": 0, "flags": 2},
+ {"x": 128, "y": 0, "flags": 2},
+ {"x": 144, "y": 0, "flags": 2},
+ {"x": 160, "y": 0, "flags": 2},
+ {"x": 176, "y": 0, "flags": 2},
+ {"x": 192, "y": 0, "flags": 2},
+ {"x": 208, "y": 0, "flags": 2},
+ {"x": 208, "y": 16, "flags": 2},
+ {"x": 208, "y": 32, "flags": 2},
+ {"x": 208, "y": 48, "flags": 2},
+ {"x": 208, "y": 64, "flags": 2},
+ {"x": 192, "y": 64, "flags": 2},
+ {"x": 176, "y": 64, "flags": 2},
+ {"x": 160, "y": 64, "flags": 2},
+ {"x": 144, "y": 64, "flags": 2},
+ {"x": 128, "y": 64, "flags": 2},
+ {"x": 112, "y": 64, "flags": 2},
+ {"x": 96, "y": 64, "flags": 2},
+ {"x": 80, "y": 64, "flags": 2},
+ {"x": 64, "y": 64, "flags": 2},
+ {"x": 48, "y": 64, "flags": 2},
+ {"x": 32, "y": 64, "flags": 2},
+ {"x": 16, "y": 64, "flags": 2},
+ {"x": 0, "y": 64, "flags": 2},
+ {"x": 0, "y": 48, "flags": 2},
+ {"x": 0, "y": 32, "flags": 2},
+ {"x": 0, "y": 16, "flags": 2}
+ ]
+ },
+ "url": "https://github.com/zykrah/fuyu",
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP3"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [3, 13], "x": 14, "y": 1.25},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [3, 14], "x": 15.25, "y": 3.25},
+ {"matrix": [3, 15], "x": 16.25, "y": 3.25},
+ {"matrix": [3, 16], "x": 17.25, "y": 3.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.25},
+ {"matrix": [4, 14], "x": 15.25, "y": 4.25},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [4, 16], "x": 17.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_numpad": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [3, 14], "x": 15.25, "y": 3.25},
+ {"matrix": [3, 15], "x": 16.25, "y": 3.25},
+ {"matrix": [3, 16], "x": 17.25, "y": 3.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 14], "x": 15.25, "y": 4.25},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [4, 16], "x": 17.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_numpad": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [3, 14], "x": 15.25, "y": 3.25},
+ {"matrix": [3, 15], "x": 16.25, "y": 3.25},
+ {"matrix": [3, 16], "x": 17.25, "y": 3.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 14], "x": 15.25, "y": 4.25},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [4, 16], "x": 17.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/zykrah/fuyu_hs/keymaps/default/keymap.c b/keyboards/zykrah/fuyu_hs/keymaps/default/keymap.c
new file mode 100644
index 00000000000..e04c98a9fbb
--- /dev/null
+++ b/keyboards/zykrah/fuyu_hs/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/*
+Copyright 2024 Zykrah
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+
+ [1] = LAYOUT_all(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/zykrah/fuyu_hs/readme.md b/keyboards/zykrah/fuyu_hs/readme.md
new file mode 100644
index 00000000000..41c5cded51d
--- /dev/null
+++ b/keyboards/zykrah/fuyu_hs/readme.md
@@ -0,0 +1,27 @@
+# FUYU HOTSWAP
+
+
+
+An F12 TKL Hotswappable H87-Compat Type-C PCB for the Geon F1-8K
+
+* Keyboard Maintainer: [Zykrah](https://github.com/zykrah)
+* Hardware Supported: Fuyu HS 7u rev1, Fuyu HS 6.25u rev1
+* Hardware Availability: [Github Repo](https://github.com/zykrah/fuyu), [GEON Store](https://geon.works/products/fuyu-pcb-for-f1-8k), [Cafege](https://cafege.com.au/products/fuyu-8k-pcb)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make zykrah/fuyu_hs:default
+
+Flashing example for this keyboard:
+
+ make zykrah/fuyu_hs:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly short the `RST` and `GND` pads on the SWD header twice, or short the `BOOT` header and plug in keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/layouts/default/60_ansi_tsangan_split_bs_rshift/default_60_ansi_tsangan_split_bs_rshift/keymap.c b/layouts/default/60_ansi_tsangan_split_bs_rshift/default_60_ansi_tsangan_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..f6dac0999fb
--- /dev/null
+++ b/layouts/default/60_ansi_tsangan_split_bs_rshift/default_60_ansi_tsangan_split_bs_rshift/keymap.c
@@ -0,0 +1,27 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│Sft│
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+ * │Ctrl │GUI│ Alt │ │ Alt │GUI│ Ctrl│
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+ */
+ [0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ )
+};
diff --git a/layouts/default/60_ansi_tsangan_split_bs_rshift/info.json b/layouts/default/60_ansi_tsangan_split_bs_rshift/info.json
new file mode 100644
index 00000000000..94f91530d2a
--- /dev/null
+++ b/layouts/default/60_ansi_tsangan_split_bs_rshift/info.json
@@ -0,0 +1,77 @@
+{
+ "keyboard_name": "60% ANSI layout with split Backspace, split Right Shift, and Tsangan Bottom Row",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":1.5, "y":4},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":12.5, "y":4},
+ {"x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_ansi_tsangan_split_bs_rshift/layout.json b/layouts/default/60_ansi_tsangan_split_bs_rshift/layout.json
new file mode 100644
index 00000000000..c387347d9e6
--- /dev/null
+++ b/layouts/default/60_ansi_tsangan_split_bs_rshift/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","","",""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
+[{w:2.25},"","","","","","","","","","","",{w:1.75},"",""],
+[{w:1.5},"","",{w:1.5},"",{w:7},"",{w:1.5},"","",{w:1.5},""]
diff --git a/layouts/default/60_ansi_tsangan_split_bs_rshift/readme.md b/layouts/default/60_ansi_tsangan_split_bs_rshift/readme.md
new file mode 100644
index 00000000000..f086e5d3d6a
--- /dev/null
+++ b/layouts/default/60_ansi_tsangan_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# 60_ansi_tsangan_split_bs_rshift
+
+ LAYOUT_60_ansi_tsangan_split_bs_rshift
diff --git a/layouts/default/ortho_6x13/default_ortho_6x13/keymap.c b/layouts/default/ortho_6x13/default_ortho_6x13/keymap.c
index 527f87f84bc..2fa8f2acce1 100644
--- a/layouts/default/ortho_6x13/default_ortho_6x13/keymap.c
+++ b/layouts/default/ortho_6x13/default_ortho_6x13/keymap.c
@@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NUHS, KC_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_UP, KC_SLSH,
KC_LCTL, KC_LGUI, TT(0), KC_LALT, TT(2), KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RSFT, KC_LEFT, KC_DOWN, KC_RGHT
- )
+ ),
[1] = LAYOUT_ortho_6x13(
KC_GRV , KC_MUTE, KC_VOLU, KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, G(KC_P), KC_SLEP, KC_WAKE, KC_PSCR, _______, _______ ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
diff --git a/layouts/default/readme.md b/layouts/default/readme.md
index 2460f64701f..e5350088224 100644
--- a/layouts/default/readme.md
+++ b/layouts/default/readme.md
@@ -64,21 +64,6 @@ LAYOUT_60_ansi_arrow_split_bs
└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
```
-```
-LAYOUT_60_ansi_arrow_split_bs_7u_spc
-┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │
-├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │
-├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴──┬───┼───┼───┤
-│ │ │ │ │ │ │ │ │
-└─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
-```
-
```
LAYOUT_60_ansi_split_bs_rshift
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
@@ -109,6 +94,21 @@ LAYOUT_60_ansi_tsangan
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
```
+```
+LAYOUT_60_ansi_tsangan_split_bs_rshift
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+│ │ │ │ │ │ │ │
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+```
+
```
LAYOUT_60_ansi_wkl
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
@@ -289,21 +289,6 @@ LAYOUT_60_jis
└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘
```
-```
-LAYOUT_60_tsangan_hhkb
-┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │
-├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │
-├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
-│ │ │ │ │ │ │ │
-└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
-```
-
```
LAYOUT_64_ansi
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
diff --git a/lib/python/qmk/cli/doctor/check.py b/lib/python/qmk/cli/doctor/check.py
index d563811aba9..2804a1d7df1 100644
--- a/lib/python/qmk/cli/doctor/check.py
+++ b/lib/python/qmk/cli/doctor/check.py
@@ -4,6 +4,8 @@ from enum import Enum
import re
import shutil
from subprocess import DEVNULL, TimeoutExpired
+from tempfile import TemporaryDirectory
+from pathlib import Path
from milc import cli
from qmk import submodules
@@ -44,7 +46,35 @@ def _check_arm_gcc_version():
version_number = ESSENTIAL_BINARIES['arm-none-eabi-gcc']['output'].strip()
cli.log.info('Found arm-none-eabi-gcc version %s', version_number)
- return CheckStatus.OK # Right now all known arm versions are ok
+ # Right now all known ARM versions are ok, so check that it can produce binaries
+ return _check_arm_gcc_installation()
+
+
+def _check_arm_gcc_installation():
+ """Returns OK if the arm-none-eabi-gcc is fully installed and can produce binaries.
+ """
+ with TemporaryDirectory() as temp_dir:
+ temp_file = Path(temp_dir) / 'test.elf'
+
+ args = ['arm-none-eabi-gcc', '-mcpu=cortex-m0', '-mthumb', '-mno-thumb-interwork', '--specs=nosys.specs', '--specs=nano.specs', '-x', 'c', '-o', str(temp_file), '-']
+ result = cli.run(args, stdin=None, stdout=None, stderr=None, input='#include \nint main() { return __NEWLIB__ * __NEWLIB_MINOR__ * __NEWLIB_PATCHLEVEL__; }')
+ if result.returncode == 0:
+ cli.log.info('Successfully compiled using arm-none-eabi-gcc')
+ else:
+ cli.log.error(f'Failed to compile a simple program with arm-none-eabi-gcc, return code {result.returncode}')
+ cli.log.error(f'Command: {" ".join(args)}')
+ return CheckStatus.ERROR
+
+ args = ['arm-none-eabi-size', str(temp_file)]
+ result = cli.run(args, stdin=None, stdout=None, stderr=None)
+ if result.returncode == 0:
+ cli.log.info('Successfully tested arm-none-eabi-binutils using arm-none-eabi-size')
+ else:
+ cli.log.error(f'Failed to execute arm-none-eabi-size, perhaps corrupt arm-none-eabi-binutils, return code {result.returncode}')
+ cli.log.error(f'Command: {" ".join(args)}')
+ return CheckStatus.ERROR
+
+ return CheckStatus.OK
def _check_avr_gcc_version():
@@ -53,7 +83,35 @@ def _check_avr_gcc_version():
version_number = ESSENTIAL_BINARIES['avr-gcc']['output'].strip()
cli.log.info('Found avr-gcc version %s', version_number)
- return CheckStatus.OK
+ # Right now all known AVR versions are ok, so check that it can produce binaries
+ return _check_avr_gcc_installation()
+
+
+def _check_avr_gcc_installation():
+ """Returns OK if the avr-gcc is fully installed and can produce binaries.
+ """
+ with TemporaryDirectory() as temp_dir:
+ temp_file = Path(temp_dir) / 'test.elf'
+
+ args = ['avr-gcc', '-mmcu=atmega32u4', '-x', 'c', '-o', str(temp_file), '-']
+ result = cli.run(args, stdin=None, stdout=None, stderr=None, input='int main() { return 0; }')
+ if result.returncode == 0:
+ cli.log.info('Successfully compiled using avr-gcc')
+ else:
+ cli.log.error(f'Failed to compile a simple program with avr-gcc, return code {result.returncode}')
+ cli.log.error(f'Command: {" ".join(args)}')
+ return CheckStatus.ERROR
+
+ args = ['avr-size', str(temp_file)]
+ result = cli.run(args, stdin=None, stdout=None, stderr=None)
+ if result.returncode == 0:
+ cli.log.info('Successfully tested avr-binutils using avr-size')
+ else:
+ cli.log.error(f'Failed to execute avr-size, perhaps corrupt avr-binutils, return code {result.returncode}')
+ cli.log.error(f'Command: {" ".join(args)}')
+ return CheckStatus.ERROR
+
+ return CheckStatus.OK
def _check_avrdude_version():
diff --git a/lib/python/qmk/cli/find.py b/lib/python/qmk/cli/find.py
index bfed91e22cd..7d8b1b066c9 100644
--- a/lib/python/qmk/cli/find.py
+++ b/lib/python/qmk/cli/find.py
@@ -1,5 +1,6 @@
"""Command to search through all keyboards and keymaps for a given search criteria.
"""
+import os
from milc import cli
from qmk.search import filter_help, search_keymap_targets
from qmk.util import maybe_exit_config
@@ -20,6 +21,7 @@ from qmk.util import maybe_exit_config
def find(cli):
"""Search through all keyboards and keymaps for a given search criteria.
"""
+ os.environ.setdefault('SKIP_SCHEMA_VALIDATION', '1')
maybe_exit_config(should_exit=False, should_reraise=True)
targets = search_keymap_targets([('all', cli.config.find.keymap)], cli.args.filter)
diff --git a/lib/python/qmk/cli/mass_compile.py b/lib/python/qmk/cli/mass_compile.py
index cf9be0fd1e2..4c4669d4517 100755
--- a/lib/python/qmk/cli/mass_compile.py
+++ b/lib/python/qmk/cli/mass_compile.py
@@ -20,6 +20,8 @@ def mass_compile_targets(targets: List[BuildTarget], clean: bool, dry_run: bool,
if len(targets) == 0:
return
+ os.environ.setdefault('SKIP_SCHEMA_VALIDATION', '1')
+
make_cmd = find_make()
builddir = Path(QMK_FIRMWARE) / '.build'
makefile = builddir / 'parallel_kb_builds.mk'
diff --git a/lib/python/qmk/decorators.py b/lib/python/qmk/decorators.py
index f6270990b97..16b44d6d591 100644
--- a/lib/python/qmk/decorators.py
+++ b/lib/python/qmk/decorators.py
@@ -9,6 +9,15 @@ from qmk.keyboard import find_keyboard_from_dir
from qmk.keymap import find_keymap_from_dir
+def _get_subcommand_name():
+ """Handle missing cli.subcommand_name on older versions of milc
+ """
+ try:
+ return cli.subcommand_name
+ except AttributeError:
+ return cli._subcommand.__name__
+
+
def automagic_keyboard(func):
"""Sets `cli.config..keyboard` based on environment.
@@ -16,13 +25,15 @@ def automagic_keyboard(func):
"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
+ cmd = _get_subcommand_name()
+
# Ensure that `--keyboard` was not passed and CWD is under `qmk_firmware/keyboards`
- if cli.config_source[cli._subcommand.__name__]['keyboard'] != 'argument':
+ if cli.config_source[cmd]['keyboard'] != 'argument':
keyboard = find_keyboard_from_dir()
if keyboard:
- cli.config[cli._subcommand.__name__]['keyboard'] = keyboard
- cli.config_source[cli._subcommand.__name__]['keyboard'] = 'keyboard_directory'
+ cli.config[cmd]['keyboard'] = keyboard
+ cli.config_source[cmd]['keyboard'] = 'keyboard_directory'
return func(*args, **kwargs)
@@ -36,13 +47,15 @@ def automagic_keymap(func):
"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
+ cmd = _get_subcommand_name()
+
# Ensure that `--keymap` was not passed and that we're under `qmk_firmware`
- if cli.config_source[cli._subcommand.__name__]['keymap'] != 'argument':
+ if cli.config_source[cmd]['keymap'] != 'argument':
keymap_name, keymap_type = find_keymap_from_dir()
if keymap_name:
- cli.config[cli._subcommand.__name__]['keymap'] = keymap_name
- cli.config_source[cli._subcommand.__name__]['keymap'] = keymap_type
+ cli.config[cmd]['keymap'] = keymap_name
+ cli.config_source[cmd]['keymap'] = keymap_type
return func(*args, **kwargs)
diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py
index 72b19a9fec6..82082f5cf0d 100644
--- a/lib/python/qmk/info.py
+++ b/lib/python/qmk/info.py
@@ -1,6 +1,7 @@
"""Functions that help us generate and use info.json files.
"""
import re
+import os
from pathlib import Path
import jsonschema
from dotty_dict import dotty
@@ -14,7 +15,7 @@ from qmk.keyboard import config_h, rules_mk
from qmk.commands import parse_configurator_json
from qmk.makefile import parse_rules_mk_file
from qmk.math import compute
-from qmk.util import maybe_exit
+from qmk.util import maybe_exit, truthy
true_values = ['1', 'on', 'yes']
false_values = ['0', 'off', 'no']
@@ -262,7 +263,9 @@ def info_json(keyboard, force_layout=None):
info_data["community_layouts"] = [force_layout]
# Validate
- _validate(keyboard, info_data)
+ # Skip processing if necessary
+ if not truthy(os.environ.get('SKIP_SCHEMA_VALIDATION'), False):
+ _validate(keyboard, info_data)
# Check that the reported matrix size is consistent with the actual matrix size
_check_matrix(info_data)
@@ -944,13 +947,14 @@ def merge_info_jsons(keyboard, info_data):
_log_error(info_data, "Invalid file %s, root object should be a dictionary." % (str(info_file),))
continue
- try:
- validate(new_info_data, 'qmk.keyboard.v1')
- except jsonschema.ValidationError as e:
- json_path = '.'.join([str(p) for p in e.absolute_path])
- cli.log.error('Not including data from file: %s', info_file)
- cli.log.error('\t%s: %s', json_path, e.message)
- continue
+ if not truthy(os.environ.get('SKIP_SCHEMA_VALIDATION'), False):
+ try:
+ validate(new_info_data, 'qmk.keyboard.v1')
+ except jsonschema.ValidationError as e:
+ json_path = '.'.join([str(p) for p in e.absolute_path])
+ cli.log.error('Not including data from file: %s', info_file)
+ cli.log.error('\t%s: %s', json_path, e.message)
+ continue
# Merge layout data in
if 'layout_aliases' in new_info_data:
diff --git a/lib/python/qmk/search.py b/lib/python/qmk/search.py
index baaf11eb340..6517bb4951d 100644
--- a/lib/python/qmk/search.py
+++ b/lib/python/qmk/search.py
@@ -74,28 +74,30 @@ class Exists(FilterFunction):
func_name = "exists"
def apply(self, target_info: KeyboardKeymapDesc) -> bool:
- return self.key in target_info.data
+ return self.key in target_info.dotty
class Absent(FilterFunction):
func_name = "absent"
def apply(self, target_info: KeyboardKeymapDesc) -> bool:
- return self.key not in target_info.data
+ return self.key not in target_info.dotty
class Length(FilterFunction):
func_name = "length"
def apply(self, target_info: KeyboardKeymapDesc) -> bool:
- return (self.key in target_info.data and len(target_info.data[self.key]) == int(self.value))
+ info_dotty = target_info.dotty
+ return (self.key in info_dotty and len(info_dotty[self.key]) == int(self.value))
class Contains(FilterFunction):
func_name = "contains"
def apply(self, target_info: KeyboardKeymapDesc) -> bool:
- return (self.key in target_info.data and self.value in target_info.data[self.key])
+ info_dotty = target_info.dotty
+ return (self.key in info_dotty and self.value in info_dotty[self.key])
def _get_filter_class(func_name: str, key: str, value: str) -> Optional[FilterFunction]:
@@ -117,8 +119,11 @@ def filter_help() -> str:
def _set_log_level(level):
cli.acquire_lock()
- old = cli.log_level
- cli.log_level = level
+ try:
+ old = cli.log_level
+ cli.log_level = level
+ except AttributeError:
+ old = cli.log.level
cli.log.setLevel(level)
logging.root.setLevel(level)
cli.release_lock()
diff --git a/lib/python/qmk/tests/test_cli_commands.py b/lib/python/qmk/tests/test_cli_commands.py
index 4c322e0c9d0..f18bd12f820 100644
--- a/lib/python/qmk/tests/test_cli_commands.py
+++ b/lib/python/qmk/tests/test_cli_commands.py
@@ -347,3 +347,68 @@ def test_format_json_keymap_auto():
result = check_subcommand('format-json', '--format', 'auto', 'lib/python/qmk/tests/minimal_keymap.json')
check_returncode(result)
assert result.stdout == '{\n "keyboard": "handwired/pytest/basic",\n "keymap": "test",\n "layers": [\n ["KC_A"]\n ],\n "layout": "LAYOUT_ortho_1x1",\n "version": 1\n}\n'
+
+
+def test_find_exists():
+ result = check_subcommand('find', '-f', 'exists(rgb_matrix.split_count)', '-p', 'rgb_matrix.split_count')
+ check_returncode(result)
+ values = [s for s in result.stdout.splitlines() if 'rgb_matrix.split_count=' in s]
+ assert len(values) > 0
+ for s in values:
+ assert '=None' not in s
+ assert '=[' in s
+
+
+def test_find_absent():
+ result = check_subcommand('find', '-f', 'absent(rgb_matrix.split_count)', '-p', 'rgb_matrix.split_count')
+ check_returncode(result)
+ values = [s for s in result.stdout.splitlines() if 'rgb_matrix.split_count=' in s]
+ assert len(values) > 0
+ for s in values:
+ assert '=None' in s
+ assert '=[' not in s
+
+
+def test_find_length():
+ result = check_subcommand('find', '-f', 'length(matrix_pins.cols, 6)', '-p', 'matrix_pins.cols')
+ check_returncode(result)
+ values = [s for s in result.stdout.splitlines() if 'matrix_pins.cols=' in s]
+ assert len(values) > 0
+ for s in values:
+ assert s.count(',') == 5
+
+
+def test_find_contains():
+ result = check_subcommand('find', '-f', 'contains(matrix_pins.cols, B1)', '-p', 'matrix_pins.cols')
+ check_returncode(result)
+ values = [s for s in result.stdout.splitlines() if 'matrix_pins.cols=' in s]
+ assert len(values) > 0
+ for s in values:
+ assert "'B1'" in s
+
+
+def test_find_multiple_conditions():
+ # this is intended to match at least 'crkbd/rev1'
+ result = check_subcommand(
+ 'find', '-f', 'exists(rgb_matrix.split_count)', '-f', 'contains(matrix_pins.cols, B1)', '-f', 'length(matrix_pins.cols, 6)', '-f', 'absent(eeprom.driver)', '-f', 'ws2812.pin=D3', '-p', 'rgb_matrix.split_count', '-p', 'matrix_pins.cols', '-p',
+ 'eeprom.driver', '-p', 'ws2812.pin'
+ )
+ check_returncode(result)
+ rgb_matrix_split_count_values = [s for s in result.stdout.splitlines() if 'rgb_matrix.split_count=' in s]
+ assert len(rgb_matrix_split_count_values) > 0
+ for s in rgb_matrix_split_count_values:
+ assert '=None' not in s
+ assert '=[' in s
+ matrix_pins_cols_values = [s for s in result.stdout.splitlines() if 'matrix_pins.cols=' in s]
+ assert len(matrix_pins_cols_values) > 0
+ for s in matrix_pins_cols_values:
+ assert s.count(',') == 5
+ assert "'B1'" in s
+ eeprom_driver_values = [s for s in result.stdout.splitlines() if 'eeprom.driver=' in s]
+ assert len(eeprom_driver_values) > 0
+ for s in eeprom_driver_values:
+ assert '=None' in s
+ ws2812_pin_values = [s for s in result.stdout.splitlines() if 'ws2812.pin=' in s]
+ assert len(ws2812_pin_values) > 0
+ for s in ws2812_pin_values:
+ assert '=D3' in s
diff --git a/lib/python/qmk/util.py b/lib/python/qmk/util.py
index b73fab89d12..8f99410e1de 100644
--- a/lib/python/qmk/util.py
+++ b/lib/python/qmk/util.py
@@ -27,6 +27,27 @@ def maybe_exit_config(should_exit: bool = True, should_reraise: bool = False):
maybe_exit_reraise = should_reraise
+def truthy(value, value_if_unknown=False):
+ """Returns True if the value is truthy, False otherwise.
+
+ Deals with:
+ True: 1, true, t, yes, y, on
+ False: 0, false, f, no, n, off
+ """
+ if value in {False, True}:
+ return bool(value)
+
+ test_value = str(value).strip().lower()
+
+ if test_value in {"1", "true", "t", "yes", "y", "on"}:
+ return True
+
+ if test_value in {"0", "false", "f", "no", "n", "off"}:
+ return False
+
+ return value_if_unknown
+
+
@contextlib.contextmanager
def parallelize():
"""Returns a function that can be used in place of a map() call.
diff --git a/platforms/chibios/boards/GENERIC_STM32_L433XC/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_L433XC/configs/mcuconf.h
index 948c740f6e2..24cc66b7884 100644
--- a/platforms/chibios/boards/GENERIC_STM32_L433XC/configs/mcuconf.h
+++ b/platforms/chibios/boards/GENERIC_STM32_L433XC/configs/mcuconf.h
@@ -40,7 +40,7 @@
#define STM32_PLS STM32_PLS_LEV0
#define STM32_HSI16_ENABLED TRUE
#define STM32_HSI48_ENABLED TRUE
-#define STM32_LSI_ENABLED TRUE
+#define STM32_LSI_ENABLED FALSE
#define STM32_HSE_ENABLED FALSE
#define STM32_LSE_ENABLED FALSE
#define STM32_MSIPLL_ENABLED FALSE
diff --git a/platforms/chibios/drivers/ws2812_spi.c b/platforms/chibios/drivers/ws2812_spi.c
index ad2e87781c4..9896f9e69d8 100644
--- a/platforms/chibios/drivers/ws2812_spi.c
+++ b/platforms/chibios/drivers/ws2812_spi.c
@@ -133,7 +133,7 @@ static void set_led_color_rgb(rgb_led_t color, int pos) {
#endif
#ifdef WS2812_RGBW
for (int j = 0; j < 4; j++)
- tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 4 + j] = get_protocol_eq(color.w, j);
+ tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 3 + j] = get_protocol_eq(color.w, j);
#endif
}
diff --git a/quantum/keymap_introspection.c b/quantum/keymap_introspection.c
index 327df6e277b..236b54ce980 100644
--- a/quantum/keymap_introspection.c
+++ b/quantum/keymap_introspection.c
@@ -102,6 +102,8 @@ __attribute__((weak)) uint16_t combo_count(void) {
return combo_count_raw();
}
+_Static_assert(ARRAY_SIZE(key_combos) <= (QK_KB), "Number of combos is abnormally high. Are you using SAFE_RANGE in an enum for combos?");
+
combo_t* combo_get_raw(uint16_t combo_idx) {
if (combo_idx >= combo_count_raw()) {
return NULL;
@@ -127,6 +129,8 @@ __attribute__((weak)) uint16_t tap_dance_count(void) {
return tap_dance_count_raw();
}
+_Static_assert(ARRAY_SIZE(tap_dance_actions) <= (QK_TAP_DANCE_MAX - QK_TAP_DANCE), "Number of tap dance actions exceeds maximum. Are you using SAFE_RANGE in tap dance enum?");
+
tap_dance_action_t* tap_dance_get_raw(uint16_t tap_dance_idx) {
if (tap_dance_idx >= tap_dance_count_raw()) {
return NULL;
@@ -153,6 +157,8 @@ __attribute__((weak)) uint16_t key_override_count(void) {
return key_override_count_raw();
}
+_Static_assert(ARRAY_SIZE(key_overrides) <= (QK_KB), "Number of key overrides is abnormally high. Are you using SAFE_RANGE in an enum for key overrides?");
+
const key_override_t* key_override_get_raw(uint16_t key_override_idx) {
if (key_override_idx >= key_override_count_raw()) {
return NULL;
diff --git a/requirements.txt b/requirements.txt
index 6bee7463243..fbee51ee575 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,5 +1,5 @@
# Python requirements
-appdirs
+# platformdirs
argcomplete
colorama
dotty-dict
diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c
index 7efd085ea32..703589b0547 100644
--- a/tmk_core/protocol/usb_descriptor.c
+++ b/tmk_core/protocol/usb_descriptor.c
@@ -281,7 +281,7 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = {
HID_RI_LOGICAL_MAXIMUM(16, 0x7FFF),
HID_RI_REPORT_COUNT(8, 0x02),
HID_RI_REPORT_SIZE(8, 0x10),
- HID_RI_UNIT(8, 0x33), // Inch, English Linear
+ HID_RI_UNIT(8, 0x13), // Inch, English Linear
HID_RI_UNIT_EXPONENT(8, 0x0E), // -2
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
HID_RI_END_COLLECTION(0),
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c
index c8ab4942536..fa14820e725 100644
--- a/tmk_core/protocol/vusb/vusb.c
+++ b/tmk_core/protocol/vusb/vusb.c
@@ -659,7 +659,7 @@ const PROGMEM uchar shared_hid_report[] = {
0x26, 0xFF, 0x7F, // Logical Maximum (32767)
0x95, 0x02, // Report Count (2)
0x75, 0x10, // Report Size (16)
- 0x65, 0x33, // Unit (Inch, English Linear)
+ 0x65, 0x13, // Unit (Inch, English Linear)
0x55, 0x0E, // Unit Exponent (-2)
0x81, 0x02, // Input (Data, Variable, Absolute)
0xC0, // End Collection
diff --git a/util/install/fedora.sh b/util/install/fedora.sh
index 0b93326bbfc..20a14882069 100755
--- a/util/install/fedora.sh
+++ b/util/install/fedora.sh
@@ -5,6 +5,7 @@ _qmk_install() {
. /etc/os-release
if [ "$VERSION_ID" -ge "39" ]; then
+ sudo dnf copr -h >/dev/null 2>&1 || sudo dnf $SKIP_PROMPT install dnf-plugins-core
sudo dnf $SKIP_PROMPT copr enable erovia/dfu-programmer
fi