Merge branch 'qmk:master' into dev

This commit is contained in:
Orest 2025-02-17 19:19:29 +02:00 committed by GitHub
commit a892fc61e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
169 changed files with 6565 additions and 406 deletions

View File

@ -45,7 +45,7 @@ jobs:
stale-pr-label: stale stale-pr-label: stale
days-before-pr-stale: 45 days-before-pr-stale: 45
days-before-pr-close: 30 days-before-pr-close: 30
exempt-pr-labels: bug,awaiting review,breaking_change,in progress,on hold exempt-pr-labels: bug,awaiting review,breaking_change,in progress,on hold,needs-core-wireless,crippled-firmware
stale-pr-message: > stale-pr-message: >
Thank you for your contribution! Thank you for your contribution!

View File

@ -1,7 +1,7 @@
{ {
"license": "GPL-2.0-or-later", "license": "GPL-2.0-or-later",
"devDependencies": { "devDependencies": {
"vite": "^5.2.14", "vite": "^5.4.12",
"vitepress": "^1.1.0", "vitepress": "^1.1.0",
"vitepress-plugin-tabs": "^0.5.0", "vitepress-plugin-tabs": "^0.5.0",
"vue": "^3.4.24" "vue": "^3.4.24"

View File

@ -178,205 +178,220 @@
"@docsearch/css" "3.6.0" "@docsearch/css" "3.6.0"
algoliasearch "^4.19.1" algoliasearch "^4.19.1"
"@esbuild/aix-ppc64@0.20.2": "@esbuild/aix-ppc64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
"@esbuild/android-arm64@0.20.2": "@esbuild/android-arm64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
"@esbuild/android-arm@0.20.2": "@esbuild/android-arm@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
"@esbuild/android-x64@0.20.2": "@esbuild/android-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
"@esbuild/darwin-arm64@0.20.2": "@esbuild/darwin-arm64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
"@esbuild/darwin-x64@0.20.2": "@esbuild/darwin-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
"@esbuild/freebsd-arm64@0.20.2": "@esbuild/freebsd-arm64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
"@esbuild/freebsd-x64@0.20.2": "@esbuild/freebsd-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
"@esbuild/linux-arm64@0.20.2": "@esbuild/linux-arm64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
"@esbuild/linux-arm@0.20.2": "@esbuild/linux-arm@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
"@esbuild/linux-ia32@0.20.2": "@esbuild/linux-ia32@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
"@esbuild/linux-loong64@0.20.2": "@esbuild/linux-loong64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
"@esbuild/linux-mips64el@0.20.2": "@esbuild/linux-mips64el@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
"@esbuild/linux-ppc64@0.20.2": "@esbuild/linux-ppc64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
"@esbuild/linux-riscv64@0.20.2": "@esbuild/linux-riscv64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
"@esbuild/linux-s390x@0.20.2": "@esbuild/linux-s390x@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
"@esbuild/linux-x64@0.20.2": "@esbuild/linux-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
"@esbuild/netbsd-x64@0.20.2": "@esbuild/netbsd-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
"@esbuild/openbsd-x64@0.20.2": "@esbuild/openbsd-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
"@esbuild/sunos-x64@0.20.2": "@esbuild/sunos-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
"@esbuild/win32-arm64@0.20.2": "@esbuild/win32-arm64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
"@esbuild/win32-ia32@0.20.2": "@esbuild/win32-ia32@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
"@esbuild/win32-x64@0.20.2": "@esbuild/win32-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
"@jridgewell/sourcemap-codec@^1.4.15": "@jridgewell/sourcemap-codec@^1.4.15":
version "1.4.15" version "1.4.15"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@rollup/rollup-android-arm-eabi@4.22.4": "@rollup/rollup-android-arm-eabi@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz#8b613b9725e8f9479d142970b106b6ae878610d5" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.31.0.tgz#d4dd60da0075a6ce9a6c76d71b8204f3e1822285"
integrity sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w== integrity sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==
"@rollup/rollup-android-arm64@4.22.4": "@rollup/rollup-android-arm64@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz#654ca1049189132ff602bfcf8df14c18da1f15fb" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.31.0.tgz#25c4d33259a7a2ccd2f52a5ffcc0bb3ab3f0729d"
integrity sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA== integrity sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==
"@rollup/rollup-darwin-arm64@4.22.4": "@rollup/rollup-darwin-arm64@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz#6d241d099d1518ef0c2205d96b3fa52e0fe1954b" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.31.0.tgz#d137dff254b19163a6b52ac083a71cd055dae844"
integrity sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q== integrity sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==
"@rollup/rollup-darwin-x64@4.22.4": "@rollup/rollup-darwin-x64@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz#42bd19d292a57ee11734c980c4650de26b457791" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.31.0.tgz#58ff20b5dacb797d3adca19f02a21c532f9d55bf"
integrity sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw== integrity sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==
"@rollup/rollup-linux-arm-gnueabihf@4.22.4": "@rollup/rollup-freebsd-arm64@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz#f23555ee3d8fe941c5c5fd458cd22b65eb1c2232" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.31.0.tgz#96ce1a241c591ec3e068f4af765d94eddb24e60c"
integrity sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ== integrity sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==
"@rollup/rollup-linux-arm-musleabihf@4.22.4": "@rollup/rollup-freebsd-x64@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz#f3bbd1ae2420f5539d40ac1fde2b38da67779baa" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.31.0.tgz#e59e7ede505be41f0b4311b0b943f8eb44938467"
integrity sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg== integrity sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==
"@rollup/rollup-linux-arm64-gnu@4.22.4": "@rollup/rollup-linux-arm-gnueabihf@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz#7abe900120113e08a1f90afb84c7c28774054d15" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.31.0.tgz#e455ca6e4ff35bd46d62201c153352e717000a7b"
integrity sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw== integrity sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==
"@rollup/rollup-linux-arm64-musl@4.22.4": "@rollup/rollup-linux-arm-musleabihf@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz#9e655285c8175cd44f57d6a1e8e5dedfbba1d820" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.31.0.tgz#bc1a93d807d19e70b1e343a5bfea43723bcd6327"
integrity sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA== integrity sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==
"@rollup/rollup-linux-powerpc64le-gnu@4.22.4": "@rollup/rollup-linux-arm64-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz#9a79ae6c9e9d8fe83d49e2712ecf4302db5bef5e" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.31.0.tgz#f38bf843f1dc3d5de680caf31084008846e3efae"
integrity sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg== integrity sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==
"@rollup/rollup-linux-riscv64-gnu@4.22.4": "@rollup/rollup-linux-arm64-musl@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz#67ac70eca4ace8e2942fabca95164e8874ab8128" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.31.0.tgz#b3987a96c18b7287129cf735be2dbf83e94d9d05"
integrity sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA== integrity sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==
"@rollup/rollup-linux-s390x-gnu@4.22.4": "@rollup/rollup-linux-loongarch64-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz#9f883a7440f51a22ed7f99e1d070bd84ea5005fc" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.31.0.tgz#0f0324044e71c4f02e9f49e7ec4e347b655b34ee"
integrity sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q== integrity sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==
"@rollup/rollup-linux-x64-gnu@4.22.4": "@rollup/rollup-linux-powerpc64le-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz#70116ae6c577fe367f58559e2cffb5641a1dd9d0" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.31.0.tgz#809479f27f1fd5b4eecd2aa732132ad952d454ba"
integrity sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg== integrity sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==
"@rollup/rollup-linux-x64-musl@4.22.4": "@rollup/rollup-linux-riscv64-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz#f473f88219feb07b0b98b53a7923be716d1d182f" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.31.0.tgz#7bc75c4f22db04d3c972f83431739cfa41c6a36e"
integrity sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g== integrity sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==
"@rollup/rollup-win32-arm64-msvc@4.22.4": "@rollup/rollup-linux-s390x-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz#4349482d17f5d1c58604d1c8900540d676f420e0" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.31.0.tgz#cfe8052345c55864d83ae343362cf1912480170e"
integrity sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw== integrity sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==
"@rollup/rollup-win32-ia32-msvc@4.22.4": "@rollup/rollup-linux-x64-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz#a6fc39a15db618040ec3c2a24c1e26cb5f4d7422" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.31.0.tgz#c6b048f1e25f3fea5b4bd246232f4d07a159c5a0"
integrity sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g== integrity sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==
"@rollup/rollup-win32-x64-msvc@4.22.4": "@rollup/rollup-linux-x64-musl@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz#3dd5d53e900df2a40841882c02e56f866c04d202" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.31.0.tgz#615273ac52d1a201f4de191cbd3389016a9d7d80"
integrity sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q== integrity sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==
"@rollup/rollup-win32-arm64-msvc@4.31.0":
version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.31.0.tgz#32ed85810c1b831c648eca999d68f01255b30691"
integrity sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==
"@rollup/rollup-win32-ia32-msvc@4.31.0":
version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.31.0.tgz#d47effada68bcbfdccd30c4a788d42e4542ff4d3"
integrity sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==
"@rollup/rollup-win32-x64-msvc@4.31.0":
version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.31.0.tgz#7a2d89a82cf0388d60304964217dd7beac6de645"
integrity sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==
"@shikijs/core@1.3.0", "@shikijs/core@^1.3.0": "@shikijs/core@1.3.0", "@shikijs/core@^1.3.0":
version "1.3.0" version "1.3.0"
@ -390,10 +405,10 @@
dependencies: dependencies:
shiki "1.3.0" shiki "1.3.0"
"@types/estree@1.0.5": "@types/estree@1.0.6":
version "1.0.5" version "1.0.6"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
"@types/linkify-it@*": "@types/linkify-it@*":
version "3.0.5" version "3.0.5"
@ -589,34 +604,34 @@ entities@^4.5.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
esbuild@^0.20.1: esbuild@^0.21.3:
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d"
integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
optionalDependencies: optionalDependencies:
"@esbuild/aix-ppc64" "0.20.2" "@esbuild/aix-ppc64" "0.21.5"
"@esbuild/android-arm" "0.20.2" "@esbuild/android-arm" "0.21.5"
"@esbuild/android-arm64" "0.20.2" "@esbuild/android-arm64" "0.21.5"
"@esbuild/android-x64" "0.20.2" "@esbuild/android-x64" "0.21.5"
"@esbuild/darwin-arm64" "0.20.2" "@esbuild/darwin-arm64" "0.21.5"
"@esbuild/darwin-x64" "0.20.2" "@esbuild/darwin-x64" "0.21.5"
"@esbuild/freebsd-arm64" "0.20.2" "@esbuild/freebsd-arm64" "0.21.5"
"@esbuild/freebsd-x64" "0.20.2" "@esbuild/freebsd-x64" "0.21.5"
"@esbuild/linux-arm" "0.20.2" "@esbuild/linux-arm" "0.21.5"
"@esbuild/linux-arm64" "0.20.2" "@esbuild/linux-arm64" "0.21.5"
"@esbuild/linux-ia32" "0.20.2" "@esbuild/linux-ia32" "0.21.5"
"@esbuild/linux-loong64" "0.20.2" "@esbuild/linux-loong64" "0.21.5"
"@esbuild/linux-mips64el" "0.20.2" "@esbuild/linux-mips64el" "0.21.5"
"@esbuild/linux-ppc64" "0.20.2" "@esbuild/linux-ppc64" "0.21.5"
"@esbuild/linux-riscv64" "0.20.2" "@esbuild/linux-riscv64" "0.21.5"
"@esbuild/linux-s390x" "0.20.2" "@esbuild/linux-s390x" "0.21.5"
"@esbuild/linux-x64" "0.20.2" "@esbuild/linux-x64" "0.21.5"
"@esbuild/netbsd-x64" "0.20.2" "@esbuild/netbsd-x64" "0.21.5"
"@esbuild/openbsd-x64" "0.20.2" "@esbuild/openbsd-x64" "0.21.5"
"@esbuild/sunos-x64" "0.20.2" "@esbuild/sunos-x64" "0.21.5"
"@esbuild/win32-arm64" "0.20.2" "@esbuild/win32-arm64" "0.21.5"
"@esbuild/win32-ia32" "0.20.2" "@esbuild/win32-ia32" "0.21.5"
"@esbuild/win32-x64" "0.20.2" "@esbuild/win32-x64" "0.21.5"
estree-walker@^2.0.2: estree-walker@^2.0.2:
version "2.0.2" version "2.0.2"
@ -662,29 +677,29 @@ mitt@^3.0.1:
resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1"
integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
nanoid@^3.3.7: nanoid@^3.3.8:
version "3.3.7" version "3.3.8"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
perfect-debounce@^1.0.0: perfect-debounce@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a"
integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==
picocolors@^1.0.0: picocolors@^1.1.1:
version "1.0.0" version "1.1.1"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
postcss@^8.4.38: postcss@^8.4.38, postcss@^8.4.43:
version "8.4.38" version "8.5.1"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214"
integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==
dependencies: dependencies:
nanoid "^3.3.7" nanoid "^3.3.8"
picocolors "^1.0.0" picocolors "^1.1.1"
source-map-js "^1.2.0" source-map-js "^1.2.1"
preact@^10.0.0: preact@^10.0.0:
version "10.20.2" version "10.20.2"
@ -696,29 +711,32 @@ rfdc@^1.3.1:
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f"
integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==
rollup@^4.13.0: rollup@^4.20.0:
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.22.4.tgz#4135a6446671cd2a2453e1ad42a45d5973ec3a0f" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.31.0.tgz#b84af969a0292cb047dce2c0ec5413a9457597a4"
integrity sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A== integrity sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==
dependencies: dependencies:
"@types/estree" "1.0.5" "@types/estree" "1.0.6"
optionalDependencies: optionalDependencies:
"@rollup/rollup-android-arm-eabi" "4.22.4" "@rollup/rollup-android-arm-eabi" "4.31.0"
"@rollup/rollup-android-arm64" "4.22.4" "@rollup/rollup-android-arm64" "4.31.0"
"@rollup/rollup-darwin-arm64" "4.22.4" "@rollup/rollup-darwin-arm64" "4.31.0"
"@rollup/rollup-darwin-x64" "4.22.4" "@rollup/rollup-darwin-x64" "4.31.0"
"@rollup/rollup-linux-arm-gnueabihf" "4.22.4" "@rollup/rollup-freebsd-arm64" "4.31.0"
"@rollup/rollup-linux-arm-musleabihf" "4.22.4" "@rollup/rollup-freebsd-x64" "4.31.0"
"@rollup/rollup-linux-arm64-gnu" "4.22.4" "@rollup/rollup-linux-arm-gnueabihf" "4.31.0"
"@rollup/rollup-linux-arm64-musl" "4.22.4" "@rollup/rollup-linux-arm-musleabihf" "4.31.0"
"@rollup/rollup-linux-powerpc64le-gnu" "4.22.4" "@rollup/rollup-linux-arm64-gnu" "4.31.0"
"@rollup/rollup-linux-riscv64-gnu" "4.22.4" "@rollup/rollup-linux-arm64-musl" "4.31.0"
"@rollup/rollup-linux-s390x-gnu" "4.22.4" "@rollup/rollup-linux-loongarch64-gnu" "4.31.0"
"@rollup/rollup-linux-x64-gnu" "4.22.4" "@rollup/rollup-linux-powerpc64le-gnu" "4.31.0"
"@rollup/rollup-linux-x64-musl" "4.22.4" "@rollup/rollup-linux-riscv64-gnu" "4.31.0"
"@rollup/rollup-win32-arm64-msvc" "4.22.4" "@rollup/rollup-linux-s390x-gnu" "4.31.0"
"@rollup/rollup-win32-ia32-msvc" "4.22.4" "@rollup/rollup-linux-x64-gnu" "4.31.0"
"@rollup/rollup-win32-x64-msvc" "4.22.4" "@rollup/rollup-linux-x64-musl" "4.31.0"
"@rollup/rollup-win32-arm64-msvc" "4.31.0"
"@rollup/rollup-win32-ia32-msvc" "4.31.0"
"@rollup/rollup-win32-x64-msvc" "4.31.0"
fsevents "~2.3.2" fsevents "~2.3.2"
shiki@1.3.0, shiki@^1.3.0: shiki@1.3.0, shiki@^1.3.0:
@ -733,6 +751,11 @@ source-map-js@^1.2.0:
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
speakingurl@^14.0.1: speakingurl@^14.0.1:
version "14.0.1" version "14.0.1"
resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53"
@ -743,14 +766,14 @@ tabbable@^6.2.0:
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
vite@^5.2.14, vite@^5.2.9: vite@^5.2.9, vite@^5.4.12:
version "5.2.14" version "5.4.12"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.14.tgz#fd5f60facf6b5f90ec7da6323c467a365d380c3d" resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.12.tgz#627d12ff06de3942557dfe8632fd712a12a072c7"
integrity sha512-TFQLuwWLPms+NBNlh0D9LZQ+HXW471COABxw/9TEUBrjuHMo9BrYBPrN/SYAwIuVL+rLerycxiLT41t4f5MZpA== integrity sha512-KwUaKB27TvWwDJr1GjjWthLMATbGEbeWYZIbGZ5qFIsgPP3vWzLu4cVooqhm5/Z2SPDUMjyPVjTztm5tYKwQxA==
dependencies: dependencies:
esbuild "^0.20.1" esbuild "^0.21.3"
postcss "^8.4.38" postcss "^8.4.43"
rollup "^4.13.0" rollup "^4.20.0"
optionalDependencies: optionalDependencies:
fsevents "~2.3.3" fsevents "~2.3.3"

View File

@ -129,7 +129,7 @@ needed for older distros.
## Can't Get Message on Console ## Can't Get Message on Console
Check: Check:
- *hid_listen* finds your device. See above. - *hid_listen* finds your device. See above.
- Enable debug by pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands). - Enable debug by pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard/wiki#magic-commands-for-debug).
- Set `debug_enable=true`. See [Debugging](#debugging) - Set `debug_enable=true`. See [Debugging](#debugging)
- Try using `print` function instead of debug print. See **common/print.h**. - Try using `print` function instead of debug print. See **common/print.h**.
- Disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97). - Disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).

View File

@ -117,7 +117,9 @@ If yes, we send the string `"QMK is the best thing ever!"` to the computer via t
We return `true` to indicate to the caller that the key press we just processed should continue to be processed as normal (as we didn't replace or alter the functionality). We return `true` to indicate to the caller that the key press we just processed should continue to be processed as normal (as we didn't replace or alter the functionality).
Finally, we define the keymap so that the first button activates our macro and the second button is just an escape button. Finally, we define the keymap so that the first button activates our macro and the second button is just an escape button.
?>It is recommended to use the SAFE_RANGE macro as per [Customizing Functionality](custom_quantum_functions). ::: tip
It is recommended to use the SAFE_RANGE macro as per [Customizing Functionality](custom_quantum_functions).
:::
You might want to add more than one macro. You might want to add more than one macro.
You can do that by adding another keycode and adding another case to the switch statement, like so: You can do that by adding another keycode and adding another case to the switch statement, like so:

View File

@ -74,8 +74,9 @@ Additionally, `config.h` here will be processed like the same file in your keyma
The reason for this, is that `<name>.h` won't be added in time to add settings (such as `#define TAPPING_TERM 100`), and including the `<name.h>` file in any `config.h` files will result in compile issues. The reason for this, is that `<name>.h` won't be added in time to add settings (such as `#define TAPPING_TERM 100`), and including the `<name.h>` file in any `config.h` files will result in compile issues.
!>You should use the `config.h` for [configuration options](config_options), and the `<name>.h` file for user or keymap specific settings (such as the enum for layer or keycodes) ::: warning
You should use the `config.h` for [configuration options](config_options), and the `<name>.h` file for user or keymap specific settings (such as the enum for layer or keycodes)
:::
## Readme (`readme.md`) ## Readme (`readme.md`)

View File

@ -214,7 +214,9 @@ When additional overlapping mouse key is pressed, the mouse cursor will continue
|`MOUSEKEY_OVERLAP_WHEEL_DELTA`|`MOUSEKEY_WHEEL_DELTA`|Step size of reset mouse wheel acceleration | |`MOUSEKEY_OVERLAP_WHEEL_DELTA`|`MOUSEKEY_WHEEL_DELTA`|Step size of reset mouse wheel acceleration |
|`MOUSEKEY_OVERLAP_INTERVAL` |`MOUSEKEY_INTERVAL` |Reset time between cursor movements in milliseconds (Kinetic mode only)| |`MOUSEKEY_OVERLAP_INTERVAL` |`MOUSEKEY_INTERVAL` |Reset time between cursor movements in milliseconds (Kinetic mode only)|
?> This feature will not be applied on Inertial mode ::: tip
This feature will not be applied on Inertial mode
:::
## Use with PS/2 Mouse and Pointing Device ## Use with PS/2 Mouse and Pointing Device

View File

@ -50,6 +50,13 @@ By default docker or podman are automatically detected and docker is preferred o
RUNTIME="podman" util/docker_build.sh keyboard:keymap:target RUNTIME="podman" util/docker_build.sh keyboard:keymap:target
``` ```
If flashing is not required, it's possible to run the container as unprivileged (on Linux), and without docker-machine (on Windows/macOS):
```
SKIP_FLASHING_SUPPORT=1 util/docker_build.sh keyboard:keymap:target
```
## FAQ ## FAQ
### Why can't I flash on Windows/macOS ### Why can't I flash on Windows/macOS

View File

@ -20,29 +20,31 @@ If you own a board from one of the following vendors already, consider asking th
| Vendor | Reason | | Vendor | Reason |
|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| BBB Keyboard | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. | | BBB Keyboard | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Chillkey | | | Chosfox | Selling L75 wired/wireless boards based on QMK without sources, just `via.json` provided. Raised on discord over multiple weeks without response. |
| CIDOO | Selling wired boards based on QMK without sources, just `via.json` provided. | | CIDOO | Selling wired boards based on QMK without sources, just `via.json` provided. |
| Darmoshark | Selling wired boards based on QMK without sources, just `via.json` provided. | | Darmoshark | Selling wired boards based on QMK without sources, just `via.json` provided. |
| Epomaker | Lots of historical keyboards with `via.json` but no corresponding sources. Wireless code for a small handful provided, pending core cleanup for QMK upstreaming. Most other boards have source nowhere to be seen. | | Epomaker | Lots of historical keyboards with `via.json` but no corresponding sources. Wireless code for a small handful provided, pending core cleanup for QMK upstreaming. Most other boards have source nowhere to be seen. |
| Ergokbd (IFKB) | At least their crkbd clone ships with QMK+Vial, seemingly refuses to disclose sources despite multiple customers requesting them. | | Ergokbd (IFKB) | At least their crkbd clone ships with QMK+Vial, seemingly refuses to disclose sources despite multiple customers requesting them. |
| iLovBee | Official 30-day copyright source code request issued Sep 11 2024 due to deception on PR, no response received. Ambiguity on PRs -- marketing says wireless, PR author said wired-only, then included wireless code anyway. Seemingly intentionally deceptive. | | iLovBee | Official 30-day copyright source code request issued Sep 11 2024 due to deception on PR, no response received. Ambiguity on PRs -- marketing says wireless, PR author said wired-only, then included wireless code anyway. Seemingly intentionally deceptive. |
| KiiBOOM | Seems to use the same OEM as Epomaker, same problems. | | KiiBOOM | Seems to use the same OEM as Epomaker, same problems. |
| kprepublic | Makes no attempt to release source code, all boards in QMK are reverse-engineered, created, and supported by the community. New board variants magically appear without telling customers they're incompatible with existing QMK versions, in some cases bricking boards or requiring ISP flashing. |
| Luminkey | Selling tri-mode boards based on QMK without sources, just `via.json` provided. | | Luminkey | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
| Meletrix | Selling tri-mode boards based on QMK without sources, just `via.json` provided. | | Meletrix | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
| mmd / Smartmmd / i-game.tech | Ambiguity on PRs -- marketing says wireless, PR author said wired-only, then included wireless code anyway. Seemingly intentionally deceptive. | | mmd / Smartmmd / i-game.tech | Ambiguity on PRs -- marketing says wireless, PR author said wired-only, then included wireless code anyway. Seemingly intentionally deceptive. |
| MyKeyClub | Community-supported JRIS75, vendor was contacted by community members and refused to cooperate. | | MyKeyClub | Community-supported JRIS75, vendor was contacted by community members and refused to cooperate. |
| owlab | Selling wired based on QMK without sources, just `via.json` provided. Ambiguous as to whether or not wireless firmware is based on QMK, given that their configuration tool looks very similar to VIA. | | owlab | Selling wired based on QMK without sources, just `via.json` provided. Ambiguous as to whether or not wireless firmware is based on QMK, given that their configuration tool looks very similar to VIA. |
| pressplayid | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided |
| qwertykeys | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided. | | qwertykeys | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided. |
| Redragon | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. | | Redragon | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Royal Kludge | PRs for fake boards in order to attain VIA compatibility identified. Lots of other keyboards with `via.json` but no corresponding sources, attempted upstreaming crippled firmware without wireless. Wireless code for some provided, pending core cleanup for QMK upstreaming. PRs including different manufacturer names as well. | | Royal Kludge | PRs for fake boards in order to attain VIA compatibility identified. Lots of other keyboards with `via.json` but no corresponding sources, attempted upstreaming crippled firmware without wireless. Wireless code for some provided, pending core cleanup for QMK upstreaming. PRs including different manufacturer names as well. |
| Shenzhen Hangsheng | PR submissions with crippled firmware, debating with maintainers about wireless despite marketing material clearly stating tri-mode. | | Shenzhen Hangsheng | PR submissions with crippled firmware, debating with maintainers about wireless despite marketing material clearly stating tri-mode. |
| Shortcut Studio | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
| Tacworks | Selling tri-mode boards based on QMK, crippled firmware already merged into QMK without wireless without QMK team realising. | | Tacworks | Selling tri-mode boards based on QMK, crippled firmware already merged into QMK without wireless without QMK team realising. |
| TKD / Vertex | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. | | TKD / Vertex | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| WOBKEY | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. | | WOBKEY | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Weikav | Selling tri-mode boards based on QMK without sources, just `via.json` provided. | | Weikav | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
| Womier | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. | | Womier | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Wuque Studio | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided. | | Wuque Studio | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided. |
| XVX | Ambiguity on PRs -- marketing says wireless, PR author said wired-only. Seemingly intentionally deceptive. |
| Zuoya | Selling tri-mode boards based on QMK without sources, just `via.json` provided. | | Zuoya | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
::: danger Violations ::: danger Violations

View File

@ -2,7 +2,7 @@
The Mod-Tap key `MT(mod, kc)` acts like a modifier when held, and a regular keycode when tapped. In other words, you can have a key that sends Escape when you tap it, but functions as a Control or Shift key when you hold it down. The Mod-Tap key `MT(mod, kc)` acts like a modifier when held, and a regular keycode when tapped. In other words, you can have a key that sends Escape when you tap it, but functions as a Control or Shift key when you hold it down.
The modifiers this keycode and `OSM()` accept are prefixed with `MOD_`, not `KC_`: The modifiers (`mod`) argument to the `MT()` macro are prefixed with `MOD_`, not `KC_`:
|Modifier |Description | |Modifier |Description |
|----------|----------------------------------------| |----------|----------------------------------------|

View File

@ -0,0 +1,189 @@
{
"manufacturer": "ai03 Design Studio",
"keyboard_name": "Lily",
"maintainer": "ai03",
"bootloader": "atmel-dfu",
"build": {
"debounce_type": "asym_eager_defer_pk",
"lto": true
},
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"indicators": {
"caps_lock": "B0",
"on_state": 0
},
"matrix_pins": {
"cols": ["F0", "F1", "F4", "F5", "F6", "F7", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4"],
"rows": ["B2", "B7", "D5", "B1", "D3"]
},
"processor": "atmega32u4",
"qmk": {
"locking": {
"enabled": true,
"resync": true
}
},
"rgblight": {
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"rgb_test": true,
"snake": true,
"static_gradient": true,
"twinkle": true
},
"led_count": 4
},
"usb": {
"device_version": "0.0.1",
"pid": "0x0026",
"vid": "0xA103"
},
"ws2812": {
"pin": "D2"
},
"community_layouts": ["60_hhkb"],
"layouts": {
"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": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 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, 11], "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": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 5], "x": 4, "y": 4, "w": 3},
{"matrix": [4, 7], "x": 7, "y": 4},
{"matrix": [4, 9], "x": 8, "y": 4, "w": 3},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4}
]
}
}
}

