diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 86fd8b71a13..0d82ecb6051 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -26,7 +26,7 @@ jobs:
- uses: actions/checkout@v3
with:
fetch-depth: 1
-
+
- uses: actions/setup-node@v3
with:
node-version: 16
@@ -35,7 +35,6 @@ jobs:
- name: Install dependencies
run: |
apt-get update && apt-get install -y rsync nodejs npm doxygen
- npm install -g moxygen
- name: Build doxygen docs
run: |
diff --git a/docs/.gitignore b/builddefs/docs/.gitignore
similarity index 100%
rename from docs/.gitignore
rename to builddefs/docs/.gitignore
diff --git a/docs/babel.config.js b/builddefs/docs/babel.config.js
similarity index 100%
rename from docs/babel.config.js
rename to builddefs/docs/babel.config.js
diff --git a/docs/docusaurus.config.js b/builddefs/docs/docusaurus.config.js
similarity index 96%
rename from docs/docusaurus.config.js
rename to builddefs/docs/docusaurus.config.js
index 5d2afc2ba14..74f84230e02 100644
--- a/docs/docusaurus.config.js
+++ b/builddefs/docs/docusaurus.config.js
@@ -27,13 +27,22 @@ const config = {
customCss: require.resolve("./src/css/custom.css"),
}
],
+ [
+ require.resolve("@easyops-cn/docusaurus-search-local"),
+ {
+ indexBlog: false,
+ docsRouteBasePath: '/',
+ searchResultLimits: 12,
+ searchBarShortcut: false,
+ },
+ ],
],
plugins: [
[
"@docusaurus/plugin-content-docs",
{
sidebarPath: require.resolve("./sidebars.js"),
- path: ".",
+ path: "../../docs",
routeBasePath: "/",
exclude: [
"node_modules",
diff --git a/docs/package-lock.json b/builddefs/docs/package-lock.json
similarity index 97%
rename from docs/package-lock.json
rename to builddefs/docs/package-lock.json
index 34afd43ed86..382322def31 100644
--- a/docs/package-lock.json
+++ b/builddefs/docs/package-lock.json
@@ -11,6 +11,7 @@
"@docusaurus/core": "2.4.0",
"@docusaurus/plugin-client-redirects": "^2.4.0",
"@docusaurus/preset-classic": "2.4.0",
+ "@easyops-cn/docusaurus-search-local": "^0.35.0",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.2.1",
"prism-react-renderer": "^1.3.5",
@@ -2625,6 +2626,46 @@
"node": ">=16.14"
}
},
+ "node_modules/@easyops-cn/autocomplete.js": {
+ "version": "0.38.1",
+ "resolved": "https://registry.npmjs.org/@easyops-cn/autocomplete.js/-/autocomplete.js-0.38.1.tgz",
+ "integrity": "sha512-drg76jS6syilOUmVNkyo1c7ZEBPcPuK+aJA7AksM5ZIIbV57DMHCywiCr+uHyv8BE5jUTU98j/H7gVrkHrWW3Q==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "immediate": "^3.2.3"
+ }
+ },
+ "node_modules/@easyops-cn/docusaurus-search-local": {
+ "version": "0.35.0",
+ "resolved": "https://registry.npmjs.org/@easyops-cn/docusaurus-search-local/-/docusaurus-search-local-0.35.0.tgz",
+ "integrity": "sha512-sHQ8jxsVgHH8MNXJlj20nZZfP/Q0peNTAJwKCN2aPuBwfRIoO0i7LmZFaYKenZmVAW/BD2MtfVd65SREmm3zxg==",
+ "dependencies": {
+ "@docusaurus/plugin-content-docs": "^2.0.0-rc.1",
+ "@docusaurus/theme-translations": "^2.0.0-rc.1",
+ "@docusaurus/utils": "^2.0.0-rc.1",
+ "@docusaurus/utils-common": "^2.0.0-rc.1",
+ "@docusaurus/utils-validation": "^2.0.0-rc.1",
+ "@easyops-cn/autocomplete.js": "^0.38.1",
+ "@node-rs/jieba": "^1.6.0",
+ "cheerio": "^1.0.0-rc.3",
+ "clsx": "^1.1.1",
+ "debug": "^4.2.0",
+ "fs-extra": "^10.0.0",
+ "klaw-sync": "^6.0.0",
+ "lunr": "^2.3.9",
+ "lunr-languages": "^1.4.0",
+ "mark.js": "^8.11.1",
+ "tslib": "^2.4.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "@docusaurus/theme-common": "^2.0.0-rc.1",
+ "react": "^16.14.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/@hapi/hoek": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
@@ -2852,6 +2893,228 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/@node-rs/jieba": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba/-/jieba-1.7.0.tgz",
+ "integrity": "sha512-Hm1JIlejxkWe1FSFZRns/g1j5hZmp357n+0n2BluABA4KLZ8EraHfPmPRmVMW6vbdMZObTYIVu5aVrPnUfBOxg==",
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "optionalDependencies": {
+ "@node-rs/jieba-android-arm-eabi": "1.7.0",
+ "@node-rs/jieba-android-arm64": "1.7.0",
+ "@node-rs/jieba-darwin-arm64": "1.7.0",
+ "@node-rs/jieba-darwin-x64": "1.7.0",
+ "@node-rs/jieba-freebsd-x64": "1.7.0",
+ "@node-rs/jieba-linux-arm-gnueabihf": "1.7.0",
+ "@node-rs/jieba-linux-arm64-gnu": "1.7.0",
+ "@node-rs/jieba-linux-arm64-musl": "1.7.0",
+ "@node-rs/jieba-linux-x64-gnu": "1.7.0",
+ "@node-rs/jieba-linux-x64-musl": "1.7.0",
+ "@node-rs/jieba-win32-arm64-msvc": "1.7.0",
+ "@node-rs/jieba-win32-ia32-msvc": "1.7.0",
+ "@node-rs/jieba-win32-x64-msvc": "1.7.0"
+ }
+ },
+ "node_modules/@node-rs/jieba-android-arm-eabi": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm-eabi/-/jieba-android-arm-eabi-1.7.0.tgz",
+ "integrity": "sha512-XF4OYcZCyDiBK+jm1Zmt2o+xEO7K2K5OvUC3MTc9jd3Lwvy3EdHp8tpGvEp8PxfVFe2/JxNzX4OQQQP3Dhmk9A==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-android-arm64": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm64/-/jieba-android-arm64-1.7.0.tgz",
+ "integrity": "sha512-9oWwFVr/37T89WC+jjiI9A6u0zUJNTJl5ZC4CMxX45MVMokWI7bBXU7t7qBmMdFBzj+OFwDd3sm1fh4vl7NSWA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-darwin-arm64": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.7.0.tgz",
+ "integrity": "sha512-9gBuxJCNITNI/gU5l8eeVGQ9MAf0BV86lfeo9TeU61vJCy6sqyx26wFMLODQgLNdiMP+q/fZme/G0hfZUjfPVA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-darwin-x64": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-x64/-/jieba-darwin-x64-1.7.0.tgz",
+ "integrity": "sha512-FFUSMY4tl0Prpxa1SHy7Yzze2KfV/bZzccpO5nd+a8zCKbiX6gVkJ89FfxSAD2QrXUGkZvJYiPmu5nkZItqRZQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-freebsd-x64": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-freebsd-x64/-/jieba-freebsd-x64-1.7.0.tgz",
+ "integrity": "sha512-QFz2pz0Br+621QbKkgQPqTn90j1kcCD9jaI++qTLNHJGlWLRn6sFoAjb+jQEQEy9aE7VqfIV56eaVcCoU5VO2w==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-linux-arm-gnueabihf": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm-gnueabihf/-/jieba-linux-arm-gnueabihf-1.7.0.tgz",
+ "integrity": "sha512-kHJxO2sd7gMKqI1YS5DjABEcRwRemaCtgbKSuUqEaHGmUz9nAaUF6FSY8U4rXwr7HXt+kQa4NgyYDjgz+Pscrw==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-linux-arm64-gnu": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-gnu/-/jieba-linux-arm64-gnu-1.7.0.tgz",
+ "integrity": "sha512-3qoCV9pF6llPBGDMu7K8JdHjI10WPkrq6P2gpZESqekcE4DatV6DcU9FWR+QL7MK/7meoE3/Zhjm7OK+qBd8gg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-linux-arm64-musl": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-musl/-/jieba-linux-arm64-musl-1.7.0.tgz",
+ "integrity": "sha512-xv6hvzOV7iTCq7mM8SWhC3zEk6CqmBwhOSlfbb3gvPkc4U1UA1hmvcrD7oO5Qn+U+nuswysGCdVU6Z5AypLDfg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-linux-x64-gnu": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-gnu/-/jieba-linux-x64-gnu-1.7.0.tgz",
+ "integrity": "sha512-NpelWidMSNLoFTw+ov3y5jhJZjapHwEnh0Fyfm/7mvqkdwzVyedqNj22etRGum+nsAosMotCUWUznIMAD075gQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-linux-x64-musl": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-musl/-/jieba-linux-x64-musl-1.7.0.tgz",
+ "integrity": "sha512-yG4F8sy+fW4RbhyKXmEMT/JGuQuKH0TGymCEGYgT0km2I60iys63jWf2VTzCtrx583wxN5XoHv5HN60nhtIBtw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-win32-arm64-msvc": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-arm64-msvc/-/jieba-win32-arm64-msvc-1.7.0.tgz",
+ "integrity": "sha512-R6l/BSMs6R6BwpZS6DIDZuAEjUIPdAHgyi+xptP3mICjm6U+GMsvsRTeZkIJ7a/yzYUfqvz54VpQsfE5f0psBQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-win32-ia32-msvc": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-ia32-msvc/-/jieba-win32-ia32-msvc-1.7.0.tgz",
+ "integrity": "sha512-FwibbuizEjzom02K2JM2T8tL0VlxW5xGDDy3L3dgx46xIGE85PwGYjgju+eDt4UODgxDsxGC4DUMMZf3XvCc7A==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-win32-x64-msvc": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-x64-msvc/-/jieba-win32-x64-msvc-1.7.0.tgz",
+ "integrity": "sha512-pJv7nluB6azhsOWvJB86Dyfg/M7n9k49bs9Bwmsylz9uhdZX9QnEShDW934RdmnjPYQ5aPgsSFrY6NXP/aovUA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -7045,6 +7308,11 @@
"node": ">=14.0.0"
}
},
+ "node_modules/immediate": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz",
+ "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q=="
+ },
"node_modules/immer": {
"version": "9.0.21",
"resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
@@ -7600,6 +7868,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/klaw-sync": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
+ "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
+ "dependencies": {
+ "graceful-fs": "^4.1.11"
+ }
+ },
"node_modules/kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -7754,6 +8030,16 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/lunr": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="
+ },
+ "node_modules/lunr-languages": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.11.0.tgz",
+ "integrity": "sha512-V9cvFv3bWKWSb7ucbg9QeNpOiuhglR9F9KipjE8CpVXgqLIwgLrskNNtj2ock7AAcVcSZiFVXeTfgVKCGBf1jg=="
+ },
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -7782,6 +8068,11 @@
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"peer": true
},
+ "node_modules/mark.js": {
+ "version": "8.11.1",
+ "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
+ "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ=="
+ },
"node_modules/markdown-escapes": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
diff --git a/docs/package.json b/builddefs/docs/package.json
similarity index 85%
rename from docs/package.json
rename to builddefs/docs/package.json
index f86831455f0..1a057f45b31 100644
--- a/docs/package.json
+++ b/builddefs/docs/package.json
@@ -4,12 +4,12 @@
"private": true,
"scripts": {
"docusaurus": "docusaurus",
- "start": "docusaurus start",
+ "start": "docusaurus start --host 0.0.0.0 --port 8936",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
- "serve": "docusaurus serve",
+ "serve": "docusaurus serve --host 0.0.0.0 --port 8936",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids"
},
@@ -17,6 +17,7 @@
"@docusaurus/core": "2.4.0",
"@docusaurus/plugin-client-redirects": "^2.4.0",
"@docusaurus/preset-classic": "2.4.0",
+ "@easyops-cn/docusaurus-search-local": "^0.35.0",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.2.1",
"prism-react-renderer": "^1.3.5",
diff --git a/docs/sidebars.js b/builddefs/docs/sidebars.js
similarity index 98%
rename from docs/sidebars.js
rename to builddefs/docs/sidebars.js
index 983b5db8329..3520f8276de 100644
--- a/docs/sidebars.js
+++ b/builddefs/docs/sidebars.js
@@ -251,9 +251,9 @@ const sidebars = {
type: 'category',
label: "Past Breaking Changes",
link: {
- type: 'generated-index',
- title: 'Past Breaking Changes',
- slug: '/breaking_changes/all',
+ type: 'generated-index',
+ title: 'Past Breaking Changes',
+ slug: '/breaking_changes/all',
},
items: [
{
diff --git a/docs/src/components/DocsifyForwarder.js b/builddefs/docs/src/components/DocsifyForwarder.js
similarity index 100%
rename from docs/src/components/DocsifyForwarder.js
rename to builddefs/docs/src/components/DocsifyForwarder.js
diff --git a/docs/src/css/custom.css b/builddefs/docs/src/css/custom.css
similarity index 100%
rename from docs/src/css/custom.css
rename to builddefs/docs/src/css/custom.css
diff --git a/docs/src/pages/index.module.css b/builddefs/docs/src/pages/index.module.css
similarity index 100%
rename from docs/src/pages/index.module.css
rename to builddefs/docs/src/pages/index.module.css
diff --git a/docs/static/.nojekyll b/builddefs/docs/static/.nojekyll
similarity index 100%
rename from docs/static/.nojekyll
rename to builddefs/docs/static/.nojekyll
diff --git a/docs/static/CNAME b/builddefs/docs/static/CNAME
similarity index 100%
rename from docs/static/CNAME
rename to builddefs/docs/static/CNAME
diff --git a/docs/static/img/favicon.ico b/builddefs/docs/static/img/favicon.ico
similarity index 100%
rename from docs/static/img/favicon.ico
rename to builddefs/docs/static/img/favicon.ico
diff --git a/docs/static/img/favicon.png b/builddefs/docs/static/img/favicon.png
similarity index 100%
rename from docs/static/img/favicon.png
rename to builddefs/docs/static/img/favicon.png
diff --git a/docs/static/img/qmk-new-dark.svg b/builddefs/docs/static/img/qmk-new-dark.svg
similarity index 100%
rename from docs/static/img/qmk-new-dark.svg
rename to builddefs/docs/static/img/qmk-new-dark.svg
diff --git a/docs/static/img/qmk-new-light.svg b/builddefs/docs/static/img/qmk-new-light.svg
similarity index 100%
rename from docs/static/img/qmk-new-light.svg
rename to builddefs/docs/static/img/qmk-new-light.svg
diff --git a/docs/static/img/qmk-social-card.jpg b/builddefs/docs/static/img/qmk-social-card.jpg
similarity index 100%
rename from docs/static/img/qmk-social-card.jpg
rename to builddefs/docs/static/img/qmk-social-card.jpg
diff --git a/docs/ChangeLog/20200829.md b/docs/ChangeLog/20200829.md
index c6abed5b302..66957211f85 100644
--- a/docs/ChangeLog/20200829.md
+++ b/docs/ChangeLog/20200829.md
@@ -3,9 +3,9 @@
Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
-## Changes Requiring User Action :id=changes-requiring-user-action
+## Changes Requiring User Action {#changes-requiring-user-action}
-### Relocated Keyboards :id=relocated-keyboards
+### Relocated Keyboards {#relocated-keyboards}
#### The Key Company project consolidation ([#9547](https://github.com/qmk/qmk_firmware/pull/9547))
#### relocating boards by flehrad to flehrad/ folder ([#9635](https://github.com/qmk/qmk_firmware/pull/9635))
@@ -24,7 +24,7 @@ handwired/numbrero | flehrad/numbrero
snagpad | flehrad/snagpad
handwired/tradestation | flehrad/tradestation
-### Updated Keyboard Codebases :id=keyboard-updates
+### Updated Keyboard Codebases {#keyboard-updates}
#### Keebio RGB wiring update ([#7754](https://github.com/qmk/qmk_firmware/pull/7754))
@@ -46,7 +46,7 @@ This change affects:
* Quefrency rev1
* Viterbi, revs. 1 and 2
-### Changes to Core Functionality :id=core-updates
+### Changes to Core Functionality {#core-updates}
* Bigger Combo index ([#9318](https://github.com/qmk/qmk_firmware/pull/9318))
@@ -58,14 +58,14 @@ Any fork that uses `process_combo_event` needs to update the function's first ar
* New function: `void process_combo_event(uint16_t combo_index, bool pressed)`
-## Core Changes :id=core-changes
+## Core Changes {#core-changes}
-### Fixes :id=core-fixes
+### Fixes {#core-fixes}
* Mousekeys: scrolling acceleration is no longer coupled to mouse movement acceleration ([#9174](https://github.com/qmk/qmk_firmware/pull/9174))
* Keymap Extras: correctly assign Question Mark in Czech layout ([#9987](https://github.com/qmk/qmk_firmware/pull/9987))
-### Additions and Enhancements :id=core-additions
+### Additions and Enhancements {#core-additions}
* allow for WS2812 PWM to work on DMAMUX-capable devices ([#9471](https://github.com/qmk/qmk_firmware/pull/9471))
* Newer STM32 MCUs have a DMAMUX peripheral, which allows mapping of DMAs to different DMA streams, rather than hard-defining the target streams in silicon.
@@ -109,7 +109,7 @@ Any fork that uses `process_combo_event` needs to update the function's first ar
* The K-Type has been refactored to use QMK's native matrix scanning routine, and now has partial support for the RGB Matrix feature.
* Joysticks can now be used without defining analog pins ([#10169](https://github.com/qmk/qmk_firmware/pull/10169))
-### Clean-ups and Optimizations :id=core-optimizations
+### Clean-ups and Optimizations {#core-optimizations}
* iWRAP protocol removed ([#9284](https://github.com/qmk/qmk_firmware/pull/9284))
* work begun for consolidation of ChibiOS platform files ([#8327](https://github.com/qmk/qmk_firmware/pull/8327) and [#9315](https://github.com/qmk/qmk_firmware/pull/9315))
@@ -140,7 +140,7 @@ Any fork that uses `process_combo_event` needs to update the function's first ar
* remove support for Adafruit EZ Key Bluetooth controller ([#10103](https://github.com/qmk/qmk_firmware/pull/10103))
-## QMK Infrastructure and Internals :id=qmk-internals
+## QMK Infrastructure and Internals {#qmk-internals}
* Attempt to fix CI for non-master branches. ([#9308](https://github.com/qmk/qmk_firmware/pull/9308))
* Actually fetch the branch we're attempting to compare against.
diff --git a/docs/ChangeLog/20201128.md b/docs/ChangeLog/20201128.md
index 44413202953..d005d3b56b6 100644
--- a/docs/ChangeLog/20201128.md
+++ b/docs/ChangeLog/20201128.md
@@ -3,9 +3,9 @@
Four times a year QMK runs a process for merging Breaking Changes. A Breaking Change is any change which modifies how QMK behaves in a way that is incompatible or potentially dangerous. We limit these changes to 4 times per year so that users can have confidence that updating their QMK tree will not break their keymaps.
-## Changes Requiring User Action :id=changes-requiring-user-action
+## Changes Requiring User Action {#changes-requiring-user-action}
-### Relocated Keyboards :id=relocated-keyboards
+### Relocated Keyboards {#relocated-keyboards}
#### Reduce Helix keyboard build variation ([#8669](https://github.com/qmk/qmk_firmware/pull/8669))
@@ -88,21 +88,21 @@ The Valor and Dawn60 keyboards by Xelus22 both now require their revisions to be
| xelus/valor | xelus/valor/rev1 |
-### Updated Keyboard Codebases :id=keyboard-updates
+### Updated Keyboard Codebases {#keyboard-updates}
#### AEboards EXT65 Refactor ([#10820](https://github.com/qmk/qmk_firmware/pull/10820))
The EXT65 codebase has been reworked so keymaps can be used with either revision.
-## Core Changes :id=core-changes
+## Core Changes {#core-changes}
-### Fixes :id=core-fixes
+### Fixes {#core-fixes}
* Reconnect the USB if users wake up a computer from the keyboard to restore the USB state ([#10088](https://github.com/qmk/qmk_firmware/pull/10088))
* Fix cursor position bug in oled_write_raw functions ([#10800](https://github.com/qmk/qmk_firmware/pull/10800))
-### Additions and Enhancements :id=core-additions
+### Additions and Enhancements {#core-additions}
* Allow MATRIX_ROWS to be greater than 32 ([#10183](https://github.com/qmk/qmk_firmware/pull/10183))
* Add support for soft serial to ATmega32U2 ([#10204](https://github.com/qmk/qmk_firmware/pull/10204))
@@ -119,7 +119,7 @@ The EXT65 codebase has been reworked so keymaps can be used with either revision
* Add AT90USB support for serial.c ([#10706](https://github.com/qmk/qmk_firmware/pull/10706))
* Auto shift: support repeats and early registration (#9826)
-### Clean-ups and Optimizations :id=core-optimizations
+### Clean-ups and Optimizations {#core-optimizations}
* Haptic and solenoid cleanup ([#9700](https://github.com/qmk/qmk_firmware/pull/9700))
* XD75 cleanup ([#10524](https://github.com/qmk/qmk_firmware/pull/10524))
@@ -129,7 +129,7 @@ The EXT65 codebase has been reworked so keymaps can be used with either revision
* Remove references to HD44780 ([#10735](https://github.com/qmk/qmk_firmware/pull/10735))
-## QMK Infrastructure and Internals :id=qmk-internals
+## QMK Infrastructure and Internals {#qmk-internals}
* Add ability to build a subset of all keyboards based on platform. ([#10420](https://github.com/qmk/qmk_firmware/pull/10420))
* Initialise EEPROM drivers at startup, instead of upon first execution ([#10438](https://github.com/qmk/qmk_firmware/pull/10438))
diff --git a/docs/ChangeLog/20210529.md b/docs/ChangeLog/20210529.md
index 2feeed64376..69923b0c5ab 100644
--- a/docs/ChangeLog/20210529.md
+++ b/docs/ChangeLog/20210529.md
@@ -1,30 +1,30 @@
# QMK Breaking Changes - 2021 May 29 Changelog
-## Notable Changes :id=notable-changes
+## Notable Changes {#notable-changes}
-### RGB Matrix support for split common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055)) :id=rgb-matrix-split-common
+### RGB Matrix support for split common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055)) {#rgb-matrix-split-common}
Split boards can now use RGB Matrix without defining a custom matrix.
-### Teensy 3.6 support ([#12258](https://github.com/qmk/qmk_firmware/pull/12258)) :id=teensy-3-6-support
+### Teensy 3.6 support ([#12258](https://github.com/qmk/qmk_firmware/pull/12258)) {#teensy-3-6-support}
Added support for MK66F18 (Teensy 3.6) microcontroller.
-### New command: qmk console ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) :id=new-command-qmk-console
+### New command: qmk console ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) {#new-command-qmk-console}
A new `qmk console` command has been added for attaching to your keyboard's console. It operates similiarly to QMK Toolbox by allowing you to connect to one or more keyboard consoles to display debugging messages.
-### Improved command: qmk config :id=improve-command-qmk-config
+### Improved command: qmk config {#improve-command-qmk-config}
We've updated the `qmk config` command to show only the configuration items you have actually set. You can now display (almost) all of the available configuration options, along with their default values, using `qmk config -a`.
-### LED Matrix Improvements ([#12509](https://github.com/qmk/qmk_firmware/pull/12509), [#12580](https://github.com/qmk/qmk_firmware/pull/12580), [#12588](https://github.com/qmk/qmk_firmware/pull/12588), [#12633](https://github.com/qmk/qmk_firmware/pull/12633), [#12651](https://github.com/qmk/qmk_firmware/pull/12651), [#12685](https://github.com/qmk/qmk_firmware/pull/12685)) :id=led-matrix-improvements
+### LED Matrix Improvements ([#12509](https://github.com/qmk/qmk_firmware/pull/12509), [#12580](https://github.com/qmk/qmk_firmware/pull/12580), [#12588](https://github.com/qmk/qmk_firmware/pull/12588), [#12633](https://github.com/qmk/qmk_firmware/pull/12633), [#12651](https://github.com/qmk/qmk_firmware/pull/12651), [#12685](https://github.com/qmk/qmk_firmware/pull/12685)) {#led-matrix-improvements}
LED Matrix has been improved with effects, CIE1931 curves, and a task system.
-## Changes Requiring User Action :id=changes-requiring-user-action
+## Changes Requiring User Action {#changes-requiring-user-action}
-### Updated Keyboard Codebases :id=updated-keyboard-codebases
+### Updated Keyboard Codebases {#updated-keyboard-codebases}
* Durgod keyboard refactor in preparation for adding additional durgod keyboards ([#11978](https://github.com/qmk/qmk_firmware/pull/11978))
* Updated Function96 with V2 files and removed chconf.h and halconf.h ([#12613](https://github.com/qmk/qmk_firmware/pull/12613))
@@ -52,7 +52,7 @@ The codebase for the [Durgod K320](https://github.com/qmk/qmk_firmware/tree/0.13
Additionally, the `crkbd/rev1/legacy` keyboard has been removed.
-### Bootmagic Deprecation and Refactor ([#12172](https://github.com/qmk/qmk_firmware/pull/12172)) :id=bootmagic-deprecation-and-refactor
+### Bootmagic Deprecation and Refactor ([#12172](https://github.com/qmk/qmk_firmware/pull/12172)) {#bootmagic-deprecation-and-refactor}
QMK has decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.
@@ -68,11 +68,11 @@ This is the current planned roadmap for the behavior of `BOOTMAGIC_ENABLE`:
- From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail.
- From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail.
-### Removal of LAYOUT_kc ([#12160](https://github.com/qmk/qmk_firmware/pull/12160)) :id=removal-of-layout-kc
+### Removal of LAYOUT_kc ([#12160](https://github.com/qmk/qmk_firmware/pull/12160)) {#removal-of-layout-kc}
We've removed support for `LAYOUT_kc` macros, if your keymap uses one you will need to update it use a regular `LAYOUT` macro.
-### Encoder callbacks are now boolean ([#12805](https://github.com/qmk/qmk_firmware/pull/12805), [#12985](https://github.com/qmk/qmk_firmware/pull/12985)) :id=encoder-callback-boolean
+### Encoder callbacks are now boolean ([#12805](https://github.com/qmk/qmk_firmware/pull/12805), [#12985](https://github.com/qmk/qmk_firmware/pull/12985)) {#encoder-callback-boolean}
To allow for keyboards to override (or not) keymap level code the `encoder_update_kb` function has been changed from `void` to `bool`. You will need to update your function definition to reflect this and ensure that you return a `true` or `false` value.
@@ -127,9 +127,9 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
}
```
-## Core Changes :id=core-changes
+## Core Changes {#core-changes}
-### Fixes :id=core-fixes
+### Fixes {#core-fixes}
* Fix connection issue in split keyboards when slave and OLED display are connected via I2C (fixes #9335) ([#11487](https://github.com/qmk/qmk_firmware/pull/11487))
* Terrazzo: Fix wrong LED Matrix function names ([#12561](https://github.com/qmk/qmk_firmware/pull/12561))
@@ -147,7 +147,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
* [Keyboard] Fix Terrazzo build failure ([#12977](https://github.com/qmk/qmk_firmware/pull/12977))
* Do not hard set config in CPTC files ([#11864](https://github.com/qmk/qmk_firmware/pull/11864))
-### Additions and Enhancements :id=core-additions
+### Additions and Enhancements {#core-additions}
* ARM - Refactor SLEEP_LED to support more platforms ([#8403](https://github.com/qmk/qmk_firmware/pull/8403))
* Add ability to toggle One Shot functionality ([#4198](https://github.com/qmk/qmk_firmware/pull/4198))
@@ -193,7 +193,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
* Backlight: add defines for default level and breathing state ([#12560](https://github.com/qmk/qmk_firmware/pull/12560), [#13024](https://github.com/qmk/qmk_firmware/pull/13024))
* Add dire message about LUFA mass storage bootloader ([#13014](https://github.com/qmk/qmk_firmware/pull/13014))
-### Clean-ups and Optimizations :id=core-optimizations
+### Clean-ups and Optimizations {#core-optimizations}
* Overhaul bootmagic logic to have single entrypoint ([#8532](https://github.com/qmk/qmk_firmware/pull/8532))
* Refactor of USB code within split_common ([#11890](https://github.com/qmk/qmk_firmware/pull/11890))
@@ -218,7 +218,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
* Deprecate `send_unicode_hex_string()` ([#12602](https://github.com/qmk/qmk_firmware/pull/12602))
* [Keyboard] Remove redundant legacy and common headers for crkbd ([#13023](https://github.com/qmk/qmk_firmware/pull/13023))
-### QMK Infrastructure and Internals :id=qmk-internals
+### QMK Infrastructure and Internals {#qmk-internals}
* trivial change to trigger api update ([`b15288fb87`](https://github.com/qmk/qmk_firmware/commit/b15288fb87))
* fix some references to bin/qmk that slipped in ([#12832](https://github.com/qmk/qmk_firmware/pull/12832))
diff --git a/docs/ChangeLog/20210828.md b/docs/ChangeLog/20210828.md
index d8a19cc5827..be199971b05 100644
--- a/docs/ChangeLog/20210828.md
+++ b/docs/ChangeLog/20210828.md
@@ -1,14 +1,14 @@
# QMK Breaking Changes - 2021 August 28 Changelog
-## Notable Features :id=notable-features
+## Notable Features {#notable-features}
-### Combo processing improvements ([#8591](https://github.com/qmk/qmk_firmware/pull/8591)) :id=combo-processing-improvements
+### Combo processing improvements ([#8591](https://github.com/qmk/qmk_firmware/pull/8591)) {#combo-processing-improvements}
Combo processing has been reordered with respect to keypress handling, allowing for much better compatibility with mod taps.
It is also now possible to define combos that have keys overlapping with other combos, triggering only one. For example, a combo of `A`, `B` can coexist with a longer combo of `A`, `B`, `C` -- previous functionality would trigger both combos if all three keys were pressed.
-### Key Overrides ([#11422](https://github.com/qmk/qmk_firmware/pull/11422)) :id=key-overrides
+### Key Overrides ([#11422](https://github.com/qmk/qmk_firmware/pull/11422)) {#key-overrides}
QMK now has a new feature: [key overrides](https://docs.qmk.fm/#/feature_key_overrides). This feature allows for overriding the output of key combinations involving modifiers. As an example, pressing Shift+2 normally results in an @ on US-ANSI keyboard layouts -- the new key overrides allow for adding similar functionality, but for any modifier + key press.
@@ -20,9 +20,9 @@ There's far more to describe that what lives in this changelog, so head over to
QMK gained the ability to pretend to be a digitizer device -- much like a tablet device. A mouse uses delta-coordinates -- move up, move right -- but a digitizer works with absolute coordinates -- top left, bottom right.
-## Changes Requiring User Action :id=changes-requiring-user-action
+## Changes Requiring User Action {#changes-requiring-user-action}
-### Updated Keyboard Codebases :id=updated-keyboard-codebases
+### Updated Keyboard Codebases {#updated-keyboard-codebases}
The following keyboards have had their source moved within QMK:
@@ -69,7 +69,7 @@ xd84pro | xiudi/xd84pro
xd87 | xiudi/xd87
xd96 | xiudi/xd96
-### Bootmagic Full Removal ([#13846](https://github.com/qmk/qmk_firmware/pull/13846)) :id=bootmagic-full-removal
+### Bootmagic Full Removal ([#13846](https://github.com/qmk/qmk_firmware/pull/13846)) {#bootmagic-full-removal}
As noted during last breaking changes cycle, QMK has decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.
@@ -85,7 +85,7 @@ This is the current roadmap for the behavior of `BOOTMAGIC_ENABLE`:
- (now) From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail.
- (next) From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail.
-### DIP switch callbacks are now boolean ([#13399](https://github.com/qmk/qmk_firmware/pull/13399)) :id=dip-switch-boolean
+### DIP switch callbacks are now boolean ([#13399](https://github.com/qmk/qmk_firmware/pull/13399)) {#dip-switch-boolean}
To match the encoder change last breaking changes cycle, DIP switch callbacks now return `bool`, too.
@@ -149,9 +149,9 @@ bool dip_switch_update_mask_user(uint32_t state) {
}
```
-## Notable core changes :id=notable-core
+## Notable core changes {#notable-core}
-### Split transport improvements :id=split-transport-improvements
+### Split transport improvements {#split-transport-improvements}
Split keyboards gained a significant amount of improvements during this breaking changes cycle, specifically:
@@ -166,7 +166,7 @@ If you're updating your split keyboard, you will need to flash both sides of the
:::
-### Teensy 4.x support ([#13056](https://github.com/qmk/qmk_firmware/pull/13056), [#13076](https://github.com/qmk/qmk_firmware/pull/13076), [#13077](https://github.com/qmk/qmk_firmware/pull/13077)) :id=teensy-4-x-support
+### Teensy 4.x support ([#13056](https://github.com/qmk/qmk_firmware/pull/13056), [#13076](https://github.com/qmk/qmk_firmware/pull/13076), [#13077](https://github.com/qmk/qmk_firmware/pull/13077)) {#teensy-4-x-support}
Updated ChibiOS and ChibiOS-Contrib, which brought in support for Teensy 4.x dev boards, running NXP i.MX1062.
@@ -247,7 +247,7 @@ We've added dozens of new keys to `info.json` so that you can configure more tha
* `usb.force_nkro`, `usb.max_power`, `usb.no_startup_check`, `usb.polling_interval`, `usb.shared_endpoint.keyboard`, `usb.shared_endpoint.mouse`, `usb.suspend_wakeup_delay`, `usb.wait_for`
* `qmk.keys_per_scan`, `qmk.tap_keycode_delay`, `qmk.tap_capslock_delay`
-### Codebase restructure and cleanup :id=codebase-restructure
+### Codebase restructure and cleanup {#codebase-restructure}
QMK was originally based on TMK, and has grown in size considerably since its first inception. To keep moving things forward, restructure of some of the core areas of the code is needed to support new concepts and new hardware, and progress is happening along those lines:
diff --git a/docs/ChangeLog/20211127.md b/docs/ChangeLog/20211127.md
index 0780ab6a44c..36ad777eb63 100644
--- a/docs/ChangeLog/20211127.md
+++ b/docs/ChangeLog/20211127.md
@@ -1,6 +1,6 @@
# QMK Breaking Changes - 2021 November 27 Changelog
-## 2000 keyboards! :id=qmk-2000th-keyboard
+## 2000 keyboards! {#qmk-2000th-keyboard}
QMK had it's 2000th keyboard submitted during this breaking changes cycle.... and it only _just_ made the cut-off!
@@ -11,9 +11,9 @@ QMK had it's 2000th keyboard submitted during this breaking changes cycle.... an
From the whole QMK team, a major thankyou to the community for embracing QMK as your preferred keyboard firmware!
-## Notable Features :id=notable-features
+## Notable Features {#notable-features}
-### Expanded Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343)) :id=expanded-pointing-device
+### Expanded Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343)) {#expanded-pointing-device}
Pointing device support has been reworked and reimplemented to allow for easier integration of new peripherals.
@@ -33,7 +33,7 @@ QMK now has core-supplied support for the following pointing device peripherals:
See the new documentation for the [Pointing Device](../feature_pointing_device.md) feature for more information on specific configuration for each driver.
-### Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) :id=dynamic-tapping-term
+### Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) {#dynamic-tapping-term}
For people who are starting out with tapping keys, or for people who think tapping keys don't "feel right", it's sometimes quite difficult to determine what duration of tapping term to use to make things seem natural.
@@ -47,7 +47,7 @@ If you're in this stage of discovery, you can now add `DYNAMIC_TAPPING_TERM_ENAB
Coupled with the use of `qmk console` or QMK Toolbox to show console output from your keyboard, you can tweak the tapping term dynamically in order to narrow down what "feels right" to you. Once you're happy, drop in the resulting number into your keymap's `config.h` and you're good to go!
-### Macros in JSON keymaps ([#14374](https://github.com/qmk/qmk_firmware/pull/14374)) :id=macros-in-keymap-json
+### Macros in JSON keymaps ([#14374](https://github.com/qmk/qmk_firmware/pull/14374)) {#macros-in-keymap-json}
You can now define up to 32 macros in your `keymap.json` file, as used by [QMK Configurator](newbs_building_firmware_configurator.md), and `qmk compile`. You can define these macros in a list under the `macros` keyword, like this:
@@ -83,9 +83,9 @@ You can now define up to 32 macros in your `keymap.json` file, as used by [QMK C
In due course, [QMK Configurator](https://config.qmk.fm/) will pick up support for defining these in its UI, but for now the json is the only way to define macros.
-## Changes Requiring User Action :id=changes-requiring-user-action
+## Changes Requiring User Action {#changes-requiring-user-action}
-### Updated Keyboard Codebases :id=updated-keyboard-codebases
+### Updated Keyboard Codebases {#updated-keyboard-codebases}
The following keyboards have had their source moved within QMK:
@@ -104,13 +104,13 @@ The following keyboards have had their source moved within QMK:
| signum/3_0/elitec | signum/3_0 |
| tgr/jane | tgr/jane/v2 |
-### Squeezing space out of AVR ([#15243](https://github.com/qmk/qmk_firmware/pull/15243)) :id=squeezing-space-from-avr
+### Squeezing space out of AVR ([#15243](https://github.com/qmk/qmk_firmware/pull/15243)) {#squeezing-space-from-avr}
The AVR platform has been problematic for some time, in the sense that it is severely resource-constrained -- this makes life difficult for anyone attempting to add new functionality such as display panels to their keymap code. The illustrious Drashna has contributed some newer documentation on how to attempt to free up some space on AVR-based keyboards that are in short supply.
Of course, there are much fewer constraints with ARM chips... ;)
-### Require explicit enabling of RGB Matrix modes ([#15018](https://github.com/qmk/qmk_firmware/pull/15018)) :id=explicit-rgb-modes
+### Require explicit enabling of RGB Matrix modes ([#15018](https://github.com/qmk/qmk_firmware/pull/15018)) {#explicit-rgb-modes}
Related to the previous section -- RGB Matrix modes have now been made to be opt-in, rather than opt-out. As these animations are now opt-in, you may find that your keyboard no longer has all the RGB modes you're expecting -- you may need to configure and recompile your firmware and enable your animations of choice... with any luck they'll still fit in the space available.
@@ -118,7 +118,7 @@ Most keyboards keep their original functionality, but over time the QMK maintain
The full list of configurables to turn specific animations back on can be found at on the [RGB Matrix documentation](feature_rgb_matrix.md#rgb-matrix-effects) page.
-### OLED task refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/14864)) :id=oled-task-refactor
+### OLED task refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/14864)) {#oled-task-refactor}
OLED display code was traditionally difficult to override in keymaps as they did not follow the standard pattern of `bool *_kb()` deferring to `bool *_user()` functions, allowing signalling to the higher level that processing had already been done.
@@ -152,7 +152,7 @@ bool oled_task_kb(void) {
}
```
-### Bootmagic Full Removal ([#15002](https://github.com/qmk/qmk_firmware/pull/15002)) :id=bootmagic-full-removal
+### Bootmagic Full Removal ([#15002](https://github.com/qmk/qmk_firmware/pull/15002)) {#bootmagic-full-removal}
As noted during previous breaking changes cycles, QMK decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.
@@ -170,13 +170,13 @@ This is the historical timeline for the behavior of `BOOTMAGIC_ENABLE`:
- (done) From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no` – setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail.
- (now) From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no` – setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail.
-### Remove QWIIC_DRIVERS ([#14174](https://github.com/qmk/qmk_firmware/pull/14174)) :id=remove-qwiic
+### Remove QWIIC_DRIVERS ([#14174](https://github.com/qmk/qmk_firmware/pull/14174)) {#remove-qwiic}
Due to minimal QWIIC adoption and other options for similar functionality, the QWIIC drivers were removed from QMK. Existing OLED usages have been migrated across to the normal QMK OLED driver instead.
-## Notable core changes :id=notable-core
+## Notable core changes {#notable-core}
-### New MCU Support :id=new-mcu-support
+### New MCU Support {#new-mcu-support}
QMK firmware picked up support for a handful of new MCU families, potentially making it a bit easier to source components.
@@ -187,7 +187,7 @@ QMK firmware is now no longer limited to AVR and ARM - it also picked up support
* Westberrytech pr ([#14422](https://github.com/qmk/qmk_firmware/pull/14422))
* Initial pass of F405 support ([#14584](https://github.com/qmk/qmk_firmware/pull/14584))
-### EEPROM Changes :id=eeprom-changes
+### EEPROM Changes {#eeprom-changes}
There were a few EEPROM-related changes that landed during this breaking changes cycle, most prominently the long-awaited ability for the Drop boards to gain persistent storage. Any users of the Drop CTRL or Drop ALT should update QMK Toolbox as well -- coupled with a QMK firmware update settings should now be saved.
@@ -197,7 +197,7 @@ There were a few EEPROM-related changes that landed during this breaking changes
* Further tidy up of STM32 eeprom emulation ([#14591](https://github.com/qmk/qmk_firmware/pull/14591))
* Enable eeprom with F401xE ld ([#14752](https://github.com/qmk/qmk_firmware/pull/14752))
-### Compilation Database :id=compile-commands
+### Compilation Database {#compile-commands}
A clang-compatible compilation database generator has been added as an option in order to help development environments such as Visual Studio Code.
@@ -208,7 +208,7 @@ Do note that switching keyboards will require re-generation of this file.
* New CLI subcommand to create clang-compatible compilation database (`compile_commands.json`) ([#14370](https://github.com/qmk/qmk_firmware/pull/14370))
* compiledb: query include paths from gcc directly. ([#14462](https://github.com/qmk/qmk_firmware/pull/14462))
-### Codebase restructure and cleanup :id=codebase-restructure
+### Codebase restructure and cleanup {#codebase-restructure}
QMK continues on its restructuring journey, in order to make it easier to integrate newer features and add support for new hardware. This quarter's batch of changes include:
diff --git a/docs/ChangeLog/20220226.md b/docs/ChangeLog/20220226.md
index a469612fe8b..2def67d907b 100644
--- a/docs/ChangeLog/20220226.md
+++ b/docs/ChangeLog/20220226.md
@@ -1,6 +1,6 @@
# QMK Breaking Changes - 2022 February 26 Changelog
-## Notable Features :id=notable-features
+## Notable Features {#notable-features}
### Default USB Polling rate now 1kHz ([#15352](https://github.com/qmk/qmk_firmware/pull/15352))
@@ -14,7 +14,7 @@ Pointing devices can now be shared across a split keyboard with support for a si
See the [Pointing Device](feature_pointing_device.md) documentation for further configuration options.
-## Changes Requiring User Action :id=changes-requiring-user-action
+## Changes Requiring User Action {#changes-requiring-user-action}
### Legacy macro and action_function system removed ([#16025](https://github.com/qmk/qmk_firmware/pull/16025))
@@ -31,7 +31,7 @@ Bootloader configuration is no longer assumed. Keyboards must now set either:
In preparation of future bluetooth work, the `AdafruitBLE` integration has been renamed to allow potential for any other Adafruit BLE products.
-### Updated Keyboard Codebases :id=updated-keyboard-codebases
+### Updated Keyboard Codebases {#updated-keyboard-codebases}
The following keyboards have had their source moved within QMK:
@@ -241,9 +241,9 @@ The following keyboards have had their source moved within QMK:
| zinc/rev1 | 25keys/zinc/rev1 |
| zinc/reva | 25keys/zinc/reva |
-## Notable core changes :id=notable-core
+## Notable core changes {#notable-core}
-### New MCU Support :id=new-mcu-support
+### New MCU Support {#new-mcu-support}
Building on previous cycles, QMK firmware picked up support for a couple extra MCU variants:
diff --git a/docs/ChangeLog/20220528.md b/docs/ChangeLog/20220528.md
index 0686d056acc..be1c4dc8a61 100644
--- a/docs/ChangeLog/20220528.md
+++ b/docs/ChangeLog/20220528.md
@@ -1,8 +1,8 @@
# QMK Breaking Changes - 2022 May 28 Changelog
-## Notable Features :id=notable-features
+## Notable Features {#notable-features}
-### Caps Word ([#16588](https://github.com/qmk/qmk_firmware/pull/16588)) :id=caps-word
+### Caps Word ([#16588](https://github.com/qmk/qmk_firmware/pull/16588)) {#caps-word}
This is a new feature that allows for capslock-like functionality that turns itself off at the end of the word.
@@ -10,7 +10,7 @@ For instance, if you wish to type "QMK" without holding shift the entire time, y
There are other activation mechanisms as well as configurable options like timeout and the like -- see the [Caps Word documentation](feature_caps_word.md) for more information.
-### Quantum Painter ([#10174](https://github.com/qmk/qmk_firmware/pull/10174)) :id=quantum-painter
+### Quantum Painter ([#10174](https://github.com/qmk/qmk_firmware/pull/10174)) {#quantum-painter}
QMK has had support for small OLED displays for some time now, but hasn't really gained too much ability to draw to panels other than the SSD1306 or SH1106 panels.
@@ -26,7 +26,7 @@ Quantum Painter is not supported on AVR due to complexity and size constraints.
:::
-### Encoder Mapping ([#13286](https://github.com/qmk/qmk_firmware/pull/13286)) :id=encoder-mapping
+### Encoder Mapping ([#13286](https://github.com/qmk/qmk_firmware/pull/13286)) {#encoder-mapping}
One of the long-standing complaints with Encoders is that there has been no easy way to configure them in user keymaps. [#13286](https://github.com/qmk/qmk_firmware/pull/13286) added support for [Encoder Mapping](feature_encoders.md#encoder-map), which allows users to define encoder functionality in a similar way to their normal keymap.
@@ -36,17 +36,17 @@ This is not yet supported by QMK Configurator. It is also unlikely to ever be su
:::
-## Changes Requiring User Action :id=changes-requiring-user-action
+## Changes Requiring User Action {#changes-requiring-user-action}
-### `RESET` => `QK_BOOT` ([#17037](https://github.com/qmk/qmk_firmware/pull/17037)) :id=reset-2-qk_boot
+### `RESET` => `QK_BOOT` ([#17037](https://github.com/qmk/qmk_firmware/pull/17037)) {#reset-2-qk_boot}
QMK is always in the process of picking up support for new hardware platforms. One of the side-effects for future integrations has shown that QMK's usage of `RESET` as a keycode is causing naming collisions. As a result, [#17037](https://github.com/qmk/qmk_firmware/pull/17037) changed usages of `RESET` to the new keycode `QK_BOOT` in the majority of default-like keymaps. At this stage the old keycode is still usable but will likely be removed in the next breaking changes cycle. Users with keymaps containing `RESET` should also move to `QK_BOOT`.
-### Sendstring keycode overhaul ([#16941](https://github.com/qmk/qmk_firmware/pull/16941)) :id=sendstring-keycodes
+### Sendstring keycode overhaul ([#16941](https://github.com/qmk/qmk_firmware/pull/16941)) {#sendstring-keycodes}
Some keycodes used with `SEND_STRING` and its relatives have been deprecated and may have their old keycode usages removed at a later date. The list of [deprecated keycodes](https://github.com/qmk/qmk_firmware/blob/ebd402788346aa6e88bde1486b2a835684d40d39/quantum/send_string_keycodes.h#L456-L505) should be consulted to determine if you're using one of the older names (the first identifier after `#define`) -- you should swap to the newer variant (the second identifier on the same line).
-### Pillow Installation ([#17133](https://github.com/qmk/qmk_firmware/pull/17133)) :id=pillow-install
+### Pillow Installation ([#17133](https://github.com/qmk/qmk_firmware/pull/17133)) {#pillow-install}
The merge of Quantum Painter added some new dependencies in the QMK CLI, most notably _Pillow_, which requires some installation in order for the CLI to function. If you've got an existing installation, you'll need to run some commands in order to get things working:
@@ -70,7 +70,7 @@ On Linux or WSL:
python3 -m pip install --user --upgrade qmk
```
-### Updated Keyboard Codebases :id=updated-keyboard-codebases
+### Updated Keyboard Codebases {#updated-keyboard-codebases}
The following keyboards have had their source moved within QMK:
@@ -105,7 +105,7 @@ The following keyboards have had their source moved within QMK:
---
-## Full changelist :id=full-changelist
+## Full changelist {#full-changelist}
Core:
* Quantum Painter ([#10174](https://github.com/qmk/qmk_firmware/pull/10174))
diff --git a/docs/ChangeLog/20220827.md b/docs/ChangeLog/20220827.md
index b672b57cb89..d205584e41a 100644
--- a/docs/ChangeLog/20220827.md
+++ b/docs/ChangeLog/20220827.md
@@ -1,28 +1,28 @@
# QMK Breaking Changes - 2022 August 27 Changelog
-## Notable Features :id=notable-features
+## Notable Features {#notable-features}
-### Add Raspberry Pi RP2040 support ([#14877](https://github.com/qmk/qmk_firmware/pull/14877), [#17514](https://github.com/qmk/qmk_firmware/pull/17514), [#17516](https://github.com/qmk/qmk_firmware/pull/17516), [#17519](https://github.com/qmk/qmk_firmware/pull/17519), [#17612](https://github.com/qmk/qmk_firmware/pull/17612), [#17512](https://github.com/qmk/qmk_firmware/pull/17512), [#17557](https://github.com/qmk/qmk_firmware/pull/17557), [#17817](https://github.com/qmk/qmk_firmware/pull/17817), [#17839](https://github.com/qmk/qmk_firmware/pull/17839), [#18100](https://github.com/qmk/qmk_firmware/pull/18100)) :id=rp2040-support
+### Add Raspberry Pi RP2040 support ([#14877](https://github.com/qmk/qmk_firmware/pull/14877), [#17514](https://github.com/qmk/qmk_firmware/pull/17514), [#17516](https://github.com/qmk/qmk_firmware/pull/17516), [#17519](https://github.com/qmk/qmk_firmware/pull/17519), [#17612](https://github.com/qmk/qmk_firmware/pull/17612), [#17512](https://github.com/qmk/qmk_firmware/pull/17512), [#17557](https://github.com/qmk/qmk_firmware/pull/17557), [#17817](https://github.com/qmk/qmk_firmware/pull/17817), [#17839](https://github.com/qmk/qmk_firmware/pull/17839), [#18100](https://github.com/qmk/qmk_firmware/pull/18100)) {#rp2040-support}
QMK _finally_ picked up support for RP2040-based boards, such as the Raspberry Pi Pico, the Sparkfun Pro Micro RP2040, and the Adafruit KB2040. One of QMK's newest collaborators, _@KarlK90_, effectively did `/micdrop` with RP2040, with a massive set of changes to both QMK and the repository QMK uses for the base platform support, ChibiOS[-Contrib]. There has been a flurry of development this breaking changes cycle related to RP2040 from a large number of contributors -- so much so that almost all standard QMK hardware subsystems are supported.
Check the [RP2040 platform development page](platformdev_rp2040.md) for all supported peripherals and other hardware implementation details.
-### Allow `qmk flash` to use prebuilt firmware binaries ([#16584](https://github.com/qmk/qmk_firmware/pull/16584)) :id=cli-flash-binaries
+### Allow `qmk flash` to use prebuilt firmware binaries ([#16584](https://github.com/qmk/qmk_firmware/pull/16584)) {#cli-flash-binaries}
A long-requested capability of the QMK CLI has been the ability to flash binaries directly, without needing to build a firmware. QMK provides prebuilt `develop`-based default firmwares on our [CI page](https://qmk.tzarc.io/) -- normally people would need [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases/latest) to flash them. This new functionality written by _@Erovia_ allows `qmk flash` to be provided the prebuilt file instead, simplifying the workflow for people who haven't got Toolbox available.
-## Changes Requiring User Action :id=changes-requiring-user-action
+## Changes Requiring User Action {#changes-requiring-user-action}
### Default layers dropped from 32 to 16 ([#15286](https://github.com/qmk/qmk_firmware/pull/15286))
QMK allows for controlling the maximum number of layers it supports through `LAYER_STATE_(8|16|32)BIT`. Each definition allows for the same number of maximum layers -- `LAYER_STATE_8BIT` => 8 layers. There is also a corresponding firmware size decrease that goes along with smaller numbers -- given the vast majority of users don't use more than 16 layers the default has been swapped to 16. AVR users who were not previously specifying their max layer count may see some space freed up as a result.
-### `RESET` => `QK_BOOT` ([#17940](https://github.com/qmk/qmk_firmware/pull/17940)) :id=reset-2-qk_boot
+### `RESET` => `QK_BOOT` ([#17940](https://github.com/qmk/qmk_firmware/pull/17940)) {#reset-2-qk_boot}
Following the last breaking changes cycle, QMK has been migrating usages of `RESET` to `QK_BOOT` due to naming collisions with our upstream board support packages. [#17940](https://github.com/qmk/qmk_firmware/pull/17940) converts user keymaps across to use the new keycode name. `RESET` should also move to `QK_BOOT`.
-### Updated Keyboard Codebases :id=updated-keyboard-codebases
+### Updated Keyboard Codebases {#updated-keyboard-codebases}
The following keyboards have had their source moved within QMK:
@@ -33,7 +33,7 @@ The following keyboards have had their source moved within QMK:
| idobao/id80/v1/ansi | idobao/id80/v2/ansi |
| idobao/id80/v1/iso | idobao/id80/v2/iso |
-### Data-driven USB IDs Refactoring ([#18152](https://github.com/qmk/qmk_firmware/pull/18152)) :id=usb-ids-Refactoring
+### Data-driven USB IDs Refactoring ([#18152](https://github.com/qmk/qmk_firmware/pull/18152)) {#usb-ids-Refactoring}
QMK has decided to deprecate the specification of USB IDs inside `config.h` in favour of `info.json`, eventually leaving data-driven as the only method to specify USB information.
@@ -67,25 +67,25 @@ Replaced by `info.json`:
- From 2022 Aug 27, specifying USB information in `config.h` will produce warnings during build but will still function as previously.
- From 2022 Nov 26, specifying USB information in `config.h` will cause compilation to fail.
-## Notable core changes :id=notable-core
+## Notable core changes {#notable-core}
-### Board converters ([#17514](https://github.com/qmk/qmk_firmware/pull/17514), [#17603](https://github.com/qmk/qmk_firmware/pull/17603), [#17711](https://github.com/qmk/qmk_firmware/pull/17711), [#17827](https://github.com/qmk/qmk_firmware/pull/17827), [#17593](https://github.com/qmk/qmk_firmware/pull/17593), [#17652](https://github.com/qmk/qmk_firmware/pull/17652), [#17595](https://github.com/qmk/qmk_firmware/pull/17595)) :id=board-converters
+### Board converters ([#17514](https://github.com/qmk/qmk_firmware/pull/17514), [#17603](https://github.com/qmk/qmk_firmware/pull/17603), [#17711](https://github.com/qmk/qmk_firmware/pull/17711), [#17827](https://github.com/qmk/qmk_firmware/pull/17827), [#17593](https://github.com/qmk/qmk_firmware/pull/17593), [#17652](https://github.com/qmk/qmk_firmware/pull/17652), [#17595](https://github.com/qmk/qmk_firmware/pull/17595)) {#board-converters}
Historically QMK had a `CONVERT_TO_PROTON_C` directive for `rules.mk` to allow people to replace an AVR-based Pro Micro with a QMK Proton C. Global parts shortages have prompted people to create their own pin-compatible boards -- QMK has made this conversion generic and now allows for drop-in replacements for a lot more boards. see the [Converters Feature](feature_converters.md) documentation for the full list of supported replacement boards -- in this breaking changes cycle we've gone from 1 to 7.
-### Add cli command to import keyboard|keymap|kbfirmware ([#16668](https://github.com/qmk/qmk_firmware/pull/16668)) :id=cli-import
+### Add cli command to import keyboard|keymap|kbfirmware ([#16668](https://github.com/qmk/qmk_firmware/pull/16668)) {#cli-import}
To help with importing keyboards and keymaps from other sources, _@zvecr_ added [#16668](https://github.com/qmk/qmk_firmware/pull/16668) which adds a new set of commands to the CLI to automatically import keyboards (`qmk import-keyboard -h`), keymaps (`qmk import-keymap -h`), and kbfirmware definitions (`qmk import-kbfirmware -h`) into QMK.
The now-EOL kbfirmware allowed people who aren't set up with QMK the ability to create keyboard firmwares without requiring a full installation of QMK. Unfortunately, it targets a 7-year-old version of QMK -- adding frustration for users who want the newest features, as well as for QMK maintainers who have to spend time explaining why QMK can't just accept a drive-by code drop from kbfirmware. With any luck, this new command helps both camps!
-### Generic wear-leveling for EEPROM emulation ([#16996](https://github.com/qmk/qmk_firmware/pull/16996), [#17376](https://github.com/qmk/qmk_firmware/pull/17376), [#18102](https://github.com/qmk/qmk_firmware/pull/18102)) :id=wear-leveling
+### Generic wear-leveling for EEPROM emulation ([#16996](https://github.com/qmk/qmk_firmware/pull/16996), [#17376](https://github.com/qmk/qmk_firmware/pull/17376), [#18102](https://github.com/qmk/qmk_firmware/pull/18102)) {#wear-leveling}
QMK has had the ability to write to internal MCU flash in order to emulate EEPROM for some time now, but it was only limited to a small number of MCUs. The base HAL used by QMK for a large number of ARM devices provides a "proper" embedded MCU flash driver, so _@tzarc_ decoupled the wear-leveling algorithm from the old flash writing code, improved it, wrote some tests, and enabled its use for a much larger number of other devices... including RP2040's XIP flash, and external SPI NOR Flash.
See the [EEPROM Driver](eeprom_driver.md) documentation for more information.
-### Pointing Device Improvements ([#16371](https://github.com/qmk/qmk_firmware/pull/16371), [#17111](https://github.com/qmk/qmk_firmware/pull/17111), [#17176](https://github.com/qmk/qmk_firmware/pull/17176), [#17482](https://github.com/qmk/qmk_firmware/pull/17482), [#17776](https://github.com/qmk/qmk_firmware/pull/17776), [#17613](https://github.com/qmk/qmk_firmware/pull/17613)) :id=pointing-device-improvements
+### Pointing Device Improvements ([#16371](https://github.com/qmk/qmk_firmware/pull/16371), [#17111](https://github.com/qmk/qmk_firmware/pull/17111), [#17176](https://github.com/qmk/qmk_firmware/pull/17176), [#17482](https://github.com/qmk/qmk_firmware/pull/17482), [#17776](https://github.com/qmk/qmk_firmware/pull/17776), [#17613](https://github.com/qmk/qmk_firmware/pull/17613)) {#pointing-device-improvements}
Ever since Pointing Device Driver support and Split Pointing Device support were added by _@drashna_ and _@daskygit_, there has been increased interest in the development of the pointing device subsystem and its associated code.
@@ -102,7 +102,7 @@ Other related changes:
---
-## Full changelist :id=full-changelist
+## Full changelist {#full-changelist}
Core:
* Tentative Teensy 3.5 support ([#14420](https://github.com/qmk/qmk_firmware/pull/14420))
diff --git a/docs/ChangeLog/20221126.md b/docs/ChangeLog/20221126.md
index a15ac70817f..a0a169ad34d 100644
--- a/docs/ChangeLog/20221126.md
+++ b/docs/ChangeLog/20221126.md
@@ -1,14 +1,14 @@
# QMK Breaking Changes - 2022 November 26 Changelog
-## Notable Features :id=notable-features
+## Notable Features {#notable-features}
-### Autocorrect ([#15699](https://github.com/qmk/qmk_firmware/pull/15699)) :id=autocorrect
+### Autocorrect ([#15699](https://github.com/qmk/qmk_firmware/pull/15699)) {#autocorrect}
_@getreuer_ in their infinite wisdom decided that autocorrect was a feature needed by QMK. As is customary, _@drashna_ adapted it to core and got it into a state that everyone else can use it. See [Feature: Autocorrect](feature_autocorrect.md) for more ifnormation (grin).
-## Changes Requiring User Action :id=changes-requiring-user-action
+## Changes Requiring User Action {#changes-requiring-user-action}
-### Updated Keyboard Codebases :id=updated-keyboard-codebases
+### Updated Keyboard Codebases {#updated-keyboard-codebases}
The following keyboards have had their source moved within QMK:
@@ -23,7 +23,7 @@ The following keyboards have had their source moved within QMK:
| handwired/hillside/52 | hillside/52 |
| maple_computing/christmas_tree/V2017 | maple_computing/christmas_tree/v2017 |
-### Keycodes refactoring :id=keycodes-overhaul-user-action
+### Keycodes refactoring {#keycodes-overhaul-user-action}
QMK's keycodes got a very significant overhaul this breaking changes cycle, with the bulk of the work done by _@zvecr_ and _@fauxpark_ -- renaming, reordering, removing has been their focus in this area. In an attempt to standardise interoperation with host applications, keycode values now have strong versioning so that any connected application has confidence that the keys it thinks exist on the board actually match up with what's compiled in. These strongly-versioned keycode definitions are now published online and will not change, so tools that remap keycodes have a reference to work with. In future versions of QMK, any new or changed keycodes will result in a new version specification. See [API docs](api_docs.md#qmk-constants) for more information on the published versions if you're writing a tool to manage keycodes.
@@ -37,7 +37,7 @@ Keycode aliases have been put in place in most cases to cater for "old names" be
:::
-### Configuration Item Refactoring :id=config-refactoring
+### Configuration Item Refactoring {#config-refactoring}
A number of configuration items have been renamed for consistency.
@@ -70,7 +70,7 @@ Joystick configuration:
| JOYSTICK_AXES_COUNT | JOYSTICK_AXIS_COUNT |
| JOYSTICK_AXES_RESOLUTION | JOYSTICK_AXIS_RESOLUTION |
-### Data-driven USB IDs Refactoring ([#18152](https://github.com/qmk/qmk_firmware/pull/18152)) :id=usb-ids-Refactoring
+### Data-driven USB IDs Refactoring ([#18152](https://github.com/qmk/qmk_firmware/pull/18152)) {#usb-ids-Refactoring}
QMK has decided to deprecate the specification of USB IDs inside `config.h` in favour of `info.json`, leaving data-driven as the only method to specify USB information. As per the deprecation schedule put forward last breaking changes cycle, USB information must be specified in `info.json` instead.
@@ -96,7 +96,7 @@ Replaced by `info.json`:
}
```
-### LED Indicator callback refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/18450)) :id=led-callback-refactor
+### LED Indicator callback refactoring ([#14864](https://github.com/qmk/qmk_firmware/pull/18450)) {#led-callback-refactor}
_RGB Matrix_ and _LED Matrix_ Indicator display code was traditionally difficult to override in keymaps as they did not follow the standard pattern of `bool *_kb()` deferring to `bool *_user()` functions, allowing signalling to the higher level that processing had already been done.
@@ -132,15 +132,15 @@ bool rgb_matrix_indicators_kb(void) {
The equivalent transformations should be done for LED Matrix boards.
-### Unicode mode refactoring :id=unicode-mode-renaming
+### Unicode mode refactoring {#unicode-mode-renaming}
Unicode modes were renamed in order to prevent collision with equivalent keycodes. The available values for `UNICODE_SELECTED_MODES` changed -- see [Feature: Unicode](feature_unicode.md#setting-the-input-mode) for the new list of values and how to configure them.
-## Notable core changes :id=notable-core
+## Notable core changes {#notable-core}
This breaking changes cycle, a lot of the core changes are related to cleanup and refactoring -- commonly called "tech debt".
-### Keycodes refactoring :id=keycodes-overhaul-core-changes
+### Keycodes refactoring {#keycodes-overhaul-core-changes}
We aren't going to list each and every change -- they're far too numerous -- instead, we'll just list the related PRs in order to convey just how wide-reaching these changes were:
@@ -185,7 +185,7 @@ We aren't going to list each and every change -- they're far too numerous -- ins
* Remove legacy sendstring keycodes ([#18749](https://github.com/qmk/qmk_firmware/pull/18749))
* Reworked backlight keycodes. ([#18961](https://github.com/qmk/qmk_firmware/pull/18961))
-### Board Converters :id=board-converters
+### Board Converters {#board-converters}
There was additional work in the space of board converters -- historically QMK allowed for "converting" a Pro Micro build to a QMK Proton-C build. The last few versions of QMK have added support for replacement boards much like the Proton-C, and this quarter was no exception:
@@ -197,7 +197,7 @@ There was additional work in the space of board converters -- historically QMK a
See [Feature: Converters](feature_converters.md) for the full list of board conversions available.
-### Pointing and Digitizer device updates :id=pointing-and-digitizer
+### Pointing and Digitizer device updates {#pointing-and-digitizer}
Both pointing devices and digitizer got a host of updates this cycle. Inertia, automatic mouse layers, fixes for preventing sleep... you even get more buttons with digitizers!
@@ -211,7 +211,7 @@ Both pointing devices and digitizer got a host of updates this cycle. Inertia, a
* Invert pointing device motion pin for cirque touchpads ([#18404](https://github.com/qmk/qmk_firmware/pull/18404))
* Refactor more host code (programmable button & digitizer) ([#18565](https://github.com/qmk/qmk_firmware/pull/18565))
-## Full changelist :id=full-changelist
+## Full changelist {#full-changelist}
Core:
* quantum: led: split out led_update_ports() for customization of led behaviour ([#14452](https://github.com/qmk/qmk_firmware/pull/14452))
diff --git a/docs/ChangeLog/20230226.md b/docs/ChangeLog/20230226.md
index df5095ac7b5..b2098c9918b 100644
--- a/docs/ChangeLog/20230226.md
+++ b/docs/ChangeLog/20230226.md
@@ -1,8 +1,8 @@
# QMK Breaking Changes - 2023 February 26 Changelog
-## Changes Requiring User Action :id=changes-requiring-user-action
+## Changes Requiring User Action {#changes-requiring-user-action}
-### `IGNORE_MOD_TAP_INTERRUPT` behaviour changes ([#15741](https://github.com/qmk/qmk_firmware/pull/15741)) :id=i-m-t-i
+### `IGNORE_MOD_TAP_INTERRUPT` behaviour changes ([#15741](https://github.com/qmk/qmk_firmware/pull/15741)) {#i-m-t-i}
`IGNORE_MOD_TAP_INTERRUPT_PER_KEY` has been removed and `IGNORE_MOD_TAP_INTERRUPT` deprecated as a stepping stone towards making `IGNORE_MOD_TAP_INTERRUPT` the new default behavior for mod-taps in the future.
@@ -48,7 +48,7 @@ bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
For more information, you are invited to read the sections on [IGNORE_MOD_TAP_INTERRUPT](tap_hold.md#ignore-mod-tap-interrupt) and [HOLD_ON_OTHER_KEY_PRESS](tap_hold.md#hold-on-other-key-press) in the page on [Tap-Hold configuration options](tap_hold.md).
-### `TAPPING_FORCE_HOLD` => `QUICK_TAP_TERM` ([#17007](https://github.com/qmk/qmk_firmware/pull/17007)) :id=quick-tap-term
+### `TAPPING_FORCE_HOLD` => `QUICK_TAP_TERM` ([#17007](https://github.com/qmk/qmk_firmware/pull/17007)) {#quick-tap-term}
`TAPPING_FORCE_HOLD` feature is now replaced by `QUICK_TAP_TERM`. Instead of turning off auto-repeat completely, user will have the option to configure a `QUICK_TAP_TERM` in milliseconds. When the user holds a tap-hold key after tapping it within `QUICK_TAP_TERM`, QMK will send the tap keycode to the host, enabling auto-repeat.
@@ -82,7 +82,7 @@ uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t *record) {
For more details, please read the updated documentation section on [Quick Tap Term](tap_hold.md#quick-tap-term).
-### Leader Key Rework :id=leader-key-rework ([#19632](https://github.com/qmk/qmk_firmware/pull/19632))
+### Leader Key Rework {#leader-key-rework} ([#19632](https://github.com/qmk/qmk_firmware/pull/19632))
The Leader Key feature API has been significantly improved, along with some bugfixes and added tests.
@@ -108,7 +108,7 @@ void leader_end_user(void) {
For more information please see the [Leader Key documentation](feature_leader_key.md).
-### Updated Keyboard Codebases :id=updated-keyboard-codebases
+### Updated Keyboard Codebases {#updated-keyboard-codebases}
The following keyboards have had their source moved within QMK:
@@ -130,7 +130,7 @@ The following keyboards have had their source moved within QMK:
| the_uni | stenothe_uni |
| xelus/xs60 | xelus/xs60/soldered |
-## Notable core changes :id=notable-core
+## Notable core changes {#notable-core}
As per last breaking changes cycle, there has been _a lot_ of emphasis on behind-the-scenes changes, mainly around consolidation of core subsystems and constant values, as well as addressing tech debt. Whilst not outwardly visible, this cleanup and refactoring should start paying dividends as it simplifies future development and maintenance.
@@ -142,7 +142,7 @@ A handful of examples:
* Many more configuration options have moved into `info.json`, such as backlight, encoders
* Additional unit tests to ensure keycode behaviours don't accidentally change
-## Full changelist :id=full-changelist
+## Full changelist {#full-changelist}
Core:
* Remove IGNORE_MOD_TAP_INTERRUPT_PER_KEY in favour of HOLD_ON_OTHER_KEY_PRESS_PER_KEY ([#15741](https://github.com/qmk/qmk_firmware/pull/15741))
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index b25ab69d511..a6d91ee5b80 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -37,9 +37,9 @@ For more information on bitwise operators in C, click [here](https://en.wikipedi
In practice, this means that you can check whether a given modifier is active with `get_mods() & MOD_BIT(KC_)` (see the [list of modifier keycodes](keycodes_basic.md#modifiers)) or with `get_mods() & MOD_MASK_` if the difference between left and right hand modifiers is not important and you want to match both. Same thing can be done for one-shot modifiers if you replace `get_mods()` with `get_oneshot_mods()`.
-To check that *only* a specific set of mods is active at a time, AND the modifier state and your desired mod mask as explained above and compare the result to the mod mask itself: `get_mods() & == `.
+To check that *only* a specific set of mods is active at a time, use a simple equality operator: `get_mods() == `.
-For example, let's say you want to trigger a piece of custom code if one-shot left control and one-shot left shift are on but every other one-shot mods are off. To do so, you can compose the desired mod mask by combining the mod bits for left control and shift with `(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))` and then plug it in: `get_oneshot_mods() & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT)) == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))`. Using `MOD_MASK_CS` instead for the mod bitmask would have forced you to press four modifier keys (both versions of control and shift) to fulfill the condition.
+For example, let's say you want to trigger a piece of custom code if one-shot left control and one-shot left shift are on but every other one-shot mods are off. To do so, you can compose the desired mod mask by combining the mod bits for left control and shift with `(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))` and then plug it in: `get_oneshot_mods() == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))`. Using `MOD_MASK_CS` instead for the mod bitmask would have forced you to press four modifier keys (both versions of control and shift) to fulfill the condition.
The full list of mod masks is as follows:
@@ -91,7 +91,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ESC:
// Detect the activation of only Left Alt
- if ((get_mods() & MOD_BIT(KC_LALT)) == MOD_BIT(KC_LALT)) {
+ if (get_mods() == MOD_BIT(KC_LALT)) {
if (record->event.pressed) {
// No need to register KC_LALT because it's already active.
// The Alt modifier will apply on this KC_TAB.
@@ -184,4 +184,4 @@ This page used to encompass a large set of features. We have moved many sections
## Key Overrides {#key-overrides}
-* [Key Overrides](feature_key_overrides.md)
\ No newline at end of file
+* [Key Overrides](feature_key_overrides.md)
diff --git a/docs/feature_combo.md b/docs/feature_combo.md
index 7c508d0973b..c8f3f95b31d 100644
--- a/docs/feature_combo.md
+++ b/docs/feature_combo.md
@@ -58,7 +58,7 @@ const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM sd_combo[] = {KC_S, KC_D, COMBO_END};
-combo_t key_combos[COMBO_COUNT] = {
+combo_t key_combos[] = {
[AB_ESC] = COMBO(ab_combo, KC_ESC),
[JK_TAB] = COMBO(jk_combo, KC_TAB),
[QW_SFT] = COMBO(qw_combo, KC_LSFT),
diff --git a/docs/feature_pointing_device.md b/docs/feature_pointing_device.md
index 22c544c0401..891d29303e4 100644
--- a/docs/feature_pointing_device.md
+++ b/docs/feature_pointing_device.md
@@ -450,6 +450,75 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
This allows you to toggle between scrolling and cursor movement by pressing the DRAG_SCROLL key.
+### Advanced Drag Scroll
+
+Sometimes, like with the Cirque trackpad, you will run into issues where the scrolling may be too fast.
+
+Here is a slightly more advanced example of drag scrolling. You will be able to change the scroll speed based on the values in set in `SCROLL_DIVISOR_H` and `SCROLL_DIVISOR_V`. This bit of code is also set up so that instead of toggling the scrolling state with set_scrolling = !set_scrolling, the set_scrolling variable is set directly to record->event.pressed. This way, the drag scrolling will only be active while the DRAG_SCROLL button is held down.
+
+```c
+enum custom_keycodes {
+ DRAG_SCROLL = SAFE_RANGE,
+};
+
+bool set_scrolling = false;
+
+// Modify these values to adjust the scrolling speed
+#define SCROLL_DIVISOR_H 8.0
+#define SCROLL_DIVISOR_V 8.0
+
+// Variables to store accumulated scroll values
+float scroll_accumulated_h = 0;
+float scroll_accumulated_v = 0;
+
+// Function to handle mouse reports and perform drag scrolling
+report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
+ // Check if drag scrolling is active
+ if (set_scrolling) {
+ // Calculate and accumulate scroll values based on mouse movement and divisors
+ scroll_accumulated_h += (float)mouse_report.x / SCROLL_DIVISOR_H;
+ scroll_accumulated_v += (float)mouse_report.y / SCROLL_DIVISOR_V;
+
+ // Assign integer parts of accumulated scroll values to the mouse report
+ mouse_report.h = (int8_t)scroll_accumulated_h;
+ mouse_report.v = (int8_t)scroll_accumulated_v;
+
+ // Update accumulated scroll values by subtracting the integer parts
+ scroll_accumulated_h -= (int8_t)scroll_accumulated_h;
+ scroll_accumulated_v -= (int8_t)scroll_accumulated_v;
+
+ // Clear the X and Y values of the mouse report
+ mouse_report.x = 0;
+ mouse_report.y = 0;
+ }
+ return mouse_report;
+}
+
+// Function to handle key events and enable/disable drag scrolling
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case DRAG_SCROLL:
+ // Toggle set_scrolling when DRAG_SCROLL key is pressed or released
+ set_scrolling = record->event.pressed;
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+// Function to handle layer changes and disable drag scrolling when not in AUTO_MOUSE_DEFAULT_LAYER
+layer_state_t layer_state_set_user(layer_state_t state) {
+ // Disable set_scrolling if the current layer is not the AUTO_MOUSE_DEFAULT_LAYER
+ if (get_highest_layer(state) != AUTO_MOUSE_DEFAULT_LAYER) {
+ set_scrolling = false;
+ }
+ return state;
+}
+
+```
+
+
## Split Examples
The following examples make use the `SPLIT_POINTING_ENABLE` functionality and show how to manipulate the mouse report for a scrolling mode.
diff --git a/docs/ja/cli.md b/docs/ja/cli.md
index 9e8169a84e0..42a58f0e5d4 100644
--- a/docs/ja/cli.md
+++ b/docs/ja/cli.md
@@ -1,19 +1,19 @@
-# QMK CLI :id=qmk-cli
+# QMK CLI {#qmk-cli}
-## 概要 :id=overview
+## 概要 {#overview}
QMK CLI を使用すると QMK キーボードの構築と作業が簡単になります。QMK ファームウェアの取得とコンパイル、キーマップの作成などのようなタスクを簡素化し合理化するためのコマンドを多く提供します。
-### 必要事項 :id=requirements
+### 必要事項 {#requirements}
QMK は Python 3.6 以上を必要とします。我々は必要事項の数を少なくしようとしていますが、[`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt) に列挙されているパッケージもインストールする必要があります。これらは QMK CLI をインストールするときに自動的にインストールされます。
-### Homebrew を使ったインストール (macOS、いくつかの Linux) :id=install-using-homebrew
+### Homebrew を使ったインストール (macOS、いくつかの Linux) {#install-using-homebrew}
[Homebrew](https://brew.sh) をインストールしている場合は、タップして QMK をインストールすることができます:
@@ -23,7 +23,7 @@ export QMK_HOME='~/qmk_firmware' # オプション、`qmk_firmware` の場所を
qmk setup # これは `qmk/qmk_firmware` をクローンし、オプションでビルド環境をセットアップします
```
-### pip を使ってインストール :id=install-using-easy_install-or-pip
+### pip を使ってインストール {#install-using-easy_install-or-pip}
上で列挙した中にあなたのシステムがない場合は、QMK を手動でインストールすることができます。最初に、python 3.6 (以降)をインストールしていて、pip をインストールしていることを確認してください。次に以下のコマンドを使って QMK をインストールします:
@@ -33,7 +33,7 @@ export QMK_HOME='~/qmk_firmware' # オプション、`qmk_firmware` の場所を
qmk setup # これは `qmk/qmk_firmware` をクローンし、オプションでビルド環境をセットアップします
```
-### 他のオペレーティングシステムのためのパッケージ :id=packaging-for-other-operating-systems
+### 他のオペレーティングシステムのためのパッケージ {#packaging-for-other-operating-systems}
より多くのオペレーティングシステム用に `qmk` パッケージを作成および保守する人を探しています。OS 用のパッケージを作成する場合は、以下のガイドラインに従ってください:
diff --git a/docs/ja/cli_configuration.md b/docs/ja/cli_configuration.md
index 6ed791b4713..c1b4f2b0cbe 100644
--- a/docs/ja/cli_configuration.md
+++ b/docs/ja/cli_configuration.md
@@ -74,7 +74,7 @@ default.keymap: None -> default
qmk config compile
-### 単一キーの例 :id=single-key-example
+### 単一キーの例 {#single-key-example}
qmk config compile.keyboard
diff --git a/docs/ja/config_options.md b/docs/ja/config_options.md
index 6135721a42b..49b7a5e3837 100644
--- a/docs/ja/config_options.md
+++ b/docs/ja/config_options.md
@@ -141,7 +141,7 @@ QMK での全ての利用可能な設定にはデフォルトがあります。
* `#define STRICT_LAYER_RELEASE`
* キーリリースがどのレイヤーから来たのかを覚えるのではなく、現在のレイヤースタックを使って強制的に評価されるようにします (高度なケースに使われます)
-## 設定可能な挙動 :id=behaviors-that-can-be-configured
+## 設定可能な挙動 {#behaviors-that-can-be-configured}
* `#define TAPPING_TERM 200`
* タップがホールドになるまでの時間。
@@ -188,7 +188,7 @@ QMK での全ての利用可能な設定にはデフォルトがあります。
* `#define TAP_HOLD_CAPS_DELAY 80`
* MacOS で特別な処理が行われるため、`KC_CAPSLOCK` を使う時にタップホールドキー (`LT`, `MT`) に遅延を設定します。この値はミリ秒で、定義されていない場合はデフォルトは80msです。macOS については、これを200以上に設定すると良いでしょう。
-## RGB ライト設定 :id=rgb-light-configuration
+## RGB ライト設定 {#rgb-light-configuration}
* `#define RGB_DI_PIN D7`
* WS2812 の DI 端子につなぐピン
@@ -347,7 +347,7 @@ QMK での全ての利用可能な設定にはデフォルトがあります。
* `bootloadHID`
* `USBasp`
-## 機能オプション :id=feature-options
+## 機能オプション {#feature-options}
これらを使って特定の機能のビルドを有効または無効にします。有効にすればするほどファームウェアが大きくなり、MCU には大きすぎるファームウェアを構築するリスクがあります。
diff --git a/docs/ja/contributing.md b/docs/ja/contributing.md
index 811a1a9a198..56e0b567bd0 100644
--- a/docs/ja/contributing.md
+++ b/docs/ja/contributing.md
@@ -26,7 +26,7 @@ QMK について質問したい場合は、[OLKB Subreddit](https://reddit.com/r
* https://opensource.com/life/16/10/how-ask-technical-questions
* http://www.catb.org/esr/faqs/smart-questions.html
-# プロジェクトの概要 :id=project-overview
+# プロジェクトの概要 {#project-overview}
QMK は主に C で書かれており、特定の機能と部品は C++ で書かれています。QMK は、キーボードの中の組み込みプロセッサ、特に AVR ([LUFA](https://www.fourwalledcubicle.com/LUFA.php)) と ARM ([ChibiOS](https://www.chibios.org)) を対象にしています。すでに Arduino プログラミングに精通している場合は、多くの概念と制限がおなじみのものです。QMK に貢献するには Arduino を使用した経験は必要ありません。
@@ -57,14 +57,14 @@ QMK は主に C で書かれており、特定の機能と部品は C++ で書
14. レビューをしているメンテナが変更を推奨する場合は、プルリクエストに変更を加えます。
15. プルリクエストがマージされた後で成功を祝います!
-# コーディング規約 :id=coding-conventions
+# コーディング規約 {#coding-conventions}
私たちのスタイルのほとんどは簡単に理解できます。C あるいは Python のいずれかに精通している場合は、ローカルスタイルにそれほど問題はないはずです。
* [コーディング規約 - C](ja/coding_conventions_c.md)
* [コーディング規約 - Python](ja/coding_conventions_python.md)
-# 一般的なガイドライン :id=general-guidelines
+# 一般的なガイドライン {#general-guidelines}
QMK には幾つかの異なるタイプの変更があり、それぞれ異なるレベルの厳密さが必要です。どのような種類の変更を行っても、次のガイドラインに留意してください。
@@ -110,7 +110,7 @@ enum my_keycodes {
};
```
-### ドキュメントのプレビュー :id=previewing-the-documentation
+### ドキュメントのプレビュー {#previewing-the-documentation}
開発環境をセットアップした場合は、プルリクエストを開く前に以下のコマンドを `qmk_firmware/` フォルダから実行することで、あなたの変更をプレビューすることができます:
@@ -172,6 +172,6 @@ enum my_keycodes {
QMK で物事がどのようにレイアウトされるかについて明確なビジョンを維持するために、私たちはリファクタリングを詳細に計画し、変更をする協力者がいます。リファクタリングのアイデアあるいは提案がある場合は、[issue を開いてください](https://github.com/qmk/qmk_firmware/issues)。QMK を改善する方法についてお話ししたいと思います。
-# 行動規範は私にとって何を意味しますか? :id=what-does-the-code-of-conduct-mean-for-me
+# 行動規範は私にとって何を意味しますか? {#what-does-the-code-of-conduct-mean-for-me}
私たちの[行動規範](https://github.com/qmk/qmk_firmware/blob/master/CODE_OF_CONDUCT.md)は、身元に関係なくあなたがプロジェクトの全員を敬意と礼儀を持って扱う責任があることを意味します。あなたが行動規範に記載されている不適切な行動やコメントの被害者である場合は、私たちはあなたのためにここにおり、私たちのコードに従って虐待者が適切に懲戒されるように最善を尽くします。
diff --git a/docs/ja/custom_matrix.md b/docs/ja/custom_matrix.md
index 194960d77c9..e1ec410e65b 100644
--- a/docs/ja/custom_matrix.md
+++ b/docs/ja/custom_matrix.md
@@ -31,7 +31,7 @@ keyboards//matrix.c
SRC += matrix.c
```
-## マトリックスコードの部分置き換え :id=lite
+## マトリックスコードの部分置き換え {#lite}
カスタムマトリックスを実装する際、定型コードを書かなくてすむように、さまざまなスキャン関数のデフォルト実装を提供しています。
diff --git a/docs/ja/custom_quantum_functions.md b/docs/ja/custom_quantum_functions.md
index ba7d4ad1f07..8d42456e156 100644
--- a/docs/ja/custom_quantum_functions.md
+++ b/docs/ja/custom_quantum_functions.md
@@ -9,7 +9,7 @@
このページでは、QMK に関する特別な知識は想定していませんが、[QMK の理解](ja/understanding_qmk.md)を読むとより根本的なレベルで何が起きているかを理解するのに役立ちます。
-## コア、キーボード、キーマップ階層 :id=a-word-on-core-vs-keyboards-vs-keymap
+## コア、キーボード、キーマップ階層 {#a-word-on-core-vs-keyboards-vs-keymap}
私たちは QMK を階層として構造化しました:
@@ -39,7 +39,7 @@ enum my_keycodes {
};
```
-## 任意のキーコードの挙動のプログラミング :id=programming-the-behavior-of-any-keycode
+## 任意のキーコードの挙動のプログラミング {#programming-the-behavior-of-any-keycode}
既存のキーの挙動を上書きしたい場合、あるいは新しいキーについて挙動を定義する場合、`process_record_kb()` および `process_record_user()` 関数を使うべきです。これらは実際のキーイベントが処理される前のキー処理中に QMK によって呼び出されます。これらの関数が `true` を返す場合、QMK はキーコードを通常通りに処理します。これは、キーを置き換えるのではなく、キーの機能を拡張するのに便利です。これらの関数が `false` を返す場合、QMK は通常のキー処理をスキップし、必要なキーのアップまたはダウンイベントを送信するのかはユーザ次第です。
@@ -136,7 +136,7 @@ void keyboard_pre_init_user(void) {
}
```
-### `keyboard_pre_init_*` 関数のドキュメント :id=keyboard_pre_init_-function-documentation
+### `keyboard_pre_init_*` 関数のドキュメント {#keyboard_pre_init_-function-documentation}
* キーボード/リビジョン: `void keyboard_pre_init_kb(void)`
* キーマップ: `void keyboard_pre_init_user(void)`
@@ -177,7 +177,7 @@ void keyboard_post_init_user(void) {
* キーボード/リビジョン: `void keyboard_post_init_kb(void)`
* キーマップ: `void keyboard_post_init_user(void)`
-# マトリックススキャンコード :id=matrix-scanning-code
+# マトリックススキャンコード {#matrix-scanning-code}
可能であれば常に `process_record_*()` を使ってキーボードをカスタマイズし、その方法でイベントをフックし、コードがキーボードのパフォーマンスに悪影響を与えないようにします。ただし、まれにマトリックススキャンにフックする必要があります。これらの関数は1秒あたり少なくとも10回は呼び出されるため、これらの関数のコードのパフォーマンスに非常に注意してください。
@@ -194,7 +194,7 @@ void keyboard_post_init_user(void) {
カスタムマトリックススキャンコードが必要な場合は、この関数を使う必要があります。また、カスタムステータス出力 (LED あるいはディスプレイなど)や、ユーザが入力していない場合でも定期的にトリガーするその他の機能のために使うことができます。
-# キーボードハウスキーピング :id=keyboard-housekeeping
+# キーボードハウスキーピング {#keyboard-housekeeping}
* キーボード/リビジョン: `void housekeeping_task_kb(void)`
* キーマップ: `void housekeeping_task_user(void)`
@@ -228,7 +228,7 @@ void suspend_wakeup_init_user(void) {
* キーボード/リビジョン : `void suspend_power_down_kb(void)` および `void suspend_wakeup_init_user(void)`
* キーマップ: `void suspend_power_down_kb(void)` および `void suspend_wakeup_init_user(void)`
-# レイヤー切り替えコード :id=layer-change-code
+# レイヤー切り替えコード {#layer-change-code}
これはレイヤーが切り替えられるたびにコードを実行します。レイヤー表示あるいはカスタムレイヤー処理に役立ちます。
diff --git a/docs/ja/documentation_templates.md b/docs/ja/documentation_templates.md
index 0ba3caf5ec1..d9776be46f2 100644
--- a/docs/ja/documentation_templates.md
+++ b/docs/ja/documentation_templates.md
@@ -7,7 +7,7 @@
このページでは、新しいキーマップやキーボードを QMK に提出する際に使うべきテンプレートをまとめています。
-## キーマップ `readme.md` テンプレート :id=keyboard-readmemd-template
+## キーマップ `readme.md` テンプレート {#keyboard-readmemd-template}
ほとんどのキーマップには、レイアウトを表す画像があります。画像を作成するには、[Keyboard Layout Editor](https://keyboard-layout-editor.com) を使うことができます。画像は [Imgur](https://imgur.com) や別のホスティングサービスにアップロードし、プルリクエストに画像を含めないでください。
diff --git a/docs/ja/faq_build.md b/docs/ja/faq_build.md
index a1c55407ee4..541053820c8 100644
--- a/docs/ja/faq_build.md
+++ b/docs/ja/faq_build.md
@@ -22,7 +22,7 @@
`make` を `sudo` で実行することは一般的には良い考えでは***なく***、可能であれば前者の方法のいずれかを使うべきです。
-### Linux の `udev` ルール :id=linux-udev-rules
+### Linux の `udev` ルール {#linux-udev-rules}
Linux では、ブートローダデバイスと通信するには適切な権限が必要です。ファームウェアを書き込む時に `sudo` を使うか(非推奨)、`/etc/udev/rules.d/` に[このファイル](https://github.com/qmk/qmk_firmware/tree/master/util/udev/50-qmk.rules)を配置することで、通信することができます。
diff --git a/docs/ja/faq_debug.md b/docs/ja/faq_debug.md
index 236f43a6ef5..d469ef2a4a7 100644
--- a/docs/ja/faq_debug.md
+++ b/docs/ja/faq_debug.md
@@ -7,7 +7,7 @@
このページは、キーボードのトラブルシューティングについての様々な一般的な質問を説明します。
-## デバッグ :id=debugging
+## デバッグ {#debugging}
`rules.mk` へ `CONSOLE_ENABLE = yes` の設定をするとキーボードはデバッグ情報を出力します。デフォルトの出力は非常に限られたものですが、デバッグモードをオンにすることでデバッグ情報の量を増やすことが出来ます。キーマップの `DEBUG` キーコードを使用するか、デバッグモードを有効にする[コマンド](ja/feature_command.md)機能を使用するか、以下のコードをキーマップに追加します。
diff --git a/docs/ja/faq_misc.md b/docs/ja/faq_misc.md
index 24a0e18235d..31ca7d2017a 100644
--- a/docs/ja/faq_misc.md
+++ b/docs/ja/faq_misc.md
@@ -5,7 +5,7 @@
git diff 0.12.45 HEAD -- docs/faq_misc.md | cat
-->
-## どうやってキーボードをテストすればいいですか? :id=testing
+## どうやってキーボードをテストすればいいですか? {#testing}
通常、キーボードのテストは非常に簡単です。全てのキーをひとつずつ押して、期待するキーが送信されることを確認します。例え QMK で動作していない場合でも、[QMK Configurator](https://config.qmk.fm/#/test/) のテストモードを使用すると、キーボードをチェックできます。
diff --git a/docs/ja/feature_advanced_keycodes.md b/docs/ja/feature_advanced_keycodes.md
index 2416c742a0e..3f91125126e 100644
--- a/docs/ja/feature_advanced_keycodes.md
+++ b/docs/ja/feature_advanced_keycodes.md
@@ -1,4 +1,4 @@
-# 修飾キー :id=modifier-keys
+# 修飾キー {#modifier-keys}
-## イントロダクション :id=introduction
+## イントロダクション {#introduction}
セミコロンキーを1回叩くと、セミコロンが送信されます。2回素早く叩くと、コロンが送信されます。3回叩くと、あなたのキーボードのLEDが激しく踊るように明滅します。これは、タップダンスでできることの一例です。それは、コミュニティが提案したとても素敵なファームウェアの機能の1つで、[algernon](https://github.com/algernon) がプルリクエスト [#451](https://github.com/qmk/qmk_firmware/pull/451) で考えて作ったものです。algernon が述べる機能は次の通りです:
この機能を使うと、特定のキーが、タップした回数に基づいて異なる振る舞いをします。そして、割り込みがあった時は、割り込み前に上手く処理されます。
-## タップダンスの使い方 :id=how-to-use
+## タップダンスの使い方 {#how-to-use}
最初に、あなたの `rules.mk` ファイルで `TAP_DANCE_ENABLE = yes` と設定する必要があります。なぜならば、デフォルトでは無効になっているからです。これでファームウェアのサイズが1キロバイトほど増加します。
オプションで、あなたの `config.h` ファイルに次のような設定を追加して、`TAPPING_TERM` の時間をカスタマイズしたほうが良いです。
@@ -50,7 +50,7 @@
最後に、5番目のオプションは、もし、タップダンスキーをコードに追加した後、非タップダンスキーが奇妙な振る舞いを始めた時に特に役に立ちます。ありうる問題は、あなたがタップダンスキーを使いやすくするために `TAPPING_TERM` の時間を変更した結果、その他のキーが割り込みを処理する方法が変わってしまったというものです。
-## 実装の詳細 :id=implementation
+## 実装の詳細 {#implementation}
さて、説明の大部分はここまでです! 以下に挙げているいくつかの例に取り組むことができるようになり、あなた自身のタップダンスの機能を開発できるようになります。しかし、もし、あなたが裏側で起きていることをより深く理解したいのであれば、続けてそれが全てどのように機能するかの説明を読みましょう!
@@ -66,9 +66,9 @@
柔軟性のために、タップダンスは、キーコードの組み合わせにも、ユーザー関数にもなることができます。後者は、より高度なタップ回数の制御や、LED を点滅させたり、バックライトをいじったり、等々の制御を可能にします。これは、1つの共用体と、いくつかの賢いマクロによって成し遂げられています。
-## 実装例 :id=examples
+## 実装例 {#examples}
-### シンプルな実装例 :id=simple-example
+### シンプルな実装例 {#simple-example}
ここに1つの定義のための簡単な例があります。
@@ -96,7 +96,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
```
-### 複雑な実装例 :id=complex-examples
+### 複雑な実装例 {#complex-examples}
このセクションでは、いくつかの複雑なタップダンスの例を詳しく説明します。
例で使われている全ての列挙型はこのように宣言します。
@@ -111,7 +111,7 @@ enum {
X_TAP_DANCE
};
```
-#### 例1: 1回タップすると `:` を送信し、2回タップすると `;` を送信する :id=example-1
+#### 例1: 1回タップすると `:` を送信し、2回タップすると `;` を送信する {#example-1}
```c
void dance_cln_finished(qk_tap_dance_state_t *state, void *user_data) {
@@ -136,7 +136,7 @@ qk_tap_dance_action_t tap_dance_actions[] = {
};
```
-#### 例2: 100回タップした後に "Safety Dance!" を送信します :id=example-2
+#### 例2: 100回タップした後に "Safety Dance!" を送信します {#example-2}
```c
void dance_egg(qk_tap_dance_state_t *state, void *user_data) {
@@ -151,7 +151,7 @@ qk_tap_dance_action_t tap_dance_actions[] = {
};
```
-#### 例3: 1つずつ LED を点灯させてから消灯する :id=example-3
+#### 例3: 1つずつ LED を点灯させてから消灯する {#example-3}
```c
// タップする毎に、LED を右から左に点灯します。
@@ -201,7 +201,7 @@ qk_tap_dance_action_t tap_dance_actions[] = {
};
```
-#### 例4: クアッドファンクションのタップダンス :id=example-4
+#### 例4: クアッドファンクションのタップダンス {#example-4}
[DanielGGordon](https://github.com/danielggordon) によるもの
@@ -346,7 +346,7 @@ qk_tap_dance_action_t tap_dance_actions[] = {
> この設定の "hold" は、タップダンスのタイムアウト(`ACTION_TAP_DANCE_FN_ADVANCED_TIME` 参照)の **後** に起こります。即座に "hold" を得るためには、条件から `state->interrupted` の確認を除きます。結果として、複数回のタップのための時間をより多く持つことで快適な長いタップの期限を使うことができ、そして、"hold" のために長く待たないようにすることができます(2倍の `TAPPING TERM` で開始してみてください)。
-#### 例5: タップダンスを高度なモッドタップとレイヤータップキーに使う :id=example-5
+#### 例5: タップダンスを高度なモッドタップとレイヤータップキーに使う {#example-5}
タップダンスは、タップされたコードが基本的なキーコード以外の場合に、 `MT()` と `LT()` マクロをエミュレートするのに利用できます。これは、通常 `Shift` を必要とする '(' や '{' のようなキーや、`Control + X` のように他の修飾されたキーコードをタップされたキーコードとして送信することに役立ちます。
@@ -432,7 +432,7 @@ qk_tap_dance_action_t tap_dance_actions[] = {
それぞれのタップダンスキーコードをキーマップに含めるときは、`TD()` マクロでキーコードをラップします。例: `TD(ALT_LP)`
-#### 例6: タップダンスを一時的なレイヤー切り替えとレイヤートグルキーに使う :id=example-6
+#### 例6: タップダンスを一時的なレイヤー切り替えとレイヤートグルキーに使う {#example-6}
タップダンスは、MO(layer) と TG(layer) 機能を模倣することにも使用できます。この例では、1回タップすると `KC_QUOT` 、1回押してそのまま押し続けたら `MO(_MY_LAYER)` 、2回タップしたときは `TG(_MY_LAYER)` として機能するキーを設定します。
diff --git a/docs/ja/feature_unicode.md b/docs/ja/feature_unicode.md
index 8ce54903df2..89c961f696e 100644
--- a/docs/ja/feature_unicode.md
+++ b/docs/ja/feature_unicode.md
@@ -15,7 +15,7 @@ Unicode 文字はキーボードから直接入力することができます!
4. キーマップに Unicode キーコードを追加します。
-## 1. メソッド :id=methods
+## 1. メソッド {#methods}
QMK は、Unicode 入力を有効にし、キーマップに Unicode 文字を追加するための3つの異なる方法をサポートします。それぞれに柔軟性と使いやすさの点で長所と短所があります。あなたの使い方に最適なものを選んでください。
@@ -23,7 +23,7 @@ QMK は、Unicode 入力を有効にし、キーマップに Unicode 文字を
-### 1.1. Basic Unicode :id=basic-unicode
+### 1.1. Basic Unicode {#basic-unicode}
多少制限はありますが、最も使いやすい方法です。Unicode 文字をキーコードとしてキーマップ自体に格納するため、`0x7FFF` までのコードポイントのみをサポートします。これは、ほとんどの現代言語(東アジアを含む)の文字と記号を対象としますが、絵文字は対象外です。
@@ -37,7 +37,7 @@ UNICODE_ENABLE = yes
-### 1.2. Unicode Map :id=unicode-map
+### 1.2. Unicode Map {#unicode-map}
このメソッドは、標準の文字の範囲に加えて、絵文字、古代文字、珍しい記号なども対象にしています。実際、可能な全てのコードポイント(`0x10FFFF`まで)がサポートされています。Unicode 文字は独立のマッピングテーブルに格納されています。キーマップファイルに `unicode_map` 配列を維持する必要があります。これには最大 16384 エントリを含めることができます。
@@ -75,7 +75,7 @@ const uint32_t PROGMEM unicode_map[] = {
-### 1.3. UCIS :id=ucis
+### 1.3. UCIS {#ucis}
この方法も全ての可能なコードポイントをサポートします。Unicode Map の方法と同様に、キーマップファイル内にマッピングテーブルを保持する必要があります。ただし、この機能のための組み込みのキーコードはありません — この機能を起動するカスタムキーコードあるいは関数を作成する必要があります。
@@ -111,7 +111,7 @@ UCIS 入力を使うには、`qk_ucis_start()` を呼び出します。次に、
[`process_ucis.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_ucis.c) でこれらの関数のデフォルトの実装を見つけることができます。
-## 2. Input モード :id=input-modes
+## 2. Input モード {#input-modes}
QMK での Unicode の入力は、マクロのように、OS への一連の文字列を入力することで動作します。残念ながら、これが行われる方法はプラットフォームによって異なります。特に各プラットフォームでは Unicode 入力を引き起こすために、異なるキーの組み合わせが必要です。従って、対応する入力モードが QMK で設定されなければなりません。
@@ -152,7 +152,7 @@ _Unicode 16進数入力_ 入力ソースの使用は、Option + 左矢印およ
デフォルトでは、このモードは Compose キーとして右 Alt (`KC_RALT`) を使いますが、これは WinCompose 設定と他のキーで [`UNICODE_KEY_WINC`](#input-key-configuration) を定義することで変更できます。
-## 3. 入力モードの設定 :id=setting-the-input-mode
+## 3. 入力モードの設定 {#setting-the-input-mode}
目的の入力モードを設定するには、以下の定義を `config.h` に追加します:
diff --git a/docs/ja/feature_userspace.md b/docs/ja/feature_userspace.md
index d523f2c094d..83cc882c407 100644
--- a/docs/ja/feature_userspace.md
+++ b/docs/ja/feature_userspace.md
@@ -61,7 +61,7 @@ ifdef RGB_ENABLE
endif
```
-### デフォルトのユーザスペースの上書き :id=override-default-userspace
+### デフォルトのユーザスペースの上書き {#override-default-userspace}
デフォルトでは、使用されるユーザスペース名はキーマップ名と同じです。状況によってはこれは望ましくありません。例えば、[レイアウト](ja/feature_layouts.md)機能を使う場合、異なるキーマップに同じ名前 (例えば、ANSI および ISO) を使うことができません。レイアウトに `mylayout-ansi` や `mylayout-iso` という名前を付け、以下の行をレイアウトの `rules.mk` に追加します:
@@ -124,7 +124,7 @@ along with this program. If not, see .
より複雑な例については、[`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna) のユーザスペースを調べてください。
-### カスタマイズされた関数 :id=customized-functions
+### カスタマイズされた関数 {#customized-functions}
QMK には、[`_quantum`、`_kb` および `_user` バージョン](ja/custom_quantum_functions.md#a-word-on-core-vs-keyboards-vs-keymap)を持つ使用可能な[関数](custom_quantum_functions.md)が山ほどあります。 ほとんどの場合、これらの関数のユーザバージョンを使う必要があります。しかし問題はそれらをユーザスペースで使う場合、キーマップで使うことができるバージョンが無いことです。
diff --git a/docs/ja/gpio_control.md b/docs/ja/gpio_control.md
index 7bece3e0c7c..cfc32c0b9cd 100644
--- a/docs/ja/gpio_control.md
+++ b/docs/ja/gpio_control.md
@@ -1,4 +1,4 @@
-# GPIO 制御 :id=gpio-control
+# GPIO 制御 {#gpio-control}
-## 3. QMK の設定を行う :id=set-up-qmk
+## 3. QMK の設定を行う {#set-up-qmk}
diff --git a/docs/ja/newbs_git_best_practices.md b/docs/ja/newbs_git_best_practices.md
index 7ba16fce751..d9a78cc9580 100644
--- a/docs/ja/newbs_git_best_practices.md
+++ b/docs/ja/newbs_git_best_practices.md
@@ -1,4 +1,4 @@
-# QMK における Git 運用作法 :id=best-git-practices-for-working-with-qmk
+# QMK における Git 運用作法 {#best-git-practices-for-working-with-qmk}
-## 总览 :id=overview
+## 总览 {#overview}
QMK CLI可以让构建QMK键盘的过程更轻松一些,我们已提供的一批指令可用于简化及流式化地处理一些常见工作,如获取并编译QMK固件,创建新的键映射等。
-### 依赖项 :id=requirements
+### 依赖项 {#requirements}
QMK依赖Python 3.6或更高版本。我们已经尽力缩减依赖项,但在[`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt)中的依赖项是需安装的包。在安装QMK CLI时这些依赖项也会自动完成安装。
-### 通过 Homebrew 安装(macOS 及部分 Linux) :id=install-using-homebrew
+### 通过 Homebrew 安装(macOS 及部分 Linux) {#install-using-homebrew}
若已安装[Homebrew](https://brew.sh),可以按如下方法安装QMK:
@@ -23,7 +23,7 @@ export QMK_HOME='~/qmk_firmware' # 可选,指定 `qmk_firmware` 的路径
qmk setup # 拉取 `qmk/qmk_firmware` 并选择性地配置构建环境
```
-### 通过 pip 安装 :id=install-using-easy_install-or-pip
+### 通过 pip 安装 {#install-using-easy_install-or-pip}
未在以上列出的操作系统可以手动安装QMK。首先确认已安装Python 3.6(或更高版本)及 pip,然后通过如下指令安装QMK:
@@ -33,7 +33,7 @@ export QMK_HOME='~/qmk_firmware' # 可选,指定 `qmk_firmware` 的路径
qmk setup # 拉取 `qmk/qmk_firmware` 并选择性地配置构建环境
```
-### 其它操作系统的安装包 :id=packaging-for-other-operating-systems
+### 其它操作系统的安装包 {#packaging-for-other-operating-systems}
我们正在寻求可以制作维护更多操作系统下可用的 `qmk` 安装包的开发者,若您愿意为您的操作系统制作安装包,请遵循如下指引:
diff --git a/docs/zh-cn/cli_commands.md b/docs/zh-cn/cli_commands.md
index ed36ed975bb..8bef26a4d27 100644
--- a/docs/zh-cn/cli_commands.md
+++ b/docs/zh-cn/cli_commands.md
@@ -89,7 +89,7 @@ qmk compile -j -kb
qmk compile -j 0 -kb
```
-## `qmk flash` :id=qmk-flash
+## `qmk flash` {#qmk-flash}
该命令与 `qmk compile` 类似,但额外地可以指定bootloader。bootloader参数是可选的,默认会指定为 `:flash`。可通过 `-bl ` 来指定bootloader。请查阅[刷写固件](zh-cn/flashing.md)指引以深入了解可用的bootloader信息。
diff --git a/docs/zh-cn/configurator_default_keymaps.md b/docs/zh-cn/configurator_default_keymaps.md
index 9f990286f24..ce1bec1602f 100644
--- a/docs/zh-cn/configurator_default_keymaps.md
+++ b/docs/zh-cn/configurator_default_keymaps.md
@@ -1,4 +1,4 @@
-# 向QMK配置器中添加默认键映射 :id=adding-default-keymaps
+# 向QMK配置器中添加默认键映射 {#adding-default-keymaps}
-## 怎么对键盘进行测试? :id=testing
+## 怎么对键盘进行测试? {#testing}
测试键盘就简单直接,把每个按键按一遍后确认发送的是正确的就行。也可以使用[QMK配置器](https://config.qmk.fm/#/test/)的测试模式检查键盘,即便这键盘没有运行着QMK。
diff --git a/docs/zh-cn/flashing.md b/docs/zh-cn/flashing.md
index 559b8742d03..dd7f31dd100 100644
--- a/docs/zh-cn/flashing.md
+++ b/docs/zh-cn/flashing.md
@@ -256,7 +256,7 @@ BOOTLOADER = stm32-dfu
* `:st-link-cli`: 通过ST-Link CLI工具集而非dfu-util进行刷写,需要有ST-Link电子狗。
* `:st-flash`: 通过[STLink工具](https://github.com/stlink-org/stlink)内的 `st-flash` 工具而非dfu-util进行刷写,需要有ST-Link电子狗。
-## STM32duino :id=stm32duino
+## STM32duino {#stm32duino}
该bootloader几乎是STM32F103板专用,该型号出厂不带USB DFU bootloader。其源代码及预编译好的二进制文件[在这里](https://github.com/rogerclarkmelbourne/STM32duino-bootloader)。
diff --git a/docs/zh-cn/hand_wire.md b/docs/zh-cn/hand_wire.md
index 97e80251fe9..f4dcc5c3820 100644
--- a/docs/zh-cn/hand_wire.md
+++ b/docs/zh-cn/hand_wire.md
@@ -33,7 +33,7 @@
首先从安装键轴及卫星轴开始,考虑厚度及材质的影响,可能需要热熔胶来固定。
-## 设计矩阵 :id=planning-the-matrix
+## 设计矩阵 {#planning-the-matrix}
如果你在参考已有的手工搭建指南(比如[自制键盘固件目录](https://github.com/qmk/qmk_firmware/tree/master/keyboards/handwired)下的键盘),可以跳过该步骤,确保是按照文中的矩阵方案连线即可。
@@ -51,7 +51,7 @@
必须时刻留意矩阵的行列数总和不能超出控制器的IO引脚数,因此上图的方案可以使用 Proton C 或 Teensy++ 控制器,但常规 Teensy 或 Pro Micro 不行。
-### 常见微控制器板 :id=common-microcontroller-boards
+### 常见微控制器板 {#common-microcontroller-boards}
| 控制器板 | 控制器方案 | # I/O引脚数 | 引脚图 |
| :------------ |:-------------:| ------:| ------ |
@@ -250,6 +250,6 @@ Keyboard Firmware Builder提供的源代码是QMK的,但版本是2017年初的
以前本页内还有其它内容,现在我们已经将他们单独分离出去了。以下的内容是一些重定向链接,以供那些从老链接地址过来的人能找到自己要找的内容。
-## 序: 键盘矩阵是如何工作的(以及为什么需要二极管) :id=preamble-how-a-keyboard-matrix-works-and-why-we-need-diodes
+## 序: 键盘矩阵是如何工作的(以及为什么需要二极管) {#preamble-how-a-keyboard-matrix-works-and-why-we-need-diodes}
* [键盘矩阵是如何工作的](zh-cn/how_a_matrix_works.md)
diff --git a/docs/zh-cn/keymap.md b/docs/zh-cn/keymap.md
index 91a5ac0c664..1a04acb8659 100644
--- a/docs/zh-cn/keymap.md
+++ b/docs/zh-cn/keymap.md
@@ -8,7 +8,7 @@
QMK键映射定义在C源文件中,其数据结构上是一个容纳了数组的数组。外层数组容纳了各个层,内层各数组则为层内的键列表。基本所有键盘都通过定义 `LAYOUT()` 宏来创建该两级数组。
-## 键映射与配列 :id=keymap-and-layers
+## 键映射与配列 {#keymap-and-layers}
在QMK中, **`const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS]`** 容纳了多个 **层**, 每个**层**下包含了由**16位**的**动作码**所组成的键映射信息。 最多可以定义**32个层**。
对于常规键的定义,其**动作码**的高8位皆为0,低8位保存了USB HID中使用的各个键对应的**键码**。
@@ -42,7 +42,7 @@ QMK键映射定义在C源文件中,其数据结构上是一个容纳了数组
有时,键映射中存储的动作码在一些文档中也被称作键码,主要是由TMK沿袭而来的习惯。
-### 键映射的层状态 :id=keymap-layer-status
+### 键映射的层状态 {#keymap-layer-status}
键映射的层状态由两个32位参数决定:
diff --git a/docs/zh-cn/newbs_building_firmware.md b/docs/zh-cn/newbs_building_firmware.md
index b9c82e73b07..c41d6e35340 100644
--- a/docs/zh-cn/newbs_building_firmware.md
+++ b/docs/zh-cn/newbs_building_firmware.md
@@ -51,7 +51,7 @@
:::
-## 构建固件 :id=build-your-firmware
+## 构建固件 {#build-your-firmware}
对键映射做完修改后,该编译固件了。回到终端中使用编译命令:
diff --git a/docs/zh-cn/newbs_getting_started.md b/docs/zh-cn/newbs_getting_started.md
index 09ac43ca62c..0aacf8f1ab6 100644
--- a/docs/zh-cn/newbs_getting_started.md
+++ b/docs/zh-cn/newbs_getting_started.md
@@ -22,7 +22,7 @@
:::
-## 2. 准备构建环境 :id=set-up-your-environment
+## 2. 准备构建环境 {#set-up-your-environment}
我们已经尽力让QMK易于配置了,你只要准备好Linux或Unix环境,剩余的交给QMK来安装。
@@ -135,7 +135,7 @@ Arch系环境下可以使用官方源安装命令行程序(在写这份文档
-## 3. 执行QMK配置 :id=set-up-qmk
+## 3. 执行QMK配置 {#set-up-qmk}
*译注:由于setup过程中需要从github clone依赖项,请先确保科学上网*
diff --git a/docs/zh-cn/newbs_git_using_your_master_branch.md b/docs/zh-cn/newbs_git_using_your_master_branch.md
index bec8fa99691..aa0ec047494 100644
--- a/docs/zh-cn/newbs_git_using_your_master_branch.md
+++ b/docs/zh-cn/newbs_git_using_your_master_branch.md
@@ -46,7 +46,7 @@ git push origin master
以上操作会切换到 `master` 分支,从QMK仓库拉取refs,下载QMK `master` 分支的当前版本,并上传至你的fork中。
-## 进行编辑 :id=making-changes
+## 进行编辑 {#making-changes}
要进行编辑,通过如下命令创建一个新分支:
diff --git a/docs/zh-cn/newbs_learn_more_resources.md b/docs/zh-cn/newbs_learn_more_resources.md
index c6f9c8bea08..56c911ea6d1 100644
--- a/docs/zh-cn/newbs_learn_more_resources.md
+++ b/docs/zh-cn/newbs_learn_more_resources.md
@@ -13,13 +13,13 @@
* [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – 一个站在新人视角,探讨如何使用QMK固件的个人博客。
-### 命令行操作参考资料 :id=command-line-resources
+### 命令行操作参考资料 {#command-line-resources}
* [Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line)
* [Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html)
* [Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
-### 文本编辑器相关参考资料 :id=text-editor-resources
+### 文本编辑器相关参考资料 {#text-editor-resources}
对文本编辑器有选择困难?
* [a great introduction to the subject](https://learntocodewith.me/programming/basics/text-editors/)
diff --git a/docs/zh-cn/newbs_testing_debugging.md b/docs/zh-cn/newbs_testing_debugging.md
index 0016d3b8169..87b5099ba25 100644
--- a/docs/zh-cn/newbs_testing_debugging.md
+++ b/docs/zh-cn/newbs_testing_debugging.md
@@ -8,7 +8,7 @@
[已移到这里](zh-cn/faq_misc.md#testing)
-## 调试 :id=debugging
+## 调试 {#debugging}
[已移到这里](zh-cn/faq_debug.md#debugging)
diff --git a/docs/zh-cn/reference_glossary.md b/docs/zh-cn/reference_glossary.md
index e1dfccddd21..73ee480c6a4 100644
--- a/docs/zh-cn/reference_glossary.md
+++ b/docs/zh-cn/reference_glossary.md
@@ -171,7 +171,7 @@ USB主机就是你的电脑,或者你的键盘所插的任何设备。
[新建一个issue](https://github.com/qmk/qmk_firmware/issues) ,想好你的问题,或许你所问的术语就会添加到这里。创建一个PR帮我们添加需要添加的术语当然坠吼了:)
-## 中文翻译术语特别说明(terms of Chinese translation):id=terms-of-zh-cn-translate
+## 中文翻译术语特别说明(terms of Chinese translation){#terms-of-zh-cn-translate}
!>如果你对QMK文档翻译中的细节不关心,请跳过该节
由于语言及文化差异,QMK英文文档中的部分内容,很难在**保持原句结构**的情况下,完美地翻译为中文,而保持翻译前后的语句结构一致对于开源代码的文档翻译来讲十分重要,这样才能确保不同的文档贡献者不会*夹带私货*,防止不同的翻译风格、不同的翻译水准、不同的理解与润色最终产生糟糕的混合。
diff --git a/docs/zh-cn/translating.md b/docs/zh-cn/translating.md
index fa80ffd7f85..e484881a0cd 100644
--- a/docs/zh-cn/translating.md
+++ b/docs/zh-cn/translating.md
@@ -18,7 +18,7 @@
```markdown
[建立你的环境](zh-cn/newbs-getting-started.md#set-up-your-environment)
-## 建立你的环境 :id=set-up-your-environment
+## 建立你的环境 {#set-up-your-environment}
```
在翻译后,以下文件也需要进行修改:
diff --git a/keyboards/bahm/aster_ergo/info.json b/keyboards/bahm/aster_ergo/info.json
new file mode 100644
index 00000000000..13897bcbc68
--- /dev/null
+++ b/keyboards/bahm/aster_ergo/info.json
@@ -0,0 +1,336 @@
+{
+ "manufacturer": "Mechlovin Studio",
+ "keyboard_name": "Aster Ergo",
+ "maintainer": "Bahm",
+ "processor": "STM32F103",
+ "bootloader": "stm32duino",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B1", "B0", "A7", "A6", "B4", "B3", "A15", "A5", "A2", "A1"],
+ "rows": ["B7", "B6", "B5", "B11", "B10", "A4"]
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x8701",
+ "vid": "0xBA00"
+ },
+ "indicators": {
+ "caps_lock": "B2",
+ "scroll_lock": "C13"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 8.25, "y": 0},
+ {"matrix": [0, 8], "x": 9.25, "y": 0},
+ {"matrix": [0, 9], "x": 10.25, "y": 0},
+ {"matrix": [0, 10], "x": 11.25, "y": 0},
+ {"matrix": [0, 11], "x": 12.25, "y": 0},
+ {"matrix": [0, 12], "x": 13.25, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0},
+ {"matrix": [0, 14], "x": 17.25, "y": 0},
+ {"matrix": [0, 15], "x": 18.25, "y": 0},
+ {"matrix": [0, 16], "x": 19.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": 8.5, "y": 1.25},
+ {"matrix": [1, 8], "x": 9.5, "y": 1.25},
+ {"matrix": [1, 9], "x": 10.5, "y": 1.25},
+ {"matrix": [1, 10], "x": 11.5, "y": 1.25},
+ {"matrix": [1, 11], "x": 12.5, "y": 1.25},
+ {"matrix": [1, 12], "x": 13.5, "y": 1.25},
+ {"matrix": [1, 13], "x": 14.5, "y": 1.25},
+ {"matrix": [2, 13], "x": 15.5, "y": 1.25},
+ {"matrix": [1, 14], "x": 17.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 18.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 19.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": 8, "y": 2.25},
+ {"matrix": [2, 7], "x": 9, "y": 2.25},
+ {"matrix": [2, 8], "x": 10, "y": 2.25},
+ {"matrix": [2, 9], "x": 11, "y": 2.25},
+ {"matrix": [2, 10], "x": 12, "y": 2.25},
+ {"matrix": [2, 11], "x": 13, "y": 2.25},
+ {"matrix": [2, 12], "x": 14, "y": 2.25},
+ {"matrix": [3, 13], "x": 15, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 17.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 18.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 19.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": 8.25, "y": 3.25},
+ {"matrix": [3, 7], "x": 9.25, "y": 3.25},
+ {"matrix": [3, 8], "x": 10.25, "y": 3.25},
+ {"matrix": [3, 9], "x": 11.25, "y": 3.25},
+ {"matrix": [3, 10], "x": 12.25, "y": 3.25},
+ {"matrix": [3, 11], "x": 13.25, "y": 3.25},
+ {"matrix": [3, 12], "x": 14.25, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [5, 7], "x": 7.75, "y": 4.25},
+ {"matrix": [4, 7], "x": 8.75, "y": 4.25},
+ {"matrix": [4, 8], "x": 9.75, "y": 4.25},
+ {"matrix": [4, 9], "x": 10.75, "y": 4.25},
+ {"matrix": [4, 10], "x": 11.75, "y": 4.25},
+ {"matrix": [4, 11], "x": 12.75, "y": 4.25},
+ {"matrix": [4, 12], "x": 13.75, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 15.5, "y": 4.25},
+ {"matrix": [4, 15], "x": 18.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, 4], "x": 3.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 5], "x": 5, "y": 5.25, "w": 2.25},
+ {"matrix": [5, 8], "x": 7.75, "y": 5.25, "w": 2.75},
+ {"matrix": [5, 9], "x": 10.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 13, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 14.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 17.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 18.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 19.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 8.25, "y": 0},
+ {"matrix": [0, 8], "x": 9.25, "y": 0},
+ {"matrix": [0, 9], "x": 10.25, "y": 0},
+ {"matrix": [0, 10], "x": 11.25, "y": 0},
+ {"matrix": [0, 11], "x": 12.25, "y": 0},
+ {"matrix": [0, 12], "x": 13.25, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0},
+ {"matrix": [0, 14], "x": 17.25, "y": 0},
+ {"matrix": [0, 15], "x": 18.25, "y": 0},
+ {"matrix": [0, 16], "x": 19.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": 8.5, "y": 1.25},
+ {"matrix": [1, 8], "x": 9.5, "y": 1.25},
+ {"matrix": [1, 9], "x": 10.5, "y": 1.25},
+ {"matrix": [1, 10], "x": 11.5, "y": 1.25},
+ {"matrix": [1, 11], "x": 12.5, "y": 1.25},
+ {"matrix": [1, 12], "x": 13.5, "y": 1.25},
+ {"matrix": [1, 13], "x": 14.5, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 17.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 18.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 19.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": 8, "y": 2.25},
+ {"matrix": [2, 7], "x": 9, "y": 2.25},
+ {"matrix": [2, 8], "x": 10, "y": 2.25},
+ {"matrix": [2, 9], "x": 11, "y": 2.25},
+ {"matrix": [2, 10], "x": 12, "y": 2.25},
+ {"matrix": [2, 11], "x": 13, "y": 2.25},
+ {"matrix": [2, 12], "x": 14, "y": 2.25},
+ {"matrix": [3, 13], "x": 15, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 17.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 18.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 19.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": 8.25, "y": 3.25},
+ {"matrix": [3, 7], "x": 9.25, "y": 3.25},
+ {"matrix": [3, 8], "x": 10.25, "y": 3.25},
+ {"matrix": [3, 9], "x": 11.25, "y": 3.25},
+ {"matrix": [3, 10], "x": 12.25, "y": 3.25},
+ {"matrix": [3, 11], "x": 13.25, "y": 3.25},
+ {"matrix": [3, 12], "x": 14.25, "y": 3.25, "w": 2.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [5, 7], "x": 7.75, "y": 4.25},
+ {"matrix": [4, 7], "x": 8.75, "y": 4.25},
+ {"matrix": [4, 8], "x": 9.75, "y": 4.25},
+ {"matrix": [4, 9], "x": 10.75, "y": 4.25},
+ {"matrix": [4, 10], "x": 11.75, "y": 4.25},
+ {"matrix": [4, 11], "x": 12.75, "y": 4.25},
+ {"matrix": [4, 12], "x": 13.75, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 18.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, 4], "x": 3.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 5], "x": 5, "y": 5.25, "w": 2.25},
+ {"matrix": [5, 8], "x": 7.75, "y": 5.25, "w": 2.75},
+ {"matrix": [5, 9], "x": 10.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 13, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 14.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 17.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 18.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 19.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.25, "y": 0},
+ {"matrix": [0, 6], "x": 6.25, "y": 0},
+ {"matrix": [0, 7], "x": 8.25, "y": 0},
+ {"matrix": [0, 8], "x": 9.25, "y": 0},
+ {"matrix": [0, 9], "x": 10.25, "y": 0},
+ {"matrix": [0, 10], "x": 11.25, "y": 0},
+ {"matrix": [0, 11], "x": 12.25, "y": 0},
+ {"matrix": [0, 12], "x": 13.25, "y": 0},
+ {"matrix": [0, 13], "x": 14.5, "y": 0},
+ {"matrix": [0, 14], "x": 17.25, "y": 0},
+ {"matrix": [0, 15], "x": 18.25, "y": 0},
+ {"matrix": [0, 16], "x": 19.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": 8.5, "y": 1.25},
+ {"matrix": [1, 8], "x": 9.5, "y": 1.25},
+ {"matrix": [1, 9], "x": 10.5, "y": 1.25},
+ {"matrix": [1, 10], "x": 11.5, "y": 1.25},
+ {"matrix": [1, 11], "x": 12.5, "y": 1.25},
+ {"matrix": [1, 12], "x": 13.5, "y": 1.25},
+ {"matrix": [1, 13], "x": 14.5, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 17.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 18.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 19.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": 8, "y": 2.25},
+ {"matrix": [2, 7], "x": 9, "y": 2.25},
+ {"matrix": [2, 8], "x": 10, "y": 2.25},
+ {"matrix": [2, 9], "x": 11, "y": 2.25},
+ {"matrix": [2, 10], "x": 12, "y": 2.25},
+ {"matrix": [2, 11], "x": 13, "y": 2.25},
+ {"matrix": [2, 12], "x": 14, "y": 2.25},
+ {"matrix": [3, 13], "x": 15.25, "y": 2.25, "w": 1.25, "h": 2},
+ {"matrix": [2, 14], "x": 17.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 18.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 19.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": 8.25, "y": 3.25},
+ {"matrix": [3, 7], "x": 9.25, "y": 3.25},
+ {"matrix": [3, 8], "x": 10.25, "y": 3.25},
+ {"matrix": [3, 9], "x": 11.25, "y": 3.25},
+ {"matrix": [3, 10], "x": 12.25, "y": 3.25},
+ {"matrix": [3, 11], "x": 13.25, "y": 3.25},
+ {"matrix": [3, 12], "x": 14.25, "y": 3.25},
+
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [5, 7], "x": 7.75, "y": 4.25},
+ {"matrix": [4, 7], "x": 8.75, "y": 4.25},
+ {"matrix": [4, 8], "x": 9.75, "y": 4.25},
+ {"matrix": [4, 9], "x": 10.75, "y": 4.25},
+ {"matrix": [4, 10], "x": 11.75, "y": 4.25},
+ {"matrix": [4, 11], "x": 12.75, "y": 4.25},
+ {"matrix": [4, 12], "x": 13.75, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 18.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, 4], "x": 3.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 5], "x": 5, "y": 5.25, "w": 2.25},
+ {"matrix": [5, 8], "x": 7.75, "y": 5.25, "w": 2.75},
+ {"matrix": [5, 9], "x": 10.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 13, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 14.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 17.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 18.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 19.25, "y": 5.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/bahm/aster_ergo/keymaps/default/keymap.c b/keyboards/bahm/aster_ergo/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ed260a1eb82
--- /dev/null
+++ b/keyboards/bahm/aster_ergo/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/* Copyright 2023 Mechlovin' Studio
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_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_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPACE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/bahm/aster_ergo/keymaps/via/keymap.c b/keyboards/bahm/aster_ergo/keymaps/via/keymap.c
new file mode 100644
index 00000000000..6fa40a5b7c1
--- /dev/null
+++ b/keyboards/bahm/aster_ergo/keymaps/via/keymap.c
@@ -0,0 +1,52 @@
+/* Copyright 2023 Mechlovin' Studio
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(2), KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPACE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/bahm/aster_ergo/keymaps/via/rules.mk b/keyboards/bahm/aster_ergo/keymaps/via/rules.mk
new file mode 100644
index 00000000000..6fd32e11821
--- /dev/null
+++ b/keyboards/bahm/aster_ergo/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+# This file intentionally left blank
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/bahm/aster_ergo/readme.md b/keyboards/bahm/aster_ergo/readme.md
new file mode 100644
index 00000000000..72ae841453d
--- /dev/null
+++ b/keyboards/bahm/aster_ergo/readme.md
@@ -0,0 +1,25 @@
+# bahm/aster_ergo
+
+The Aster Ergo PCB for the Aster Ergo keyboard (A TKL ergo keyboarđ)
+
+* Keyboard Maintainer: [mechlovin](https://github.com/mechlovin)
+* Hardware Supported: Aster Ergo PCB, APM32F103
+* Hardware Availability: [GH](https://geekhack.org/index.php?topic=116962.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bahm/aster_ergo:default
+
+Flashing example for this keyboard:
+
+ make bahm/aster_ergo:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/bahm/aster_ergo/rules.mk b/keyboards/bahm/aster_ergo/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/bahm/aster_ergo/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/blank_tehnologii/manibus/info.json b/keyboards/blank_tehnologii/manibus/info.json
index 4044a561c1d..58ea8527de5 100644
--- a/keyboards/blank_tehnologii/manibus/info.json
+++ b/keyboards/blank_tehnologii/manibus/info.json
@@ -5,9 +5,9 @@
"maintainer": "SamuraiKek",
"debounce": 2,
"usb": {
- "vid": "0xFEED",
- "pid": "0x0000",
- "device_version": "0.0.2"
+ "vid": "0x424D",
+ "pid": "0x4D4E",
+ "device_version": "1.0.0"
},
"split": {
"soft_serial_pin": "D0"
@@ -16,7 +16,7 @@
"bootloader": "atmel-dfu",
"layouts": {
"LAYOUT": {
- "layout": [
+ "layout": [
{"label":"Esc", "x":0, "y":0.75},
{"label":"1", "x":1, "y":0.5},
{"label":"2", "x":2, "y":0.25},
diff --git a/keyboards/blank_tehnologii/manibus/keymaps/default/config.h b/keyboards/blank_tehnologii/manibus/keymaps/default/config.h
index 2de4f0f87b8..fd255655844 100644
--- a/keyboards/blank_tehnologii/manibus/keymaps/default/config.h
+++ b/keyboards/blank_tehnologii/manibus/keymaps/default/config.h
@@ -16,4 +16,3 @@
#pragma once
#define EE_HANDS
-
diff --git a/keyboards/blank_tehnologii/manibus/keymaps/default/keymap.c b/keyboards/blank_tehnologii/manibus/keymaps/default/keymap.c
index a70d1527d86..769d96bf462 100644
--- a/keyboards/blank_tehnologii/manibus/keymaps/default/keymap.c
+++ b/keyboards/blank_tehnologii/manibus/keymaps/default/keymap.c
@@ -15,13 +15,13 @@
*/
#include QMK_KEYBOARD_H
-
-enum custom_keycodes {
- _QWERTY,
- _LOWER
+enum custom_layers {
+ _QWERTY,
+ _LOWER
};
#define LOWER MO(_LOWER)
+
/*
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05,
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15,
@@ -57,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
- KC_LCTL, KC_HOME, KC_INS, KC_DEL, KC_LGUI, KC_SPC, KC_LALT, KC_ENT, KC_BSPC, LOWER, KC_LBRC, KC_RBRC, KC_END, KC_GRV
+ KC_LCTL, KC_HOME, KC_INS, KC_DEL, KC_LGUI, KC_SPC, KC_LALT, KC_ENT, KC_BSPC, LOWER, KC_LBRC, KC_RBRC, KC_END, KC_GRV
// └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
),
diff --git a/keyboards/blank_tehnologii/manibus/keymaps/via/keymap.c b/keyboards/blank_tehnologii/manibus/keymaps/via/keymap.c
new file mode 100644
index 00000000000..3d5385aa3e0
--- /dev/null
+++ b/keyboards/blank_tehnologii/manibus/keymaps/via/keymap.c
@@ -0,0 +1,76 @@
+/* Copyright 2021 SamuraiKek
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+enum custom_layers {
+ _QWERTY,
+ _FN1
+};
+
+#define FN1 MO(_FN1)
+/*
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05,
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15,
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25,
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35,
+ L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46,
+
+ [_UNIVERSAL] = LAYOUT(
+ // ┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ // ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ // ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ // ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ // ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ )
+
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
+// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL, KC_HOME, KC_INS, KC_DEL, KC_LGUI, KC_SPC, KC_LALT, KC_ENT, KC_BSPC, FN1, KC_LBRC, KC_RBRC, KC_END, KC_GRV
+// └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ ),
+
+ [_FN1] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, QK_BOOT, _______, _______, _______, KC_UP, _______, KC_MPLY, KC_F12,
+// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT,KC_VOLD, KC_VOLU,
+// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_MPRV, KC_MNXT, _______, _______,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, _______
+// └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ )
+};
diff --git a/keyboards/blank_tehnologii/manibus/keymaps/via/rules.mk b/keyboards/blank_tehnologii/manibus/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/blank_tehnologii/manibus/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/ez_maker/directpins/promicro/info.json b/keyboards/ez_maker/directpins/promicro/info.json
index 77e9a96bcc8..d88db4e65d7 100644
--- a/keyboards/ez_maker/directpins/promicro/info.json
+++ b/keyboards/ez_maker/directpins/promicro/info.json
@@ -2,7 +2,7 @@
"manufacturer": "Zach White",
"keyboard_name": "DirectPins ProMicro",
"maintainer": "skullydazed",
- "bootloader": "atmel-dfu",
+ "development_board": "promicro",
"features": {
"bootmagic": true,
"extrakey": true,
@@ -22,7 +22,6 @@
["B5", "B6"]
]
},
- "processor": "atmega32u4",
"usb": {
"device_version": "0.0.1",
"pid": "0x2320",
diff --git a/keyboards/kbdcraft/adam64/adam64.c b/keyboards/kbdcraft/adam64/adam64.c
new file mode 100644
index 00000000000..c23bd489a5a
--- /dev/null
+++ b/keyboards/kbdcraft/adam64/adam64.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2023 KBDCraft
+ * Copyright 2023 Adophoxia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+#ifdef RGB_MATRIX_ENABLE
+const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, CS14_SW1, CS13_SW1, CS15_SW1},
+ {0, CS14_SW2, CS13_SW2, CS15_SW2},
+ {0, CS14_SW3, CS13_SW3, CS15_SW3},
+ {0, CS14_SW4, CS13_SW4, CS15_SW4},
+ {0, CS14_SW5, CS13_SW5, CS15_SW5},
+ {0, CS14_SW6, CS13_SW6, CS15_SW6},
+ {0, CS14_SW7, CS13_SW7, CS15_SW7},
+ {0, CS32_SW1, CS31_SW1, CS33_SW1},
+ {0, CS32_SW2, CS31_SW2, CS33_SW2},
+ {0, CS32_SW3, CS31_SW3, CS33_SW3},
+ {0, CS32_SW4, CS31_SW4, CS33_SW4},
+ {0, CS32_SW5, CS31_SW5, CS33_SW5},
+ {0, CS32_SW6, CS31_SW6, CS33_SW6},
+ {0, CS32_SW7, CS31_SW7, CS33_SW7},
+
+ {0, CS23_SW1, CS24_SW1, CS22_SW1},
+ {0, CS23_SW2, CS24_SW2, CS22_SW2},
+ {0, CS23_SW3, CS24_SW3, CS22_SW3},
+ {0, CS23_SW4, CS24_SW4, CS22_SW4},
+ {0, CS23_SW5, CS24_SW5, CS22_SW5},
+ {0, CS23_SW6, CS24_SW6, CS22_SW6},
+ {0, CS23_SW7, CS24_SW7, CS22_SW7},
+ {0, CS35_SW1, CS34_SW1, CS36_SW1},
+ {0, CS35_SW2, CS34_SW2, CS36_SW2},
+ {0, CS35_SW3, CS34_SW3, CS36_SW3},
+ {0, CS35_SW4, CS34_SW4, CS36_SW4},
+ {0, CS35_SW5, CS34_SW5, CS36_SW5},
+ {0, CS35_SW6, CS34_SW6, CS36_SW6},
+ {0, CS35_SW7, CS34_SW7, CS36_SW7},
+
+ {0, CS17_SW1, CS16_SW1, CS18_SW1},
+ {0, CS17_SW2, CS16_SW2, CS18_SW2},
+ {0, CS17_SW3, CS16_SW3, CS18_SW3},
+ {0, CS17_SW4, CS16_SW4, CS18_SW4},
+ {0, CS17_SW5, CS16_SW5, CS18_SW5},
+ {0, CS17_SW6, CS16_SW6, CS18_SW6},
+ {0, CS17_SW7, CS16_SW7, CS18_SW7},
+ {0, CS26_SW1, CS25_SW1, CS27_SW1},
+ {0, CS26_SW2, CS25_SW2, CS27_SW2},
+ {0, CS26_SW3, CS25_SW3, CS27_SW3},
+ {0, CS26_SW4, CS25_SW4, CS27_SW4},
+ {0, CS26_SW5, CS25_SW5, CS27_SW5},
+ {0, CS26_SW7, CS25_SW7, CS27_SW7},
+
+ {0, CS20_SW1, CS19_SW1, CS21_SW1},
+ {0, CS20_SW2, CS19_SW2, CS21_SW2},
+ {0, CS20_SW3, CS19_SW3, CS21_SW3},
+ {0, CS20_SW4, CS19_SW4, CS21_SW4},
+ {0, CS20_SW5, CS19_SW5, CS21_SW5},
+ {0, CS20_SW6, CS19_SW6, CS21_SW6},
+ {0, CS20_SW7, CS19_SW7, CS21_SW7},
+ {0, CS29_SW1, CS28_SW1, CS30_SW1},
+ {0, CS29_SW2, CS28_SW2, CS30_SW2},
+ {0, CS29_SW3, CS28_SW3, CS30_SW3},
+ {0, CS29_SW4, CS28_SW4, CS30_SW4},
+ {0, CS29_SW5, CS28_SW5, CS30_SW5},
+ {0, CS29_SW6, CS28_SW6, CS30_SW6},
+ {0, CS29_SW7, CS28_SW7, CS30_SW7},
+
+ {0, CS9_SW1, CS10_SW1, CS8_SW1},
+ {0, CS9_SW2, CS10_SW2, CS8_SW2},
+ {0, CS9_SW3, CS10_SW3, CS8_SW3},
+ {0, CS9_SW6, CS10_SW6, CS8_SW6},
+ {0, CS2_SW3, CS1_SW3, CS3_SW3},
+ {0, CS2_SW4, CS1_SW4, CS3_SW4},
+ {0, CS2_SW5, CS1_SW5, CS3_SW5},
+ {0, CS2_SW6, CS1_SW6, CS3_SW6},
+ {0, CS2_SW7, CS1_SW7, CS3_SW7}
+};
+#endif
diff --git a/keyboards/kbdcraft/adam64/config.h b/keyboards/kbdcraft/adam64/config.h
new file mode 100644
index 00000000000..81101bbb616
--- /dev/null
+++ b/keyboards/kbdcraft/adam64/config.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2023 KBDCraft
+ * Copyright 2023 Adophoxia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define I2C1_SCL_PIN B8
+#define I2C1_SDA_PIN B9
+#define I2C1_CLOCK_SPEED 400000
+#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_16_9
+
+#define DRIVER_COUNT 1
+#define DRIVER_ADDR_1 0b0110000
+#define RGB_MATRIX_LED_COUNT 64
+
+/* turn off effects when suspended */
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
\ No newline at end of file
diff --git a/keyboards/kbdcraft/adam64/halconf.h b/keyboards/kbdcraft/adam64/halconf.h
new file mode 100644
index 00000000000..6a04713f1c1
--- /dev/null
+++ b/keyboards/kbdcraft/adam64/halconf.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2023 KBDCraft
+ * Copyright 2023 Adophoxia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/kbdcraft/adam64/info.json b/keyboards/kbdcraft/adam64/info.json
new file mode 100644
index 00000000000..aca8cb7d343
--- /dev/null
+++ b/keyboards/kbdcraft/adam64/info.json
@@ -0,0 +1,213 @@
+{
+
+ "keyboard_name": "Adam64",
+ "manufacturer": "KBDCRAFT",
+ "url": "https://kbdcraft.store/products/adam",
+ "maintainer": "KBDCraft",
+ "usb": {
+ "vid": "0x586A",
+ "pid": "0xB001",
+ "device_version": "0.0.1"
+ },
+ "processor": "STM32F401",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "ROW2COL",
+ "matrix_pins": {
+ "rows": ["C8", "C9", "A8", "A10", "B14"],
+ "cols": ["B15", "C6", "C7", "A15", "B7", "C10", "C11", "C12", "D2", "B3", "B4", "B5", "A0", "A1"]
+ },
+ "features":{
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "console": false,
+ "command": false,
+ "rgb_matrix": true
+ },
+ "rgb_matrix":{
+ "driver": "IS31FL3741",
+ "max_brightness": 150,
+ "animations":{
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_rain": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "layout": [
+ {"flags": 4, "matrix": [0, 0], "x": 0, "y": 0 },
+ {"flags": 4, "matrix": [0, 1], "x": 16, "y": 0 },
+ {"flags": 4, "matrix": [0, 2], "x": 32, "y": 0 },
+ {"flags": 4, "matrix": [0, 3], "x": 48, "y": 0 },
+ {"flags": 4, "matrix": [0, 4], "x": 64, "y": 0 },
+ {"flags": 4, "matrix": [0, 5], "x": 80, "y": 0 },
+ {"flags": 4, "matrix": [0, 6], "x": 96, "y": 0 },
+ {"flags": 4, "matrix": [0, 7], "x": 112, "y": 0 },
+ {"flags": 4, "matrix": [0, 8], "x": 128, "y": 0 },
+ {"flags": 4, "matrix": [0, 9], "x": 144, "y": 0 },
+ {"flags": 4, "matrix": [0, 10], "x": 160, "y": 0 },
+ {"flags": 4, "matrix": [0, 11], "x": 176, "y": 0 },
+ {"flags": 4, "matrix": [0, 12], "x": 192, "y": 0 },
+ {"flags": 4, "matrix": [0, 13], "x": 208, "y": 0 },
+
+ {"flags": 4, "matrix": [1, 0], "x": 0, "y": 10 },
+ {"flags": 4, "matrix": [1, 1], "x": 16, "y": 10 },
+ {"flags": 4, "matrix": [1, 2], "x": 32, "y": 10 },
+ {"flags": 4, "matrix": [1, 3], "x": 48, "y": 10 },
+ {"flags": 4, "matrix": [1, 4], "x": 64, "y": 10 },
+ {"flags": 4, "matrix": [1, 5], "x": 80, "y": 10 },
+ {"flags": 4, "matrix": [1, 6], "x": 96, "y": 10 },
+ {"flags": 4, "matrix": [1, 7], "x": 112, "y": 10 },
+ {"flags": 4, "matrix": [1, 8], "x": 128, "y": 10 },
+ {"flags": 4, "matrix": [1, 9], "x": 144, "y": 10 },
+ {"flags": 4, "matrix": [1, 10], "x": 160, "y": 10 },
+ {"flags": 4, "matrix": [1, 11], "x": 176, "y": 10 },
+ {"flags": 4, "matrix": [1, 12], "x": 192, "y": 10 },
+ {"flags": 4, "matrix": [1, 13], "x": 208, "y": 10 },
+
+ {"flags": 4, "matrix": [2, 0], "x": 0, "y": 20 },
+ {"flags": 4, "matrix": [2, 1], "x": 16, "y": 20 },
+ {"flags": 4, "matrix": [2, 2], "x": 32, "y": 20 },
+ {"flags": 4, "matrix": [2, 3], "x": 48, "y": 20 },
+ {"flags": 4, "matrix": [2, 4], "x": 64, "y": 20 },
+ {"flags": 4, "matrix": [2, 5], "x": 80, "y": 20 },
+ {"flags": 4, "matrix": [2, 6], "x": 96, "y": 20 },
+ {"flags": 4, "matrix": [2, 7], "x": 112, "y": 20 },
+ {"flags": 4, "matrix": [2, 8], "x": 128, "y": 20 },
+ {"flags": 4, "matrix": [2, 9], "x": 144, "y": 20 },
+ {"flags": 4, "matrix": [2, 10], "x": 160, "y": 20 },
+ {"flags": 4, "matrix": [2, 11], "x": 176, "y": 20 },
+ {"flags": 4, "matrix": [2, 13], "x": 208, "y": 20 },
+
+ {"flags": 4, "matrix": [3, 0], "x": 0, "y": 30 },
+ {"flags": 4, "matrix": [3, 1], "x": 16, "y": 30 },
+ {"flags": 4, "matrix": [3, 2], "x": 32, "y": 30 },
+ {"flags": 4, "matrix": [3, 3], "x": 48, "y": 30 },
+ {"flags": 4, "matrix": [3, 4], "x": 64, "y": 30 },
+ {"flags": 4, "matrix": [3, 5], "x": 80, "y": 30 },
+ {"flags": 4, "matrix": [3, 6], "x": 96, "y": 30 },
+ {"flags": 4, "matrix": [3, 7], "x": 112, "y": 30 },
+ {"flags": 4, "matrix": [3, 8], "x": 128, "y": 30 },
+ {"flags": 4, "matrix": [3, 9], "x": 144, "y": 30 },
+ {"flags": 4, "matrix": [3, 10], "x": 160, "y": 30 },
+ {"flags": 4, "matrix": [3, 11], "x": 176, "y": 30 },
+ {"flags": 4, "matrix": [3, 12], "x": 192, "y": 30 },
+ {"flags": 4, "matrix": [3, 13], "x": 208, "y": 30 },
+
+ {"flags": 4, "matrix": [4, 0], "x": 0, "y": 40 },
+ {"flags": 4, "matrix": [4, 1], "x": 16, "y": 40 },
+ {"flags": 4, "matrix": [4, 2], "x": 32, "y": 40 },
+ {"flags": 4, "matrix": [4, 5], "x": 80, "y": 40 },
+ {"flags": 4, "matrix": [4, 9], "x": 144, "y": 40 },
+ {"flags": 4, "matrix": [4, 10], "x": 160, "y": 40 },
+ {"flags": 4, "matrix": [4, 11], "x": 176, "y": 40 },
+ {"flags": 4, "matrix": [4, 12], "x": 192, "y": 40 },
+ {"flags": 4, "matrix": [4, 13], "x": 208, "y": 40 }
+ ]
+ },
+ "layouts": {
+ "LAYOUT_64_ansi": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [0, 10], "x": 10, "y": 0 },
+ { "matrix": [0, 11], "x": 11, "y": 0 },
+ { "matrix": [0, 12], "x": 12, "y": 0 },
+ { "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
+
+ { "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+
+ { "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+
+ { "matrix": [3, 0], "w": 2, "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 2, "y": 3 },
+ { "matrix": [3, 2], "x": 3, "y": 3 },
+ { "matrix": [3, 3], "x": 4, "y": 3 },
+ { "matrix": [3, 4], "x": 5, "y": 3 },
+ { "matrix": [3, 5], "x": 6, "y": 3 },
+ { "matrix": [3, 6], "x": 7, "y": 3 },
+ { "matrix": [3, 7], "x": 8, "y": 3 },
+ { "matrix": [3, 8], "x": 9, "y": 3 },
+ { "matrix": [3, 9], "x": 10, "y": 3 },
+ { "matrix": [3, 10], "x": 11, "y": 3 },
+ { "matrix": [3, 11], "x": 12, "y": 3 },
+ { "matrix": [3, 12], "x": 13, "y": 3 },
+ { "matrix": [3, 13], "x": 14, "y": 3 },
+
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
+ { "matrix": [4, 9], "x": 10, "y": 4 },
+ { "matrix": [4, 10], "x": 11, "y": 4 },
+ { "matrix": [4, 11], "x": 12, "y": 4 },
+ { "matrix": [4, 12], "x": 13, "y": 4 },
+ { "matrix": [4, 13], "x": 14, "y": 4 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kbdcraft/adam64/keymaps/default/keymap.c b/keyboards/kbdcraft/adam64/keymaps/default/keymap.c
new file mode 100644
index 00000000000..0396bd77d15
--- /dev/null
+++ b/keyboards/kbdcraft/adam64/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 KBDCraft
+ * Copyright 2023 Adophoxia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_64_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
+ KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_64_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_NO, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_PSCR, KC_SCRL, KC_PAUS, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_SPI, RGB_SPD, KC_HOME, KC_PGUP, EE_CLR,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, NK_TOGG, KC_NO, KC_NO, KC_INS, KC_END, KC_PGDN, KC_VOLU, KC_MUTE,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, RGB_MOD, KC_VOLD, RGB_TOG
+ )
+};
diff --git a/keyboards/kbdcraft/adam64/keymaps/via/keymap.c b/keyboards/kbdcraft/adam64/keymaps/via/keymap.c
new file mode 100644
index 00000000000..4ff28d49787
--- /dev/null
+++ b/keyboards/kbdcraft/adam64/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 KBDCraft
+ * Copyright 2023 Adophoxia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_64_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
+ KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_64_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_PSCR, KC_SCRL, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPI, RGB_SPD, KC_HOME, KC_PGUP, EE_CLR,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, KC_INS, KC_END, KC_PGDN, KC_VOLU, KC_MUTE,
+ _______, _______, _______, _______, _______, _______, RGB_MOD, KC_VOLD, RGB_TOG
+ )
+};
diff --git a/keyboards/kbdcraft/adam64/keymaps/via/rules.mk b/keyboards/kbdcraft/adam64/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/kbdcraft/adam64/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/kbdcraft/adam64/mcuconf.h b/keyboards/kbdcraft/adam64/mcuconf.h
new file mode 100644
index 00000000000..ef406b9a3d0
--- /dev/null
+++ b/keyboards/kbdcraft/adam64/mcuconf.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2023 KBDCraft
+ * Copyright 2023 Adophoxia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
\ No newline at end of file
diff --git a/keyboards/kbdcraft/adam64/readme.md b/keyboards/kbdcraft/adam64/readme.md
new file mode 100644
index 00000000000..25550aff448
--- /dev/null
+++ b/keyboards/kbdcraft/adam64/readme.md
@@ -0,0 +1,27 @@
+# KBDCraft Adam64
+
+![Adam64](https://i.imgur.com/6m2yyTUh.jpg)
+
+A custom 64-key mechanical keyboard comprised of Legos.
+
+* Keyboard Maintainer: The QMK Community
+* Hardware Supported: STM32F401
+* Hardware Availability: https://kbdcraft.store/products/adam
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbdcraft/adam64:default
+
+Flashing example for this keyboard:
+
+ make kbdcraft/adam64:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/kbdcraft/adam64/rules.mk b/keyboards/kbdcraft/adam64/rules.mk
new file mode 100644
index 00000000000..094c6b058e8
--- /dev/null
+++ b/keyboards/kbdcraft/adam64/rules.mk
@@ -0,0 +1,2 @@
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/keebio/iris/keymaps/jestes5111/config.h b/keyboards/keebio/iris/keymaps/jestes5111/config.h
new file mode 100644
index 00000000000..01d397e2071
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jestes5111/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2023 Jesse Estes (@jestes5111)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define EE_HANDS
+#define RGBLIGHT_SPLIT
+#define RGBLIGHT_SLEEP
+#define ENABLE_COMPILE_KEYCODE
\ No newline at end of file
diff --git a/keyboards/keebio/iris/keymaps/jestes5111/keymap.c b/keyboards/keebio/iris/keymaps/jestes5111/keymap.c
new file mode 100644
index 00000000000..c6c2ae9652a
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jestes5111/keymap.c
@@ -0,0 +1,163 @@
+/*
+Copyright 2023 Jesse Estes (@jestes5111)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+// Combinations of two keystrokes for easier reading
+#define CSFT LCTL(KC_LSFT)
+#define GSFT LGUI(KC_LSFT)
+
+enum layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _FUNC,
+ _PASTA,
+};
+
+enum custom_keycodes {
+ THUMB = QK_USER,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ // ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_APP,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RCTL,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ // └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+ KC_LGUI, TL_LOWR, KC_SPC, KC_ENT, TL_UPPR, KC_RGUI
+ // └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
+ ),
+
+ [_LOWER] = LAYOUT(
+ // ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
+ KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_VOLU, KC_VOLD, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_DEL,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_NO, KC_F13, KC_F14, KC_F15, KC_F16, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ CSFT, KC_F17, KC_F18, KC_F19, KC_F20, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, RCS(KC_L),
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ GSFT, KC_F21, KC_F22, KC_F23, KC_F24, KC_WHOM, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ // └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+ KC_NO, KC_TRNS, KC_NO, KC_UNDS, KC_TRNS, KC_NO
+ // └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
+ ),
+
+ [_RAISE] = LAYOUT(
+ // ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_AMPR, KC_LPRN, KC_RPRN, KC_ASTR, KC_EQL, KC_MINS, KC_PLUS, KC_BSLS,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_ENT, KC_NO, KC_NO, KC_NO, KC_PIPE, KC_LBRC, KC_RBRC, KC_NO, KC_NO, KC_NO, KC_DQUO, KC_QUOT,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_CAPS, KC_NO, KC_NO, KC_NO, KC_LABK, KC_LCBR, KC_MENU, KC_NO, KC_RCBR, KC_RABK, KC_NO, KC_NO, KC_NO, KC_NO,
+ // └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+ KC_NO, KC_TRNS, KC_UNDS, KC_NO, KC_TRNS, KC_NO
+ // └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ // ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
+ RGB_TOG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_NO, KC_NO, KC_NO, KC_NO, LCA(KC_R), LCA(KC_T), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_NO, KC_NO, LCA(KC_V), LCA(KC_D), KC_NO, KC_NO, KC_NO, TO(_FUNC), KC_NO, QK_LOCK, TO(_PASTA), QK_MAKE,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, EE_CLR,
+ // └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+ KC_NO, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO
+ // └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
+ ),
+
+ [_FUNC] = LAYOUT(
+ // ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
+ KC_ESC, KC_SLSH, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSPC,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_TAB, KC_7, KC_8, KC_9, KC_LPRN, KC_RPRN, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_NO,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_LCTL, KC_4, KC_5, KC_6, KC_DOT, KC_NUM, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_LSFT, KC_1, KC_2, KC_3, KC_0, KC_ENT, KC_LALT, KC_BTN2, KC_BTN1, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ // └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+ TO(_QWERTY), KC_CIRC, KC_SPC, KC_ENT, KC_BTN5, KC_BTN4
+ // └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
+ ),
+
+ [_PASTA] = LAYOUT(
+ // ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐ ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, THUMB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤ ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ // ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐ ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ // └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+ TO(_QWERTY), KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO
+ // └──────────┴──────────┴──────────┘ └──────────┴──────────┴──────────┘
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case THUMB:
+ if (record->event.pressed) {
+ SEND_STRING(":disguised_face: :thumbsup:");
+ wait_ms(100);
+ tap_code(KC_ENTER);
+ }
+ return false;
+ }
+ return true;
+}
+
+void keyboard_post_init_user(void) {
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom(HSV_PURPLE);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case _LOWER:
+ rgblight_sethsv_noeeprom(HSV_GREEN);
+ break;
+ case _RAISE:
+ rgblight_sethsv_noeeprom(HSV_RED);
+ break;
+ case _ADJUST:
+ rgblight_sethsv_noeeprom(HSV_WHITE);
+ break;
+ case _FUNC:
+ rgblight_sethsv_noeeprom(HSV_BLUE);
+ break;
+ case _PASTA:
+ rgblight_sethsv_noeeprom(HSV_ORANGE);
+ break;
+ default:
+ rgblight_sethsv_noeeprom(HSV_PURPLE);
+ break;
+ }
+ return state;
+}
diff --git a/keyboards/keebio/iris/keymaps/jestes5111/readme.md b/keyboards/keebio/iris/keymaps/jestes5111/readme.md
new file mode 100644
index 00000000000..00ccbf92679
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jestes5111/readme.md
@@ -0,0 +1,6 @@
+![Keymap SVG](https://i.imgur.com/mPKFzVWh.png)
+
+# My Iris
+
+Designed for creating/editing in VIM and Excel, gaming, and general keyboard-focused media consumption.
+WIP.
diff --git a/keyboards/keebio/iris/keymaps/jestes5111/rules.mk b/keyboards/keebio/iris/keymaps/jestes5111/rules.mk
new file mode 100644
index 00000000000..249ea5750e6
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jestes5111/rules.mk
@@ -0,0 +1,9 @@
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+NKRO_ENABLE = yes
+BACKLIGHT_ENABLE = no
+KEY_LOCK_ENABLE = yes
+UNICODE_ENABLE = yes
+
+ENCODER_ENABLE = no
+TRI_LAYER_ENABLE = yes
diff --git a/keyboards/keebio/iris/keymaps/johnstegeman/config.h b/keyboards/keebio/iris/keymaps/johnstegeman/config.h
new file mode 100644
index 00000000000..de2f7b9e80e
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/johnstegeman/config.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2023 John Stegeman
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+// #define USE_I2C
+#define EE_HANDS
+
+#define RGBLIGHT_LAYERS
+
+#define TAPPING_TOGGLE 1 // tap just once for TT() to toggle the layer
+#define TAPPING_TERM 200
+#define IGNORE_MOD_TAP_INTERRUPT
+#define RGBLIGHT_LAYERS_RETAIN_VAL
\ No newline at end of file
diff --git a/keyboards/keebio/iris/keymaps/johnstegeman/keymap.c b/keyboards/keebio/iris/keymaps/johnstegeman/keymap.c
new file mode 100644
index 00000000000..026f39c218b
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/johnstegeman/keymap.c
@@ -0,0 +1,144 @@
+/*
+Copyright 2023 John Stegeman
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+#include "print.h"
+#include "light_layers.h"
+
+enum layers {
+_COLEMAK,
+_NAVNUM,
+_CONTROL,
+};
+
+// Enter when tapped, shift when held
+#define SHEN MT(MOD_LSFT, KC_ENT)
+
+// Enter when tapped, alt when held
+#define ALEN MT(MOD_LALT, KC_ENT)
+
+#define CTX LT(0,KC_X)
+#define CPC LT(0,KC_C)
+#define PSV LT(0,KC_V)
+
+// Space when tapped, shift when held
+#define SHSP MT(MOD_RSFT, KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_COLEMAK] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_MINS, KC_SCLN,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_Z, CTX, CPC, KC_D, PSV, KC_HOME, KC_RALT, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_EQL,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ MO(1), ALEN, KC_LGUI, KC_BSPC, SHSP, LT(2,KC_ENT)
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_NAVNUM] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ QK_BOOT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_DEL, _______, KC_LEFT, KC_RGHT, KC_UP, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_PIPE,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, KC_DOWN, KC_LCBR, KC_END, KC_RALT, KC_RCBR, KC_P1, KC_P2, KC_P3, KC_MINS, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, KC_DEL, KC_DEL, _______, KC_P0
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_CONTROL] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_TOG, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_MOD, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS, KC_EQL, KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, KC_BSLS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, KC_LPRN, _______, KC_PLUS, KC_END, RGB_HUD, RGB_SAD, RGB_VAD, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ switch (keycode) {
+ case LT(0,KC_X):
+ if (!record->tap.count && record->event.pressed) {
+ tap_code16(G(KC_X)); // Intercept hold function to send GUI-X
+ return false;
+ }
+ return true;
+ break;
+ case LT(0,KC_C):
+ if (!record->tap.count && record->event.pressed) {
+ tap_code16(G(KC_C)); // Intercept hold function to send GUI-C
+ return false;
+ }
+ return true;
+ break;
+ case LT(0,KC_V):
+ if (!record->tap.count && record->event.pressed) {
+ tap_code16(G(KC_V)); // Intercept hold function to send GUI-V
+ return false;
+ }
+ return true;
+ break;
+ }
+ return true;
+}
+
+// Key overrides
+
+// GUI + esc = ~
+const key_override_t tilde_esc_override = ko_make_basic(MOD_MASK_GUI, KC_ESC, S(KC_GRV));
+
+// Shift + esc = `
+const key_override_t grave_esc_override = ko_make_basic(MOD_MASK_SHIFT, KC_ESC, KC_GRV);
+
+// Shift + bkspc = delete word
+const key_override_t shift_bkspc_override = ko_make_basic(MOD_MASK_SHIFT, KC_BSPC, A(KC_BSPC));
+
+const key_override_t **key_overrides = (const key_override_t *[]){
+ &tilde_esc_override,
+ &grave_esc_override,
+// &shift_bkspc_override,
+ NULL
+};
+
+
+void keyboard_post_init_user(void) {
+ rgblight_layers = MY_LIGHT_LAYERS;
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+
+ rgblight_set_layer_state(_COLEMAK, layer_state_cmp(state, _COLEMAK));
+ rgblight_set_layer_state(_NAVNUM, layer_state_cmp(state, _NAVNUM));
+
+ return state;
+}
diff --git a/keyboards/keebio/iris/keymaps/johnstegeman/light_layers.h b/keyboards/keebio/iris/keymaps/johnstegeman/light_layers.h
new file mode 100644
index 00000000000..7c459c1fe3a
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/johnstegeman/light_layers.h
@@ -0,0 +1,83 @@
+/*
+Copyright 2023 John Stegeman
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/*
+
+LED index mapping:
+
+ (31) (32) (33) (67) (66) (65)
+┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+│0 │1 │2 │3 │4 │5 │ │39 │38 │37 │36 │35 │34 │
+├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+│11 │10 │9 │8 │7 │6 │ │40 │41 │42 │43 │44 │45 │
+├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+│12 │13 │14 │15 │16 │17 │ │51 │50 │49 │48 │47 │46 │
+├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+│23 │22 │21 │20 │19 │18 │27 │ │61 │52 │53 │54 │55 │56 │57 │
+└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ │24 │25 │26 │ │60 │59 │58 │
+ └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ (30) (29) (28) (62) (63) (64)
+
+*/
+
+const rgblight_segment_t PROGMEM COLEMAK_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
+ // left side
+ {0, 6, HSV_BLUE},
+ {6, 5, HSV_AZURE},
+ {11, 2, HSV_BLUE},
+ {13, 10, HSV_AZURE},
+ {23, 2, HSV_BLUE},
+ {25, 1, HSV_RED},
+ {26, 2, HSV_BLUE},
+ {28, 3, HSV_BLUE}, // underglow
+ {31, 3, HSV_BLUE}, // underglow
+ // right side
+ {34, 6, HSV_BLUE},
+ {40, 4, HSV_AZURE},
+ {44, 3, HSV_BLUE},
+ {47, 7, HSV_AZURE},
+ {54, 5, HSV_BLUE},
+ {59, 1, HSV_RED},
+ {60, 2, HSV_BLUE},
+ {62, 3, HSV_BLUE}, // underglow
+ {65, 3, HSV_BLUE} // underglow
+);
+
+const rgblight_segment_t PROGMEM NAVNUM_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 14, HSV_BLACK},
+ {14, 3, HSV_GREEN},
+ {17, 2, HSV_BLACK},
+ {19, 1, HSV_GREEN},
+ {20, 21, RGB_OFF},
+ {41, 3, HSV_GREEN},
+ {44, 4, HSV_BLACK},
+ {48, 3, HSV_GREEN},
+ {51, 2, HSV_BLACK},
+ {53, 3, HSV_GREEN},
+ {56, 2, HSV_BLACK},
+ {58, 1, HSV_GREEN},
+ {59, 9, HSV_BLACK}
+);
+
+
+const rgblight_segment_t* const PROGMEM MY_LIGHT_LAYERS[] = RGBLIGHT_LAYERS_LIST(
+ COLEMAK_LIGHT_LAYER,
+ NAVNUM_LIGHT_LAYER
+);
\ No newline at end of file
diff --git a/keyboards/keebio/iris/keymaps/johnstegeman/readme.md b/keyboards/keebio/iris/keymaps/johnstegeman/readme.md
new file mode 100644
index 00000000000..c2f93287730
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/johnstegeman/readme.md
@@ -0,0 +1 @@
+# Keebio Iris Colemak layout
\ No newline at end of file
diff --git a/keyboards/keebio/iris/keymaps/johnstegeman/rules.mk b/keyboards/keebio/iris/keymaps/johnstegeman/rules.mk
new file mode 100644
index 00000000000..73761f8e6fb
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/johnstegeman/rules.mk
@@ -0,0 +1,24 @@
+# Build Options
+
+BOOTMAGIC_ENABLE = no
+MOUSEKEY_ENABLE = no
+COMMAND_ENABLE = no
+NKRO_ENABLE = no
+BACKLIGHT_ENABLE = no
+
+AUDIO_ENABLE = no
+ENCODER_ENABLE = no
+SPACE_CADET_ENABLE = no
+GRAVE_ESC_ENABLE = no
+MAGIC_ENABLE = no
+TAP_DANCE_ENABLE = no
+
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+RGBLIGHT_ENABLE = yes
+RGB_MATRIX_ENABLE = no
+#RGB_MATRIX_ENABLE = yes
+#RGB_MATRIX_DRIVER = WS2812
+LTO_ENABLE = yes
+VIA_ENABLE = yes
+KEY_OVERRIDE_ENABLE = yes
diff --git a/keyboards/keychron/q10/iso_encoder/info.json b/keyboards/keychron/q10/iso_encoder/info.json
index 96311fac066..8580bd98df8 100644
--- a/keyboards/keychron/q10/iso_encoder/info.json
+++ b/keyboards/keychron/q10/iso_encoder/info.json
@@ -85,7 +85,7 @@
{"matrix":[3,12], "x":14.75, "y":3.25},
{"matrix":[3,13], "x":15.75, "y":3.25},
{"matrix":[3,14], "x":16.75, "y":3.25},
- {"matrix":[2,14], "x":17.75, "y":3.25, "w":1.25, "h":2},
+ {"matrix":[2,14], "x":17.75, "y":2.25, "w":1.25, "h":2},
{"matrix":[3,15], "x":19.5, "y":3.25},
{"matrix":[4, 0], "x":0, "y":4.25},
diff --git a/keyboards/keychron/q6/iso_encoder/info.json b/keyboards/keychron/q6/iso_encoder/info.json
index 598a715c3f0..783945efb42 100644
--- a/keyboards/keychron/q6/iso_encoder/info.json
+++ b/keyboards/keychron/q6/iso_encoder/info.json
@@ -102,7 +102,7 @@
{"matrix":[3,15], "x":21.5, "y":2.25, "h":2},
{"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
- {"matrix":[4, 1], "x":2.25, "y":4.25},
+ {"matrix":[4, 1], "x":1.25, "y":4.25},
{"matrix":[4, 2], "x":2.25, "y":4.25},
{"matrix":[4, 3], "x":3.25, "y":4.25},
{"matrix":[4, 4], "x":4.25, "y":4.25},
diff --git a/keyboards/keychron/v10/iso_encoder/info.json b/keyboards/keychron/v10/iso_encoder/info.json
index 554e0b907e7..f214e6a3338 100644
--- a/keyboards/keychron/v10/iso_encoder/info.json
+++ b/keyboards/keychron/v10/iso_encoder/info.json
@@ -85,7 +85,7 @@
{"matrix":[3,12], "x":14.75, "y":3.25},
{"matrix":[3,13], "x":15.75, "y":3.25},
{"matrix":[3,14], "x":16.75, "y":3.25},
- {"matrix":[2,14], "x":17.75, "y":3.25, "w":1.25, "h":2},
+ {"matrix":[2,14], "x":17.75, "y":2.25, "w":1.25, "h":2},
{"matrix":[3,15], "x":19.5, "y":3.25},
{"matrix":[4, 0], "x":0, "y":4.25},
diff --git a/keyboards/keychron/v6/iso_encoder/info.json b/keyboards/keychron/v6/iso_encoder/info.json
index d8f86e5aa0b..e9401b855fa 100644
--- a/keyboards/keychron/v6/iso_encoder/info.json
+++ b/keyboards/keychron/v6/iso_encoder/info.json
@@ -102,7 +102,7 @@
{"matrix":[3,15], "x":21.5, "y":2.25, "h":2},
{"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
- {"matrix":[4, 1], "x":2.25, "y":4.25},
+ {"matrix":[4, 1], "x":1.25, "y":4.25},
{"matrix":[4, 2], "x":2.25, "y":4.25},
{"matrix":[4, 3], "x":3.25, "y":4.25},
{"matrix":[4, 4], "x":4.25, "y":4.25},
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/config.h b/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/config.h
new file mode 100755
index 00000000000..418b182c3b7
--- /dev/null
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/config.h
@@ -0,0 +1,74 @@
+/* Copyright 2020 lmlask
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MOUSEKEY_DELAY 50
+#define MIDI_ADVANCED
+#define TAPPING_TERM 175 //For fast typing
+#define QUICK_TAP_TERM 0 //No autorepeat in tap-hold keys
+#define HOLD_ON_OTHER_KEY_PRESS //For fast typing
+
+// Min 0, max 32
+#define JOYSTICK_BUTTON_COUNT 32
+// Min 0, max 6: X, Y, Z, Rx, Ry, Rz
+#define JOYSTICK_AXIS_COUNT 0
+// Min 8, max 16
+#define JOYSTICK_AXIS_RESOLUTION 8
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+
+//#undef ENABLE_RGB_MATRIX_ALPHAS_MODS // Enables RGB_MATRIX_ALPHAS_MODS
+#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Enables RGB_MATRIX_GRADIENT_UP_DOWN
+#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Enables RGB_MATRIX_GRADIENT_LEFT_RIGHT
+//#undef ENABLE_RGB_MATRIX_BREATHING // Enables RGB_MATRIX_BREATHING
+//#undef ENABLE_RGB_MATRIX_BAND_SAT // Enables RGB_MATRIX_BAND_SAT
+//#undef ENABLE_RGB_MATRIX_BAND_VAL //Enables RGB_MATRIX_BAND_VAL
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Enables RGB_MATRIX_BAND_PINWHEEL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Enables RGB_MATRIX_BAND_PINWHEEL_VAL
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Enables RGB_MATRIX_BAND_SPIRAL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Enables RGB_MATRIX_BAND_SPIRAL_VAL
+#undef ENABLE_RGB_MATRIX_CYCLE_ALL // Enables RGB_MATRIX_CYCLE_ALL
+#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Enables RGB_MATRIX_CYCLE_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Enables RGB_MATRIX_CYCLE_UP_DOWN
+#undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Enables RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN //Enables RGB_MATRIX_CYCLE_OUT_IN
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Enables RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Enables RGB_MATRIX_CYCLE_PINWHEEL
+#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Enables RGB_MATRIX_CYCLE_SPIRAL
+#undef ENABLE_RGB_MATRIX_DUAL_BEACON //Enables RGB_MATRIX_DUAL_BEACON
+#undef ENABLE_RGB_MATRIX_RAINBOW_BEACON// Enables RGB_MATRIX_RAINBOW_BEACON
+#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Enables RGB_MATRIX_RAINBOW_PINWHEELS
+#undef ENABLE_RGB_MATRIX_RAINDROPS //Enables RGB_MATRIX_RAINDROPS
+#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS// Enables RGB_MATRIX_JELLYBEAN_RAINDROPS
+//#undef ENABLE_RGB_MATRIX_HUE_BREATHING // Enables RGB_MATRIX_HUE_BREATHING
+#undef ENABLE_RGB_MATRIX_HUE_PENDULUM //Enables RGB_MATRIX_HUE_PENDULUM
+#undef ENABLE_RGB_MATRIX_HUE_WAVE //Enables RGB_MATRIX_HUE_WAVE
+#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL //Enables RGB_MATRIX_PIXEL_FRACTAL
+#undef ENABLE_RGB_MATRIX_PIXEL_FLOW //Enables RGB_MATRIX_PIXEL_FLOW
+#undef ENABLE_RGB_MATRIX_PIXEL_RAIN //Enables RGB_MATRIX_PIXEL_RAIN
+//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Enables RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE // Enables RGB_MATRIX_SOLID_REACTIVE
+//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE //Enables RGB_MATRIX_SOLID_REACTIVE_WIDE
+//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Enables RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Enables RGB_MATRIX_SOLID_REACTIVE_CROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Enables RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS //Enables RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS //Enables RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+//#undef ENABLE_RGB_MATRIX_SPLASH //Enables RGB_MATRIX_SPLASH
+#undef ENABLE_RGB_MATRIX_MULTISPLASH // Enables RGB_MATRIX_MULTISPLASH
+//#undef ENABLE_RGB_MATRIX_SOLID_SPLASH //Enables RGB_MATRIX_SOLID_SPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Enables RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/keymap.c b/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/keymap.c
old mode 100644
new mode 100755
index 1af92fbed59..1583392a483
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/keymap.c
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/keymap.c
@@ -1,4 +1,4 @@
-/* Copyright 2021 lmlmask
+/* Copyright 2020 lmlask
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,119 +15,149 @@
*/
#include QMK_KEYBOARD_H
-#include "keymap_brazilian_abnt2.h"
+#include
enum layers {
_WORKMAN,
_QWERTY,
_DVORAK,
_COLEMAK,
+ _MIDI,
+ _GAME,
+
_SYM,
_FUNCTION,
- _MIDI,
_NAV,
_NUM,
- _ADJUST
+ _ADJUST,
+ _MOUSE,
+ _CPY,
+ _SWP
};
enum planck_keycodes {
- WORKMAN = SAFE_RANGE,
+ WORKMAN = QK_USER,
QWERTY,
DVORAK,
COLEMAK,
- MIDI
+ MIDI,
+ GAME,
+ TOG_CPY,
+ TOG_SWP,
};
-#define SYM MO(_SYM)
-#define FUN LT(_FUNCTION, KC_ENT)
-#define MYTAB LT(_NAV, KC_TAB)
-#define MYNAV LT(_NAV, KC_DEL)
-#define MYNUM LT(_NUM, KC_BSPC)
+#define NAVTAB LT(_NAV, KC_TAB)
+#define SYM LT(_SYM, KC_BSPC)
+#define NUM LT(_NUM, KC_DEL)
+#define FUN MO(_FUNCTION)
+#define CTL_ENT RCTL_T(KC_ENT)
+
+//Hand swap config, similar to Planck
+const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0} },
+ {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1} },
+ {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2} },
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}, {7, 3}, {8, 3}, {9, 3}, {10, 3}},
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-//qwerty base layer ok
+//BASE LAYERS
[_QWERTY] = LAYOUT_planck_mit(
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, BR_TILD,
- MYTAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, BR_CCED, BR_ACUT,
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, BR_ACUT,
+ NAVTAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, BR_CCED, BR_TILD,
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, BR_SLSH, SC_RSPC,
- KC_LCTL, KC_LALT, KC_LGUI, SYM, MYNAV, KC_SPC, MYNUM, FUN, KC_RGUI, KC_LALT, RCTL_T(KC_ENT)
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MEH, NUM, KC_SPC, SYM, FUN, KC_RALT, KC_HYPR, CTL_ENT
),
-
-//workman base layer ok
[_WORKMAN] = LAYOUT_planck_mit(
- KC_ESC, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, BR_CCED, BR_TILD,
- MYTAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, BR_ACUT,
+ KC_ESC, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, BR_CCED, BR_ACUT,
+ NAVTAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, BR_TILD,
SC_LSPO, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, BR_SLSH, SC_RSPC,
- KC_LCTL, KC_LALT, KC_LGUI, SYM, MYNAV, KC_SPC, MYNUM, FUN, KC_RGUI, KC_LALT, RCTL_T(KC_ENT)
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MEH, NUM, KC_SPC, SYM, FUN, KC_RALT, KC_HYPR, CTL_ENT
),
-
-//dvorak base layer ok
[_DVORAK] = LAYOUT_planck_mit(
- KC_ESC, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, BR_SLSH, BR_TILD,
- MYTAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, BR_ACUT,
+ KC_ESC, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, BR_SLSH, BR_ACUT,
+ NAVTAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, BR_TILD,
SC_LSPO, BR_CCED, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SC_RSPC,
- KC_LCTL, KC_LALT, KC_LGUI, SYM, MYNAV, KC_SPC, MYNUM, FUN, KC_RGUI, KC_LALT, RCTL_T(KC_ENT)
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MEH, NUM, KC_SPC, SYM, FUN, KC_RALT, KC_HYPR, CTL_ENT
),
-
-//colemak base layer ok
[_COLEMAK] = LAYOUT_planck_mit(
- KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, BR_CCED, BR_TILD,
- MYTAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, BR_ACUT,
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, BR_CCED, BR_ACUT,
+ NAVTAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, BR_TILD,
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, BR_SLSH, SC_RSPC,
- KC_LCTL, KC_LALT, KC_LGUI, SYM, MYNAV, KC_SPC, MYNUM, FUN, KC_RGUI, KC_LALT, RCTL_T(KC_ENT)
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MEH, NUM, KC_SPC, SYM, FUN, KC_RALT, KC_HYPR, CTL_ENT
),
-//navigation and utility layer ok
+//UTILITY LAYERS - SHORTCUT (CPY), SWAP HANDS (SWP)
+[_CPY] = LAYOUT_planck_mit(
+ _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______,
+ _______, C(KC_Z), C(KC_X), C(KC_C), C(KC_V), _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+[_SWP] = LAYOUT_planck_mit(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, NUM, SH_T(KC_BSPC),_______, _______, _______, _______, _______, _______
+),
+//AUX LAYERS (NAV, SYM, NUM, FN)
[_NAV] = LAYOUT_planck_mit(
- KC_TRNS, _______, _______, _______, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_VOLU,
- _______, _______, _______, _______, BR_QUOT, _______, KC_ENT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_VOLD,
- KC_TRNS, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, _______, _______, KC_BSPC, KC_DEL, _______, _______, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, MYNUM, _______, KC_MPRV, KC_MPLY, KC_MNXT
+ KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, C(KC_V), C(KC_Z),
+ _______, KC_LALT, KC_LGUI, KC_LSFT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, C(KC_C), C(KC_X),
+ _______, _______, _______, _______, _______, _______, KC_ENT, KC_BSPC, KC_DEL, KC_VOLD, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, KC_ENT, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
),
-
-//symbols layer ok
[_SYM] = LAYOUT_planck_mit(
- BR_DQUO, BR_EXLM, BR_AT, BR_HASH, BR_DLR, BR_PERC, BR_DIAE, BR_AMPR, BR_ASTR, BR_LPRN, BR_RPRN, BR_COLN,
- BR_QUOT, BR_PIPE, _______, _______, _______, _______, _______, BR_PLUS, BR_UNDS, BR_LBRC, BR_RBRC, BR_SCLN,
- KC_TRNS, BR_BSLS, _______, _______, _______, _______, _______, BR_EQL, BR_MINS, BR_LCBR, BR_RCBR, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, KC_TRNS, KC_TRNS, KC_TRNS
+ BR_DQUO, BR_EXLM, BR_AT, BR_HASH, BR_DLR, BR_PERC, BR_DIAE, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ BR_QUOT, BR_BSLS, BR_SCLN, KC_MINS, BR_QUOT, _______, _______, KC_PLUS, _______, BR_LBRC, BR_RBRC, _______,
+ _______, BR_PIPE, BR_COLN, KC_UNDS, BR_DQUO, _______, _______, KC_EQL, _______, BR_LCBR, BR_RCBR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-
-//numbers layer ok
[_NUM] = LAYOUT_planck_mit(
- KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, BR_MINS,
- _______, BR_ASTR, BR_SLSH, BR_MINS, BR_PLUS, _______, _______, KC_4, KC_5, KC_6, BR_COMM, BR_PLUS,
- KC_TRNS, BR_PERC, BR_EQL, BR_DOT, BR_COMM, _______, _______, KC_1, KC_2, KC_3, BR_DOT, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, _______, MYNAV, _______, _______, KC_0, KC_0, KC_COMM, KC_ENT
+ _______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, BR_SLSH, BR_MINS,
+ _______, BR_SLSH, KC_ASTR, KC_MINS, KC_PLUS, _______, _______, KC_4, KC_5, KC_6, BR_ASTR, BR_PLUS,
+ _______, BR_PERC, KC_EQL, KC_DOT, KC_COMM, _______, _______, KC_1, KC_2, KC_3, BR_COLN, BR_DOT,
+ _______, _______, _______, _______, _______, _______, KC_0, KC_BSPC, BR_COMM, BR_EQL, KC_ENT
),
-
-//FN layer
[_FUNCTION] = LAYOUT_planck_mit(
- KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_INS,
- KC_PSCR, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, KC_F17, KC_F18, KC_F19, KC_F20, KC_PAUS,
- KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_F21, KC_F22, KC_F23, KC_F24, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, KC_TRNS, KC_TRNS, KC_TRNS
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_SCRL, _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_INS,
+ _______, KC_F5, KC_F6, KC_F7, KC_F8, KC_NUM, _______, KC_F17, KC_F18, KC_F19, KC_F20, KC_PAUS,
+ _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, KC_F21, KC_F22, KC_F23, KC_F24, KC_APP,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
),
-
-// adjust layer ok
+//ADJUST LAYER FOR KEYBOARD CONTROL
[_ADJUST] = LAYOUT_planck_mit(
- QK_BOOT, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, _______, _______, _______, _______, _______, _______,
- KC_CAPS, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, QWERTY, DVORAK, COLEMAK, WORKMAN, MIDI,
- _______, MI_ON, MI_OFF, MI_TOGG, MU_ON, MU_OFF, MU_TOGG, MU_NEXT, AU_ON, AU_OFF, _______, _______,
+ QK_BOOT, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, _______, MIDI, GAME, _______, _______, _______,
+ KC_CAPS, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, QWERTY, DVORAK, COLEMAK, WORKMAN, _______,
+ QK_RBT, _______, _______, _______, _______, _______, _______, TOG_CPY, TOG_SWP, _______, _______, _______,
RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-
-// midi layer
+//MOUSE LAYER
+[_MOUSE] = LAYOUT_planck_mit(
+ KC_ESC, KC_BTN6, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN6, KC_NO,
+ _______, KC_BTN4, KC_BTN2, KC_BTN3, KC_BTN1, KC_NO, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_NO,
+ _______, KC_BTN5, KC_ACL2, KC_ACL1, KC_ACL0, KC_NO, KC_BTN7, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN5, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+//MIDI
[_MIDI] = LAYOUT_planck_mit(
- MI_Cs, MI_Ds, _______, MI_Fs, MI_Gs, MI_As, _______, MI_Cs, MI_Ds, _______, MI_Fs, MI_Gs,
- MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C, MI_D, MI_E, MI_F, MI_G,
- MI_BNDU, MI_OCTU, MI_TRSU, MI_VELU, _______, _______, _______, _______, _______, MI_ON, MI_CHNU, MI_TOGG,
- MI_BNDD, MI_OCTD, MI_TRSD, MI_VELD, MYNAV, MI_SUST, MYNUM, _______, MI_OFF, MI_CHND, MI_AOFF
-)
+ MI_Cs, MI_Ds, MI_F, MI_Fs, MI_Gs, MI_As, MI_C, MI_Cs1, MI_Ds1, MI_F1, MI_Fs1, MI_Gs1,
+ MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C1, MI_D1, MI_E, MI_F1, MI_G1,
+ MI_BNDU, MI_OCTU, MI_TRSU, MI_VELU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MI_MODU,MI_CHNU, MI_TOGG,
+ MI_BNDD, MI_OCTD, MI_TRSD, MI_VELD, MI_SOFT, MI_SUST, SYM, FUN, MI_MODD,MI_CHND, MI_AOFF
+),
+//GAME
+[_GAME] = LAYOUT_planck_mit(
+ KC_ESC, JS_0, JS_1, JS_2, JS_3, JS_4, JS_5, JS_6, JS_7, JS_8, JS_9, KC_P,
+ KC_TAB, JS_10, JS_11, JS_12, JS_13, JS_14, JS_15, JS_16, JS_17, JS_18, JS_19, KC_O,
+ KC_LSFT, JS_20, JS_21, JS_22, JS_23, JS_24, JS_25, JS_26, JS_27, JS_28, JS_29, KC_L,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MEH, NUM, KC_SPC, SYM, FUN, KC_RALT, KC_HYPR, CTL_ENT
+),
};
+//Custom keycodes code for layer switching
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
@@ -155,10 +185,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
set_single_persistent_default_layer(_MIDI);
}
return false;
+ case GAME:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_GAME);
+ }
+ return false;
+ case TOG_CPY:
+ if (record->event.pressed) {
+ layer_invert(_CPY);
+ }
+ return false;
+ case TOG_SWP:
+ if (record->event.pressed) {
+ layer_invert(_SWP);
+ }
+ return false;
}
return true;
}
+//ADJUST and MOUSE layers activation code
layer_state_t layer_state_set_user(layer_state_t state) {
- return update_tri_layer_state(state, _NAV, _NUM, _ADJUST);
+ state = update_tri_layer_state(state, _FUNCTION, _SYM, _ADJUST);
+ state = update_tri_layer_state(state, _NAV, _NUM, _MOUSE);
+ return state;
}
+
+
+
+
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/readme.md b/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/readme.md
old mode 100644
new mode 100755
index b647e1e4187..69130dbfec3
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/readme.md
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/readme.md
@@ -1,35 +1,79 @@
# Brazilian keymap for the BM40RGB keyboard
-![qwerty](https://user-images.githubusercontent.com/62627597/133505514-466192cf-c58f-4b6f-9b7c-53ec36078401.png)
+![photo](https://user-images.githubusercontent.com/62627597/228396721-b38ea064-6e80-4aff-90ec-01164d0515ae.jpg)
This keymap deviates somewhat from the generally used conventions of Planck style keyboards.
It's built on the following principles:
-1. Availability of different base layers. QWERTY, Dvorak, Colemak and Workman are available. They can be chosen with the four right hand home row keys on the ADJUST layer (NAV + NUM keys). The base layout you choose gets stored on the keyboard EEPROM, so it will still be set if you unplug or reset the keyboard. I use Workman, so it's the default, but you can change to QWERTY easily with NAV + NUM + J (the J in QWERTY).
-2. Frequent use of navigation keys such as the arrow keys, home, end, and hotkeys using those keycodes. For that reason, it keeps the navigation keys on a dedicated nav layer, on the home row, under the right hand. The nav layer gets the highly accessible layer toggle button usually used for the LOWER layer on most Planck style keymaps. I find this much better than using dedicated arrow keys on the bottom right of the keyboard, as the very reason I swapped to a 40% is to move my hands less.
+1. Availability of different base layouts. QWERTY, Dvorak, Colemak and Workman are available. They can be chosen with the four right hand home row keys on the ADJUST layer (NAV + NUM keys). The base layout you choose gets stored on the keyboard EEPROM, so it will still be set if you unplug or reset the keyboard.
+2. Frequent use of navigation keys such as the arrow keys, home, end, and hotkeys using those keycodes. For that reason, it keeps the navigation keys on a dedicated nav layer, on the home row, under the right hand. The nav layer is activated by the first button of the home row (the usual caps lock position). I find this much better than using dedicated arrow keys on the bottom right of the keyboard, as the very reason I swapped to a 40% is to move my hands less.
3. Accessibility of the ´ ` ^ ~ ç symbols. There are several blank spaces left on the symbols layer, if you need access to other symbols or diacritics.
-4. Proper touch typing, and hotkey access, with the Ctrl, Shift, Win/Super and Alt modifiers on both sides. I found my hands very much expect Ctrl to be on the edge of the keyboard, and as such I've kept both bottom corner keys as Ctrl. Using those keys as layer modifiers, albeit common in many keymaps, is something I found to be somewhat awkward, as it makes it basically impossible to use the hand used to press them.
+4. Proper touch typing, and hotkey access, with the Shift key on both sides. I found my hands very much expect Ctrl to be on the edge of the keyboard, and as such I've kept both bottom corner keys as Ctrl. The right Ctrl will act as an Enter key if tapped.
5. Numbers and navigation keys should be slightly more accessible than symbols and function keys. If you use symbols more often, consider swapping the NUM and SYM layer toggle keys.
-6. It's easier to remember layers when they make sense conceptually. Hence, there are dedicated layers for navigation/utility (NAV), numbers (NUM), symbols (SYM) and function keys (FN). There's a dedicated MIDI layer. Don't forget to add #define MIDI_ADVANCED to your config.h if you plan on using it.
-7. Tap hold is a good tool and you should use it if you can. Backspace and Delete are set as tap functions on the two more accessible layer toggle keys.
+6. It's easier to remember layers when they make sense conceptually, so no "lower" and "raise" layers. Instead, there are dedicated layers for navigation/utility (NAV), numbers (NUM), symbols (SYM) and function keys (FN). There's also dedicated MIDI layers, a layer for one-hand typing, a mouse-emulating layer, and a layer for one-hand navigation and copy-pasting.
+7. Tap hold is a good tool and you should use it if you can. Backspace and Delete are set as tap functions on the two more accessible layer toggle keys. The bottom right Ctrl behaves as Enter when tapped. The Nav layer button is Tab when tapped.
+8. Easy-to-access shortcut modifiers. This layout includes a Master key (Shift+Ctrl+Alt) and a Hyper key (Shift+Ctrl+Alt+Super) for configuring system shortcuts.
-It will only work as intended if your system keyboard layout is set to Brazilian ABNT2. It may work with other international layouts, but some keys, including brackets and the ´ ` ~ ^ keys, will get broken.
+It will only work as intended if your system keyboard layout is set to Brazilian ABNT2. It may work with other international layouts, but some keys, including brackets and the ´ ` ~ ^ keys, will get broken. If your system layout is another one, it should be relatively easy to change keymap.c (search and replace each key with the equivalent one from the international keymaps file).
-# Layers and functions
+# Base Layers
-In each key:
-Top left: Symbols;
-Top right: Functions;
-Bottom left: Navigation;
-Bottom right: Numbers;
-Bottom: secondary function (tap/hold)
+These are selected as the base by a button in the Adjust layer.
-# BASE (Qwerty, Dvorak, Colemak, Workman)
-![qwerty](https://user-images.githubusercontent.com/62627597/133505788-e8410162-8491-4f52-bc94-62dacb752171.png)
+## Normal
-# Adjust (NAV+NUM)
-![adjust](https://user-images.githubusercontent.com/62627597/133182475-1994e733-71a2-42ee-88fe-9a15e711b938.png)
+![bm40rgb-wolff-base](https://user-images.githubusercontent.com/62627597/228848191-cb403c12-c090-4aeb-b207-506e5c80c547.png)
-# MIDI
-![midi](https://user-images.githubusercontent.com/62627597/133505599-8ae3ea32-5f8f-451f-b191-f74c514d22c0.png)
+QWERTY, Dvorak, Colemak and Workman are built-in.
+## MIDI
+
+![bm40rgb-wolff-midi](https://user-images.githubusercontent.com/62627597/228708182-5ba2b9f4-e1f4-4e10-be6e-58ff373f274a.png)
+
+One and a half octaves piano on the top rows, control signals in the bottom rows. SYM and FUN remain accessible so the ADJ layer can be accessed.
+
+## Joystick
+
+![bm40rgb-wolff-game](https://user-images.githubusercontent.com/62627597/228849208-9fb10cf3-0a11-4799-877a-48eafe811078.png)
+
+Emulates a 32-button joystick for using as a button-box or dedicated game controller.
+
+# Modifier layers
+
+These are activated by holding down modifier keys.
+
+## Navigation Layer (NAV)
+
+![bm40rgb-wolff-nav](https://user-images.githubusercontent.com/62627597/228853095-6c254027-adfb-4afb-9536-4f00e11ab3cb.png)
+
+The layer you'll access most often. Navigation keys right on the right-hand homerow, plus a few common utilities.
+
+## Functions Layer (FUN)
+
+![bm40rgb-wolff-fun](https://user-images.githubusercontent.com/62627597/228852255-3c12d3c8-733a-4680-888c-35a4162cd3a3.png)
+
+## Mouse Layer
+
+![bm40rgb-wolff-mouse](https://user-images.githubusercontent.com/62627597/228853517-08934862-ca70-444d-a6bc-9dec584c6bb5.png)
+
+Emulates mouse actions so you can perform simple tasks without reaching for the mouse.
+
+## Adjust Layer (SYM + FUN)
+
+![bm40rgb-wolff-adj](https://user-images.githubusercontent.com/62627597/228851675-ec61ad2b-95a9-402b-933a-009e9f52fbd3.png)
+
+# Additional/utility layers
+
+These are utility overlays toggled by a key in the Adjust layer.
+
+## Handswap Layer
+
+![bm40rgb-swap-hands](https://user-images.githubusercontent.com/62627597/228849174-e3bca496-9f5a-49d6-a41e-9b65adbc6c34.png)
+
+For one-hand typing. The three top rows are mirrorred when SWAP is held down.
+
+## CPY Layer (One-hand navigation layer)
+
+![bm40rgb-copy](https://user-images.githubusercontent.com/62627597/228847641-4caa777e-c368-4921-a0a4-10c47afa2537.png)
+
+For general navigation and quick copy-paste one-handed stuff. I don't like using it, but my job demands it sometimes.
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/rules.mk b/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/rules.mk
new file mode 100755
index 00000000000..c69721fa475
--- /dev/null
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/wolff_abnt2/rules.mk
@@ -0,0 +1,19 @@
+LTO_ENABLE = yes
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+TERMINAL_ENABLE = no
+
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+SPLIT_KEYBOARD = no
+KEY_LOCK_ENABLE = no
+RGB_MATRIX_ENABLE = yes
+LAYOUTS = planck_mit
+
+MIDI_ENABLE = yes
+JOYSTICK_ENABLE = yes
+JOYSTICK_DRIVER = digital
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+SWAP_HANDS_ENABLE = yes
+
+STENO_ENABLE = no # Enabling steno requires disabling all options in the previous block.
diff --git a/keyboards/lucid/velvet_hotswap/info.json b/keyboards/lucid/velvet_hotswap/info.json
new file mode 100644
index 00000000000..179d4484a10
--- /dev/null
+++ b/keyboards/lucid/velvet_hotswap/info.json
@@ -0,0 +1,127 @@
+{
+ "keyboard_name": "Velvet Hotswap",
+ "manufacturer": "FJLaboratories",
+ "url": "http://www.makerkeyboards.com",
+ "maintainer": "Maker Keyboards",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0008",
+ "vid": "0x7667"
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["F2", "F3", "F4", "F5", "F6", "F7", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "D5", "D6", "D7"],
+ "rows": ["B4", "B5", "B6", "C0", "E1", "E0"]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "processor": "at90usb646",
+ "bootloader": "atmel-dfu",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "label":"Esc", "x":0, "y":0},
+ {"matrix": [0, 1], "label":"F1", "x":1.25, "y":0},
+ {"matrix": [0, 2], "label":"F2", "x":2.25, "y":0},
+ {"matrix": [0, 3], "label":"F3", "x":3.25, "y":0},
+ {"matrix": [0, 4], "label":"F4", "x":4.25, "y":0},
+ {"matrix": [0, 5], "label":"F5", "x":5.5, "y":0},
+ {"matrix": [0, 6], "label":"F6", "x":6.5, "y":0},
+ {"matrix": [0, 7], "label":"F7", "x":7.5, "y":0},
+ {"matrix": [0, 8], "label":"F8", "x":8.5, "y":0},
+ {"matrix": [0, 9], "label":"F9", "x":9.75, "y":0},
+ {"matrix": [0, 10], "label":"F10", "x":10.75, "y":0},
+ {"matrix": [0, 11], "label":"F11", "x":11.75, "y":0},
+ {"matrix": [0, 12], "label":"F12", "x":12.75, "y":0},
+ {"matrix": [0, 13], "label":"F13", "x":14, "y":0},
+ {"matrix": [0, 14], "label":"PrtSc", "x":15.25, "y":0},
+ {"matrix": [0, 15], "label":"Scroll Lock", "x":16.25, "y":0},
+ {"matrix": [0, 16], "label":"Pause", "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "label":"~", "x":0, "y":1.25},
+ {"matrix": [1, 1], "label":"!", "x":1, "y":1.25},
+ {"matrix": [1, 2], "label":"@", "x":2, "y":1.25},
+ {"matrix": [1, 3], "label":"#", "x":3, "y":1.25},
+ {"matrix": [1, 4], "label":"$", "x":4, "y":1.25},
+ {"matrix": [1, 5], "label":"%", "x":5, "y":1.25},
+ {"matrix": [1, 6], "label":"^", "x":6, "y":1.25},
+ {"matrix": [1, 7], "label":"&", "x":7, "y":1.25},
+ {"matrix": [1, 8], "label":"*", "x":8, "y":1.25},
+ {"matrix": [1, 9], "label":"(", "x":9, "y":1.25},
+ {"matrix": [1, 10], "label":")", "x":10, "y":1.25},
+ {"matrix": [1, 11], "label":"_", "x":11, "y":1.25},
+ {"matrix": [1, 12], "label":"+", "x":12, "y":1.25},
+ {"matrix": [3, 12], "label":"Back Space", "x":13, "y":1.25},
+ {"matrix": [1, 13], "label":"Back Space", "x":14, "y":1.25},
+ {"matrix": [1, 14], "label":"Insert", "x":15.25, "y":1.25},
+ {"matrix": [1, 15], "label":"Home", "x":16.25, "y":1.25},
+ {"matrix": [1, 16], "label":"PgUp", "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "label":"Q", "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "label":"W", "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "label":"E", "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "label":"R", "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "label":"T", "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "label":"Y", "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "label":"U", "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "label":"I", "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "label":"O", "x":9.5, "y":2.25},
+ {"matrix": [2, 10], "label":"P", "x":10.5, "y":2.25},
+ {"matrix": [2, 11], "label":"{", "x":11.5, "y":2.25},
+ {"matrix": [2, 12], "label":"}", "x":12.5, "y":2.25},
+ {"matrix": [2, 13], "label":"|", "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2, 14], "label":"Delete", "x":15.25, "y":2.25},
+ {"matrix": [2, 15], "label":"End", "x":16.25, "y":2.25},
+ {"matrix": [2, 16], "label":"PgDn", "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "label":"A", "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "label":"S", "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "label":"D", "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "label":"F", "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "label":"G", "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "label":"H", "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "label":"J", "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "label":"K", "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "label":"L", "x":9.75, "y":3.25},
+ {"matrix": [3, 10], "label":":", "x":10.75, "y":3.25},
+ {"matrix": [3, 11], "label":"SQ", "x":11.75, "y":3.25},
+ {"matrix": [3, 13], "label":"Enter", "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "label":"Left Shift", "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 1], "label":"Z", "x":2.25, "y":4.25},
+ {"matrix": [4, 2], "label":"X", "x":3.25, "y":4.25},
+ {"matrix": [4, 3], "label":"C", "x":4.25, "y":4.25},
+ {"matrix": [4, 4], "label":"V", "x":5.25, "y":4.25},
+ {"matrix": [4, 5], "label":"B", "x":6.25, "y":4.25},
+ {"matrix": [4, 6], "label":"N", "x":7.25, "y":4.25},
+ {"matrix": [4, 7], "label":"M", "x":8.25, "y":4.25},
+ {"matrix": [4, 8], "label":"<", "x":9.25, "y":4.25},
+ {"matrix": [4, 9], "label":">", "x":10.25, "y":4.25},
+ {"matrix": [4, 10], "label":"?", "x":11.25, "y":4.25},
+ {"matrix": [4, 12], "label":"Right Shift", "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4, 13], "label":"Right Shift", "x":12.25, "y":4.25},
+ {"matrix": [4, 15], "label":"\u2191", "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "label":"Ctrl", "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "label":"Win", "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "label":"Alt", "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 5], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix": [5, 9], "label":"Alt", "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5, 10], "label":"Win", "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 11], "label":"Menu", "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 13], "label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5, 14], "label":"\u2190", "x":15.25, "y":5.25},
+ {"matrix": [5, 15], "label":"\u2193", "x":16.25, "y":5.25},
+ {"matrix": [5, 16], "label":"\u2192", "x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/lucid/velvet_hotswap/keymaps/default/keymap.c b/keyboards/lucid/velvet_hotswap/keymaps/default/keymap.c
new file mode 100644
index 00000000000..93c617b1a17
--- /dev/null
+++ b/keyboards/lucid/velvet_hotswap/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSPC, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/lucid/velvet_hotswap/keymaps/via/keymap.c b/keyboards/lucid/velvet_hotswap/keymaps/via/keymap.c
new file mode 100644
index 00000000000..bd0122a4a8e
--- /dev/null
+++ b/keyboards/lucid/velvet_hotswap/keymaps/via/keymap.c
@@ -0,0 +1,61 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+ _LAYER2,
+ _LAYER3,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_LAYER2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_LAYER3] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/lucid/velvet_hotswap/keymaps/via/rules.mk b/keyboards/lucid/velvet_hotswap/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/lucid/velvet_hotswap/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/lucid/velvet_hotswap/readme.md b/keyboards/lucid/velvet_hotswap/readme.md
new file mode 100644
index 00000000000..7c6c72ee381
--- /dev/null
+++ b/keyboards/lucid/velvet_hotswap/readme.md
@@ -0,0 +1,20 @@
+# Velvet Hotswap PCB by Lucid
+
+The following is the QMK Firmware for the Velvet Hotswap PCB by [Maker Keyboards](http://www.makerkeyboards.com).
+* Keyboard Maintainer: Maker Keyboards
+* Hardware Supported: Velvet
+
+Make example for this keyboard (after setting up your build environment):
+
+ make lucid/velvet_hotswap:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the top left key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available (Fn+Backslash by default)
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lucid/velvet_hotswap/rules.mk b/keyboards/lucid/velvet_hotswap/rules.mk
new file mode 100644
index 00000000000..5a00049a750
--- /dev/null
+++ b/keyboards/lucid/velvet_hotswap/rules.mk
@@ -0,0 +1,2 @@
+# Processor frequency
+F_CPU = 8000000
\ No newline at end of file
diff --git a/keyboards/lucid/velvet_solder/info.json b/keyboards/lucid/velvet_solder/info.json
new file mode 100644
index 00000000000..7ee6d55f73e
--- /dev/null
+++ b/keyboards/lucid/velvet_solder/info.json
@@ -0,0 +1,130 @@
+{
+ "keyboard_name": "Velvet Solder",
+ "manufacturer": "FJLaboratories",
+ "url": "http://www.makerkeyboards.com",
+ "maintainer": "Maker Keyboards",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0007",
+ "vid": "0x7667"
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["F2", "F3", "F4", "F5", "F6", "F7", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "D5", "D6", "D7"],
+ "rows": ["B4", "B5", "B6", "C0", "E1", "E0"]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "processor": "at90usb646",
+ "bootloader": "atmel-dfu",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "label":"Esc", "x":0, "y":0},
+ {"matrix": [0, 1], "label":"F1", "x":1.25, "y":0},
+ {"matrix": [0, 2], "label":"F2", "x":2.25, "y":0},
+ {"matrix": [0, 3], "label":"F3", "x":3.25, "y":0},
+ {"matrix": [0, 4], "label":"F4", "x":4.25, "y":0},
+ {"matrix": [0, 5], "label":"F5", "x":5.5, "y":0},
+ {"matrix": [0, 6], "label":"F6", "x":6.5, "y":0},
+ {"matrix": [0, 7], "label":"F7", "x":7.5, "y":0},
+ {"matrix": [0, 8], "label":"F8", "x":8.5, "y":0},
+ {"matrix": [0, 9], "label":"F9", "x":9.75, "y":0},
+ {"matrix": [0, 10], "label":"F10", "x":10.75, "y":0},
+ {"matrix": [0, 11], "label":"F11", "x":11.75, "y":0},
+ {"matrix": [0, 12], "label":"F12", "x":12.75, "y":0},
+ {"matrix": [0, 13], "label":"F13", "x":14, "y":0},
+ {"matrix": [0, 14], "label":"PrtSc", "x":15.25, "y":0},
+ {"matrix": [0, 15], "label":"Scroll Lock", "x":16.25, "y":0},
+ {"matrix": [0, 16], "label":"Pause", "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "label":"~", "x":0, "y":1.25},
+ {"matrix": [1, 1], "label":"!", "x":1, "y":1.25},
+ {"matrix": [1, 2], "label":"@", "x":2, "y":1.25},
+ {"matrix": [1, 3], "label":"#", "x":3, "y":1.25},
+ {"matrix": [1, 4], "label":"$", "x":4, "y":1.25},
+ {"matrix": [1, 5], "label":"%", "x":5, "y":1.25},
+ {"matrix": [1, 6], "label":"^", "x":6, "y":1.25},
+ {"matrix": [1, 7], "label":"&", "x":7, "y":1.25},
+ {"matrix": [1, 8], "label":"*", "x":8, "y":1.25},
+ {"matrix": [1, 9], "label":"(", "x":9, "y":1.25},
+ {"matrix": [1, 10], "label":")", "x":10, "y":1.25},
+ {"matrix": [1, 11], "label":"_", "x":11, "y":1.25},
+ {"matrix": [1, 12], "label":"+", "x":12, "y":1.25},
+ {"matrix": [1, 13], "label":"Back Space", "x":13, "y":1.25},
+ {"matrix": [3, 14], "label":"Back Space", "x":14, "y":1.25},
+ {"matrix": [1, 14], "label":"Insert", "x":15.25, "y":1.25},
+ {"matrix": [1, 15], "label":"Home", "x":16.25, "y":1.25},
+ {"matrix": [1, 16], "label":"PgUp", "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "label":"Q", "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "label":"W", "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "label":"E", "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "label":"R", "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "label":"T", "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "label":"Y", "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "label":"U", "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "label":"I", "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "label":"O", "x":9.5, "y":2.25},
+ {"matrix": [2, 10], "label":"P", "x":10.5, "y":2.25},
+ {"matrix": [2, 11], "label":"{", "x":11.5, "y":2.25},
+ {"matrix": [2, 12], "label":"}", "x":12.5, "y":2.25},
+ {"matrix": [2, 13], "label":"|", "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2, 14], "label":"Delete", "x":15.25, "y":2.25},
+ {"matrix": [2, 15], "label":"End", "x":16.25, "y":2.25},
+ {"matrix": [2, 16], "label":"PgDn", "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "label":"A", "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "label":"S", "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "label":"D", "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "label":"F", "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "label":"G", "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "label":"H", "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "label":"J", "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "label":"K", "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "label":"L", "x":9.75, "y":3.25},
+ {"matrix": [3, 10], "label":":", "x":10.75, "y":3.25},
+ {"matrix": [3, 11], "label":"SQ", "x":11.75, "y":3.25},
+ {"matrix": [3, 13], "label":"Enter", "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "label":"Left Shift", "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "label":"Left Shift", "x":1.25, "y":4.25, "w":1},
+ {"matrix": [4, 2], "label":"Z", "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "label":"X", "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "label":"C", "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "label":"V", "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "label":"B", "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "label":"N", "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "label":"M", "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "label":"<", "x":9.25, "y":4.25},
+ {"matrix": [4, 10], "label":">", "x":10.25, "y":4.25},
+ {"matrix": [4, 11], "label":"?", "x":11.25, "y":4.25},
+ {"matrix": [4, 12], "label":"Right Shift", "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4, 13], "label":"Right Shift", "x":12.25, "y":4.25},
+ {"matrix": [4, 15], "label":"\u2191", "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "label":"Ctrl", "x":0, "y":5.25, "w":1.25},
+ {"matrix": [5, 1], "label":"Win", "x":1.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 2], "label":"Alt", "x":2.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 4], "x":3.75, "y":5.25, "w":2.75},
+ {"matrix": [5, 5], "x":6.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 8], "x":6.75, "y":5.25, "w":2.25},
+ {"matrix": [5, 9], "label":"Alt", "x":10, "y":5.25, "w":1.25},
+ {"matrix": [5, 10], "label":"Win", "x":11.25, "y":5.25, "w":1.25},
+ {"matrix": [5, 11], "label":"Menu", "x":12.5, "y":5.25, "w":1.25},
+ {"matrix": [5, 13], "label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
+ {"matrix": [5, 14], "label":"\u2190", "x":15.25, "y":5.25},
+ {"matrix": [5, 15], "label":"\u2193", "x":16.25, "y":5.25},
+ {"matrix": [5, 16], "label":"\u2192", "x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/lucid/velvet_solder/keymaps/default/keymap.c b/keyboards/lucid/velvet_solder/keymaps/default/keymap.c
new file mode 100644
index 00000000000..dbe2f58a81a
--- /dev/null
+++ b/keyboards/lucid/velvet_solder/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSPC, KC_ENT,
+ KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/lucid/velvet_solder/keymaps/via/keymap.c b/keyboards/lucid/velvet_solder/keymaps/via/keymap.c
new file mode 100644
index 00000000000..b6d8377e4c4
--- /dev/null
+++ b/keyboards/lucid/velvet_solder/keymaps/via/keymap.c
@@ -0,0 +1,61 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+ _LAYER2,
+ _LAYER3,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_LAYER2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_LAYER3] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/lucid/velvet_solder/keymaps/via/rules.mk b/keyboards/lucid/velvet_solder/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/lucid/velvet_solder/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/lucid/velvet_solder/readme.md b/keyboards/lucid/velvet_solder/readme.md
new file mode 100644
index 00000000000..83fd074047a
--- /dev/null
+++ b/keyboards/lucid/velvet_solder/readme.md
@@ -0,0 +1,20 @@
+# Velvet Solder PCB by Lucid
+
+The following is the QMK Firmware for the Velvet Solder PCB by [Maker Keyboards](http://www.makerkeyboards.com).
+* Keyboard Maintainer: Maker Keyboards
+* Hardware Supported: Velvet
+
+Make example for this keyboard (after setting up your build environment):
+
+ make lucid/velvet_solder:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Bootmagic reset**: Hold down the top left key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available (Fn+Backslash by default)
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lucid/velvet_solder/rules.mk b/keyboards/lucid/velvet_solder/rules.mk
new file mode 100644
index 00000000000..5a00049a750
--- /dev/null
+++ b/keyboards/lucid/velvet_solder/rules.mk
@@ -0,0 +1,2 @@
+# Processor frequency
+F_CPU = 8000000
\ No newline at end of file
diff --git a/keyboards/novelkeys/nk_plus/config.h b/keyboards/novelkeys/nk_plus/config.h
new file mode 100644
index 00000000000..2d3322bab2a
--- /dev/null
+++ b/keyboards/novelkeys/nk_plus/config.h
@@ -0,0 +1,80 @@
+/*
+Copyright 2022 Yiancar
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* RGB options */
+
+#define WS2812_PWM_DRIVER PWMD3
+#define WS2812_PWM_CHANNEL 1
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM3
+#define WS2812_DMA_CHANNEL 3
+
+#define RGB_MATRIX_LED_COUNT 76
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+#define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+#define ENABLE_RGB_MATRIX_BAND_SAT
+#define ENABLE_RGB_MATRIX_BAND_VAL
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#define ENABLE_RGB_MATRIX_DUAL_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#define ENABLE_RGB_MATRIX_RAINDROPS
+#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#define ENABLE_RGB_MATRIX_HUE_BREATHING
+#define ENABLE_RGB_MATRIX_HUE_PENDULUM
+#define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_RAIN
+#define ENABLE_RGB_MATRIX_PIXEL_FLOW
+#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+#define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/novelkeys/nk_plus/halconf.h b/keyboards/novelkeys/nk_plus/halconf.h
new file mode 100644
index 00000000000..ce14bc0c416
--- /dev/null
+++ b/keyboards/novelkeys/nk_plus/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/novelkeys/nk_plus/info.json b/keyboards/novelkeys/nk_plus/info.json
new file mode 100755
index 00000000000..29230e3f163
--- /dev/null
+++ b/keyboards/novelkeys/nk_plus/info.json
@@ -0,0 +1,196 @@
+{
+ "keyboard_name": "NK+",
+ "manufacturer": "Yiancar-Designs",
+ "url": "www.yiancar-designs.com",
+ "maintainer": "Yiancar",
+ "usb": {
+ "vid": "0x8968",
+ "pid": "0x4E51",
+ "device_version": "0.0.1"
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["A2", "A1", "A0", "A3", "A4", "A5", "A6", "A7", "B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10", "A14"],
+ "rows": ["B2", "B1", "B0", "B10", "B3"]
+ },
+ "features": {
+ "backlight": false,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true,
+ "rgblight": false
+ },
+ "processor": "STM32F072",
+ "bootloader": "stm32-dfu",
+ "rgb_matrix": {
+ "driver": "WS2812",
+ "layout": [
+ { "flags": 1, "matrix": [0, 0], "x": 0, "y": 0 },
+ { "flags": 1, "matrix": [0, 1], "x": 13, "y": 0 },
+ { "flags": 1, "matrix": [0, 2], "x": 32, "y": 0 },
+ { "flags": 4, "matrix": [0, 3], "x": 45, "y": 0 },
+ { "flags": 4, "matrix": [0, 4], "x": 58, "y": 0 },
+ { "flags": 4, "matrix": [0, 5], "x": 70, "y": 0 },
+ { "flags": 4, "matrix": [0, 6], "x": 83, "y": 0 },
+ { "flags": 4, "matrix": [0, 7], "x": 96, "y": 0 },
+ { "flags": 4, "matrix": [0, 8], "x": 109, "y": 0 },
+ { "flags": 4, "matrix": [0, 9], "x": 122, "y": 0 },
+ { "flags": 4, "matrix": [0, 10], "x": 134, "y": 0 },
+ { "flags": 4, "matrix": [0, 11], "x": 147, "y": 0 },
+ { "flags": 4, "matrix": [0, 12], "x": 160, "y": 0 },
+ { "flags": 4, "matrix": [0, 13], "x": 173, "y": 0 },
+ { "flags": 4, "matrix": [0, 14], "x": 186, "y": 0 },
+ { "flags": 1, "matrix": [0, 15], "x": 205, "y": 0 },
+ { "flags": 1, "matrix": [0, 16], "x": 224, "y": 0 },
+ { "flags": 1, "matrix": [1, 16], "x": 224, "y": 16 },
+ { "flags": 4, "matrix": [1, 15], "x": 208, "y": 16 },
+ { "flags": 4, "matrix": [1, 14], "x": 192, "y": 16 },
+ { "flags": 4, "matrix": [1, 13], "x": 179, "y": 16 },
+ { "flags": 4, "matrix": [1, 12], "x": 166, "y": 16 },
+ { "flags": 4, "matrix": [1, 11], "x": 154, "y": 16 },
+ { "flags": 4, "matrix": [1, 10], "x": 141, "y": 16 },
+ { "flags": 4, "matrix": [1, 9], "x": 128, "y": 16 },
+ { "flags": 4, "matrix": [1, 8], "x": 115, "y": 16 },
+ { "flags": 4, "matrix": [1, 7], "x": 102, "y": 16 },
+ { "flags": 4, "matrix": [1, 6], "x": 90, "y": 16 },
+ { "flags": 4, "matrix": [1, 5], "x": 77, "y": 16 },
+ { "flags": 4, "matrix": [1, 4], "x": 64, "y": 16 },
+ { "flags": 4, "matrix": [1, 3], "x": 51, "y": 16 },
+ { "flags": 1, "matrix": [1, 2], "x": 35, "y": 16 },
+ { "flags": 1, "matrix": [1, 1], "x": 13, "y": 16 },
+ { "flags": 1, "matrix": [1, 0], "x": 0, "y": 16 },
+ { "flags": 1, "matrix": [2, 0], "x": 0, "y": 32 },
+ { "flags": 1, "matrix": [2, 1], "x": 13, "y": 32 },
+ { "flags": 1, "matrix": [2, 2], "x": 37, "y": 32 },
+ { "flags": 4, "matrix": [2, 3], "x": 54, "y": 32 },
+ { "flags": 4, "matrix": [2, 4], "x": 67, "y": 32 },
+ { "flags": 4, "matrix": [2, 5], "x": 80, "y": 32 },
+ { "flags": 4, "matrix": [2, 6], "x": 93, "y": 32 },
+ { "flags": 4, "matrix": [2, 7], "x": 106, "y": 32 },
+ { "flags": 4, "matrix": [2, 8], "x": 118, "y": 32 },
+ { "flags": 4, "matrix": [2, 9], "x": 131, "y": 32 },
+ { "flags": 4, "matrix": [2, 10], "x": 144, "y": 32 },
+ { "flags": 4, "matrix": [2, 11], "x": 157, "y": 32 },
+ { "flags": 4, "matrix": [2, 12], "x": 170, "y": 32 },
+ { "flags": 4, "matrix": [2, 13], "x": 182, "y": 32 },
+ { "flags": 1, "matrix": [2, 15], "x": 203, "y": 32 },
+ { "flags": 1, "matrix": [2, 16], "x": 224, "y": 32 },
+ { "flags": 1, "matrix": [3, 16], "x": 224, "y": 48 },
+ { "flags": 1, "matrix": [3, 15], "x": 211, "y": 48 },
+ { "flags": 1, "matrix": [3, 14], "x": 194, "y": 48 },
+ { "flags": 4, "matrix": [3, 13], "x": 176, "y": 48 },
+ { "flags": 4, "matrix": [3, 12], "x": 163, "y": 48 },
+ { "flags": 4, "matrix": [3, 11], "x": 150, "y": 48 },
+ { "flags": 4, "matrix": [3, 10], "x": 138, "y": 48 },
+ { "flags": 4, "matrix": [3, 9], "x": 125, "y": 48 },
+ { "flags": 4, "matrix": [3, 8], "x": 112, "y": 48 },
+ { "flags": 4, "matrix": [3, 7], "x": 99, "y": 48 },
+ { "flags": 4, "matrix": [3, 6], "x": 86, "y": 48 },
+ { "flags": 4, "matrix": [3, 5], "x": 74, "y": 48 },
+ { "flags": 4, "matrix": [3, 4], "x": 61, "y": 48 },
+ { "flags": 1, "matrix": [3, 2], "x": 40, "y": 48 },
+ { "flags": 1, "matrix": [3, 1], "x": 13, "y": 48 },
+ { "flags": 1, "matrix": [3, 0], "x": 0, "y": 48 },
+ { "flags": 1, "matrix": [4, 0], "x": 0, "y": 64 },
+ { "flags": 1, "matrix": [4, 1], "x": 13, "y": 64 },
+ { "flags": 1, "matrix": [4, 2], "x": 35, "y": 64 },
+ { "flags": 1, "matrix": [4, 3], "x": 51, "y": 64 },
+ { "flags": 1, "matrix": [4, 4], "x": 67, "y": 64 },
+ { "flags": 4, "matrix": [4, 8], "x": 122, "y": 64 },
+ { "flags": 1, "matrix": [4, 13], "x": 176, "y": 64 },
+ { "flags": 1, "matrix": [4, 14], "x": 198, "y": 64 },
+ { "flags": 1, "matrix": [4, 15], "x": 211, "y": 64 },
+ { "flags": 1, "matrix": [4, 16], "x": 224, "y": 64 }
+ ],
+ "max_brightness": 120
+ },
+ "rgblight": {
+ "pin": "B4"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2.5, "y": 0 },
+ { "matrix": [0, 3], "x": 3.5, "y": 0 },
+ { "matrix": [0, 4], "x": 4.5, "y": 0 },
+ { "matrix": [0, 5], "x": 5.5, "y": 0 },
+ { "matrix": [0, 6], "x": 6.5, "y": 0 },
+ { "matrix": [0, 7], "x": 7.5, "y": 0 },
+ { "matrix": [0, 8], "x": 8.5, "y": 0 },
+ { "matrix": [0, 9], "x": 9.5, "y": 0 },
+ { "matrix": [0, 10], "x": 10.5, "y": 0 },
+ { "matrix": [0, 11], "x": 11.5, "y": 0 },
+ { "matrix": [0, 12], "x": 12.5, "y": 0 },
+ { "matrix": [0, 13], "x": 13.5, "y": 0 },
+ { "matrix": [0, 14], "x": 14.5, "y": 0 },
+ { "matrix": [0, 15], "x": 15.5, "y": 0 },
+ { "matrix": [0, 16], "x": 17.5, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "matrix": [1, 3], "x": 4, "y": 1 },
+ { "matrix": [1, 4], "x": 5, "y": 1 },
+ { "matrix": [1, 5], "x": 6, "y": 1 },
+ { "matrix": [1, 6], "x": 7, "y": 1 },
+ { "matrix": [1, 7], "x": 8, "y": 1 },
+ { "matrix": [1, 8], "x": 9, "y": 1 },
+ { "matrix": [1, 9], "x": 10, "y": 1 },
+ { "matrix": [1, 10], "x": 11, "y": 1 },
+ { "matrix": [1, 11], "x": 12, "y": 1 },
+ { "matrix": [1, 12], "x": 13, "y": 1 },
+ { "matrix": [1, 13], "x": 14, "y": 1 },
+ { "matrix": [1, 14], "x": 15, "y": 1 },
+ { "matrix": [1, 15], "x": 16, "y": 1 },
+ { "matrix": [1, 16], "x": 17.5, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2.5, "y": 2 },
+ { "matrix": [2, 3], "x": 4.25, "y": 2 },
+ { "matrix": [2, 4], "x": 5.25, "y": 2 },
+ { "matrix": [2, 5], "x": 6.25, "y": 2 },
+ { "matrix": [2, 6], "x": 7.25, "y": 2 },
+ { "matrix": [2, 7], "x": 8.25, "y": 2 },
+ { "matrix": [2, 8], "x": 9.25, "y": 2 },
+ { "matrix": [2, 9], "x": 10.25, "y": 2 },
+ { "matrix": [2, 10], "x": 11.25, "y": 2 },
+ { "matrix": [2, 11], "x": 12.25, "y": 2 },
+ { "matrix": [2, 12], "x": 13.25, "y": 2 },
+ { "matrix": [2, 13], "x": 14.25, "y": 2 },
+ { "matrix": [2, 15], "x": 15.25, "y": 2 },
+ { "matrix": [2, 16], "x": 17.5, "y": 2 },
+ { "matrix": [3, 0], "x": 0, "y": 3 },
+ { "matrix": [3, 1], "x": 1, "y": 3 },
+ { "matrix": [3, 2], "x": 2.5, "y": 3 },
+ { "matrix": [3, 4], "x": 4.75, "y": 3 },
+ { "matrix": [3, 5], "x": 5.75, "y": 3 },
+ { "matrix": [3, 6], "x": 6.75, "y": 3 },
+ { "matrix": [3, 7], "x": 7.75, "y": 3 },
+ { "matrix": [3, 8], "x": 8.75, "y": 3 },
+ { "matrix": [3, 9], "x": 9.75, "y": 3 },
+ { "matrix": [3, 10], "x": 10.75, "y": 3 },
+ { "matrix": [3, 11], "x": 11.75, "y": 3 },
+ { "matrix": [3, 12], "x": 12.75, "y": 3 },
+ { "matrix": [3, 13], "x": 13.75, "y": 3 },
+ { "matrix": [3, 14], "x": 14.75, "y": 3 },
+ { "matrix": [3, 15], "x": 16.5, "y": 3 },
+ { "matrix": [3, 16], "x": 17.5, "y": 3 },
+ { "matrix": [4, 0], "x": 0, "y": 4 },
+ { "matrix": [4, 1], "x": 1, "y": 4 },
+ { "matrix": [4, 2], "x": 2.5, "y": 4 },
+ { "matrix": [4, 3], "x": 4, "y": 4 },
+ { "matrix": [4, 4], "x": 5, "y": 4 },
+ { "matrix": [4, 8], "x": 6.5, "y": 4 },
+ { "matrix": [4, 13], "x": 13.5, "y": 4 },
+ { "matrix": [4, 14], "x": 15.5, "y": 4 },
+ { "matrix": [4, 15], "x": 16.5, "y": 4 },
+ { "matrix": [4, 16], "x": 17.5, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/novelkeys/nk_plus/keymaps/default/keymap.c b/keyboards/novelkeys/nk_plus/keymaps/default/keymap.c
new file mode 100644
index 00000000000..b5697a731d9
--- /dev/null
+++ b/keyboards/novelkeys/nk_plus/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ KC_F1, KC_F2, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT( /* FN */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/novelkeys/nk_plus/keymaps/via/keymap.c b/keyboards/novelkeys/nk_plus/keymaps/via/keymap.c
new file mode 100644
index 00000000000..9e877b98048
--- /dev/null
+++ b/keyboards/novelkeys/nk_plus/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ KC_F1, KC_F2, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT( /* FN */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/novelkeys/nk_plus/keymaps/via/rules.mk b/keyboards/novelkeys/nk_plus/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/novelkeys/nk_plus/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/novelkeys/nk_plus/mcuconf.h b/keyboards/novelkeys/nk_plus/mcuconf.h
new file mode 100644
index 00000000000..7cf6a48904d
--- /dev/null
+++ b/keyboards/novelkeys/nk_plus/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
diff --git a/keyboards/novelkeys/nk_plus/readme.md b/keyboards/novelkeys/nk_plus/readme.md
new file mode 100644
index 00000000000..e4367289591
--- /dev/null
+++ b/keyboards/novelkeys/nk_plus/readme.md
@@ -0,0 +1,32 @@
+# NK+
+
+This is a 65% with macro keys PCB. It supports VIA and full per-key RGB.
+
+* Keyboard Maintainer: [Yiancar](https://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A 65% with macro keys keyboard with STM32F072CB or APM compatible
+* Hardware Availability: https://novelkeys.com/
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make novelkeys/nk_plus:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+### Reset
+
+- Unplug
+- Hold Escape
+- Plug In
+- Unplug
+- Release Escape
+
+### Flash
+
+- Unplug
+- Hold Escape
+- Plug In
+- Flash using QMK Toolbox or dfu-util (`make novelkeys/nk_plus::dfu-util`)
diff --git a/keyboards/novelkeys/nk_plus/rules.mk b/keyboards/novelkeys/nk_plus/rules.mk
new file mode 100644
index 00000000000..a68122281ad
--- /dev/null
+++ b/keyboards/novelkeys/nk_plus/rules.mk
@@ -0,0 +1,12 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+# Build Options
+# change yes to no to disable
+#
+WS2812_DRIVER = pwm # Per-key RGB MCU Driver
diff --git a/keyboards/spleeb/config.h b/keyboards/spleeb/config.h
index 72a09e89c99..8a6fb13c4e8 100644
--- a/keyboards/spleeb/config.h
+++ b/keyboards/spleeb/config.h
@@ -22,7 +22,7 @@
# define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
#endif // POINTING_DEVICE_ENABLE
-#define I2C_DRIVER I2CD1
+#define I2C_DRIVER I2CD0
#define I2C1_SDA_PIN GP16
#define I2C1_SCL_PIN GP17
diff --git a/keyboards/spleeb/keymaps/chrishoage/keymap.c b/keyboards/spleeb/keymaps/chrishoage/keymap.c
index 2650c1aebf0..c3dfb8f02b4 100644
--- a/keyboards/spleeb/keymaps/chrishoage/keymap.c
+++ b/keyboards/spleeb/keymaps/chrishoage/keymap.c
@@ -4,7 +4,7 @@
#include QMK_KEYBOARD_H
// Double tap TD(0) to enter bootloader
-static void enter_qk_boot(qk_tap_dance_state_t *state, void *user_data) {
+static void enter_qk_boot(tap_dance_state_t *state, void *user_data) {
if (state->count >= 2) {
reset_keyboard();
reset_tap_dance(state);
@@ -13,7 +13,7 @@ static void enter_qk_boot(qk_tap_dance_state_t *state, void *user_data) {
enum SpleebLayer { _BASE = 0, _FN, _MOUSE };
-qk_tap_dance_action_t tap_dance_actions[] = {[0] = ACTION_TAP_DANCE_FN(enter_qk_boot)};
+tap_dance_action_t tap_dance_actions[] = {[0] = ACTION_TAP_DANCE_FN(enter_qk_boot)};
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/vertex/angle65/config.h b/keyboards/vertex/angle65/config.h
index 33235010ac9..79ef90ed7ab 100644
--- a/keyboards/vertex/angle65/config.h
+++ b/keyboards/vertex/angle65/config.h
@@ -18,4 +18,19 @@ along with this program. If not, see .
#define SOLENOID_PIN A2
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_SNAKE
+#define RGBLIGHT_EFFECT_KNIGHT
+#define RGBLIGHT_EFFECT_CHRISTMAS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RGB_TEST
+#define RGBLIGHT_EFFECT_ALTERNATING
+#define RGBLIGHT_EFFECT_TWINKLE
+#define RGB_DI_PIN B15
+#define RGBLED_NUM 9
+#define WS2812_SPI SPID2
+#define WS2812_SPI_MOSI_PAL_MODE 5
+
#define FORCE_NKRO
diff --git a/keyboards/vertex/angle65/rules.mk b/keyboards/vertex/angle65/rules.mk
index c36e3ade826..87d50360410 100644
--- a/keyboards/vertex/angle65/rules.mk
+++ b/keyboards/vertex/angle65/rules.mk
@@ -8,7 +8,7 @@ CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
HAPTIC_ENABLE = yes
diff --git a/lib/python/qmk/cli/docs.py b/lib/python/qmk/cli/docs.py
index c24b914bc13..01cb2248a8a 100644
--- a/lib/python/qmk/cli/docs.py
+++ b/lib/python/qmk/cli/docs.py
@@ -1,44 +1,23 @@
"""Serve QMK documentation locally
"""
-import http.server
-import os
import shutil
-import webbrowser
+from qmk.docs import prepare_docs_build_area, run_docs_command
from milc import cli
-@cli.argument('-p', '--port', default=8936, type=int, help='Port number to use.')
-@cli.argument('-b', '--browser', action='store_true', help='Open the docs in the default browser.')
@cli.subcommand('Run a local webserver for QMK documentation.', hidden=False if cli.config.user.developer else True)
def docs(cli):
"""Spin up a local HTTP server for the QMK docs.
"""
- os.chdir('docs')
- # If docsify-cli is installed, run that instead so we get live reload
- if shutil.which('docsify'):
- command = ['docsify', 'serve', '--port', f'{cli.config.docs.port}', '--open' if cli.config.docs.browser else '']
+ if not shutil.which('doxygen'):
+ cli.log.error('doxygen is not installed. Please install it and try again.')
+ return
- cli.log.info(f"Running {{fg_cyan}}{str.join(' ', command)}{{fg_reset}}")
- cli.log.info("Press Control+C to exit.")
+ if not shutil.which('npm'):
+ cli.log.error('npm is not installed. Please install it and try again.')
+ return
- try:
- cli.run(command, capture_output=False)
- except KeyboardInterrupt:
- cli.log.info("Stopping HTTP server...")
- else:
- # Fall back to Python HTTPServer
- with http.server.HTTPServer(('', cli.config.docs.port), http.server.SimpleHTTPRequestHandler) as httpd:
- cli.log.info(f"Serving QMK docs at http://localhost:{cli.config.docs.port}/")
- cli.log.info("Press Control+C to exit.")
-
- if cli.config.docs.browser:
- webbrowser.open(f'http://localhost:{cli.config.docs.port}')
-
- try:
- httpd.serve_forever()
- except KeyboardInterrupt:
- cli.log.info("Stopping HTTP server...")
- finally:
- httpd.shutdown()
+ prepare_docs_build_area()
+ run_docs_command('start', False)
diff --git a/lib/python/qmk/cli/generate/docs.py b/lib/python/qmk/cli/generate/docs.py
index f834b7f5560..0dff001de3d 100644
--- a/lib/python/qmk/cli/generate/docs.py
+++ b/lib/python/qmk/cli/generate/docs.py
@@ -1,18 +1,12 @@
"""Build QMK documentation locally
"""
import shutil
-from pathlib import Path
-from subprocess import DEVNULL
+from qmk.docs import prepare_docs_build_area, run_docs_command, BUILD_DOCS_PATH
from milc import cli
-DOCS_PATH = Path('docs/')
-BUILD_PATH = Path('.build/')
-BUILD_DOCS_PATH = BUILD_PATH / 'docs'
-DOXYGEN_PATH = BUILD_DOCS_PATH / 'static' / 'doxygen'
-# MOXYGEN_PATH = BUILD_DOCS_PATH / 'internals'
-
+@cli.argument('-s', '--serve', arg_only=True, action='store_true', help="Serves the generated docs once built.")
@cli.subcommand('Build QMK documentation.', hidden=False if cli.config.user.developer else True)
def generate_docs(cli):
"""Invoke the docs generation process
@@ -21,30 +15,19 @@ def generate_docs(cli):
* [ ] Add a real build step... something static docs
"""
- if BUILD_DOCS_PATH.exists():
- shutil.rmtree(BUILD_DOCS_PATH)
- if DOXYGEN_PATH.exists():
- shutil.rmtree(DOXYGEN_PATH)
+ if not shutil.which('doxygen'):
+ cli.log.error('doxygen is not installed. Please install it and try again.')
+ return
- cli.log.info('Copying %s folder to %s', DOCS_PATH, BUILD_DOCS_PATH)
- # ignore .gitignore'd folders when we're testing locally
- shutil.copytree(DOCS_PATH, BUILD_DOCS_PATH, ignore=shutil.ignore_patterns("node_modules", "build", ".docusaurus"))
+ if not shutil.which('npm'):
+ cli.log.error('npm is not installed. Please install it and try again.')
+ return
- # When not verbose we want to hide all output
- args = {
- 'capture_output': False if cli.config.general.verbose else True,
- 'check': True,
- 'stdin': DEVNULL,
- }
-
- cli.log.info('Generating doxygen docs at %s', DOXYGEN_PATH)
- cli.run(['doxygen', 'Doxyfile'], **args)
- # cli.run(['moxygen', '-q', '-g', '-o', MOXYGEN_PATH / '%s.md', DOXYGEN_PATH / 'xml'], **args)
-
- cli.log.info('Installing docusaurus dependencies')
- cli.run(['npm', 'ci', '--prefix', BUILD_DOCS_PATH], **args)
-
- cli.log.info('Building docusarus docs')
- cli.run(['npm', 'run', '--prefix', BUILD_DOCS_PATH, 'build'], **args)
+ prepare_docs_build_area()
+ cli.log.info('Building docusaurus docs')
+ run_docs_command('build')
cli.log.info('Successfully generated docs to %s.', BUILD_DOCS_PATH)
+
+ if cli.args.serve:
+ run_docs_command('serve', False)
diff --git a/lib/python/qmk/docs.py b/lib/python/qmk/docs.py
new file mode 100644
index 00000000000..9c964576cdc
--- /dev/null
+++ b/lib/python/qmk/docs.py
@@ -0,0 +1,40 @@
+"""Handlers for the QMK documentation generator (docusaurus).
+"""
+import shutil
+from subprocess import DEVNULL
+from milc import cli
+
+from qmk.constants import QMK_FIRMWARE
+
+DOCS_PATH = QMK_FIRMWARE / 'docs'
+BUILDDEFS_PATH = QMK_FIRMWARE / 'builddefs' / 'docs'
+BUILD_PATH = QMK_FIRMWARE / '.build'
+BUILD_DOCS_PATH = BUILD_PATH / 'docs'
+DOXYGEN_PATH = BUILD_DOCS_PATH / 'static' / 'doxygen'
+
+
+def run_docs_command(cmd, capture_output=False if cli.config.general.verbose else True):
+ cli.run(['npm', 'run', '--prefix', BUILD_DOCS_PATH, cmd], capture_output=capture_output, check=True, stdin=DEVNULL)
+
+
+def prepare_docs_build_area():
+ if BUILD_DOCS_PATH.exists():
+ shutil.rmtree(BUILD_DOCS_PATH)
+
+ cli.log.info('Copying "%s" folder to "%s"', BUILDDEFS_PATH, BUILD_DOCS_PATH)
+
+ # ignore .gitignore'd folders when we're testing locally
+ shutil.copytree(BUILDDEFS_PATH, BUILD_DOCS_PATH, ignore=shutil.ignore_patterns("node_modules", "build", ".docusaurus"))
+
+ # When not verbose we want to hide all output
+ args = {
+ 'capture_output': False if cli.config.general.verbose else True,
+ 'check': True,
+ 'stdin': DEVNULL,
+ }
+
+ cli.log.info('Generating doxygen docs at %s', DOXYGEN_PATH)
+ cli.run(['doxygen', 'Doxyfile'], **args)
+
+ cli.log.info('Installing docusaurus dependencies')
+ cli.run(['npm', 'ci', '--prefix', BUILD_DOCS_PATH], **args)
diff --git a/quantum/keyboard.c b/quantum/keyboard.c
index ec2f2e4496f..b63f0abfac4 100644
--- a/quantum/keyboard.c
+++ b/quantum/keyboard.c
@@ -171,9 +171,9 @@ static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata) {
matrix_row_t out = 0;
for (uint8_t col = 0; col < MATRIX_COLS; col++) {
// read each key in the row data and check if the keymap defines it as a real key
- if (keycode_at_keymap_location(0, row, col) && (rowdata & (1 << col))) {
+ if (keycode_at_keymap_location(0, row, col) && (rowdata & (((matrix_row_t)1) << col))) {
// this creates new row data, if a key is defined in the keymap, it will be set here
- out |= 1 << col;
+ out |= ((matrix_row_t)1) << col;
}
}
return out;