6ef97172889ccd5db376b2a9f8825489e24fdac4

Author
Nick Brassel <nick@tzarc.org>
Committer
GitHub <noreply@github.com>
Date

Message

Vitepress conversion of docs. (#23795)

Diff

This diff is truncated to protect this page.

   1diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
   2index a00e6616a643930b1e1f1559a92a7f9af5edf894..25311019c6c9df126b0ead7f2925aebb4ca3ad9c 100644
   3--- a/.github/workflows/docs.yml
   4+++ b/.github/workflows/docs.yml
   5@@ -7,20 +7,26 @@ on:
   6   push:
   7     branches:
   8     - master
   9+    - vitepress
  10     paths:
  11+    - 'builddefs/docsgen/**'
  12     - 'tmk_core/**'
  13     - 'quantum/**'
  14     - 'platforms/**'
  15     - 'docs/**'
  16     - '.github/workflows/docs.yml'
  17 
  18+defaults:
  19+  run:
  20+    shell: bash
  21+
  22 jobs:
  23   generate:
  24     runs-on: ubuntu-latest
  25     container: ghcr.io/qmk/qmk_cli
  26 
  27     # protect against those who develop with their fork on master
  28-    if: github.repository == 'qmk/qmk_firmware'
  29+    if: github.repository == 'qmk/qmk_firmware' || (github.repository == 'tzarc/qmk_firmware' && github.ref == 'refs/heads/vitepress')
  30 
  31     steps:
  32     - uses: actions/checkout@v4
  33@@ -29,18 +35,51 @@ jobs:
  34 
  35     - name: Install dependencies
  36       run: |
  37-        apt-get update && apt-get install -y rsync nodejs npm doxygen
  38+        apt-get update && apt-get install -y rsync doxygen curl
  39+        # install nvm
  40+        touch $HOME/.bashrc
  41+        curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
  42+
  43+    - name: Install node
  44+      run: |
  45+        source $HOME/.bashrc
  46+        nvm install 20
  47+        nvm use 20
  48+        corepack enable
  49         npm install -g moxygen
  50 
  51     - name: Build docs
  52       run: |
  53+        source $HOME/.bashrc
  54+        nvm use 20
  55         qmk --verbose generate-docs
  56+        touch '.build/docs/.nojekyll'
  57+
  58+    - name: Set CNAME
  59+      if: github.repository == 'qmk/qmk_firmware'
  60+      run: |
  61+        # Override target CNAME
  62+        echo 'docs.qmk.fm' > .build/docs/CNAME
  63+
  64+    - name: Override CNAME
  65+      if: github.repository == 'tzarc/qmk_firmware'
  66+      run: |
  67+        # Temporarily override target CNAME during development
  68+        echo 'vitepress.qmk.fm' > .build/docs/CNAME
  69+
  70+    - name: Deploy
  71+      if: github.repository == 'qmk/qmk_firmware'
  72+      uses: JamesIves/github-pages-deploy-action@v4.6.1
  73+      with:
  74+          token: ${{ secrets.GITHUB_TOKEN }}
  75+          branch: gh-pages
  76+          folder: .build/docs
  77+          git-config-name: QMK Bot
  78+          git-config-email: hello@qmk.fm
  79 
  80     - name: Deploy
  81+      if: github.repository == 'tzarc/qmk_firmware'
  82       uses: JamesIves/github-pages-deploy-action@v4.6.1
  83       with:
  84-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  85-        BASE_BRANCH: master
  86-        BRANCH: gh-pages
  87-        FOLDER: .build/docs
  88-        GIT_CONFIG_EMAIL: hello@qmk.fm
  89+        branch: gh-pages
  90+        folder: .build/docs
  91diff --git a/Doxyfile b/Doxyfile
  92index 4b0ea3f086dcf7b4ca66e9832b080b66ee708713..42f2e70c0ec4f7399ca224d6dd1037112ce8e2a9 100644
  93--- a/Doxyfile
  94+++ b/Doxyfile
  95@@ -21,7 +21,7 @@ DOXYFILE_ENCODING      = UTF-8
  96 PROJECT_NAME           = "QMK Firmware"
  97 PROJECT_NUMBER         = https://github.com/qmk/qmk_firmware
  98 PROJECT_BRIEF          = "Keyboard controller firmware for Atmel AVR and ARM USB families"
  99-OUTPUT_DIRECTORY       = .build/doxygen
 100+OUTPUT_DIRECTORY       = .build/docs/static/doxygen
 101 ALLOW_UNICODE_NAMES    = NO
 102 OUTPUT_LANGUAGE        = English
 103 BRIEF_MEMBER_DESC      = YES
 104@@ -40,8 +40,8 @@ ABBREVIATE_BRIEF       = "The $name class" \
 105 ALWAYS_DETAILED_SEC    = NO
 106 INLINE_INHERITED_MEMB  = NO
 107 FULL_PATH_NAMES        = YES
 108-STRIP_FROM_PATH        = 
 109-STRIP_FROM_INC_PATH    = 
 110+STRIP_FROM_PATH        =
 111+STRIP_FROM_INC_PATH    =
 112 SHORT_NAMES            = NO
 113 JAVADOC_AUTOBRIEF      = NO
 114 QT_AUTOBRIEF           = NO
 115@@ -49,13 +49,13 @@ MULTILINE_CPP_IS_BRIEF = NO
 116 INHERIT_DOCS           = YES
 117 SEPARATE_MEMBER_PAGES  = NO
 118 TAB_SIZE               = 4
 119-ALIASES                = 
 120-TCL_SUBST              = 
 121+ALIASES                =
 122+TCL_SUBST              =
 123 OPTIMIZE_OUTPUT_FOR_C  = YES
 124 OPTIMIZE_OUTPUT_JAVA   = NO
 125 OPTIMIZE_FOR_FORTRAN   = NO
 126 OPTIMIZE_OUTPUT_VHDL   = NO
 127-EXTENSION_MAPPING      = 
 128+EXTENSION_MAPPING      =
 129 MARKDOWN_SUPPORT       = YES
 130 TOC_INCLUDE_HEADINGS   = 2
 131 AUTOLINK_SUPPORT       = YES
 132@@ -104,14 +104,14 @@ GENERATE_TODOLIST      = YES
 133 GENERATE_TESTLIST      = YES
 134 GENERATE_BUGLIST       = YES
 135 GENERATE_DEPRECATEDLIST= YES
 136-ENABLED_SECTIONS       = 
 137+ENABLED_SECTIONS       =
 138 MAX_INITIALIZER_LINES  = 30
 139 SHOW_USED_FILES        = YES
 140 SHOW_FILES             = YES
 141 SHOW_NAMESPACES        = YES
 142-FILE_VERSION_FILTER    = 
 143-LAYOUT_FILE            = 
 144-CITE_BIB_FILES         = 
 145+FILE_VERSION_FILTER    =
 146+LAYOUT_FILE            =
 147+CITE_BIB_FILES         =
 148 
 149 #---------------------------------------------------------------------------
 150 # Configuration options related to warning and progress messages
 151@@ -124,7 +124,7 @@ WARN_IF_DOC_ERROR      = YES
 152 WARN_NO_PARAMDOC       = NO
 153 WARN_AS_ERROR          = NO
 154 WARN_FORMAT            = "$file:$line: $text"
 155-WARN_LOGFILE           = 
 156+WARN_LOGFILE           =
 157 
 158 #---------------------------------------------------------------------------
 159 # Configuration options related to the input files
 160@@ -143,19 +143,19 @@ FILE_PATTERNS          = *.c \
 161                          *.hpp \
 162                          *.h++
 163 RECURSIVE              = YES
 164-EXCLUDE                = 
 165+EXCLUDE                =
 166 EXCLUDE_SYMLINKS       = NO
 167 EXCLUDE_PATTERNS       = */protocol/arm_atsam/*
 168-EXCLUDE_SYMBOLS        = 
 169-EXAMPLE_PATH           = 
 170+EXCLUDE_SYMBOLS        =
 171+EXAMPLE_PATH           =
 172 EXAMPLE_PATTERNS       = *
 173 EXAMPLE_RECURSIVE      = NO
 174-IMAGE_PATH             = 
 175-INPUT_FILTER           = 
 176-FILTER_PATTERNS        = 
 177+IMAGE_PATH             =
 178+INPUT_FILTER           =
 179+FILTER_PATTERNS        =
 180 FILTER_SOURCE_FILES    = NO
 181-FILTER_SOURCE_PATTERNS = 
 182-USE_MDFILE_AS_MAINPAGE = 
 183+FILTER_SOURCE_PATTERNS =
 184+USE_MDFILE_AS_MAINPAGE =
 185 
 186 #---------------------------------------------------------------------------
 187 # Configuration options related to source browsing
 188@@ -177,7 +177,7 @@ VERBATIM_HEADERS       = YES
 189 
 190 ALPHABETICAL_INDEX     = YES
 191 COLS_IN_ALPHA_INDEX    = 5
 192-IGNORE_PREFIX          = 
 193+IGNORE_PREFIX          =
 194 
 195diff --git a/builddefs/docsgen/.gitignore b/builddefs/docsgen/.gitignore
 196new file mode 100644
 197index 0000000000000000000000000000000000000000..e71427cba3f5af01e8f01e2b570f9560fb3073c6
 198--- /dev/null
 199+++ b/builddefs/docsgen/.gitignore
 200@@ -0,0 +1,5 @@
 201+node_modules
 202+.vitepress/cache
 203+.vitepress/.temp
 204+.vitepress/dist
 205+docs
 206diff --git a/builddefs/docsgen/.vitepress/config.mts b/builddefs/docsgen/.vitepress/config.mts
 207new file mode 100644
 208index 0000000000000000000000000000000000000000..f2111eeb7c5ae69d0777e5d8533352ce8bf0e8a5
 209--- /dev/null
 210+++ b/builddefs/docsgen/.vitepress/config.mts
 211@@ -0,0 +1,51 @@
 212+import { defineConfig } from "vitepress";
 213+import { tabsMarkdownPlugin } from "vitepress-plugin-tabs";
 214+import sidebar from "../../../docs/_sidebar.json";
 215+
 216+// https://vitepress.dev/reference/site-config
 217+export default defineConfig(({ mode }) => {
 218+    const prod = mode === "production";
 219+    return {
 220+        title: "QMK Firmware",
 221+        description: "Documentation for QMK Firmware",
 222+
 223+        srcDir: prod ? "docs" : "../../docs",
 224+        outDir: "../../.build/docs",
 225+        cleanUrls: true,
 226+
 227+        markdown: {
 228+            config(md) {
 229+                md.use(tabsMarkdownPlugin);
 230+            },
 231+        },
 232+
 233+        vite: {
 234+            resolve: {
 235+                preserveSymlinks: true,
 236+            },
 237+        },
 238+
 239+        themeConfig: {
 240+            // https://vitepress.dev/reference/default-theme-config
 241+            logo: {
 242+                light: "/badge-community-light.svg",
 243+                dark: "/badge-community-dark.svg",
 244+            },
 245+            siteTitle: false,
 246+
 247+            nav: [{ text: "Home", link: "./" }],
 248+
 249+            search: {
 250+                provider: "local",
 251+            },
 252+
 253+            sidebar: sidebar,
 254+
 255+            socialLinks: [
 256diff --git a/builddefs/docsgen/.vitepress/theme/QMKLayout.vue b/builddefs/docsgen/.vitepress/theme/QMKLayout.vue
 257new file mode 100644
 258index 0000000000000000000000000000000000000000..30d0780d7c31259927f3aad75a961920be6459df
 259--- /dev/null
 260+++ b/builddefs/docsgen/.vitepress/theme/QMKLayout.vue
 261@@ -0,0 +1,18 @@
 262+<script setup>
 263+import DefaultTheme from 'vitepress/theme'
 264+import { useRouter } from 'vitepress'
 265+import { onBeforeMount } from 'vue';
 266+
 267+const router = useRouter()
 268+onBeforeMount(async () => {
 269+    if (window.location.href.includes('/#/')) {
 270+        const newUrl = window.location.href.replace(/\/#\//, '/').replace(/\?id=/, '#');
 271+        window.history.replaceState({}, '', newUrl);
 272+        await router.go(newUrl);
 273+    }
 274+});
 275+</script>
 276+
 277+<template>
 278+    <DefaultTheme.Layout/>
 279+</template>
 280diff --git a/builddefs/docsgen/.vitepress/theme/custom.css b/builddefs/docsgen/.vitepress/theme/custom.css
 281new file mode 100644
 282index 0000000000000000000000000000000000000000..646d215c1f24fccfa241da219f4553b0b51d8382
 283--- /dev/null
 284+++ b/builddefs/docsgen/.vitepress/theme/custom.css
 285@@ -0,0 +1,19 @@
 286+/* Override <kbd> as vitepress doesn't put them with borders */
 287+kbd {
 288+    border: 1px solid var(--vp-c-text-1);
 289+    border-radius: 0.6em;
 290+    margin: 0.2em;
 291+    padding: 0.2em;
 292+}
 293+
 294+:root {
 295+    --vp-nav-logo-height: 100%;
 296+}
 297+
 298+.logo {
 299+    padding-bottom: 0.2em;
 300+}
 301+
 302+.VPNavBarTitle.has-sidebar .title {
 303+    border-bottom: 0;
 304+}
 305diff --git a/builddefs/docsgen/.vitepress/theme/index.ts b/builddefs/docsgen/.vitepress/theme/index.ts
 306new file mode 100644
 307index 0000000000000000000000000000000000000000..3c820ec5abd9265e44b720bdcef833c61d764fdc
 308--- /dev/null
 309+++ b/builddefs/docsgen/.vitepress/theme/index.ts
 310@@ -0,0 +1,13 @@
 311+import type { Theme } from 'vitepress'
 312+import DefaultTheme from 'vitepress/theme'
 313+import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client'
 314+import QMKLayout from './QMKLayout.vue'
 315+import './custom.css'
 316+
 317+export default {
 318+  extends: DefaultTheme,
 319+  Layout: QMKLayout,
 320+  enhanceApp({ app }) {
 321+    enhanceAppWithTabs(app)
 322+  }
 323+} satisfies Theme
 324diff --git a/builddefs/docsgen/build-docs.sh b/builddefs/docsgen/build-docs.sh
 325new file mode 100755
 326index 0000000000000000000000000000000000000000..2ea884752fe0ebe2c378cb57a2c30358f5e7bf32
 327--- /dev/null
 328+++ b/builddefs/docsgen/build-docs.sh
 329@@ -0,0 +1,6 @@
 330+#!/usr/bin/env bash
 331+
 332+cd "$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
 333+yarn install
 334+[[ -e docs ]] || ln -sf ../../docs docs
 335+DEBUG='vitepress:*,vite:*' yarn run docs:build
 336diff --git a/builddefs/docsgen/package.json b/builddefs/docsgen/package.json
 337new file mode 100644
 338index 0000000000000000000000000000000000000000..435e7481f1f9370c5742a5c65ea77c0af8d28496
 339--- /dev/null
 340+++ b/builddefs/docsgen/package.json
 341@@ -0,0 +1,14 @@
 342+{
 343+  "license": "GPL-2.0-or-later",
 344+  "devDependencies": {
 345+    "vite": "^5.2.10",
 346+    "vitepress": "^1.1.0",
 347+    "vitepress-plugin-tabs": "^0.5.0",
 348+    "vue": "^3.4.24"
 349+  },
 350+  "scripts": {
 351+    "docs:dev": "vitepress dev --host 0.0.0.0",
 352+    "docs:build": "vitepress build",
 353+    "docs:preview": "vitepress preview --host 0.0.0.0"
 354+  }
 355+}
 356diff --git a/builddefs/docsgen/start-docs.sh b/builddefs/docsgen/start-docs.sh
 357new file mode 100755
 358index 0000000000000000000000000000000000000000..e6e044c6a12054ee32e2fc51f26c7e425a09dd87
 359--- /dev/null
 360+++ b/builddefs/docsgen/start-docs.sh
 361@@ -0,0 +1,5 @@
 362+#!/usr/bin/env bash
 363+
 364+cd "$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
 365+yarn install
 366+DEBUG='vitepress:*,vite:*' yarn run docs:dev
 367diff --git a/builddefs/docsgen/yarn.lock b/builddefs/docsgen/yarn.lock
 368new file mode 100644
 369index 0000000000000000000000000000000000000000..b40c1298d01934ac36b2631452e552b1abed55f4
 370--- /dev/null
 371+++ b/builddefs/docsgen/yarn.lock
 372@@ -0,0 +1,797 @@
 373+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
 374+# yarn lockfile v1
 375+
 376+
 377+"@algolia/autocomplete-core@1.9.3":
 378+  version "1.9.3"
 379+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7"
 380+  integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==
 381+  dependencies:
 382+    "@algolia/autocomplete-plugin-algolia-insights" "1.9.3"
 383+    "@algolia/autocomplete-shared" "1.9.3"
 384+
 385+"@algolia/autocomplete-plugin-algolia-insights@1.9.3":
 386+  version "1.9.3"
 387+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587"
 388+  integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==
 389+  dependencies:
 390+    "@algolia/autocomplete-shared" "1.9.3"
 391+
 392+"@algolia/autocomplete-preset-algolia@1.9.3":
 393+  version "1.9.3"
 394+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da"
 395+  integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==
 396+  dependencies:
 397+    "@algolia/autocomplete-shared" "1.9.3"
 398+
 399+"@algolia/autocomplete-shared@1.9.3":
 400+  version "1.9.3"
 401+  resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa"
 402+  integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==
 403+
 404+"@algolia/cache-browser-local-storage@4.23.3":
 405+  version "4.23.3"
 406+  resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.23.3.tgz#0cc26b96085e1115dac5fcb9d826651ba57faabc"
 407+  integrity sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==
 408+  dependencies:
 409+    "@algolia/cache-common" "4.23.3"
 410+
 411+"@algolia/cache-common@4.23.3":
 412+  version "4.23.3"
 413+  resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.23.3.tgz#3bec79092d512a96c9bfbdeec7cff4ad36367166"
 414+  integrity sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==
 415+
 416+"@algolia/cache-in-memory@4.23.3":
 417+  version "4.23.3"
 418+  resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.23.3.tgz#3945f87cd21ffa2bec23890c85305b6b11192423"
 419+  integrity sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==
 420+  dependencies:
 421+    "@algolia/cache-common" "4.23.3"
 422+
 423+"@algolia/client-account@4.23.3":
 424+  version "4.23.3"
 425+  resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.23.3.tgz#8751bbf636e6741c95e7c778488dee3ee430ac6f"
 426+  integrity sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==
 427+  dependencies:
 428+    "@algolia/client-common" "4.23.3"
 429+    "@algolia/client-search" "4.23.3"
 430+    "@algolia/transporter" "4.23.3"
 431+
 432+"@algolia/client-analytics@4.23.3":
 433+  version "4.23.3"
 434+  resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.23.3.tgz#f88710885278fe6fb6964384af59004a5a6f161d"
 435+  integrity sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==
 436+  dependencies:
 437+    "@algolia/client-common" "4.23.3"
 438+    "@algolia/client-search" "4.23.3"
 439+    "@algolia/requester-common" "4.23.3"
 440+    "@algolia/transporter" "4.23.3"
 441+
 442+"@algolia/client-common@4.23.3":
 443+  version "4.23.3"
 444+  resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.23.3.tgz#891116aa0db75055a7ecc107649f7f0965774704"
 445+  integrity sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==
 446+  dependencies:
 447+    "@algolia/requester-common" "4.23.3"
 448+    "@algolia/transporter" "4.23.3"
 449+
 450+"@algolia/client-personalization@4.23.3":
 451+  version "4.23.3"
 452+  resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.23.3.tgz#35fa8e5699b0295fbc400a8eb211dc711e5909db"
 453+  integrity sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==
 454+  dependencies:
 455+    "@algolia/client-common" "4.23.3"
 456+    "@algolia/requester-common" "4.23.3"
 457+    "@algolia/transporter" "4.23.3"
 458+
 459+"@algolia/client-search@4.23.3":
 460+  version "4.23.3"
 461+  resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.23.3.tgz#a3486e6af13a231ec4ab43a915a1f318787b937f"
 462+  integrity sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==
 463+  dependencies:
 464+    "@algolia/client-common" "4.23.3"
 465+    "@algolia/requester-common" "4.23.3"
 466+    "@algolia/transporter" "4.23.3"
 467+
 468+"@algolia/logger-common@4.23.3":
 469+  version "4.23.3"
 470+  resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.23.3.tgz#35c6d833cbf41e853a4f36ba37c6e5864920bfe9"
 471+  integrity sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==
 472diff --git a/docs/.nojekyll b/docs/.nojekyll
 473deleted file mode 100644
 474index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
 475--- a/docs/.nojekyll
 476+++ /dev/null
 477diff --git a/docs/CNAME b/docs/CNAME
 478deleted file mode 100644
 479index e089843e0bcc8a72c482b778e35aa6dd260b1c41..0000000000000000000000000000000000000000
 480--- a/docs/CNAME
 481+++ /dev/null
 482@@ -1 +0,0 @@
 483-docs.qmk.fm
 484diff --git a/docs/ChangeLog/20190830.md b/docs/ChangeLog/20190830.md
 485index 298ec958c52977af92191e3714c3a000218a0162..d6895216e9cc7abf3567b3a1e3220e3b8c19a957 100644
 486--- a/docs/ChangeLog/20190830.md
 487+++ b/docs/ChangeLog/20190830.md
 488@@ -20,7 +20,7 @@ This document marks the inaugural Breaking Change merge. A list of changes follo
 489 
 490 * `fn_actions` is deprecated, and its functionality has been superseded by direct keycodes and `process_record_user()`
 491 * The end result of removing this obsolete feature should result in a decent reduction in firmware size and code complexity
 492-* All keymaps affected are recommended to switch away from `fn_actions` in favour of the [custom keycode](https://docs.qmk.fm/#/custom_quantum_functions) and [macro](https://docs.qmk.fm/#/feature_macros) features
 493+* All keymaps affected are recommended to switch away from `fn_actions` in favour of the [custom keycode](../custom_quantum_functions) and [macro](../feature_macros) features
 494 
 495 ## Update Atreus to current code conventions
 496 
 497@@ -43,7 +43,7 @@ This document marks the inaugural Breaking Change merge. A list of changes follo
 498 
 499 * `fn_actions` is deprecated, and its functionality has been superseded by direct keycodes and `process_record_user()`
 500 * All keymaps using these actions have had the relevant `KC_FN*` keys replaced with the equivalent `BL_*` keys
 501-* If you currently use `KC_FN*` you will need to replace `fn_actions` with the [custom keycode](https://docs.qmk.fm/#/custom_quantum_functions) and [macro](https://docs.qmk.fm/#/feature_macros) features
 502+* If you currently use `KC_FN*` you will need to replace `fn_actions` with the [custom keycode](../custom_quantum_functions) and [macro](../feature_macros) features
 503 
 504 ## Remove `KC_DELT` alias in favor of `KC_DEL`
 505 
 506diff --git a/docs/ChangeLog/20200229.md b/docs/ChangeLog/20200229.md
 507index 398fe01c0d04667e44682cf53805b24eb1b54b86..02bca3e37162daf8d929bd1ac6372189504d4840 100644
 508--- a/docs/ChangeLog/20200229.md
 509+++ b/docs/ChangeLog/20200229.md
 510@@ -51,7 +51,7 @@ Four times a year QMK runs a process for merging Breaking Changes. A Breaking Ch
 511 
 512 * `fn_actions` is deprecated, and its functionality has been superseded by direct keycodes and `process_record_user()`
 513 * The end result of removing this obsolete feature should result in a decent reduction in firmware size and code complexity
 514-* All keymaps affected are recommended to switch away from `fn_actions` in favour of the [custom keycode](https://docs.qmk.fm/#/custom_quantum_functions) and [macro](https://docs.qmk.fm/#/feature_macros) features
 515+* All keymaps affected are recommended to switch away from `fn_actions` in favour of the [custom keycode](../custom_quantum_functions) and [macro](../feature_macros) features
 516 
 517 
 518 ## Moving backlight keycode handling to `process_keycode/`
 519diff --git a/docs/ChangeLog/20200829.md b/docs/ChangeLog/20200829.md
 520index c6abed5b3023f66aa412eb0dca2104548392cd35..66957211f8505cc06cd501de62756cfd6fa23f8c 100644
 521--- a/docs/ChangeLog/20200829.md
 522+++ b/docs/ChangeLog/20200829.md
 523@@ -3,9 +3,9 @@
 524diff --git a/docs/ChangeLog/20201128.md b/docs/ChangeLog/20201128.md
 525index 444132029532caa6f1daf281db91b4e0b4aae91e..d005d3b56b6013f4b72f7927c9542533ff4a6b90 100644
 526--- a/docs/ChangeLog/20201128.md
 527+++ b/docs/ChangeLog/20201128.md
 528@@ -3,9 +3,9 @@
 529diff --git a/docs/ChangeLog/20210529.md b/docs/ChangeLog/20210529.md
 530index 2feeed64376cdefcb4b548b973ca804e00a46793..69923b0c5abe40af1fed845e225e6b38d3319083 100644
 531--- a/docs/ChangeLog/20210529.md
 532+++ b/docs/ChangeLog/20210529.md
 533@@ -1,30 +1,30 @@
 534 # QMK Breaking Changes - 2021 May 29 Changelog
 535 
 536-## Notable Changes :id=notable-changes
 537+## Notable Changes {#notable-changes}
 538 
 539-### RGB Matrix support for split common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055)) :id=rgb-matrix-split-common
 540+### RGB Matrix support for split common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055)) {#rgb-matrix-split-common}
 541 
 542 Split boards can now use RGB Matrix without defining a custom matrix.
 543 
 544-### Teensy 3.6 support ([#12258](https://github.com/qmk/qmk_firmware/pull/12258)) :id=teensy-3-6-support
 545+### Teensy 3.6 support ([#12258](https://github.com/qmk/qmk_firmware/pull/12258)) {#teensy-3-6-support}
 546 
 547 Added support for MK66F18 (Teensy 3.6) microcontroller.
 548 
 549-### New command: qmk console ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) :id=new-command-qmk-console
 550+### New command: qmk console ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) {#new-command-qmk-console}
 551 
 552 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.
 553 
 554-### Improved command: qmk config :id=improve-command-qmk-config
 555+### Improved command: qmk config {#improve-command-qmk-config}
 556 
 557 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`.
 558 
 559diff --git a/docs/ChangeLog/20210828.md b/docs/ChangeLog/20210828.md
 560index f96283e6ad48886c8738233b106e7724fe3f2b58..f84169cc9475b30c6a6e9de02352fef5c7781b09 100644
 561--- a/docs/ChangeLog/20210828.md
 562+++ b/docs/ChangeLog/20210828.md
 563@@ -1,28 +1,28 @@
 564 # QMK Breaking Changes - 2021 August 28 Changelog
 565 
 566-## Notable Features :id=notable-features
 567+## Notable Features {#notable-features}
 568 
 569-### Combo processing improvements ([#8591](https://github.com/qmk/qmk_firmware/pull/8591)) :id=combo-processing-improvements
 570+### Combo processing improvements ([#8591](https://github.com/qmk/qmk_firmware/pull/8591)) {#combo-processing-improvements}
 571 
 572 Combo processing has been reordered with respect to keypress handling, allowing for much better compatibility with mod taps.
 573 
 574diff --git a/docs/ChangeLog/20211127.md b/docs/ChangeLog/20211127.md
 575index 0780ab6a44c65d3bf3f38f8f11d77acfa2e91fdc..d810be505a418da6c97938e1ab3445122e461d4e 100644
 576--- a/docs/ChangeLog/20211127.md
 577+++ b/docs/ChangeLog/20211127.md
 578@@ -1,6 +1,6 @@
 579 # QMK Breaking Changes - 2021 November 27 Changelog
 580 
 581-## 2000 keyboards! :id=qmk-2000th-keyboard
 582+## 2000 keyboards! {#qmk-2000th-keyboard}
 583 
 584 QMK had it's 2000th keyboard submitted during this breaking changes cycle.... and it only _just_ made the cut-off!
 585 
 586@@ -11,9 +11,9 @@ QMK had it's 2000th keyboard submitted during this breaking changes cycle.... an
 587 
 588 From the whole QMK team, a major thankyou to the community for embracing QMK as your preferred keyboard firmware!
 589 
 590-## Notable Features :id=notable-features
 591+## Notable Features {#notable-features}
 592 
 593-### Expanded Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343)) :id=expanded-pointing-device
 594+### Expanded Pointing Device support ([#14343](https://github.com/qmk/qmk_firmware/pull/14343)) {#expanded-pointing-device}
 595 
 596 Pointing device support has been reworked and reimplemented to allow for easier integration of new peripherals.
 597 
 598@@ -31,9 +31,9 @@ QMK now has core-supplied support for the following pointing device peripherals:
 599 | `POINTING_DEVICE_DRIVER = pimoroni_trackball`  | Pimoroni Trackball                      |
 600 | `POINTING_DEVICE_DRIVER = pmw3360`             | PMW 3360                                |
 601 
 602-See the new documentation for the [Pointing Device](../feature_pointing_device.md) feature for more information on specific configuration for each driver.
 603+See the new documentation for the [Pointing Device](../feature_pointing_device) feature for more information on specific configuration for each driver.
 604 
 605-### Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) :id=dynamic-tapping-term
 606+### Dynamic Tapping Term ([#11036](https://github.com/qmk/qmk_firmware/pull/11036)) {#dynamic-tapping-term}
 607 
 608 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.
 609 
 610@@ -47,9 +47,9 @@ If you're in this stage of discovery, you can now add `DYNAMIC_TAPPING_TERM_ENAB
 611 
 612diff --git a/docs/ChangeLog/20220226.md b/docs/ChangeLog/20220226.md
 613index a469612fe8b37022f627dce7320118e0123d01c9..f0cbbc0603ebc0a4fccd80ea3baaa001c8708487 100644
 614--- a/docs/ChangeLog/20220226.md
 615+++ b/docs/ChangeLog/20220226.md
 616@@ -1,6 +1,6 @@
 617 # QMK Breaking Changes - 2022 February 26 Changelog
 618 
 619-## Notable Features :id=notable-features
 620+## Notable Features {#notable-features}
 621 
 622 ### Default USB Polling rate now 1kHz ([#15352](https://github.com/qmk/qmk_firmware/pull/15352))
 623 
 624@@ -12,13 +12,13 @@ Something something *Lets go gamers!*
 625 
 626 Pointing devices can now be shared across a split keyboard with support for a single pointing device or a pointing device on each side.
 627 
 628-See the [Pointing Device](feature_pointing_device.md) documentation for further configuration options.
 629+See the [Pointing Device](../feature_pointing_device) documentation for further configuration options.
 630 
 631-## Changes Requiring User Action :id=changes-requiring-user-action
 632+## Changes Requiring User Action {#changes-requiring-user-action}
 633 
 634 ### Legacy macro and action_function system removed ([#16025](https://github.com/qmk/qmk_firmware/pull/16025))
 635 
 636-The long time deprecated `MACRO()` and `action_get_macro` methods have been removed. Where possible, existing usages have been migrated over to core [Macros](feature_macros.md).
 637+The long time deprecated `MACRO()` and `action_get_macro` methods have been removed. Where possible, existing usages have been migrated over to core [Macros](../feature_macros).
 638 
 639 ### Create a build error if no bootloader is specified ([#16181](https://github.com/qmk/qmk_firmware/pull/16181))
 640 
 641@@ -31,7 +31,7 @@ Bootloader configuration is no longer assumed. Keyboards must now set either:
 642 
 643 In preparation of future bluetooth work, the `AdafruitBLE` integration has been renamed to allow potential for any other Adafruit BLE products. 
 644 
 645-### Updated Keyboard Codebases :id=updated-keyboard-codebases
 646+### Updated Keyboard Codebases {#updated-keyboard-codebases}
 647 
 648 The following keyboards have had their source moved within QMK:
 649 
 650@@ -241,9 +241,9 @@ The following keyboards have had their source moved within QMK:
 651 |  zinc/rev1                 |  25keys/zinc/rev1                  |
 652 |  zinc/reva                 |  25keys/zinc/reva                  |
 653 
 654-## Notable core changes :id=notable-core
 655+## Notable core changes {#notable-core}
 656 
 657-### New MCU Support :id=new-mcu-support
 658+### New MCU Support {#new-mcu-support}
 659 
 660 Building on previous cycles, QMK firmware picked up support for a couple extra MCU variants:
 661 
 662diff --git a/docs/ChangeLog/20220528.md b/docs/ChangeLog/20220528.md
 663index 1265c81206df33d0996e7114a94213743a461a6d..31347c9c005256c3e893a26f0fa46b05c5048df4 100644
 664--- a/docs/ChangeLog/20220528.md
 665+++ b/docs/ChangeLog/20220528.md
 666@@ -1,16 +1,16 @@
 667 # QMK Breaking Changes - 2022 May 28 Changelog
 668 
 669-## Notable Features :id=notable-features
 670+## Notable Features {#notable-features}
 671 
 672-### Caps Word ([#16588](https://github.com/qmk/qmk_firmware/pull/16588)) :id=caps-word
 673+### Caps Word ([#16588](https://github.com/qmk/qmk_firmware/pull/16588)) {#caps-word}
 674 
 675 This is a new feature that allows for capslock-like functionality that turns itself off at the end of the word.
 676 
 677diff --git a/docs/ChangeLog/20220827.md b/docs/ChangeLog/20220827.md
 678index b672b57cb89370fb4099a445c136efa94a594c7f..d58db91272f99cfae577e4e5529d599cabd765b4 100644
 679--- a/docs/ChangeLog/20220827.md
 680+++ b/docs/ChangeLog/20220827.md
 681@@ -1,28 +1,28 @@
 682 # QMK Breaking Changes - 2022 August 27 Changelog
 683 
 684-## Notable Features :id=notable-features
 685+## Notable Features {#notable-features}
 686 
 687diff --git a/docs/ChangeLog/20221126.md b/docs/ChangeLog/20221126.md
 688index 82aa4a499e39cff33746d3ebd575c20d5a7afdcd..25cf1d592dd8e97d979de69f97dad4ac08ed7586 100644
 689--- a/docs/ChangeLog/20221126.md
 690+++ b/docs/ChangeLog/20221126.md
 691@@ -1,14 +1,14 @@
 692 # QMK Breaking Changes - 2022 November 26 Changelog
 693 
 694-## Notable Features :id=notable-features
 695+## Notable Features {#notable-features}
 696 
 697-### Autocorrect ([#15699](https://github.com/qmk/qmk_firmware/pull/15699)) :id=autocorrect
 698+### Autocorrect ([#15699](https://github.com/qmk/qmk_firmware/pull/15699)) {#autocorrect}
 699 
 700diff --git a/docs/ChangeLog/20230226.md b/docs/ChangeLog/20230226.md
 701index df5095ac7b5ba54a932c46bcd50c06b321495258..ee560686044e607bf334d7ecf623e33ec479b94c 100644
 702--- a/docs/ChangeLog/20230226.md
 703+++ b/docs/ChangeLog/20230226.md
 704@@ -1,8 +1,8 @@
 705 # QMK Breaking Changes - 2023 February 26 Changelog
 706 
 707-## Changes Requiring User Action :id=changes-requiring-user-action
 708+## Changes Requiring User Action {#changes-requiring-user-action}
 709 
 710-### `IGNORE_MOD_TAP_INTERRUPT` behaviour changes ([#15741](https://github.com/qmk/qmk_firmware/pull/15741)) :id=i-m-t-i
 711+### `IGNORE_MOD_TAP_INTERRUPT` behaviour changes ([#15741](https://github.com/qmk/qmk_firmware/pull/15741)) {#i-m-t-i}
 712 
 713 `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.
 714 
 715@@ -46,9 +46,9 @@ bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
 716 }
 717 ```
 718 
 719diff --git a/docs/ChangeLog/20230528.md b/docs/ChangeLog/20230528.md
 720index b4044d3109b6c5f0b80afbfe6c3a45eccf17f835..40ab3a420c2bc9b87dfa52af565972b0ab36a81a 100644
 721--- a/docs/ChangeLog/20230528.md
 722+++ b/docs/ChangeLog/20230528.md
 723@@ -1,6 +1,6 @@
 724 # QMK Breaking Changes - 2023 May 28 Changelog
 725 
 726-## Notable Changes :id=notable-changes
 727+## Notable Changes {#notable-changes}
 728 
 729diff --git a/docs/ChangeLog/20230827.md b/docs/ChangeLog/20230827.md
 730index 12093d889f3f3c65858b7eeebb24c2be8f963b1a..aecbcb0d8f43f337ae0fa0f7b02d021b7569a018 100644
 731--- a/docs/ChangeLog/20230827.md
 732+++ b/docs/ChangeLog/20230827.md
 733@@ -1,14 +1,14 @@
 734 # QMK Breaking Changes - 2023 Aug 27 Changelog
 735 
 736-## Notable Changes :id=notable-changes
 737+## Notable Changes {#notable-changes}
 738 
 739diff --git a/docs/ChangeLog/20231126.md b/docs/ChangeLog/20231126.md
 740index 61cff520c8053807ef012d685799ecf1dc30622f..8a43bb001689a36a7f679e2b960dde01afb41e2d 100644
 741--- a/docs/ChangeLog/20231126.md
 742+++ b/docs/ChangeLog/20231126.md
 743@@ -1,14 +1,14 @@
 744 # QMK Breaking Changes - 2023 November 26 Changelog
 745 
 746-## Notable Features :id=notable-features
 747+## Notable Features {#notable-features}
 748 
 749diff --git a/docs/ChangeLog/20240225.md b/docs/ChangeLog/20240225.md
 750index 779b7784900f0c7912d0a3ac8feca8748009f938..f4103c594e09e643eb60b4976645dedeedc91b69 100644
 751--- a/docs/ChangeLog/20240225.md
 752+++ b/docs/ChangeLog/20240225.md
 753@@ -1,6 +1,6 @@
 754 # QMK Breaking Changes - 2024 February 25 Changelog
 755 
 756-## Notable Features :id=notable-features
 757+## Notable Features {#notable-features}
 758 
 759 _0.24.0_ is mainly a maintenance release of QMK Firmware -- as per last few breaking changes cycles, there have been a lot of behind-the-scenes changes, mainly:
 760 
 761@@ -10,17 +10,17 @@ _0.24.0_ is mainly a maintenance release of QMK Firmware -- as per last few brea
 762 * keyboard relocations
 763 * addressing technical debt
 764 
 765-## Changes Requiring User Action :id=changes-requiring-user-action
 766+## Changes Requiring User Action {#changes-requiring-user-action}
 767 
 768 ### Windows Driver Changes ([QMK Toolbox 0.3.0 Release](https://github.com/qmk/qmk_toolbox/releases/tag/0.3.0))
 769 
 770 Flashing keyboards that target `atmel-dfu` or `qmk-dfu` on Windows using `qmk flash` or QMK Toolbox have traditionally used _libusb_ for access to the DFU USB device. Since QMK Toolbox 0.3.0, this has changed to WinUSB.
 771 
 772diff --git a/docs/ChangeLog/20240526.md b/docs/ChangeLog/20240526.md
 773index 4cf185234cec58d2833a5135d1bf425a2d1eaa03..b5e5b3b693893a4474fed7ab994b96982f14402c 100644
 774--- a/docs/ChangeLog/20240526.md
 775+++ b/docs/ChangeLog/20240526.md
 776@@ -1,14 +1,14 @@
 777 # QMK Breaking Changes - 2024 May 26 Changelog
 778 
 779-## Notable Features :id=notable-features
 780+## Notable Features {#notable-features}
 781 
 782diff --git a/docs/__capabilities.md b/docs/__capabilities.md
 783index 71183ed7608744519ce9d3219ddd0c1785ae2ec3..e28b928970643f1ba1af110737e09bdaf00e9314 100644
 784--- a/docs/__capabilities.md
 785+++ b/docs/__capabilities.md
 786@@ -6,8 +6,6 @@ This page lays out the capabilities used by the QMK Firmware documentation, in o
 787 
 788 Unrelated to styling, high-level tech.
 789 
 790-* I18n -- translations to other languages: [_langs.md](_langs.md)
 791-* Sidebar -- listing of pages by category: [_summary.md](_summary.md)
 792 * Title anchors -- `:id=some-anchor-name`, used for direct linking to sections
 793     * Links to anchors:
 794         * Style 1: [early initialization](platformdev_chibios_earlyinit.md?id=board-init)
 795@@ -40,7 +38,10 @@ Unrelated to styling, high-level tech.
 796 
 797 ![QMK Color Wheel with HSV Values](https://i.imgur.com/vkYVo66.jpg)
 798 
 799-<img src="gitbook/images/color-wheel.svg" alt="HSV Color Wheel" width="250"/>
 800+![QMK Light](./public/badge-community-light.svg)
 801+![QMK Dark](./public/badge-community-dark.svg)
 802+
 803+<img src="./gitbook/images/color-wheel.svg" alt="HSV Color Wheel" width="250"/>
 804 
 805 ### Lists
 806 
 807@@ -126,6 +127,26 @@ Command+<code>&#96;</code>
 808 
 809 !> Notification, damnit!
 810 
 811+::: info
 812+This is an info box.
 813+:::
 814+
 815+::: tip
 816+This is a tip.
 817+:::
 818+
 819+::: warning
 820+This is a warning.
 821+:::
 822+
 823+::: danger
 824+This is a dangerous warning.
 825+:::
 826+
 827+::: details
 828+This is a details block.
 829+:::
 830+
 831 ### Keyboard keys
 832 
 833 <kbd>,</kbd>
 834@@ -242,6 +263,20 @@ Content three
 835 
 836 <!-- tabs:end -->
 837 
 838+::::tabs
 839+=== tab a
 840+a content 2
 841+=== tab b
 842+b content 2
 843+=== tab c
 844+:::tabs
 845+== nested tab a
 846+nested a content 2
 847+== nested tab b
 848+nested b content 2
 849+:::
 850+::::
 851+
 852 ## Details sections
 853 
 854 Expandable:
 855@@ -254,8 +289,10 @@ Expandable:
 856 This is some inner content.
 857 </details>
 858 
 859-  [1]: https://en.wikipedia.org/wiki/Eclipse_(software)
 860-
 861 ## Embed
 862 
 863 [example embed](__capabilities_inc.md ':include')
 864+
 865+<!--@include: ./__capabilities_inc.md-->
 866+
 867+  [1]: https://en.wikipedia.org/wiki/Eclipse_(software)
 868diff --git a/docs/_langs.md b/docs/_langs.md
 869deleted file mode 100644
 870index 8b08c345137cb59a7cedb474559f7f53c4660e0c..0000000000000000000000000000000000000000
 871--- a/docs/_langs.md
 872+++ /dev/null
 873@@ -1,4 +0,0 @@
 874-- Translations
 875-  - [:uk: English](/)
 876-  - [:cn: 简体中文](/zh-cn/)
 877-  - [:jp: 日本語](/ja/)
 878diff --git a/docs/_sidebar.json b/docs/_sidebar.json
 879new file mode 100644
 880index 0000000000000000000000000000000000000000..f1b7c156e6eb5e230fa89b443cf279d42380b670
 881--- /dev/null
 882+++ b/docs/_sidebar.json
 883@@ -0,0 +1,309 @@
 884+[
 885+    {
 886+        "text": "Tutorial",
 887+        "items": [
 888+            { "text": "Introduction", "link": "/newbs" },
 889+            { "text": "Setup", "link": "/newbs_getting_started" },
 890+            { "text": "Building Your First Firmware", "link": "/newbs_building_firmware" },
 891+            { "text": "Flashing Firmware", "link": "/newbs_flashing" },
 892+            { "text": "Getting Help/Support", "link": "/support" },
 893+            { "text": "External Userspace", "link": "/newbs_external_userspace" },
 894+            { "text": "Other Resources", "link": "/newbs_learn_more_resources" },
 895+            { "text": "Syllabus", "link": "/syllabus" }
 896+        ]
 897+    },
 898+    {
 899+        "text": "FAQs",
 900+        "items": [
 901+            { "text": "General FAQ", "link": "/faq_general" },
 902+            { "text": "Build/Compile QMK", "link": "/faq_build" },
 903+            { "text": "Troubleshooting QMK", "link": "/faq_misc" },
 904+            { "text": "Debugging QMK", "link": "/faq_debug" },
 905+            { "text": "Keymap FAQ", "link": "/faq_keymap" },
 906+            { "text": "Squeezing Space from AVR", "link": "/squeezing_avr" },
 907+            { "text": "Glossary", "link": "/reference_glossary" }
 908+        ]
 909+    },
 910+    {
 911+        "text": "Configurator",
 912+        "items": [
 913+            { "text": "Overview", "link": "/newbs_building_firmware_configurator" },
 914+            { "text": "Step by Step", "link": "/configurator_step_by_step" },
 915+            { "text": "Troubleshooting", "link": "/configurator_troubleshooting" },
 916+            { "text": "Architecture", "link": "/configurator_architecture" },
 917+            {
 918+                "text": "QMK API",
 919+                "items": [
 920+                    { "text": "Overview", "link": "/api_overview" },
 921+                    { "text": "API Documentation", "link": "/api_docs" },
 922+                    { "text": "Keyboard Support", "link": "/reference_configurator_support" },
 923+                    { "text": "Adding Default Keymaps", "link": "/configurator_default_keymaps" }
 924+                ]
 925+            }
 926+        ]
 927+    },
 928+    {
 929+        "text": "CLI",
 930+        "items": [
 931+            { "text": "Overview", "link": "/cli" },
 932+            { "text": "Configuration", "link": "/cli_configuration" },
 933+            { "text": "Commands", "link": "/cli_commands" },
 934+            { "text": "Tab Completion", "link": "/cli_tab_complete" }
 935+        ]
 936+    },
 937+    {
 938+        "text": "Using QMK",
 939+        "items": [
 940+            {
 941+                "text": "Guides",
 942+                "items": [
 943+                    { "text": "Customizing Functionality", "link": "/custom_quantum_functions" },
 944+                    { "text": "Driver Installation with Zadig", "link": "/driver_installation_zadig" },
 945+                    { "text": "Keymap Overview", "link": "/keymap" },
 946+                    {
 947+                        "text": "Development Environments",
 948+                        "items": [{ "text": "Docker Guide", "link": "/getting_started_docker" }]
 949+                    },
 950+                    {
 951+                        "text": "Flashing",
 952+                        "items": [
 953+                            { "text": "Flashing", "link": "/flashing" },
 954+                            { "text": "Flashing ATmega32A (ps2avrgb)", "link": "/flashing_bootloadhid" }
 955+                        ]
 956+                    },
 957+                    {
 958+                        "text": "IDEs",
 959+                        "items": [
 960+                            { "text": "Using Eclipse with QMK", "link": "/other_eclipse" },
 961+                            { "text": "Using VSCode with QMK", "link": "/other_vscode" }
 962+                        ]
 963+                    },
 964+                    {
 965+                        "text": "Git Best Practices",
 966+                        "items": [
 967+                            { "text": "Introduction", "link": "/newbs_git_best_practices" },
 968+                            { "text": "Your Fork", "link": "/newbs_git_using_your_master_branch" },
 969+                            { "text": "Merge Conflicts", "link": "/newbs_git_resolving_merge_conflicts" },
 970+                            { "text": "Fixing Your Branch", "link": "/newbs_git_resynchronize_a_branch" }
 971+                        ]
 972+                    }
 973+                ]
 974+            },
 975+            {
 976+                "text": "Simple Keycodes",
 977+                "items": [
 978+                    { "text": "Full List", "link": "/keycodes" },
 979+                    { "text": "Basic Keycodes", "link": "/keycodes_basic" },
 980+                    { "text": "Language-Specific Keycodes", "link": "/reference_keymap_extras" },
 981+                    { "text": "Modifier Keys", "link": "/feature_advanced_keycodes" },
 982+                    { "text": "Quantum Keycodes", "link": "/quantum_keycodes" },
 983diff --git a/docs/_summary.md b/docs/_summary.md
 984deleted file mode 100644
 985index adf48cec85dc66e45d48c9382f385539e321c1d1..0000000000000000000000000000000000000000
 986--- a/docs/_summary.md
 987+++ /dev/null
 988@@ -1,204 +0,0 @@
 989-* Tutorial
 990-  * [Introduction](newbs.md)
 991-  * [Setup](newbs_getting_started.md)
 992-  * [Building Your First Firmware](newbs_building_firmware.md)
 993-  * [Flashing Firmware](newbs_flashing.md)
 994-  * [Getting Help/Support](support.md)
 995-  * [External Userspace](newbs_external_userspace.md)
 996-  * [Other Resources](newbs_learn_more_resources.md)
 997-  * [Syllabus](syllabus.md)
 998-
 999-* FAQs
1000-  * [General FAQ](faq_general.md)
1001-  * [Build/Compile QMK](faq_build.md)
1002-  * [Troubleshooting QMK](faq_misc.md)
1003-  * [Debugging QMK](faq_debug.md)
1004-  * [Keymap FAQ](faq_keymap.md)
1005-  * [Squeezing Space from AVR](squeezing_avr.md)
1006-  * [Glossary](reference_glossary.md)
1007-
1008-* Configurator
1009-  * [Overview](newbs_building_firmware_configurator.md)
1010-  * [Step by Step](configurator_step_by_step.md)
1011-  * [Troubleshooting](configurator_troubleshooting.md)
1012-  * [Architecture](configurator_architecture.md)
1013-  * QMK API
1014-    * [Overview](api_overview.md)
1015-    * [API Documentation](api_docs.md)
1016-    * [Keyboard Support](reference_configurator_support.md)
1017-    * [Adding Default Keymaps](configurator_default_keymaps.md)
1018-
1019-* CLI
1020-    * [Overview](cli.md)
1021-    * [Configuration](cli_configuration.md)
1022-    * [Commands](cli_commands.md)
1023-    * [Tab Completion](cli_tab_complete.md)
1024-
1025-* Using QMK
1026-  * Guides
1027-    * [Customizing Functionality](custom_quantum_functions.md)
1028-    * [Driver Installation with Zadig](driver_installation_zadig.md)
1029-    * [Keymap Overview](keymap.md)
1030-    * Development Environments
1031-      * [Docker Guide](getting_started_docker.md)
1032-    * Flashing
1033-      * [Flashing](flashing.md)
1034-      * [Flashing ATmega32A (ps2avrgb)](flashing_bootloadhid.md)
1035-    * IDEs
1036-      * [Using Eclipse with QMK](other_eclipse.md)
1037-      * [Using VSCode with QMK](other_vscode.md)
1038-    * Git Best Practices
1039-      * [Introduction](newbs_git_best_practices.md)
1040-      * [Your Fork](newbs_git_using_your_master_branch.md)
1041-      * [Merge Conflicts](newbs_git_resolving_merge_conflicts.md)
1042-      * [Fixing Your Branch](newbs_git_resynchronize_a_branch.md)
1043-
1044-  * Simple Keycodes
1045-    * [Full List](keycodes.md)
1046-    * [Basic Keycodes](keycodes_basic.md)
1047-    * [Language-Specific Keycodes](reference_keymap_extras.md)
1048-    * [Modifier Keys](feature_advanced_keycodes.md)
1049-    * [Quantum Keycodes](quantum_keycodes.md)
1050-    * [Magic Keycodes](keycodes_magic.md)
1051-
1052-  * Advanced Keycodes
1053-    * [Command](feature_command.md)
1054-    * [Dynamic Macros](feature_dynamic_macros.md)
1055-    * [Grave Escape](feature_grave_esc.md)
1056-    * [Leader Key](feature_leader_key.md)
1057-    * [Mod-Tap](mod_tap.md)
1058-    * [Macros](feature_macros.md)
1059-    * [Mouse Keys](feature_mouse_keys.md)
1060-    * [Programmable Button](feature_programmable_button.md)
1061-    * [Repeat Key](feature_repeat_key.md)
1062-    * [Space Cadet Shift](feature_space_cadet.md)
1063-    * [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
1064-
1065-  * Software Features
1066-    * [Auto Shift](feature_auto_shift.md)
1067-    * [Autocorrect](feature_autocorrect.md)
1068-    * [Caps Word](feature_caps_word.md)
1069-    * [Combos](feature_combo.md)
1070-    * [Debounce API](feature_debounce_type.md)
1071-    * [Digitizer](feature_digitizer.md)
1072-    * [EEPROM](feature_eeprom.md)
1073-    * [Key Lock](feature_key_lock.md)
1074-    * [Key Overrides](feature_key_overrides.md)
1075-    * [Layers](feature_layers.md)
1076-    * [One Shot Keys](one_shot_keys.md)
1077-    * [OS Detection](feature_os_detection.md)
1078-    * [Raw HID](feature_rawhid.md)
1079-    * [Secure](feature_secure.md)
1080-    * [Send String](feature_send_string.md)
1081-    * [Sequencer](feature_sequencer.md)
1082-    * [Swap Hands](feature_swap_hands.md)
1083-    * [Tap Dance](feature_tap_dance.md)
1084-    * [Tap-Hold Configuration](tap_hold.md)
1085-    * [Tri Layer](feature_tri_layer.md)
1086-    * [Unicode](feature_unicode.md)
1087-    * [Userspace](feature_userspace.md)
1088diff --git a/docs/adc_driver.md b/docs/adc_driver.md
1089index dd928e1e7f0a5022743d4eb030d5bafd4e626963..a1ab5a525132187726d0ee1a903289f43e07a9e8 100644
1090--- a/docs/adc_driver.md
1091+++ b/docs/adc_driver.md
1092@@ -1,6 +1,6 @@
1093 # ADC Driver
1094 
1095diff --git a/docs/apa102_driver.md b/docs/apa102_driver.md
1096index 1da2de6ca357c6d31fd834f7c16c558bad3eedff..0f905e3f1811a737389d5818417e8ae8cc19fa1c 100644
1097--- a/docs/apa102_driver.md
1098+++ b/docs/apa102_driver.md
1099@@ -1,10 +1,10 @@
1100-# APA102 Driver :id=apa102-driver
1101+# APA102 Driver {#apa102-driver}
1102 
1103-This driver provides support for APA102 addressable RGB LEDs. They are similar to the [WS2812](ws2812_driver.md) LEDs, but have increased data and refresh rates.
1104+This driver provides support for APA102 addressable RGB LEDs. They are similar to the [WS2812](ws2812_driver) LEDs, but have increased data and refresh rates.
1105 
1106-## Usage :id=usage
1107+## Usage {#usage}
1108 
1109-In most cases, the APA102 driver code is automatically included if you are using either the [RGBLight](feature_rgblight.md) or [RGB Matrix](feature_rgb_matrix.md) feature with the `apa102` driver set, and you would use those APIs instead.
1110+In most cases, the APA102 driver code is automatically included if you are using either the [RGBLight](feature_rgblight) or [RGB Matrix](feature_rgb_matrix) feature with the `apa102` driver set, and you would use those APIs instead.
1111 
1112 However, if you need to use the driver standalone, add the following to your `rules.mk`:
1113 
1114@@ -14,7 +14,7 @@ APA102_DRIVER_REQUIRED = yes
1115 
1116 You can then call the APA102 API by including `apa102.h` in your code.
1117 
1118-## Basic Configuration :id=basic-configuration
1119+## Basic Configuration {#basic-configuration}
1120 
1121 Add the following to your `config.h`:
1122 
1123@@ -24,13 +24,13 @@ Add the following to your `config.h`:
1124 |`APA102_CI_PIN`            |*Not defined*|The GPIO pin connected to the CI pin of the first LED in the chain|
1125 |`APA102_DEFAULT_BRIGHTNESS`|`31`         |The default global brightness level of the LEDs, from 0 to 31     |
1126 
1127-## API :id=api
1128+## API {#api}
1129 
1130 ### `void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds)`
1131 
1132 Send RGB data to the APA102 LED chain.
1133 
1134-#### Arguments :id=api-apa102-setleds-arguments
1135+#### Arguments {#api-apa102-setleds-arguments}
1136 
1137  - `rgb_led_t *start_led`  
1138    A pointer to the LED array.
1139@@ -43,7 +43,7 @@ Send RGB data to the APA102 LED chain.
1140 
1141 Set the global brightness.
1142 
1143-#### Arguments :id=api-apa102-set-brightness-arguments
1144+#### Arguments {#api-apa102-set-brightness-arguments}
1145 
1146  - `uint8_t brightness`  
1147    The brightness level to set, from 0 to 31.
1148diff --git a/docs/api_docs.md b/docs/api_docs.md
1149index 3324bc545bca95db9d7e834605b62ed4769eecf3..f4ba19c42a05b476f29e2c9577a55ebd971aef04 100644
1150--- a/docs/api_docs.md
1151+++ b/docs/api_docs.md
1152@@ -67,7 +67,7 @@ Once your compile job has finished you'll check the `result` key. The value of t
1153 * `firmware_source_url`: A list of URLs for the full firmware source code
1154 * `output`: The stdout and stderr for this compile job. Errors will be found here.
1155 
1156-## Constants :id=qmk-constants
1157+## Constants {#qmk-constants}
1158 
1159 If you're writing a tool that leverages constants used within QMK, the API is used to publish "locked-in" versions of those constants in order to ensure that any third-party tooling has a canonical set of information to work with.
1160 
1161@@ -81,9 +81,13 @@ $ curl https://keyboards.develop.qmk.fm/v1/constants_metadata.json # For `develo
1162 {"last_updated": "2022-11-26 12:00:00 GMT", "constants": {"keycodes": ["0.0.1", "0.0.2"]}}
1163 ```
1164 
1165-!> Versions exported by the `master` endpoint are locked-in. Any extra versions that exist on the `develop` endpoint which don't exist in `master` are subject to change.
1166+::: warning
1167+Versions exported by the `master` endpoint are locked-in. Any extra versions that exist on the `develop` endpoint which don't exist in `master` are subject to change.
1168+:::
1169 
1170-?> Only keycodes are currently published, but over time all other "externally visible" IDs are expected to appear on these endpoints.
1171+::: tip
1172+Only keycodes are currently published, but over time all other "externally visible" IDs are expected to appear on these endpoints.
1173+:::
1174 
1175 To retrieve the constants associated with a subsystem, the endpoint format is as follows:
1176 ```
1177diff --git a/docs/api_overview.md b/docs/api_overview.md
1178index f851a48a4af4b9870bc86d329b6d08763a1954a7..c8ec42e947635721db31f52465b9bc3a09290dc4 100644
1179--- a/docs/api_overview.md
1180+++ b/docs/api_overview.md
1181@@ -4,12 +4,12 @@ The QMK API provides an asynchronous API that Web and GUI tools can use to compi
1182 
1183 ## App Developers
1184 
1185-If you are an app developer interested in using this API in your application you should head over to [Using The API](api_docs.md).
1186+If you are an app developer interested in using this API in your application you should head over to [Using The API](api_docs).
1187 
1188 ## Keyboard Maintainers
1189 
1190-If you would like to enhance your keyboard's support in the QMK Compiler API head over to the [Keyboard Support](reference_configurator_support.md) section.
1191+If you would like to enhance your keyboard's support in the QMK Compiler API head over to the [Keyboard Support](reference_configurator_support) section.
1192 
1193 ## Backend Developers
1194 
1195-If you are interested in working on the API itself you should start by setting up a [Development Environment](api_development_environment.md), then check out [Hacking On The API](api_development_overview.md).
1196+If you are interested in working on the API itself you should start by setting up a [Development Environment](api_development_environment), then check out [Hacking On The API](api_development_overview).
1197diff --git a/docs/audio_driver.md b/docs/audio_driver.md
1198index 03c0a824dfe7c91b6ea910826213d2514ae2b4f0..4a71b4f411cdf520c5d608c6ed642d0f8803866b 100644
1199--- a/docs/audio_driver.md
1200+++ b/docs/audio_driver.md
1201@@ -1,11 +1,11 @@
1202-# Audio Driver :id=audio-driver
1203+# Audio Driver {#audio-driver}
1204 
1205diff --git a/docs/breaking_changes.md b/docs/breaking_changes.md
1206index 1c0b1bafceb3e766331d1bd68681aff90351984c..d72a8d476149ffa88bbceb0521786d3be1ef7de3 100644
1207--- a/docs/breaking_changes.md
1208+++ b/docs/breaking_changes.md
1209@@ -10,10 +10,10 @@ Practically, this means QMK merges the `develop` branch into the `master` branch
1210 
1211 ## What has been included in past Breaking Changes?
1212 
1213-* [2024 May 26](ChangeLog/20240526.md)
1214-* [2024 Feb 25](ChangeLog/20240225.md)
1215-* [2023 Nov 26](ChangeLog/20231126.md)
1216-* [Older Breaking Changes](breaking_changes_history.md)
1217+* [2024 May 26](ChangeLog/20240526)
1218+* [2024 Feb 25](ChangeLog/20240225)
1219+* [2023 Nov 26](ChangeLog/20231126)
1220+* [Older Breaking Changes](breaking_changes_history)
1221 
1222 ## When is the next Breaking Change?
1223 
1224@@ -71,7 +71,7 @@ This section documents various processes we use when running the Breaking Change
1225 ### 1 Week Before Merge
1226 
1227 * `develop` is now closed to PR merges, only critical bugfixes may be included
1228-* Announce that master will be closed from <2 Days Before> to <Day of Merge> -- message `@Breaking Changes Updates` on `#qmk_firmware` in Discord:
1229+* Announce that master will be closed from `<2 Days Before>` to `<Day of Merge>` -- message `@Breaking Changes Updates` on `#qmk_firmware` in Discord:
1230     * `@Breaking Changes Updates -- Hey folks, last day for functional PRs to be merged into qmk_firmware for this breaking changes cycle is today. After that, we're handling bugfixes only.`
1231 
1232 ### 2 Days Before Merge
1233@@ -136,7 +136,7 @@ This happens immediately after the previous `develop` branch is merged to `maste
1234 * Announce that both `master` and `develop` are now unlocked -- message `@Breaking Changes Updates` on `#qmk_firmware` in Discord:
1235     * `@Breaking Changes Updates -- Hey folks, develop has now been merged into master -- newest batch of changes are now available for everyone to use!`
1236 
1237-* (Optional) [update ChibiOS + ChibiOS-Contrib on `develop`](chibios_upgrade_instructions.md)
1238+* (Optional) [update ChibiOS + ChibiOS-Contrib on `develop`](chibios_upgrade_instructions)
1239 
1240 
1241 ### Set up Discord events for the next cycle
1242diff --git a/docs/breaking_changes_history.md b/docs/breaking_changes_history.md
1243index 6f0f25be0e6d67763fdbc6a4c61ec82ac5f0f3c6..8c01e35e6889168cd62a1121c058e1739520e7df 100644
1244--- a/docs/breaking_changes_history.md
1245+++ b/docs/breaking_changes_history.md
1246@@ -2,22 +2,22 @@
1247 
1248 This page links to all previous changelogs from the QMK Breaking Changes process.
1249 
1250-* [2024 May 26](ChangeLog/20240526.md) - version 0.25.0
1251-* [2024 Feb 25](ChangeLog/20240225.md) - version 0.24.0
1252-* [2023 Nov 26](ChangeLog/20231126.md) - version 0.23.0
1253-* [2023 Aug 27](ChangeLog/20230827.md) - version 0.22.0
1254-* [2023 May 28](ChangeLog/20230528.md) - version 0.21.0
1255-* [2023 Feb 26](ChangeLog/20230226.md) - version 0.20.0
1256-* [2022 Nov 26](ChangeLog/20221126.md) - version 0.19.0
1257-* [2022 Aug 27](ChangeLog/20220827.md) - version 0.18.0
1258-* [2022 May 28](ChangeLog/20220528.md) - version 0.17.0
1259-* [2022 Feb 26](ChangeLog/20220226.md) - version 0.16.0
1260-* [2021 Nov 27](ChangeLog/20211127.md) - version 0.15.0
1261-* [2021 Aug 28](ChangeLog/20210828.md) - version 0.14.0
1262-* [2021 May 29](ChangeLog/20210529.md) - version 0.13.0
1263-* [2021 Feb 27](ChangeLog/20210227.md) - version 0.12.0
1264-* [2020 Nov 28](ChangeLog/20201128.md) - version 0.11.0
1265-* [2020 Aug 29](ChangeLog/20200829.md) - version 0.10.0
1266-* [2020 May 30](ChangeLog/20200530.md) - version 0.9.0
1267-* [2020 Feb 29](ChangeLog/20200229.md) - version 0.8.0
1268-* [2019 Aug 30](ChangeLog/20190830.md) - version 0.7.0
1269+* [2024 May 26](ChangeLog/20240526) - version 0.25.0
1270+* [2024 Feb 25](ChangeLog/20240225) - version 0.24.0
1271+* [2023 Nov 26](ChangeLog/20231126) - version 0.23.0
1272+* [2023 Aug 27](ChangeLog/20230827) - version 0.22.0
1273+* [2023 May 28](ChangeLog/20230528) - version 0.21.0
1274+* [2023 Feb 26](ChangeLog/20230226) - version 0.20.0
1275+* [2022 Nov 26](ChangeLog/20221126) - version 0.19.0
1276+* [2022 Aug 27](ChangeLog/20220827) - version 0.18.0
1277+* [2022 May 28](ChangeLog/20220528) - version 0.17.0
1278+* [2022 Feb 26](ChangeLog/20220226) - version 0.16.0
1279+* [2021 Nov 27](ChangeLog/20211127) - version 0.15.0
1280+* [2021 Aug 28](ChangeLog/20210828) - version 0.14.0
1281+* [2021 May 29](ChangeLog/20210529) - version 0.13.0
1282+* [2021 Feb 27](ChangeLog/20210227) - version 0.12.0
1283+* [2020 Nov 28](ChangeLog/20201128) - version 0.11.0
1284+* [2020 Aug 29](ChangeLog/20200829) - version 0.10.0
1285+* [2020 May 30](ChangeLog/20200530) - version 0.9.0
1286+* [2020 Feb 29](ChangeLog/20200229) - version 0.8.0
1287+* [2019 Aug 30](ChangeLog/20190830) - version 0.7.0
1288diff --git a/docs/cli.md b/docs/cli.md
1289index 0fa068dc7b0cd8b19a921f7b804ceed231941f27..7d4c10cedd76997d6d7e75cde38e8a6f6bf55b14 100644
1290--- a/docs/cli.md
1291+++ b/docs/cli.md
1292@@ -1,14 +1,14 @@
1293-# QMK CLI :id=qmk-cli
1294+# QMK CLI {#qmk-cli}
1295 
1296-## Overview :id=overview
1297+## Overview {#overview}
1298 
1299 The QMK CLI (command line interface) makes building and working with QMK keyboards easier. We have provided a number of commands to simplify and streamline tasks such as obtaining and compiling the QMK firmware, creating keymaps, and more.
1300 
1301-### Requirements :id=requirements
1302+### Requirements {#requirements}
1303 
1304diff --git a/docs/cli_commands.md b/docs/cli_commands.md
1305index e97af79d33f1db25ea9e2e78c2f1ada0014d8e0a..6f82d9c9de09e53921d5bd185a96d114209336e7 100644
1306--- a/docs/cli_commands.md
1307+++ b/docs/cli_commands.md
1308@@ -86,7 +86,7 @@ qmk compile -j 0 -kb <keyboard_name>
1309 
1310 ## `qmk flash`
1311 
1312diff --git a/docs/cli_development.md b/docs/cli_development.md
1313index 8d4ee625352f5e50560c7fe3354ee25cb2874d07..e94884de2e965efb8da0bb0b00a23c429b461e58 100644
1314--- a/docs/cli_development.md
1315+++ b/docs/cli_development.md
1316@@ -202,7 +202,9 @@ We use nose2, flake8, and yapf to test, lint, and format code. You can use the `
1317 
1318 We use [yapf](https://github.com/google/yapf) to automatically format code. Our configuration is in the `[yapf]` section of `setup.cfg`.
1319 
1320-?> Tip- Many editors can use yapf as a plugin to automatically format code as you type.
1321+::: tip
1322+Tip- Many editors can use yapf as a plugin to automatically format code as you type.
1323+:::
1324 
1325 ## Testing Details
1326 
1327diff --git a/docs/coding_conventions_python.md b/docs/coding_conventions_python.md
1328index 1ed27ee46abbef3706a0278e510bc7c1ff5bc09d..502ee9102edf4380ce5dfc390cae14e28a45e334 100644
1329--- a/docs/coding_conventions_python.md
1330+++ b/docs/coding_conventions_python.md
1331@@ -15,7 +15,7 @@ Most of our style follows PEP8 with some local modifications to make things less
1332 
1333 # YAPF
1334 
1335-You can use [yapf](https://github.com/google/yapf) to style your code. We provide a config in [setup.cfg](setup.cfg).
1336+You can use [yapf](https://github.com/google/yapf) to style your code. We provide a config in [setup.cfg](https://github.com/qmk/qmk_firmware/blob/master/setup.cfg).
1337 
1338 # Imports
1339 
1340diff --git a/docs/compatible_microcontrollers.md b/docs/compatible_microcontrollers.md
1341index 197033f78b5768ad2868cc455050e8c7b72bbf34..785aee30d5cce1cdc4bd42eadea62d7269bd5a7e 100644
1342--- a/docs/compatible_microcontrollers.md
1343+++ b/docs/compatible_microcontrollers.md
1344@@ -73,7 +73,7 @@ You can also use any ARM chip with USB that [ChibiOS](https://www.chibios.org) s
1345 
1346 * [RP2040](https://www.raspberrypi.com/documentation/microcontrollers/rp2040.html)
1347 
1348-For a detailed overview about the RP2040 support by QMK see the [dedicated RP2040 page](platformdev_rp2040.md).
1349+For a detailed overview about the RP2040 support by QMK see the [dedicated RP2040 page](platformdev_rp2040).
1350 
1351 ## Atmel ATSAM
1352 
1353diff --git a/docs/config_options.md b/docs/config_options.md
1354index 046429a587549b0f16cd6ee42573976f606ba2d6..236649a0ea5b3fc4df336d27b904152d0018d383 100644
1355--- a/docs/config_options.md
1356+++ b/docs/config_options.md
1357@@ -6,11 +6,13 @@ There are three main types of configuration files in QMK:
1358 
1359 * `config.h`, which contains various preprocessor directives (`#define`, `#ifdef`)
1360 * `rules.mk`, which contains additional variables
1361-* `info.json`, which is utilized for [data-driven configuration](https://docs.qmk.fm/#/data_driven_config)
1362+* `info.json`, which is utilized for [data-driven configuration](data_driven_config)
1363 
1364 This page will only discuss the first two types, `config.h` and `rules.mk`.
1365 
1366diff --git a/docs/configurator_default_keymaps.md b/docs/configurator_default_keymaps.md
1367index 4d3c1b8f47c1e63d5891c9f14f2e1e9f98a03277..40304dc57b78cc5cdd3308f67cdfc80dbc312105 100644
1368--- a/docs/configurator_default_keymaps.md
1369+++ b/docs/configurator_default_keymaps.md
1370@@ -1,9 +1,9 @@
1371-# Adding Default Keymaps to QMK Configurator :id=adding-default-keymaps
1372+# Adding Default Keymaps to QMK Configurator {#adding-default-keymaps}
1373 
1374 This page covers how to add a default keymap for a keyboard to QMK Configurator.
1375 
1376 
1377-## Technical Information :id=technical-information
1378+## Technical Information {#technical-information}
1379 
1380 QMK Configurator uses JSON as its native file format for keymaps. As much as possible, these should be kept such that they behave the same as running `make <keyboard>:default` from `qmk_firmware`.
1381 
1382@@ -27,7 +27,7 @@ f14629ed1cd7c7ec9089604d64f29a99981558e8 Remove/migrate action_get_macro()s from
1383 In this example, `f14629ed1cd7c7ec9089604d64f29a99981558e8` is the value that should be used for `commit`.
1384 
1385 
1386-## Example :id=example
1387+## Example {#example}
1388 
1389 If one wished to add a default keymap for the H87a by Hineybush, one would run the `git log` command above against the H87a's default keymap in `qmk_firmware`:
1390 
1391@@ -96,9 +96,9 @@ The default keymap uses the `LAYOUT_all` macro, so that will be the value of the
1392 The white space in the `layers` arrays have no effect on the functionality of the keymap, but are used to make these files easier for humans to read.
1393 
1394 
1395-## Caveats :id=caveats
1396+## Caveats {#caveats}
1397 
1398-### Layers can only be referenced by number :id=layer-references
1399+### Layers can only be referenced by number {#layer-references}
1400 
1401 A common QMK convention is to name layers using a series of `#define`s, or an `enum` statement:
1402 
1403@@ -112,11 +112,11 @@ enum layer_names {
1404 
1405 This works in C, but for Configurator, you *must* use the layer's numeric index – `MO(_FN)` would need to be `MO(2)` in the above example.
1406 
1407-### No support for custom code of any kind :id=custom-code
1408+### No support for custom code of any kind {#custom-code}
1409 
1410diff --git a/docs/configurator_step_by_step.md b/docs/configurator_step_by_step.md
1411index c3cc2bfcdbcb8b83a32f3bb45c164f49a711fa8e..4da9ea04a28a41c4630407a2118a15ca204034e2 100644
1412--- a/docs/configurator_step_by_step.md
1413+++ b/docs/configurator_step_by_step.md
1414@@ -6,11 +6,15 @@ This page describes the steps for building your firmware in QMK Configurator.
1415 
1416 Click the drop down box and select the keyboard you want to create a keymap for.
1417 
1418-?> If your keyboard has several versions, make sure you select the correct one.
1419+::: tip
1420+If your keyboard has several versions, make sure you select the correct one.
1421+:::
1422 
1423 I'll say that again because it's important:
1424 
1425-!> **MAKE SURE YOU SELECT THE RIGHT VERSION!**
1426+::: warning
1427+**MAKE SURE YOU SELECT THE RIGHT VERSION!**
1428+:::
1429 
1430diff --git a/docs/configurator_troubleshooting.md b/docs/configurator_troubleshooting.md
1431index 80b9713b64eacf548a60f143f1b058231ddaf2d4..634b05c206598f5f1e8d697209401589875141ad 100644
1432--- a/docs/configurator_troubleshooting.md
1433+++ b/docs/configurator_troubleshooting.md
1434@@ -14,8 +14,8 @@ If you're referring to having three spots for space bar, the best course of acti
1435 
1436 Please see:
1437 
1438-* [Basic Keycode Reference](keycodes_basic.md)
1439-* [Advanced Keycode Reference](feature_advanced_keycodes.md)
1440+* [Basic Keycode Reference](keycodes_basic)
1441+* [Advanced Keycode Reference](feature_advanced_keycodes)
1442 
1443 ## It won't compile
1444