View File

@ -0,0 +1,45 @@
/* Copyright 2025 Cipulot & ai03 Design Studio
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_60_hhkb(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_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, MO(1),
KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT
),
[1] = LAYOUT_60_hhkb(
_______, KC_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_UP, _______, _______,
_______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
_______, _______, _______, _______, MO(2)
),
[2] = LAYOUT_60_hhkb(
QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______
)
// clang-format on
};

View File

@ -0,0 +1,45 @@
/* Copyright 2025 Cipulot & ai03 Design Studio
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_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, MO(1),
KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT
),
[1] = LAYOUT_all(
_______, KC_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_UP, _______, _______,
_______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
_______, _______, _______, _______, _______, _______, MO(2)
),
[2] = LAYOUT_all(
QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
// clang-format on
};

View File

@ -0,0 +1,26 @@
# Lily
![Lily](https://i.imgur.com/nIhwT2V.png)
PCB for Gok's Lily keyboard
* Keyboard Maintainer: [ai03](https://github.com/ai03-2725)
* Hardware Supported: Lily PCB
* Hardware Availability: Through Lily group buy
Make example for this keyboard (after setting up your build environment):
make ai03/lily:default
Flashing example for this keyboard:
make ai03/liily: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**: Double tap the button on the bottom on the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1,22 @@
// Copyright 2023 beekeeb
// Copyright 2021 weteor
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* key matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 10
#define MATRIX_ROWS_PER_SIDE (MATRIX_ROWS / 2)
#define MATRIX_COLS_PER_SIDE (MATRIX_COLS / 2)
#define MATRIX_ROW_PINS_L { GP7, GP8, GP9, GP10}
#define MATRIX_COL_PINS_L { GP11, GP12, GP13, GP14, GP15 }
#define MATRIX_ROW_PINS_R { P10, P11, P12, P05 }
#define MATRIX_COL_PINS_R { P06, P13, P14, P01, P00 }
#define I2C_DRIVER I2CD0
#define I2C1_SDA_PIN GP0
#define I2C1_SCL_PIN GP1

View File

@ -0,0 +1,22 @@
/* Copyright 2023 QMK
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,69 @@
{
"manufacturer": "beekeeb",
"keyboard_name": "3w6hs",
"maintainer": "beekeeb",
"diode_direction": "COL2ROW",
"usb": {
"device_version": "1.0.0",
"pid": "0x0003",
"vid": "0xBEEB",
"no_startup_check": true
},
"processor": "RP2040",
"bootloader": "rp2040",
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true
},
"community_layouts": ["split_3x5_3"],
"layouts": {
"LAYOUT_split_3x5_3": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.8},
{"matrix": [0, 1], "x": 1, "y": 0.2},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0.2},
{"matrix": [0, 4], "x": 4, "y": 0.4},
{"matrix": [4, 0], "x": 8, "y": 0.4},
{"matrix": [4, 1], "x": 9, "y": 0.2},
{"matrix": [4, 2], "x": 10, "y": 0},
{"matrix": [4, 3], "x": 11, "y": 0.2},
{"matrix": [4, 4], "x": 12, "y": 0.8},
{"matrix": [1, 0], "x": 0, "y": 1.8},
{"matrix": [1, 1], "x": 1, "y": 1.2},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "y": 1.2},
{"matrix": [1, 4], "x": 4, "y": 1.4},
{"matrix": [5, 0], "x": 8, "y": 1.4},
{"matrix": [5, 1], "x": 9, "y": 1.2},
{"matrix": [5, 2], "x": 10, "y": 1},
{"matrix": [5, 3], "x": 11, "y": 1.2},
{"matrix": [5, 4], "x": 12, "y": 1.8},
{"matrix": [2, 0], "x": 0, "y": 2.8},
{"matrix": [2, 1], "x": 1, "y": 2.2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2.2},
{"matrix": [2, 4], "x": 4, "y": 2.4},
{"matrix": [6, 0], "x": 8, "y": 2.4},
{"matrix": [6, 1], "x": 9, "y": 2.2},
{"matrix": [6, 2], "x": 10, "y": 2},
{"matrix": [6, 3], "x": 11, "y": 2.2},
{"matrix": [6, 4], "x": 12, "y": 2.8},
{"matrix": [3, 2], "x": 3.2, "y": 3.6},
{"matrix": [3, 3], "x": 4.2, "y": 3.6},
{"matrix": [3, 4], "x": 5.2, "y": 3.8},
{"matrix": [7, 0], "x": 6.8, "y": 3.8},
{"matrix": [7, 1], "x": 7.8, "y": 3.6},
{"matrix": [7, 2], "x": 8.8, "y": 3.6}
]
}
}
}

View File

@ -0,0 +1,68 @@
/* Copyright 2021 weteor
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layers {
_ALPHA_QWERTY,
_ALPHA_COLEMAK,
_SYM,
_NAV,
_NUM,
_CFG,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ALPHA_QWERTY] = LAYOUT_split_3x5_3(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
LCTL_T(KC_ESC), LT(_NUM,KC_SPC), LT(_NAV, KC_TAB), LT(_SYM, KC_BSPC), KC_ENT, LALT_T(KC_DEL)
),
[_ALPHA_COLEMAK] = LAYOUT_split_3x5_3(
KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT,
KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SCLN),
LCTL_T(KC_ENT), LT(_NUM,KC_SPC), LT(_NAV, KC_TAB), LT(_SYM, KC_BSPC), KC_ENT, LALT_T(KC_DEL)
),
[_SYM] = LAYOUT_split_3x5_3(
KC_GRV , KC_CIRC, KC_AT, KC_DLR, KC_TILD, KC_AMPR, KC_EXLM, KC_PIPE, KC_UNDS, KC_HASH,
KC_SLSH, KC_LBRC, KC_LCBR, KC_LPRN, KC_EQL, KC_ASTR, KC_RPRN, KC_RCBR, KC_RBRC, KC_BSLS,
_______, KC_QUES, KC_PLUS, KC_PERC, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, XXXXXXX, _______,
XXXXXXX, MO(_CFG), XXXXXXX, _______, XXXXXXX, XXXXXXX
),
[_NAV] = LAYOUT_split_3x5_3(
XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, KC_PGDN, KC_UP, KC_PGUP, KC_DEL,
KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, XXXXXXX, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, _______, XXXXXXX, MO(_CFG), XXXXXXX
),
[_NUM] = LAYOUT_split_3x5_3(
XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, KC_PPLS, KC_P7, KC_P8, KC_P9, KC_PSLS,
XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_P0, KC_P4, KC_P5, KC_P6, KC_PDOT,
XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_PMNS, KC_P1, KC_P2, KC_P3, KC_PAST,
XXXXXXX, _______, XXXXXXX, KC_PEQL, KC_PENT, XXXXXXX
),
[_CFG] = LAYOUT_split_3x5_3(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,DF(_ALPHA_QWERTY), DF(_ALPHA_COLEMAK),
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX
),
};

View File

@ -0,0 +1,248 @@
/*
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
2020 Pierre Chevalier <pierrechevalier83@gmail.com>
2021 weteor
2023 beekeeb
*/
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* This code was heavily inspired by the ergodox_ez keymap, and modernized
* to take advantage of the quantum.h microcontroller agnostics gpio control
* abstractions and use the macros defined in config.h for the wiring as opposed
* to repeating that information all over the place.
*/
#include "matrix.h"
#include "debug.h"
#include "wait.h"
#include "i2c_master.h"
extern i2c_status_t tca9555_status;
//#define I2C_TIMEOUT 1000
// I2C address:
// All address pins of the tca9555 are connected to the ground
// | 0 | 1 | 0 | 0 | A2 | A1 | A0 |
// | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
#define I2C_ADDR (0b0100000 << 1)
// Register addresses
#define IODIRA 0x06 // i/o direction register
#define IODIRB 0x07
#define IREGP0 0x00 // GPIO pull-up resistor register
#define IREGP1 0x01
#define OREGP0 0x02 // general purpose i/o port register (write modifies OLAT)
#define OREGP1 0x03
bool i2c_initialized = 0;
i2c_status_t tca9555_status = I2C_ADDR;
uint8_t init_tca9555(void) {
dprint("starting init\n");
tca9555_status = I2C_ADDR;
// I2C subsystem
if (i2c_initialized == 0) {
i2c_init(); // on pins D(1,0)
i2c_initialized = true;
wait_ms(I2C_TIMEOUT);
}
// set pin direction
// - unused : input : 1
// - input : input : 1
// - driving : output : 0
uint8_t conf[2] = {
// This means: read all pins of port 0
0b11111111,
// This means: we will write on pins 0 to 3 on port 1. read rest
0b11110000,
};
tca9555_status = i2c_write_register(I2C_ADDR, IODIRA, conf, 2, I2C_TIMEOUT);
return tca9555_status;
}
/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS]; // debounced values
static matrix_row_t read_cols(uint8_t row);
static void init_cols(void);
static void unselect_rows(void);
static void select_row(uint8_t row);
static uint8_t tca9555_reset_loop;
void matrix_init_custom(void) {
// initialize row and col
tca9555_status = init_tca9555();
unselect_rows();
init_cols();
// initialize matrix state: all keys off
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
}
}
void matrix_power_up(void) {
tca9555_status = init_tca9555();
unselect_rows();
init_cols();
// initialize matrix state: all keys off
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
}
}
// Reads and stores a row, returning
// whether a change occurred.
static inline bool store_matrix_row(matrix_row_t current_matrix[], uint8_t index) {
matrix_row_t temp = read_cols(index);
if (current_matrix[index] != temp) {
current_matrix[index] = temp;
return true;
}
return false;
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
if (tca9555_status) { // if there was an error
if (++tca9555_reset_loop == 0) {
// since tca9555_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
// this will be approx bit more frequent than once per second
dprint("trying to reset tca9555\n");
tca9555_status = init_tca9555();
if (tca9555_status) {
dprint("right side not responding\n");
} else {
dprint("right side attached\n");
}
}
}
bool changed = false;
for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
// select rows from left and right hands
uint8_t left_index = i;
uint8_t right_index = i + MATRIX_ROWS_PER_SIDE;
select_row(left_index);
select_row(right_index);
// we don't need a 30us delay anymore, because selecting a
// left-hand row requires more than 30us for i2c.
changed |= store_matrix_row(current_matrix, left_index);
changed |= store_matrix_row(current_matrix, right_index);
unselect_rows();
}
return changed;
}
static void init_cols(void) {
// init on tca9555
// not needed, already done as part of init_tca9555()
// init on mcu
pin_t matrix_col_pins_mcu[MATRIX_COLS_PER_SIDE] = MATRIX_COL_PINS_L;
for (int pin_index = 0; pin_index < MATRIX_COLS_PER_SIDE; pin_index++) {
pin_t pin = matrix_col_pins_mcu[pin_index];
gpio_set_pin_input_high(pin);
gpio_write_pin_high(pin);
}
}
static matrix_row_t read_cols(uint8_t row) {
if (row < MATRIX_ROWS_PER_SIDE) {
pin_t matrix_col_pins_mcu[MATRIX_COLS_PER_SIDE] = MATRIX_COL_PINS_L;
matrix_row_t current_row_value = 0;
// For each col...
for (uint8_t col_index = 0; col_index < MATRIX_COLS_PER_SIDE; col_index++) {
// Select the col pin to read (active low)
uint8_t pin_state = gpio_read_pin(matrix_col_pins_mcu[col_index]);
// Populate the matrix row with the state of the col pin
current_row_value |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
}
return current_row_value;
} else {
if (tca9555_status) { // if there was an error
return 0;
} else {
uint8_t data = 0;
uint8_t port0 = 0;
tca9555_status = i2c_read_register(I2C_ADDR, IREGP0, &port0, 1, I2C_TIMEOUT);
if (tca9555_status) { // if there was an error
// do nothing
return 0;
} else {
port0 = ~port0;
// We read all the pins on GPIOA.
// The initial state was all ones and any depressed key at a given column for the currently selected row will have its bit flipped to zero.
// The return value is a row as represented in the generic matrix code were the rightmost bits represent the lower columns and zeroes represent non-depressed keys while ones represent depressed keys.
// the pins connected to eact columns are sequential, but in reverse order, and counting from zero down (col 5 -> GPIO04, col6 -> GPIO03 and so on).
data |= (port0 & 0x01) << 4;
data |= (port0 & 0x02) << 2;
data |= (port0 & 0x04);
data |= (port0 & 0x08) >> 2;
data |= (port0 & 0x10) >> 4;
tca9555_status = I2C_STATUS_SUCCESS;
return data;
}
}
}
}
static void unselect_rows(void) {
// no need to unselect on tca9555, because the select step sets all
// the other row bits high, and it's not changing to a different
// direction
// unselect rows on microcontroller
pin_t matrix_row_pins_mcu[MATRIX_ROWS_PER_SIDE] = MATRIX_ROW_PINS_L;
for (int pin_index = 0; pin_index < MATRIX_ROWS_PER_SIDE; pin_index++) {
pin_t pin = matrix_row_pins_mcu[pin_index];
gpio_set_pin_input_high(pin);
gpio_write_pin_low(pin);
}
}
static void select_row(uint8_t row) {
uint8_t port1 = 0xff;
if (row < MATRIX_ROWS_PER_SIDE) {
// select on atmega32u4
pin_t matrix_row_pins_mcu[MATRIX_ROWS_PER_SIDE] = MATRIX_ROW_PINS_L;
pin_t pin = matrix_row_pins_mcu[row];
gpio_set_pin_output(pin);
gpio_write_pin_low(pin);
} else {
// select on tca9555
if (tca9555_status) { // if there was an error
// do nothing
} else {
switch(row) {
case 4: port1 &= ~(1 << 0); break;
case 5: port1 &= ~(1 << 1); break;
case 6: port1 &= ~(1 << 2); break;
case 7:
port1 &= ~(1 << 3);
break;
default: break;
}
tca9555_status = i2c_write_register(I2C_ADDR, OREGP1, &port1, 1, I2C_TIMEOUT);
// Select the desired row by writing a byte for the entire GPIOB bus where only the bit representing the row we want to select is a zero (write instruction) and every other bit is a one.
// Note that the row - MATRIX_ROWS_PER_SIDE reflects the fact that being on the right hand, the columns are numbered from MATRIX_ROWS_PER_SIDE to MATRIX_ROWS, but the pins we want to write to are indexed from zero up on the GPIOB bus.
}
}
}

View File

@ -0,0 +1,24 @@
/* Copyright 2023 QMK
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef RP_I2C_USE_I2C0
#undef RP_I2C_USE_I2C1
#define RP_I2C_USE_I2C0 TRUE
#define RP_I2C_USE_I2C1 FALSE

View File

@ -0,0 +1,26 @@
# 3W6HS
![3W6HS](https://i.imgur.com/CPxwGSt.jpeg)
The 3W6HS is a hotswap, RP2040, low profile, split keyboard with 36 keys, modified from 3W6 by weteor.
* Keyboard Maintainer: [beekeeb](https://github.com/beekeeb)
* Hardware Supported: RP2040
* Hardware Availability: [https://shop.beekeeb.com/](https://shop.beekeeb.com)
Make example for this keyboard (after setting up your build environment):
make beekeeb/3w6hs:default
Flashing example for this keyboard:
make beekeeb/3w6hs: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
To enter the bootloader, follow these steps:
* Disconnect the keyboard from the computer.
* Locate the BOOT button, which is the top button on the left side of the keyboard.
* While holding down the BOOT button, connect the keyboard back to the computer.

View File

@ -0,0 +1,3 @@
CUSTOM_MATRIX = lite
SRC += matrix.c
I2C_DRIVER_REQUIRED = yes

View File

@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define CH_CFG_ST_RESOLUTION 16
#define CH_CFG_ST_FREQUENCY 10000
#include_next <chconf.h>

View File

@ -0,0 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define BACKLIGHT_PWM_DRIVER PWMD2
#define BACKLIGHT_PWM_CHANNEL 2
#define BACKLIGHT_PAL_MODE 2

View File

@ -0,0 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define HAL_USE_PWM TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,408 @@
{
"manufacturer": "Chill",
"keyboard_name": "Ghoul",
"maintainer": "chillKB",
"url": "https://github.com/chillKB/ghoulTKL",
"backlight": {
"driver": "pwm",
"pin": "B3"
},
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"features": {
"backlight": true,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"indicators": {
"caps_lock": "B4",
"on_state": 0,
"scroll_lock": "B6"
},
"matrix_pins": {
"cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B11", "B10", "B2", "B1", "B0", "A6", "A5", "A15", "A1", "A0"],
"rows": ["B7", "B9", "B8", "A7", "A4", "A3"]
},
"processor": "STM32F072",
"usb": {
"device_version": "1.0.0",
"pid": "0xFC87",
"vid": "0xC01D"
},
"community_layouts": ["tkl_ansi", "tkl_ansi_split_bs_rshift", "tkl_ansi_tsangan", "tkl_ansi_tsangan_split_bs_rshift"],
"layout_aliases": {
"LAYOUT_all": "LAYOUT_tkl_ansi_split_bs_rshift"
},
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [0, 8], "x": 8.5, "y": 0},
{"matrix": [0, 9], "x": 9.5, "y": 0},
{"matrix": [0, 10], "x": 11, "y": 0},
{"matrix": [0, 11], "x": 12, "y": 0},
{"matrix": [0, 12], "x": 13, "y": 0},
{"matrix": [0, 13], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [0, 16], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.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, 12], "x": 12.75, "y": 3.5, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.5},
{"matrix": [4, 3], "x": 3.25, "y": 4.5},
{"matrix": [4, 4], "x": 4.25, "y": 4.5},
{"matrix": [4, 5], "x": 5.25, "y": 4.5},
{"matrix": [4, 6], "x": 6.25, "y": 4.5},
{"matrix": [4, 7], "x": 7.25, "y": 4.5},
{"matrix": [4, 8], "x": 8.25, "y": 4.5},
{"matrix": [4, 9], "x": 9.25, "y": 4.5},
{"matrix": [4, 10], "x": 10.25, "y": 4.5},
{"matrix": [4, 11], "x": 11.25, "y": 4.5},
{"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 2.75},
{"matrix": [4, 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, 6], "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}
]
},
"LAYOUT_tkl_ansi_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [0, 8], "x": 8.5, "y": 0},
{"matrix": [0, 9], "x": 9.5, "y": 0},
{"matrix": [0, 10], "x": 11, "y": 0},
{"matrix": [0, 11], "x": 12, "y": 0},
{"matrix": [0, 12], "x": 13, "y": 0},
{"matrix": [0, 13], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [0, 16], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.5},
{"matrix": [1, 1], "x": 1, "y": 1.5},
{"matrix": [1, 2], "x": 2, "y": 1.5},
{"matrix": [1, 3], "x": 3, "y": 1.5},
{"matrix": [1, 4], "x": 4, "y": 1.5},
{"matrix": [1, 5], "x": 5, "y": 1.5},
{"matrix": [1, 6], "x": 6, "y": 1.5},
{"matrix": [1, 7], "x": 7, "y": 1.5},
{"matrix": [1, 8], "x": 8, "y": 1.5},
{"matrix": [1, 9], "x": 9, "y": 1.5},
{"matrix": [1, 10], "x": 10, "y": 1.5},
{"matrix": [1, 11], "x": 11, "y": 1.5},
{"matrix": [1, 12], "x": 12, "y": 1.5},
{"matrix": [1, 13], "x": 13, "y": 1.5},
{"matrix": [3, 13], "x": 14, "y": 1.5},
{"matrix": [1, 14], "x": 15.25, "y": 1.5},
{"matrix": [1, 15], "x": 16.25, "y": 1.5},
{"matrix": [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, 12], "x": 12.75, "y": 3.5, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.5},
{"matrix": [4, 3], "x": 3.25, "y": 4.5},
{"matrix": [4, 4], "x": 4.25, "y": 4.5},
{"matrix": [4, 5], "x": 5.25, "y": 4.5},
{"matrix": [4, 6], "x": 6.25, "y": 4.5},
{"matrix": [4, 7], "x": 7.25, "y": 4.5},
{"matrix": [4, 8], "x": 8.25, "y": 4.5},
{"matrix": [4, 9], "x": 9.25, "y": 4.5},
{"matrix": [4, 10], "x": 10.25, "y": 4.5},
{"matrix": [4, 11], "x": 11.25, "y": 4.5},
{"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
{"matrix": [4, 13], "x": 14, "y": 4.5},
{"matrix": [4, 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, 6], "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}
]
},
"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.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, 12], "x": 12.75, "y": 3.5, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.5},
{"matrix": [4, 3], "x": 3.25, "y": 4.5},
{"matrix": [4, 4], "x": 4.25, "y": 4.5},
{"matrix": [4, 5], "x": 5.25, "y": 4.5},
{"matrix": [4, 6], "x": 6.25, "y": 4.5},
{"matrix": [4, 7], "x": 7.25, "y": 4.5},
{"matrix": [4, 8], "x": 8.25, "y": 4.5},
{"matrix": [4, 9], "x": 9.25, "y": 4.5},
{"matrix": [4, 10], "x": 10.25, "y": 4.5},
{"matrix": [4, 11], "x": 11.25, "y": 4.5},
{"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 2.75},
{"matrix": [4, 15], "x": 16.25, "y": 4.5},
{"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
{"matrix": [5, 1], "x": 1.5, "y": 5.5},
{"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.5},
{"matrix": [5, 6], "x": 4, "y": 5.5, "w": 7},
{"matrix": [5, 11], "x": 11, "y": 5.5, "w": 1.5},
{"matrix": [5, 12], "x": 12.5, "y": 5.5},
{"matrix": [5, 13], "x": 13.5, "y": 5.5, "w": 1.5},
{"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}
]
},
"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.5},
{"matrix": [1, 1], "x": 1, "y": 1.5},
{"matrix": [1, 2], "x": 2, "y": 1.5},
{"matrix": [1, 3], "x": 3, "y": 1.5},
{"matrix": [1, 4], "x": 4, "y": 1.5},
{"matrix": [1, 5], "x": 5, "y": 1.5},
{"matrix": [1, 6], "x": 6, "y": 1.5},
{"matrix": [1, 7], "x": 7, "y": 1.5},
{"matrix": [1, 8], "x": 8, "y": 1.5},
{"matrix": [1, 9], "x": 9, "y": 1.5},
{"matrix": [1, 10], "x": 10, "y": 1.5},
{"matrix": [1, 11], "x": 11, "y": 1.5},
{"matrix": [1, 12], "x": 12, "y": 1.5},
{"matrix": [1, 13], "x": 13, "y": 1.5},
{"matrix": [3, 13], "x": 14, "y": 1.5},
{"matrix": [1, 14], "x": 15.25, "y": 1.5},
{"matrix": [1, 15], "x": 16.25, "y": 1.5},
{"matrix": [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, 12], "x": 12.75, "y": 3.5, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.5},
{"matrix": [4, 3], "x": 3.25, "y": 4.5},
{"matrix": [4, 4], "x": 4.25, "y": 4.5},
{"matrix": [4, 5], "x": 5.25, "y": 4.5},
{"matrix": [4, 6], "x": 6.25, "y": 4.5},
{"matrix": [4, 7], "x": 7.25, "y": 4.5},
{"matrix": [4, 8], "x": 8.25, "y": 4.5},
{"matrix": [4, 9], "x": 9.25, "y": 4.5},
{"matrix": [4, 10], "x": 10.25, "y": 4.5},
{"matrix": [4, 11], "x": 11.25, "y": 4.5},
{"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
{"matrix": [4, 13], "x": 14, "y": 4.5},
{"matrix": [4, 15], "x": 16.25, "y": 4.5},
{"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
{"matrix": [5, 1], "x": 1.5, "y": 5.5},
{"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.5},
{"matrix": [5, 6], "x": 4, "y": 5.5, "w": 7},
{"matrix": [5, 11], "x": 11, "y": 5.5, "w": 1.5},
{"matrix": [5, 12], "x": 12.5, "y": 5.5},
{"matrix": [5, 13], "x": 13.5, "y": 5.5, "w": 1.5},
{"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}
]
}
}
}

View File

@ -0,0 +1,24 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_all(
_______, KC_VOLU, KC_VOLD, KC_MUTE, _______, KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, _______, _______, _______, KC_SLEP, _______, _______, _______,
BL_TOGG, BL_UP, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@ -0,0 +1,11 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#include_next <mcuconf.h>
#undef STM32_PWM_USE_TIM2
#define STM32_PWM_USE_TIM2 TRUE
#undef STM32_ST_USE_TIMER
#define STM32_ST_USE_TIMER 14

View File

@ -0,0 +1,27 @@
# Ghoul TKL
![image](https://i.imgur.com/Y39mNA4.jpeg)
A modern replacement PCB for Filco TKLs, adding support for PCB-mount stabilizers and popular alternate layouts. In-switch backlight LEDs are also supported.
* Keyboard Maintainer: [chillKB](https://github.com/chillKB)
* Hardware Supported: Ghoul TKL PCB
* Hardware Availability: [Open source on GitHub](https://github.com/chillKB/ghoulTKL)
Make example for this keyboard (after setting up your build environment):
make chill/ghoul:default
Flashing example for this keyboard:
make chill/ghoul: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 (usually Escape) and plug in the keyboard
* **Physical reset button**: Hold the boot button and tap the reset button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1,663 @@
{
"manufacturer": "Clap_Studio",
"keyboard_name": "Flame60",
"maintainer": "Freather",
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["B0", "B1", "B2", "B3", "B7", "D3", "D2", "D1", "D0", "B5", "B4", "D7", "D6", "D4"],
"rows": ["F4", "F1", "D5", "B6", "F5"]
},
"processor": "atmega32u4",
"url": "https://www.instagram.com/clap__studio__/",
"usb": {
"device_version": "1.0.0",
"pid": "0x464C",
"vid": "0x434C"
},
"layout_aliases": {
"LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_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, 1], "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, 1], "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, 1], "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, 1], "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_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, 13], "x": 12.75, "y": 2},
{"matrix": [2, 12], "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, 13], "x": 12.75, "y": 2},
{"matrix": [2, 12], "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, 13], "x": 12.75, "y": 2},
{"matrix": [2, 12], "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, 13], "x": 12.75, "y": 2},
{"matrix": [2, 12], "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}
]
}
}
}

View File

@ -0,0 +1,35 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = Backsp
*
* Tab Q W E R T Y U I O P [ ] \
*
* Caps A S D F G H J K L ; ' Enter
*
* Shift Z X C V B N M , . / Shift
*
* CtrlGUI Alt Alt GUI Fn Ctrl
*
*/
[0] = LAYOUT_60_ansi(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
),
[1] = LAYOUT_60_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@ -0,0 +1,27 @@
# Flame60
![Flame60 PCB](https://i.imgur.com/vdOxw3j.jpeg)
The Flame60 consists of a screwless exterior, flex cut pcb and plate to ensure a soft typing experience.
* Keyboard Maintainer: [CMM.Studio Freather](https://github.com/frankBTHID)
* Hardware Supported: Atmega32u4
* Hardware Availability: [CLAP.STUDIO (Instagram)](https://www.instagram.com/clap__studio__/)
Make example for this keyboard (after setting up your build environment):
make clap_studio/flame60:default
Flashing example for this keyboard:
make clap_studio/flame60: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

View File

@ -6,7 +6,7 @@ This is a standard off-the-shelf Durgod Taurus K310 full-sized 104/105-key
keyboard without backlight. This supports both the ANSI and ISO variants. keyboard without backlight. This supports both the ANSI and ISO variants.
* Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert) * Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert)
* Hardware Supported: [Durgod Taurus K310 board with STM32F070RBT6](https://www.durgod.com/page9?product_id=53&_l=en "Durgod.com Product Page") * Hardware Supported: [Durgod Taurus K310 board with STM32F070RBT6](https://www.durgod.com/product/k310-space-gray/)
* Hardware Availability: [Amazon.com](https://www.amazon.com/Durgod-Taurus-K310-Mechanical-Keyboard/dp/B07TXB4XF3) * Hardware Availability: [Amazon.com](https://www.amazon.com/Durgod-Taurus-K310-Mechanical-Keyboard/dp/B07TXB4XF3)
## Instructions ## Instructions

View File

@ -6,7 +6,7 @@ This is a standard off-the-shelf Durgod Taurus K320 TKL (87/88-key)
keyboard without backlight. This supports both the ANSI and ISO variants. keyboard without backlight. This supports both the ANSI and ISO variants.
* Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert) * Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert)
* Hardware Supported: [Durgod Taurus K320 board with STM32F070RBT6](https://www.durgod.com/page9?product_id=47&_l=en "Durgod.com Product Page") * Hardware Supported: [Durgod Taurus K320 board with STM32F070RBT6](https://www.durgod.com/product/k320-space-gray/)
* Hardware Availability: [Amazon.com](https://www.amazon.com/Durgod-Taurus-Corona-Mechanical-Keyboard/dp/B078H3WPHM) * Hardware Availability: [Amazon.com](https://www.amazon.com/Durgod-Taurus-Corona-Mechanical-Keyboard/dp/B078H3WPHM)
## Instructions ## Instructions
@ -15,11 +15,11 @@ keyboard without backlight. This supports both the ANSI and ISO variants.
Make command example for this keyboard (after setting up your build environment): Make command example for this keyboard (after setting up your build environment):
make durgod/k3x0/k320/base:default make durgod/k320/base:default
Flashing example for this keyboard: Flashing example for this keyboard:
make durgod/k3x0/k320/base:default:flash make durgod/k320/base: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). 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).

View File

@ -5,8 +5,8 @@ K310 full-sized 104/105-key and K320 TKL 87/88-key keyboards.
* Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert) * Keyboard Maintainers: [dkjer](https://github.com/dkjer) and [tylert](https://github.com/tylert)
* Hardware Supported: * Hardware Supported:
* [Durgod Taurus K310 with STM32F070RBT6](https://www.durgod.com/page9?product_id=53&_l=en "Taurus K310 Product Page | Durgod.com") * [Durgod Taurus K310 with STM32F070RBT6](https://www.durgod.com/product/k310-space-gray/)
* [Durgod Taurus K320 with STM32F070RBT6](https://www.durgod.com/page9?product_id=47&_l=en "Taurus K320 Product Page | Durgod.com") * [Durgod Taurus K320 with STM32F070RBT6](https://www.durgod.com/product/k320-space-gray/)
* Hardware Availability: * Hardware Availability:
* [K310 on Amazon.com](https://www.amazon.com/Durgod-Taurus-K310-Mechanical-Keyboard/dp/B07TXB4XF3) * [K310 on Amazon.com](https://www.amazon.com/Durgod-Taurus-K310-Mechanical-Keyboard/dp/B07TXB4XF3)
* [K320 on Amazon.com](https://www.amazon.com/Durgod-Taurus-Corona-Mechanical-Keyboard/dp/B078H3WPHM) * [K320 on Amazon.com](https://www.amazon.com/Durgod-Taurus-Corona-Mechanical-Keyboard/dp/B078H3WPHM)
@ -16,8 +16,8 @@ K310 full-sized 104/105-key and K320 TKL 87/88-key keyboards.
### Build ### Build
Instructions for building the K310 and K320 firmware can be found here: Instructions for building the K310 and K320 firmware can be found here:
* [K310](k310/readme.md) * [K310](../k310/readme.md)
* [K320](k320/readme.md) * [K320](../k320/readme.md)
### Initial Flash ### Initial Flash
@ -67,10 +67,10 @@ dfu-util -a 0 -d 0483:DF11 -s 0x08000000 -U k3x0_original.bin
```bash ```bash
# k310 # k310
qmk flash -kb durgod/k3x0/k310 -km default qmk flash -kb durgod/k310 -km default
# k320 # k320
qmk flash -kb durgod/k3x0/k320 -km default qmk flash -kb durgod/k320 -km default
``` ```
### Subsequent Flashing ### Subsequent Flashing

View File

@ -0,0 +1,137 @@
{
"keyboard_name": "Dactyl-Manuform (5x8)",
"manufacturer": "tshort",
"url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444D",
"pid": "0x3537",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
},
"qmk": {
"locking": {
"enabled": true,
"resync": true
}
},
"matrix_pins": {
"cols": ["B6", "B2", "B3", "B1", "F7", "F6", "F5", "F4"],
"rows": ["D4", "C6", "D7", "E6", "B4", "B5"]
},
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
"serial": {
"pin": "D0"
}
},
"development_board": "promicro",
"layouts": {
"LAYOUT_5x8": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.5},
{"matrix": [0, 1], "x": 1, "y": 0.5},
{"matrix": [0, 2], "x": 2, "y": 0.5},
{"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": [6, 7], "x": 17, "y": 0.5},
{"matrix": [6, 6], "x": 16, "y": 0.5},
{"matrix": [6, 5], "x": 15, "y": 0.5},
{"matrix": [6, 4], "x": 14, "y": 0},
{"matrix": [6, 3], "x": 13, "y": 0},
{"matrix": [6, 2], "x": 12, "y": 0},
{"matrix": [6, 1], "x": 11, "y": 0},
{"matrix": [6, 0], "x": 10, "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},
{"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": [7, 7], "x": 17, "y": 1.5},
{"matrix": [7, 6], "x": 16, "y": 1.5},
{"matrix": [7, 5], "x": 15, "y": 1.5},
{"matrix": [7, 4], "x": 14, "y": 1},
{"matrix": [7, 3], "x": 13, "y": 1},
{"matrix": [7, 2], "x": 12, "y": 1},
{"matrix": [7, 1], "x": 11, "y": 1},
{"matrix": [7, 0], "x": 10, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2.5},
{"matrix": [2, 1], "x": 1, "y": 2.5},
{"matrix": [2, 2], "x": 2, "y": 2.5},
{"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": [8, 7], "x": 17, "y": 2.5},
{"matrix": [8, 6], "x": 16, "y": 2.5},
{"matrix": [8, 5], "x": 15, "y": 2.5},
{"matrix": [8, 4], "x": 14, "y": 2},
{"matrix": [8, 3], "x": 13, "y": 2},
{"matrix": [8, 2], "x": 12, "y": 2},
{"matrix": [8, 1], "x": 11, "y": 2},
{"matrix": [8, 0], "x": 10, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3.5},
{"matrix": [3, 1], "x": 1, "y": 3.5},
{"matrix": [3, 2], "x": 2, "y": 3.5},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3},
{"matrix": [3, 5], "x": 5, "y": 3},
{"matrix": [3, 6], "x": 6, "y": 3},
{"matrix": [9, 6], "x": 17, "y": 3.5},
{"matrix": [9, 5], "x": 16, "y": 3.5},
{"matrix": [9, 4], "x": 15, "y": 3.5},
{"matrix": [9, 3], "x": 14, "y": 3},
{"matrix": [9, 2], "x": 13, "y": 3},
{"matrix": [9, 1], "x": 12, "y": 3},
{"matrix": [9, 0], "x": 11, "y": 3},
{"matrix": [4, 1], "x": 1, "y": 4.5},
{"matrix": [4, 2], "x": 2, "y": 4.5},
{"matrix": [4, 3], "x": 3, "y": 4},
{"matrix": [4, 4], "x": 4, "y": 4},
{"matrix": [10, 4], "x": 14, "y": 4},
{"matrix": [10, 3], "x": 13, "y": 4},
{"matrix": [10, 2], "x": 12, "y": 5},
{"matrix": [10, 1], "x": 11, "y": 5},
{"matrix": [4, 5], "x": 4.5, "y": 5},
{"matrix": [4, 6], "x": 5.5, "y": 5},
{"matrix": [10, 6], "x": 14.5, "y": 4.5},
{"matrix": [10, 5], "x": 15.5, "y": 4.5},
{"matrix": [5, 5], "x": 5, "y": 6},
{"matrix": [5, 6], "x": 6, "y": 6},
{"matrix": [11, 6], "x": 12, "y": 6},
{"matrix": [11, 5], "x": 11, "y": 6},
{"matrix": [5, 3], "x": 5, "y": 7},
{"matrix": [5, 4], "x": 6, "y": 7},
{"matrix": [11, 4], "x": 12, "y": 7},
{"matrix": [11, 3], "x": 11, "y": 7}
]
}
}
}

View File

@ -0,0 +1,84 @@
/* Copyright 2024 Philip Slinkin (s.philya@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 <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layers {
_QWERTY,
_RIGHT2LEFT
};
/* Base (qwerty)
* ,-------------------------------------------------------, ,-------------------------------------------------------,
* | Esc | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | \ | BS |
* |------+------+------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* |M_RSTP| Tab | q | w | e | r | t |QKBOOT| | F8 | y | u | i | o | p | [ | ] |
* |------+------+------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* |M_REC1| Caps | a | s | d | f | g | F7 | | F9 | h | j | k | l | ; | " |ENTER |
* |------+------+------+------+------+------+------+------' '------+------+------+------+------+------+------+------|
* |M_REC2| Shift| z | x | c | v | b | | n | m | , | . | / |Shift | Ctrl |
* '------+------+------+------+------+------+------' '------+------+------+------+------+------+------'
* | Ctrl | Wint | Alt | INS | | Up | Down | Left | Right|
* '------+------+------+------+------, ,------+------+------+------+------'
* | TT(1)|SPACE | | SPACE| BS |
* '------+------+------' ,------+------+------'
* | ESC |ENTER | | HOME | END |
* '------+------' '------+------'
* | DEL | F2 | | PGUP | PGDN |
* '------+------' '------+------'
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_5x8(
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_BSLS, KC_BSPC,
DM_RSTP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, QK_BOOT, KC_F8, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
DM_REC1, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F7, KC_F9, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
DM_REC2, 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_RCTL,
KC_LCTL, KC_LGUI, KC_LALT, KC_INS, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT,
TT(1), KC_SPC, KC_SPC, KC_BSPC,
KC_ESC, KC_ENT, KC_HOME, KC_END,
KC_DEL, KC_F2, KC_PGUP, KC_PGDN
),
/* Base (right to left on hold button)
* ,-------------------------------------------------------, ,-------------------------------------------------------,
* | BS | \ | = | - | 0 | 9 | 8 | 7 | | | | | | | | | |
* |------+------+------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* | [ | ] | p | o | i | u | y |QKBOOT| | | | | | | | | |
* |------+------+------+------+------+------+------+------| |------+------+------+------+------+------+------+------|
* |M_PLY1| " | ; | l | k | j | h |PRSCRN| | | | Left | Down | Up | Right| |ENTER |
* |------+------+------+------+------+------+------+------' '------+------+------+------+------+------+------+------|
* |M_PLY2|MShift| / | . | , | m | n | | | | | | | | |
* |------+------+------+------+------+------+------' '------+------+------+------+------+------+------'
* |MCtrl | MAlt | DEL | BS | | | | | |
* '------+------+------+------+------, ,------+------+------+------+------'
* | |SPACE | | SPACE| BS |
* '------+------+------' ,------+------+------'
* | END |ENTER | | HOME | END |
* '------+------' '------+------'
* | PGDN | PGUP | | PGUP | PGDN |
* '------+------' '------+------'
*/
[_RIGHT2LEFT] = LAYOUT_5x8(
KC_BSPC, KC_BSLS, KC_EQL, KC_MINS, KC_0, KC_9, KC_8, KC_7, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSPC,
KC_RBRC, KC_LBRC, KC_P, KC_O, KC_I, KC_U, KC_Y, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
DM_PLY1, KC_QUOT, KC_SCLN, KC_L, KC_K, KC_J, KC_H, KC_PSCR, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_SCLN, KC_NO, KC_ENT,
DM_PLY2, OSM(MOD_LSFT), KC_SLSH, KC_DOT, KC_COMM, KC_M, KC_N, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
OSM(MOD_LCTL), OSM(MOD_LALT), KC_DEL, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_SPC, KC_SPC, KC_BSPC,
KC_ESC, KC_ENT, KC_HOME, KC_END,
KC_DEL, KC_F2, KC_PGUP, KC_PGDN
),
};

View File

@ -0,0 +1 @@
DYNAMIC_MACRO_ENABLE = yes

View File

@ -0,0 +1,25 @@
# handwired/dactyl_manuform/5x8
![Dactyl_manuform 5x8](https://i.imgur.com/DtawD9r.jpeg)
* Keyboard Maintainer: [iliorik](https://github.com/iliorik)
I made this keyboard so that the buttons on the right side of the right half would replicate the standard keyboard.
I put macros on the left buttons of the left side keyboard for rec and play keypresses
Make example for this keyboard (after setting up your build environment):
make handwired/dactyl_manuform/5x8:default
Flashing example for this keyboard:
make handwired/dactyl_manuform/5x8: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:
* **Keycode in layout**: Press the key mapped to `QK_BOOT`
* **Reset pro micro**: Connect RST and GND pins on plate

View File

@ -0,0 +1,79 @@
{
"manufacturer": "PatrickFan",
"keyboard_name": "ic45_v2",
"maintainer": "PatrickFan",
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["F0", "F1", "F4", "F5", "F6", "F7", "B0", "B1", "D5", "D4", "D6", "D7", "B4"],
"rows": ["B6", "C6", "C7", "B5"]
},
"processor": "atmega32u4",
"url": "https://github.com/lighteningAB/45keyboard_v1",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
{"matrix": [0, 1], "x": 1.5, "y": 0},
{"matrix": [0, 2], "x": 2.5, "y": 0},
{"matrix": [0, 3], "x": 3.5, "y": 0},
{"matrix": [0, 4], "x": 4.5, "y": 0},
{"matrix": [0, 5], "x": 5.5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [0, 8], "x": 8.5, "y": 0},
{"matrix": [0, 9], "x": 9.5, "y": 0},
{"matrix": [0, 10], "x": 10.5, "y": 0},
{"matrix": [0, 11], "x": 11.5, "y": 0},
{"matrix": [0, 12], "x": 12.5, "y": 0},
{"matrix": [3, 12], "x": 13.5, "y": 0, "w": 1.5},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.75},
{"matrix": [1, 1], "x": 1.75, "y": 1},
{"matrix": [1, 2], "x": 2.75, "y": 1},
{"matrix": [1, 3], "x": 3.75, "y": 1},
{"matrix": [1, 4], "x": 4.75, "y": 1},
{"matrix": [1, 5], "x": 5.75, "y": 1},
{"matrix": [1, 6], "x": 6.75, "y": 1},
{"matrix": [1, 7], "x": 7.75, "y": 1},
{"matrix": [1, 8], "x": 8.75, "y": 1},
{"matrix": [1, 9], "x": 9.75, "y": 1},
{"matrix": [1, 10], "x": 10.75, "y": 1},
{"matrix": [1, 11], "x": 11.75, "y": 1},
{"matrix": [1, 12], "x": 12.75, "y": 1, "w": 2.25},
{"matrix": [2, 1], "x": 0, "y": 2, "w": 2.25},
{"matrix": [2, 2], "x": 2.25, "y": 2},
{"matrix": [2, 3], "x": 3.25, "y": 2},
{"matrix": [2, 4], "x": 4.25, "y": 2},
{"matrix": [2, 5], "x": 5.25, "y": 2},
{"matrix": [2, 6], "x": 6.25, "y": 2},
{"matrix": [2, 7], "x": 7.25, "y": 2},
{"matrix": [2, 8], "x": 8.25, "y": 2},
{"matrix": [2, 9], "x": 9.25, "y": 2},
{"matrix": [2, 10], "x": 10.25, "y": 2},
{"matrix": [2, 11], "x": 11.25, "y": 2},
{"matrix": [2, 12], "x": 12.25, "y": 2, "w": 2.75},
{"matrix": [3, 2], "x": 2, "y": 3, "w": 1.25},
{"matrix": [3, 3], "x": 3.25, "y": 3, "w": 1.25},
{"matrix": [3, 5], "x": 4.5, "y": 3, "w": 2.25},
{"matrix": [3, 8], "x": 6.75, "y": 3, "w": 2.75},
{"matrix": [3, 9], "x": 9.5, "y": 3, "w": 1.25},
{"matrix": [3, 10], "x": 10.75, "y": 3, "w": 1.25},
{"matrix": [3, 11], "x": 12, "y": 3, "w": 1.25}
]
}
}
}

View File

@ -0,0 +1,39 @@
/*
Copyright 2025 Patrick Fan
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_TAB, KC_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_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, MO(2), KC_BSLS
),
[1] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_BSPC
),
[2] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_DEL
)
};

View File

@ -0,0 +1,26 @@
# ic45_v2
![ic45_v2](https://i.imgur.com/a/FNxxXGd)
*A 46-key keyboard ANSI keyboard with split spacebar. Files available here [here](https://github.com/lighteningAB/45keyboard_v1)*
* Keyboard Maintainer: [PatrickFan](https://github.com/PatrickFan)
* Hardware Supported: Integrated ATmega32U4
* Hardware Availability: [GitHub](https://github.com/lighteningAB/45keyboard_v1)
Make example for this keyboard (after setting up your build environment):
make handwired/ic45_v2:default
Flashing example for this keyboard:
make handwired/ic45_v2:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 2 ways:
* **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

View File

@ -8,3 +8,7 @@
#define BACKLIGHT_PWM_DRIVER PWMD5 #define BACKLIGHT_PWM_DRIVER PWMD5
#define BACKLIGHT_PWM_CHANNEL 1 #define BACKLIGHT_PWM_CHANNEL 1
#define SOLENOID_PIN B12
#define SOLENOID_PINS { B12, B13, B14, B15 }
#define SOLENOID_PINS_ACTIVE_STATE { high, high, low }

View File

@ -0,0 +1 @@
MCU_LDSCRIPT = AT32F415xC

View File

@ -119,8 +119,7 @@
"solid_reactive_multinexus": true, "solid_reactive_multinexus": true,
"solid_splash": true, "solid_splash": true,
"wave_left_right": true, "wave_left_right": true,
"wave_up_down": true, "wave_up_down": true
"effect_max": true
}, },
"layout": [ "layout": [
{"matrix":[0, 0], "flags":1, "x":0, "y":0}, {"matrix":[0, 0], "flags":1, "x":0, "y":0},

View File

@ -136,8 +136,7 @@
"solid_reactive_multinexus": true, "solid_reactive_multinexus": true,
"solid_splash": true, "solid_splash": true,
"wave_left_right": true, "wave_left_right": true,
"wave_up_down": true, "wave_up_down": true
"effect_max": true
}, },
"layout": [ "layout": [
{"matrix":[0, 0], "flags":1, "x":0, "y":0}, {"matrix":[0, 0], "flags":1, "x":0, "y":0},

View File

@ -0,0 +1,31 @@
/* Copyright 2024 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* Indication led */
#define LED_MAC_OS_PIN A4
#define LED_WIN_OS_PIN A5
#define LED_OS_PIN_ON_STATE 1
/* LED Matrix Driver Configuration */
#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND
/* Use first 7 channels of LED driver */
#define SNLED27351_PHASE_CHANNEL SNLED27351_SCAN_PHASE_7_CHANNEL
/* Set LED driver current */
#define SNLED27351_CURRENT_TUNE { 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50 }

View File

@ -0,0 +1,242 @@
{
"keyboard_name": "Keychron C3 Pro Red",
"features": {
"led_matrix": true
},
"indicators": {
"caps_lock": "A3"
},
"led_matrix": {
"animations": {
"band_pinwheel": true,
"band_spiral": true,
"breathing": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_up_down": true,
"dual_beacon": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_simple": true,
"solid_splash": true,
"wave_left_right": true,
"wave_up_down": true
},
"driver": "snled27351",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
{"matrix": [0, 2], "x": 26, "y": 0, "flags": 1},
{"matrix": [0, 3], "x": 39, "y": 0, "flags": 1},
{"matrix": [0, 4], "x": 52, "y": 0, "flags": 1},
{"matrix": [0, 5], "x": 65, "y": 0, "flags": 1},
{"matrix": [0, 6], "x": 84, "y": 0, "flags": 1},
{"matrix": [0, 7], "x": 97, "y": 0, "flags": 1},
{"matrix": [0, 8], "x": 110, "y": 0, "flags": 1},
{"matrix": [0, 9], "x": 123, "y": 0, "flags": 1},
{"matrix": [0, 10], "x": 143, "y": 0, "flags": 1},
{"matrix": [0, 11], "x": 156, "y": 0, "flags": 1},
{"matrix": [0, 12], "x": 169, "y": 0, "flags": 1},
{"matrix": [0, 13], "x": 182, "y": 0, "flags": 1},
{"matrix": [0, 14], "x": 198, "y": 0, "flags": 1},
{"matrix": [0, 15], "x": 211, "y": 0, "flags": 1},
{"matrix": [0, 16], "x": 224, "y": 0, "flags": 1},
{"matrix": [1, 0], "x": 0, "y": 16, "flags": 1},
{"matrix": [1, 1], "x": 13, "y": 16, "flags": 4},
{"matrix": [1, 2], "x": 26, "y": 16, "flags": 4},
{"matrix": [1, 3], "x": 39, "y": 16, "flags": 4},
{"matrix": [1, 4], "x": 52, "y": 16, "flags": 4},
{"matrix": [1, 5], "x": 65, "y": 16, "flags": 4},
{"matrix": [1, 6], "x": 78, "y": 16, "flags": 4},
{"matrix": [1, 7], "x": 91, "y": 16, "flags": 4},
{"matrix": [1, 8], "x": 104, "y": 16, "flags": 4},
{"matrix": [1, 9], "x": 117, "y": 16, "flags": 4},
{"matrix": [1, 10], "x": 130, "y": 16, "flags": 4},
{"matrix": [1, 11], "x": 143, "y": 16, "flags": 4},
{"matrix": [1, 12], "x": 156, "y": 16, "flags": 4},
{"matrix": [1, 13], "x": 175, "y": 16, "flags": 1},
{"matrix": [1, 14], "x": 198, "y": 16, "flags": 1},
{"matrix": [1, 15], "x": 211, "y": 16, "flags": 1},
{"matrix": [1, 16], "x": 224, "y": 16, "flags": 1},
{"matrix": [2, 0], "x": 3, "y": 28, "flags": 1},
{"matrix": [2, 1], "x": 19, "y": 28, "flags": 4},
{"matrix": [2, 2], "x": 32, "y": 28, "flags": 4},
{"matrix": [2, 3], "x": 45, "y": 28, "flags": 4},
{"matrix": [2, 4], "x": 58, "y": 28, "flags": 4},
{"matrix": [2, 5], "x": 71, "y": 28, "flags": 4},
{"matrix": [2, 6], "x": 84, "y": 28, "flags": 4},
{"matrix": [2, 7], "x": 97, "y": 28, "flags": 4},
{"matrix": [2, 8], "x": 110, "y": 28, "flags": 4},
{"matrix": [2, 9], "x": 123, "y": 28, "flags": 4},
{"matrix": [2, 10], "x": 136, "y": 28, "flags": 4},
{"matrix": [2, 11], "x": 149, "y": 28, "flags": 4},
{"matrix": [2, 12], "x": 162, "y": 28, "flags": 4},
{"matrix": [2, 13], "x": 178, "y": 28, "flags": 1},
{"matrix": [2, 14], "x": 198, "y": 28, "flags": 1},
{"matrix": [2, 15], "x": 211, "y": 28, "flags": 1},
{"matrix": [2, 16], "x": 224, "y": 28, "flags": 1},
{"matrix": [3, 0], "x": 5, "y": 40, "flags": 8},
{"matrix": [3, 1], "x": 23, "y": 40, "flags": 4},
{"matrix": [3, 2], "x": 36, "y": 40, "flags": 4},
{"matrix": [3, 3], "x": 49, "y": 40, "flags": 4},
{"matrix": [3, 4], "x": 62, "y": 40, "flags": 4},
{"matrix": [3, 5], "x": 75, "y": 40, "flags": 4},
{"matrix": [3, 6], "x": 88, "y": 40, "flags": 4},
{"matrix": [3, 7], "x": 101, "y": 40, "flags": 4},
{"matrix": [3, 8], "x": 114, "y": 40, "flags": 4},
{"matrix": [3, 9], "x": 126, "y": 40, "flags": 4},
{"matrix": [3, 10], "x": 139, "y": 40, "flags": 4},
{"matrix": [3, 11], "x": 152, "y": 40, "flags": 4},
{"matrix": [3, 13], "x": 173, "y": 40, "flags": 1},
{"matrix": [4, 0], "x": 8, "y": 52, "flags": 1},
{"matrix": [4, 2], "x": 29, "y": 52, "flags": 4},
{"matrix": [4, 3], "x": 42, "y": 52, "flags": 4},
{"matrix": [4, 4], "x": 55, "y": 52, "flags": 4},
{"matrix": [4, 5], "x": 68, "y": 52, "flags": 4},
{"matrix": [4, 6], "x": 81, "y": 52, "flags": 4},
{"matrix": [4, 7], "x": 94, "y": 52, "flags": 4},
{"matrix": [4, 8], "x": 107, "y": 52, "flags": 4},
{"matrix": [4, 9], "x": 120, "y": 52, "flags": 4},
{"matrix": [4, 10], "x": 133, "y": 52, "flags": 4},
{"matrix": [4, 11], "x": 146, "y": 52, "flags": 4},
{"matrix": [4, 13], "x": 170, "y": 52, "flags": 1},
{"matrix": [4, 15], "x": 211, "y": 52, "flags": 1},
{"matrix": [5, 0], "x": 2, "y": 64, "flags": 1},
{"matrix": [5, 1], "x": 18, "y": 64, "flags": 1},
{"matrix": [5, 2], "x": 34, "y": 64, "flags": 1},
{"matrix": [5, 6], "x": 83, "y": 64, "flags": 4},
{"matrix": [5, 10], "x": 131, "y": 64, "flags": 1},
{"matrix": [5, 11], "x": 148, "y": 64, "flags": 1},
{"matrix": [5, 12], "x": 164, "y": 64, "flags": 1},
{"matrix": [5, 13], "x": 180, "y": 64, "flags": 1},
{"matrix": [5, 14], "x": 198, "y": 64, "flags": 1},
{"matrix": [5, 15], "x": 211, "y": 64, "flags": 1},
{"matrix": [5, 16], "x": 224, "y": 64, "flags": 1},
{"x": 0, "y": 0, "flags": 1},
{"x": 0, "y": 16, "flags": 1},
{"x": 0, "y": 28, "flags": 1},
{"x": 0, "y": 40, "flags": 1},
{"x": 0, "y": 52, "flags": 1},
{"x": 0, "y": 64, "flags": 1},
{"x": 224, "y": 0, "flags": 1},
{"x": 224, "y": 16, "flags": 1},
{"x": 224, "y": 28, "flags": 1},
{"x": 224, "y": 40, "flags": 1},
{"x": 224, "y": 52, "flags": 1},
{"x": 224, "y": 64, "flags": 1}
],
"sleep": true
},
"matrix_pins": {
"cols": ["C6", "C7", "C8", "A14", "A15", "C10", "C11", "C13", "C14", "C15", "C0", "C1", "C2", "C3", "A0", "A1", "A2"],
"rows": ["C12", "D2", "B3", "B4", "B5", "B6"]
},
"usb": {
"device_version": "1.0.1",
"pid": "0x0430"
},
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [0, 8], "x": 8.5, "y": 0},
{"matrix": [0, 9], "x": 9.5, "y": 0},
{"matrix": [0, 10], "x": 11, "y": 0},
{"matrix": [0, 11], "x": 12, "y": 0},
{"matrix": [0, 12], "x": 13, "y": 0},
{"matrix": [0, 13], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.25, "y": 0},
{"matrix": [0, 15], "x": 16.25, "y": 0},
{"matrix": [0, 16], "x": 17.25, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
{"matrix": [1, 3], "x": 3, "y": 1.25},
{"matrix": [1, 4], "x": 4, "y": 1.25},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [1, 6], "x": 6, "y": 1.25},
{"matrix": [1, 7], "x": 7, "y": 1.25},
{"matrix": [1, 8], "x": 8, "y": 1.25},
{"matrix": [1, 9], "x": 9, "y": 1.25},
{"matrix": [1, 10], "x": 10, "y": 1.25},
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
{"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"matrix": [1, 14], "x": 15.25, "y": 1.25},
{"matrix": [1, 15], "x": 16.25, "y": 1.25},
{"matrix": [1, 16], "x": 17.25, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
{"matrix": [2, 3], "x": 3.5, "y": 2.25},
{"matrix": [2, 4], "x": 4.5, "y": 2.25},
{"matrix": [2, 5], "x": 5.5, "y": 2.25},
{"matrix": [2, 6], "x": 6.5, "y": 2.25},
{"matrix": [2, 7], "x": 7.5, "y": 2.25},
{"matrix": [2, 8], "x": 8.5, "y": 2.25},
{"matrix": [2, 9], "x": 9.5, "y": 2.25},
{"matrix": [2, 10], "x": 10.5, "y": 2.25},
{"matrix": [2, 11], "x": 11.5, "y": 2.25},
{"matrix": [2, 12], "x": 12.5, "y": 2.25},
{"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"matrix": [2, 14], "x": 15.25, "y": 2.25},
{"matrix": [2, 15], "x": 16.25, "y": 2.25},
{"matrix": [2, 16], "x": 17.25, "y": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
{"matrix": [3, 3], "x": 3.75, "y": 3.25},
{"matrix": [3, 4], "x": 4.75, "y": 3.25},
{"matrix": [3, 5], "x": 5.75, "y": 3.25},
{"matrix": [3, 6], "x": 6.75, "y": 3.25},
{"matrix": [3, 7], "x": 7.75, "y": 3.25},
{"matrix": [3, 8], "x": 8.75, "y": 3.25},
{"matrix": [3, 9], "x": 9.75, "y": 3.25},
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
{"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
{"matrix": [4, 5], "x": 5.25, "y": 4.25},
{"matrix": [4, 6], "x": 6.25, "y": 4.25},
{"matrix": [4, 7], "x": 7.25, "y": 4.25},
{"matrix": [4, 8], "x": 8.25, "y": 4.25},
{"matrix": [4, 9], "x": 9.25, "y": 4.25},
{"matrix": [4, 10], "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
{"matrix": [4, 15], "x": 16.25, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
{"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
{"matrix": [5, 14], "x": 15.25, "y": 5.25},
{"matrix": [5, 15], "x": 16.25, "y": 5.25},
{"matrix": [5, 16], "x": 17.25, "y": 5.25}
]
}
}
}

View File

@ -0,0 +1,60 @@
/* Copyright 2024 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN,
};
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_tkl_ansi(
KC_ESC, KC_BRID, KC_BRIU, _______, _______, LM_BRID, LM_BRIU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_TRNS, 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_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(MAC_FN),KC_TRNS, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT_tkl_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_STEP,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_TOGG, BL_STEP, LM_BRIU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_OSSW, _______, LM_BRID, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[WIN_BASE] = LAYOUT_tkl_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_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_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT_tkl_ansi(
_______, KC_BRID, KC_BRIU, _______, _______, LM_BRID, LM_BRIU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_STEP,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_TOGG, BL_STEP, LM_BRIU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_OSSW, _______, LM_BRID, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};

View File

@ -0,0 +1,132 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#ifdef LED_MATRIX_ENABLE
// clang-format off
const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = {
/* Refer to SNLED27351 manual for these locations
* driver
* | LED address
* | | */
{0, CB6_CA1},
{0, CB6_CA3},
{0, CB6_CA4},
{0, CB6_CA5},
{0, CB6_CA6},
{0, CB6_CA7},
{0, CB6_CA8},
{0, CB6_CA9},
{0, CB6_CA10},
{0, CB6_CA11},
{0, CB6_CA12},
{0, CB6_CA13},
{0, CB6_CA14},
{0, CB6_CA15},
{0, CB6_CA16},
{0, CB3_CA13},
{0, CB5_CA1},
{0, CB5_CA2},
{0, CB5_CA3},
{0, CB5_CA4},
{0, CB5_CA5},
{0, CB5_CA6},
{0, CB5_CA7},
{0, CB5_CA8},
{0, CB5_CA9},
{0, CB5_CA10},
{0, CB5_CA11},
{0, CB5_CA12},
{0, CB5_CA13},
{0, CB5_CA14},
{0, CB5_CA15},
{0, CB5_CA16},
{0, CB3_CA15},
{0, CB4_CA1},
{0, CB4_CA2},
{0, CB4_CA3},
{0, CB4_CA4},
{0, CB4_CA5},
{0, CB4_CA6},
{0, CB4_CA7},
{0, CB4_CA8},
{0, CB4_CA9},
{0, CB4_CA10},
{0, CB4_CA11},
{0, CB4_CA12},
{0, CB4_CA13},
{0, CB4_CA14},
{0, CB4_CA15},
{0, CB4_CA16},
{0, CB3_CA16},
{0, CB3_CA1},
{0, CB3_CA2},
{0, CB3_CA3},
{0, CB3_CA4},
{0, CB3_CA5},
{0, CB3_CA6},
{0, CB3_CA7},
{0, CB3_CA8},
{0, CB3_CA9},
{0, CB3_CA10},
{0, CB3_CA11},
{0, CB3_CA12},
{0, CB3_CA14},
{0, CB2_CA1},
{0, CB2_CA3},
{0, CB2_CA4},
{0, CB2_CA5},
{0, CB2_CA6},
{0, CB2_CA7},
{0, CB2_CA8},
{0, CB2_CA9},
{0, CB2_CA10},
{0, CB2_CA11},
{0, CB2_CA12},
{0, CB2_CA14},
{0, CB2_CA16},
{0, CB1_CA1},
{0, CB1_CA2},
{0, CB1_CA3},
{0, CB1_CA7},
{0, CB1_CA11},
{0, CB1_CA12},
{0, CB1_CA13},
{0, CB1_CA14},
{0, CB1_CA15},
{0, CB1_CA16},
{0, CB2_CA15},
{0, CB7_CA1},
{0, CB7_CA2},
{0, CB7_CA3},
{0, CB7_CA4},
{0, CB7_CA5},
{0, CB7_CA6},
{0, CB7_CA12},
{0, CB7_CA11},
{0, CB7_CA10},
{0, CB7_CA9},
{0, CB7_CA8},
{0, CB7_CA7},
};
#endif

View File

@ -0,0 +1,29 @@
/* Copyright 2024 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* Enable indicator LED*/
#define LED_MAC_OS_PIN A6
#define LED_WIN_OS_PIN A7
#define LED_OS_PIN_ON_STATE 1
/* RGB Matrix Driver Configuration */
#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_VDDIO
#define SNLED27351_I2C_ADDRESS_2 SNLED27351_I2C_ADDRESS_GND
/* Set LED driver current */
#define SNLED27351_CURRENT_TUNE { 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 }

View File

@ -0,0 +1,249 @@
{
"keyboard_name": "Keychron C3 Pro RGB",
"features": {
"rgb_matrix": true
},
"indicators": {
"caps_lock": "A5"
},
"matrix_pins": {
"cols": ["C6", "C7", "C8", "A14", "B7", "C13", "C14", "C15", "C0", "C1", "C2", "C3", "A0", "A1", "A2", "A3", "A4"],
"rows": ["C12", "D2", "B3", "B4", "B5", "B6"]
},
"rgb_matrix": {
"animations": {
"band_spiral_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,
"jellybean_raindrops": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_simple": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"driver": "snled27351",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
{"matrix": [0, 2], "x": 20, "y": 0, "flags": 1},
{"matrix": [0, 3], "x": 30, "y": 0, "flags": 1},
{"matrix": [0, 4], "x": 40, "y": 0, "flags": 1},
{"matrix": [0, 5], "x": 50, "y": 0, "flags": 1},
{"matrix": [0, 6], "x": 65, "y": 0, "flags": 1},
{"matrix": [0, 7], "x": 75, "y": 0, "flags": 1},
{"matrix": [0, 8], "x": 85, "y": 0, "flags": 1},
{"matrix": [0, 9], "x": 95, "y": 0, "flags": 1},
{"matrix": [0, 10], "x": 110, "y": 0, "flags": 1},
{"matrix": [0, 11], "x": 120, "y": 0, "flags": 1},
{"matrix": [0, 12], "x": 130, "y": 0, "flags": 1},
{"matrix": [0, 13], "x": 140, "y": 0, "flags": 1},
{"matrix": [0, 14], "x": 155, "y": 0, "flags": 1},
{"matrix": [0, 15], "x": 165, "y": 0, "flags": 1},
{"matrix": [0, 16], "x": 175, "y": 0, "flags": 1},
{"matrix": [1, 0], "x": 0, "y": 15, "flags": 4},
{"matrix": [1, 1], "x": 10, "y": 15, "flags": 4},
{"matrix": [1, 2], "x": 20, "y": 15, "flags": 4},
{"matrix": [1, 3], "x": 30, "y": 15, "flags": 4},
{"matrix": [1, 4], "x": 40, "y": 15, "flags": 4},
{"matrix": [1, 5], "x": 50, "y": 15, "flags": 4},
{"matrix": [1, 6], "x": 60, "y": 15, "flags": 4},
{"matrix": [1, 7], "x": 70, "y": 15, "flags": 4},
{"matrix": [1, 8], "x": 80, "y": 15, "flags": 4},
{"matrix": [1, 9], "x": 90, "y": 15, "flags": 4},
{"matrix": [1, 10], "x": 100, "y": 15, "flags": 4},
{"matrix": [1, 11], "x": 110, "y": 15, "flags": 4},
{"matrix": [1, 12], "x": 120, "y": 15, "flags": 4},
{"matrix": [1, 13], "x": 135, "y": 15, "flags": 1},
{"matrix": [1, 14], "x": 155, "y": 15, "flags": 1},
{"matrix": [1, 15], "x": 165, "y": 15, "flags": 1},
{"matrix": [1, 16], "x": 175, "y": 15, "flags": 1},
{"matrix": [2, 0], "x": 3, "y": 27, "flags": 1},
{"matrix": [2, 1], "x": 16, "y": 27, "flags": 4},
{"matrix": [2, 2], "x": 26, "y": 27, "flags": 4},
{"matrix": [2, 3], "x": 36, "y": 27, "flags": 4},
{"matrix": [2, 4], "x": 47, "y": 27, "flags": 4},
{"matrix": [2, 5], "x": 57, "y": 27, "flags": 4},
{"matrix": [2, 6], "x": 68, "y": 27, "flags": 4},
{"matrix": [2, 7], "x": 78, "y": 27, "flags": 4},
{"matrix": [2, 8], "x": 89, "y": 27, "flags": 4},
{"matrix": [2, 9], "x": 99, "y": 27, "flags": 4},
{"matrix": [2, 10], "x": 109, "y": 27, "flags": 4},
{"matrix": [2, 11], "x": 120, "y": 27, "flags": 4},
{"matrix": [2, 12], "x": 130, "y": 27, "flags": 4},
{"matrix": [2, 13], "x": 143, "y": 27, "flags": 4},
{"matrix": [2, 14], "x": 155, "y": 27, "flags": 1},
{"matrix": [2, 15], "x": 165, "y": 27, "flags": 1},
{"matrix": [2, 16], "x": 175, "y": 27, "flags": 1},
{"matrix": [3, 0], "x": 4, "y": 40, "flags": 8},
{"matrix": [3, 1], "x": 18, "y": 40, "flags": 4},
{"matrix": [3, 2], "x": 29, "y": 40, "flags": 4},
{"matrix": [3, 3], "x": 39, "y": 40, "flags": 4},
{"matrix": [3, 4], "x": 50, "y": 40, "flags": 4},
{"matrix": [3, 5], "x": 60, "y": 40, "flags": 4},
{"matrix": [3, 6], "x": 70, "y": 40, "flags": 4},
{"matrix": [3, 7], "x": 81, "y": 40, "flags": 4},
{"matrix": [3, 8], "x": 91, "y": 40, "flags": 4},
{"matrix": [3, 9], "x": 102, "y": 40, "flags": 4},
{"matrix": [3, 10], "x": 112, "y": 40, "flags": 4},
{"matrix": [3, 11], "x": 123, "y": 40, "flags": 4},
{"matrix": [3, 13], "x": 143, "y": 40, "flags": 4},
{"matrix": [4, 0], "x": 7, "y": 52, "flags": 1},
{"matrix": [4, 2], "x": 23, "y": 52, "flags": 4},
{"matrix": [4, 3], "x": 34, "y": 52, "flags": 4},
{"matrix": [4, 4], "x": 44, "y": 52, "flags": 4},
{"matrix": [4, 5], "x": 55, "y": 52, "flags": 4},
{"matrix": [4, 6], "x": 65, "y": 52, "flags": 4},
{"matrix": [4, 7], "x": 76, "y": 52, "flags": 4},
{"matrix": [4, 8], "x": 86, "y": 52, "flags": 4},
{"matrix": [4, 9], "x": 96, "y": 52, "flags": 4},
{"matrix": [4, 10], "x": 107, "y": 52, "flags": 4},
{"matrix": [4, 11], "x": 117, "y": 52, "flags": 4},
{"matrix": [4, 13], "x": 137, "y": 52, "flags": 1},
{"matrix": [4, 15], "x": 165, "y": 52, "flags": 1},
{"matrix": [5, 0], "x": 1, "y": 64, "flags": 1},
{"matrix": [5, 1], "x": 14, "y": 64, "flags": 1},
{"matrix": [5, 2], "x": 27, "y": 64, "flags": 1},
{"matrix": [5, 6], "x": 67, "y": 64, "flags": 4},
{"matrix": [5, 10], "x": 104, "y": 64, "flags": 1},
{"matrix": [5, 11], "x": 116, "y": 64, "flags": 1},
{"matrix": [5, 12], "x": 128, "y": 64, "flags": 4},
{"matrix": [5, 13], "x": 140, "y": 64, "flags": 1},
{"matrix": [5, 14], "x": 155, "y": 64, "flags": 1},
{"matrix": [5, 15], "x": 165, "y": 64, "flags": 1},
{"matrix": [5, 16], "x": 175, "y": 64, "flags": 1},
{"x": 0, "y": 0, "flags": 1},
{"x": 0, "y": 16, "flags": 1},
{"x": 0, "y": 28, "flags": 1},
{"x": 0, "y": 40, "flags": 1},
{"x": 0, "y": 52, "flags": 1},
{"x": 0, "y": 64, "flags": 1},
{"x": 224, "y": 0, "flags": 1},
{"x": 224, "y": 16, "flags": 1},
{"x": 224, "y": 28, "flags": 1},
{"x": 224, "y": 40, "flags": 1},
{"x": 224, "y": 52, "flags": 1},
{"x": 224, "y": 64, "flags": 1}
],
"sleep": true
},
"usb": {
"device_version": "1.0.1",
"pid": "0x0433"
},
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "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": 10, "y": 0},
{"matrix": [0, 10], "x": 11, "y": 0},
{"matrix": [0, 11], "x": 12, "y": 0},
{"matrix": [0, 12], "x": 13, "y": 0},
{"matrix": [0, 13], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 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.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}
]
}
}
}

View File

@ -0,0 +1,64 @@
/* Copyright 2024 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN,
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_tkl_ansi(
KC_ESC, KC_BRID, KC_BRIU, _______, _______, RM_VALD, RM_VALU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_TRNS, RM_NEXT,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(MAC_FN), KC_APP, KC_RCTL,KC_LEFT, KC_DOWN, KC_RGHT ),
[MAC_FN] = LAYOUT_tkl_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RM_TOGG, RM_NEXT, RM_VALU, RM_HUEU, RM_SATU, RM_SPDU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_OSSW, RM_PREV, RM_VALD, RM_HUED, RM_SATD, RM_SPDD, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
[WIN_BASE] = LAYOUT_tkl_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SCROLL_LOCK,KC_PAUSE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_APP, KC_RCTL,KC_LEFT, KC_DOWN, KC_RGHT ),
[WIN_FN] = LAYOUT_tkl_ansi(
_______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RM_VALD, RM_VALU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RM_NEXT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RM_TOGG, RM_NEXT, RM_VALU, RM_HUEU, RM_SATU, RM_SPDU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_OSSW, RM_PREV, RM_VALD, RM_HUED, RM_SATD, RM_SPDD, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, GU_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
};

View File

@ -0,0 +1,135 @@
/* Copyright 2024 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#ifdef RGB_MATRIX_ENABLE
// clang-format off
const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = {
/* Refer to SNLED27351 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, CB7_CA1, CB9_CA1, CB8_CA1},
{0, CB7_CA3, CB9_CA3, CB8_CA3},
{0, CB7_CA4, CB9_CA4, CB8_CA4},
{0, CB7_CA5, CB9_CA5, CB8_CA5},
{0, CB7_CA6, CB9_CA6, CB8_CA6},
{0, CB7_CA7, CB9_CA7, CB8_CA7},
{0, CB7_CA8, CB9_CA8, CB8_CA8},
{0, CB7_CA9, CB9_CA9, CB8_CA9},
{0, CB7_CA10, CB9_CA10, CB8_CA10},
{0, CB7_CA11, CB9_CA11, CB8_CA11},
{0, CB7_CA12, CB9_CA12, CB8_CA12},
{0, CB7_CA13, CB9_CA13, CB8_CA13},
{0, CB7_CA14, CB9_CA14, CB8_CA14},
{0, CB7_CA15, CB9_CA15, CB8_CA15},
{0, CB7_CA16, CB9_CA16, CB8_CA16},
{1, CB7_CA16, CB9_CA16, CB8_CA16},
{0, CB4_CA1, CB6_CA1, CB5_CA1},
{0, CB4_CA2, CB6_CA2, CB5_CA2},
{0, CB4_CA3, CB6_CA3, CB5_CA3},
{0, CB4_CA4, CB6_CA4, CB5_CA4},
{0, CB4_CA5, CB6_CA5, CB5_CA5},
{0, CB4_CA6, CB6_CA6, CB5_CA6},
{0, CB4_CA7, CB6_CA7, CB5_CA7},
{0, CB4_CA8, CB6_CA8, CB5_CA8},
{0, CB4_CA9, CB6_CA9, CB5_CA9},
{0, CB4_CA10, CB6_CA10, CB5_CA10},
{0, CB4_CA11, CB6_CA11, CB5_CA11},
{0, CB4_CA12, CB6_CA12, CB5_CA12},
{0, CB4_CA13, CB6_CA13, CB5_CA13},
{0, CB4_CA14, CB6_CA14, CB5_CA14},
{0, CB4_CA15, CB6_CA15, CB5_CA15},
{0, CB4_CA16, CB6_CA16, CB5_CA16},
{1, CB7_CA13, CB9_CA13, CB8_CA13},
{0, CB1_CA1, CB3_CA1, CB2_CA1},
{0, CB1_CA2, CB3_CA2, CB2_CA2},
{0, CB1_CA3, CB3_CA3, CB2_CA3},
{0, CB1_CA4, CB3_CA4, CB2_CA4},
{0, CB1_CA5, CB3_CA5, CB2_CA5},
{0, CB1_CA6, CB3_CA6, CB2_CA6},
{0, CB1_CA7, CB3_CA7, CB2_CA7},
{0, CB1_CA8, CB3_CA8, CB2_CA8},
{0, CB1_CA9, CB3_CA9, CB2_CA9},
{0, CB1_CA10, CB3_CA10, CB2_CA10},
{0, CB1_CA11, CB3_CA11, CB2_CA11},
{0, CB1_CA12, CB3_CA12, CB2_CA12},
{0, CB1_CA13, CB3_CA13, CB2_CA13},
{0, CB1_CA14, CB3_CA14, CB2_CA14},
{0, CB1_CA15, CB3_CA15, CB2_CA15},
{0, CB1_CA16, CB3_CA16, CB2_CA16},
{1, CB7_CA15, CB9_CA15, CB8_CA15},
{1, CB7_CA1, CB9_CA1, CB8_CA1},
{1, CB7_CA2, CB9_CA2, CB8_CA2},
{1, CB7_CA3, CB9_CA3, CB8_CA3},
{1, CB7_CA4, CB9_CA4, CB8_CA4},
{1, CB7_CA5, CB9_CA5, CB8_CA5},
{1, CB7_CA6, CB9_CA6, CB8_CA6},
{1, CB7_CA7, CB9_CA7, CB8_CA7},
{1, CB7_CA8, CB9_CA8, CB8_CA8},
{1, CB7_CA9, CB9_CA9, CB8_CA9},
{1, CB7_CA10, CB9_CA10, CB8_CA10},
{1, CB7_CA11, CB9_CA11, CB8_CA11},
{1, CB7_CA12, CB9_CA12, CB8_CA12},
{1, CB7_CA14, CB9_CA14, CB8_CA14},
{1, CB1_CA1, CB3_CA1, CB2_CA1},
{1, CB1_CA3, CB3_CA3, CB2_CA3},
{1, CB1_CA4, CB3_CA4, CB2_CA4},
{1, CB1_CA5, CB3_CA5, CB2_CA5},
{1, CB1_CA6, CB3_CA6, CB2_CA6},
{1, CB1_CA7, CB3_CA7, CB2_CA7},
{1, CB1_CA8, CB3_CA8, CB2_CA8},
{1, CB1_CA9, CB3_CA9, CB2_CA9},
{1, CB1_CA10, CB3_CA10, CB2_CA10},
{1, CB1_CA11, CB3_CA11, CB2_CA11},
{1, CB1_CA12, CB3_CA12, CB2_CA12},
{1, CB1_CA14, CB3_CA14, CB2_CA14},
{1, CB1_CA16, CB3_CA16, CB2_CA16},
{1, CB4_CA1, CB6_CA1, CB5_CA1},
{1, CB4_CA2, CB6_CA2, CB5_CA2},
{1, CB4_CA3, CB6_CA3, CB5_CA3},
{1, CB4_CA7, CB6_CA7, CB5_CA7},
{1, CB4_CA11, CB6_CA11, CB5_CA11},
{1, CB4_CA12, CB6_CA12, CB5_CA12},
{1, CB4_CA13, CB6_CA13, CB5_CA13},
{1, CB4_CA14, CB6_CA14, CB5_CA14},
{1, CB4_CA15, CB6_CA15, CB5_CA15},
{1, CB4_CA16, CB6_CA16, CB5_CA16},
{1, CB1_CA15, CB3_CA15, CB2_CA15},
{0, CB10_CA1, CB12_CA1, CB11_CA1},
{0, CB10_CA2, CB12_CA2, CB11_CA2},
{0, CB10_CA3, CB12_CA3, CB11_CA3},
{0, CB10_CA4, CB12_CA4, CB11_CA4},
{0, CB10_CA5, CB12_CA5, CB11_CA5},
{0, CB10_CA6, CB12_CA6, CB11_CA6},
{0, CB10_CA7, CB12_CA7, CB11_CA7},
{0, CB10_CA8, CB12_CA8, CB11_CA8},
{0, CB10_CA9, CB12_CA9, CB11_CA9},
{0, CB10_CA10, CB12_CA10, CB11_CA10},
{0, CB10_CA11, CB12_CA11, CB11_CA11},
{0, CB10_CA12, CB12_CA12, CB11_CA12},
};
#endif

View File

@ -0,0 +1,112 @@
/* Copyright 2024 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "c3_pro.h"
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
switch (keycode) {
#ifdef RGB_MATRIX_ENABLE
case QK_RGB_MATRIX_TOGGLE:
if (record->event.pressed) {
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL: {
rgb_matrix_set_flags(LED_FLAG_NONE);
rgb_matrix_set_color_all(0, 0, 0);
} break;
default: {
rgb_matrix_set_flags(LED_FLAG_ALL);
} break;
}
}
if (!rgb_matrix_is_enabled()) {
rgb_matrix_set_flags(LED_FLAG_ALL);
rgb_matrix_enable();
}
return false;
#endif
#ifdef LED_MATRIX_ENABLE
case QK_LED_MATRIX_TOGGLE:
if (record->event.pressed) {
switch (led_matrix_get_flags()) {
case LED_FLAG_ALL: {
led_matrix_set_flags(LED_FLAG_NONE);
led_matrix_set_value_all(0);
} break;
default: {
led_matrix_set_flags(LED_FLAG_ALL);
} break;
}
}
if (!led_matrix_is_enabled()) {
led_matrix_set_flags(LED_FLAG_ALL);
led_matrix_enable();
}
return false;
#endif
case KC_OSSW:
if (record->event.pressed) {
default_layer_xor(1U << 0);
default_layer_xor(1U << 2);
eeconfig_update_default_layer(default_layer_state);
}
return false;
default:
return true;
}
}
#if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX)
bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
return false;
}
// RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue);
if (host_keyboard_led_state().caps_lock) {
RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 255, 255, 255);
} else {
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0);
}
}
return true;
}
#endif // RGB_MATRIX_ENABLE && CAPS_LOCK_LED_INDEX
#if defined(LED_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX)
bool led_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
if (!led_matrix_indicators_advanced_user(led_min, led_max)) {
return false;
}
if (host_keyboard_led_state().caps_lock) {
led_matrix_set_value(CAPS_LOCK_LED_INDEX, 255);
} else {
if (!led_matrix_get_flags()) {
led_matrix_set_value(CAPS_LOCK_LED_INDEX, 0);
}
}
return true;
}
#endif // LED_MATRIX_ENABLE && CAPS_LOCK_LED_INDEX

View File

@ -0,0 +1,25 @@
/* Copyright 2024 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
enum my_keycodes {
KC_OS_SWITCH = QK_KB_11,
};
#define KC_OSSW KC_OS_SWITCH

View File

@ -0,0 +1,24 @@
/* Copyright 2024 @ Keychron(https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* I2C driver Configuration */
#define I2C1_SCL_PIN B8
#define I2C1_SDA_PIN B9
#define I2C1_CLOCK_SPEED 400000
#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2

View File

@ -0,0 +1,21 @@
/* Copyright 2024 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,26 @@
{
"manufacturer": "Keychron",
"maintainer": "Joe",
"bootloader": "stm32-dfu",
"community_layouts": ["tkl_ansi"],
"diode_direction": "ROW2COL",
"eeprom": {
"wear_leveling": {
"backing_size": 4096
}
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"processor": "STM32F401",
"url": "https://github.com/Keychron",
"usb": {
"device_version": "1.0.1",
"vid": "0x3434"
}
}

View File

@ -0,0 +1,28 @@
/* Copyright 2024 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_HSECLK
#define STM32_HSECLK 16000000U
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 8
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE

View File

@ -0,0 +1,28 @@
# Keychron C3 Pro
![Keychron C3 Pro](https://i.imgur.com/b4FTJsf.jpg)
A customizable 87% keyboard.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron C3 Pro
* Hardware Availability: [Keychron](https://www.keychron.com/)
Make example for this keyboard (after setting up your build environment):
make keychron/c3_pro/ansi/red:default
make keychron/c3_pro/ansi/rgb:default
Flashing example for this keyboard:
make keychron/c3_pro/ansi/red:default:flash
make keychron/c3_pro/ansi/rgb:default:flash
## bootloader
Enter the bootloader in two ways:
* **Bootmagic reset**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
* **Physical reset button**: Briefly press the RESET button under the spacebar.
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).

View File

@ -25,11 +25,6 @@ enum layer_names {
_FN, _FN,
}; };
enum custom_keycodes {
KC_PRVWD = SAFE_RANGE,
KC_NXTWD
};
#define LOWER MO(_LOWER) #define LOWER MO(_LOWER)
#define RAISE MO(_RAISE) #define RAISE MO(_RAISE)
#define FN MO(_FN) #define FN MO(_FN)
@ -47,6 +42,9 @@ enum custom_keycodes {
#define KC_COLMK PDF(_COLEMAK) #define KC_COLMK PDF(_COLEMAK)
#define KC_HRM PDF(_HRM) #define KC_HRM PDF(_HRM)
#define KC_PRVWD LCTL(KC_LEFT)
#define KC_NXTWD LCTL(KC_RGHT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* /*
* QWERTY * QWERTY
@ -186,27 +184,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______, _______, _______, _______, _______, _______, _______ _______,_______, _______, _______, _______, _______, _______, _______
), ),
}; };
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_PRVWD:
if (record->event.pressed) {
register_mods(mod_config(MOD_LCTL));
register_code(KC_LEFT);
} else {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_LEFT);
}
break;
case KC_NXTWD:
if (record->event.pressed) {
register_mods(mod_config(MOD_LCTL));
register_code(KC_RIGHT);
} else {
unregister_mods(mod_config(MOD_LCTL));
unregister_code(KC_RIGHT);
}
break;
}
return true;
}

View File

@ -23,9 +23,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_DEL , 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_MPLY, KC_DEL , 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_MPLY,
KC_F13 , KC_GRV , KC_1 , KC_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_F13 , KC_GRV , KC_1 , KC_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_F14 , KC_TAB , KC_Q , KC_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_F14 , KC_TAB , KC_Q , KC_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_F15 , KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_PIPE, KC_ENT , KC_PGUP, KC_F15 , KC_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_F16 , 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_BSLS, KC_UP , KC_PGDN, KC_F16 , 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_F17 , KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), KC_F17 , KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT_all( [1] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[2] = LAYOUT_all( [2] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
}; };
bool encoder_update_user(uint8_t index, bool clockwise) { bool encoder_update_user(uint8_t index, bool clockwise) {

View File

@ -25,18 +25,24 @@
"caps_lock": "GP1", "caps_lock": "GP1",
"scroll_lock": "GP2" "scroll_lock": "GP2"
}, },
"layout_aliases": {
"LAYOUT_all": "LAYOUT_ansi_tsangan_split_bs_rshift"
},
"layouts": { "layouts": {
"LAYOUT_all": { "LAYOUT_ansi_tsangan": {
"layout": [ "layout": [
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0}, {"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01", "matrix": [0, 1], "x": 2, "y": 0}, {"label": "K01", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "K02", "matrix": [0, 2], "x": 3, "y": 0}, {"label": "K02", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "K03", "matrix": [0, 3], "x": 4, "y": 0}, {"label": "K03", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "K04", "matrix": [0, 4], "x": 5, "y": 0}, {"label": "K04", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "K05", "matrix": [0, 5], "x": 6.5, "y": 0}, {"label": "K05", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "K06", "matrix": [0, 6], "x": 7.5, "y": 0}, {"label": "K06", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "K07", "matrix": [0, 7], "x": 8.5, "y": 0}, {"label": "K07", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "K08", "matrix": [0, 8], "x": 9.5, "y": 0}, {"label": "K08", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "K09", "matrix": [0, 9], "x": 11, "y": 0}, {"label": "K09", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "K0A", "matrix": [0, 10], "x": 12, "y": 0}, {"label": "K0A", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "K0B", "matrix": [0, 11], "x": 13, "y": 0}, {"label": "K0B", "matrix": [0, 11], "x": 13, "y": 0},
@ -55,8 +61,8 @@
{"label": "K1A", "matrix": [1, 10], "x": 10, "y": 2}, {"label": "K1A", "matrix": [1, 10], "x": 10, "y": 2},
{"label": "K1B", "matrix": [1, 11], "x": 11, "y": 2}, {"label": "K1B", "matrix": [1, 11], "x": 11, "y": 2},
{"label": "K1C", "matrix": [1, 12], "x": 12, "y": 2}, {"label": "K1C", "matrix": [1, 12], "x": 12, "y": 2},
{"label": "K0D", "matrix": [0, 13], "x": 13, "y": 2}, {"label": "K0D", "matrix": [0, 13], "x": 13, "y": 2, "w": 2},
{"label": "K1D", "matrix": [1, 13], "x": 14, "y": 2},
{"label": "K1E", "matrix": [1, 14], "x": 15.25, "y": 2}, {"label": "K1E", "matrix": [1, 14], "x": 15.25, "y": 2},
{"label": "K1F", "matrix": [1, 15], "x": 16.25, "y": 2}, {"label": "K1F", "matrix": [1, 15], "x": 16.25, "y": 2},
{"label": "K1G", "matrix": [1, 16], "x": 17.25, "y": 2}, {"label": "K1G", "matrix": [1, 16], "x": 17.25, "y": 2},
@ -75,6 +81,106 @@
{"label": "K2B", "matrix": [2, 11], "x": 11.5, "y": 3}, {"label": "K2B", "matrix": [2, 11], "x": 11.5, "y": 3},
{"label": "K2C", "matrix": [2, 12], "x": 12.5, "y": 3}, {"label": "K2C", "matrix": [2, 12], "x": 12.5, "y": 3},
{"label": "K2D", "matrix": [2, 13], "x": 13.5, "y": 3, "w": 1.5}, {"label": "K2D", "matrix": [2, 13], "x": 13.5, "y": 3, "w": 1.5},
{"label": "K2E", "matrix": [2, 14], "x": 15.25, "y": 3},
{"label": "K2F", "matrix": [2, 15], "x": 16.25, "y": 3},
{"label": "K2G", "matrix": [2, 16], "x": 17.25, "y": 3},
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 4, "w": 1.75},
{"label": "K31", "matrix": [3, 1], "x": 1.75, "y": 4},
{"label": "K32", "matrix": [3, 2], "x": 2.75, "y": 4},
{"label": "K33", "matrix": [3, 3], "x": 3.75, "y": 4},
{"label": "K34", "matrix": [3, 4], "x": 4.75, "y": 4},
{"label": "K35", "matrix": [3, 5], "x": 5.75, "y": 4},
{"label": "K36", "matrix": [3, 6], "x": 6.75, "y": 4},
{"label": "K37", "matrix": [3, 7], "x": 7.75, "y": 4},
{"label": "K38", "matrix": [3, 8], "x": 8.75, "y": 4},
{"label": "K39", "matrix": [3, 9], "x": 9.75, "y": 4},
{"label": "K3A", "matrix": [3, 10], "x": 10.75, "y": 4},
{"label": "K3B", "matrix": [3, 11], "x": 11.75, "y": 4},
{"label": "K3D", "matrix": [3, 13], "x": 12.75, "y": 4, "w": 2.25},
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 5, "w": 2.25},
{"label": "K42", "matrix": [4, 2], "x": 2.25, "y": 5},
{"label": "K43", "matrix": [4, 3], "x": 3.25, "y": 5},
{"label": "K44", "matrix": [4, 4], "x": 4.25, "y": 5},
{"label": "K45", "matrix": [4, 5], "x": 5.25, "y": 5},
{"label": "K46", "matrix": [4, 6], "x": 6.25, "y": 5},
{"label": "K47", "matrix": [4, 7], "x": 7.25, "y": 5},
{"label": "K48", "matrix": [4, 8], "x": 8.25, "y": 5},
{"label": "K49", "matrix": [4, 9], "x": 9.25, "y": 5},
{"label": "K4A", "matrix": [4, 10], "x": 10.25, "y": 5},
{"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 5},
{"label": "K4C", "matrix": [4, 12], "x": 12.25, "y": 5, "w": 2.75},
{"label": "K4F", "matrix": [4, 15], "x": 16.25, "y": 5},
{"label": "K50", "matrix": [5, 0], "x": 0, "y": 6, "w": 1.5},
{"label": "K51", "matrix": [5, 1], "x": 1.5, "y": 6},
{"label": "K52", "matrix": [5, 2], "x": 2.5, "y": 6, "w": 1.5},
{"label": "K57", "matrix": [5, 7], "x": 4, "y": 6, "w": 7},
{"label": "K5B", "matrix": [5, 11], "x": 11, "y": 6, "w": 1.5},
{"label": "K5C", "matrix": [5, 12], "x": 12.5, "y": 6},
{"label": "K5D", "matrix": [5, 13], "x": 13.5, "y": 6, "w": 1.5},
{"label": "K5E", "matrix": [5, 14], "x": 15.25, "y": 6},
{"label": "K5F", "matrix": [5, 15], "x": 16.25, "y": 6},
{"label": "K5G", "matrix": [5, 16], "x": 17.25, "y": 6}
]
},
"LAYOUT_ansi_tsangan_split_rshift": {
"layout": [
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "K02", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "K03", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "K04", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "K05", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "K06", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "K07", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "K08", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "K09", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "K0A", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "K0B", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "K0C", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "K10", "matrix": [1, 0], "x": 0, "y": 2},
{"label": "K11", "matrix": [1, 1], "x": 1, "y": 2},
{"label": "K12", "matrix": [1, 2], "x": 2, "y": 2},
{"label": "K13", "matrix": [1, 3], "x": 3, "y": 2},
{"label": "K14", "matrix": [1, 4], "x": 4, "y": 2},
{"label": "K15", "matrix": [1, 5], "x": 5, "y": 2},
{"label": "K16", "matrix": [1, 6], "x": 6, "y": 2},
{"label": "K17", "matrix": [1, 7], "x": 7, "y": 2},
{"label": "K18", "matrix": [1, 8], "x": 8, "y": 2},
{"label": "K19", "matrix": [1, 9], "x": 9, "y": 2},
{"label": "K1A", "matrix": [1, 10], "x": 10, "y": 2},
{"label": "K1B", "matrix": [1, 11], "x": 11, "y": 2},
{"label": "K1C", "matrix": [1, 12], "x": 12, "y": 2},
{"label": "K0D", "matrix": [0, 13], "x": 13, "y": 2, "w": 2},
{"label": "K1E", "matrix": [1, 14], "x": 15.25, "y": 2},
{"label": "K1F", "matrix": [1, 15], "x": 16.25, "y": 2},
{"label": "K1G", "matrix": [1, 16], "x": 17.25, "y": 2},
{"label": "K20", "matrix": [2, 0], "x": 0, "y": 3, "w": 1.5},
{"label": "K21", "matrix": [2, 1], "x": 1.5, "y": 3},
{"label": "K22", "matrix": [2, 2], "x": 2.5, "y": 3},
{"label": "K23", "matrix": [2, 3], "x": 3.5, "y": 3},
{"label": "K24", "matrix": [2, 4], "x": 4.5, "y": 3},
{"label": "K25", "matrix": [2, 5], "x": 5.5, "y": 3},
{"label": "K26", "matrix": [2, 6], "x": 6.5, "y": 3},
{"label": "K27", "matrix": [2, 7], "x": 7.5, "y": 3},
{"label": "K28", "matrix": [2, 8], "x": 8.5, "y": 3},
{"label": "K29", "matrix": [2, 9], "x": 9.5, "y": 3},
{"label": "K2A", "matrix": [2, 10], "x": 10.5, "y": 3},
{"label": "K2B", "matrix": [2, 11], "x": 11.5, "y": 3},
{"label": "K2C", "matrix": [2, 12], "x": 12.5, "y": 3},
{"label": "K2D", "matrix": [2, 13], "x": 13.5, "y": 3, "w": 1.5},
{"label": "K2E", "matrix": [2, 14], "x": 15.25, "y": 3}, {"label": "K2E", "matrix": [2, 14], "x": 15.25, "y": 3},
{"label": "K2F", "matrix": [2, 15], "x": 16.25, "y": 3}, {"label": "K2F", "matrix": [2, 15], "x": 16.25, "y": 3},
{"label": "K2G", "matrix": [2, 16], "x": 17.25, "y": 3}, {"label": "K2G", "matrix": [2, 16], "x": 17.25, "y": 3},
@ -106,6 +212,7 @@
{"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 5}, {"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 5},
{"label": "K4C", "matrix": [4, 12], "x": 12.25, "y": 5, "w": 1.75}, {"label": "K4C", "matrix": [4, 12], "x": 12.25, "y": 5, "w": 1.75},
{"label": "K4D", "matrix": [4, 13], "x": 14, "y": 5}, {"label": "K4D", "matrix": [4, 13], "x": 14, "y": 5},
{"label": "K4F", "matrix": [4, 15], "x": 16.25, "y": 5}, {"label": "K4F", "matrix": [4, 15], "x": 16.25, "y": 5},
{"label": "K50", "matrix": [5, 0], "x": 0, "y": 6, "w": 1.5}, {"label": "K50", "matrix": [5, 0], "x": 0, "y": 6, "w": 1.5},
@ -115,6 +222,208 @@
{"label": "K5B", "matrix": [5, 11], "x": 11, "y": 6, "w": 1.5}, {"label": "K5B", "matrix": [5, 11], "x": 11, "y": 6, "w": 1.5},
{"label": "K5C", "matrix": [5, 12], "x": 12.5, "y": 6}, {"label": "K5C", "matrix": [5, 12], "x": 12.5, "y": 6},
{"label": "K5D", "matrix": [5, 13], "x": 13.5, "y": 6, "w": 1.5}, {"label": "K5D", "matrix": [5, 13], "x": 13.5, "y": 6, "w": 1.5},
{"label": "K5E", "matrix": [5, 14], "x": 15.25, "y": 6},
{"label": "K5F", "matrix": [5, 15], "x": 16.25, "y": 6},
{"label": "K5G", "matrix": [5, 16], "x": 17.25, "y": 6}
]
},
"LAYOUT_ansi_tsangan_split_bs": {
"layout": [
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "K02", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "K03", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "K04", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "K05", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "K06", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "K07", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "K08", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "K09", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "K0A", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "K0B", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "K0C", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "K10", "matrix": [1, 0], "x": 0, "y": 2},
{"label": "K11", "matrix": [1, 1], "x": 1, "y": 2},
{"label": "K12", "matrix": [1, 2], "x": 2, "y": 2},
{"label": "K13", "matrix": [1, 3], "x": 3, "y": 2},
{"label": "K14", "matrix": [1, 4], "x": 4, "y": 2},
{"label": "K15", "matrix": [1, 5], "x": 5, "y": 2},
{"label": "K16", "matrix": [1, 6], "x": 6, "y": 2},
{"label": "K17", "matrix": [1, 7], "x": 7, "y": 2},
{"label": "K18", "matrix": [1, 8], "x": 8, "y": 2},
{"label": "K19", "matrix": [1, 9], "x": 9, "y": 2},
{"label": "K1A", "matrix": [1, 10], "x": 10, "y": 2},
{"label": "K1B", "matrix": [1, 11], "x": 11, "y": 2},
{"label": "K1C", "matrix": [1, 12], "x": 12, "y": 2},
{"label": "K0D", "matrix": [0, 13], "x": 13, "y": 2},
{"label": "K1D", "matrix": [1, 13], "x": 14, "y": 2},
{"label": "K1E", "matrix": [1, 14], "x": 15.25, "y": 2},
{"label": "K1F", "matrix": [1, 15], "x": 16.25, "y": 2},
{"label": "K1G", "matrix": [1, 16], "x": 17.25, "y": 2},
{"label": "K20", "matrix": [2, 0], "x": 0, "y": 3, "w": 1.5},
{"label": "K21", "matrix": [2, 1], "x": 1.5, "y": 3},
{"label": "K22", "matrix": [2, 2], "x": 2.5, "y": 3},
{"label": "K23", "matrix": [2, 3], "x": 3.5, "y": 3},
{"label": "K24", "matrix": [2, 4], "x": 4.5, "y": 3},
{"label": "K25", "matrix": [2, 5], "x": 5.5, "y": 3},
{"label": "K26", "matrix": [2, 6], "x": 6.5, "y": 3},
{"label": "K27", "matrix": [2, 7], "x": 7.5, "y": 3},
{"label": "K28", "matrix": [2, 8], "x": 8.5, "y": 3},
{"label": "K29", "matrix": [2, 9], "x": 9.5, "y": 3},
{"label": "K2A", "matrix": [2, 10], "x": 10.5, "y": 3},
{"label": "K2B", "matrix": [2, 11], "x": 11.5, "y": 3},
{"label": "K2C", "matrix": [2, 12], "x": 12.5, "y": 3},
{"label": "K2D", "matrix": [2, 13], "x": 13.5, "y": 3, "w": 1.5},
{"label": "K2E", "matrix": [2, 14], "x": 15.25, "y": 3},
{"label": "K2F", "matrix": [2, 15], "x": 16.25, "y": 3},
{"label": "K2G", "matrix": [2, 16], "x": 17.25, "y": 3},
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 4, "w": 1.75},
{"label": "K31", "matrix": [3, 1], "x": 1.75, "y": 4},
{"label": "K32", "matrix": [3, 2], "x": 2.75, "y": 4},
{"label": "K33", "matrix": [3, 3], "x": 3.75, "y": 4},
{"label": "K34", "matrix": [3, 4], "x": 4.75, "y": 4},
{"label": "K35", "matrix": [3, 5], "x": 5.75, "y": 4},
{"label": "K36", "matrix": [3, 6], "x": 6.75, "y": 4},
{"label": "K37", "matrix": [3, 7], "x": 7.75, "y": 4},
{"label": "K38", "matrix": [3, 8], "x": 8.75, "y": 4},
{"label": "K39", "matrix": [3, 9], "x": 9.75, "y": 4},
{"label": "K3A", "matrix": [3, 10], "x": 10.75, "y": 4},
{"label": "K3B", "matrix": [3, 11], "x": 11.75, "y": 4},
{"label": "K3D", "matrix": [3, 13], "x": 12.75, "y": 4, "w": 2.25},
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 5, "w": 2.25},
{"label": "K42", "matrix": [4, 2], "x": 2.25, "y": 5},
{"label": "K43", "matrix": [4, 3], "x": 3.25, "y": 5},
{"label": "K44", "matrix": [4, 4], "x": 4.25, "y": 5},
{"label": "K45", "matrix": [4, 5], "x": 5.25, "y": 5},
{"label": "K46", "matrix": [4, 6], "x": 6.25, "y": 5},
{"label": "K47", "matrix": [4, 7], "x": 7.25, "y": 5},
{"label": "K48", "matrix": [4, 8], "x": 8.25, "y": 5},
{"label": "K49", "matrix": [4, 9], "x": 9.25, "y": 5},
{"label": "K4A", "matrix": [4, 10], "x": 10.25, "y": 5},
{"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 5},
{"label": "K4C", "matrix": [4, 12], "x": 12.25, "y": 5, "w": 2.75},
{"label": "K4F", "matrix": [4, 15], "x": 16.25, "y": 5},
{"label": "K50", "matrix": [5, 0], "x": 0, "y": 6, "w": 1.5},
{"label": "K51", "matrix": [5, 1], "x": 1.5, "y": 6},
{"label": "K52", "matrix": [5, 2], "x": 2.5, "y": 6, "w": 1.5},
{"label": "K57", "matrix": [5, 7], "x": 4, "y": 6, "w": 7},
{"label": "K5B", "matrix": [5, 11], "x": 11, "y": 6, "w": 1.5},
{"label": "K5C", "matrix": [5, 12], "x": 12.5, "y": 6},
{"label": "K5D", "matrix": [5, 13], "x": 13.5, "y": 6, "w": 1.5},
{"label": "K5E", "matrix": [5, 14], "x": 15.25, "y": 6},
{"label": "K5F", "matrix": [5, 15], "x": 16.25, "y": 6},
{"label": "K5G", "matrix": [5, 16], "x": 17.25, "y": 6}
]
},
"LAYOUT_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "K02", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "K03", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "K04", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "K05", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "K06", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "K07", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "K08", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "K09", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "K0A", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "K0B", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "K0C", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "K10", "matrix": [1, 0], "x": 0, "y": 2},
{"label": "K11", "matrix": [1, 1], "x": 1, "y": 2},
{"label": "K12", "matrix": [1, 2], "x": 2, "y": 2},
{"label": "K13", "matrix": [1, 3], "x": 3, "y": 2},
{"label": "K14", "matrix": [1, 4], "x": 4, "y": 2},
{"label": "K15", "matrix": [1, 5], "x": 5, "y": 2},
{"label": "K16", "matrix": [1, 6], "x": 6, "y": 2},
{"label": "K17", "matrix": [1, 7], "x": 7, "y": 2},
{"label": "K18", "matrix": [1, 8], "x": 8, "y": 2},
{"label": "K19", "matrix": [1, 9], "x": 9, "y": 2},
{"label": "K1A", "matrix": [1, 10], "x": 10, "y": 2},
{"label": "K1B", "matrix": [1, 11], "x": 11, "y": 2},
{"label": "K1C", "matrix": [1, 12], "x": 12, "y": 2},
{"label": "K0D", "matrix": [0, 13], "x": 13, "y": 2},
{"label": "K1D", "matrix": [1, 13], "x": 14, "y": 2},
{"label": "K1E", "matrix": [1, 14], "x": 15.25, "y": 2},
{"label": "K1F", "matrix": [1, 15], "x": 16.25, "y": 2},
{"label": "K1G", "matrix": [1, 16], "x": 17.25, "y": 2},
{"label": "K20", "matrix": [2, 0], "x": 0, "y": 3, "w": 1.5},
{"label": "K21", "matrix": [2, 1], "x": 1.5, "y": 3},
{"label": "K22", "matrix": [2, 2], "x": 2.5, "y": 3},
{"label": "K23", "matrix": [2, 3], "x": 3.5, "y": 3},
{"label": "K24", "matrix": [2, 4], "x": 4.5, "y": 3},
{"label": "K25", "matrix": [2, 5], "x": 5.5, "y": 3},
{"label": "K26", "matrix": [2, 6], "x": 6.5, "y": 3},
{"label": "K27", "matrix": [2, 7], "x": 7.5, "y": 3},
{"label": "K28", "matrix": [2, 8], "x": 8.5, "y": 3},
{"label": "K29", "matrix": [2, 9], "x": 9.5, "y": 3},
{"label": "K2A", "matrix": [2, 10], "x": 10.5, "y": 3},
{"label": "K2B", "matrix": [2, 11], "x": 11.5, "y": 3},
{"label": "K2C", "matrix": [2, 12], "x": 12.5, "y": 3},
{"label": "K2D", "matrix": [2, 13], "x": 13.5, "y": 3, "w": 1.5},
{"label": "K2E", "matrix": [2, 14], "x": 15.25, "y": 3},
{"label": "K2F", "matrix": [2, 15], "x": 16.25, "y": 3},
{"label": "K2G", "matrix": [2, 16], "x": 17.25, "y": 3},
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 4, "w": 1.75},
{"label": "K31", "matrix": [3, 1], "x": 1.75, "y": 4},
{"label": "K32", "matrix": [3, 2], "x": 2.75, "y": 4},
{"label": "K33", "matrix": [3, 3], "x": 3.75, "y": 4},
{"label": "K34", "matrix": [3, 4], "x": 4.75, "y": 4},
{"label": "K35", "matrix": [3, 5], "x": 5.75, "y": 4},
{"label": "K36", "matrix": [3, 6], "x": 6.75, "y": 4},
{"label": "K37", "matrix": [3, 7], "x": 7.75, "y": 4},
{"label": "K38", "matrix": [3, 8], "x": 8.75, "y": 4},
{"label": "K39", "matrix": [3, 9], "x": 9.75, "y": 4},
{"label": "K3A", "matrix": [3, 10], "x": 10.75, "y": 4},
{"label": "K3B", "matrix": [3, 11], "x": 11.75, "y": 4},
{"label": "K3D", "matrix": [3, 13], "x": 12.75, "y": 4, "w": 2.25},
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 5, "w": 2.25},
{"label": "K42", "matrix": [4, 2], "x": 2.25, "y": 5},
{"label": "K43", "matrix": [4, 3], "x": 3.25, "y": 5},
{"label": "K44", "matrix": [4, 4], "x": 4.25, "y": 5},
{"label": "K45", "matrix": [4, 5], "x": 5.25, "y": 5},
{"label": "K46", "matrix": [4, 6], "x": 6.25, "y": 5},
{"label": "K47", "matrix": [4, 7], "x": 7.25, "y": 5},
{"label": "K48", "matrix": [4, 8], "x": 8.25, "y": 5},
{"label": "K49", "matrix": [4, 9], "x": 9.25, "y": 5},
{"label": "K4A", "matrix": [4, 10], "x": 10.25, "y": 5},
{"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 5},
{"label": "K4C", "matrix": [4, 12], "x": 12.25, "y": 5, "w": 1.75},
{"label": "K4D", "matrix": [4, 13], "x": 14, "y": 5},
{"label": "K4F", "matrix": [4, 15], "x": 16.25, "y": 5},
{"label": "K50", "matrix": [5, 0], "x": 0, "y": 6, "w": 1.5},
{"label": "K51", "matrix": [5, 1], "x": 1.5, "y": 6},
{"label": "K52", "matrix": [5, 2], "x": 2.5, "y": 6, "w": 1.5},
{"label": "K57", "matrix": [5, 7], "x": 4, "y": 6, "w": 7},
{"label": "K5B", "matrix": [5, 11], "x": 11, "y": 6, "w": 1.5},
{"label": "K5C", "matrix": [5, 12], "x": 12.5, "y": 6},
{"label": "K5D", "matrix": [5, 13], "x": 13.5, "y": 6, "w": 1.5},
{"label": "K5E", "matrix": [5, 14], "x": 15.25, "y": 6}, {"label": "K5E", "matrix": [5, 14], "x": 15.25, "y": 6},
{"label": "K5F", "matrix": [5, 15], "x": 16.25, "y": 6}, {"label": "K5F", "matrix": [5, 15], "x": 16.25, "y": 6},
{"label": "K5G", "matrix": [5, 16], "x": 17.25, "y": 6} {"label": "K5G", "matrix": [5, 16], "x": 17.25, "y": 6}

View File

@ -0,0 +1,25 @@
# Matrix Diagram for Salane NCR80 ALPS SKFL
```
┌───────┐
2u Backspace │0D │
└───────┘
┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐
│00 │ │01 │02 │03 │04 │ │05 │06 │07 │08 │ │09 │0A │0B │0C │
└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │0D │1D │ │1E │1F │1G │
├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │ │2E │2F │2G │
├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │
├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
│40 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │ │4F │
├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
│50 │51 │52 │57 │5B │5C │5D │ │5E │5F │5G │
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘
┌──────────┐
2.75u RShift│4C │
└──────────┘
```

View File

@ -0,0 +1,315 @@
{
"keyboard_name": "shu89",
"manufacturer": "shuguet",
"url": "https://github.com/shuguet/split89",
"maintainer": "shuguet",
"usb": {
"vid": "0x5348",
"pid": "0x0001",
"device_version": "0.0.1"
},
"features": {
"rgb_matrix": true,
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["GP19", "GP20", "GP18", "GP17", "GP15", "GP14", "GP13", "GP12", "GP11", "GP10"],
"rows": ["GP1", "GP2", "GP3", "GP4", "GP5", "GP6"]
},
"ws2812": {
"driver": "vendor",
"pin": "GP7"
},
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
"serial": {
"driver": "vendor",
"pin": "GP9"
},
"handedness": {
"pin": "GP0"
},
"matrix_pins": {
"right": {
"cols": ["GP19", "GP20", "GP18", "GP17", "GP15", "GP14", "GP13", "GP12", "GP11", "GP10"],
"rows": ["GP6", "GP5", "GP4", "GP3", "GP2", "GP1"]
}
}
},
"processor": "RP2040",
"bootloader": "rp2040",
"layouts": {
"LAYOUT": {
"layout": [
{"label": "Esc", "matrix": [0, 4], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 5], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 6], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 7], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 8], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 9], "x": 6, "y": 0},
{"label": "F6", "matrix": [6, 0], "x": 10, "y": 0},
{"label": "F7", "matrix": [6, 1], "x": 11, "y": 0},
{"label": "F8", "matrix": [6, 2], "x": 12, "y": 0},
{"label": "F9", "matrix": [6, 3], "x": 13.5, "y": 0},
{"label": "F10", "matrix": [6, 4], "x": 14.5, "y": 0},
{"label": "F11", "matrix": [6, 5], "x": 15.5, "y": 0},
{"label": "F12", "matrix": [6, 6], "x": 16.5, "y": 0},
{"label": "PrtSc", "matrix": [6, 7], "x": 17.75, "y": 0},
{"label": "Scroll Lock", "matrix": [6, 8], "x": 18.75, "y": 0},
{"label": "Pause", "matrix": [6, 9], "x": 19.75, "y": 0},
{"label": "~", "matrix": [2, 4], "x": 0, "y": 1.5},
{"label": "1!", "matrix": [1, 4], "x": 1, "y": 1.5},
{"label": "2@", "matrix": [1, 5], "x": 2, "y": 1.5},
{"label": "3#", "matrix": [1, 6], "x": 3, "y": 1.5},
{"label": "4$", "matrix": [1, 7], "x": 4, "y": 1.5},
{"label": "5%", "matrix": [1, 8], "x": 5, "y": 1.5},
{"label": "6^", "matrix": [1, 9], "x": 6, "y": 1.5},
{"label": "7&", "matrix": [7, 0], "x": 9.5, "y": 1.5},
{"label": "8*", "matrix": [7, 1], "x": 10.5, "y": 1.5},
{"label": "9(", "matrix": [7, 2], "x": 11.5, "y": 1.5},
{"label": "0)", "matrix": [7, 3], "x": 12.5, "y": 1.5},
{"label": "-_", "matrix": [7, 4], "x": 13.5, "y": 1.5},
{"label": "=+", "matrix": [7, 5], "x": 14.5, "y": 1.5},
{"label": "Backspace", "matrix": [7, 6], "x": 15.5, "y": 1.5, "w": 2},
{"label": "Insert", "matrix": [7, 7], "x": 17.75, "y": 1.5},
{"label": "Home", "matrix": [7, 8], "x": 18.75, "y": 1.5},
{"label": "PgUp", "matrix": [7, 9], "x": 19.75, "y": 1.5},
{"label": "Tab", "matrix": [3, 4], "x": 0, "y": 2.5, "w": 1.5},
{"label": "Q", "matrix": [2, 5], "x": 1.5, "y": 2.5},
{"label": "W", "matrix": [2, 6], "x": 2.5, "y": 2.5},
{"label": "E", "matrix": [2, 7], "x": 3.5, "y": 2.5},
{"label": "R", "matrix": [2, 8], "x": 4.5, "y": 2.5},
{"label": "T", "matrix": [2, 9], "x": 5.5, "y": 2.5},
{"label": "Y", "matrix": [9, 0], "x": 9, "y": 2.5},
{"label": "U", "matrix": [8, 0], "x": 10, "y": 2.5},
{"label": "I", "matrix": [8, 1], "x": 11, "y": 2.5},
{"label": "O", "matrix": [8, 2], "x": 12, "y": 2.5},
{"label": "P", "matrix": [8, 3], "x": 13, "y": 2.5},
{"label": "{", "matrix": [8, 4], "x": 14, "y": 2.5},
{"label": "}", "matrix": [8, 5], "x": 15, "y": 2.5},
{"label": "|", "matrix": [8, 6], "x": 16, "y": 2.5, "w": 1.5},
{"label": "Delete", "matrix": [8, 7], "x": 17.75, "y": 2.5},
{"label": "End", "matrix": [8, 8], "x": 18.75, "y": 2.5},
{"label": "PgDn", "matrix": [8, 9], "x": 19.75, "y": 2.5},
{"label": "Caps Lock", "matrix": [4, 4], "x": 0, "y": 3.5, "w": 1.75},
{"label": "A", "matrix": [3, 5], "x": 1.75, "y": 3.5},
{"label": "S", "matrix": [3, 6], "x": 2.75, "y": 3.5},
{"label": "D", "matrix": [3, 7], "x": 3.75, "y": 3.5},
{"label": "F", "matrix": [3, 8], "x": 4.75, "y": 3.5},
{"label": "G", "matrix": [3, 9], "x": 5.75, "y": 3.5},
{"label": "H", "matrix": [10, 0], "x": 9.25, "y": 3.5},
{"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3.5},
{"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3.5},
{"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3.5},
{"label": ":", "matrix": [9, 4], "x": 13.25, "y": 3.5},
{"label": "\"", "matrix": [9, 5], "x": 14.25, "y": 3.5},
{"label": "Enter", "matrix": [9, 6], "x": 15.25, "y": 3.5, "w": 2.25},
{"label": "Left Shift", "matrix": [5, 4], "x": 0, "y": 4.5, "w": 2.25},
{"label": "Z", "matrix": [4, 5], "x": 2.25, "y": 4.5},
{"label": "X", "matrix": [4, 6], "x": 3.25, "y": 4.5},
{"label": "C", "matrix": [4, 7], "x": 4.25, "y": 4.5},
{"label": "V", "matrix": [4, 8], "x": 5.25, "y": 4.5},
{"label": "B", "matrix": [4, 9], "x": 6.25, "y": 4.5},
{"label": "N", "matrix": [11, 0], "x": 9.75, "y": 4.5},
{"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4.5},
{"label": "<", "matrix": [10, 2], "x": 11.75, "y": 4.5},
{"label": ">", "matrix": [10, 3], "x": 12.75, "y": 4.5},
{"label": "?", "matrix": [10, 4], "x": 13.75, "y": 4.5},
{"label": "Right Shift", "matrix": [10, 6], "x": 14.75, "y": 4.5, "w": 2.75},
{"label": "Up", "matrix": [10, 8], "x": 18.75, "y": 4.5},
{"label": "Left Ctrl", "matrix": [5, 5], "x": 0, "y": 5.5, "w": 1.25},
{"label": "Fn", "matrix": [5, 6], "x": 1.25, "y": 5.5, "w": 1.25},
{"label": "Left Alt", "matrix": [5, 7], "x": 2.5, "y": 5.5, "w": 1.25},
{"label": "Left Win", "matrix": [5, 8], "x": 3.75, "y": 5.5, "w": 1.25},
{"label": "Left Space", "matrix": [5, 9], "x": 5, "y": 5.5, "w": 2.25},
{"label": "Right Space", "matrix": [11, 1], "x": 9.75, "y": 5.5, "w": 2.75},
{"label": "Right Alt", "matrix": [11, 3], "x": 12.5, "y": 5.5, "w": 1.25},
{"label": "Right Win", "matrix": [11, 4], "x": 13.75, "y": 5.5, "w": 1.25},
{"label": "Menu", "matrix": [11, 5], "x": 15, "y": 5.5, "w": 1.25},
{"label": "Right Ctrl", "matrix": [11, 6], "x": 16.25, "y": 5.5, "w": 1.25},
{"label": "Left", "matrix": [11, 7], "x": 17.75, "y": 5.5},
{"label": "Down", "matrix": [11, 8], "x": 18.75, "y": 5.5},
{"label": "Right", "matrix": [11, 9], "x": 19.75, "y": 5.5}
]
}
},
"rgb_matrix": {
"driver": "ws2812",
"split_count": [ 36, 53 ],
"default": {
"hue": 85,
"val": 128
},
"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,
"flower_blooming": 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,
"starlight": true,
"starlight_dual_hue": true,
"starlight_dual_sat": true,
"riverflow": true
},
"layout": [
{"matrix": [0, 4], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 32, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 48, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 64, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 80, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 104, "y": 0, "flags": 4},
{"matrix": [1, 4], "x": 16, "y": 13, "flags": 4},
{"matrix": [1, 5], "x": 32, "y": 13, "flags": 4},
{"matrix": [1, 6], "x": 48, "y": 13, "flags": 4},
{"matrix": [1, 7], "x": 64, "y": 13, "flags": 4},
{"matrix": [1, 8], "x": 80, "y": 13, "flags": 4},
{"matrix": [1, 9], "x": 96, "y": 13, "flags": 4},
{"matrix": [2, 4], "x": 0, "y": 13, "flags": 4},
{"matrix": [2, 5], "x": 20, "y": 26, "flags": 4},
{"matrix": [2, 6], "x": 36, "y": 26, "flags": 4},
{"matrix": [2, 7], "x": 52, "y": 26, "flags": 4},
{"matrix": [2, 8], "x": 68, "y": 26, "flags": 4},
{"matrix": [2, 9], "x": 84, "y": 26, "flags": 4},
{"matrix": [3, 4], "x": 0, "y": 26, "flags": 4},
{"matrix": [3, 5], "x": 24, "y": 39, "flags": 4},
{"matrix": [3, 6], "x": 40, "y": 39, "flags": 4},
{"matrix": [3, 7], "x": 56, "y": 39, "flags": 4},
{"matrix": [3, 8], "x": 72, "y": 39, "flags": 4},
{"matrix": [3, 9], "x": 88, "y": 39, "flags": 4},
{"matrix": [4, 4], "x": 0, "y": 39, "flags": 5},
{"matrix": [4, 5], "x": 28, "y": 51, "flags": 4},
{"matrix": [4, 6], "x": 44, "y": 51, "flags": 4},
{"matrix": [4, 7], "x": 60, "y": 51, "flags": 4},
{"matrix": [4, 8], "x": 76, "y": 51, "flags": 4},
{"matrix": [4, 9], "x": 92, "y": 51, "flags": 4},
{"matrix": [5, 4], "x": 0, "y": 51, "flags": 5},
{"matrix": [5, 5], "x": 0, "y": 64, "flags": 5},
{"matrix": [5, 6], "x": 20, "y": 64, "flags": 5},
{"matrix": [5, 7], "x": 40, "y": 64, "flags": 5},
{"matrix": [5, 8], "x": 60, "y": 64, "flags": 5},
{"matrix": [5, 9], "x": 92, "y": 64, "flags": 4},
{"matrix": [6, 0], "x": 120, "y": 0, "flags": 4},
{"matrix": [6, 1], "x": 136, "y": 0, "flags": 4},
{"matrix": [6, 2], "x": 152, "y": 0, "flags": 4},
{"matrix": [6, 3], "x": 168, "y": 0, "flags": 4},
{"matrix": [6, 4], "x": 184, "y": 0, "flags": 4},
{"matrix": [6, 5], "x": 200, "y": 0, "flags": 4},
{"matrix": [6, 6], "x": 208, "y": 0, "flags": 4},
{"matrix": [6, 7], "x": 216, "y": 0, "flags": 4},
{"matrix": [6, 8], "x": 220, "y": 0, "flags": 4},
{"matrix": [6, 9], "x": 224, "y": 0, "flags": 4},
{"matrix": [7, 0], "x": 112, "y": 13, "flags": 4},
{"matrix": [7, 1], "x": 128, "y": 13, "flags": 4},
{"matrix": [7, 2], "x": 144, "y": 13, "flags": 4},
{"matrix": [7, 3], "x": 160, "y": 13, "flags": 4},
{"matrix": [7, 4], "x": 176, "y": 13, "flags": 4},
{"matrix": [7, 5], "x": 192, "y": 13, "flags": 4},
{"matrix": [7, 6], "x": 208, "y": 13, "flags": 4},
{"matrix": [7, 7], "x": 216, "y": 13, "flags": 4},
{"matrix": [7, 8], "x": 220, "y": 13, "flags": 4},
{"matrix": [7, 9], "x": 224, "y": 13, "flags": 4},
{"matrix": [8, 0], "x": 116, "y": 26, "flags": 4},
{"matrix": [8, 1], "x": 132, "y": 26, "flags": 4},
{"matrix": [8, 2], "x": 148, "y": 26, "flags": 4},
{"matrix": [8, 3], "x": 164, "y": 26, "flags": 4},
{"matrix": [8, 4], "x": 180, "y": 26, "flags": 4},
{"matrix": [8, 5], "x": 196, "y": 26, "flags": 4},
{"matrix": [8, 6], "x": 208, "y": 26, "flags": 4},
{"matrix": [8, 7], "x": 216, "y": 26, "flags": 4},
{"matrix": [8, 8], "x": 220, "y": 26, "flags": 4},
{"matrix": [8, 9], "x": 224, "y": 26, "flags": 4},
{"matrix": [9, 0], "x": 100, "y": 26, "flags": 4},
{"matrix": [9, 1], "x": 120, "y": 39, "flags": 4},
{"matrix": [9, 2], "x": 136, "y": 39, "flags": 4},
{"matrix": [9, 3], "x": 152, "y": 39, "flags": 4},
{"matrix": [9, 4], "x": 168, "y": 39, "flags": 4},
{"matrix": [9, 5], "x": 184, "y": 39, "flags": 4},
{"matrix": [9, 6], "x": 200, "y": 39, "flags": 4},
{"matrix": [10, 0], "x": 104, "y": 39, "flags": 4},
{"matrix": [10, 1], "x": 124, "y": 51, "flags": 4},
{"matrix": [10, 2], "x": 140, "y": 51, "flags": 4},
{"matrix": [10, 3], "x": 156, "y": 51, "flags": 4},
{"matrix": [10, 4], "x": 172, "y": 51, "flags": 4},
{"matrix": [10, 6], "x": 188, "y": 51, "flags": 5},
{"matrix": [10, 8], "x": 216, "y": 51, "flags": 4},
{"matrix": [11, 0], "x": 108, "y": 51, "flags": 4},
{"matrix": [11, 1], "x": 118, "y": 64, "flags": 4},
{"matrix": [11, 3], "x": 144, "y": 64, "flags": 5},
{"matrix": [11, 4], "x": 164, "y": 64, "flags": 5},
{"matrix": [11, 5], "x": 184, "y": 64, "flags": 5},
{"matrix": [11, 6], "x": 204, "y": 64, "flags": 5},
{"matrix": [11, 7], "x": 216, "y": 64, "flags": 4},
{"matrix": [11, 8], "x": 220, "y": 64, "flags": 4},
{"matrix": [11, 9], "x": 224, "y": 64, "flags": 4}
]
}
}

View File

@ -0,0 +1,23 @@
{
"keyboard": "shuguet/shu89",
"keymap": "default",
"layout": "LAYOUT",
"layers": [
[
"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", "MO(1)" , "KC_LALT", "KC_LGUI", "KC_SPACE" , "KC_SPACE" , "KC_RALT", "KC_RGUI", "KC_APP" , "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT"
],
[
"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", "RGB_VAI", "RGB_VAD", "KC_TRNS", "KC_TRNS" , "KC_TRNS", "KC_TRNS", "KC_TRNS" , "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "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", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS" , "KC_TRNS", "KC_TRNS" , "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS" , "KC_TRNS", "KC_TRNS" , "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_VOLU",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MPLY", "KC_MPLY", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MPRV", "KC_VOLD", "KC_MNXT"
]
]
}

View File

@ -0,0 +1,20 @@
# SHU98
An 89-key split TKL with PCBs, 3D printed cases, powered by a pair of RP2040.
* Keyboard Maintainer: [shuguet](https://github.com/shuguet)
* Based on handwiewd original Keyboard from [jurassic73](https://github.com/jurassic73/split89)
* Hardware Supported: RP2040
Make example for this keyboard (after setting up your build environment):
make shuguet/shu89:default
Flashing example for this keyboard:
make shuguet/shu89: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).

View File

@ -0,0 +1,6 @@
// Copyright 2024 takashicompany (@takashicompany)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define EE_HANDS

View File

@ -0,0 +1,23 @@
/*
Copyright 2025 Tyson.Keebs
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define WS2812_SPI_DRIVER SPID2
#define WS2812_SPI_MOSI_PAL_MODE 0
#define WS2812_SPI_SCK_PAL_MODE 0
#define WS2812_SPI_SCK_PIN B13

View File

@ -0,0 +1,21 @@
/* Copyright 2025 Tyson.Keebs
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_SPI TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,992 @@
{
"manufacturer": "Tyson.Keebs",
"keyboard_name": "E8ghtyNeo",
"maintainer": "trnthsn",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["A9", "A8", "B14", "B12", "B11", "B10", "B0", "A7", "A6", "A4", "A3", "A2", "A1", "A0", "C13", "B9", "B7"],
"rows": ["B8", "A10", "B1", "A5", "C15", "C14"]
},
"rgblight": {
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"static_gradient": true,
"twinkle": true
},
"default": {
"animation": "rainbow_mood"
},
"led_count": 4,
"sleep": true
},
"ws2812": {
"pin": "B15",
"driver": "spi"
},
"indicators": {
"caps_lock": "B3"
},
"url": "",
"usb": {
"vid": "0x5453",
"pid": "0x3845",
"device_version": "0.0.1"
},
"community_layouts": [
"tkl_ansi_tsangan",
"tkl_ansi_tsangan_split_bs_rshift",
"tkl_iso_tsangan",
"tkl_iso_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_all": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "F10", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "F11", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "F12", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
{"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
{"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 1.25},
{"label": "Delete", "matrix": [1, 13], "x": 14, "y": 1.25},
{"label": "Insert", "matrix": [1, 14], "x": 15.25, "y": 1.25},
{"label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25},
{"label": "Page Up", "matrix": [1, 16], "x": 17.25, "y": 1.25},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"label": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.25},
{"label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25},
{"label": "Page Down", "matrix": [2, 16], "x": 17.25, "y": 2.25},
{"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
{"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
{"label": "Shift", "matrix": [4, 13], "x": 14, "y": 4.25},
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
{"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
{"label": "GUI", "matrix": [5, 12], "x": 12.5, "y": 5.25},
{"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
},
"LAYOUT_tkl_ansi_tsangan": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "F10", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "F11", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "F12", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
{"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
{"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"label": "Insert", "matrix": [1, 14], "x": 15.25, "y": 1.25},
{"label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25},
{"label": "Page Up", "matrix": [1, 16], "x": 17.25, "y": 1.25},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"label": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.25},
{"label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25},
{"label": "Page Down", "matrix": [2, 16], "x": 17.25, "y": 2.25},
{"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
{"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
{"label": "GUI", "matrix": [5, 12], "x": 12.5, "y": 5.25},
{"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
},
"LAYOUT_tkl_ansi_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "F10", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "F11", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "F12", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
{"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
{"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 1.25},
{"label": "Delete", "matrix": [1, 13], "x": 14, "y": 1.25},
{"label": "Insert", "matrix": [1, 14], "x": 15.25, "y": 1.25},
{"label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25},
{"label": "Page Up", "matrix": [1, 16], "x": 17.25, "y": 1.25},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"label": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.25},
{"label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25},
{"label": "Page Down", "matrix": [2, 16], "x": 17.25, "y": 2.25},
{"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
{"label": "Shift", "matrix": [4, 13], "x": 14, "y": 4.25},
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
{"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
{"label": "GUI", "matrix": [5, 12], "x": 12.5, "y": 5.25},
{"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
},
"LAYOUT_tkl_ansi_wkl": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "F10", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "F11", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "F12", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
{"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
{"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"label": "Insert", "matrix": [1, 14], "x": 15.25, "y": 1.25},
{"label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25},
{"label": "Page Up", "matrix": [1, 16], "x": 17.25, "y": 1.25},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"label": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.25},
{"label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25},
{"label": "Page Down", "matrix": [2, 16], "x": 17.25, "y": 2.25},
{"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
{"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
{"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
},
"LAYOUT_tkl_ansi_wkl_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "F10", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "F11", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "F12", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
{"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
{"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 1.25},
{"label": "Delete", "matrix": [1, 13], "x": 14, "y": 1.25},
{"label": "Insert", "matrix": [1, 14], "x": 15.25, "y": 1.25},
{"label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25},
{"label": "Page Up", "matrix": [1, 16], "x": 17.25, "y": 1.25},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "\\", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"label": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.25},
{"label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25},
{"label": "Page Down", "matrix": [2, 16], "x": 17.25, "y": 2.25},
{"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
{"label": "Shift", "matrix": [4, 13], "x": 14, "y": 4.25},
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
{"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
{"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
},
"LAYOUT_tkl_iso_tsangan": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "F10", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "F11", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "F12", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
{"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
{"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"label": "Insert", "matrix": [1, 14], "x": 15.25, "y": 1.25},
{"label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25},
{"label": "Page Up", "matrix": [1, 16], "x": 17.25, "y": 1.25},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.25},
{"label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25},
{"label": "Page Down", "matrix": [2, 16], "x": 17.25, "y": 2.25},
{"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
{"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
{"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
{"label": "Fn", "matrix": [5, 12], "x": 12.5, "y": 5.25},
{"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
},
"LAYOUT_tkl_iso_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "F10", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "F11", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "F12", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
{"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
{"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 1.25},
{"label": "Delete", "matrix": [1, 13], "x": 14, "y": 1.25},
{"label": "Insert", "matrix": [1, 14], "x": 15.25, "y": 1.25},
{"label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25},
{"label": "Page Up", "matrix": [1, 16], "x": 17.25, "y": 1.25},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.25},
{"label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25},
{"label": "Page Down", "matrix": [2, 16], "x": 17.25, "y": 2.25},
{"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
{"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
{"label": "Shift", "matrix": [4, 13], "x": 14, "y": 4.25},
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label": "GUI", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
{"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
{"label": "Fn", "matrix": [5, 12], "x": 12.5, "y": 5.25},
{"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
},
"LAYOUT_tkl_iso_wkl": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "F10", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "F11", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "F12", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
{"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
{"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"label": "Insert", "matrix": [1, 14], "x": 15.25, "y": 1.25},
{"label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25},
{"label": "Page Up", "matrix": [1, 16], "x": 17.25, "y": 1.25},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.25},
{"label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25},
{"label": "Page Down", "matrix": [2, 16], "x": 17.25, "y": 2.25},
{"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
{"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
{"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
{"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
},
"LAYOUT_tkl_iso_wkl_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label": "F10", "matrix": [0, 10], "x": 12, "y": 0},
{"label": "F11", "matrix": [0, 11], "x": 13, "y": 0},
{"label": "F12", "matrix": [0, 12], "x": 14, "y": 0},
{"label": "Print Screen", "matrix": [0, 14], "x": 15.25, "y": 0},
{"label": "Scroll Lock", "matrix": [0, 15], "x": 16.25, "y": 0},
{"label": "Pause", "matrix": [0, 16], "x": 17.25, "y": 0},
{"label": "`", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "-", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "=", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 1.25},
{"label": "Delete", "matrix": [1, 13], "x": 14, "y": 1.25},
{"label": "Insert", "matrix": [1, 14], "x": 15.25, "y": 1.25},
{"label": "Home", "matrix": [1, 15], "x": 16.25, "y": 1.25},
{"label": "Page Up", "matrix": [1, 16], "x": 17.25, "y": 1.25},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "[", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "]", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "Delete", "matrix": [2, 14], "x": 15.25, "y": 2.25},
{"label": "End", "matrix": [2, 15], "x": 16.25, "y": 2.25},
{"label": "Page Down", "matrix": [2, 16], "x": 17.25, "y": 2.25},
{"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": ";", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "'", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "#", "matrix": [3, 12], "x": 12.75, "y": 3.25},
{"label": "Enter", "matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"label": "\\", "matrix": [4, 1], "x": 1.25, "y": 4.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": ",", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": ".", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "/", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
{"label": "Shift", "matrix": [4, 13], "x": 14, "y": 4.25},
{"label": "\u2191", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label": "Space", "matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
{"label": "Alt", "matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
{"label": "Ctrl", "matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "\u2190", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label": "\u2193", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label": "\u2192", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
}
}
}

View File

@ -0,0 +1,39 @@
// Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
// │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │Prs│Srk│Ps │
// └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
// ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
// │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│ │Ins│Hm │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 │ ; │ ' │ # │Ent │
// ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ ┌───┐
// │Sft │Sft│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Fn │ │ ↑ │
// ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
// │Ctrl │Win│Alt │ │Alt │Win│Ctrl │ │ ← │ ↓ │ → │
// └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘
[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_BSLS, KC_ENT,
KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_all(
_______, _______, _______, _______, _______, UG_TOGG, _______, _______, _______, _______, UG_NEXT, UG_VALD, UG_VALU, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_VOLD,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};

View File

@ -0,0 +1,22 @@
/* Copyright 2025 Tyson.Keebs
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_SPI_USE_SPI2
#define STM32_SPI_USE_SPI2 TRUE

View File

@ -0,0 +1,27 @@
# E8ghtyNeo
![E8ghtyNeo](https://imgur.com/YXYfqzZ.png)
A TKL keyboard PCB compatible with Neo80. Supports Neo80 keyboard like an out-of-the-box PCB without any modification.
* Keyboard Maintainer: [Trnthsn](https://github.com/trnthsn)
* Hardware Supported: STM32, E8ghtyNeo, Neo80
* Hardware Availability: [ThanhSon.Mech](https://www.facebook.com/ThanhSon.mech)
Make example for this keyboard (after setting up your build environment):
make trnthsn/e8ghtyneo/stm32f072:default
Flashing example for this keyboard:
make trnthsn/e8ghtyneo/stm32f072: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

View File

@ -0,0 +1,4 @@
{
"processor": "STM32F072",
"bootloader": "stm32-dfu",
}

View File

@ -0,0 +1,4 @@
{
"processor": "STM32F103",
"bootloader": "uf2boot",
}

View File

@ -0,0 +1,32 @@
# Model-B
A 75% keyboard based on the RP2040.
* Keyboard Maintainer: [Brian Hill](https://github.com/TrojanPinata)
* Hardware Supported: [GitHub](https://github.com/TrojanPinata/Model-B)
## Revisions
At the current moment there is only one variant of the Model-B, the rev-0 (aka the prototype board). Any others are clones and may not have the exact firmware requirements.
## Building and Flashing
Make example for this keyboard (after setting up your build environment):
make trojan_pinata/model-b/rev0:default
Flashing example for this keyboard:
make trojan_pinata/model-b/rev0:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the top left key and plug in the keyboard. This will also clear the emulated EEPROM, so it is a good first step if the keyboard is misbehaving.
* **Physical reset button**: Hold down the `BOOTSEL` button on the Pi Pico, then either plug the board in or press the `RESET` button.
* **Keycode in layout**: Press the key mapped to `QK_BOOT`. In the pre-supplied keymaps it is on the second layer, replacing the Esc key.
After entering the bootloader through one of the three methods above, the keyboard will appear as a USB mass storage device named `RPI-RP2`. If the CLI is unable to find this device, the compiled `.uf2` file can be manually copied to it. The keyboard will reboot on completion with the new firmware loaded.

View File

@ -0,0 +1,14 @@
// Copyright 2022 Stefan Kerkmann
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
// settings for the oled keyboard demo with Adafruit 0.91" OLED display on the Stemma QT port
#define I2C_DRIVER I2CD0
#define I2C1_SDA_PIN GP0
#define I2C1_SCL_PIN GP1
#define OLED_TIMEOUT 3000000 // 5 minutes before oled turns off

View File

@ -0,0 +1,122 @@
{
"manufacturer": "Trojan_Pinata",
"keyboard_name": "Model-B",
"maintainer": "Trojan_Pinata",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "GP27", "pin_b": "GP26"}
]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"oled": true,
"encoder": true
},
"matrix_pins": {
"cols": ["GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP16", "GP17", "GP18", "GP19", "GP20", "GP21", "GP22"],
"rows": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7"]
},
"processor": "RP2040",
"url": "https://github.com/TrojanPinata/Model-B",
"usb": {
"device_version": "1.0.0",
"pid": "0xA500",
"vid": "0xE739"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 2], "x": 1.25, "y": 0},
{"matrix": [0, 3], "x": 2.25, "y": 0},
{"matrix": [0, 4], "x": 3.25, "y": 0},
{"matrix": [0, 5], "x": 4.25, "y": 0},
{"matrix": [0, 6], "x": 5.5, "y": 0},
{"matrix": [0, 7], "x": 6.5, "y": 0},
{"matrix": [0, 8], "x": 7.5, "y": 0},
{"matrix": [0, 9], "x": 8.5, "y": 0},
{"matrix": [0, 10], "x": 9.75, "y": 0},
{"matrix": [0, 11], "x": 10.75, "y": 0},
{"matrix": [0, 12], "x": 11.75, "y": 0},
{"matrix": [0, 13], "x": 12.75, "y": 0},
{"matrix": [0, 14], "x": 15.75, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1.5},
{"matrix": [1, 1], "x": 1, "y": 1.5},
{"matrix": [1, 2], "x": 2, "y": 1.5},
{"matrix": [1, 3], "x": 3, "y": 1.5},
{"matrix": [1, 4], "x": 4, "y": 1.5},
{"matrix": [1, 5], "x": 5, "y": 1.5},
{"matrix": [1, 6], "x": 6, "y": 1.5},
{"matrix": [1, 7], "x": 7, "y": 1.5},
{"matrix": [1, 8], "x": 8, "y": 1.5},
{"matrix": [1, 9], "x": 9, "y": 1.5},
{"matrix": [1, 10], "x": 10, "y": 1.5},
{"matrix": [1, 11], "x": 11, "y": 1.5},
{"matrix": [1, 12], "x": 12, "y": 1.5},
{"matrix": [1, 13], "x": 13, "y": 1.5, "w": 2},
{"matrix": [1, 14], "x": 15.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": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.5},
{"matrix": [3, 2], "x": 2.75, "y": 3.5},
{"matrix": [3, 3], "x": 3.75, "y": 3.5},
{"matrix": [3, 4], "x": 4.75, "y": 3.5},
{"matrix": [3, 5], "x": 5.75, "y": 3.5},
{"matrix": [3, 6], "x": 6.75, "y": 3.5},
{"matrix": [3, 7], "x": 7.75, "y": 3.5},
{"matrix": [3, 8], "x": 8.75, "y": 3.5},
{"matrix": [3, 9], "x": 9.75, "y": 3.5},
{"matrix": [3, 10], "x": 10.75, "y": 3.5},
{"matrix": [3, 11], "x": 11.75, "y": 3.5},
{"matrix": [3, 12], "x": 14, "y": 0},
{"matrix": [3, 13], "x": 12.75, "y": 3.5, "w": 2.25},
{"matrix": [3, 14], "x": 16.25, "y": 1.5},
{"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
{"matrix": [4, 1], "x": 2.25, "y": 4.5},
{"matrix": [4, 2], "x": 3.25, "y": 4.5},
{"matrix": [4, 3], "x": 4.25, "y": 4.5},
{"matrix": [4, 4], "x": 5.25, "y": 4.5},
{"matrix": [4, 5], "x": 6.25, "y": 4.5},
{"matrix": [4, 6], "x": 7.25, "y": 4.5},
{"matrix": [4, 7], "x": 8.25, "y": 4.5},
{"matrix": [4, 8], "x": 9.25, "y": 4.5},
{"matrix": [4, 9], "x": 10.25, "y": 4.5},
{"matrix": [4, 10], "x": 11.25, "y": 4.5},
{"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
{"matrix": [4, 13], "x": 14.3, "y": 4.6},
{"matrix": [4, 14], "x": 16.25, "y": 2.5},
{"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.5, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
{"matrix": [5, 6], "x": 3.75, "y": 5.5, "w": 6.25},
{"matrix": [5, 9], "x": 10, "y": 5.5},
{"matrix": [5, 10], "x": 11, "y": 5.5},
{"matrix": [5, 11], "x": 12, "y": 5.5},
{"matrix": [5, 12], "x": 13.3, "y": 5.6},
{"matrix": [5, 13], "x": 14.3, "y": 5.6},
{"matrix": [5, 14], "x": 15.3, "y": 5.6}
]
}
}
}

View File

@ -0,0 +1,47 @@
/* Copyright 2024 Brian H (@Trojan_Pinata)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// keymaps
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_MUTE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, QK_KB, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
QK_BOOT, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MUTE,
EE_CLR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
DB_TOGG, _______, _______, KC_MYCM, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MSTP,
_______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT,
_______, _______, _______, _______, _______, _______, _______, KC_EXEC, _______, _______
)
};
// encoder handling
#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(_______, _______) },
};
#endif

View File

@ -0,0 +1,24 @@
/* Copyright 2020 QMK
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef RP_I2C_USE_I2C0
#define RP_I2C_USE_I2C0 TRUE
#undef RP_I2C_USE_I2C1
#define RP_I2C_USE_I2C1 TRUE

View File

@ -0,0 +1,397 @@
/* Copyright 2024 Brian H (@Trojan_Pinata)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "rev0.h"
// NUM_MODES stays last to indicate the number of different screens possible
enum oled_modes {
MTNS, INFO, LOGO, MEW, CEL, RAY, NUM_MODES
};
// define the key that switches the display
enum keeb_codes {
OLED_MOD = QK_KB,
};
// virtual eeprom for storing last layer
typedef union {
uint32_t raw;
struct {
uint8_t display_mode_saved : 3;
};
} keyboard_config_t;
keyboard_config_t keyboard_config;
void keyboard_pre_init_kb(void) {
keyboard_config.raw = eeconfig_read_kb();
keyboard_pre_init_user();
}
void eeconfig_init_kb(void) {
keyboard_config.raw = 0;
keyboard_config.display_mode_saved = INFO;
eeconfig_update_kb(keyboard_config.raw);
eeconfig_init_user();
}
// oled stuff below
#ifdef OLED_ENABLE
// hold only let me just drop all of my embedded images rq
static const char PROGMEM bootscreen[] = {
// 'modelb-oled', 128x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0,
0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x0f, 0x7f, 0xfe,
0xf0, 0x80, 0x00, 0x00, 0x00, 0x80, 0xf0, 0xfe, 0x3f, 0x07, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0xf0, 0xfc, 0xfe, 0x3f, 0x0f, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x07, 0x1f,
0x3f, 0xfe, 0xfc, 0xf0, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x07,
0x0f, 0x1f, 0xfe, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe1,
0xe1, 0xe1, 0xe3, 0xff, 0xff, 0xbf, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x03,
0x1f, 0x7f, 0xfc, 0xf0, 0xfe, 0x7f, 0x0f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x07, 0x1f, 0x3f, 0x7e, 0xf8, 0xf0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0x7c,
0x7f, 0x3f, 0x1f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0,
0xf8, 0x7c, 0x3f, 0x1f, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00,
0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc1,
0xc1, 0xc1, 0xc1, 0xe1, 0xff, 0xff, 0x7f, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static const char PROGMEM mnts_l0[] = {
// 'base', 128x32px
0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0xa0, 0xb0, 0xf0, 0xd0, 0xd0, 0xf8, 0xfc, 0xdc, 0xfe,
0xff, 0xff, 0xff, 0xdf, 0xde, 0xde, 0x9c, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0x90, 0xa0, 0x40,
0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
0x40, 0x40, 0x20, 0x20, 0x20, 0x90, 0xd0, 0xd0, 0xc8, 0xe8, 0xec, 0xe4, 0xfc, 0xfa, 0xfa, 0xfa,
0xf4, 0xe4, 0xe4, 0xc8, 0xc8, 0xd8, 0x90, 0x90, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x80, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x00, 0x40, 0x60,
0x30, 0x10, 0xf8, 0x0c, 0x06, 0x02, 0x00, 0x10, 0x08, 0x18, 0x3f, 0xe8, 0x08, 0x24, 0x3c, 0x0c,
0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00,
0xb9, 0x3d, 0x3d, 0x7c, 0x3e, 0x3f, 0x3f, 0x1d, 0x0d, 0x0f, 0x0b, 0x1f, 0x1f, 0x1f, 0x1f, 0x0b,
0x0f, 0x0f, 0x0f, 0x03, 0x03, 0x03, 0x05, 0x07, 0x0f, 0x0b, 0x0b, 0x13, 0x13, 0x37, 0x7f, 0xf7,
0xf7, 0xf8, 0xf0, 0xf8, 0xf8, 0xf1, 0xe1, 0xf3, 0x12, 0xd2, 0xd1, 0xd1, 0x11, 0x00, 0xc0, 0xc0,
0xe0, 0xf0, 0x78, 0x78, 0xf9, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0x1f,
0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x0f, 0x1f, 0x1e, 0x1e, 0x1f, 0x1c, 0x39, 0x39, 0x3a, 0x3c,
0x79, 0x79, 0xf2, 0xe2, 0xe4, 0xe5, 0x85, 0x49, 0x48, 0x08, 0xd0, 0xd0, 0x90, 0x20, 0x20, 0x40,
0x40, 0x40, 0xc1, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
0x0b, 0x0f, 0x0f, 0x1f, 0x2f, 0x7c, 0x7c, 0xf8, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x0f, 0x0f, 0x0f,
0x07, 0x03, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7e, 0x7f, 0xff, 0x78, 0xf8, 0xe0,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x0f, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x07, 0x07, 0x07, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x06,
0x0e, 0x0e, 0x0c, 0x0c, 0x00, 0x03, 0x47, 0x46, 0xc6, 0x8c, 0x8c, 0x0c, 0x18, 0x30, 0x63, 0x4c,
0x50, 0xcc, 0x83, 0x00, 0x00, 0x12, 0x1f, 0x10, 0x00, 0x10, 0x00, 0x0e, 0x15, 0x13, 0x0e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x60, 0x61, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60,
0x70, 0x70, 0x30, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x07, 0x0f, 0x1f,
0x1f, 0x1f, 0x1e, 0x1e, 0x1e, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x18, 0x10, 0x30, 0x30,
0x30, 0x30, 0x38, 0x38, 0x7c, 0x3c, 0x3c, 0x3c, 0x7c, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0x60,
0x60, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf0, 0xe0, 0x80, 0x80, 0x40, 0x60,
0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x60, 0x20, 0x60, 0x60, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x03, 0x02, 0x06, 0x06, 0x0c, 0x08, 0x08, 0x10, 0x30, 0x20, 0x20, 0x60
};
static const char PROGMEM mnts_l1[] = {
// 'alt', 128x32px
0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0xa0, 0xb0, 0xf0, 0xd0, 0xd0, 0xf8, 0xfc, 0xdc, 0xfe,
0xff, 0xff, 0xff, 0xdf, 0xde, 0xde, 0x9c, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0x90, 0xa0, 0x40,
0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
0x40, 0x40, 0x20, 0x20, 0x20, 0x90, 0xd0, 0xd0, 0xc8, 0xe8, 0xec, 0xe4, 0xfc, 0xfa, 0xfa, 0xfa,
0xf4, 0xe4, 0xe4, 0xc8, 0xc8, 0xd8, 0x90, 0x90, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x80, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x00, 0x40, 0x60,
0x30, 0x10, 0xf8, 0x0c, 0x06, 0x02, 0x00, 0x10, 0x08, 0x18, 0x3f, 0xe8, 0x08, 0x24, 0x3c, 0x0c,
0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x04, 0x82, 0x42, 0x22, 0x1c, 0x00,
0xb9, 0x3d, 0x3d, 0x7c, 0x3e, 0x3f, 0x3f, 0x1d, 0x0d, 0x0f, 0x0b, 0x1f, 0x1f, 0x1f, 0x1f, 0x0b,
0x0f, 0x0f, 0x0f, 0x03, 0x03, 0x03, 0x05, 0x07, 0x0f, 0x0b, 0x0b, 0x13, 0x13, 0x37, 0x7f, 0xf7,
0xf7, 0xf8, 0xf0, 0xf8, 0xf8, 0xf1, 0xe1, 0xf3, 0x12, 0xd2, 0xd1, 0xd1, 0x11, 0x00, 0xc0, 0xc0,
0xe0, 0xf0, 0x78, 0x78, 0xf9, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0x1f,
0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x0f, 0x1f, 0x1e, 0x1e, 0x1f, 0x1c, 0x39, 0x39, 0x3a, 0x3c,
0x79, 0x79, 0xf2, 0xe2, 0xe4, 0xe5, 0x85, 0x49, 0x48, 0x08, 0xd0, 0xd0, 0x90, 0x20, 0x20, 0x40,
0x40, 0x40, 0xc1, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x00,
0x0b, 0x0f, 0x0f, 0x1f, 0x2f, 0x7c, 0x7c, 0xf8, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x0f, 0x0f, 0x0f,
0x07, 0x03, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7e, 0x7f, 0xff, 0x78, 0xf8, 0xe0,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x0f, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x07, 0x07, 0x07, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x06,
0x0e, 0x0e, 0x0c, 0x0c, 0x00, 0x03, 0x47, 0x46, 0xc6, 0x8c, 0x8c, 0x0c, 0x18, 0x30, 0x63, 0x4c,
0x50, 0xcc, 0x83, 0x00, 0x00, 0x12, 0x1f, 0x10, 0x00, 0x10, 0x00, 0x0e, 0x15, 0x13, 0x0e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x60, 0x61, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60,
0x70, 0x70, 0x30, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x07, 0x0f, 0x1f,
0x1f, 0x1f, 0x1e, 0x1e, 0x1e, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x18, 0x10, 0x30, 0x30,
0x30, 0x30, 0x38, 0x38, 0x7c, 0x3c, 0x3c, 0x3c, 0x7c, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0x60,
0x60, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf0, 0xe0, 0x80, 0x80, 0x40, 0x60,
0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x60, 0x20, 0x60, 0x60, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x03, 0x02, 0x06, 0x06, 0x0c, 0x08, 0x08, 0x10, 0x30, 0x20, 0x20, 0x60
};
static const char PROGMEM mew_disp[] = {
// 'mewl2', 128x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40,
0x60, 0x50, 0x10, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x08,
0x04, 0xc4, 0xf2, 0xfa, 0x7e, 0x3e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0xa0, 0x20, 0x00, 0x10,
0x10, 0x10, 0x10, 0x0c, 0x02, 0x22, 0x42, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xf2, 0xf2, 0xc2, 0x01, 0x00, 0xc0, 0xa0, 0xe0, 0x28,
0x50, 0x00, 0x00, 0x00, 0x01, 0x1a, 0xf8, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0xe0,
0xff, 0xff, 0xc7, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0x78, 0x78, 0x3c, 0x3c, 0x1c, 0x1c, 0x3c, 0x38,
0x78, 0xf0, 0xe0, 0xc0, 0x00, 0x01, 0x06, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x41, 0xc0, 0x80,
0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x61, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x8c, 0xd9, 0x7b, 0x53, 0x10,
0x08, 0x18, 0x38, 0x3c, 0x36, 0x2f, 0x6b, 0x75, 0x92, 0xee, 0x18, 0xe4, 0xfc, 0x78, 0x00, 0xc1,
0xb7, 0xcf, 0xf3, 0xfc, 0xfd, 0xef, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xfe, 0xf9,
0xf0, 0xf9, 0xff, 0x7f, 0x1f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x90,
0x08, 0x09, 0x9f, 0xff, 0xff, 0xf8, 0x00, 0x38, 0xc6, 0x81, 0x8e, 0x70, 0x50, 0x50, 0x53, 0xe2,
0x83, 0x01, 0x62, 0xab, 0xa8, 0xa8, 0x50, 0x54, 0x50, 0x89, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x0d, 0x0c, 0x04, 0x06, 0x1e, 0x6e,
0x80, 0x00, 0x00, 0x38, 0x08, 0x84, 0xc4, 0xfe, 0x07, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x3e, 0x7f,
0x7f, 0x3f, 0x0f, 0x01, 0x83, 0x7c, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xc8, 0x84, 0x86, 0xcf,
0xb7, 0x81, 0x80, 0x41, 0x43, 0x8c, 0x92, 0xe1, 0x61, 0x53, 0x2e, 0x11, 0x11, 0x19, 0x2c, 0xd0,
0x20, 0x41, 0x40, 0x40, 0x24, 0x30, 0x20, 0x20, 0xf0, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static const char PROGMEM cel_disp[] = {
// 'celebi1', 128x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x20, 0xc0, 0xe0, 0xe0, 0xf0, 0xdc, 0xee, 0xf0, 0xbe, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0xc0, 0x81, 0x80, 0x80, 0xc0,
0xc0, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x80, 0xc0, 0xc0, 0xc0,
0x60, 0xb0, 0xcc, 0xf0, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xc0, 0xf8, 0xfc, 0xfc, 0xfb,
0xf4, 0xff, 0xff, 0x7f, 0x1f, 0xcf, 0x67, 0xe3, 0xc7, 0x0f, 0x9f, 0xff, 0x3e, 0xc0, 0xf0, 0x78,
0x90, 0xe0, 0xf2, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x3f,
0x3f, 0x3b, 0x3e, 0x79, 0xfe, 0xfe, 0xff, 0xfe, 0x7c, 0xfc, 0xf8, 0xd8, 0xf0, 0xf0, 0xb0, 0xa0,
0xa0, 0xa0, 0xe0, 0xe0, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0e, 0x31, 0x40, 0xf0, 0xf8, 0xfc, 0xfe, 0xf0, 0xff, 0xf0, 0xff, 0x7f, 0x3f, 0xbf, 0x9f,
0x9f, 0x1f, 0x3f, 0xfe, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x87, 0x8f, 0x9f,
0x9f, 0x9f, 0xc7, 0xcc, 0xd8, 0xd8, 0x98, 0x3c, 0xfc, 0xf7, 0xfb, 0x1c, 0x1d, 0x1e, 0x1e, 0x1f,
0x0f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x87, 0xcf, 0x6d, 0xf8, 0x72, 0xf4,
0xf4, 0x90, 0x20, 0x20, 0xa7, 0x6f, 0x6f, 0x6b, 0x0b, 0x06, 0x06, 0x05, 0x05, 0x01, 0x01, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0xc0, 0xc0, 0xc0, 0xc0, 0x83, 0x8f, 0x9f, 0x3f, 0x7f, 0x5f, 0xff, 0x71, 0xe0, 0xe1, 0x60, 0x62,
0x27, 0x30, 0x18, 0x9f, 0xcf, 0xc3, 0xc0, 0xc0, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0xe0, 0xe0, 0xc8, 0x9c, 0xf8, 0x60, 0x28, 0x3c, 0x7e, 0x7e, 0xfe, 0xff, 0xfc, 0xe1,
0x07, 0x1f, 0x3f, 0x3e, 0x7d, 0x7b, 0x73, 0x72, 0xe2, 0xe0, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03,
0x01, 0x01, 0xc1, 0xc1, 0x03, 0x03, 0x03, 0x23, 0x01, 0x0d, 0x06, 0x07, 0x37, 0x33, 0x01, 0x01,
0x07, 0x0e, 0x3c, 0x39, 0x79, 0x71, 0x71, 0x60, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00
};
static const char PROGMEM rayq_disp[] = {
// 'rayquaza1', 128x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10,
0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x70, 0x70, 0x71, 0x50, 0x60, 0x60, 0x60, 0x40, 0x80, 0x80,
0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0x80, 0x00, 0xc0, 0x60, 0x00, 0x00, 0x80,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0xc0,
0xe0, 0x60, 0x70, 0x70, 0x7b, 0x7b, 0xfb, 0xfb, 0xf8, 0xb0, 0xb0, 0xd0, 0x60, 0x30, 0x10, 0x08,
0x0c, 0x84, 0x86, 0x83, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x30, 0x1c, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf0, 0x11, 0x12, 0x10, 0x10, 0x0e, 0x0e, 0x0c, 0x0c, 0x07,
0x07, 0x0f, 0x0f, 0x03, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x9f, 0xf3, 0x3e, 0xe7, 0xfc, 0x7f, 0x3f, 0x0f,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3c, 0x2e, 0x57, 0x17, 0x1b, 0x1d, 0x36,
0x36, 0x3d, 0x31, 0x31, 0x39, 0x3d, 0x3d, 0x1d, 0x1f, 0x1f, 0xcf, 0x3f, 0x07, 0x00, 0x00, 0x81,
0x83, 0x83, 0x83, 0x03, 0x07, 0x07, 0x07, 0x0f, 0x0e, 0x1e, 0x1c, 0x3c, 0x78, 0xf8, 0xf0, 0xe0,
0x00, 0x40, 0xc0, 0x00, 0x60, 0x38, 0x38, 0x20, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x7f, 0xfe, 0xec, 0xf8, 0x7c, 0x3c,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xcf, 0x80, 0x07, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x08, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc1,
0x07, 0x0f, 0x9f, 0xbe, 0x78, 0xf0, 0xc0, 0x00, 0x80, 0x00, 0x80, 0x30, 0x30, 0x30, 0x11, 0x19,
0x18, 0x02, 0x07, 0x1f, 0x1f, 0x3c, 0x73, 0xcf, 0x0f, 0x0f, 0x0f, 0x17, 0x2f, 0x56, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1d, 0x3b, 0xff, 0xff, 0xfc, 0xf8, 0xf0,
0x60, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x68, 0x78, 0x10, 0x00, 0x18, 0x90,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x7f, 0xff, 0xfc, 0xf8, 0xe0, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0,
0xf0, 0xf0, 0xf0, 0xf1, 0xe1, 0x41, 0x04, 0x1e, 0xcf, 0xc7, 0x44, 0x63, 0x59, 0x6d, 0x0a, 0x03,
0x03, 0x0c, 0x0e, 0x05, 0x03, 0x02, 0x02, 0x1b, 0xec, 0x67, 0x5b, 0x1c, 0x8c, 0xcc, 0xdc, 0x30,
0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xc0, 0x3f, 0xfc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// invert display based on layer
static void inv_display(void) {
switch (get_highest_layer(layer_state)) {
case 1:
oled_invert(true);
break;
default:
oled_invert(false);
break;
}
}
// MTNS
static void mountains(void) {
switch (get_highest_layer(layer_state)) {
case 0:
oled_write_raw_P(mnts_l0, sizeof(mnts_l0));
break;
case 1:
oled_write_raw_P(mnts_l1, sizeof(mnts_l1));
break;
default:
oled_write_raw_P(mnts_l0, sizeof(mnts_l0));
break;
}
}
// INFO
static void info(void) {
// get layer the board is on
oled_write_P(PSTR("LAYER "), false);
oled_write_P(PSTR(" "), true);
oled_write_char(get_highest_layer(layer_state) + 0x30, true);
oled_write_P(PSTR(" "), true);
// here we do a bit of trickery
oled_write_P(PSTR(" ENC "), false);
oled_write_P(PSTR(" VOL "), true);
// lock key statuses
led_t led_state = host_keyboard_led_state();
oled_set_cursor(9, 1);
oled_write_P(PSTR(" CAP "), led_state.caps_lock);
oled_set_cursor(14, 1);
oled_write_P(PSTR(" SCR "), led_state.scroll_lock);
// write model B here in invert text
oled_set_cursor(0, 3);
oled_write_P(PSTR(" MODEL-B "), true);
// mod masks - if you don't know what these do, don't worry about them
uint8_t mod_state = get_mods();
oled_advance_char();
oled_advance_char();
oled_write_P(PSTR("S"), mod_state & MOD_MASK_SHIFT);
oled_advance_char();
oled_write_P(PSTR("C"), mod_state & MOD_MASK_CTRL);
oled_advance_char();
oled_write_P(PSTR("A"), mod_state & MOD_MASK_ALT);
oled_advance_char();
oled_write_P(PSTR("G"), mod_state & MOD_MASK_GUI);
oled_advance_char();
}
// display logo - used on boot and exception state
static void logo(void) {
oled_write_raw_P(bootscreen, sizeof(bootscreen));
}
// run this whenever the oled needs to update
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
switch (keyboard_config.display_mode_saved) {
case MTNS:
mountains();
break;
case INFO:
info();
break;
case LOGO:
oled_write_raw_P(bootscreen, sizeof(bootscreen)); // write image to screen
inv_display(); // invert image if necessary - remove if layer differs
break;
case MEW:
oled_write_raw_P(mew_disp, sizeof(mew_disp));
inv_display();
break;
case CEL:
oled_write_raw_P(cel_disp, sizeof(cel_disp));
inv_display();
break;
case RAY:
oled_write_raw_P(rayq_disp, sizeof(rayq_disp));
inv_display();
break;
default:
logo();
}
return false;
}
// render this on boot/reset
void oled_render_boot(bool bootloader) {
oled_clear();
logo();
oled_render_dirty(true);
}
// change depending on if OLED_MOD is pressed
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
if (keycode == OLED_MOD && record->event.pressed) {
oled_clear();
keyboard_config.display_mode_saved++;
if (keyboard_config.display_mode_saved == NUM_MODES) {
keyboard_config.display_mode_saved = 0;
}
eeconfig_update_kb(keyboard_config.raw);
}
return true;
}
#endif

View File

@ -0,0 +1,21 @@
/* Copyright 2024 Brian H (@Trojan_Pinata)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
void oled_render_boot(bool bootloader);

View File

@ -43,13 +43,13 @@ static painter_font_handle_t thintel;
enum { enum {
RGB_MATRIX_EFFECT_NONE, RGB_MATRIX_EFFECT_NONE,
# include "rgb_matrix_effects.inc" # include "rgb_matrix_effects.inc"
# undef RGB_MATRIX_EFFECT
# ifdef RGB_MATRIX_CUSTOM_KB # ifdef RGB_MATRIX_CUSTOM_KB
# include "rgb_matrix_kb.inc" # include "rgb_matrix_kb.inc"
# endif # endif
# ifdef RGB_MATRIX_CUSTOM_USER # ifdef RGB_MATRIX_CUSTOM_USER
# include "rgb_matrix_user.inc" # include "rgb_matrix_user.inc"
# endif # endif
# undef RGB_MATRIX_EFFECT
}; };
# define RGB_MATRIX_EFFECT(x) \ # define RGB_MATRIX_EFFECT(x) \
@ -60,13 +60,13 @@ const char *rgb_matrix_name(uint8_t effect) {
case RGB_MATRIX_EFFECT_NONE: case RGB_MATRIX_EFFECT_NONE:
return "NONE"; return "NONE";
# include "rgb_matrix_effects.inc" # include "rgb_matrix_effects.inc"
# undef RGB_MATRIX_EFFECT
# ifdef RGB_MATRIX_CUSTOM_KB # ifdef RGB_MATRIX_CUSTOM_KB
# include "rgb_matrix_kb.inc" # include "rgb_matrix_kb.inc"
# endif # endif
# ifdef RGB_MATRIX_CUSTOM_USER # ifdef RGB_MATRIX_CUSTOM_USER
# include "rgb_matrix_user.inc" # include "rgb_matrix_user.inc"
# endif # endif
# undef RGB_MATRIX_EFFECT
default: default:
return "UNKNOWN"; return "UNKNOWN";
} }

View File

@ -18,7 +18,7 @@ def _get_chunks(it, size):
def dos2unix_run(files): def dos2unix_run(files):
"""Spawn multiple dos2unix subprocess avoiding too long commands on formatting everything """Spawn multiple dos2unix subprocess avoiding too long commands on formatting everything
""" """
for chunk in _get_chunks(files, 10): for chunk in _get_chunks([normpath(file).as_posix() for file in files], 10):
dos2unix = cli.run(['dos2unix', *chunk]) dos2unix = cli.run(['dos2unix', *chunk])
if dos2unix.returncode: if dos2unix.returncode:

View File

@ -99,6 +99,13 @@ def _validate_build_target(keyboard, info_data):
if info_file != keyboard_json_path: if info_file != keyboard_json_path:
_log_error(info_data, f'Invalid keyboard.json location detected: {info_file}.') _log_error(info_data, f'Invalid keyboard.json location detected: {info_file}.')
# No keyboard.json next to info.json
for conf_file in config_files:
if conf_file.name == 'keyboard.json':
info_file = conf_file.parent / 'info.json'
if info_file.exists():
_log_error(info_data, f'Invalid info.json location detected: {info_file}.')
# Moving forward keyboard.json should be used as a build target # Moving forward keyboard.json should be used as a build target
if keyboard_json_count == 0: if keyboard_json_count == 0:
_log_warning(info_data, 'Build marker "keyboard.json" not found.') _log_warning(info_data, 'Build marker "keyboard.json" not found.')
@ -773,23 +780,24 @@ def find_keyboard_c(keyboard):
def _extract_led_config(info_data, keyboard): def _extract_led_config(info_data, keyboard):
"""Scan all <keyboard>.c files for led config """Scan all <keyboard>.c files for led config
""" """
cols = info_data['matrix_size']['cols']
rows = info_data['matrix_size']['rows']
for feature in ['rgb_matrix', 'led_matrix']: for feature in ['rgb_matrix', 'led_matrix']:
if info_data.get('features', {}).get(feature, False) or feature in info_data: if info_data.get('features', {}).get(feature, False) or feature in info_data:
# Only attempt search if dd led config is missing # Only attempt search if dd led config is missing
if 'layout' not in info_data.get(feature, {}): if 'layout' not in info_data.get(feature, {}):
# Process cols = info_data.get('matrix_size', {}).get('cols')
for file in find_keyboard_c(keyboard): rows = info_data.get('matrix_size', {}).get('rows')
try: if cols and rows:
ret = find_led_config(file, cols, rows) # Process
if ret: for file in find_keyboard_c(keyboard):
info_data[feature] = info_data.get(feature, {}) try:
info_data[feature]['layout'] = ret ret = find_led_config(file, cols, rows)
except Exception as e: if ret:
_log_warning(info_data, f'led_config: {file.name}: {e}') info_data[feature] = info_data.get(feature, {})
info_data[feature]['layout'] = ret
except Exception as e:
_log_warning(info_data, f'led_config: {file.name}: {e}')
else:
_log_warning(info_data, 'led_config: matrix size required to parse g_led_config')
if info_data[feature].get('layout', None) and not info_data[feature].get('led_count', None): if info_data[feature].get('layout', None) and not info_data[feature].get('led_count', None):
info_data[feature]['led_count'] = len(info_data[feature]['layout']) info_data[feature]['led_count'] = len(info_data[feature]['layout'])

View File

@ -27,7 +27,3 @@
# define STM32_ONBOARD_EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO and EEPROM page sizing # define STM32_ONBOARD_EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO and EEPROM page sizing
# endif # endif
#endif #endif
#if STM32_ONBOARD_EEPROM_SIZE > 128
# pragma message("Please note: resetting EEPROM using an STM32L0/L1 device takes up to 1 second for every 1kB of internal EEPROM used.")
#endif

View File

@ -249,11 +249,11 @@ bool spi_start_extended(spi_start_config_t *start_config) {
#elif defined(AT32F415) #elif defined(AT32F415)
spiConfig.ctrl1 = 0; spiConfig.ctrl1 = 0;
if (lsbFirst) { if (start_config->lsb_first) {
spiConfig.ctrl1 |= SPI_CTRL1_LTF; spiConfig.ctrl1 |= SPI_CTRL1_LTF;
} }
switch (mode) { switch (start_config->mode) {
case 0: case 0:
break; break;
case 1: case 1:

View File

@ -64,6 +64,7 @@ __attribute__((weak)) bool dip_switch_update_mask_kb(uint32_t state) {
#ifdef DIP_SWITCH_MAP_ENABLE #ifdef DIP_SWITCH_MAP_ENABLE
# include "keymap_introspection.h" # include "keymap_introspection.h"
# include "action.h" # include "action.h"
# include "wait.h"
# ifndef DIP_SWITCH_MAP_KEY_DELAY # ifndef DIP_SWITCH_MAP_KEY_DELAY
# define DIP_SWITCH_MAP_KEY_DELAY TAP_CODE_DELAY # define DIP_SWITCH_MAP_KEY_DELAY TAP_CODE_DELAY

View File

@ -1,4 +1,4 @@
// Copyright 2024 QMK // Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/******************************************************************************* /*******************************************************************************

View File

@ -1,4 +1,4 @@
// Copyright 2024 QMK // Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/******************************************************************************* /*******************************************************************************

View File

@ -1,4 +1,4 @@
// Copyright 2024 QMK // Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/******************************************************************************* /*******************************************************************************

View File

@ -1,4 +1,4 @@
// Copyright 2024 QMK // Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/******************************************************************************* /*******************************************************************************

View File

@ -1,4 +1,4 @@
// Copyright 2024 QMK // Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/******************************************************************************* /*******************************************************************************

View File

@ -1,4 +1,4 @@
// Copyright 2024 QMK // Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/******************************************************************************* /*******************************************************************************

View File

@ -1,4 +1,4 @@
// Copyright 2024 QMK // Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/******************************************************************************* /*******************************************************************************

View File

@ -1,4 +1,4 @@
// Copyright 2024 QMK // Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/******************************************************************************* /*******************************************************************************

View File

@ -1,4 +1,4 @@
// Copyright 2024 QMK // Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/******************************************************************************* /*******************************************************************************

View File

@ -1,4 +1,4 @@
// Copyright 2024 QMK // Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/******************************************************************************* /*******************************************************************************

Some files were not shown because too many files have changed in this diff Show More